spacr 0.3.64__tar.gz → 0.3.65__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 (298) hide show
  1. {spacr-0.3.64/spacr.egg-info → spacr-0.3.65}/PKG-INFO +1 -1
  2. spacr-0.3.65/notebooks/old/.ipynb_checkpoints/submodule_1_frequency_analysis-checkpoint.ipynb +92 -0
  3. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/Untitled.ipynb +265 -13
  4. spacr-0.3.65/notebooks/submodules/submodule_1_frequency_analysis.ipynb +92 -0
  5. {spacr-0.3.64 → spacr-0.3.65}/setup.py +1 -1
  6. {spacr-0.3.64 → spacr-0.3.65}/spacr/__init__.py +2 -0
  7. {spacr-0.3.64 → spacr-0.3.65}/spacr/plot.py +78 -2
  8. spacr-0.3.65/spacr/stats.py +221 -0
  9. {spacr-0.3.64 → spacr-0.3.65}/spacr/submodules.py +96 -119
  10. {spacr-0.3.64 → spacr-0.3.65}/spacr/utils.py +0 -23
  11. {spacr-0.3.64 → spacr-0.3.65/spacr.egg-info}/PKG-INFO +1 -1
  12. {spacr-0.3.64 → spacr-0.3.65}/spacr.egg-info/SOURCES.txt +3 -0
  13. {spacr-0.3.64 → spacr-0.3.65}/.readthedocs.yaml +0 -0
  14. {spacr-0.3.64 → spacr-0.3.65}/LICENSE +0 -0
  15. {spacr-0.3.64 → spacr-0.3.65}/MANIFEST.in +0 -0
  16. {spacr-0.3.64 → spacr-0.3.65}/README.rst +0 -0
  17. {spacr-0.3.64 → spacr-0.3.65}/deploy_docs.sh +0 -0
  18. {spacr-0.3.64 → spacr-0.3.65}/docs/requirements.txt +0 -0
  19. {spacr-0.3.64 → spacr-0.3.65}/docs/source/Makefile +0 -0
  20. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/doctrees/environment.pickle +0 -0
  21. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/index.html +0 -0
  22. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_annotate.html +0 -0
  23. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_classify.html +0 -0
  24. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_make_masks.html +0 -0
  25. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_mask.html +0 -0
  26. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_measure.html +0 -0
  27. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_sequencing.html +0 -0
  28. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/app_umap.html +0 -0
  29. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/core.html +0 -0
  30. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/deep_spacr.html +0 -0
  31. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/graph_learning.html +0 -0
  32. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/gui.html +0 -0
  33. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/gui_core.html +0 -0
  34. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/gui_elements.html +0 -0
  35. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/gui_utils.html +0 -0
  36. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/io.html +0 -0
  37. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/logger.html +0 -0
  38. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/measure.html +0 -0
  39. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/plot.html +0 -0
  40. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/sequencing.html +0 -0
  41. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/settings.html +0 -0
  42. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/sim.html +0 -0
  43. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/timelapse.html +0 -0
  44. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_modules/spacr/utils.html +0 -0
  45. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_sources/index.rst.txt +0 -0
  46. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_sources/modules.rst.txt +0 -0
  47. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_sources/spacr.rst.txt +0 -0
  48. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  49. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/basic.css +0 -0
  50. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/badge_only.css +0 -0
  51. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  52. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  53. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  54. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  55. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  56. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  57. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  58. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  59. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  60. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  61. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  62. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  63. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  64. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  65. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  66. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  67. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  68. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/css/theme.css +0 -0
  69. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/doctools.js +0 -0
  70. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/documentation_options.js +0 -0
  71. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/file.png +0 -0
  72. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/jquery.js +0 -0
  73. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/js/badge_only.js +0 -0
  74. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  75. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/js/html5shiv.min.js +0 -0
  76. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/js/theme.js +0 -0
  77. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/language_data.js +0 -0
  78. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/minus.png +0 -0
  79. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/plus.png +0 -0
  80. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/pygments.css +0 -0
  81. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/searchtools.js +0 -0
  82. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/_static/sphinx_highlight.js +0 -0
  83. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/genindex.html +0 -0
  84. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/index.html +0 -0
  85. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/modules.html +0 -0
  86. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/objects.inv +0 -0
  87. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/py-modindex.html +0 -0
  88. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/search.html +0 -0
  89. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/searchindex.js +0 -0
  90. {spacr-0.3.64 → spacr-0.3.65}/docs/source/_build/html/spacr.html +0 -0
  91. {spacr-0.3.64 → spacr-0.3.65}/docs/source/conf.py +0 -0
  92. {spacr-0.3.64 → spacr-0.3.65}/docs/source/index.rst +0 -0
  93. {spacr-0.3.64 → spacr-0.3.65}/docs/source/make.bat +0 -0
  94. {spacr-0.3.64 → spacr-0.3.65}/docs/source/modules.rst +0 -0
  95. {spacr-0.3.64 → spacr-0.3.65}/docs/source/spacr.rst +0 -0
  96. {spacr-0.3.64 → spacr-0.3.65}/environment.yaml +0 -0
  97. {spacr-0.3.64 → spacr-0.3.65}/fonts/OpenSans-Regular.ttf +0 -0
  98. {spacr-0.3.64 → spacr-0.3.65}/notebooks/.ipynb_checkpoints/4_spacr_annotate-checkpoint.ipynb +0 -0
  99. {spacr-0.3.64 → spacr-0.3.65}/notebooks/1_spacr_generate_masks.ipynb +0 -0
  100. {spacr-0.3.64 → spacr-0.3.65}/notebooks/2_spacr_generate_mesurments_crop_images.ipynb +0 -0
  101. {spacr-0.3.64 → spacr-0.3.65}/notebooks/3a_spacr_machine_learning.ipynb +0 -0
  102. {spacr-0.3.64 → spacr-0.3.65}/notebooks/3b_spacr_computer_vision.ipynb +0 -0
  103. {spacr-0.3.64 → spacr-0.3.65}/notebooks/4_spacr_annotate.ipynb +0 -0
  104. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/.ipynb_checkpoints/Untitled-checkpoint.ipynb +0 -0
  105. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/.ipynb_checkpoints/figure_2-checkpoint.ipynb +0 -0
  106. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/.ipynb_checkpoints/interperate_vision_classes-checkpoint.ipynb +0 -0
  107. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/.ipynb_checkpoints/spacr_image_umap-checkpoint.ipynb +0 -0
  108. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/cv_scoring_nb.ipynb +0 -0
  109. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/deep_learning_spacr.ipynb +0 -0
  110. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/figure_2.ipynb +0 -0
  111. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/figure_3-Copy1.ipynb +0 -0
  112. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/figure_3.ipynb +0 -0
  113. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/interperate_vision_classes.ipynb +0 -0
  114. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/machine_learning_spacr_nb.ipynb +0 -0
  115. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/spacr_0.1_all_settings_git.ipynb +0 -0
  116. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/spacr_0.1_minimal.ipynb +0 -0
  117. {spacr-0.3.64 → spacr-0.3.65}/notebooks/old/spacr_image_umap.ipynb +0 -0
  118. {spacr-0.3.64 → spacr-0.3.65}/path/home/carruthers/datasets/plate1/measurements/measurements.db +0 -0
  119. {spacr-0.3.64 → spacr-0.3.65}/path/home/carruthers/datasets/plate1/settings/measure_crop_settings.csv +0 -0
  120. {spacr-0.3.64 → spacr-0.3.65}/path/settings/preprocess_generate_masks_settings.csv +0 -0
  121. {spacr-0.3.64 → spacr-0.3.65}/requirements.txt +0 -0
  122. {spacr-0.3.64 → spacr-0.3.65}/settings/measure_crop_settings.csv +0 -0
  123. {spacr-0.3.64 → spacr-0.3.65}/setup.cfg +0 -0
  124. {spacr-0.3.64 → spacr-0.3.65}/setup_docs.sh +0 -0
  125. {spacr-0.3.64 → spacr-0.3.65}/source/conf.py +0 -0
  126. {spacr-0.3.64 → spacr-0.3.65}/source/index.rst +0 -0
  127. {spacr-0.3.64 → spacr-0.3.65}/source/modules.rst +0 -0
  128. {spacr-0.3.64 → spacr-0.3.65}/source/setup.rst +0 -0
  129. {spacr-0.3.64 → spacr-0.3.65}/source/spacr.rst +0 -0
  130. {spacr-0.3.64 → spacr-0.3.65}/spacr/__main__.py +0 -0
  131. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_annotate.py +0 -0
  132. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_classify.py +0 -0
  133. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_make_masks.py +0 -0
  134. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_mask.py +0 -0
  135. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_measure.py +0 -0
  136. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_sequencing.py +0 -0
  137. {spacr-0.3.64 → spacr-0.3.65}/spacr/app_umap.py +0 -0
  138. {spacr-0.3.64 → spacr-0.3.65}/spacr/cellpose.py +0 -0
  139. {spacr-0.3.64 → spacr-0.3.65}/spacr/chat_bot.py +0 -0
  140. {spacr-0.3.64 → spacr-0.3.65}/spacr/core.py +0 -0
  141. {spacr-0.3.64 → spacr-0.3.65}/spacr/deep_spacr.py +0 -0
  142. {spacr-0.3.64 → spacr-0.3.65}/spacr/gui.py +0 -0
  143. {spacr-0.3.64 → spacr-0.3.65}/spacr/gui_core.py +0 -0
  144. {spacr-0.3.64 → spacr-0.3.65}/spacr/gui_elements.py +0 -0
  145. {spacr-0.3.64 → spacr-0.3.65}/spacr/gui_utils.py +0 -0
  146. {spacr-0.3.64 → spacr-0.3.65}/spacr/io.py +0 -0
  147. {spacr-0.3.64 → spacr-0.3.65}/spacr/logger.py +0 -0
  148. {spacr-0.3.64 → spacr-0.3.65}/spacr/measure.py +0 -0
  149. {spacr-0.3.64 → spacr-0.3.65}/spacr/mediar.py +0 -0
  150. {spacr-0.3.64 → spacr-0.3.65}/spacr/ml.py +0 -0
  151. {spacr-0.3.64 → spacr-0.3.65}/spacr/openai.py +0 -0
  152. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/.gitignore +0 -0
  153. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/LICENSE +0 -0
  154. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/README.md +0 -0
  155. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/SetupDict.py +0 -0
  156. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/baseline.json +0 -0
  157. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/mediar_example.json +0 -0
  158. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/pred/pred_mediar.json +0 -0
  159. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step1_pretraining/phase1.json +0 -0
  160. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step1_pretraining/phase2.json +0 -0
  161. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning1.json +0 -0
  162. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning2.json +0 -0
  163. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step3_prediction/base_prediction.json +0 -0
  164. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/config/step3_prediction/ensemble_tta.json +0 -0
  165. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/BasePredictor.py +0 -0
  166. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/BaseTrainer.py +0 -0
  167. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/Baseline/Predictor.py +0 -0
  168. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/Baseline/Trainer.py +0 -0
  169. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/Baseline/__init__.py +0 -0
  170. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/Baseline/utils.py +0 -0
  171. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/MEDIAR/EnsemblePredictor.py +0 -0
  172. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/MEDIAR/Predictor.py +0 -0
  173. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/MEDIAR/Trainer.py +0 -0
  174. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/MEDIAR/__init__.py +0 -0
  175. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/MEDIAR/utils.py +0 -0
  176. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/__init__.py +0 -0
  177. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/core/utils.py +0 -0
  178. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/evaluate.py +0 -0
  179. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/generate_mapping.py +0 -0
  180. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/examples/img1.tiff +0 -0
  181. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/examples/img2.tif +0 -0
  182. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/failure_cases.png +0 -0
  183. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/mediar_framework.png +0 -0
  184. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/mediar_model.PNG +0 -0
  185. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/image/mediar_results.png +0 -0
  186. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/main.py +0 -0
  187. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/predict.py +0 -0
  188. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/requirements.txt +0 -0
  189. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/__init__.py +0 -0
  190. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/__init__.py +0 -0
  191. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/custom/CellAware.py +0 -0
  192. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/custom/LoadImage.py +0 -0
  193. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/custom/NormalizeImage.py +0 -0
  194. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/custom/__init__.py +0 -0
  195. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/custom/modalities.pkl +0 -0
  196. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/datasetter.py +0 -0
  197. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/transforms.py +0 -0
  198. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/data_utils/utils.py +0 -0
  199. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/measures.py +0 -0
  200. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/models/MEDIARFormer.py +0 -0
  201. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/models/__init__.py +0 -0
  202. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/MEDIAR/train_tools/utils.py +0 -0
  203. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/data/lopit.csv +0 -0
  204. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/data/toxoplasma_metadata.csv +0 -0
  205. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/OFL.txt +0 -0
  206. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  207. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  208. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/README.txt +0 -0
  209. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  210. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  211. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  212. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  213. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  214. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  215. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  216. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  217. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  218. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  219. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  220. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  221. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  222. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  223. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  224. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  225. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  226. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  227. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  228. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  229. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  230. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  231. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  232. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  233. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  234. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  235. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  236. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  237. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  238. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  239. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  240. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  241. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  242. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  243. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  244. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  245. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/abort.png +0 -0
  246. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/annotate.png +0 -0
  247. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/cellpose_all.png +0 -0
  248. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/cellpose_masks.png +0 -0
  249. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/classify.png +0 -0
  250. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/convert.png +0 -0
  251. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/default.png +0 -0
  252. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/dna_matrix.mp4 +0 -0
  253. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/download.png +0 -0
  254. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/logo.pdf +0 -0
  255. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/logo_spacr.png +0 -0
  256. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/logo_spacr_1.png +0 -0
  257. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/make_masks.png +0 -0
  258. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/map_barcodes.png +0 -0
  259. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/mask.png +0 -0
  260. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/measure.png +0 -0
  261. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/ml_analyze.png +0 -0
  262. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/plaque.png +0 -0
  263. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/recruitment.png +0 -0
  264. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/regression.png +0 -0
  265. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/run.png +0 -0
  266. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/sequencing.png +0 -0
  267. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/settings.png +0 -0
  268. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/train_cellpose.png +0 -0
  269. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/icons/umap.png +0 -0
  270. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/images/plate1_E01_T0001F001L01A01Z01C02.tif +0 -0
  271. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/images/plate1_E01_T0001F001L01A02Z01C01.tif +0 -0
  272. {spacr-0.3.64 → spacr-0.3.65}/spacr/resources/images/plate1_E01_T0001F001L01A03Z01C03.tif +0 -0
  273. {spacr-0.3.64 → spacr-0.3.65}/spacr/sequencing.py +0 -0
  274. {spacr-0.3.64 → spacr-0.3.65}/spacr/settings.py +0 -0
  275. {spacr-0.3.64 → spacr-0.3.65}/spacr/sim.py +0 -0
  276. {spacr-0.3.64 → spacr-0.3.65}/spacr/timelapse.py +0 -0
  277. {spacr-0.3.64 → spacr-0.3.65}/spacr/toxo.py +0 -0
  278. {spacr-0.3.64 → spacr-0.3.65}/spacr/version.py +0 -0
  279. {spacr-0.3.64 → spacr-0.3.65}/spacr.egg-info/dependency_links.txt +0 -0
  280. {spacr-0.3.64 → spacr-0.3.65}/spacr.egg-info/entry_points.txt +0 -0
  281. {spacr-0.3.64 → spacr-0.3.65}/spacr.egg-info/requires.txt +0 -0
  282. {spacr-0.3.64 → spacr-0.3.65}/spacr.egg-info/top_level.txt +0 -0
  283. {spacr-0.3.64 → spacr-0.3.65}/tests/test_annotate_app.py +0 -0
  284. {spacr-0.3.64 → spacr-0.3.65}/tests/test_core.py +0 -0
  285. {spacr-0.3.64 → spacr-0.3.65}/tests/test_gui_classify_app.py +0 -0
  286. {spacr-0.3.64 → spacr-0.3.65}/tests/test_gui_mask_app.py +0 -0
  287. {spacr-0.3.64 → spacr-0.3.65}/tests/test_gui_measure_app.py +0 -0
  288. {spacr-0.3.64 → spacr-0.3.65}/tests/test_gui_sim_app.py +0 -0
  289. {spacr-0.3.64 → spacr-0.3.65}/tests/test_gui_utils.py +0 -0
  290. {spacr-0.3.64 → spacr-0.3.65}/tests/test_io.py +0 -0
  291. {spacr-0.3.64 → spacr-0.3.65}/tests/test_mask_app.py +0 -0
  292. {spacr-0.3.64 → spacr-0.3.65}/tests/test_measure.py +0 -0
  293. {spacr-0.3.64 → spacr-0.3.65}/tests/test_plot.py +0 -0
  294. {spacr-0.3.64 → spacr-0.3.65}/tests/test_sim.py +0 -0
  295. {spacr-0.3.64 → spacr-0.3.65}/tests/test_timelapse.py +0 -0
  296. {spacr-0.3.64 → spacr-0.3.65}/tests/test_train.py +0 -0
  297. {spacr-0.3.64 → spacr-0.3.65}/tests/test_umap.py +0 -0
  298. {spacr-0.3.64 → spacr-0.3.65}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.3.64
3
+ Version: 0.3.65
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
@@ -0,0 +1,92 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "cf770028",
7
+ "metadata": {
8
+ "scrolled": false
9
+ },
10
+ "outputs": [],
11
+ "source": [
12
+ "from spacr.submodules import analyze_endodyogeny\n",
13
+ "%matplotlib inline\n",
14
+ "\n",
15
+ "settings = {\n",
16
+ " 'src': 'path',\n",
17
+ " 'tables': ['cell', 'nucleus', 'pathogen', 'cytoplasm'],\n",
18
+ " 'cell_types': ['Hela'],\n",
19
+ " 'cell_plate_metadata': None,\n",
20
+ " 'pathogen_types': ['nc', 'pc'],\n",
21
+ " 'pathogen_plate_metadata': [['c1'], ['c2']],\n",
22
+ " 'treatments': None,\n",
23
+ " 'treatment_plate_metadata': None,\n",
24
+ " 'min_area_bin': 500,\n",
25
+ " 'group_column': 'pathogen',\n",
26
+ " 'compartment': 'pathogen',\n",
27
+ " 'pathogen_limit': 1,\n",
28
+ " 'nuclei_limit': 1000,\n",
29
+ " 'level': 'well',\n",
30
+ " 'um_per_px':0.1,\n",
31
+ " 'max_bins':5,\n",
32
+ " 'save':True,\n",
33
+ " 'verbose': True}\n",
34
+ "\n",
35
+ "# Run the analysis\n",
36
+ "output = analyze_endodyogeny(settings)"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "id": "6657b0db",
43
+ "metadata": {},
44
+ "outputs": [],
45
+ "source": [
46
+ "from spacr.submodules import analyze_class_proportion\n",
47
+ "%matplotlib inline\n",
48
+ "\n",
49
+ "settings = {\n",
50
+ " 'src': 'path',\n",
51
+ " 'tables': ['cell', 'nucleus', 'pathogen', 'cytoplasm'],\n",
52
+ " 'cell_types': ['cm','infg'],\n",
53
+ " 'cell_plate_metadata': [['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c13', 'c14', 'c15', 'c16', 'c17', 'c18'],['c7', 'c8', 'c9', 'c10', 'c11', 'c12','c18', 'c19', 'c20', 'c21', 'c22', 'c23', 'c24']],\n",
54
+ " 'pathogen_types': ['nc', 'pc'],\n",
55
+ " 'pathogen_plate_metadata': [['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12'], ['c13', 'c14', 'c15', 'c16', 'c17', 'c18', 'c19', 'c20', 'c21', 'c22', 'c23', 'c24']],\n",
56
+ " 'treatments': ['ub','rnf'],\n",
57
+ " 'treatment_plate_metadata': [['c1', 'c2','c3', 'c7','c8','c9', 'c13','c14','c15','c19','c20','c21'],['c4','c5','c6','c10','c11','c12','c16','c17','c18','c22','c23','c24']],\n",
58
+ " 'group_column': 'condition',\n",
59
+ " 'class_column':'test',\n",
60
+ " 'pathogen_limit': 1000,\n",
61
+ " 'nuclei_limit': 1000,\n",
62
+ " 'level': 'well',\n",
63
+ " 'save':True,\n",
64
+ " 'verbose': True}\n",
65
+ "\n",
66
+ "# Run the analysis\n",
67
+ "output = analyze_class_proportion(settings)"
68
+ ]
69
+ }
70
+ ],
71
+ "metadata": {
72
+ "kernelspec": {
73
+ "display_name": "spacr",
74
+ "language": "python",
75
+ "name": "spacr"
76
+ },
77
+ "language_info": {
78
+ "codemirror_mode": {
79
+ "name": "ipython",
80
+ "version": 3
81
+ },
82
+ "file_extension": ".py",
83
+ "mimetype": "text/x-python",
84
+ "name": "python",
85
+ "nbconvert_exporter": "python",
86
+ "pygments_lexer": "ipython3",
87
+ "version": "3.9.19"
88
+ }
89
+ },
90
+ "nbformat": 4,
91
+ "nbformat_minor": 5
92
+ }
@@ -3,7 +3,7 @@
3
3
  {
4
4
  "cell_type": "code",
5
5
  "execution_count": null,
6
- "id": "3460bff8",
6
+ "id": "0582e3fd",
7
7
  "metadata": {},
8
8
  "outputs": [],
9
9
  "source": [
@@ -27,7 +27,7 @@
27
27
  {
28
28
  "cell_type": "code",
29
29
  "execution_count": null,
30
- "id": "bc1dc013",
30
+ "id": "81280b57",
31
31
  "metadata": {
32
32
  "scrolled": false
33
33
  },
@@ -78,12 +78,219 @@
78
78
  },
79
79
  {
80
80
  "cell_type": "code",
81
- "execution_count": null,
82
- "id": "dfcc3359",
81
+ "execution_count": 3,
82
+ "id": "27e6cd82",
83
83
  "metadata": {
84
84
  "scrolled": false
85
85
  },
86
- "outputs": [],
86
+ "outputs": [
87
+ {
88
+ "data": {
89
+ "text/html": [
90
+ "<div>\n",
91
+ "<style scoped>\n",
92
+ " .dataframe tbody tr th:only-of-type {\n",
93
+ " vertical-align: middle;\n",
94
+ " }\n",
95
+ "\n",
96
+ " .dataframe tbody tr th {\n",
97
+ " vertical-align: top;\n",
98
+ " }\n",
99
+ "\n",
100
+ " .dataframe thead th {\n",
101
+ " text-align: right;\n",
102
+ " }\n",
103
+ "</style>\n",
104
+ "<table border=\"1\" class=\"dataframe\">\n",
105
+ " <thead>\n",
106
+ " <tr style=\"text-align: right;\">\n",
107
+ " <th></th>\n",
108
+ " <th>Key</th>\n",
109
+ " <th>Value</th>\n",
110
+ " </tr>\n",
111
+ " </thead>\n",
112
+ " <tbody>\n",
113
+ " <tr>\n",
114
+ " <th>0</th>\n",
115
+ " <td>src</td>\n",
116
+ " <td>/nas_mnt/carruthers/Einar/tsg101_screen/TSG101...</td>\n",
117
+ " </tr>\n",
118
+ " <tr>\n",
119
+ " <th>1</th>\n",
120
+ " <td>tables</td>\n",
121
+ " <td>[cell, nucleus, pathogen, cytoplasm]</td>\n",
122
+ " </tr>\n",
123
+ " <tr>\n",
124
+ " <th>2</th>\n",
125
+ " <td>cell_types</td>\n",
126
+ " <td>[Hela]</td>\n",
127
+ " </tr>\n",
128
+ " <tr>\n",
129
+ " <th>3</th>\n",
130
+ " <td>cell_plate_metadata</td>\n",
131
+ " <td>None</td>\n",
132
+ " </tr>\n",
133
+ " <tr>\n",
134
+ " <th>4</th>\n",
135
+ " <td>pathogen_types</td>\n",
136
+ " <td>[nc, pc]</td>\n",
137
+ " </tr>\n",
138
+ " <tr>\n",
139
+ " <th>5</th>\n",
140
+ " <td>pathogen_plate_metadata</td>\n",
141
+ " <td>[[c1], [c2]]</td>\n",
142
+ " </tr>\n",
143
+ " <tr>\n",
144
+ " <th>6</th>\n",
145
+ " <td>treatments</td>\n",
146
+ " <td>None</td>\n",
147
+ " </tr>\n",
148
+ " <tr>\n",
149
+ " <th>7</th>\n",
150
+ " <td>treatment_plate_metadata</td>\n",
151
+ " <td>None</td>\n",
152
+ " </tr>\n",
153
+ " <tr>\n",
154
+ " <th>8</th>\n",
155
+ " <td>min_area_bin</td>\n",
156
+ " <td>500</td>\n",
157
+ " </tr>\n",
158
+ " <tr>\n",
159
+ " <th>9</th>\n",
160
+ " <td>group_column</td>\n",
161
+ " <td>pathogen</td>\n",
162
+ " </tr>\n",
163
+ " <tr>\n",
164
+ " <th>10</th>\n",
165
+ " <td>compartment</td>\n",
166
+ " <td>pathogen</td>\n",
167
+ " </tr>\n",
168
+ " <tr>\n",
169
+ " <th>11</th>\n",
170
+ " <td>pathogen_limit</td>\n",
171
+ " <td>1</td>\n",
172
+ " </tr>\n",
173
+ " <tr>\n",
174
+ " <th>12</th>\n",
175
+ " <td>nuclei_limit</td>\n",
176
+ " <td>1000</td>\n",
177
+ " </tr>\n",
178
+ " <tr>\n",
179
+ " <th>13</th>\n",
180
+ " <td>level</td>\n",
181
+ " <td>well</td>\n",
182
+ " </tr>\n",
183
+ " <tr>\n",
184
+ " <th>14</th>\n",
185
+ " <td>um_per_px</td>\n",
186
+ " <td>0.1</td>\n",
187
+ " </tr>\n",
188
+ " <tr>\n",
189
+ " <th>15</th>\n",
190
+ " <td>max_bins</td>\n",
191
+ " <td>5</td>\n",
192
+ " </tr>\n",
193
+ " <tr>\n",
194
+ " <th>16</th>\n",
195
+ " <td>save</td>\n",
196
+ " <td>True</td>\n",
197
+ " </tr>\n",
198
+ " <tr>\n",
199
+ " <th>17</th>\n",
200
+ " <td>verbose</td>\n",
201
+ " <td>True</td>\n",
202
+ " </tr>\n",
203
+ " </tbody>\n",
204
+ "</table>\n",
205
+ "</div>"
206
+ ],
207
+ "text/plain": [
208
+ " Key \\\n",
209
+ "0 src \n",
210
+ "1 tables \n",
211
+ "2 cell_types \n",
212
+ "3 cell_plate_metadata \n",
213
+ "4 pathogen_types \n",
214
+ "5 pathogen_plate_metadata \n",
215
+ "6 treatments \n",
216
+ "7 treatment_plate_metadata \n",
217
+ "8 min_area_bin \n",
218
+ "9 group_column \n",
219
+ "10 compartment \n",
220
+ "11 pathogen_limit \n",
221
+ "12 nuclei_limit \n",
222
+ "13 level \n",
223
+ "14 um_per_px \n",
224
+ "15 max_bins \n",
225
+ "16 save \n",
226
+ "17 verbose \n",
227
+ "\n",
228
+ " Value \n",
229
+ "0 /nas_mnt/carruthers/Einar/tsg101_screen/TSG101... \n",
230
+ "1 [cell, nucleus, pathogen, cytoplasm] \n",
231
+ "2 [Hela] \n",
232
+ "3 None \n",
233
+ "4 [nc, pc] \n",
234
+ "5 [[c1], [c2]] \n",
235
+ "6 None \n",
236
+ "7 None \n",
237
+ "8 500 \n",
238
+ "9 pathogen \n",
239
+ "10 pathogen \n",
240
+ "11 1 \n",
241
+ "12 1000 \n",
242
+ "13 well \n",
243
+ "14 0.1 \n",
244
+ "15 5 \n",
245
+ "16 True \n",
246
+ "17 True "
247
+ ]
248
+ },
249
+ "metadata": {},
250
+ "output_type": "display_data"
251
+ },
252
+ {
253
+ "name": "stdout",
254
+ "output_type": "stream",
255
+ "text": [
256
+ "cell: 60816\n",
257
+ "nucleus: 80889\n",
258
+ "pathogen: 111317\n",
259
+ "cytoplasm: 60816\n",
260
+ "cells: 60816, cells grouped: 60816\n",
261
+ "cytoplasms: 60816, cytoplasms grouped: 60816\n",
262
+ "nucleus: 80889, nucleus grouped: 60816\n",
263
+ "pathogens: 37541, pathogens grouped: 37541\n",
264
+ "Generated dataframe with: 791 columns and 37541 rows\n",
265
+ "Volume bins: [11.18033988749895, 22.3606797749979, 44.7213595499958, 89.4427190999916, 178.8854381999832, 357.7708763999664, 715.5417527999329, 1431.0835055998657]\n",
266
+ "Volume bin labels: ['11.18-22.36', '22.36-44.72', '44.72-89.44', '89.44-178.89', '178.89-357.77', '357.77-715.54', '715.54-1431.08']\n",
267
+ " pathogen_volume pathogen_volume_bin bin_index\n",
268
+ "prcfo \n",
269
+ "pplate1_r10_c1_f10_o10 171.016316 89.44-178.89 4\n",
270
+ "pplate1_r10_c1_f10_o11 14.112998 11.18-22.36 1\n",
271
+ "pplate1_r10_c1_f10_o19 36.383419 22.36-44.72 2\n",
272
+ "pplate1_r10_c1_f10_o24 203.611545 >178.89 5\n",
273
+ "pplate1_r10_c1_f10_o28 208.128599 >178.89 5\n",
274
+ "Chi-squared test statistic (raw data): 95.2692\n",
275
+ "p-value (raw data): 9.9884e-20\n",
276
+ "\n",
277
+ "Pairwise Frequency Analysis Results:\n",
278
+ "Group 1 Group 2 Test Name p-value p-value_adj adj\n",
279
+ " nc pc Pairwise Chi-Square Test 9.988372e-20 9.988372e-20 holm\n",
280
+ "Chi-squared results saved to /nas_mnt/carruthers/Einar/tsg101_screen/TSG101SCREEN_20240810_132824/plate1/results/analyze_endodyogeny/chi_squared_results.csv\n"
281
+ ]
282
+ },
283
+ {
284
+ "data": {
285
+ "image/png": "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8lLLli21aNGiRwZhtra2qly5snbs2CHpfvhVvXp1VatWTXFxcdq7d6+OHz+umzdvWoRff//9t9avX5/oekv41N7UvM4leO2119S0aVN99tlnypkzpxo1aqSZM2cqOjo6Ud+E35mUwnMAAJ51rPkF4LFUrFgxyf99f5Cjo6PF/7A/Kx6cZfA0JDfLLC0zKDKSvb29mjdvrmnTpunKlSsKCQnR33//ra+++ipDxk/uD6XkZuckd34edd4S/tDs169fouA1QaFChVKsNTm1atWSJP32228KCAhIsW9qnt/evXsrICBAK1as0IYNGzRkyBAFBQXp119/Vbly5dJV48NatmypPn36aN68efr00081d+5cVahQIckg6kFFixaVJB09etRiVtCDf1zPnTs3yX0f53cprddJeiWsQ/ioAMnHx0c1a9bU2LFjtWvXrmQ/4THhunv33XeTXROrdOnSku6ft/bt26tx48bq37+/PD09ZWtrq6CgIPM6iQ961l4rTCaTChcurMKFC6thw4Z6+eWXNW/ePHXu3DlV+x89elTSo38Pmzdvrt27d6t///4qW7assmbNqvj4eNWrVy9dC7pLj3dtjh07Vu3bt9fKlSu1ceNG9ezZU0FBQdq7d6/y5MkjZ2dn/fbbb9q6davWrl2r9evXa+HChXrjjTe0cePGFGcWV6tWTaNGjVJUVJR27NihQYMGyd3dXSVLltSOHTvk5eUlSRbhV3x8vOrUqaOPP/44yTFTWk/tYSaTSUuWLNHevXu1evVqbdiwQR07dtTYsWO1d+9eixmgCb8zCetgAgDwPCL8ApAp8ufPr82bN+vWrVsWswFOnDhh3v6gv//+O9EYp06dkouLi/l2KxcXF508eTJRvxMnTsjGxibRDKKkpOV/tvPnz5/s4yVsf1weHh4ZclzJadOmjaZOnaqFCxfq3LlzMplMatWqlXl7Wp+nByXMLAkLCzPfYiNl7GwxSebZUPb29uaQJqPExsZKSjwb6nEULFhQH330kT766CP9/fffKlu2rMaOHZtssJQgPj5eZ8+etfgDN+HT8x5cPD579uxq2LCh5s2bpzZt2mjXrl2pWgi7fv36srW1Ne/3OBKui+Su25w5cypLliyS7l8nD3/KnpT8dZKa14KkJIR7CZ9Em5LWrVurc+fOcnd3V4MGDZLs4+HhoWzZsikuLu6R192SJUtUoEABLVu2zOI1JmFm4vOkQIECeumll3Tp0qVU7/PTTz/JZDKpTp06yfb577//tGXLFn322WcaOnSouf3h59vDw0Ourq7mQC2tHrw2H5xJGRMTo3PnziV6LkuVKqVSpUpp8ODB2r17t6pWraqpU6fq888/l3R/RmatWrVUq1YtjRs3Tl988YUGDRqkrVu3pnhdVK9eXTExMfr5558VGhpqDrlq1KhhDr8KFy5sDsGk+68dt2/fztDXuVdffVWvvvqqRo0apfnz56tNmzZasGCBRbCZ8DuTMOMXAIDn0bM3FQPAC6FBgwaKi4vTd999Z9E+fvx4mUwm1a9f36J9z549FmvjXLx4UStXrlTdunVla2srW1tb1a1bVytXrrS4BezKlSuaP3++qlWrJldX10fWlfAHeVJ/jCd1DPv27dOePXvMbXfu3NEPP/wgX19fFS9e/JFjPEpGHVdyqlatKl9fX82dO1cLFy7Ua6+9ZnGLalqfpwcVLFhQkizWoblz545mz56d7nqT4unpqZo1a+r7779P8g/y1NwKl5zVq1dL0iPXR0qNyMhIRUVFWbQVLFhQ2bJlS/JWo6Q8+DwYhqHvvvtO9vb25hlqCdq2bavjx4+rf//+srW1VcuWLR85dr58+dSxY0f98ssviZ7vBx8zNXx8fFS2bFnNnj3b4nfp6NGj2rhxo0WgVLBgQYWHh+vPP/80t126dEnLly9PcuxHvRYkJ3fu3MqbN68OHDjwyPrfeecdDRs2TJMnT7ZYp+9Btra2atq0qZYuXZpkEPPgdZdQ14Pn7/fff7d47XhSZs2apW3btqV5v99//z3JW1P37dunGzduPHImYYIvv/xSGzduVIsWLZK8ZTVBUudIUqLg1sbGRo0bN9bq1auTfC4fdY3Wrl1bDg4O+uabbyz6Tp8+XeHh4WrYsKGk+2vgJYTfCUqVKiUbGxvz7+vDn6wpyfzJnY/6na5UqZLs7e01evRoZc+e3XyrefXq1bV3715t377dYtaXdH9m3J49e7Rhw4ZE44WFhSWqNyX//fdfonOVXO0HDx6Um5ubuUYAAJ5HzPwCkCkCAgL0+uuva9CgQTp//rzKlCmjjRs3auXKlerdu7c5OElQsmRJ+fv7q2fPnnJ0dNTkyZMlSZ999pm5z+eff65NmzapWrVq+uCDD2RnZ6fvv/9e0dHRqb6VL2Eh7UGDBqlly5ayt7dXQECAORR70IABA/Tzzz+rfv366tmzp7Jnz67Zs2fr3LlzWrp0aYbd6pkRx5Uck8mk1q1b64svvpAkjRgxwmJ7Wp+nB9WtW1f58uVTp06dzCHMjBkz5OHhoZCQkMeq+2GTJk1StWrVVKpUKXXp0kUFChTQlStXtGfPHv3zzz/6448/HjnGqVOnzLOvIiMjtXfvXs2ePVuFChV65HpZqXHq1CnVqlVLzZs3V/HixWVnZ6fly5frypUrqQqnnJyctH79erVr106VKlXSL7/8orVr1+rTTz9NNOOpYcOGypEjhxYvXqz69evL09MzVTVOmDBB586d04cffqgFCxYoICBAnp6eun79unbt2qXVq1enOvT4+uuvVb9+fVWuXFmdOnXS3bt39e2338rNzU3Dhw8392vZsqU++eQTNWnSRD179lRkZKSmTJmiwoULJ7kYfGpeC5LTqFEjLV++XIZhpDjL8+Eak/Pll19q69atqlSpkrp06aLixYvr5s2bOnTokDZv3mwOR958800tW7ZMTZo0UcOGDXXu3DlNnTpVxYsXz9BZhXfu3Ek2NHxYnTp1LGYVPeynn37SvHnz1KRJE5UvX14ODg7666+/NGPGDDk5OenTTz+16B8bG2v+/YmKitKFCxe0atUq/fnnn3r99df1ww8/pFiPq6ureR28e/fuKXfu3Nq4cWOSM/W++OILbdy4Ua+99pq6du2qYsWK6dKlS1q8eLF27txpMdP0YR4eHho4cKA+++wz1atXT2+99ZZOnjypyZMn65VXXtG7774rSfr111/Vo0cPNWvWTIULF1ZsbKx++uknc+gp3X+9/O2339SwYUPlz59fV69e1eTJk5UnTx6LD0JJiouLi8qXL6+9e/cqICDAfD3WqFFDd+7c0Z07dxKFX/3799eqVav05ptvqn379ipfvrzu3LmjI0eOaMmSJTp//nyqb02cPXu2Jk+erCZNmqhgwYK6deuWpk2bJldX10SzHTdt2mRRIwAAz6Wn+dGSAKxHwsemP+pj0tu1a2dkyZIlyW23bt0y+vTpY+TKlcuwt7c3Xn75ZePrr782f1R9AklG9+7djblz5xovv/yy4ejoaJQrV87YunVrojEPHTpk+Pv7G1mzZjVcXFyM119/3di9e3eaah85cqSRO3duw8bGxuKj4fPnz2+0a9fOou+ZM2eMd955x3B3dzecnJyMihUrGmvWrLHos3XrVkOSsXjxYov2c+fOGZKMmTNnJllHWo8rYbyvv/76keM96NixY4Ykw9HR0fjvv/8SbU/t85TU+Tl48KBRqVIlw8HBwciXL58xbtw48/lPOK8J+zZs2DDRYyc896k5zjNnzhiBgYGGt7e3YW9vb+TOndt48803jSVLljzyHEiy+LK1tTXy5MljdO3a1bhy5YpF33bt2hn58+d/ZD0J4w4bNswwDMO4fv260b17d6No0aJGlixZDDc3N6NSpUrGokWLHllfwu/RmTNnjLp16xouLi6Gl5eXMWzYMCMuLi7JfT744ANDkjF//vxHjv+g2NhYY+bMmcYbb7xhZM+e3bCzszNy5sxp1KpVy5g6dapx9+7dVB27YRjG5s2bjapVqxrOzs6Gq6urERAQYBw/fjxRv40bNxolS5Y0HBwcjCJFihhz5841hg0bZjz8z5S0vBYk5dChQ4YkY8eOHRbtr732mlGiRIkU903u9/jKlStG9+7djbx58xr29vaGt7e3UatWLeOHH34w94mPjze++OILI3/+/Oaa16xZk+5rKTkJ+6fm61Hn7M8//zT69+9v/O9//zNfBz4+PkazZs2MQ4cOWfRt166dxdguLi6Gr6+v0bRpU2PJkiXJXqMP++eff4wmTZoY7u7uhpubm9GsWTPj33//TfLYL1y4YAQGBhoeHh6Go6OjUaBAAaN79+5GdHS0YRiPfp3/7rvvjKJFixr29vaGl5eX8f7771u8/p09e9bo2LGjUbBgQcPJycnInj278frrrxubN28299myZYvRqFEjI1euXIaDg4ORK1cuo1WrVsapU6dSdbz9+/c3JBmjR4+2aC9UqJAhyThz5kyifW7dumUMHDjQKFSokOHg4GDkzJnTqFKlijFmzBgjJibG3O/hc/bw6+6hQ4eMVq1aGfny5TMcHR0NT09P48033zQOHDhg8Xh//fWXIcniuAEAeB6ZDCOTVk8FgFQymUzq3r17srdiAUisT58+mj59ui5fviwXF5fMLidDZMRrQa1atZQrVy799NNPGVgZYJ169+6t3377TQcPHmTmFwDgucaaXwAAWJmoqCjNnTtXTZs2tZrgK6N88cUXWrhwYYZ/8AJgbW7cuKEff/xRn3/+OcEXAOC5x5pfAABYiatXr2rz5s1asmSJbty4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LwpIBAAAQFkov4DCLVu2LK2trV3G29vbs2zZsgISAUDfcPvtt2fjxo1dxjdu3Jg77rijgEQAUHmUX0Dhdu3alUmTJnUZnzBhQnbv3l1AIgDoG1atWpXhw4d3GT/mmGNy3XXXFZAIACqP8gso3ODBg/PCCy90Gd+9e3cGDBhQQCIA6Bv27NmThoaGLuMnnHBC9uzZU0AiAKg8yi+gcOeee24uu+yy/OEPf+gY2717dy6//PKcc845BSYDgMp2zDHH5Le//W2X8d/85jcZNmxYAYkAoPIov4DC3XDDDRkwYEAmTJiQhoaGNDQ0ZMKECRk2bFjWrFlTdDwAqFjz58/PpZdemocffjitra1pbW3NQw89lCVLluQLX/hC0fEAoCJUtbe3txcdAqC9vT1btmzJ008/nf79+2fKlCk544wzio4FABWtpaUlF1xwQTZu3JiampokSWtray688MKsX78+tbW1BScEgOIpv4CKsHXr1mzdujWvvPJK2traOj122223FZQKAPqGXbt25amnnup4A+mEE04oOhIAVIyaogMAXHPNNbn22mvT2NiYY489NlVVVUVHAoA+44c//GG++93vZteuXUmSk08+OZdddlkuvvjigpMBQGVQfgGFW79+fX70ox/lggsuKDoKAPQpK1asyE033ZTFixdn5syZSZLt27fn61//evbs2ZNrr7224IQAUDyXPQKFGzZsWHbs2JFx48YVHQUA+pQRI0bk+9//fubPn99p/Kc//WkWL16c1157raBkAFA5/LVHoHAXX3xx7rzzzqJjAECfc/DgwTQ2NnYZnzZtWt59990CEgFA5XHZI1C4d955Jxs2bMiWLVsyZcqUHHXUUZ0ev+mmmwpKBgCV7YILLsi6deu6nCs3bNiQL33pSwWlAoDK4rJHoHBnnnnmIR+rqqrKQw89dBjTAEDfsXjx4vz4xz/OmDFjMmPGjCTJY489lj179mTBggWd3lDyZhIARyrlFwAA9FHv9QbS3/JmEgBHMuUXAAAAAKXlhvcAAAAAlJbyCwAAAIDSUn4BAAAAUFrKLwAAAABKS/kFAEeApqamLFmyJCeddFLq6+szcuTIzJo1K+vWrctbb71VdDwAAOg1NUUHAAB61wsvvJBZs2ZlyJAhue666zJ58uTU1dXlmWeeyYYNGzJ69Oicc845XdYdPHgwRx11VAGJAQDgw2PnFwCU3KJFi1JTU5Mnnngi5513XiZOnJixY8fm3HPPzX333Zezzz47SVJVVZV169blnHPOyYABA/Kd73wnSbJu3bqMGzcutbW1GT9+fH7yk590PPeLL76YqqqqPP300x1jb7zxRqqqqrJt27YkybZt21JVVZX77rsvU6ZMSX19fWbMmJFnn332sP0fAABw5FJ+AUCJ/fnPf84vf/nLfO1rX8uAAQO6nVNVVdVxfPXVV+ezn/1snnnmmXzlK1/Jpk2bsmTJklx++eV59tln89WvfjULFy7Mww8/3OMsV1xxRW688cY8/vjjGTFiRM4+++wcPHjwA782AAB4P5RfAFBiu3fvTnt7e8aPH99pfPjw4Rk4cGAGDhyYK6+8smP8i1/8YhYuXJixY8fm+OOPz5o1a/LlL385ixYtykc/+tEsXbo0n/vc57JmzZoeZ1m5cmXmzJmTyZMn54477sjevXuzadOmf/g1AgDAe1F+AcARaMeOHXn66adzyimnpLm5uWO8sbGx07znnnsus2bN6jQ2a9asPPfccz3+nDNnzuw4PvroozN+/PgP9DwAANATbngPACV20kknpaqqKs8//3yn8bFjxyZJ+vfv32n8UJdGHkp19V/fR2tvb+8YcykjAACVxM4vACixYcOGZc6cOVm7dm0OHDjQ4/UTJ07MI4880mnskUceyaRJk5IkI0aMSJL86U9/6nj8b29+/7ceffTRjuPXX389v//97zNx4sQeZwIAgJ6w8wsASu7WW2/NrFmz0tjYmKuvvjpTpkxJdXV1Hn/88ezcuTPTpk075Norrrgi5513Xj7xiU9k9uzZuffee/Ozn/0sW7ZsSfLXnWMzZszI6tWr09DQkFdeeSVXXXVVt8917bXXZtiwYRk5cmS+9a1vZfjw4Zk3b15vvGQAAOig/AKAkhs3blyeeuqpXHfddVm+fHlefvnl1NXVZdKkSfnGN76RRYsWHXLtvHnz8r3vfS9r1qzJkiVL0tDQkNtvvz2f/vSnO+bcdtttueiiizJt2rSMHz8+N9xwQ84666wuz7V69eosWbIku3btytSpU3Pvvfemtra2N14yAAB0qGr/25t0AAB8yLZt25Yzzzwzr7/+eoYMGVJ0HAAAjjDu+QUAAABAaSm/AAAAACgtlz0CAAAAUFp2fgEAAABQWsovAAAAAEpL+QUAAABAaSm/AAAAACgt5RcAAAAApaX8AgAAAKC0lF8AAAAAlJbyCwAAAIDSUn4BAAAAUFr/Drik+0FVVyOQAAAAAElFTkSuQmCC",
286
+ "text/plain": [
287
+ "<Figure size 1200x800 with 1 Axes>"
288
+ ]
289
+ },
290
+ "metadata": {},
291
+ "output_type": "display_data"
292
+ }
293
+ ],
87
294
  "source": [
88
295
  "from spacr.submodules import analyze_endodyogeny\n",
89
296
  "%matplotlib inline\n",
@@ -105,22 +312,28 @@
105
312
  " 'level': 'well',\n",
106
313
  " 'um_per_px':0.1,\n",
107
314
  " 'max_bins':5,\n",
108
- " 'save':False,\n",
315
+ " 'save':True,\n",
109
316
  " 'verbose': True}\n",
110
317
  "\n",
111
318
  "# Run the analysis\n",
112
- "chi2, p = analyze_endodyogeny(settings)\n",
113
- "print(f\"Chi-squared statistic: {chi2}, p-value: {p}\")\n"
319
+ "output = analyze_endodyogeny(settings)\n"
114
320
  ]
115
321
  },
116
322
  {
117
323
  "cell_type": "code",
118
- "execution_count": 2,
119
- "id": "5d6ccf4e",
324
+ "execution_count": 1,
325
+ "id": "e6b5835c",
120
326
  "metadata": {
121
327
  "scrolled": false
122
328
  },
123
329
  "outputs": [
330
+ {
331
+ "name": "stdout",
332
+ "output_type": "stream",
333
+ "text": [
334
+ "Models already downloaded to: /home/carruthers/anaconda3/envs/spacr/lib/python3.9/site-packages/spacr/resources/models\n"
335
+ ]
336
+ },
124
337
  {
125
338
  "data": {
126
339
  "text/html": [
@@ -283,8 +496,39 @@
283
496
  "Generated dataframe with: 793 columns and 30522 rows\n",
284
497
  "Chi-squared test statistic (raw data): 10386.3028\n",
285
498
  "p-value (raw data): 0.0000e+00\n",
286
- "Chi-squared results saved to /nas_mnt/carruthers/yifan/Yifan_Einar screen/yifanUbtrial11h_20240705_184432/plate1/results/class_chi_squared_results.csv\n",
287
- "Annotated data saved to /nas_mnt/carruthers/yifan/Yifan_Einar screen/yifanUbtrial11h_20240705_184432/plate1/results/class_chi_squared_data.csv\n"
499
+ "\n",
500
+ "Pairwise Frequency Analysis Results:\n",
501
+ " Group 1 Group 2 Test Name p-value p-value_adj adj\n",
502
+ " cm_nc_rnf cm_nc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
503
+ " cm_nc_rnf cm_pc_rnf Fisher's Exact Test 2.037782e-121 5.705789e-120 bonferroni\n",
504
+ " cm_nc_rnf cm_pc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
505
+ " cm_nc_rnf infg_nc_rnf Fisher's Exact Test 5.556853e-12 1.555919e-10 bonferroni\n",
506
+ " cm_nc_rnf infg_nc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
507
+ " cm_nc_rnf infg_pc_rnf Fisher's Exact Test 3.854386e-239 1.079228e-237 bonferroni\n",
508
+ " cm_nc_rnf infg_pc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
509
+ " cm_nc_ub cm_pc_rnf Fisher's Exact Test 7.900442e-192 2.212124e-190 bonferroni\n",
510
+ " cm_nc_ub cm_pc_ub Fisher's Exact Test 9.730547e-45 2.724553e-43 bonferroni\n",
511
+ " cm_nc_ub infg_nc_rnf Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
512
+ " cm_nc_ub infg_nc_ub Fisher's Exact Test 1.257152e-51 3.520025e-50 bonferroni\n",
513
+ " cm_nc_ub infg_pc_rnf Fisher's Exact Test 1.088130e-152 3.046764e-151 bonferroni\n",
514
+ " cm_nc_ub infg_pc_ub Fisher's Exact Test 6.549957e-09 1.833988e-07 bonferroni\n",
515
+ " cm_pc_rnf cm_pc_ub Fisher's Exact Test 7.424495e-300 2.078859e-298 bonferroni\n",
516
+ " cm_pc_rnf infg_nc_rnf Fisher's Exact Test 6.909521e-170 1.934666e-168 bonferroni\n",
517
+ " cm_pc_rnf infg_nc_ub Fisher's Exact Test 4.840047e-55 1.355213e-53 bonferroni\n",
518
+ " cm_pc_rnf infg_pc_rnf Fisher's Exact Test 6.738680e-08 1.886830e-06 bonferroni\n",
519
+ " cm_pc_rnf infg_pc_ub Fisher's Exact Test 1.721869e-188 4.821232e-187 bonferroni\n",
520
+ " cm_pc_ub infg_nc_rnf Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
521
+ " cm_pc_ub infg_nc_ub Fisher's Exact Test 2.077732e-143 5.817650e-142 bonferroni\n",
522
+ " cm_pc_ub infg_pc_rnf Fisher's Exact Test 2.926600e-260 8.194479e-259 bonferroni\n",
523
+ " cm_pc_ub infg_pc_ub Fisher's Exact Test 3.393265e-13 9.501141e-12 bonferroni\n",
524
+ "infg_nc_rnf infg_nc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
525
+ "infg_nc_rnf infg_pc_rnf Fisher's Exact Test 1.202352e-301 3.366584e-300 bonferroni\n",
526
+ "infg_nc_rnf infg_pc_ub Fisher's Exact Test 0.000000e+00 0.000000e+00 bonferroni\n",
527
+ " infg_nc_ub infg_pc_rnf Fisher's Exact Test 8.341849e-29 2.335718e-27 bonferroni\n",
528
+ " infg_nc_ub infg_pc_ub Fisher's Exact Test 6.572288e-68 1.840241e-66 bonferroni\n",
529
+ "infg_pc_rnf infg_pc_ub Fisher's Exact Test 4.620722e-152 1.293802e-150 bonferroni\n",
530
+ "Chi-squared results saved to /nas_mnt/carruthers/yifan/Yifan_Einar screen/yifanUbtrial11h_20240705_184432/plate1/results/analyze_class_proportion/class_chi_squared_results.csv\n",
531
+ "Annotated data saved to /nas_mnt/carruthers/yifan/Yifan_Einar screen/yifanUbtrial11h_20240705_184432/plate1/results/analyze_class_proportion/class_chi_squared_data.csv\n"
288
532
  ]
289
533
  },
290
534
  {
@@ -306,6 +550,14 @@
306
550
  },
307
551
  "metadata": {},
308
552
  "output_type": "display_data"
553
+ },
554
+ {
555
+ "name": "stdout",
556
+ "output_type": "stream",
557
+ "text": [
558
+ "Levene's test statistic: 809.1485, p-value: 0.0000e+00\n",
559
+ "Statistical analysis results saved.\n"
560
+ ]
309
561
  }
310
562
  ],
311
563
  "source": [
@@ -336,7 +588,7 @@
336
588
  {
337
589
  "cell_type": "code",
338
590
  "execution_count": null,
339
- "id": "7a990498",
591
+ "id": "6532d517",
340
592
  "metadata": {},
341
593
  "outputs": [],
342
594
  "source": []
@@ -0,0 +1,92 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "cf770028",
7
+ "metadata": {
8
+ "scrolled": false
9
+ },
10
+ "outputs": [],
11
+ "source": [
12
+ "from spacr.submodules import analyze_endodyogeny\n",
13
+ "%matplotlib inline\n",
14
+ "\n",
15
+ "settings = {\n",
16
+ " 'src': 'path',\n",
17
+ " 'tables': ['cell', 'nucleus', 'pathogen', 'cytoplasm'],\n",
18
+ " 'cell_types': ['Hela'],\n",
19
+ " 'cell_plate_metadata': None,\n",
20
+ " 'pathogen_types': ['nc', 'pc'],\n",
21
+ " 'pathogen_plate_metadata': [['c1'], ['c2']],\n",
22
+ " 'treatments': None,\n",
23
+ " 'treatment_plate_metadata': None,\n",
24
+ " 'min_area_bin': 500,\n",
25
+ " 'group_column': 'pathogen',\n",
26
+ " 'compartment': 'pathogen',\n",
27
+ " 'pathogen_limit': 1,\n",
28
+ " 'nuclei_limit': 1000,\n",
29
+ " 'level': 'well',\n",
30
+ " 'um_per_px':0.1,\n",
31
+ " 'max_bins':5,\n",
32
+ " 'save':True,\n",
33
+ " 'verbose': True}\n",
34
+ "\n",
35
+ "# Run the analysis\n",
36
+ "output = analyze_endodyogeny(settings)"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "id": "6657b0db",
43
+ "metadata": {},
44
+ "outputs": [],
45
+ "source": [
46
+ "from spacr.submodules import analyze_class_proportion\n",
47
+ "%matplotlib inline\n",
48
+ "\n",
49
+ "settings = {\n",
50
+ " 'src': 'path',\n",
51
+ " 'tables': ['cell', 'nucleus', 'pathogen', 'cytoplasm'],\n",
52
+ " 'cell_types': ['cm','infg'],\n",
53
+ " 'cell_plate_metadata': [['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c13', 'c14', 'c15', 'c16', 'c17', 'c18'],['c7', 'c8', 'c9', 'c10', 'c11', 'c12','c18', 'c19', 'c20', 'c21', 'c22', 'c23', 'c24']],\n",
54
+ " 'pathogen_types': ['nc', 'pc'],\n",
55
+ " 'pathogen_plate_metadata': [['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12'], ['c13', 'c14', 'c15', 'c16', 'c17', 'c18', 'c19', 'c20', 'c21', 'c22', 'c23', 'c24']],\n",
56
+ " 'treatments': ['ub','rnf'],\n",
57
+ " 'treatment_plate_metadata': [['c1', 'c2','c3', 'c7','c8','c9', 'c13','c14','c15','c19','c20','c21'],['c4','c5','c6','c10','c11','c12','c16','c17','c18','c22','c23','c24']],\n",
58
+ " 'group_column': 'condition',\n",
59
+ " 'class_column':'test',\n",
60
+ " 'pathogen_limit': 1000,\n",
61
+ " 'nuclei_limit': 1000,\n",
62
+ " 'level': 'well',\n",
63
+ " 'save':True,\n",
64
+ " 'verbose': True}\n",
65
+ "\n",
66
+ "# Run the analysis\n",
67
+ "output = analyze_class_proportion(settings)"
68
+ ]
69
+ }
70
+ ],
71
+ "metadata": {
72
+ "kernelspec": {
73
+ "display_name": "spacr",
74
+ "language": "python",
75
+ "name": "spacr"
76
+ },
77
+ "language_info": {
78
+ "codemirror_mode": {
79
+ "name": "ipython",
80
+ "version": 3
81
+ },
82
+ "file_extension": ".py",
83
+ "mimetype": "text/x-python",
84
+ "name": "python",
85
+ "nbconvert_exporter": "python",
86
+ "pygments_lexer": "ipython3",
87
+ "version": "3.9.19"
88
+ }
89
+ },
90
+ "nbformat": 4,
91
+ "nbformat_minor": 5
92
+ }