AMS-BP 0.4.41__tar.gz → 0.4.42__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 (173) hide show
  1. {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/publish_pypi.yml +23 -7
  2. {ams_bp-0.4.41 → ams_bp-0.4.42}/PKG-INFO +1 -1
  3. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/__init__.py +1 -1
  4. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/convertconfig.py +13 -0
  5. ams_bp-0.4.42/src/AMS_BP/core/optics/collection_efficiency.py +24 -0
  6. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/photon_physics.py +6 -2
  7. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sim_microscopy.py +5 -1
  8. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/main.py +0 -7
  9. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/camera_config_widget.py +1 -5
  10. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/channel_config_widget.py +0 -1
  11. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/condensate_config_widget.py +0 -4
  12. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/toggleswitch_widget.py +0 -2
  13. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/configuration_window.py +0 -4
  14. {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/lint.yml +0 -0
  15. {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/pages.yml +0 -0
  16. {ams_bp-0.4.41 → ams_bp-0.4.42}/.gitignore +0 -0
  17. {ams_bp-0.4.41 → ams_bp-0.4.42}/LICENSE +0 -0
  18. {ams_bp-0.4.41 → ams_bp-0.4.42}/README.md +0 -0
  19. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/configmodels.md +0 -0
  20. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/convertconfig.md +0 -0
  21. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/experiments.md +0 -0
  22. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/saving.md +0 -0
  23. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/groundtruth_generators/nuclearporecomplexes.md +0 -0
  24. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/metadata/metadata.md +0 -0
  25. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/condensate_movement.md +0 -0
  26. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/movement/boundary_conditions.md +0 -0
  27. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/movement/fbm_BP.md +0 -0
  28. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/track_gen.md +0 -0
  29. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/camera/detectors.md +0 -0
  30. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/camera/quantum_eff.md +0 -0
  31. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/filters/channels/channelschema.md +0 -0
  32. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/filters/filters.md +0 -0
  33. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/lasers/laser_profiles.md +0 -0
  34. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/psf/psf_engine.md +0 -0
  35. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/photophysics/photon_physics.md +0 -0
  36. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/photophysics/state_kinetics.md +0 -0
  37. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/probabilityfuncs/markov_chain.md +0 -0
  38. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/probabilityfuncs/probability_functions.md +0 -0
  39. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sample/flurophore/flurophore_schema.md +0 -0
  40. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sample/sim_sampleplane.md +0 -0
  41. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sim_microscopy.md +0 -0
  42. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/main_cli.md +0 -0
  43. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/sim_config.md +0 -0
  44. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/constants.md +0 -0
  45. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/errors.md +0 -0
  46. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/util_functions.md +0 -0
  47. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_FRAP.svg +0 -0
  48. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_fPALM_NPC.svg +0 -0
  49. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_sptPALM_mmaple.svg +0 -0
  50. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_confocal.svg +0 -0
  51. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_widefield.svg +0 -0
  52. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/figures/Fig1_Schema.svg +0 -0
  53. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/Cells-actin-like-a-tree-Jamie-Whitelaw-1.png +0 -0
  54. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.pdf +0 -0
  55. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.png +0 -0
  56. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.svg +0 -0
  57. {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/index.md +0 -0
  58. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0. 0.]].txt +0 -0
  59. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.04 0.04]].txt +0 -0
  60. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.1 0.1]].txt +0 -0
  61. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.4 0.4]].txt +0 -0
  62. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0. 0.]].txt +0 -0
  63. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.04 0.04]].txt +0 -0
  64. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.1 0.1]].txt +0 -0
  65. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.4 0.4]].txt +0 -0
  66. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_methods.ipynb +0 -0
  67. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/MotionModels/groundtruth_boundedfbm.ipynb +0 -0
  68. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/fPALM/export_full2_0039_039.csv +0 -0
  69. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/fPALM/npc_palm.ipynb +0 -0
  70. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/sptPALM/motionmodels_sptmmaple.ipynb +0 -0
  71. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/TwoColor/Confocal/confocal_twocolor.ipynb +0 -0
  72. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/TwoColor/Widefield/widefield_twocolor.ipynb +0 -0
  73. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/laser_modulation.ipynb +0 -0
  74. {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/modules_explained.ipynb +0 -0
  75. {ams_bp-0.4.41 → ams_bp-0.4.42}/mkdocs.yml +0 -0
  76. {ams_bp-0.4.41 → ams_bp-0.4.42}/pyproject.toml +0 -0
  77. {ams_bp-0.4.41 → ams_bp-0.4.42}/pytest.ini +0 -0
  78. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/__init__.py +0 -0
  79. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/__init__.py +0 -0
  80. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/budding_yeast_cell.py +0 -0
  81. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/cell_factory.py +0 -0
  82. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/__init__.py +0 -0
  83. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/configmodels.py +0 -0
  84. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/experiments.py +0 -0
  85. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/saving.py +0 -0
  86. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/groundtruth_generators/__init__.py +0 -0
  87. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/groundtruth_generators/nuclearporecomplexes.py +0 -0
  88. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/metadata/__init__.py +0 -0
  89. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/metadata/metadata.py +0 -0
  90. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/__init__.py +0 -0
  91. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/condensate_movement.py +0 -0
  92. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/movement/__init__.py +0 -0
  93. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/movement/boundary_conditions.py +0 -0
  94. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/track_gen.py +0 -0
  95. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/__init__.py +0 -0
  96. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/__init__.py +0 -0
  97. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/detectors.py +0 -0
  98. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/quantum_eff.py +0 -0
  99. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/__init__.py +0 -0
  100. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/channels/__init__.py +0 -0
  101. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/channels/channelschema.py +0 -0
  102. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/filters.py +0 -0
  103. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/__init__.py +0 -0
  104. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/laser_profiles.py +0 -0
  105. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/scanning_patterns.py +0 -0
  106. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/psf/__init__.py +0 -0
  107. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/psf/psf_engine.py +0 -0
  108. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/__init__.py +0 -0
  109. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/state_kinetics.py +0 -0
  110. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/__init__.py +0 -0
  111. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/markov_chain.py +0 -0
  112. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/probability_functions.py +0 -0
  113. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/run_sim_util.py +0 -0
  114. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/__init__.py +0 -0
  115. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/flurophores/__init__.py +0 -0
  116. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/flurophores/flurophore_schema.py +0 -0
  117. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/sim_sampleplane.py +0 -0
  118. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/README.md +0 -0
  119. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/__init__.py +0 -0
  120. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/assets/__init__.py +0 -0
  121. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/assets/drawing.svg +0 -0
  122. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/__init__.py +0 -0
  123. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/cell_help.md +0 -0
  124. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/channels_help.md +0 -0
  125. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/condensate_help.md +0 -0
  126. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/detector_help.md +0 -0
  127. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/experiment_help.md +0 -0
  128. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/fluorophore_help.md +0 -0
  129. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/general_help.md +0 -0
  130. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/global_help.md +0 -0
  131. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/laser_help.md +0 -0
  132. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/molecule_help.md +0 -0
  133. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/output_help.md +0 -0
  134. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/psf_help.md +0 -0
  135. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/sim_worker.py +0 -0
  136. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/themes/dark_theme.qss +0 -0
  137. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/themes/light_theme.qss +0 -0
  138. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/__init__.py +0 -0
  139. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/cell_config_widget.py +0 -0
  140. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/experiment_config_widget.py +0 -0
  141. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/flurophore_config_widget.py +0 -0
  142. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/general_config_widget.py +0 -0
  143. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/global_config_widget.py +0 -0
  144. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/laser_config_widget.py +0 -0
  145. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/molecule_config_widget.py +0 -0
  146. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/output_config_widget.py +0 -0
  147. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/psf_config_widget.py +0 -0
  148. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/__init__.py +0 -0
  149. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/scinotation_widget.py +0 -0
  150. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/spectrum_widget.py +0 -0
  151. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/__init__.py +0 -0
  152. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/help_window.py +0 -0
  153. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/logging_window.py +0 -0
  154. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/template_window_selection.py +0 -0
  155. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/main_cli.py +0 -0
  156. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/metadata_configs.json +0 -0
  157. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/sim_config.toml +0 -0
  158. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_timeseries_live.toml +0 -0
  159. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_zstack_fixed.toml +0 -0
  160. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_zstack_live.toml +0 -0
  161. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_timeseries_live.toml +0 -0
  162. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_zstack_fixed.toml +0 -0
  163. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_zstack_live.toml +0 -0
  164. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/__init__.py +0 -0
  165. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/logutil.py +0 -0
  166. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/setup_run_directory.py +0 -0
  167. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/__init__.py +0 -0
  168. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/constants.py +0 -0
  169. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/decorators.py +0 -0
  170. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/errors.py +0 -0
  171. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/maskMaker.py +0 -0
  172. {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/util_functions.py +0 -0
  173. {ams_bp-0.4.41 → ams_bp-0.4.42}/uv.lock +0 -0
@@ -54,12 +54,12 @@ jobs:
54
54
  Sign the Python 🐍 distribution 📦 with Sigstore
55
55
  and upload them to GitHub Release
56
56
  needs:
57
- - publish-to-pypi
57
+ - publish-to-pypi
58
58
  runs-on: ubuntu-latest
59
59
 
60
60
  permissions:
61
- contents: write # IMPORTANT: mandatory for making GitHub Releases
62
- id-token: write # IMPORTANT: mandatory for sigstore
61
+ contents: write # mandatory for making GitHub Releases
62
+ id-token: write # mandatory for sigstore
63
63
 
64
64
  steps:
65
65
  - name: Download all the dists
@@ -67,26 +67,42 @@ jobs:
67
67
  with:
68
68
  name: python-package-distributions
69
69
  path: dist/
70
+
70
71
  - name: Sign the dists with Sigstore
71
72
  uses: sigstore/gh-action-sigstore-python@v3.0.0
72
73
  with:
73
74
  inputs: >-
74
75
  ./dist/*.tar.gz
75
76
  ./dist/*.whl
77
+
78
+ - name: Generate Changelog
79
+ id: changelog
80
+ run: |
81
+ git fetch --tags
82
+ PREV_TAG=$(git describe --tags --abbrev=0 HEAD^)
83
+ CURRENT_TAG=$(git describe --tags --abbrev=0 HEAD)
84
+ echo "Previous tag: $PREV_TAG"
85
+ echo "Current tag: $CURRENT_TAG"
86
+ echo "## Changes" > changelog.txt
87
+ echo "" >> changelog.txt
88
+ git log $PREV_TAG..$CURRENT_TAG --pretty=format:"- %s (%h)" >> changelog.txt
89
+ echo 'changelog<<EOF' >> $GITHUB_ENV
90
+ cat changelog.txt >> $GITHUB_ENV
91
+ echo 'EOF' >> $GITHUB_ENV
92
+
76
93
  - name: Create GitHub Release
77
94
  env:
78
95
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
96
+ changelog: ${{ env.changelog }}
79
97
  run: >-
80
98
  gh release create
81
99
  '${{ github.ref_name }}'
82
100
  --repo '${{ github.repository }}'
83
- --notes ""
101
+ --notes "${changelog}"
102
+
84
103
  - name: Upload artifact signatures to GitHub Release
85
104
  env:
86
105
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87
- # Upload to GitHub Release using the `gh` CLI.
88
- # `dist/` contains the built packages, and the
89
- # sigstore-produced signatures and certificates.
90
106
  run: >-
91
107
  gh release upload
92
108
  '${{ github.ref_name }}' dist/**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AMS_BP
3
- Version: 0.4.41
3
+ Version: 0.4.42
4
4
  Summary: Advanced Microscopy Simulations developed for the Weber Lab by Baljyot Singh Parmar
5
5
  Project-URL: Documentation, https://joemans3.github.io/AMS_BP/
6
6
  Project-URL: Source code, https://github.com/joemans3/AMS_BP
@@ -10,4 +10,4 @@ Last updated: 2024-12-16
10
10
 
11
11
  """
12
12
 
13
- __version__ = "0.4.41"
13
+ __version__ = "0.4.42"
@@ -6,6 +6,9 @@ import numpy as np
6
6
  import tomli
7
7
  from pydantic import BaseModel
8
8
 
9
+ from ...core.optics.collection_efficiency import (
10
+ collection_efficiency_isotropic_emission,
11
+ )
9
12
  from ..cells import BaseCell, create_cell
10
13
  from ..motion import Track_generator, create_condensate_dict
11
14
  from ..motion.track_gen import (
@@ -274,11 +277,19 @@ def create_psf_from_config(config: Dict[str, Any]) -> Tuple[Callable, Dict[str,
274
277
  additional_config = {
275
278
  "type": psf_config.get("type", "gaussian"),
276
279
  "custom_path": psf_config.get("custom_path", ""),
280
+ "psf_config": psf_config,
277
281
  }
278
282
 
279
283
  return Partial_PSFengine, additional_config
280
284
 
281
285
 
286
+ def create_collection_efficiency(config: Dict[str, Any]) -> float:
287
+ na = config.get("psf").get("parameters").get("numerical_aperture")
288
+ n = config.get("psf").get("parameters").get("refractive_index")
289
+ col_eff = collection_efficiency_isotropic_emission(na=na, n=n)
290
+ return col_eff
291
+
292
+
282
293
  # Helper function to find pixel size
283
294
  def find_pixel_size(magnification: float, pixel_detector_size: float) -> float:
284
295
  return pixel_detector_size / magnification
@@ -728,6 +739,7 @@ def setup_microscope(config: Dict[str, Any]) -> dict:
728
739
  fluorophores = create_fluorophores_from_config(config)
729
740
  # psf config
730
741
  psf, psf_config = create_psf_from_config(config)
742
+ collection_efficiency = create_collection_efficiency(config)
731
743
  # lasers config
732
744
  lasers = create_lasers_from_config(config)
733
745
  # channels config
@@ -776,6 +788,7 @@ def setup_microscope(config: Dict[str, Any]) -> dict:
776
788
  channels=channels,
777
789
  psf=psf,
778
790
  config=base_config,
791
+ collection_efficiency=collection_efficiency,
779
792
  )
780
793
 
781
794
  return {
@@ -0,0 +1,24 @@
1
+ import warnings
2
+ from functools import lru_cache
3
+
4
+ import numpy as np
5
+
6
+
7
+ @lru_cache(maxsize=None)
8
+ def collection_efficiency_isotropic_emission(na: float, n: float) -> float:
9
+ ratio = na / n
10
+
11
+ if ratio > 1.0:
12
+ warnings.warn(
13
+ f"NA ({na}) exceeds refractive index n ({n}), which is unphysical. "
14
+ f"Clipping NA/n to 1.0 for collection efficiency calculation."
15
+ )
16
+ ratio = 1.0
17
+ elif ratio < 0.0:
18
+ warnings.warn(
19
+ f"NA ({na}) is negative, which is unphysical. " f"Clipping NA/n to 0.0."
20
+ )
21
+ ratio = 0.0
22
+
23
+ # Use identity: cos(arcsin(x)) = sqrt(1 - x^2)
24
+ return 0.5 * (1 - np.sqrt(1 - ratio**2))
@@ -157,7 +157,9 @@ class incident_photons:
157
157
  else:
158
158
  self.generator.append(0)
159
159
 
160
- def incident_photons_calc(self, dt: float) -> Tuple[float, List]:
160
+ def incident_photons_calc(
161
+ self, dt: float, collection_efficiency: float = 1
162
+ ) -> Tuple[float, List]:
161
163
  photons = 0
162
164
  psf_hold = []
163
165
  for i in range(len(self.transmission_photon_rate.wavelengths)):
@@ -165,7 +167,9 @@ class incident_photons:
165
167
  qe_lam = self.quantumEff.get_qe(
166
168
  self.transmission_photon_rate.wavelengths[i]
167
169
  )
168
- photons_n = self.transmission_photon_rate.values[i] * dt
170
+ photons_n = (
171
+ self.transmission_photon_rate.values[i] * dt * collection_efficiency
172
+ )
169
173
  photons += photons_n
170
174
  psf_gen = (
171
175
  self.generator[i].psf_z(
@@ -30,6 +30,7 @@ class VirtualMicroscope:
30
30
  channels: Channels,
31
31
  psf: Callable[[float | int, Optional[float | int]], PSFEngine],
32
32
  config: ConfigList,
33
+ collection_efficiency: float = 1,
33
34
  start_time: int = 0,
34
35
  ):
35
36
  # Core components
@@ -41,6 +42,7 @@ class VirtualMicroscope:
41
42
  self.psf = psf
42
43
  self._time = start_time # ms
43
44
  self.config = config
45
+ self.collection_efficiency = collection_efficiency
44
46
 
45
47
  # Cached initial configuration
46
48
  self._cached_initial_config()
@@ -271,7 +273,9 @@ class VirtualMicroscope:
271
273
  self.psf,
272
274
  florPos,
273
275
  )
274
- _, psfs = inc.incident_photons_calc(deltaTime)
276
+ _, psfs = inc.incident_photons_calc(
277
+ deltaTime, self.collection_efficiency
278
+ )
275
279
  for ipsf in psfs:
276
280
  mapSC[self.channels.names[channel_num]].add_psf_frame(
277
281
  ipsf, florPos[:2], frame_list[time_index]
@@ -36,12 +36,10 @@ class MainWindow(QMainWindow):
36
36
  # Set up the main layout
37
37
  layout = QVBoxLayout()
38
38
 
39
- # Add logo as a placeholder (SVG format)
40
39
  self.logo_label = QLabel() # Label to hold the logo
41
40
  self.set_svg_logo(LOGO_PATH) # Set the SVG logo
42
41
  layout.addWidget(self.logo_label, alignment=Qt.AlignmentFlag.AlignCenter)
43
42
 
44
- # Add the maintainer's name under the image
45
43
  self.maintainer_label = QLabel(
46
44
  "Maintainer: Baljyot Parmar \n baljyotparmar@hotmail.com"
47
45
  )
@@ -96,7 +94,6 @@ class MainWindow(QMainWindow):
96
94
  def package_logs(self):
97
95
  log_dir = Path.home() / "AMS_runs"
98
96
 
99
- # Step 1: Open dialog to select folders
100
97
  folder_paths = QFileDialog.getExistingDirectory(
101
98
  self,
102
99
  "Select Folder Containing Run Logs",
@@ -107,7 +104,6 @@ class MainWindow(QMainWindow):
107
104
  if not folder_paths:
108
105
  return
109
106
 
110
- # QFileDialog.getExistingDirectory() returns a single path.
111
107
  # For now, let's treat this as a single run_* folder being selected.
112
108
 
113
109
  run_dir = Path(folder_paths)
@@ -117,7 +113,6 @@ class MainWindow(QMainWindow):
117
113
  )
118
114
  return
119
115
 
120
- # Step 2: Ask for destination .zip archive
121
116
  zip_path_str, _ = QFileDialog.getSaveFileName(
122
117
  self,
123
118
  "Save Zipped Folder As",
@@ -220,7 +215,6 @@ class MainWindow(QMainWindow):
220
215
 
221
216
  if file_path:
222
217
  try:
223
- # Load the image (expand here if you want ND2 or Zarr support)
224
218
  image = tifffile.imread(file_path)
225
219
 
226
220
  # Open Napari viewer and display the image
@@ -233,7 +227,6 @@ class MainWindow(QMainWindow):
233
227
 
234
228
  def set_svg_logo(self, svg_path):
235
229
  """Set an SVG logo to the QLabel, maintaining the aspect ratio."""
236
- # Create a QSvgRenderer to render the SVG
237
230
  renderer = QSvgRenderer(svg_path)
238
231
  if renderer.isValid():
239
232
  # Get the size of the SVG image
@@ -123,7 +123,6 @@ class CameraConfigWidget(QWidget):
123
123
  "wavelengths": dialog.wavelengths,
124
124
  "quantum_efficiency": dialog.intensities,
125
125
  }
126
- # You can now use this data wherever needed, e.g., saving or validation
127
126
 
128
127
  def validate(self) -> bool:
129
128
  try:
@@ -132,7 +131,6 @@ class CameraConfigWidget(QWidget):
132
131
  # Convert QE before passing
133
132
  qe = create_quantum_efficiency_from_config(data["quantum_efficiency"])
134
133
 
135
- # Prepare CMOS-specific parameters only (drop "type" and "quantum_efficiency")
136
134
  camera_data = {
137
135
  k: v for k, v in data.items() if k not in {"type", "quantum_efficiency"}
138
136
  }
@@ -168,9 +166,7 @@ class CameraConfigWidget(QWidget):
168
166
  "sensitivity": self.sensitivity.value(),
169
167
  "base_adu": self.base_adu.value(),
170
168
  "binning_size": self.binning_size.value(),
171
- "quantum_efficiency": convert_dict_to_2_list(
172
- self.quantum_efficiency_data
173
- ), # Use edited data here
169
+ "quantum_efficiency": convert_dict_to_2_list(self.quantum_efficiency_data),
174
170
  }
175
171
  return camera_data
176
172
 
@@ -55,7 +55,6 @@ class ChannelConfigWidget(QWidget):
55
55
  # Full simulation-level validation
56
56
  channels = create_channels({"channels": data})
57
57
 
58
- # Optional: Validate shape consistency
59
58
  if len(channels.names) != channels.num_channels:
60
59
  raise ValueError("Channel count does not match number of names.")
61
60
 
@@ -122,7 +122,6 @@ class CondensateConfigWidget(QWidget):
122
122
  condensate_controls.addWidget(condensate_count)
123
123
  layout.addLayout(condensate_controls)
124
124
 
125
- # === Density Difference field RIGHT AFTER the condensate count ===
126
125
  density_layout = QHBoxLayout()
127
126
  density_layout.addWidget(QLabel("Density Difference:"))
128
127
 
@@ -133,7 +132,6 @@ class CondensateConfigWidget(QWidget):
133
132
  density_layout.addWidget(density_spin)
134
133
  layout.addLayout(density_layout)
135
134
 
136
- # === Condensate containers BELOW this point ===
137
135
  condensate_container = QVBoxLayout()
138
136
  layout.addLayout(condensate_container)
139
137
 
@@ -307,10 +305,8 @@ class CondensateConfigWidget(QWidget):
307
305
  try:
308
306
  data = self.get_data()
309
307
 
310
- # Step 1: Validate with Pydantic
311
308
  validated = CondensateParameters(**data)
312
309
 
313
- # Step 2: Validate simulation compatibility for each condensate
314
310
  # Create a dummy cell just for validation context
315
311
  dummy_cell = create_cell(
316
312
  "SphericalCell", {"center": [0, 0, 0], "radius": 5.0}
@@ -41,13 +41,11 @@ class ToggleSwitch(QWidget):
41
41
  painter = QPainter(self)
42
42
  painter.setRenderHint(QPainter.RenderHint.Antialiasing)
43
43
 
44
- # NEW: Background indicates *next* theme
45
44
  bg_color = QColor("#dddddd") if self._checked else QColor("#333333")
46
45
  painter.setBrush(QBrush(bg_color))
47
46
  painter.setPen(Qt.PenStyle.NoPen)
48
47
  painter.drawRoundedRect(0, 0, self.width(), self.height(), 14, 14)
49
48
 
50
- # Handle (always green)
51
49
  painter.setBrush(QBrush(QColor("#008000")))
52
50
  painter.drawEllipse(int(self._circle_position), 2, 24, 24)
53
51
 
@@ -198,23 +198,19 @@ class ConfigEditor(QWidget):
198
198
  def preview_config(self):
199
199
  """Preview the full TOML config in a dialog before saving."""
200
200
  try:
201
- # Step 1: Validate tabs
202
201
  if not self.validate_all_tabs():
203
202
  QMessageBox.warning(
204
203
  self, "Validation Error", "Fix errors before preview."
205
204
  )
206
205
  return
207
206
 
208
- # Step 2: Collect config data
209
207
  config = self.collect_all_config()
210
208
 
211
- # Step 3: Convert to TOML string
212
209
  toml_doc = tomlkit.document()
213
210
  for key, value in config.items():
214
211
  toml_doc[key] = value
215
212
  toml_str = tomlkit.dumps(toml_doc)
216
213
 
217
- # Step 4: Show preview dialog
218
214
  preview_dialog = QDialog(self)
219
215
  preview_dialog.setWindowTitle("Preview TOML Configuration")
220
216
  layout = QVBoxLayout(preview_dialog)
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