From ab275fd8ae7d03e4f6f5c2ef7b39f15aeb76e045 Mon Sep 17 00:00:00 2001 From: Leonid Kostrykin Date: Wed, 15 Nov 2023 11:17:08 +0100 Subject: [PATCH] makes superdsm output tsv instead of csv --- tools/superdsm/run-superdsm.py | 20 +++++++- tools/superdsm/superdsm.xml | 5 +- tools/superdsm/test-data/cfg.tsv | 78 ++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 tools/superdsm/test-data/cfg.tsv diff --git a/tools/superdsm/run-superdsm.py b/tools/superdsm/run-superdsm.py index 71193439..334b90b8 100644 --- a/tools/superdsm/run-superdsm.py +++ b/tools/superdsm/run-superdsm.py @@ -12,6 +12,8 @@ import pathlib import shutil import tempfile +import io +import csv hyperparameters = [ @@ -44,6 +46,16 @@ def create_config(args): cfg[key] = value return cfg +def flatten_dict(d, sep='/'): + result = {} + for key, val in d.items(): + if isinstance(val, dict): + for sub_key, sub_val in flatten_dict(val, sep=sep).items(): + result[f'{key}{sep}{sub_key}'] = sub_val + else: + result[key] = val + return result + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Segmentation of cell nuclei in 2-D fluorescence microscopy images') @@ -87,8 +99,14 @@ def create_config(args): if args.do_cfg: print(f'Writing config to: {args.do_cfg}') + #cfg_buf = io.StringIO() + #cfg.dump_json(cfg_buf) + #cfg_json = json.loads(cfg_buf.get_value()) with open(args.do_cfg, 'w') as fp: - cfg.dump_json(fp) + tsv_out = csv.writer(fp, delimiter='\t') + tsv_out.writerow(['Hyperparameter', 'Value']) + for key, value in flatten_dict(cfg.entries).items(): + tsv_out.writerow([key, value]) if args.do_overlay: print(f'Writing overlay to: {args.do_overlay}') diff --git a/tools/superdsm/superdsm.xml b/tools/superdsm/superdsm.xml index 524fbbf7..a08a553d 100644 --- a/tools/superdsm/superdsm.xml +++ b/tools/superdsm/superdsm.xml @@ -28,7 +28,7 @@ --do-masks 'masks.png' #end if #if $do_cfg_enabled == 'true': - --do-cfg 'cfg.json' + --do-cfg 'cfg.tsv' #end if #if $do_overlay.do_overlay_enabled == 'true': --do-overlay 'overlay.png' @@ -131,7 +131,7 @@ outputs['do_masks_enabled'] == 'true' - + outputs['do_cfg_enabled'] == 'true' @@ -145,6 +145,7 @@ + diff --git a/tools/superdsm/test-data/cfg.tsv b/tools/superdsm/test-data/cfg.tsv new file mode 100644 index 00000000..eaf69936 --- /dev/null +++ b/tools/superdsm/test-data/cfg.tsv @@ -0,0 +1,78 @@ +Hyperparameter Value +c2f_region_analysis_min_norm_energy_improvement 0.1 +c2f_region_analysis_max_atom_norm_energy 0.05 +c2f_region_analysis_max_cluster_marker_irregularity 0.2 +dsm_AF_alpha 0.0005 +global_energy_minimization_AF_beta 0.66 +postprocess_mask_max_distance 1 +postprocess_mask_stdamp 2.0 +postprocess_max_norm_energy 0.2 +postprocess_min_contrast 1.35 +postprocess_min_object_radius 0.0 +AF_scale +preprocess/AF_sigma2 1.0 +preprocess/sigma2 65.05382386916237 +preprocess/enabled True +preprocess/sigma1 1.4142135623730951 +preprocess/offset_clip 3 +preprocess/lower_clip_mean False +dsm/AF_alpha 0.0005 +dsm/alpha 2.116 +dsm/AF_smooth_amount 0.2 +dsm/smooth_amount 13 +dsm/AF_smooth_subsample 0.4 +dsm/smooth_subsample 26 +dsm/AF_background_margin 0.4 +dsm/background_margin 26 +dsm/enabled True +dsm/cachesize 1 +dsm/cachetest +dsm/sparsity_tol 0 +dsm/init elliptical +dsm/epsilon 1.0 +dsm/scale 1000 +dsm/gaussian_shape_multiplier 2 +dsm/smooth_mat_dtype float32 +dsm/smooth_mat_max_allocations inf +dsm/cp_timeout 300 +c2f-region-analysis/AF_min_atom_radius 0.33 +c2f-region-analysis/min_atom_radius 30 +c2f-region-analysis/enabled True +c2f-region-analysis/seed_connectivity 8 +c2f-region-analysis/max_atom_norm_energy 0.05 +c2f-region-analysis/min_norm_energy_improvement 0.1 +c2f-region-analysis/max_cluster_marker_irregularity 0.2 +global-energy-minimization/AF_beta 0.66 +global-energy-minimization/beta 2793.1200000000003 +global-energy-minimization/AF_max_seed_distance inf +global-energy-minimization/max_seed_distance inf +global-energy-minimization/enabled True +global-energy-minimization/strict True +global-energy-minimization/max_iter 5 +global-energy-minimization/gamma 0.8 +global-energy-minimization/max_work_amount 1000000 +postprocess/AF_min_object_radius 0.0 +postprocess/min_object_radius 0.0 +postprocess/AF_max_object_radius inf +postprocess/max_object_radius inf +postprocess/AF_min_glare_radius inf +postprocess/min_glare_radius inf +postprocess/enabled True +postprocess/max_norm_energy 0.2 +postprocess/discard_image_boundary False +postprocess/min_boundary_obj_radius 0 +postprocess/max_eccentricity 0.99 +postprocess/max_boundary_eccentricity inf +postprocess/exterior_scale 5 +postprocess/exterior_offset 5 +postprocess/min_contrast 1.35 +postprocess/contrast_epsilon 0.0001 +postprocess/mask_stdamp 2 +postprocess/mask_max_distance 1 +postprocess/mask_smoothness 3 +postprocess/fill_holes True +postprocess/glare_detection_smoothness 3 +postprocess/glare_detection_num_layers 5 +postprocess/glare_detection_min_layer 0.5 +postprocess/min_boundary_glare_radius inf +histological False