From f835dc1377944d3fa2ee1f55532c603ef53b0110 Mon Sep 17 00:00:00 2001
From: Eduardo Gonzalez Solares <eglez@ast.cam.ac.uk>
Date: Fri, 10 May 2019 13:59:53 +0100
Subject: [PATCH] Add function to parse mocasic file

---
 stpt_pipeline/mosaic_functions.py | 21 +++++++++++++++++++++
 stpt_pipeline/preprocess.py       | 14 +++++++-------
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/stpt_pipeline/mosaic_functions.py b/stpt_pipeline/mosaic_functions.py
index 6af9e3f..609a6eb 100644
--- a/stpt_pipeline/mosaic_functions.py
+++ b/stpt_pipeline/mosaic_functions.py
@@ -1,4 +1,6 @@
 from os import listdir
+from pathlib import Path
+from typing import Dict
 
 import dask.array as da
 import numpy as np
@@ -111,6 +113,25 @@ def get_mosaic_file(root_dir):
     return ''
 
 
+def parse_mosaic_file(root_dir: Path) -> Dict[str, str]:
+    """Return contents of mosaic file as dictionary.
+
+    Parameters
+    ----------
+    root_dir
+        Directory containing mosaic file
+
+    Returns
+    -------
+    dictionary of key, values with mosaic file contents
+    """
+    mosaic_file = get_mosaic_file(root_dir)
+    with open(mosaic_file) as fh:
+        items = [item.strip().split(':', 1) for item in fh.readlines()]
+        res = {k[0]: k[1] for k in items}
+        return res
+
+
 def get_img_cube(
     root_dir,
     imgs,
diff --git a/stpt_pipeline/preprocess.py b/stpt_pipeline/preprocess.py
index 046b83b..2125ab9 100644
--- a/stpt_pipeline/preprocess.py
+++ b/stpt_pipeline/preprocess.py
@@ -8,15 +8,17 @@ import zarr
 from dask import delayed
 from distributed import Client, wait
 from scipy.ndimage import geometric_transform
+from zarr import blosc
 
 from imaxt_image.image import TiffImage
 from stpt_pipeline.utils import get_coords
 
-from .mosaic_functions import get_mosaic_file
+from .mosaic_functions import parse_mosaic_file
 from .settings import Settings
 from .stpt_displacement import defringe, magic_function
 
 log = logging.getLogger('owl.daemon.pipeline')
+blosc.use_threads = False  # TODO: Check if this makes it quicker or slower
 
 
 def read_flatfield(flat_file: Path):
@@ -141,14 +143,11 @@ def preprocess(root_dir: Path, flat_file: Path, output_dir: Path):
     z = zarr.group(out, 'w')
 
     dirs = list_directories(root_dir)
-    for d in dirs:
+    for d in dirs[:2]:
         # TODO: All this should be metadata
         section = re.compile(r'\d\d\d\d$').search(d.name).group()
-        mosaic_file = get_mosaic_file(d)
-        res = open(d / mosaic_file, 'r').read()
-        mrows = re.compile(r'mrows:(\d+)\n').search(res).groups()[0]
-        mcolumns = re.compile(r'mcolumns:(\d+)\n').search(res).groups()[0]
-        mrows, mcolumns = int(mrows), int(mcolumns)
+        mosaic = parse_mosaic_file(d)
+        mrows, mcolumns = int(mosaic['mrows']), int(mosaic['mcolumns'])
         fovs = mrows * mcolumns
         files = sorted(list(d.glob('*.tif')))
         files_ch1 = sorted(list(d.glob('*_01.tif')))
@@ -168,6 +167,7 @@ def preprocess(root_dir: Path, flat_file: Path, output_dir: Path):
         wait(fut)
 
     # Write metadata
+    # TODO: Write contents of mosaic file here as well
     z.attrs['sections'] = len(dirs)  # TODO: Read from mosaic file
     z.attrs['fovs'] = fovs
     z.attrs['mrows'] = mrows
-- 
GitLab