spacr 0.4.2__tar.gz → 0.4.3__tar.gz

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.
Files changed (267) hide show
  1. {spacr-0.4.2/spacr.egg-info → spacr-0.4.3}/PKG-INFO +1 -1
  2. {spacr-0.4.2 → spacr-0.4.3}/setup.py +1 -1
  3. {spacr-0.4.2 → spacr-0.4.3}/spacr/core.py +19 -2
  4. {spacr-0.4.2 → spacr-0.4.3}/spacr/gui_core.py +37 -19
  5. {spacr-0.4.2 → spacr-0.4.3}/spacr/io.py +36 -127
  6. {spacr-0.4.2 → spacr-0.4.3/spacr.egg-info}/PKG-INFO +1 -1
  7. {spacr-0.4.2 → spacr-0.4.3}/.readthedocs.yaml +0 -0
  8. {spacr-0.4.2 → spacr-0.4.3}/LICENSE +0 -0
  9. {spacr-0.4.2 → spacr-0.4.3}/MANIFEST.in +0 -0
  10. {spacr-0.4.2 → spacr-0.4.3}/README.rst +0 -0
  11. {spacr-0.4.2 → spacr-0.4.3}/deploy_docs.sh +0 -0
  12. {spacr-0.4.2 → spacr-0.4.3}/docs/requirements.txt +0 -0
  13. {spacr-0.4.2 → spacr-0.4.3}/docs/source/Makefile +0 -0
  14. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/doctrees/environment.pickle +0 -0
  15. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_sources/index.rst.txt +0 -0
  16. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  17. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/basic.css +0 -0
  18. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/badge_only.css +0 -0
  19. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  20. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  21. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  22. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  23. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  24. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  25. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  26. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  27. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  28. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  29. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  30. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  31. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  32. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  33. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  34. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  35. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  36. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/css/theme.css +0 -0
  37. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/doctools.js +0 -0
  38. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/documentation_options.js +0 -0
  39. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/file.png +0 -0
  40. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  41. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  42. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  43. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  44. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  45. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  46. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  47. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  48. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  49. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  50. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  51. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  52. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  53. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  54. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  55. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  56. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  57. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  58. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  59. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  60. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  61. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  62. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  63. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  64. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/jquery.js +0 -0
  65. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/js/badge_only.js +0 -0
  66. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/js/theme.js +0 -0
  67. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/js/versions.js +0 -0
  68. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/language_data.js +0 -0
  69. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/minus.png +0 -0
  70. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/plus.png +0 -0
  71. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/pygments.css +0 -0
  72. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/searchtools.js +0 -0
  73. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/_static/sphinx_highlight.js +0 -0
  74. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/genindex.html +0 -0
  75. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/index.html +0 -0
  76. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/objects.inv +0 -0
  77. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/search.html +0 -0
  78. {spacr-0.4.2 → spacr-0.4.3}/docs/source/_build/html/searchindex.js +0 -0
  79. {spacr-0.4.2 → spacr-0.4.3}/docs/source/conf.py +0 -0
  80. {spacr-0.4.2 → spacr-0.4.3}/docs/source/index.rst +0 -0
  81. {spacr-0.4.2 → spacr-0.4.3}/docs/source/make.bat +0 -0
  82. {spacr-0.4.2 → spacr-0.4.3}/environment.yaml +0 -0
  83. {spacr-0.4.2 → spacr-0.4.3}/fonts/OpenSans-Regular.ttf +0 -0
  84. {spacr-0.4.2 → spacr-0.4.3}/path/home/carruthers/datasets/plate1/measurements/measurements.db +0 -0
  85. {spacr-0.4.2 → spacr-0.4.3}/path/home/carruthers/datasets/plate1/settings/measure_crop_settings.csv +0 -0
  86. {spacr-0.4.2 → spacr-0.4.3}/path/settings/preprocess_generate_masks_settings.csv +0 -0
  87. {spacr-0.4.2 → spacr-0.4.3}/requirements.txt +0 -0
  88. {spacr-0.4.2 → spacr-0.4.3}/settings/measure_crop_settings.csv +0 -0
  89. {spacr-0.4.2 → spacr-0.4.3}/setup.cfg +0 -0
  90. {spacr-0.4.2 → spacr-0.4.3}/setup_docs.sh +0 -0
  91. {spacr-0.4.2 → spacr-0.4.3}/source/conf.py +0 -0
  92. {spacr-0.4.2 → spacr-0.4.3}/source/index.rst +0 -0
  93. {spacr-0.4.2 → spacr-0.4.3}/source/modules.rst +0 -0
  94. {spacr-0.4.2 → spacr-0.4.3}/source/setup.rst +0 -0
  95. {spacr-0.4.2 → spacr-0.4.3}/source/spacr.rst +0 -0
  96. {spacr-0.4.2 → spacr-0.4.3}/spacr/__init__.py +0 -0
  97. {spacr-0.4.2 → spacr-0.4.3}/spacr/__main__.py +0 -0
  98. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_annotate.py +0 -0
  99. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_classify.py +0 -0
  100. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_make_masks.py +0 -0
  101. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_mask.py +0 -0
  102. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_measure.py +0 -0
  103. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_sequencing.py +0 -0
  104. {spacr-0.4.2 → spacr-0.4.3}/spacr/app_umap.py +0 -0
  105. {spacr-0.4.2 → spacr-0.4.3}/spacr/cellpose.py +0 -0
  106. {spacr-0.4.2 → spacr-0.4.3}/spacr/chat_bot.py +0 -0
  107. {spacr-0.4.2 → spacr-0.4.3}/spacr/deep_spacr.py +0 -0
  108. {spacr-0.4.2 → spacr-0.4.3}/spacr/gui.py +0 -0
  109. {spacr-0.4.2 → spacr-0.4.3}/spacr/gui_elements.py +0 -0
  110. {spacr-0.4.2 → spacr-0.4.3}/spacr/gui_utils.py +0 -0
  111. {spacr-0.4.2 → spacr-0.4.3}/spacr/logger.py +0 -0
  112. {spacr-0.4.2 → spacr-0.4.3}/spacr/measure.py +0 -0
  113. {spacr-0.4.2 → spacr-0.4.3}/spacr/mediar.py +0 -0
  114. {spacr-0.4.2 → spacr-0.4.3}/spacr/ml.py +0 -0
  115. {spacr-0.4.2 → spacr-0.4.3}/spacr/openai.py +0 -0
  116. {spacr-0.4.2 → spacr-0.4.3}/spacr/plot.py +0 -0
  117. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/.gitignore +0 -0
  118. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/LICENSE +0 -0
  119. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/README.md +0 -0
  120. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/SetupDict.py +0 -0
  121. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/baseline.json +0 -0
  122. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/mediar_example.json +0 -0
  123. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/pred/pred_mediar.json +0 -0
  124. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step1_pretraining/phase1.json +0 -0
  125. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step1_pretraining/phase2.json +0 -0
  126. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning1.json +0 -0
  127. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning2.json +0 -0
  128. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step3_prediction/base_prediction.json +0 -0
  129. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/config/step3_prediction/ensemble_tta.json +0 -0
  130. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/BasePredictor.py +0 -0
  131. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/BaseTrainer.py +0 -0
  132. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/Baseline/Predictor.py +0 -0
  133. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/Baseline/Trainer.py +0 -0
  134. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/Baseline/__init__.py +0 -0
  135. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/Baseline/utils.py +0 -0
  136. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/MEDIAR/EnsemblePredictor.py +0 -0
  137. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/MEDIAR/Predictor.py +0 -0
  138. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/MEDIAR/Trainer.py +0 -0
  139. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/MEDIAR/__init__.py +0 -0
  140. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/MEDIAR/utils.py +0 -0
  141. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/__init__.py +0 -0
  142. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/core/utils.py +0 -0
  143. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/evaluate.py +0 -0
  144. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/generate_mapping.py +0 -0
  145. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/examples/img1.tiff +0 -0
  146. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/examples/img2.tif +0 -0
  147. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/failure_cases.png +0 -0
  148. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/mediar_framework.png +0 -0
  149. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/mediar_model.PNG +0 -0
  150. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/image/mediar_results.png +0 -0
  151. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/main.py +0 -0
  152. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/predict.py +0 -0
  153. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/requirements.txt +0 -0
  154. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/__init__.py +0 -0
  155. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/__init__.py +0 -0
  156. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/custom/CellAware.py +0 -0
  157. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/custom/LoadImage.py +0 -0
  158. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/custom/NormalizeImage.py +0 -0
  159. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/custom/__init__.py +0 -0
  160. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/custom/modalities.pkl +0 -0
  161. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/datasetter.py +0 -0
  162. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/transforms.py +0 -0
  163. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/data_utils/utils.py +0 -0
  164. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/measures.py +0 -0
  165. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/models/MEDIARFormer.py +0 -0
  166. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/models/__init__.py +0 -0
  167. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/MEDIAR/train_tools/utils.py +0 -0
  168. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/data/lopit.csv +0 -0
  169. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/data/toxoplasma_metadata.csv +0 -0
  170. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/OFL.txt +0 -0
  171. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  172. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  173. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/README.txt +0 -0
  174. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  175. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  176. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  177. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  178. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  179. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  180. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  181. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  182. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  183. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  184. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  185. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  186. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  187. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  188. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  189. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  190. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  191. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  192. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  193. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  194. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  195. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  196. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  197. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  198. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  199. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  200. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  201. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  202. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  203. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  204. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  205. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  206. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  207. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  208. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  209. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  210. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/abort.png +0 -0
  211. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/annotate.png +0 -0
  212. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/cellpose_all.png +0 -0
  213. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/cellpose_masks.png +0 -0
  214. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/classify.png +0 -0
  215. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/convert.png +0 -0
  216. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/default.png +0 -0
  217. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/dna_matrix.mp4 +0 -0
  218. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/download.png +0 -0
  219. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/logo.pdf +0 -0
  220. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/logo_spacr.png +0 -0
  221. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/logo_spacr_1.png +0 -0
  222. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/make_masks.png +0 -0
  223. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/map_barcodes.png +0 -0
  224. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/mask.png +0 -0
  225. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/measure.png +0 -0
  226. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/ml_analyze.png +0 -0
  227. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/plaque.png +0 -0
  228. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/recruitment.png +0 -0
  229. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/regression.png +0 -0
  230. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/run.png +0 -0
  231. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/sequencing.png +0 -0
  232. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/settings.png +0 -0
  233. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/train_cellpose.png +0 -0
  234. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/icons/umap.png +0 -0
  235. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/images/plate1_E01_T0001F001L01A01Z01C02.tif +0 -0
  236. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/images/plate1_E01_T0001F001L01A02Z01C01.tif +0 -0
  237. {spacr-0.4.2 → spacr-0.4.3}/spacr/resources/images/plate1_E01_T0001F001L01A03Z01C03.tif +0 -0
  238. {spacr-0.4.2 → spacr-0.4.3}/spacr/sequencing.py +0 -0
  239. {spacr-0.4.2 → spacr-0.4.3}/spacr/settings.py +0 -0
  240. {spacr-0.4.2 → spacr-0.4.3}/spacr/sim.py +0 -0
  241. {spacr-0.4.2 → spacr-0.4.3}/spacr/sp_stats.py +0 -0
  242. {spacr-0.4.2 → spacr-0.4.3}/spacr/submodules.py +0 -0
  243. {spacr-0.4.2 → spacr-0.4.3}/spacr/timelapse.py +0 -0
  244. {spacr-0.4.2 → spacr-0.4.3}/spacr/toxo.py +0 -0
  245. {spacr-0.4.2 → spacr-0.4.3}/spacr/utils.py +0 -0
  246. {spacr-0.4.2 → spacr-0.4.3}/spacr/version.py +0 -0
  247. {spacr-0.4.2 → spacr-0.4.3}/spacr.egg-info/SOURCES.txt +0 -0
  248. {spacr-0.4.2 → spacr-0.4.3}/spacr.egg-info/dependency_links.txt +0 -0
  249. {spacr-0.4.2 → spacr-0.4.3}/spacr.egg-info/entry_points.txt +0 -0
  250. {spacr-0.4.2 → spacr-0.4.3}/spacr.egg-info/requires.txt +0 -0
  251. {spacr-0.4.2 → spacr-0.4.3}/spacr.egg-info/top_level.txt +0 -0
  252. {spacr-0.4.2 → spacr-0.4.3}/tests/test_annotate_app.py +0 -0
  253. {spacr-0.4.2 → spacr-0.4.3}/tests/test_core.py +0 -0
  254. {spacr-0.4.2 → spacr-0.4.3}/tests/test_gui_classify_app.py +0 -0
  255. {spacr-0.4.2 → spacr-0.4.3}/tests/test_gui_mask_app.py +0 -0
  256. {spacr-0.4.2 → spacr-0.4.3}/tests/test_gui_measure_app.py +0 -0
  257. {spacr-0.4.2 → spacr-0.4.3}/tests/test_gui_sim_app.py +0 -0
  258. {spacr-0.4.2 → spacr-0.4.3}/tests/test_gui_utils.py +0 -0
  259. {spacr-0.4.2 → spacr-0.4.3}/tests/test_io.py +0 -0
  260. {spacr-0.4.2 → spacr-0.4.3}/tests/test_mask_app.py +0 -0
  261. {spacr-0.4.2 → spacr-0.4.3}/tests/test_measure.py +0 -0
  262. {spacr-0.4.2 → spacr-0.4.3}/tests/test_plot.py +0 -0
  263. {spacr-0.4.2 → spacr-0.4.3}/tests/test_sim.py +0 -0
  264. {spacr-0.4.2 → spacr-0.4.3}/tests/test_timelapse.py +0 -0
  265. {spacr-0.4.2 → spacr-0.4.3}/tests/test_train.py +0 -0
  266. {spacr-0.4.2 → spacr-0.4.3}/tests/test_umap.py +0 -0
  267. {spacr-0.4.2 → spacr-0.4.3}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
@@ -71,7 +71,7 @@ dependencies = [
71
71
 
72
72
  setup(
73
73
  name="spacr",
74
- version="0.4.2",
74
+ version="0.4.3",
75
75
  author="Einar Birnir Olafsson",
76
76
  author_email="olafsson@med.umich.com",
77
77
  description="Spatial phenotype analysis of crisp screens (SpaCr)",
@@ -9,7 +9,7 @@ warnings.filterwarnings("ignore", message="3D stack used, but stitch_threshold=0
9
9
 
10
10
  def preprocess_generate_masks(settings):
11
11
 
12
- from .io import preprocess_img_data, _load_and_concatenate_arrays, convert_to_yokogawa
12
+ from .io import preprocess_img_data, _load_and_concatenate_arrays, convert_to_yokogawa, convert_separate_files_to_yokogawa
13
13
  from .plot import plot_image_mask_overlay, plot_arrays
14
14
  from .utils import _pivot_counts_table, check_mask_folder, adjust_cell_masks, print_progress, save_settings, delete_intermedeate_files, format_path_for_system, normalize_src_path
15
15
  from .settings import set_default_settings_preprocess_generate_masks
@@ -30,10 +30,27 @@ def preprocess_generate_masks(settings):
30
30
  if isinstance(settings['src'], list):
31
31
  source_folders = settings['src']
32
32
  for source_folder in source_folders:
33
+
33
34
  print(f'Processing folder: {source_folder}')
34
35
 
35
36
  if settings['metadata_type'] == 'auto':
36
- convert_to_yokogawa(folder=source_folder)
37
+ if settings['custom_regex'] == None:
38
+ try:
39
+ convert_separate_files_to_yokogawa(folder=source_folder, regex=settings['custom_regex'])
40
+ except:
41
+ try:
42
+ convert_to_yokogawa(folder=source_folder)
43
+ except Exception as e:
44
+ print(f"Error: Tried to convert image files and image file name metadata with regex {settings['custom_regex']} then without regex but failed both.")
45
+ print(f'Error: {e}')
46
+ return
47
+ else:
48
+ try:
49
+ convert_to_yokogawa(folder=source_folder)
50
+ except Exception as e:
51
+ print(f"Error: Tried to convert image files and image file name metadata without regex but failed.")
52
+ print(f'Error: {e}')
53
+ return
37
54
 
38
55
  source_folder = format_path_for_system(source_folder)
39
56
  settings['src'] = source_folder
@@ -913,34 +913,52 @@ def check_src_folders_files(settings, settings_type, q):
913
913
  conditions = [pictures_continue, folder_chan_continue, folder_stack_continue, folder_npz_continue]
914
914
 
915
915
  if settings_type == 'measure':
916
+ if not os.path.basename(path) == 'merged':
917
+ path = os.path.join(path, "merged")
916
918
  npy_continue = _folder_has_images(path, image_extensions={".npy"})
917
919
  conditions = [npy_continue]
918
920
 
919
- if settings_type == 'recruitment':
920
- db_continue = _folder_has_images(path, image_extensions={".db"})
921
- conditions = [db_continue]
921
+ #if settings_type == 'recruitment':
922
+ # if not os.path.basename(path) == 'measurements':
923
+ # path = os.path.join(path, "measurements")
924
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
925
+ # conditions = [db_continue]
922
926
 
923
- if settings_type == 'umap':
924
- db_continue = _folder_has_images(path, image_extensions={".db"})
925
- conditions = [db_continue]
927
+ #if settings_type == 'umap':
928
+ # if not os.path.basename(path) == 'measurements':
929
+ # path = os.path.join(path, "measurements")
930
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
931
+ # conditions = [db_continue]
926
932
 
927
- if settings_type == 'analyze_plaques':
928
- conditions = [True]
933
+ #if settings_type == 'analyze_plaques':
934
+ # if not os.path.basename(path) == 'measurements':
935
+ # path = os.path.join(path, "measurements")
936
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
937
+ # conditions = [db_continue]
929
938
 
930
- if settings_type == 'map_barcodes':
931
- conditions = [True]
939
+ #if settings_type == 'map_barcodes':
940
+ # if not os.path.basename(path) == 'measurements':
941
+ # path = os.path.join(path, "measurements")
942
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
943
+ # conditions = [db_continue]
932
944
 
933
- if settings_type == 'regression':
934
- db_continue = _folder_has_images(path, image_extensions={".db"})
935
- conditions = [db_continue]
945
+ #if settings_type == 'regression':
946
+ # if not os.path.basename(path) == 'measurements':
947
+ # path = os.path.join(path, "measurements")
948
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
949
+ # conditions = [db_continue]
936
950
 
937
- if settings_type == 'classify':
938
- db_continue = _folder_has_images(path, image_extensions={".db"})
939
- conditions = [db_continue]
951
+ #if settings_type == 'classify':
952
+ # if not os.path.basename(path) == 'measurements':
953
+ # path = os.path.join(path, "measurements")
954
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
955
+ # conditions = [db_continue]
940
956
 
941
- if settings_type == 'analyze_plaques':
942
- db_continue = _folder_has_images(path, image_extensions={".db"})
943
- conditions = [db_continue]
957
+ #if settings_type == 'analyze_plaques':
958
+ # if not os.path.basename(path) == 'measurements':
959
+ # path = os.path.join(path, "measurements")
960
+ # db_continue = _folder_has_images(path, image_extensions={".db"})
961
+ # conditions = [db_continue]
944
962
 
945
963
  if not any(conditions):
946
964
  q.put(f"Error: The following path(s) is missing images or folders: {path}")
@@ -3104,157 +3104,66 @@ def generate_dataset_from_lists(dst, class_data, classes, test_split=0.1):
3104
3104
 
3105
3105
  return os.path.join(dst, 'train'), os.path.join(dst, 'test')
3106
3106
 
3107
- def convert_to_yokogawa_v1(folder):
3108
- """
3109
- Detects file type in the folder and converts them
3110
- to Yokogawa-style naming with Maximum Intensity Projection (MIP).
3111
- """
3112
-
3107
+ def convert_separate_files_to_yokogawa(folder, regex):
3108
+ ROWS = "ABCDEFGHIJKLMNOP"
3109
+ COLS = [f"{i:02d}" for i in range(1, 25)]
3110
+ WELLS = [f"{r}{c}" for r in ROWS for c in COLS]
3111
+
3113
3112
  def _get_next_well(used_wells):
3114
- """
3115
- Determines the next available well position in a 384-well format.
3116
- Iterates wells, and after P24, switches to plate2.
3117
- """
3118
3113
  plate = 1
3119
3114
  for well in WELLS:
3120
3115
  well_name = f"plate{plate}_{well}"
3121
3116
  if well_name not in used_wells:
3122
3117
  return well_name
3123
- if well == "P24":
3124
- plate += 1
3118
+ if well == "P24":
3119
+ plate += 1
3125
3120
  return f"plate{plate}_A01"
3126
3121
 
3127
- # Define 384-well plate format
3128
- ROWS = "ABCDEFGHIJKLMNOP"
3129
- COLS = [f"{i:02d}" for i in range(1, 25)]
3130
- WELLS = [f"{r}{c}" for r in ROWS for c in COLS]
3122
+ pattern = re.compile(regex, re.I)
3131
3123
 
3132
- filenames = []
3124
+ files_by_fov = {}
3133
3125
  rename_log = []
3134
3126
  csv_path = os.path.join(folder, "rename_log.csv")
3135
3127
  used_wells = set(os.listdir(folder))
3128
+ fov_to_well = {}
3136
3129
 
3130
+ # Group files by FOV
3137
3131
  for file in os.listdir(folder):
3138
- path = os.path.join(folder, file)
3139
- ext = file.lower().split('.')[-1]
3140
-
3141
- ### **Process Nikon ND2 Files**
3142
- if ext == 'nd2':
3143
- nd2 = ND2Reader(path)
3144
- metadata = nd2.metadata
3145
-
3146
- timepoints = metadata.get("frames", [0])
3147
- fields = metadata.get("fields_of_view", [0])
3148
- z_levels = list(metadata.get("z_levels", range(1)))
3149
- channels = metadata.get("channels", [])
3150
-
3151
- for t_idx in timepoints:
3152
- for f_idx in fields:
3153
- for c_idx, channel in enumerate(channels):
3154
- well = _get_next_well(used_wells)
3155
-
3156
- z_stack = [nd2.get_frame_2D(t=t_idx, v=f_idx, z=z_idx, c=c_idx) for z_idx in z_levels]
3157
- mip_image = np.max(np.stack(z_stack), axis=0)
3158
- dtype = z_stack[0].dtype
3159
-
3160
- filename = f"{well}_T{t_idx+1:04d}F{f_idx+1:03d}L01C{c_idx+1:02d}.tif"
3161
- filepath = os.path.join(folder, filename)
3162
- tifffile.imwrite(filepath, mip_image.astype(dtype))
3163
- used_wells.add(well)
3164
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3165
-
3166
- ### **Process Zeiss CZI Files**
3167
- elif ext == 'czi':
3168
- with czifile.CziFile(path) as czi:
3169
- shape = czi.shape
3170
-
3171
- timepoints = range(shape[0])
3172
- z_levels = range(shape[1])
3173
- channels = range(shape[2])
3174
-
3175
- for t_idx in timepoints:
3176
- for c_idx in channels:
3177
- well = _get_next_well(used_wells)
3178
-
3179
- z_stack = [czi.asarray()[t_idx, z_idx, c_idx] for z_idx in z_levels]
3180
- mip_image = np.max(np.stack(z_stack), axis=0)
3181
- dtype = z_stack[0].dtype
3182
-
3183
- filename = f"{well}_T{t_idx+1:04d}F001L01C{c_idx+1:02d}.tif"
3184
- filepath = os.path.join(folder, filename)
3185
- tifffile.imwrite(filepath, mip_image.astype(dtype))
3186
- used_wells.add(well)
3187
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3188
-
3189
- ### **Process Leica LIF Files**
3190
- elif ext == 'lif':
3191
- lif_file = readlif.Reader(path)
3192
-
3193
- for image in lif_file.getIterImage():
3194
- timepoints = range(image.dims.t)
3195
- z_levels = range(image.dims.z)
3196
- channels = range(image.dims.c)
3197
-
3198
- for t_idx in timepoints:
3199
- for c_idx in channels:
3200
- well = _get_next_well(used_wells)
3132
+ match = pattern.match(file)
3133
+ if not match:
3134
+ print(f"Skipping {file}: does not match regex.")
3135
+ continue
3201
3136
 
3202
- z_stack = [image.getFrame(z=z_idx, t=t_idx, c=c_idx) for z_idx in z_levels]
3203
- mip_image = np.max(np.stack(z_stack), axis=0)
3204
- dtype = z_stack[0].dtype
3137
+ meta = match.groupdict()
3205
3138
 
3206
- filename = f"{well}_T{t_idx+1:04d}F001L01C{c_idx+1:02d}.tif"
3207
- filepath = os.path.join(folder, filename)
3208
- tifffile.imwrite(filepath, mip_image.astype(dtype))
3209
- used_wells.add(well)
3210
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3139
+ # Extract required metadata
3140
+ fov = meta['fov']
3141
+ channel = int(meta['channel'])
3211
3142
 
3212
- ### **Process Standard Images (.tif, .tiff, .png, .jpg, .bmp, etc.)**
3213
- elif ext in ['tif', 'tiff', 'png', 'jpg', 'jpeg', 'bmp'] and not file.startswith("plate"):
3214
- with tifffile.TiffFile(path) as tif:
3215
- well = _get_next_well(used_wells)
3216
- num_pages = len(tif.pages)
3143
+ # Optional metadata with defaults
3144
+ time = int(meta.get('time', 1))
3145
+ z_slice = int(meta.get('slice', 1))
3217
3146
 
3218
- if num_pages > 1:
3219
- # Assume multi-channel or z-stack
3220
- images = tif.asarray()
3221
- if images.ndim == 4: # (T, Z, C, Y, X)
3222
- timepoints = range(images.shape[0])
3223
- z_levels = range(images.shape[1])
3224
- channels = range(images.shape[2])
3147
+ files_by_fov.setdefault(fov, []).append((file, channel, time, z_slice))
3225
3148
 
3226
- for t_idx in timepoints:
3227
- for c_idx in channels:
3228
- mip_image = np.max(images[t_idx, :, c_idx], axis=0)
3229
- dtype = images.dtype
3149
+ # Assign wells per FOV
3150
+ for fov, file_list in files_by_fov.items():
3151
+ if fov not in fov_to_well:
3152
+ fov_to_well[fov] = _get_next_well(used_wells)
3153
+ used_wells.add(fov_to_well[fov])
3230
3154
 
3231
- filename = f"{well}_T{t_idx+1:04d}F001L01C{c_idx+1:02d}.tif"
3232
- filepath = os.path.join(folder, filename)
3233
- tifffile.imwrite(filepath, mip_image.astype(dtype))
3234
- used_wells.add(well)
3235
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3155
+ well = fov_to_well[fov]
3236
3156
 
3237
- elif images.ndim == 3: # (Z, Y, X) or (C, Y, X)
3238
- z_stack = images if images.shape[0] > 1 else [images]
3239
- mip_image = np.max(np.stack(z_stack), axis=0)
3240
- dtype = images.dtype
3157
+ for original_file, channel, time, z_slice in file_list:
3158
+ img = tifffile.imread(os.path.join(folder, original_file))
3159
+ dtype = img.dtype
3241
3160
 
3242
- filename = f"{well}_T0001F001L01C01.tif"
3243
- filepath = os.path.join(folder, filename)
3244
- tifffile.imwrite(filepath, mip_image.astype(dtype))
3245
- used_wells.add(well)
3246
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3247
- else:
3248
- image = tif.pages[0].asarray()
3249
- dtype = image.dtype
3161
+ filename = f"{well}_T{time:04d}F001L01C{channel:02d}Z{z_slice:03d}.tif"
3162
+ filepath = os.path.join(folder, filename)
3163
+ tifffile.imwrite(filepath, img.astype(dtype))
3250
3164
 
3251
- filename = f"{well}_T0001F001L01C01.tif"
3252
- filepath = os.path.join(folder, filename)
3253
- tifffile.imwrite(filepath, image.astype(dtype))
3254
- used_wells.add(well)
3255
- rename_log.append({"Original File": file, "Renamed TIFF": filename})
3165
+ rename_log.append({"Original File": original_file, "Renamed TIFF": filename})
3256
3166
 
3257
- # Save rename log as CSV
3258
3167
  pd.DataFrame(rename_log).to_csv(csv_path, index=False)
3259
3168
  print(f"Processing complete. Files saved in {folder} and rename log saved as {csv_path}.")
3260
3169
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes