diff --git a/align.py b/align.py index 8cd9be3043e80d46228e675faa7a463344202300..233837955851d18ec0d87beb7f15a3c724a65e82 100644 --- a/align.py +++ b/align.py @@ -1,3 +1,4 @@ +from typing import List import numpy as np from droplet_growth import mic, register, poisson import tifffile as tf @@ -12,6 +13,7 @@ import nd2 import pandas as pd from skimage.measure import regionprops_table from scipy.ndimage import laplace, rotate +import json def align_multichip(BF_TRITC_2D_path, out_path, concentrations_path, template_path, labels_path, table_path, fit_poisson, nmax=10): @@ -31,8 +33,8 @@ def align_multichip(BF_TRITC_2D_path, out_path, concentrations_path, template_pa data = read_dask(BF_TRITC_2D_path) template16 = tf.imread(template_path) if rotate_template_deg != 0: - template16 = rotate(template16, rotate_template_deg) - print(f'Rotated template {rotate_template_deg} deg') + data = da.from_array(rotate(data, rotate_template_deg)) + print(f'Rotated data {rotate_template_deg} deg') big_labels = tf.imread(labels_path) fun = partial( @@ -55,6 +57,20 @@ def align_multichip(BF_TRITC_2D_path, out_path, concentrations_path, template_pa aligned = [o['stack'] for o in out] counts = [o['counts'] for o in out] + tvecs = [o['tvec'] for o in out] + + def prep_tvec(transform_dict): + transform_dict["tvec"] = List(transform_dict["tvec"]) + return transform_dict + + try: + transform_data = [map(prep_tvec, tvecs)] + with open(out_path.replace('.zarr', '.transform.json'), 'w') as f: + json.dump(transform_data, fp=f) + except Exception as e: + print('saving transform json failed: ', e.args) + + df = pd.concat(counts, ignore_index=True).sort_values(['[AB]','label']) df.to_csv(table_path) @@ -88,7 +104,7 @@ def align2D(stack_dask, path_tif, ab, template16=None, big_labels=None, unit='μ data = stack_dask.compute() aligned, tvec = register.align_stack( data, - path_to_save=path_tif, + path_to_save=None, template16=template16, mask2=big_labels, binnings=(2,16,2) @@ -105,8 +121,8 @@ def align2D(stack_dask, path_tif, ab, template16=None, big_labels=None, unit='μ ) counts.loc[:, 'poisson fit'] = l - counts.to_csv((cp := path_tif.replace('.tif', '-counts.csv')), index=None) - return {"stack": aligned, "counts": counts} + # counts.to_csv((cp := path_tif.replace('.tif', '-counts.csv')), index=None) + return {"stack": aligned, "counts": counts, 'tvec': tvec} def count(aligned:np.ndarray, ab=None): counts = mic.get_cell_numbers(aligned[1], aligned[2], threshold_abs=2, plot=False, bf=aligned[0])