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.
- celldetective/__main__.py +17 -0
- celldetective/gui/classifier_widget.py +10 -3
- celldetective/gui/control_panel.py +11 -4
- celldetective/gui/layouts.py +253 -8
- celldetective/gui/neighborhood_options.py +11 -5
- celldetective/gui/retrain_segmentation_model_options.py +66 -164
- celldetective/gui/retrain_signal_model_options.py +18 -164
- celldetective/gui/signal_annotator.py +85 -25
- celldetective/gui/tableUI.py +174 -65
- celldetective/gui/viewers.py +1 -1
- celldetective/io.py +69 -3
- celldetective/neighborhood.py +96 -26
- celldetective/preprocessing.py +95 -63
- celldetective/scripts/segment_cells.py +1 -0
- celldetective/scripts/train_segmentation_model.py +11 -22
- celldetective/segmentation.py +67 -29
- celldetective/utils.py +54 -14
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/METADATA +1 -1
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/RECORD +24 -24
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/WHEEL +1 -1
- tests/test_segmentation.py +1 -1
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/LICENSE +0 -0
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/entry_points.txt +0 -0
- {celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/top_level.txt +0 -0
celldetective/segmentation.py
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if
|
|
140
|
-
frame =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1087
|
+
channel_indices = []
|
|
1088
|
+
for c in required_channels:
|
|
1089
|
+
if c!='None' and c is not None:
|
|
1065
1090
|
try:
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
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
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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,43 +1,43 @@
|
|
|
1
1
|
celldetective/__init__.py,sha256=FEZpJKcskBH2IginYzeqPWoR1lVGuyYCXhv7Hnlkoo8,49
|
|
2
|
-
celldetective/__main__.py,sha256=
|
|
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=
|
|
6
|
+
celldetective/io.py,sha256=_ivq2zE5ffHadZ-YOWSSX5J1GTlEohg6WPvC3xEBZvQ,82819
|
|
7
7
|
celldetective/measure.py,sha256=HDQZfSRx3daOCV5Snu1paYU5JYkwu8engO2qZqhTAUo,48089
|
|
8
|
-
celldetective/neighborhood.py,sha256=
|
|
9
|
-
celldetective/preprocessing.py,sha256=
|
|
10
|
-
celldetective/segmentation.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
32
|
-
celldetective/gui/retrain_signal_model_options.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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.
|
|
80
|
-
celldetective-1.1.1.
|
|
81
|
-
celldetective-1.1.1.
|
|
82
|
-
celldetective-1.1.1.
|
|
83
|
-
celldetective-1.1.1.
|
|
84
|
-
celldetective-1.1.1.
|
|
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,,
|
tests/test_segmentation.py
CHANGED
|
@@ -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
|
|
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)
|
|
File without changes
|
{celldetective-1.1.1.post1.dist-info → celldetective-1.1.1.post4.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|