small-fish-gui 2.1.2__py3-none-any.whl → 2.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,7 +37,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37
37
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38
38
  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
  """
40
- __version__ = "2.1.2"
40
+ __version__ = "2.1.4"
41
41
  __wiki__ = "https://github.com/2Echoes/small_fish_gui/wiki"
42
42
 
43
43
  import os, platform
@@ -309,7 +309,10 @@ def interactive_detection(
309
309
  if dense_region_deconvolution : updated_parameters.update(dense_region_deconvolver.get_detection_parameters())
310
310
  signal = Viewer.layers['raw signal'].data
311
311
 
312
- spots = Viewer.layers['single spots'].data.astype(np.int32)
312
+ if 'decovoluted spots' in Viewer.layers :
313
+ spots = Viewer.layers['decovoluted spots'].data.astype(np.int32)
314
+ else :
315
+ spots = Viewer.layers['single spots'].data.astype(np.int32)
313
316
 
314
317
  return spots, signal, updated_parameters
315
318
 
@@ -228,7 +228,7 @@ def _global_coloc(acquisition_id1,acquisition_id2, result_dataframe, colocalisat
228
228
  - fraction_spot2_coloc_spots
229
229
 
230
230
  """
231
-
231
+ CLUSTER_KEY = "clustered_spots_coords"
232
232
  acquisition1 = result_dataframe.loc[result_dataframe['acquisition_id'] == acquisition_id1]
233
233
  acquisition2 = result_dataframe.loc[result_dataframe['acquisition_id'] == acquisition_id2]
234
234
 
@@ -259,7 +259,7 @@ def _global_coloc(acquisition_id1,acquisition_id2, result_dataframe, colocalisat
259
259
  fraction_spots1_coloc_spots2 = np.nan
260
260
  fraction_spots2_coloc_spots1 = np.nan
261
261
 
262
- if 'clusters' in acquisition1.columns :
262
+ if CLUSTER_KEY in acquisition1.columns :
263
263
  try :
264
264
  clusters_id_1 = np.array(acquisition1.iloc[0].at['spots_cluster_id'], dtype=int)
265
265
  fraction_spots2_coloc_cluster1 = spots_colocalisation(spot_list1=spots2, spot_list2=spots1[clusters_id_1 != -1], distance= colocalisation_distance, voxel_size=voxel_size) / spot2_total
@@ -272,7 +272,7 @@ def _global_coloc(acquisition_id1,acquisition_id2, result_dataframe, colocalisat
272
272
 
273
273
  else : fraction_spots2_coloc_cluster1 = np.nan
274
274
 
275
- if 'clusters' in acquisition2.columns :
275
+ if CLUSTER_KEY in acquisition2.columns :
276
276
  try :
277
277
  clusters_id_2 = np.array(acquisition2.iloc[0].at['spots_cluster_id'], dtype=int)
278
278
  fraction_spots1_coloc_cluster2 = spots_colocalisation(spot_list1=spots1, spot_list2=spots2[clusters_id_2 != -1], distance= colocalisation_distance, voxel_size=voxel_size) / spot1_total
@@ -285,7 +285,7 @@ def _global_coloc(acquisition_id1,acquisition_id2, result_dataframe, colocalisat
285
285
 
286
286
  else : fraction_spots1_coloc_cluster2 = np.nan
287
287
 
288
- if 'clusters' in acquisition2.columns and 'clusters' in acquisition1.columns :
288
+ if CLUSTER_KEY in acquisition2.columns and CLUSTER_KEY in acquisition1.columns :
289
289
  try :
290
290
  total_clustered_spots1 = len(spots1[clusters_id_1 != -1])
291
291
  total_clustered_spots2 = len(spots2[clusters_id_2 != -1])
@@ -340,6 +340,8 @@ def _cell_coloc(
340
340
 
341
341
  acquisition1 = result_dataframe.loc[result_dataframe['acquisition_id'] == acquisition_id1]
342
342
  acquisition2 = result_dataframe.loc[result_dataframe['acquisition_id'] == acquisition_id2]
343
+ has_clusters_1 = "clustered_spots_coords" in acquisition1.columns or "clusters" in acquisition1.columns
344
+ has_clusters_2 = "clustered_spots_coords" in acquisition2.columns or "clusters" in acquisition2.columns
343
345
 
344
346
  acquisition_name_id1 = acquisition1['name'].iat[0]
345
347
  acquisition_name_id2 = acquisition2['name'].iat[0]
@@ -357,14 +359,22 @@ def _cell_coloc(
357
359
 
358
360
  #Putting spots lists in 2 cols for corresponding cells
359
361
  pivot_values_columns = ['rna_coords', 'total_rna_number']
360
- if 'clusters' in acquisition2.columns or 'clusters' in acquisition1.columns:
362
+ if has_clusters_1 or has_clusters_2 :
361
363
  pivot_values_columns.extend(['clustered_spots_coords','clustered_spot_number'])
362
364
  cell_dataframe.loc[:,['cell_id']] = cell_dataframe['cell_id'].astype(int)
365
+
366
+ if has_clusters_1 or has_clusters_2 :
367
+ target_column = "clustered_spots_coords"
368
+ target_mask = cell_dataframe.loc[:, target_column].apply(len) == 0
369
+ cell_dataframe.loc[target_mask,target_column] = pd.Series([np.empty(shape=(0,3), dtype=int)]* sum(target_mask), dtype=object)
370
+
363
371
  colocalisation_df = cell_dataframe.pivot(
364
372
  columns=['name', 'acquisition_id'],
365
373
  values= pivot_values_columns,
366
374
  index= 'cell_id'
367
375
  )
376
+ colocalisation_df = colocalisation_df.dropna(axis=0)
377
+
368
378
  #spots _vs spots
369
379
  colocalisation_df[("spots_with_spots_count",coloc_name_forward,"forward")] = colocalisation_df['rna_coords'].apply(
370
380
  lambda x: spots_colocalisation(
@@ -386,8 +396,9 @@ def _cell_coloc(
386
396
  )
387
397
  colocalisation_df[("spots_with_spots_fraction",coloc_name_backward,"backward")] = colocalisation_df[("spots_with_spots_count",coloc_name_backward,"backward")].astype(float) / colocalisation_df[('total_rna_number',acquisition_name_id2,acquisition_id2)].astype(float)
388
398
 
389
- if 'clusters' in acquisition2.columns:
390
- if len(acquisition2['clusters'].iat[0]) > 0 :
399
+ if has_clusters_2:
400
+ CLUSTER_KEY2 = "clustered_spots_coords" if "clustered_spots_coords" in acquisition2.columns else "clusters"
401
+ if len(acquisition2[CLUSTER_KEY2].iat[0]) > 0 :
391
402
 
392
403
  #spots to clusters
393
404
  colocalisation_df[("spots_with_clustered_spots_count",coloc_name_forward,"forward")] = colocalisation_df.apply(
@@ -400,8 +411,9 @@ def _cell_coloc(
400
411
  )
401
412
  colocalisation_df[("spots_with_clustered_spots_fraction",coloc_name_forward,"forward")] = colocalisation_df[("spots_with_clustered_spots_count",coloc_name_forward,"forward")].astype(float) / colocalisation_df[('total_rna_number',acquisition_name_id1,acquisition_id1)].astype(float)
402
413
 
403
- if 'clusters' in acquisition1.columns:
404
- if len(acquisition1['clusters'].iat[0]) > 0 :
414
+ if has_clusters_1:
415
+ CLUSTER_KEY1 = "clustered_spots_coords" if "clustered_spots_coords" in acquisition1.columns else "clusters"
416
+ if len(acquisition1[CLUSTER_KEY1].iat[0]) > 0 :
405
417
  colocalisation_df[("spots_with_clustered_spots_count",coloc_name_backward,"backward")] = colocalisation_df.apply(
406
418
  lambda x: spots_colocalisation(
407
419
  spot_list1= x[('rna_coords',acquisition_name_id2,acquisition_id2)],
@@ -413,8 +425,9 @@ def _cell_coloc(
413
425
 
414
426
  colocalisation_df[("spots_with_clustered_spots_fraction",coloc_name_backward,"backward")] = colocalisation_df[("spots_with_clustered_spots_count",coloc_name_backward,"backward")].astype(float) / colocalisation_df[('total_rna_number',acquisition_name_id2,acquisition_id2)].astype(float)
415
427
 
416
- if 'clusters' in acquisition2.columns and 'clusters' in acquisition1.columns:
417
- if len(acquisition1['clusters'].iat[0]) > 0 and len(acquisition2['clusters'].iat[0]) > 0 :
428
+ if has_clusters_1 and has_clusters_2:
429
+
430
+ if len(acquisition1[CLUSTER_KEY1].iat[0]) > 0 and len(acquisition2[CLUSTER_KEY2].iat[0]) > 0 :
418
431
  #clusters to clusters
419
432
  colocalisation_df[("clustered_spots_with_clustered_spots_count",coloc_name_forward,"forward")] = colocalisation_df.apply(
420
433
  lambda x: spots_colocalisation(
@@ -438,7 +451,7 @@ def _cell_coloc(
438
451
 
439
452
  colocalisation_df = colocalisation_df.sort_index(axis=0).sort_index(axis=1, level=0)
440
453
 
441
- if 'clustered_spots_coords' in cell_dataframe.columns : colocalisation_df = colocalisation_df.drop('clustered_spots_coords', axis=1)
454
+ if 'clustered_spots_coords' in colocalisation_df.columns : colocalisation_df = colocalisation_df.drop('clustered_spots_coords', axis=1)
442
455
  colocalisation_df = colocalisation_df.drop('rna_coords', axis=1)
443
456
  colocalisation_df['voxel_size'] = [voxel_size]*len(colocalisation_df)
444
457
  colocalisation_df['pair_name'] = [(acquisition_name_id1, acquisition_name_id2)] * len(colocalisation_df)
@@ -449,11 +462,19 @@ def _cell_coloc(
449
462
  return colocalisation_df
450
463
 
451
464
  @add_default_loading
452
- def launch_colocalisation(acquisition_id1, acquisition_id2, result_dataframe, cell_result_dataframe, colocalisation_distance, global_coloc_df, cell_coloc_df: dict) :
465
+ def launch_colocalisation(
466
+ acquisition_id1 : int,
467
+ acquisition_id2 : int,
468
+ result_dataframe : pd.DataFrame,
469
+ cell_result_dataframe : pd.DataFrame,
470
+ colocalisation_distance : pd.DataFrame,
471
+ global_coloc_df : pd.DataFrame,
472
+ cell_coloc_df: dict) :
453
473
 
454
474
 
455
475
  if acquisition_id1 in list(cell_result_dataframe['acquisition_id']) and acquisition_id2 in list(cell_result_dataframe['acquisition_id']) :
456
476
  print("Launching cell to cell colocalisation.")
477
+
457
478
  new_coloc = _cell_coloc(
458
479
  acquisition_id1 = acquisition_id1,
459
480
  acquisition_id2 = acquisition_id2,
@@ -213,23 +213,26 @@ def initiate_detection(user_parameters : pipeline_parameters, map_, shape) :
213
213
  #Attempt to read voxel size from metadata
214
214
  voxel_size = get_voxel_size(user_parameters['image_path'])
215
215
  if voxel_size is None :
216
- if not user_parameters.get('voxel_size') is None:
217
- pass
218
- else :
216
+ if user_parameters.get('voxel_size') is None:
219
217
  detection_parameters['voxel_size_z'] = None
220
218
  detection_parameters['voxel_size_y'] = None
221
219
  detection_parameters['voxel_size_x'] = None
220
+ else :
221
+ if is_3D_stack : detection_parameters['voxel_size_z'] = user_parameters.get['voxel_size'][0]
222
+ detection_parameters['voxel_size_y'] = user_parameters.get['voxel_size'][0 + is_3D_stack]
223
+ detection_parameters['voxel_size_x'] = user_parameters.get['voxel_size'][1 + is_3D_stack]
224
+
222
225
  else :
223
226
  detection_parameters['voxel_size'] = [round(v) if isinstance(v, (float,int)) else None for v in voxel_size]
224
- detection_parameters['voxel_size_z'] = detection_parameters['voxel_size'][0] if isinstance(detection_parameters['voxel_size'][0], (float,int)) else None
225
- detection_parameters['voxel_size_y'] = detection_parameters['voxel_size'][1] if isinstance(detection_parameters['voxel_size'][1], (float,int)) else None
226
- detection_parameters['voxel_size_x'] = detection_parameters['voxel_size'][2] if isinstance(detection_parameters['voxel_size'][2], (float,int)) else None
227
+ detection_parameters['voxel_size_z'] = detection_parameters['voxel_size'][0] if isinstance(detection_parameters.get('voxel_size')[0], (float,int)) else None
228
+ detection_parameters['voxel_size_y'] = detection_parameters['voxel_size'][0 + is_3D_stack] if isinstance(detection_parameters.get('voxel_size')[0 + is_3D_stack], (float,int)) else None
229
+ detection_parameters['voxel_size_x'] = detection_parameters['voxel_size'][1 + is_3D_stack] if isinstance(detection_parameters.get('voxel_size')[1 + is_3D_stack], (float,int)) else None
227
230
 
228
231
  #Setting default spot size to 1.5 voxel
229
232
  if detection_parameters.get('spot_size') is None and not detection_parameters.get('voxel_size') is None:
230
233
  detection_parameters['spot_size_z'] = round(detection_parameters['voxel_size_z']*1.5) if isinstance(detection_parameters.get('voxel_size_z'), (float,int)) else None
231
- detection_parameters['spot_size_y'] = round(detection_parameters['voxel_size_y']*1.5) if isinstance(detection_parameters['voxel_size_y'],(float,int)) else None
232
- detection_parameters['spot_size_x'] = round(detection_parameters['voxel_size_x']*1.5) if isinstance(detection_parameters['voxel_size_x'],(float,int)) else None
234
+ detection_parameters['spot_size_y'] = round(detection_parameters['voxel_size_y']*1.5) if isinstance(detection_parameters.get('voxel_size_y'),(float,int)) else None
235
+ detection_parameters['spot_size_x'] = round(detection_parameters['voxel_size_x']*1.5) if isinstance(detection_parameters.get('voxel_size_x'),(float,int)) else None
233
236
 
234
237
  while True :
235
238
  detection_parameters = detection_parameters_promt(
@@ -60,6 +60,17 @@ def compute_Spots(
60
60
  else :
61
61
  in_nuc_list = np.nan
62
62
  if type(cell_label) != type(None) :
63
+
64
+ # Collect all labels that are on fov edge
65
+ on_edge_labels = np.unique(
66
+ np.concatenate([
67
+ cell_label[:,0],
68
+ cell_label[:,-1],
69
+ cell_label[0,:],
70
+ cell_label[-1,:],
71
+ ])
72
+ ).astype(int)
73
+
63
74
  if cell_label.ndim == 3 :
64
75
  cell_label_list = list(cell_label[index])
65
76
  else :
@@ -79,6 +90,10 @@ def compute_Spots(
79
90
  'coordinates' : coord_list,
80
91
  'cluster_id' : cluster_id,
81
92
  })
93
+
94
+ if type(cell_label) != type(None) : #Filter on edge cells
95
+ target_index = Spots.loc[Spots["cell_label"].isin(on_edge_labels)].index
96
+ Spots.loc[target_index,["cell_label"]] = 0
82
97
 
83
98
  return Spots
84
99
 
@@ -115,16 +130,6 @@ def reconstruct_acquisition_data(
115
130
  ) -> pd.DataFrame:
116
131
  """
117
132
  Aim : creating a acquisition to add to result_dataframe from loaded spots for co-localization use
118
-
119
- **Needed keys for colocalization**
120
- * acquisition_id
121
- * name
122
- * spots : np.ndarray[int] (nb_spots, nb_coordinates)
123
- * clusters : np.ndarray[int] (nb_cluster, nb_coordinate + 2)
124
- * spots_cluster_id : list[int]
125
- * voxel_size : tuple[int]
126
- * shape : tuple[int]
127
- * filename : str
128
133
  """
129
134
  max_id = int(max_id)
130
135
  spots = reconstruct_spots(Spots['coordinates'])
@@ -133,15 +138,17 @@ def reconstruct_acquisition_data(
133
138
 
134
139
  if has_clusters :
135
140
 
136
- clusters = np.empty(shape=(0,5), dtype=int) #useless for coloc only needded in columns to enable coloc on clusters
137
- spot_cluster_id = Spots['cluster_id'].to_numpy().astype(int).tolist()
141
+ clusters = np.empty(shape=(0,5), dtype=int)
142
+ spot_cluster_id = Spots['cluster_id'].to_numpy().astype(int)
143
+ clustered_spots = spots[spot_cluster_id != -1]
138
144
 
139
145
  new_acquisition = pd.DataFrame({
140
146
  'acquisition_id' : [max_id + 1],
141
147
  'name' : ["(loaded_spots)_{}".format(filename.split('.', maxsplit=1)[0])],
142
148
  'threshold' : [0],
143
149
  'spots' : [spots],
144
- 'clusters' : [clusters],
150
+ 'clusters' : [clusters.tolist()],
151
+ 'clustered_spots_coords' : [clustered_spots.tolist()],
145
152
  'spots_cluster_id' : [spot_cluster_id],
146
153
  'spot_number' : [spot_number],
147
154
  'filename' : [filename],
@@ -158,6 +165,7 @@ def reconstruct_acquisition_data(
158
165
  'voxel_size' : [voxel_size],
159
166
  })
160
167
 
168
+
161
169
  return new_acquisition
162
170
 
163
171
  def reconstruct_spots(
@@ -178,23 +186,25 @@ def reconstruct_cell_data(
178
186
  ) :
179
187
 
180
188
  has_cluster = not Spots['cluster_id'].isna().all()
189
+ if 'cell_label' in Spots.columns : Spots = Spots.loc[Spots["cell_label"] !=0]
181
190
  coordinates = reconstruct_spots(Spots['coordinates'])
182
- Spots['coordinates'] = pd.Series(coordinates.tolist(), dtype=object, index= Spots.index)
191
+ Spots.loc[:,['coordinates']] = pd.Series(coordinates.tolist(), dtype=object, index= Spots.index)
183
192
 
184
193
  cell = Spots.groupby('cell_label')['coordinates'].apply(np.array).rename("rna_coords").reset_index(drop=False)
185
194
 
186
195
  #Handle cells with no spots
187
196
  na_mask =cell[cell['rna_coords'].isna()].index
188
197
  cell.loc[na_mask, ['rna_coords']] = pd.Series([np.empty(shape=(0,3))]*len(na_mask), dtype= object, index=na_mask)
198
+ cell.loc[~na_mask, "rna_coords"] = cell.loc[~na_mask, "rna_coords"].apply(list).apply(np.array)
189
199
 
190
200
  cell['total_rna_number'] = cell['rna_coords'].apply(len)
191
-
192
201
  if has_cluster :
193
202
  cell['clustered_spots_coords'] = Spots[Spots['cluster_id'] !=-1].groupby('cell_label')['coordinates'].apply(np.array).rename("clustered_spots_coords")
194
203
 
195
204
  #Handle cells with no clusters
196
205
  na_mask =cell[cell['clustered_spots_coords'].isna()].index
197
206
  cell.loc[na_mask, ['clustered_spots_coords']] = pd.Series([np.empty(shape=(0,3))]*len(na_mask), dtype= object, index=na_mask)
207
+ cell["clustered_spots_coords"] = cell["clustered_spots_coords"].apply(list).apply(np.array)
198
208
 
199
209
  cell['clustered_spot_number'] = cell['clustered_spots_coords'].apply(len)
200
210
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: small_fish_gui
3
- Version: 2.1.2
3
+ Version: 2.1.4
4
4
  Summary: Small Fish is a python application for the analysis of smFish images. It provides a ready to use graphical interface to combine famous python packages for cell analysis without any need for coding.
5
5
  Project-URL: Homepage, https://github.com/SmallFishGUI/small_fish_gui
6
6
  Project-URL: Wiki, https://github.com/SmallFishGUI/small_fish_gui/wiki
@@ -1,4 +1,4 @@
1
- small_fish_gui/__init__.py,sha256=Ue6wty6U37_1rZ9SUrxmxA9r9ydjn0uACU-SqWHt6CE,2163
1
+ small_fish_gui/__init__.py,sha256=RhdSeAF9XtPM-QArrG71J9oJeFkP8qVJLGLuDyVG9BQ,2163
2
2
  small_fish_gui/__main__.py,sha256=xwpFMDuo0kkYvPamyhlTHJ68bymDfbRpPzKy3SKwezY,1639
3
3
  small_fish_gui/hints.py,sha256=NEKqCbjXF3guHnc1dzq_LYYGlTxIV6z6wtdwVlmgHos,3349
4
4
  small_fish_gui/main_menu.py,sha256=z0ZlidWNGHLYYnBx2Z1i2IX_EGQr-HtIlsOQl-yTw4o,6273
@@ -16,7 +16,7 @@ small_fish_gui/gui/__init__.py,sha256=idpRSg2FFawF0ydfc7Y8ep6gQ4_jhroL_jZURlRE_B
16
16
  small_fish_gui/gui/_napari_widgets.py,sha256=9gfikNMLZmeWY9tosD19aGmw4Ulf-BMo8erehJ4KU1k,35321
17
17
  small_fish_gui/gui/animation.py,sha256=MnYsA1kxQZ72L_H0knxOs41lG0ZZv1re7gSgYNmZY00,983
18
18
  small_fish_gui/gui/layout.py,sha256=72RZI4Vt5WwZH9cx8SfOCWsZox0udG3Ck3YE_c-aiQ4,30927
19
- small_fish_gui/gui/napari_visualiser.py,sha256=HsHEp2B7lWKFGLQaGI99u3IPaWzsfG1MHJsx_1t0rf0,14844
19
+ small_fish_gui/gui/napari_visualiser.py,sha256=eU2kqp16EHA3NwbGFBZAiTOiAI_K4zbnMOCtbW4fNuM,14978
20
20
  small_fish_gui/gui/prompts.py,sha256=vWLLJZ7jdYIbjT71qHGiE1o9-pTrc607shnKW6EZi8I,18361
21
21
  small_fish_gui/gui/testing.ipynb,sha256=2E51kT3BcXvOvOSdmYIy4Cxbe-4HtnOjzPTZQHDZJJw,69148
22
22
  small_fish_gui/gui/theme.py,sha256=30nujS48ZRdD1HVbzdEBkiAWlhow1AGgXSQNZcGEsaQ,118
@@ -31,16 +31,16 @@ small_fish_gui/interface/testing.py,sha256=AUdqmFJ6kBvFTOLRfZZJBBe3nm1key2bGpUDX
31
31
  small_fish_gui/interface/user_settings.py,sha256=vMpj-s9tzMKQy1CdJ3SO-6yAknU-ZIMT0RZQs8WAGPY,2620
32
32
  small_fish_gui/pipeline/__init__.py,sha256=Oww6dcuvnktl5jFKLriz8ZXObKo9MkneE739A8C1reY,739
33
33
  small_fish_gui/pipeline/_bigfish_wrapers.py,sha256=WcIu5HLc4bUuU8qmsINP5snXef3Tx9zJDNKES-SiftA,9776
34
- small_fish_gui/pipeline/_colocalisation.py,sha256=n7ULhlaKH2M2mKPgnn9On0NOdG-mqPCGuOgYgo13vA0,21922
34
+ small_fish_gui/pipeline/_colocalisation.py,sha256=IEH7_okSG5Wfm7rBxudtKwCti_Op3mP-XXLUkDD08k4,22789
35
35
  small_fish_gui/pipeline/_custom_errors.py,sha256=tQ-AUhgzIFpK30AZiQQrtHCHyGVRDdAoIjzL0Fk-1pA,43
36
36
  small_fish_gui/pipeline/_preprocess.py,sha256=zfwhNoAUkVv1TYlyffNQkSTitMXTDokADabBeHuB58U,15766
37
37
  small_fish_gui/pipeline/actions.py,sha256=dtRCf_UKg-Y9uV1jCBeASeuR7-pZ8dHVEYHs7MW-0pg,21263
38
- small_fish_gui/pipeline/detection.py,sha256=IE0Wf9NaHcxkCv1cjrOdyfnQUzv8SlXilIT7KI8INP4,35988
38
+ small_fish_gui/pipeline/detection.py,sha256=JOvk1fuJT2EudfqSVAc5iwIwns7OUo0n5o4vxgiVJUI,36353
39
39
  small_fish_gui/pipeline/segmentation.py,sha256=m9XW8XiWCSpGFdi6It6RkeDYTiKtNhfj30kUSBG8pNo,32023
40
- small_fish_gui/pipeline/spots.py,sha256=rL4BLH0BtPQiinpQHqJ3ooq6_DDS_oa4UBdKQTl_-ok,6841
40
+ small_fish_gui/pipeline/spots.py,sha256=oW8TVJK16K_LK_fpG_9GnCTCVCzmfedaGZswyboq2MI,7328
41
41
  small_fish_gui/pipeline/test.py,sha256=w4ZMGDmUDXxVgWTlZ2TKw19W8q5gcE9gLMKe0SWnRrw,2827
42
42
  small_fish_gui/pipeline/utils.py,sha256=dYV7WAJ375xM5RdaljjxeKvBC1niQvBl1E55SeIiIYo,563
43
- small_fish_gui-2.1.2.dist-info/METADATA,sha256=g5pFqOzoXqyNLC9Bgk2wWfjWTvjtDaM0HK-2zDKOS6s,6553
44
- small_fish_gui-2.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
- small_fish_gui-2.1.2.dist-info/licenses/LICENSE,sha256=-iFy8VGBYs5VsHglKpk4D-hxqQ2jMJaqmfq_ulIzDks,1303
46
- small_fish_gui-2.1.2.dist-info/RECORD,,
43
+ small_fish_gui-2.1.4.dist-info/METADATA,sha256=F6zA2y4gOIPJm3SMChUUl0PHTGoc5ZHwJe_7rrVF0hk,6553
44
+ small_fish_gui-2.1.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
+ small_fish_gui-2.1.4.dist-info/licenses/LICENSE,sha256=-iFy8VGBYs5VsHglKpk4D-hxqQ2jMJaqmfq_ulIzDks,1303
46
+ small_fish_gui-2.1.4.dist-info/RECORD,,