Skip to content

Commit

Permalink
Tests etc (#179)
Browse files Browse the repository at this point in the history
* Add multiposition test to TIFF test

* Move config files out of GitHub repo
  • Loading branch information
zacsimile authored Aug 21, 2022
1 parent d3d2816 commit 22356a7
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 16 deletions.
1 change: 1 addition & 0 deletions src/aslm/config/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .config import *
40 changes: 40 additions & 0 deletions src/aslm/config/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import os
import shutil
import platform
from pathlib import Path

def get_configuration_paths():
# Establish a base directory in AppData/.ASLM for Windows or ~/.ASLM for Mac and Linux
if platform.system() == 'Windows':
base_directory = os.getenv('APPDATA')
else:
base_directory = os.getenv('HOME')
aslm_directory = os.path.join(base_directory, '.ASLM')
if not os.path.exists(aslm_directory):
os.mkdir(aslm_directory)
configuration_directory = Path(os.path.join(aslm_directory, 'config'))
if not os.path.exists(configuration_directory):
os.mkdir(configuration_directory)

# Configuration files should be stored in this directory
configuration_path = Path.joinpath(configuration_directory, 'configuration.yml')
experiment_path = Path.joinpath(configuration_directory, 'experiment.yml')
etl_constants_path = Path.joinpath(configuration_directory, 'etl_constants.yml')

# If they are not already, copy the default ones that ship with the software too this folder
if not os.path.exists(configuration_path):
copy_base_directory = Path(__file__).resolve().parent
copy_configuration_path = Path.joinpath(copy_base_directory, 'configuration.yml')
shutil.copyfile(copy_configuration_path, configuration_path)

if not os.path.exists(experiment_path):
copy_base_directory = Path(__file__).resolve().parent
copy_experiment_path = Path.joinpath(copy_base_directory, 'experiment.yml')
shutil.copyfile(copy_experiment_path, experiment_path)

if not os.path.exists(etl_constants_path):
copy_base_directory = Path(__file__).resolve().parent
copy_etl_constants_path = Path.joinpath(copy_base_directory, 'etl_constants.yml')
shutil.copyfile(copy_etl_constants_path, etl_constants_path)

return configuration_path, experiment_path, etl_constants_path
11 changes: 3 additions & 8 deletions src/aslm/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import tkinter as tk
import platform
from aslm.log_files.log_functions import log_setup
from aslm.config import get_configuration_paths

# Local Imports
from aslm.controller.aslm_controller import ASLM_controller as Controller
Expand Down Expand Up @@ -64,14 +65,8 @@ def main():
python main.py --synthetic_hardware
"""

# Specify the Default Configuration File Directories (located in src/config)
base_directory = Path(__file__).resolve().parent
configuration_directory = Path.joinpath(base_directory, 'config')

# Full file paths.
configuration_path = Path.joinpath(configuration_directory, 'configuration.yml')
experiment_path = Path.joinpath(configuration_directory, 'experiment.yml')
etl_constants_path = Path.joinpath(configuration_directory, 'etl_constants.yml')
# Specify the Default Configuration paths
configuration_path, experiment_path, etl_constants_path = get_configuration_paths()

# Parse command line arguments
parser = argparse.ArgumentParser(description='Multiscale Microscope Command Line Arguments')
Expand Down
26 changes: 18 additions & 8 deletions test/model/model_features/data_sources/test_tiff_data_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import numpy as np

def tiff_write_read(is_ome=False):
def tiff_write_read(is_ome=False, multiposition=False):
from aslm.model.dummy_model import get_dummy_model
from aslm.model.model_features.data_sources.tiff_data_source import TiffDataSource

Expand All @@ -11,6 +11,8 @@ def tiff_write_read(is_ome=False):
z_steps = np.random.randint(1,10)
model.experiment.MicroscopeState['image_mode'] = 'z-stack'
model.experiment.MicroscopeState['number_z_steps'] = z_steps
if multiposition:
model.experiment.MicroscopeState['is_multiposition'] = True

# Establish a TIFF data source
if is_ome:
Expand All @@ -20,16 +22,19 @@ def tiff_write_read(is_ome=False):
ds = TiffDataSource(fn)
ds.set_metadata_from_configuration_experiment(model.configuration, model.experiment)

# Populate one image per channel per timepoint
n_images = ds.shape_c*ds.shape_z*ds.shape_t
# Populate one image per channel per timepoint per positioj
n_images = ds.shape_c*ds.shape_z*ds.shape_t*ds.positions
data = np.random.rand(n_images, ds.shape_x, ds.shape_y)
file_names = []
for i in range(n_images):
ds.write(data[i,...].squeeze())
c, z, _, _ = ds._cztp_indices(i, True)
if c == 0 and z == 0:
file_names.extend(ds.file_name)
ds.close()

# For each file...
for i, fn in enumerate(ds.file_name):
print(fn)
for i, fn in enumerate(file_names):
ds2 = TiffDataSource(fn, 'r')
# Make sure XYZ size is correct (and C and T are each of size 1)
assert((ds2.shape_x == ds.shape_x) and (ds2.shape_y == ds.shape_y) \
Expand All @@ -41,16 +46,21 @@ def tiff_write_read(is_ome=False):

try:
# Clean up
for fn in ds.file_name:
dirs = []
for fn in file_names:
os.remove(fn)
dirs.append(os.path.dirname(fn))
for dn in list(set(dirs)):
os.rmdir(dn)
except PermissionError:
# Windows seems to think these files are still open
pass


def test_tiff_write_read():
tiff_write_read(False)


def test_tiff_write_read_ome():
tiff_write_read(True)

def test_tiff_write_read_ome_multiposition():
tiff_write_read(True, True)

0 comments on commit 22356a7

Please sign in to comment.