celldetective 1.1.1.post1__py3-none-any.whl → 1.1.1.post4__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.
@@ -20,6 +20,7 @@ from skimage.segmentation import watershed
20
20
  from skimage.feature import peak_local_max
21
21
  from skimage.measure import regionprops_table
22
22
  from skimage.exposure import match_histograms
23
+ from scipy.ndimage import zoom
23
24
  import pandas as pd
24
25
  import subprocess
25
26
 
@@ -27,7 +28,7 @@ import subprocess
27
28
  abs_path = os.sep.join([os.path.split(os.path.dirname(os.path.realpath(__file__)))[0],'celldetective'])
28
29
 
29
30
  def segment(stack, model_name, channels=None, spatial_calibration=None, view_on_napari=False,
30
- use_gpu=True, time_flat_normalization=False, time_flat_percentiles=(0.0,99.99)):
31
+ use_gpu=True, channel_axis=-1):
31
32
 
32
33
  """
33
34
 
@@ -85,7 +86,10 @@ def segment(stack, model_name, channels=None, spatial_calibration=None, view_on_
85
86
  if not use_gpu:
86
87
  os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
87
88
  else:
88
- os.environ['CUDA_VISIBLE_DEVICES'] = '0'
89
+ os.environ['CUDA_VISIBLE_DEVICES'] = '0'
90
+
91
+ if channel_axis != -1:
92
+ stack = np.moveaxis(stack, channel_axis, -1)
89
93
 
90
94
  if channels is not None:
91
95
  assert len(channels)==stack.shape[-1],f'The channel names provided do not match with the expected number of channels in the stack: {stack.shape[-1]}.'
@@ -96,48 +100,83 @@ def segment(stack, model_name, channels=None, spatial_calibration=None, view_on_
96
100
  required_spatial_calibration = input_config['spatial_calibration']
97
101
  model_type = input_config['model_type']
98
102
 
99
- if 'normalize' in input_config:
100
- normalize = input_config['normalize']
101
- else:
102
- normalize = True
103
+ normalization_percentile = input_config['normalization_percentile']
104
+ normalization_clip = input_config['normalization_clip']
105
+ normalization_values = input_config['normalization_values']
103
106
 
104
107
  if model_type=='cellpose':
105
108
  diameter = input_config['diameter']
106
- if diameter!=30:
107
- required_spatial_calibration = None
109
+ # if diameter!=30:
110
+ # required_spatial_calibration = None
108
111
  cellprob_threshold = input_config['cellprob_threshold']
109
112
  flow_threshold = input_config['flow_threshold']
110
113
 
111
114
  scale = _estimate_scale_factor(spatial_calibration, required_spatial_calibration)
112
115
 
113
116
  if model_type=='stardist':
117
+
114
118
  model = StarDist2D(None, name=model_name, basedir=Path(model_path).parent)
115
- print(f"StarDist model {model_name} successfully loaded")
119
+ model.config.use_gpu = use_gpu
120
+ model.use_gpu = use_gpu
121
+ print(f"StarDist model {model_name} successfully loaded.")
122
+ scale_model = scale
116
123
 
117
124
  elif model_type=='cellpose':
118
- model = CellposeModel(gpu=use_gpu, pretrained_model=model_path+model_path.split('/')[-2], diam_mean=30.0)
125
+
126
+ import torch
127
+ if not use_gpu:
128
+ device = torch.device("cpu")
129
+ else:
130
+ device = torch.device("cuda")
131
+
132
+ model = CellposeModel(gpu=use_gpu, device=device, pretrained_model=model_path+model_path.split('/')[-2], model_type=None, nchan=len(required_channels))
119
133
  if scale is None:
120
134
  scale_model = model.diam_mean / model.diam_labels
121
135
  else:
122
136
  scale_model = scale * model.diam_mean / model.diam_labels
137
+ print(f"Diam mean: {model.diam_mean}; Diam labels: {model.diam_labels}; Final rescaling: {scale_model}...")
138
+ print(f'Cellpose model {model_name} successfully loaded.')
123
139
 
124
140
  labels = []
125
- if (time_flat_normalization)*normalize:
126
- normalization_values = get_stack_normalization_values(stack[:,:,:,channel_indices], percentiles=time_flat_percentiles)
127
- else:
128
- normalization_values = [None]*len(channel_indices)
129
141
 
130
142
  for t in tqdm(range(len(stack)),desc="frame"):
131
143
 
132
144
  # normalize
133
- frame = stack[t,:,:,np.array(channel_indices)]
134
- if np.argmin(frame.shape)!=(frame.ndim-1):
135
- frame = np.moveaxis(frame,np.argmin(frame.shape),-1)
136
- if normalize:
137
- frame = normalize_multichannel(frame, values=normalization_values)
138
-
139
- if scale is not None:
140
- frame = [ndi.zoom(frame[:,:,c].copy(), [scale_model,scale_model], order=3, prefilter=False) for c in range(frame.shape[-1])]
145
+ channel_indices = np.array(channel_indices)
146
+ none_channel_indices = np.where(channel_indices==None)[0]
147
+ channel_indices[channel_indices==None] = 0
148
+ print(channel_indices)
149
+
150
+ frame = stack[t,:,:,channel_indices.astype(int)].astype(float)
151
+ if frame.ndim==2:
152
+ frame = frame[:,:,np.newaxis]
153
+ if frame.ndim==3 and np.array(frame.shape).argmin()==0:
154
+ frame = np.moveaxis(frame,0,-1)
155
+ template = frame.copy()
156
+
157
+ values = []
158
+ percentiles = []
159
+ for k in range(len(normalization_percentile)):
160
+ if normalization_percentile[k]:
161
+ percentiles.append(normalization_values[k])
162
+ values.append(None)
163
+ else:
164
+ percentiles.append(None)
165
+ values.append(normalization_values[k])
166
+
167
+ frame = normalize_multichannel(frame, **{"percentiles": percentiles, 'values': values, 'clip': normalization_clip})
168
+
169
+ if scale_model is not None:
170
+ frame = [zoom(frame[:,:,c].copy(), [scale_model,scale_model], order=3, prefilter=False) for c in range(frame.shape[-1])]
171
+ frame = np.moveaxis(frame,0,-1)
172
+
173
+ for k in range(frame.shape[2]):
174
+ unique_values = np.unique(frame[:,:,k])
175
+ if len(unique_values)==1:
176
+ frame[0,0,k] += 1
177
+
178
+ frame = np.moveaxis([interpolate_nan(frame[:,:,c].copy()) for c in range(frame.shape[-1])],0,-1)
179
+ frame[:,:,none_channel_indices] = 0.
141
180
 
142
181
  if model_type=="stardist":
143
182
 
@@ -145,16 +184,15 @@ def segment(stack, model_name, channels=None, spatial_calibration=None, view_on_
145
184
  Y_pred = Y_pred.astype(np.uint16)
146
185
 
147
186
  elif model_type=="cellpose":
148
-
149
- Y_pred, _, _ = model.eval(frame, diameter = diameter, cellprob_threshold=cellprob_threshold, flow_threshold=flow_threshold, channels=None, normalize=False)
187
+
188
+ img = np.moveaxis(frame, -1, 0)
189
+ Y_pred, _, _ = model.eval(img, diameter = diameter, cellprob_threshold=cellprob_threshold, flow_threshold=flow_threshold, channels=None, normalize=False)
150
190
  Y_pred = Y_pred.astype(np.uint16)
151
191
 
152
- if scale is not None:
153
- Y_pred = ndi.zoom(Y_pred, [1./scale_model,1./scale_model],order=0)
154
-
155
-
156
192
  if Y_pred.shape != stack[0].shape[:2]:
157
- Y_pred = resize(Y_pred, stack[0].shape, order=0)
193
+ Y_pred = zoom(Y_pred, [1./scale_model,1./scale_model],order=0)
194
+ if Y_pred.shape != template.shape[:2]:
195
+ Y_pred = resize(Y_pred, template.shape[:2], order=0)
158
196
 
159
197
  labels.append(Y_pred)
160
198
 
celldetective/utils.py CHANGED
@@ -23,6 +23,7 @@ from tqdm import tqdm
23
23
  import shutil
24
24
  import tempfile
25
25
  from scipy.interpolate import griddata
26
+ import re
26
27
 
27
28
 
28
29
  def derivative(x, timeline, window, mode='bi'):
@@ -430,6 +431,31 @@ def mask_edges(binary_mask, border_size):
430
431
  return binary_mask
431
432
 
432
433
 
434
+ def extract_cols_from_query(query: str):
435
+
436
+ # Track variables in a dictionary to be used as a dictionary of globals. From: https://stackoverflow.com/questions/64576913/extract-pandas-dataframe-column-names-from-query-string
437
+
438
+ variables = {}
439
+
440
+ while True:
441
+ try:
442
+ # Try creating a Expr object with the query string and dictionary of globals.
443
+ # This will raise an error as long as the dictionary of globals is incomplete.
444
+ env = pd.core.computation.scope.ensure_scope(level=0, global_dict=variables)
445
+ pd.core.computation.eval.Expr(query, env=env)
446
+
447
+ # Exit the loop when evaluation is successful.
448
+ break
449
+ except pd.errors.UndefinedVariableError as e:
450
+ # This relies on the format defined here: https://github.com/pandas-dev/pandas/blob/965ceca9fd796940050d6fc817707bba1c4f9bff/pandas/errors/__init__.py#L401
451
+ name = re.findall("name '(.+?)' is not defined", str(e))[0]
452
+
453
+ # Add the name to the globals dictionary with a dummy value.
454
+ variables[name] = None
455
+
456
+ return list(variables.keys())
457
+
458
+
433
459
  def create_patch_mask(h, w, center=None, radius=None):
434
460
 
435
461
  """
@@ -1058,20 +1084,33 @@ def _extract_channel_indices(channels, required_channels):
1058
1084
  # [0, 1]
1059
1085
  """
1060
1086
 
1061
- if channels is not None:
1062
- channel_indices = []
1063
- for ch in required_channels:
1064
-
1087
+ channel_indices = []
1088
+ for c in required_channels:
1089
+ if c!='None' and c is not None:
1065
1090
  try:
1066
- idx = channels.index(ch)
1067
- except ValueError:
1068
- print('Mismatch between the channels required by the model and the provided channels.')
1069
- return None
1091
+ ch_idx = channels.index(c)
1092
+ channel_indices.append(ch_idx)
1093
+ except Exception as e:
1094
+ print(f"Error {e}. The channel required by the model is not available in your data... Check the configuration file.")
1095
+ channels = None
1096
+ break
1097
+ else:
1098
+ channel_indices.append(None)
1070
1099
 
1071
- channel_indices.append(idx)
1072
- channel_indices = np.array(channel_indices)
1073
- else:
1074
- channel_indices = np.arange(len(required_channels))
1100
+ # if channels is not None:
1101
+ # channel_indices = []
1102
+ # for ch in required_channels:
1103
+
1104
+ # try:
1105
+ # idx = channels.index(ch)
1106
+ # except ValueError:
1107
+ # print('Mismatch between the channels required by the model and the provided channels.')
1108
+ # return None
1109
+
1110
+ # channel_indices.append(idx)
1111
+ # channel_indices = np.array(channel_indices)
1112
+ # else:
1113
+ # channel_indices = np.arange(len(required_channels))
1075
1114
 
1076
1115
  return channel_indices
1077
1116
 
@@ -2046,7 +2085,7 @@ def load_image_dataset(datasets, channels, train_spatial_calibration=None, mask_
2046
2085
 
2047
2086
  assert isinstance(channels, list),'Please provide a list of channels. Abort.'
2048
2087
 
2049
- X = []; Y = [];
2088
+ X = []; Y = []; files = [];
2050
2089
 
2051
2090
  for ds in datasets:
2052
2091
  print(f'Loading data from dataset {ds}...')
@@ -2101,9 +2140,10 @@ def load_image_dataset(datasets, channels, train_spatial_calibration=None, mask_
2101
2140
 
2102
2141
  X.append(image)
2103
2142
  Y.append(mask)
2143
+ files.append(im)
2104
2144
 
2105
2145
  assert len(X)==len(Y),'The number of images does not match with the number of masks... Abort.'
2106
- return X,Y
2146
+ return X,Y,files
2107
2147
 
2108
2148
 
2109
2149
  def download_url_to_file(url, dst, progress=True):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: celldetective
3
- Version: 1.1.1.post1
3
+ Version: 1.1.1.post4
4
4
  Summary: description
5
5
  Home-page: http://github.com/remyeltorro/celldetective
6
6
  Author: Rémy Torro
@@ -1,43 +1,43 @@
1
1
  celldetective/__init__.py,sha256=FEZpJKcskBH2IginYzeqPWoR1lVGuyYCXhv7Hnlkoo8,49
2
- celldetective/__main__.py,sha256=XFAkq_2cBEkWAVXDGSNFagoQBglyl0Y-GOO3KFc8UqM,13888
2
+ celldetective/__main__.py,sha256=TQzL_FLAeEF1YIyRZXMiai40xXy21roPPV23ig4jwG0,14494
3
3
  celldetective/events.py,sha256=s2pWnR3Z1fcB15sET5WsF2Pi6v6qv16hks_m3WiklNs,3658
4
4
  celldetective/extra_properties.py,sha256=ZdWV046RR8jrQPYxLSVVb1cXkWYxfrrLj2tXfc358cU,4179
5
5
  celldetective/filters.py,sha256=b0qKwHor1fvNA_dHovP17nQz8EsW5YlyhT2TJnayn08,3615
6
- celldetective/io.py,sha256=ptaX4GadWuf0zOQ3ZWSLCzihEID-YAalPfxW1nqvgIU,80889
6
+ celldetective/io.py,sha256=_ivq2zE5ffHadZ-YOWSSX5J1GTlEohg6WPvC3xEBZvQ,82819
7
7
  celldetective/measure.py,sha256=HDQZfSRx3daOCV5Snu1paYU5JYkwu8engO2qZqhTAUo,48089
8
- celldetective/neighborhood.py,sha256=QCuhesMHGyr3c3ys9wWcNR1HM6CHdHe51R8upoolgPw,49514
9
- celldetective/preprocessing.py,sha256=psCs4CAI7gG3YlKvxkXKnpClFL4SjWm5TToXq2ZwL-s,37137
10
- celldetective/segmentation.py,sha256=Hu4-lOJ4UhPw2o0Hn_NPOCHsa6Iwsw5A3PR6X3Tzbb8,29196
8
+ celldetective/neighborhood.py,sha256=Jl9VujKYZ9R2pcqmPt5HyeCy5LieNal-oCsD8b7uIWQ,51182
9
+ celldetective/preprocessing.py,sha256=TKOJTc5o4rSgXqtYeZz-0ox062dD494VMiie3L-9aV4,38305
10
+ celldetective/segmentation.py,sha256=L2VJKmOewC1CNZPiWCO6yUfxt78u9k1NHPr2qTyTaBM,30458
11
11
  celldetective/signals.py,sha256=P7eiDZGGIAYCFBKjGCBi8gMBvJYywxlxZNzyGgw-26Y,102783
12
12
  celldetective/tracking.py,sha256=A0mhdF4uq4m8OX1-rhtuhG69rlh_6Pb34Aebu7hIeKM,37601
13
- celldetective/utils.py,sha256=00jBr_Ur6wX3xeFQzwgpFv9XDhnt_VCh-e2usFdrfo4,77543
13
+ celldetective/utils.py,sha256=ahHZkLr6ceUDY5sN6uOcGzqKaLjpOIdB_kjhXj_gggA,79003
14
14
  celldetective/datasets/segmentation_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  celldetective/datasets/signal_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  celldetective/gui/__init__.py,sha256=y2dvrUdJi17QMgPjl8WN3XFHYzJpu2ul4_8y7MQV1Bk,941
17
17
  celldetective/gui/about.py,sha256=i-y54Opb10pKTVNUEcJC-D6Cbiqud2EJ3ZLayXqhdqc,1715
18
18
  celldetective/gui/analyze_block.py,sha256=WD3JQQylx_dVozFCvNqrOyR6LcNHV7R1_gGh7XqOVeI,25423
19
19
  celldetective/gui/btrack_options.py,sha256=eQEf63yTUsPCN-d1LqgAMmUQpfv2FH85FqnOSaR-9Q8,35575
20
- celldetective/gui/classifier_widget.py,sha256=52a3kOfU3uMEzUYMIOHGqiy-Q5itMEvcG-3JYrO34I8,16918
20
+ celldetective/gui/classifier_widget.py,sha256=PNg72YlFvKjGdlARaquvY4ALpNV7KZps9LJqAemSUqc,17225
21
21
  celldetective/gui/configure_new_exp.py,sha256=ANJ-Zn4sjBphtj_aoJu6m1PFEKyv9gxeh9XqS6xOGjk,18969
22
- celldetective/gui/control_panel.py,sha256=wcDqe4XaDJRMmPmWKJpxd0D9V4_DrdRGnEH6D7B_IK0,17557
22
+ celldetective/gui/control_panel.py,sha256=srpQMxMA8ZOuxqfzRgFZl0OtV1H9bgf2nt20A7vtFps,18101
23
23
  celldetective/gui/gui_utils.py,sha256=PidFfdc8XASeIzZO5pfKgwqe4vROG7-KpYMcBZ42jdw,22673
24
24
  celldetective/gui/json_readers.py,sha256=fTrNrlxv9NCae8ZJexBEHxI3yCLRqt6F0Yo1OeDycfA,3686
25
- celldetective/gui/layouts.py,sha256=gC24lyA48hzOo2oabYF1vXTFh5r7WcQFVkqjAXXo5g0,26997
25
+ celldetective/gui/layouts.py,sha256=MCmGOjZFoL2a24Gu6WH9UgOnI6ZbGNqWxEEf1QMVqqQ,37678
26
26
  celldetective/gui/measurement_options.py,sha256=i0CdAfupHJAqhOT7RsufEK919sAzQnFBkQO4IAMYZL0,47704
27
- celldetective/gui/neighborhood_options.py,sha256=sdKxVRliZtuKSpcPfnFxqkW4V8rN2tzjhDxOPVmElyE,20191
27
+ celldetective/gui/neighborhood_options.py,sha256=sASKSSRl4Fwu0NwLaH-xX0SCvGRiyRA5JuNA288lP8o,20436
28
28
  celldetective/gui/plot_measurements.py,sha256=xUoGxV6uXcen-t4yWtAmcGTUayICI-FxTVKPrWMNlfg,51799
29
29
  celldetective/gui/plot_signals_ui.py,sha256=TwWU2u3_mkRNsM8er0kI_kwr5EoZ29YEzlr0cQzyW4A,43732
30
30
  celldetective/gui/process_block.py,sha256=7n9glZ1ojEi1bObqwIj4giNhrteT69X1EPMQ1hK63aU,53565
31
- celldetective/gui/retrain_segmentation_model_options.py,sha256=-rkuUzI_vFFlZC3LAAYEELoJUKcz6PmkpCrxKZindhg,27218
32
- celldetective/gui/retrain_signal_model_options.py,sha256=uHZy3FGsGMHfZL_nYnuFiXF57XaAMVzjYxVF2OXhYnY,24184
31
+ celldetective/gui/retrain_segmentation_model_options.py,sha256=VixtKZTjoJFJy8X6aDbAf0zgK46aXj3I6oPP_92yqhA,22457
32
+ celldetective/gui/retrain_signal_model_options.py,sha256=gdK1ITuaTPNvnQWXYuUBcP_pH5cvaEEns5XejjTi_Eo,17854
33
33
  celldetective/gui/seg_model_loader.py,sha256=uKp8oab-4QdTGqb-tb6bOD-FLD_154GOvgWFYz97BwY,17350
34
- celldetective/gui/signal_annotator.py,sha256=4ymMpo_GjSBsJSRkyNKrWRLy0EFXHINbFtp9ykDqfGE,84864
34
+ celldetective/gui/signal_annotator.py,sha256=yHsVCu6Nm8_7bxXfvBfx-xymH9bXBpnQ4TUih1d66cM,86791
35
35
  celldetective/gui/signal_annotator_options.py,sha256=-Q7f8eCwniqbgLJqMCa91Wc-V3VHAZidwt7LPd4Z5yU,10879
36
36
  celldetective/gui/styles.py,sha256=Vw4wr6MQ4iBwhOY-ZWAxFDZZ3CNohmEnuPPazwhJaho,4129
37
37
  celldetective/gui/survival_ui.py,sha256=2JGLC5m6D_gVLwnBAM7uEvuCKw1Cli8nM9i5s7TIpGg,33612
38
- celldetective/gui/tableUI.py,sha256=QRYlXc7751Ka5qbUHSGbE_nXTiiezAVfEWXiRKRmuRM,32188
38
+ celldetective/gui/tableUI.py,sha256=jkvXkLv2GLimApClvwtwAgpYJi8cpLKBM7MEBdbejbE,34572
39
39
  celldetective/gui/thresholds_gui.py,sha256=b8SkG4DlfxBRjacKTe1NSNkq7rJm8lnSLifH-mg846k,49529
40
- celldetective/gui/viewers.py,sha256=G8uNb0U_4tJiZkcAWX9BbCSBIUbF4tjedZD-5o4WKxY,27734
40
+ celldetective/gui/viewers.py,sha256=buBholjAieaVVb6YinVhxPshEHxBEU3er_N0UrkwAew,27734
41
41
  celldetective/icons/logo-large.png,sha256=FXSwV3u6zEKcfpuSn4unnqB0oUnN9cHqQ9BCKWytrpg,36631
42
42
  celldetective/icons/logo.png,sha256=wV2OS8_dU5Td5cgdPbCOU3JpMpTwNuYLnfVcnQX0tJA,2437
43
43
  celldetective/icons/signals_icon.png,sha256=vEiKoqWTtN0-uJgVqtAlwCuP-f4QeWYOlO3sdp2tg2w,3969
@@ -60,10 +60,10 @@ celldetective/models/tracking_configs/ricm.json,sha256=L-vmwCR1f89U-qnH2Ms0cBfPF
60
60
  celldetective/models/tracking_configs/ricm2.json,sha256=DDjJ6ScYcDWvlsy7ujPID8v8H28vcNcMuZmNR8XmGxo,2718
61
61
  celldetective/scripts/analyze_signals.py,sha256=23TXGNw-j5xT3ss4mXlnKdBgFLnQ50JUEQOC6_H7Q_0,2203
62
62
  celldetective/scripts/measure_cells.py,sha256=4uRG6Dg0WsO-N8ZaBJ4loWOvX6FdHaCblIFXq6Dtirc,11000
63
- celldetective/scripts/segment_cells.py,sha256=OSP52sPPHyhfXEjiXXdezkDY4MiFXLBWTb2_umRBD-M,8269
63
+ celldetective/scripts/segment_cells.py,sha256=55hM3JbMoW5TB43uENgtvADL8BziI17B3GjG4axsj6s,8291
64
64
  celldetective/scripts/segment_cells_thresholds.py,sha256=GbWXa6xoO8s4PinJPZIxAuosw4vpzyJ7FiFYpSURojk,4998
65
65
  celldetective/scripts/track_cells.py,sha256=AaNiYEW4osYKKR2kbdVLOUnQEBbcZIA-D0mkhcxPWTY,7985
66
- celldetective/scripts/train_segmentation_model.py,sha256=UY493QK7_FhS9uHYl2eeEYx7t0kw1jhvc0YMY12YZpI,8614
66
+ celldetective/scripts/train_segmentation_model.py,sha256=rw5LD70PrE_SCBvaFt0ri1uSa-YI5DM5exH_BGVlw5Y,8515
67
67
  celldetective/scripts/train_signal_model.py,sha256=9-dmPCLKJ9ypjsV9AwFd-Sb6B6YaHS0QGT218H5hUPo,1861
68
68
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  tests/test_events.py,sha256=eLFwwEEJfQAdwhews3-fn1HSvzozcNNFN_Qn0gOvQkE,685
@@ -72,13 +72,13 @@ tests/test_io.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
72
72
  tests/test_measure.py,sha256=FEUAs1rVHylvIvubCb0bJDNGZLVmkgXNgI3NaGQ1dA8,4542
73
73
  tests/test_neighborhood.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
74
74
  tests/test_preprocessing.py,sha256=FI-Wk-kc4wWmOQg_NLCUIZC1oti396wr5cC-BauBai0,1436
75
- tests/test_segmentation.py,sha256=-3b7o_fUVMYxfVwX5VHFqRF0dDXObSTtylf5XQGcq1A,3493
75
+ tests/test_segmentation.py,sha256=_HB8CCq-Ci6amf0xAmDIUuwtBUU_EGpgqLvcvSHrGug,3427
76
76
  tests/test_signals.py,sha256=No4cah6KxplhDcKXnU8RrA7eDla4hWw6ccf7xGnBokU,3599
77
77
  tests/test_tracking.py,sha256=8hebWSqEIuttD1ABn-6dKCT7EXKRR7-4RwyFWi1WPFo,8800
78
78
  tests/test_utils.py,sha256=NKRCAC1d89aBK5cWjTb7-pInYow901RrT-uBlIdz4KI,3692
79
- celldetective-1.1.1.post1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
80
- celldetective-1.1.1.post1.dist-info/METADATA,sha256=MItn6uMJhqWHbN0urj8068yO8xcUoc9c3kUsYTVre10,12418
81
- celldetective-1.1.1.post1.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
82
- celldetective-1.1.1.post1.dist-info/entry_points.txt,sha256=2NU6_EOByvPxqBbCvjwxlVlvnQreqZ3BKRCVIKEv3dg,62
83
- celldetective-1.1.1.post1.dist-info/top_level.txt,sha256=6rsIKKfGMKgud7HPuATcpq6EhdXwcg_yknBVWn9x4C4,20
84
- celldetective-1.1.1.post1.dist-info/RECORD,,
79
+ celldetective-1.1.1.post4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
80
+ celldetective-1.1.1.post4.dist-info/METADATA,sha256=hN7LbHEXIAV9Saz6XZZIxWnhbVQmvbJ9QRFwJ00PHLo,12418
81
+ celldetective-1.1.1.post4.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
82
+ celldetective-1.1.1.post4.dist-info/entry_points.txt,sha256=2NU6_EOByvPxqBbCvjwxlVlvnQreqZ3BKRCVIKEv3dg,62
83
+ celldetective-1.1.1.post4.dist-info/top_level.txt,sha256=6rsIKKfGMKgud7HPuATcpq6EhdXwcg_yknBVWn9x4C4,20
84
+ celldetective-1.1.1.post4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.1)
2
+ Generator: setuptools (70.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -44,7 +44,7 @@ class TestDLMCF7Segmentation(unittest.TestCase):
44
44
  def test_correct_segmentation_with_transferred_model(self):
45
45
 
46
46
  labels = segment(self.stack, "MCF7_h_versatile", channels=self.channels, spatial_calibration=self.spatial_calibration, view_on_napari=False,
47
- use_gpu=True, time_flat_normalization=False, time_flat_percentiles=(0.0,99.99))
47
+ use_gpu=True)
48
48
  np.testing.assert_array_equal(labels[0], labels[1])
49
49
 
50
50
  self.binary_label_true = self.label_true.copy().astype(float)