spacr 0.3.47__py3-none-any.whl → 0.3.52__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/chat_bot.py +31 -0
- spacr/gui_elements.py +33 -7
- spacr/gui_utils.py +11 -12
- spacr/measure.py +4 -1
- spacr/ml.py +453 -141
- spacr/plot.py +612 -52
- spacr/sequencing.py +5 -2
- spacr/settings.py +15 -31
- spacr/toxo.py +447 -159
- spacr/utils.py +35 -4
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/METADATA +3 -1
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/RECORD +16 -15
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/LICENSE +0 -0
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/WHEEL +0 -0
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/entry_points.txt +0 -0
- {spacr-0.3.47.dist-info → spacr-0.3.52.dist-info}/top_level.txt +0 -0
spacr/sequencing.py
CHANGED
@@ -493,7 +493,7 @@ def graph_sequencing_stats(settings):
|
|
493
493
|
|
494
494
|
def _plot_density(df, dependent_variable, dst=None):
|
495
495
|
"""Plot a density plot of the dependent variable."""
|
496
|
-
plt.figure(figsize=(10,
|
496
|
+
plt.figure(figsize=(10, 10))
|
497
497
|
sns.kdeplot(df[dependent_variable], fill=True, alpha=0.6)
|
498
498
|
plt.title(f'Density Plot of {dependent_variable}')
|
499
499
|
plt.xlabel(dependent_variable)
|
@@ -548,6 +548,9 @@ def graph_sequencing_stats(settings):
|
|
548
548
|
label=f'Closest Threshold ({closest_threshold["fraction_threshold"]:.4f})')
|
549
549
|
plt.axhline(y=target_unique_count, color='black', linestyle='--',
|
550
550
|
label=f'Target Unique Count ({target_unique_count})')
|
551
|
+
|
552
|
+
plt.xlim(0,0.1)
|
553
|
+
plt.ylim(0,20)
|
551
554
|
|
552
555
|
if dst is not None:
|
553
556
|
fig_path = os.path.join(dst, 'results')
|
@@ -594,7 +597,7 @@ def graph_sequencing_stats(settings):
|
|
594
597
|
df = pd.merge(df, unique_counts, on=['plate', 'row', 'column'], how='left')
|
595
598
|
|
596
599
|
print(f"unique_count mean: {unique_count_mean} std: {unique_count_std}")
|
597
|
-
|
600
|
+
display(df)
|
598
601
|
#_plot_density(df, dependent_variable='unique_counts')
|
599
602
|
plot_plates(df=df, variable='unique_counts', grouping='mean', min_max='allq', cmap='viridis',min_count=0, verbose=True, dst=dst)
|
600
603
|
|
spacr/settings.py
CHANGED
@@ -246,7 +246,7 @@ def get_measure_crop_settings(settings={}):
|
|
246
246
|
settings.setdefault('normalize_by','png')
|
247
247
|
settings.setdefault('crop_mode',['cell'])
|
248
248
|
settings.setdefault('dialate_pngs', False)
|
249
|
-
settings.setdefault('dialate_png_ratios', [0.2
|
249
|
+
settings.setdefault('dialate_png_ratios', [0.2])
|
250
250
|
|
251
251
|
# Timelapsed settings
|
252
252
|
settings.setdefault('timelapse', False)
|
@@ -549,7 +549,7 @@ def get_perform_regression_default_settings(settings):
|
|
549
549
|
settings.setdefault('filter_column','column')
|
550
550
|
settings.setdefault('plate','plate1')
|
551
551
|
settings.setdefault('class_1_threshold',None)
|
552
|
-
settings.setdefault('metadata_files',['/home/carruthers/Documents/
|
552
|
+
settings.setdefault('metadata_files',['/home/carruthers/Documents/TGGT1_Summary.csv','/home/carruthers/Documents/TGME49_Summary.csv'])
|
553
553
|
settings.setdefault('volcano','gene')
|
554
554
|
settings.setdefault('toxo', True)
|
555
555
|
|
@@ -697,16 +697,6 @@ expected_types = {
|
|
697
697
|
"overlay_chans": list,
|
698
698
|
"overlay": bool,
|
699
699
|
"normalization_percentiles": list,
|
700
|
-
"print_object_number": bool,
|
701
|
-
"nr": int,
|
702
|
-
"figuresize": int,
|
703
|
-
"cmap": str,
|
704
|
-
"test_mode": bool,
|
705
|
-
"test_images": int,
|
706
|
-
"remove_background_cell": bool,
|
707
|
-
"remove_background_nucleus": bool,
|
708
|
-
"remove_background_pathogen": bool,
|
709
|
-
"pathogen_model": (str, type(None)),
|
710
700
|
"filter": bool,
|
711
701
|
"fill_in":bool,
|
712
702
|
"upscale": bool,
|
@@ -825,18 +815,6 @@ expected_types = {
|
|
825
815
|
"transform": (str, type(None)),
|
826
816
|
"agg_type": str,
|
827
817
|
"min_cell_count": int,
|
828
|
-
"regression_type": str,
|
829
|
-
"random_row_column_effects": bool,
|
830
|
-
"alpha": float,
|
831
|
-
"fraction_threshold": float,
|
832
|
-
"class_1_threshold": (float, type(None)),
|
833
|
-
"batch_size": int,
|
834
|
-
"CP_prob": float,
|
835
|
-
"flow_threshold": float,
|
836
|
-
"percentiles": (list, type(None)),
|
837
|
-
"invert": bool,
|
838
|
-
"diameter": int,
|
839
|
-
"grayscale": bool,
|
840
818
|
"resize": bool,
|
841
819
|
"target_height": (int, type(None)),
|
842
820
|
"target_width": (int, type(None)),
|
@@ -881,9 +859,6 @@ expected_types = {
|
|
881
859
|
"metadata_type_by":str,
|
882
860
|
"custom_measurement":str,
|
883
861
|
"custom_model":bool,
|
884
|
-
"size":int,
|
885
|
-
"test_split":float,
|
886
|
-
"class_metadata":list, # This is a list of lists
|
887
862
|
"png_type":str,
|
888
863
|
"custom_model_path":str,
|
889
864
|
"generate_training_dataset":bool,
|
@@ -894,6 +869,7 @@ expected_types = {
|
|
894
869
|
"correlate":bool,
|
895
870
|
"target_layer":str,
|
896
871
|
"save_to_db":bool,
|
872
|
+
"test_mode":bool,
|
897
873
|
"normalize_input":bool,
|
898
874
|
}
|
899
875
|
|
@@ -904,7 +880,7 @@ categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset
|
|
904
880
|
"Nucleus": ["nucleus_intensity_range", "nucleus_size_range", "nucleus_chann_dim", "nucleus_channel", "nucleus_background", "nucleus_Signal_to_noise", "nucleus_CP_prob", "nucleus_FT", "remove_background_nucleus", "nucleus_min_size", "nucleus_mask_dim", "nucleus_loc"],
|
905
881
|
"Pathogen": ["pathogen_intensity_range", "pathogen_size_range", "pathogen_chann_dim", "pathogen_channel", "pathogen_background", "pathogen_Signal_to_noise", "pathogen_CP_prob", "pathogen_FT", "pathogen_model", "remove_background_pathogen", "pathogen_min_size", "pathogen_mask_dim", "pathogens", "pathogen_loc", "pathogen_types", "pathogen_plate_metadata", ],
|
906
882
|
"Measurements": ["remove_image_canvas", "remove_highly_correlated", "homogeneity", "homogeneity_distances", "radial_dist", "calculate_correlation", "manders_thresholds", "save_measurements", "tables", "image_nr", "dot_size", "filter_by", "remove_highly_correlated_features", "remove_low_variance_features", "channel_of_interest"],
|
907
|
-
"Object Image": ["save_png", "dialate_pngs", "dialate_png_ratios", "png_size", "png_dims", "save_arrays", "normalize_by", "crop_mode", "
|
883
|
+
"Object Image": ["save_png", "dialate_pngs", "dialate_png_ratios", "png_size", "png_dims", "save_arrays", "normalize_by", "crop_mode", "normalize", "use_bounding_box"],
|
908
884
|
"Sequencing": ["signal_direction","mode","comp_level","comp_type","save_h5","expected_end","offset","target_sequence","regex", "highlight"],
|
909
885
|
"Generate Dataset":["save_to_db","file_metadata","class_metadata", "annotation_column","annotated_classes", "dataset_mode", "metadata_type_by","custom_measurement", "sample", "size"],
|
910
886
|
"Hyperparamiters (Training)": ["png_type", "score_threshold","file_type", "train_channels", "epochs", "loss_type", "optimizer_type","image_size","val_split","learning_rate","weight_decay","dropout_rate", "init_weights", "train", "classes", "augment", "amsgrad","use_checkpoint","gradient_accumulation","gradient_accumulation_steps","intermedeate_save","pin_memory"],
|
@@ -939,6 +915,9 @@ def check_settings(vars_dict, expected_types, q=None):
|
|
939
915
|
continue
|
940
916
|
|
941
917
|
value = var.get()
|
918
|
+
if value == 'None':
|
919
|
+
value = None
|
920
|
+
|
942
921
|
expected_type = expected_types.get(key, str)
|
943
922
|
|
944
923
|
try:
|
@@ -953,14 +932,19 @@ def check_settings(vars_dict, expected_types, q=None):
|
|
953
932
|
# settings[key] = None
|
954
933
|
else:
|
955
934
|
raise ValueError("Invalid format for list or list of lists")
|
935
|
+
|
956
936
|
elif expected_type == list:
|
957
937
|
settings[key] = parse_list(value) if value else None
|
938
|
+
|
939
|
+
if isinstance(settings[key], list) and len(settings[key]) == 1:
|
940
|
+
settings[key] = settings[key][0]
|
941
|
+
|
958
942
|
elif expected_type == bool:
|
959
943
|
settings[key] = value if isinstance(value, bool) else value.lower() in ['true', '1', 't', 'y', 'yes']
|
960
944
|
elif expected_type == (int, type(None)):
|
961
|
-
settings[key] = int(value) if value else None
|
945
|
+
settings[key] = settings[key] = int(value) if isinstance(value, int) or str(value).isdigit() else None
|
962
946
|
elif expected_type == (float, type(None)):
|
963
|
-
settings[key] = float(value) if value else None
|
947
|
+
settings[key] = float(value) if isinstance(value, float) or (isinstance(value, str) and value.replace(".", "", 1).isdigit()) else None
|
964
948
|
elif expected_type == (int, float):
|
965
949
|
settings[key] = float(value) if '.' in value else int(value)
|
966
950
|
elif expected_type == (str, type(None)):
|
@@ -1000,7 +984,7 @@ def check_settings(vars_dict, expected_types, q=None):
|
|
1000
984
|
settings[key] = expected_type(value) if value else None
|
1001
985
|
except (ValueError, SyntaxError) as e:
|
1002
986
|
expected_type_name = ' or '.join([t.__name__ for t in expected_type]) if isinstance(expected_type, tuple) else expected_type.__name__
|
1003
|
-
q.put(f"Error: Invalid format for {key}. Expected type: {expected_type_name}. Error: {e}")
|
987
|
+
q.put(f"Error: Invalid format for {key}. Expected type: {expected_type_name}. Error: {e}, Value entered: {value}")
|
1004
988
|
return
|
1005
989
|
|
1006
990
|
return settings
|