@@ -121,7 +121,7 @@ def check_overlap(ref_id):
121121 with futures .ThreadPoolExecutor (n_threads ) as pool :
122122 results = list (tqdm (pool .map (check_overlap , ref_ids ), total = len (ref_ids )))
123123
124- matching_ids = { r for r in results if r is not None }
124+ matching_ids = [ r for r in results if r is not None ]
125125 return matching_ids
126126
127127
@@ -141,39 +141,64 @@ def find_inbetween_ids(
141141 A list of the ids that are in between the respective thresholds.
142142 """
143143 # negative annotation == 1, positive annotation == 2
144- negexc_negatives = find_overlapping_masks (arr_negexc , roi_seg , label_id_base = 1 )
145- allweak_positives = find_overlapping_masks (arr_allweak , roi_seg , label_id_base = 2 )
146- inbetween_ids = [int (i ) for i in set (negexc_negatives ).intersection (set (allweak_positives ))]
147- return inbetween_ids , allweak_positives , negexc_negatives
144+ negexc_neg = find_overlapping_masks (arr_negexc , roi_seg , label_id_base = 1 )
145+ allweak_pos = find_overlapping_masks (arr_allweak , roi_seg , label_id_base = 2 )
148146
147+ negexc_pos = find_overlapping_masks (arr_negexc , roi_seg , label_id_base = 2 )
148+ allweak_neg = find_overlapping_masks (arr_allweak , roi_seg , label_id_base = 1 )
149+ inbetween_ids = [int (i ) for i in set (negexc_neg ).intersection (set (allweak_pos ))]
150+ return inbetween_ids , allweak_pos , negexc_neg , allweak_neg , negexc_pos
149151
150- def get_median_intensity (file_negexc , file_allweak , center , data_seg , table , column = "median" ,
152+
153+ def get_crop_parameters (file_negexc , file_allweak , center , data_seg , table , column = "median" ,
151154 resolution = 0.38 ):
152155 arr_negexc = tifffile .imread (file_negexc )
153156 arr_allweak = tifffile .imread (file_allweak )
157+ param_dic = {}
154158
155159 roi_halo = tuple ([r // 2 for r in arr_negexc .shape ])
156160 roi = get_roi (center , roi_halo , resolution = resolution )
157161
158162 roi_seg = data_seg [roi ]
159- inbetween_ids , allweak_positives , negexc_negatives = find_inbetween_ids (arr_negexc , arr_allweak , roi_seg )
163+ inbetween_ids , allweak_pos , negexc_neg , allweak_neg , negexc_pos = find_inbetween_ids (arr_negexc ,
164+ arr_allweak , roi_seg )
165+
166+ param_dic ["inbetween_ids" ] = inbetween_ids
167+ param_dic ["allweak_pos" ] = allweak_pos
168+ param_dic ["allweak_neg" ] = allweak_neg
169+ param_dic ["negexc_neg" ] = negexc_neg
170+ param_dic ["negexc_pos" ] = negexc_pos
171+
172+ subset_allweak_pos = table [table ["label_id" ].isin (allweak_pos )]
173+ subset_allweak_neg = table [table ["label_id" ].isin (allweak_neg )]
174+ subset_negexc_neg = table [table ["label_id" ].isin (negexc_neg )]
175+ subset_negexc_pos = table [table ["label_id" ].isin (negexc_pos )]
176+ param_dic ["allweak_pos_mean" ] = float (subset_allweak_pos [column ].mean ())
177+ param_dic ["allweak_neg_mean" ] = float (subset_allweak_neg [column ].mean ())
178+ param_dic ["negexc_neg_mean" ] = float (subset_negexc_neg [column ].mean ())
179+ param_dic ["negexc_pos_mean" ] = float (subset_negexc_pos [column ].mean ())
180+
160181 if len (inbetween_ids ) == 0 :
161- if len (allweak_positives ) == 0 and len (negexc_negatives ) == 0 :
162- return None
182+ if len (allweak_pos ) == 0 and len (negexc_neg ) == 0 :
183+ param_dic ["median_intensity" ] = None
184+ return param_dic
163185
164- subset_positive = table [table ["label_id" ].isin (allweak_positives )]
165- subset_negative = table [table ["label_id" ].isin (negexc_negatives )]
186+ subset_positive = table [table ["label_id" ].isin (allweak_pos )]
187+ subset_negative = table [table ["label_id" ].isin (negexc_neg )]
166188 lowest_positive = float (subset_positive [column ].min ())
167189 highest_negative = float (subset_negative [column ].max ())
168190 if np .isnan (lowest_positive ) or np .isnan (highest_negative ):
169- return None
191+ param_dic ["median_intensity" ] = None
192+ return param_dic
170193
171- return np .average ([lowest_positive , highest_negative ])
194+ param_dic ["median_intensity" ] = np .average ([lowest_positive , highest_negative ])
195+ return param_dic
172196
173197 subset = table [table ["label_id" ].isin (inbetween_ids )]
174198 intensities = list (subset [column ])
199+ param_dic ["median_intensity" ] = np .median (list (intensities ))
175200
176- return np . median ( list ( intensities ))
201+ return param_dic
177202
178203
179204def localize_median_intensities (annotation_dir , cochlea , data_seg , table_measure , column = "median" , pattern = None ,
@@ -188,12 +213,14 @@ def localize_median_intensities(annotation_dir, cochlea, data_seg, table_measure
188213 print (f"Getting median intensities for { center_coord } ." )
189214 file_pos = annotation_dic [center_str ]["file_pos" ]
190215 file_neg = annotation_dic [center_str ]["file_neg" ]
191- median_intensity = get_median_intensity (file_neg , file_pos , center_coord , data_seg ,
216+ param_dic = get_crop_parameters (file_neg , file_pos , center_coord , data_seg ,
192217 table_measure , column = column , resolution = resolution )
193218
219+ median_intensity = param_dic ["median_intensity" ]
194220 if median_intensity is None :
195221 print (f"No threshold identified for { center_str } ." )
196222
197- annotation_dic [center_str ]["median_intensity" ] = median_intensity
223+ for key in param_dic .keys ():
224+ annotation_dic [center_str ][key ] = param_dic [key ]
198225
199226 return annotation_dic
0 commit comments