spacr 0.1.55__py3-none-any.whl → 0.1.62__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.
- spacr/__init__.py +4 -1
- spacr/app_annotate.py +1 -1
- spacr/app_make_masks.py +1 -4
- spacr/core.py +1 -1
- spacr/gui.py +3 -3
- spacr/gui_core.py +608 -0
- spacr/gui_elements.py +324 -0
- spacr/gui_run.py +58 -0
- spacr/gui_utils.py +3 -1076
- spacr/gui_wrappers.py +137 -0
- spacr/measure.py +6 -8
- spacr/plot.py +53 -1
- spacr/settings.py +2 -1
- spacr/utils.py +19 -11
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/METADATA +1 -1
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/RECORD +20 -16
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/LICENSE +0 -0
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/WHEEL +0 -0
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/entry_points.txt +0 -0
- {spacr-0.1.55.dist-info → spacr-0.1.62.dist-info}/top_level.txt +0 -0
spacr/gui_wrappers.py
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
import traceback, matplotlib, spacr
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
matplotlib.use('Agg')
|
4
|
+
|
5
|
+
fig_queue = None
|
6
|
+
|
7
|
+
def my_show():
|
8
|
+
"""
|
9
|
+
Replacement for plt.show() that queues figures instead of displaying them.
|
10
|
+
"""
|
11
|
+
fig = plt.gcf()
|
12
|
+
fig_queue.put(fig)
|
13
|
+
plt.close(fig)
|
14
|
+
|
15
|
+
def measure_crop_wrapper(settings, q, fig_queue):
|
16
|
+
"""
|
17
|
+
Wraps the measure_crop function to integrate with GUI processes.
|
18
|
+
|
19
|
+
Parameters:
|
20
|
+
- settings: dict, The settings for the measure_crop function.
|
21
|
+
- q: multiprocessing.Queue, Queue for logging messages to the GUI.
|
22
|
+
- fig_queue: multiprocessing.Queue, Queue for sending figures to the GUI.
|
23
|
+
"""
|
24
|
+
|
25
|
+
# Temporarily override plt.show
|
26
|
+
original_show = plt.show
|
27
|
+
plt.show = my_show
|
28
|
+
|
29
|
+
try:
|
30
|
+
print('start')
|
31
|
+
spacr.measure.measure_crop(settings=settings)
|
32
|
+
except Exception as e:
|
33
|
+
errorMessage = f"Error during processing: {e}"
|
34
|
+
q.put(errorMessage)
|
35
|
+
traceback.print_exc()
|
36
|
+
finally:
|
37
|
+
plt.show = original_show
|
38
|
+
|
39
|
+
def preprocess_generate_masks_wrapper(settings, q, fig_queue):
|
40
|
+
"""
|
41
|
+
Wraps the measure_crop function to integrate with GUI processes.
|
42
|
+
|
43
|
+
Parameters:
|
44
|
+
- settings: dict, The settings for the measure_crop function.
|
45
|
+
- q: multiprocessing.Queue, Queue for logging messages to the GUI.
|
46
|
+
- fig_queue: multiprocessing.Queue, Queue for sending figures to the GUI.
|
47
|
+
"""
|
48
|
+
|
49
|
+
# Temporarily override plt.show
|
50
|
+
original_show = plt.show
|
51
|
+
plt.show = my_show
|
52
|
+
|
53
|
+
try:
|
54
|
+
spacr.core.preprocess_generate_masks(src=settings['src'], settings=settings)
|
55
|
+
except Exception as e:
|
56
|
+
errorMessage = f"Error during processing: {e}"
|
57
|
+
q.put(errorMessage)
|
58
|
+
traceback.print_exc()
|
59
|
+
finally:
|
60
|
+
plt.show = original_show
|
61
|
+
|
62
|
+
def sequencing_wrapper(settings, q, fig_queue):
|
63
|
+
|
64
|
+
# Temporarily override plt.show
|
65
|
+
original_show = plt.show
|
66
|
+
plt.show = my_show
|
67
|
+
|
68
|
+
try:
|
69
|
+
spacr.sequencing.analyze_reads(settings=settings)
|
70
|
+
except Exception as e:
|
71
|
+
errorMessage = f"Error during processing: {e}"
|
72
|
+
q.put(errorMessage)
|
73
|
+
traceback.print_exc()
|
74
|
+
finally:
|
75
|
+
plt.show = original_show
|
76
|
+
|
77
|
+
def umap_wrapper(settings, q, fig_queue):
|
78
|
+
|
79
|
+
# Temporarily override plt.show
|
80
|
+
original_show = plt.show
|
81
|
+
plt.show = my_show
|
82
|
+
|
83
|
+
try:
|
84
|
+
spacr.core.generate_image_umap(settings=settings)
|
85
|
+
except Exception as e:
|
86
|
+
errorMessage = f"Error during processing: {e}"
|
87
|
+
q.put(errorMessage)
|
88
|
+
traceback.print_exc()
|
89
|
+
finally:
|
90
|
+
plt.show = original_show
|
91
|
+
|
92
|
+
def train_test_model_wrapper(settings, q, fig_queue):
|
93
|
+
"""
|
94
|
+
Wraps the measure_crop function to integrate with GUI processes.
|
95
|
+
|
96
|
+
Parameters:
|
97
|
+
- settings: dict, The settings for the measure_crop function.
|
98
|
+
- q: multiprocessing.Queue, Queue for logging messages to the GUI.
|
99
|
+
- fig_queue: multiprocessing.Queue, Queue for sending figures to the GUI.
|
100
|
+
"""
|
101
|
+
|
102
|
+
# Temporarily override plt.show
|
103
|
+
original_show = plt.show
|
104
|
+
plt.show = my_show
|
105
|
+
|
106
|
+
try:
|
107
|
+
spacr.core.train_test_model(settings['src'], settings=settings)
|
108
|
+
except Exception as e:
|
109
|
+
errorMessage = f"Error during processing: {e}"
|
110
|
+
q.put(errorMessage) # Send the error message to the GUI via the queue
|
111
|
+
traceback.print_exc()
|
112
|
+
finally:
|
113
|
+
plt.show = original_show # Restore the original plt.show function
|
114
|
+
|
115
|
+
|
116
|
+
def run_multiple_simulations_wrapper(settings, q, fig_queue):
|
117
|
+
"""
|
118
|
+
Wraps the run_multiple_simulations function to integrate with GUI processes.
|
119
|
+
|
120
|
+
Parameters:
|
121
|
+
- settings: dict, The settings for the run_multiple_simulations function.
|
122
|
+
- q: multiprocessing.Queue, Queue for logging messages to the GUI.
|
123
|
+
- fig_queue: multiprocessing.Queue, Queue for sending figures to the GUI.
|
124
|
+
"""
|
125
|
+
|
126
|
+
# Temporarily override plt.show
|
127
|
+
original_show = plt.show
|
128
|
+
plt.show = my_show
|
129
|
+
|
130
|
+
try:
|
131
|
+
spacr.sim.run_multiple_simulations(settings=settings)
|
132
|
+
except Exception as e:
|
133
|
+
errorMessage = f"Error during processing: {e}"
|
134
|
+
q.put(errorMessage) # Send the error message to the GUI via the queue
|
135
|
+
traceback.print_exc()
|
136
|
+
finally:
|
137
|
+
plt.show = original_show # Restore the original plt.show function
|
spacr/measure.py
CHANGED
@@ -16,12 +16,6 @@ from skimage.util import img_as_bool
|
|
16
16
|
|
17
17
|
from .logger import log_function_call
|
18
18
|
|
19
|
-
#from .io import create_database, _save_settings_to_db
|
20
|
-
#from .timelapse import _timelapse_masks_to_gif, _scmovie
|
21
|
-
#from .plot import _plot_cropped_arrays, _save_scimg_plot
|
22
|
-
#from .utils import _merge_overlapping_objects, _filter_object, _relabel_parent_with_child_labels, _exclude_objects
|
23
|
-
#from .utils import _merge_and_save_to_database, _crop_center, _find_bounding_box, _generate_names, _get_percentiles, normalize_to_dtype, _map_wells_png, _list_endpoint_subdirectories, _generate_representative_images
|
24
|
-
|
25
19
|
def get_components(cell_mask, nucleus_mask, pathogen_mask):
|
26
20
|
"""
|
27
21
|
Get the components (nucleus and pathogens) for each cell in the given masks.
|
@@ -626,8 +620,13 @@ def _measure_crop_core(index, time_ls, file, settings):
|
|
626
620
|
|
627
621
|
file_name = os.path.splitext(file)[0]
|
628
622
|
data = np.load(os.path.join(settings['input_folder'], file))
|
629
|
-
|
630
623
|
data_type = data.dtype
|
624
|
+
if data_type not in ['uint8','uint16']:
|
625
|
+
data_type_before = data_type
|
626
|
+
data = data.astype(np.uint16)
|
627
|
+
data_type = data.dtype
|
628
|
+
print(f'Converted data from {data_type_before} to {data_type}')
|
629
|
+
|
631
630
|
if settings['save_measurements']:
|
632
631
|
os.makedirs(source_folder+'/measurements', exist_ok=True)
|
633
632
|
_create_database(source_folder+'/measurements/measurements.db')
|
@@ -832,7 +831,6 @@ def _measure_crop_core(index, time_ls, file, settings):
|
|
832
831
|
png_channels = normalize_to_dtype(png_channels, settings['normalize'][0], settings['normalize'][1], percentile_list=percentile_list)
|
833
832
|
else:
|
834
833
|
png_channels = normalize_to_dtype(png_channels, 0, 100)
|
835
|
-
|
836
834
|
os.makedirs(png_folder, exist_ok=True)
|
837
835
|
|
838
836
|
if png_channels.shape[2] == 2:
|
spacr/plot.py
CHANGED
@@ -1565,4 +1565,56 @@ def plot_feature_importance(feature_importance_df):
|
|
1565
1565
|
ax.set_xlabel('Feature Importance', fontsize=font_size)
|
1566
1566
|
ax.tick_params(axis='both', which='major', labelsize=font_size)
|
1567
1567
|
plt.tight_layout()
|
1568
|
-
return fig
|
1568
|
+
return fig
|
1569
|
+
|
1570
|
+
def read_and_plot__vision_results(base_dir, y_axis='accuracy', name_split='_time', y_lim=[0.8, 0.9]):
|
1571
|
+
# List to store data from all CSV files
|
1572
|
+
data_frames = []
|
1573
|
+
|
1574
|
+
dst = os.path.join(base_dir, 'result')
|
1575
|
+
os.mkdir(dst,exists=True)
|
1576
|
+
|
1577
|
+
# Walk through the directory
|
1578
|
+
for root, dirs, files in os.walk(base_dir):
|
1579
|
+
for file in files:
|
1580
|
+
if file.endswith("_test_result.csv"):
|
1581
|
+
file_path = os.path.join(root, file)
|
1582
|
+
# Extract model information from the file name
|
1583
|
+
file_name = os.path.basename(file_path)
|
1584
|
+
model = file_name.split(f'{name_split}')[0]
|
1585
|
+
|
1586
|
+
# Extract epoch information from the file name
|
1587
|
+
epoch_info = file_name.split('_time')[1]
|
1588
|
+
base_folder = os.path.dirname(file_path)
|
1589
|
+
epoch = os.path.basename(base_folder)
|
1590
|
+
|
1591
|
+
# Read the CSV file
|
1592
|
+
df = pd.read_csv(file_path)
|
1593
|
+
df['model'] = model
|
1594
|
+
df['epoch'] = epoch
|
1595
|
+
|
1596
|
+
# Append the data frame to the list
|
1597
|
+
data_frames.append(df)
|
1598
|
+
|
1599
|
+
# Concatenate all data frames
|
1600
|
+
if data_frames:
|
1601
|
+
result_df = pd.concat(data_frames, ignore_index=True)
|
1602
|
+
|
1603
|
+
# Calculate average y_axis per model
|
1604
|
+
avg_metric = result_df.groupby('model')[y_axis].mean().reset_index()
|
1605
|
+
avg_metric = avg_metric.sort_values(by=y_axis)
|
1606
|
+
print(avg_metric)
|
1607
|
+
|
1608
|
+
# Plotting the results
|
1609
|
+
plt.figure(figsize=(10, 6))
|
1610
|
+
plt.bar(avg_metric['model'], avg_metric[y_axis])
|
1611
|
+
plt.xlabel('Model')
|
1612
|
+
plt.ylabel(f'{y_axis}')
|
1613
|
+
plt.title(f'Average {y_axis.capitalize()} per Model')
|
1614
|
+
plt.xticks(rotation=45)
|
1615
|
+
plt.tight_layout()
|
1616
|
+
if y_lim is not None:
|
1617
|
+
plt.ylim(y_lim)
|
1618
|
+
plt.show()
|
1619
|
+
else:
|
1620
|
+
print("No CSV files found in the specified directory.")
|
spacr/settings.py
CHANGED
@@ -795,7 +795,8 @@ def check_settings(vars_dict):
|
|
795
795
|
return settings
|
796
796
|
|
797
797
|
def generate_fields(variables, scrollable_frame):
|
798
|
-
from .gui_utils import create_input_field
|
798
|
+
from .gui_utils import create_input_field
|
799
|
+
from .gui_elements import spacrToolTip
|
799
800
|
row = 1
|
800
801
|
vars_dict = {}
|
801
802
|
tooltips = {
|
spacr/utils.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import sys, os, re, sqlite3, torch, torchvision, random, string, shutil, cv2, tarfile, glob
|
1
|
+
import sys, os, re, sqlite3, torch, torchvision, random, string, shutil, cv2, tarfile, glob, psutil, platform, signal
|
2
2
|
|
3
3
|
import numpy as np
|
4
4
|
from cellpose import models as cp_models
|
@@ -72,13 +72,12 @@ from sklearn.cluster import KMeans
|
|
72
72
|
from scipy import stats
|
73
73
|
|
74
74
|
from .logger import log_function_call
|
75
|
-
|
76
|
-
import os
|
77
|
-
import signal
|
78
|
-
import psutil
|
79
|
-
import platform
|
80
75
|
from multiprocessing import set_start_method, get_start_method
|
81
76
|
|
77
|
+
import tkinter as tk
|
78
|
+
from tkinter import ttk
|
79
|
+
import tkinter.font as tkFont
|
80
|
+
|
82
81
|
def reset_mp():
|
83
82
|
current_method = get_start_method()
|
84
83
|
system = platform.system()
|
@@ -473,7 +472,7 @@ def is_list_of_lists(var):
|
|
473
472
|
return True
|
474
473
|
return False
|
475
474
|
|
476
|
-
def normalize_to_dtype(array, p1=2, p2=98, percentile_list=None):
|
475
|
+
def normalize_to_dtype(array, p1=2, p2=98, percentile_list=None, new_dtype=None):
|
477
476
|
"""
|
478
477
|
Normalize each image in the stack to its own percentiles.
|
479
478
|
|
@@ -492,7 +491,16 @@ def normalize_to_dtype(array, p1=2, p2=98, percentile_list=None):
|
|
492
491
|
The normalized stack with the same shape as the input stack.
|
493
492
|
"""
|
494
493
|
|
495
|
-
|
494
|
+
if new_dtype is None:
|
495
|
+
out_range = (0, np.iinfo(array.dtype).max)
|
496
|
+
elif new_dtype in [np.uint8, np.uint16]:
|
497
|
+
out_range = (0, np.iinfo(new_dtype).max)
|
498
|
+
elif new_dtype in ['uint8', 'uint16']:
|
499
|
+
new_dtype = np.uint8 if new_dtype == 'uint8' else np.uint16
|
500
|
+
out_range = (0, np.iinfo(new_dtype).max)
|
501
|
+
else:
|
502
|
+
out_range = (0, np.iinfo(array.dtype).max)
|
503
|
+
|
496
504
|
nimg = array.shape[2]
|
497
505
|
new_stack = np.empty_like(array, dtype=array.dtype)
|
498
506
|
|
@@ -4051,7 +4059,7 @@ def _merge_cells_based_on_parasite_overlap(parasite_mask, cell_mask, nuclei_mask
|
|
4051
4059
|
|
4052
4060
|
# Relabel the merged cell mask
|
4053
4061
|
relabeled_cell_mask, _ = label(cell_mask, return_num=True)
|
4054
|
-
return relabeled_cell_mask
|
4062
|
+
return relabeled_cell_mask.astype(np.uint16)
|
4055
4063
|
|
4056
4064
|
def adjust_cell_masks(parasite_folder, cell_folder, nuclei_folder, overlap_threshold=5, perimeter_threshold=30):
|
4057
4065
|
|
@@ -4091,7 +4099,7 @@ def adjust_cell_masks(parasite_folder, cell_folder, nuclei_folder, overlap_thres
|
|
4091
4099
|
merged_cell_mask = _merge_cells_based_on_parasite_overlap(parasite_mask, cell_mask, nuclei_mask, overlap_threshold, perimeter_threshold)
|
4092
4100
|
|
4093
4101
|
# Force 16 bit
|
4094
|
-
|
4102
|
+
#merged_cell_mask = merged_cell_mask.astype(np.uint16)
|
4095
4103
|
|
4096
4104
|
# Overwrite the original cell mask file with the merged result
|
4097
4105
|
np.save(cell_path, merged_cell_mask)
|
@@ -4383,4 +4391,4 @@ def correct_masks(src):
|
|
4383
4391
|
|
4384
4392
|
cell_path = os.path.join(src,'norm_channel_stack', 'cell_mask_stack')
|
4385
4393
|
convert_and_relabel_masks(cell_path)
|
4386
|
-
_load_and_concatenate_arrays(src, [0,1,2,3], 1, 0, 2)
|
4394
|
+
_load_and_concatenate_arrays(src, [0,1,2,3], 1, 0, 2)
|
@@ -1,11 +1,11 @@
|
|
1
|
-
spacr/__init__.py,sha256=
|
1
|
+
spacr/__init__.py,sha256=8uhfJ_RcnX4OmvflNRcts4zxnyfML6xiyIeFGZeMpXg,1416
|
2
2
|
spacr/__main__.py,sha256=bkAJJD2kjIqOP-u1kLvct9jQQCeUXzlEjdgitwi1Lm8,75
|
3
3
|
spacr/alpha.py,sha256=Y95sLEfpK2OSYKRn3M8eUOU33JJeXfV8zhrC4KnwSTY,35244
|
4
4
|
spacr/annotate_app.py,sha256=imQ7ZEXDyM6ce1dxZ1xUS1-KequuF_NCI4xCaPLjvco,29275
|
5
5
|
spacr/annotate_app_v2.py,sha256=imQ7ZEXDyM6ce1dxZ1xUS1-KequuF_NCI4xCaPLjvco,29275
|
6
|
-
spacr/app_annotate.py,sha256=
|
6
|
+
spacr/app_annotate.py,sha256=QKWQ0GGiKu5ik14OB4Z3YIqIJYpmsNJlqpnfnQPowAM,23563
|
7
7
|
spacr/app_classify.py,sha256=urTP_wlZ58hSyM5a19slYlBxN0PdC-9-ga0hvq8CGWc,165
|
8
|
-
spacr/app_make_masks.py,sha256=
|
8
|
+
spacr/app_make_masks.py,sha256=0N8Wfby3HaVX4m9tOyBy7OQolamYG9lVwmnlzkK4uaE,44993
|
9
9
|
spacr/app_make_masks_v2.py,sha256=OkNeskNbgep8wQa4ES3jpJjZLfn4yIkGwQOd9r0spfA,30497
|
10
10
|
spacr/app_mask.py,sha256=l-dBY8ftzCMdDe6-pXc2Nh_u-idNL9G7UOARiLJBtds,153
|
11
11
|
spacr/app_measure.py,sha256=_K7APYIeOKpV6e_LcqabBjvEi7mfq9Fch8175x1x0k8,162
|
@@ -14,43 +14,47 @@ spacr/app_umap.py,sha256=ZWAmf_OsIKbYvolYuWPMYhdlVe-n2CADoJulAizMiEo,153
|
|
14
14
|
spacr/chris.py,sha256=YlBjSgeZaY8HPy6jkrT_ISAnCMAKVfvCxF0I9eAZLFM,2418
|
15
15
|
spacr/classify_app.py,sha256=Zi15ryc1ocYitRF4kyxlC27XxGyzfSPdvj2d6ZrSh7E,8446
|
16
16
|
spacr/cli.py,sha256=507jfOOEV8BoL4eeUcblvH-iiDHdBrEVJLu1ghAAPSc,1800
|
17
|
-
spacr/core.py,sha256=
|
17
|
+
spacr/core.py,sha256=JZ8LerUgXarhCQWsUlBD6KULhsIBDlpvotZCSwRt1rI,160317
|
18
18
|
spacr/deep_spacr.py,sha256=rvqOoY9dadcTcKiABf61Nb8HEMVp1NouFmtAE2ee1T4,37056
|
19
19
|
spacr/foldseek.py,sha256=YIP1d4Ci6CeA9jSyiv-HTDbNmAmcSM9Y_DaOs7wYzLY,33546
|
20
20
|
spacr/get_alfafold_structures.py,sha256=ehx_MQgb12k3hFecP6cYVlm5TLO8iWjgevy8ESyS3cw,3544
|
21
21
|
spacr/graph_learning.py,sha256=1tR-ZxvXE3dBz1Saw7BeVFcrsUFu9OlUZeZVifih9eo,13070
|
22
|
-
spacr/gui.py,sha256=
|
22
|
+
spacr/gui.py,sha256=kvQ0X9nyZz_BWsOyJSNSv7gEG1ZuTqjz4EH78e0uul4,7783
|
23
23
|
spacr/gui_2.py,sha256=ZAI5quQYbhQJ40vK0NCqU_UMSPLkpfeQpomBWUSM0fc,6946
|
24
24
|
spacr/gui_annotate.py,sha256=ugBksLGOHdtOLlEuRyyc59TrkYKu3rDf8JxEgiBSVao,6536
|
25
25
|
spacr/gui_classify_app.py,sha256=Zi15ryc1ocYitRF4kyxlC27XxGyzfSPdvj2d6ZrSh7E,8446
|
26
|
+
spacr/gui_core.py,sha256=itgdS6bokEi2ouRMTKjB6T3TnMyUaAPHNTscAEsq4jE,28401
|
27
|
+
spacr/gui_elements.py,sha256=WoDrxZg8bzIw5G-WsXG4ek-62cMsU6z0zyn_1P9CX7E,15063
|
26
28
|
spacr/gui_make_masks_app.py,sha256=tl4M4Q2WQgrrwjRBJVevxJxpNowqzPhWkdCOm2UfRbw,45053
|
27
29
|
spacr/gui_make_masks_app_v2.py,sha256=X3izTBXdCZDlkVe-fbG-jmCQtcAbmK0OIivjyWaLhug,30576
|
28
30
|
spacr/gui_mask_app.py,sha256=mhTl_XzXLFl8Tx3WYEMpdYB_qw9u5JJa0EdkvlcIzAE,10706
|
29
31
|
spacr/gui_measure_app.py,sha256=_C1-XFL5HSquUEEbM_NcxdvHx-socPFCx85MBG4d6xo,10598
|
32
|
+
spacr/gui_run.py,sha256=0x85MJqFtREuWuNeIRLB8hFeibKGszfN14POQQWzPDQ,1998
|
30
33
|
spacr/gui_sim_app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
|
-
spacr/gui_utils.py,sha256=
|
34
|
+
spacr/gui_utils.py,sha256=sDPmdXonIiCkXm2NBH_Tghf05_2PPV-ltWY8YCgzOzA,5441
|
35
|
+
spacr/gui_wrappers.py,sha256=OBSArqRrM0neEOz44Z_YVceISLqY6WverrVm60GCgqo,4248
|
32
36
|
spacr/io.py,sha256=IoERqSwoxJrInYl-E0WfwFOEDZXFdJofk5DmpbyLGWM,112077
|
33
37
|
spacr/logger.py,sha256=7Zqr3TuuOQLWT32gYr2q1qvv7x0a2JhLANmZcnBXAW8,670
|
34
38
|
spacr/make_masks_app.py,sha256=iGaTwhowoe2JMOSOf8bJwQZTooRhLQx7KO0ewnAmqDY,45138
|
35
39
|
spacr/make_masks_app_v2.py,sha256=X3izTBXdCZDlkVe-fbG-jmCQtcAbmK0OIivjyWaLhug,30576
|
36
40
|
spacr/mask_app.py,sha256=mhTl_XzXLFl8Tx3WYEMpdYB_qw9u5JJa0EdkvlcIzAE,10706
|
37
|
-
spacr/measure.py,sha256=
|
41
|
+
spacr/measure.py,sha256=C8el2DFz1xMa8_V5xU2q5QHs-aZzfCniI-ylcY5RYSI,55736
|
38
42
|
spacr/measure_app.py,sha256=_C1-XFL5HSquUEEbM_NcxdvHx-socPFCx85MBG4d6xo,10598
|
39
43
|
spacr/old_code.py,sha256=jw67DAGoLBd7mWofVzRJSEmCI1Qrff26zIo65SEkV00,13817
|
40
|
-
spacr/plot.py,sha256=
|
44
|
+
spacr/plot.py,sha256=DYJEoK1kz2ih6ZGvKiA3xTqeIeKQNhuQKwgrscopFxA,69101
|
41
45
|
spacr/sequencing.py,sha256=fHZRnoMSxmhMdadkei3lUeBdckqFyptWdQyWsDW3aaU,83304
|
42
|
-
spacr/settings.py,sha256=
|
46
|
+
spacr/settings.py,sha256=Yp4VlkmZLuklSbAf3kiIm7iNTWpy2tJuhLNmLUqvFeM,45668
|
43
47
|
spacr/sim.py,sha256=FveaVgBi3eypO2oVB5Dx-v0CC1Ny7UPfXkJiiRRodAk,71212
|
44
48
|
spacr/sim_app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
49
|
spacr/timelapse.py,sha256=KMYCgHzf9LTZe-lWl5mvH2EjbKRE6OhpwdY13wEumGc,39504
|
46
|
-
spacr/utils.py,sha256=
|
50
|
+
spacr/utils.py,sha256=149Bbha9OXAKyDwABgHz5h4O7Gqy6aeFLA1pMSq311s,186966
|
47
51
|
spacr/version.py,sha256=axH5tnGwtgSnJHb5IDhiu4Zjk5GhLyAEDRe-rnaoFOA,409
|
48
52
|
spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model,sha256=z8BbHWZPRnE9D_BHO0fBREE85c1vkltDs-incs2ytXQ,26566572
|
49
53
|
spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv,sha256=fBAGuL_B8ERVdVizO3BHozTDSbZUh1yFzsYK3wkQN68,420
|
50
54
|
spacr/models/cp/toxo_pv_lumen.CP_model,sha256=2y_CindYhmTvVwBH39SNILF3rI3x9SsRn6qrMxHy3l0,26562451
|
51
|
-
spacr-0.1.
|
52
|
-
spacr-0.1.
|
53
|
-
spacr-0.1.
|
54
|
-
spacr-0.1.
|
55
|
-
spacr-0.1.
|
56
|
-
spacr-0.1.
|
55
|
+
spacr-0.1.62.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
|
56
|
+
spacr-0.1.62.dist-info/METADATA,sha256=6K_4R8rwrnkEisgBNA6iy3Wm-vweiOVtYUrkJb9VhiY,5050
|
57
|
+
spacr-0.1.62.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
58
|
+
spacr-0.1.62.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
|
59
|
+
spacr-0.1.62.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
|
60
|
+
spacr-0.1.62.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|