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.
- {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/publish_pypi.yml +23 -7
- {ams_bp-0.4.41 → ams_bp-0.4.42}/PKG-INFO +1 -1
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/__init__.py +1 -1
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/convertconfig.py +13 -0
- ams_bp-0.4.42/src/AMS_BP/core/optics/collection_efficiency.py +24 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/photon_physics.py +6 -2
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sim_microscopy.py +5 -1
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/main.py +0 -7
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/camera_config_widget.py +1 -5
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/channel_config_widget.py +0 -1
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/condensate_config_widget.py +0 -4
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/toggleswitch_widget.py +0 -2
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/configuration_window.py +0 -4
- {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/lint.yml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/.github/workflows/pages.yml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/.gitignore +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/LICENSE +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/README.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/configmodels.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/convertconfig.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/experiments.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/configio/saving.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/groundtruth_generators/nuclearporecomplexes.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/metadata/metadata.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/condensate_movement.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/movement/boundary_conditions.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/movement/fbm_BP.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/track_gen.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/camera/detectors.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/camera/quantum_eff.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/filters/channels/channelschema.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/filters/filters.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/lasers/laser_profiles.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/psf/psf_engine.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/photophysics/photon_physics.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/photophysics/state_kinetics.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/probabilityfuncs/markov_chain.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/probabilityfuncs/probability_functions.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sample/flurophore/flurophore_schema.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sample/sim_sampleplane.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sim_microscopy.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/main_cli.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/sim_config.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/constants.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/errors.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/utils/util_functions.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_FRAP.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_fPALM_NPC.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_sptPALM_mmaple.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_confocal.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_widefield.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/figures/Fig1_Schema.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/Cells-actin-like-a-tree-Jamie-Whitelaw-1.png +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.pdf +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.png +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/drawing.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/docs/index.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0. 0.]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.04 0.04]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.1 0.1]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.4 0.4]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0. 0.]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.04 0.04]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.1 0.1]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.4 0.4]].txt +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_methods.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/MotionModels/groundtruth_boundedfbm.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/fPALM/export_full2_0039_039.csv +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/fPALM/npc_palm.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/PALM/sptPALM/motionmodels_sptmmaple.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/TwoColor/Confocal/confocal_twocolor.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/TwoColor/Widefield/widefield_twocolor.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/laser_modulation.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/modules_explained.ipynb +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/mkdocs.yml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/pyproject.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/pytest.ini +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/budding_yeast_cell.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/cells/cell_factory.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/configmodels.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/experiments.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/configio/saving.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/groundtruth_generators/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/groundtruth_generators/nuclearporecomplexes.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/metadata/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/metadata/metadata.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/condensate_movement.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/movement/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/movement/boundary_conditions.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/motion/track_gen.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/detectors.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/camera/quantum_eff.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/channels/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/channels/channelschema.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/filters/filters.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/laser_profiles.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/lasers/scanning_patterns.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/psf/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/optics/psf/psf_engine.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/photophysics/state_kinetics.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/markov_chain.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/probabilityfuncs/probability_functions.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/run_sim_util.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/flurophores/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/flurophores/flurophore_schema.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/sample/sim_sampleplane.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/README.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/assets/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/assets/drawing.svg +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/cell_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/channels_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/condensate_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/detector_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/experiment_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/fluorophore_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/general_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/global_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/laser_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/molecule_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/output_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/help_docs/psf_help.md +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/sim_worker.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/themes/dark_theme.qss +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/themes/light_theme.qss +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/cell_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/experiment_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/flurophore_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/general_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/global_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/laser_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/molecule_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/output_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/psf_config_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/scinotation_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/spectrum_widget.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/help_window.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/logging_window.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/windows/template_window_selection.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/main_cli.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/metadata_configs.json +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/sim_config.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_timeseries_live.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_zstack_fixed.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_confocal_zstack_live.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_timeseries_live.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_zstack_fixed.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/resources/template_configs/twocolor_widefield_zstack_live.toml +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/logutil.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/tools/logging/setup_run_directory.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/__init__.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/constants.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/decorators.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/errors.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/maskMaker.py +0 -0
- {ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/utils/util_functions.py +0 -0
- {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
|
-
|
57
|
+
- publish-to-pypi
|
58
58
|
runs-on: ubuntu-latest
|
59
59
|
|
60
60
|
permissions:
|
61
|
-
contents: write #
|
62
|
-
id-token: write #
|
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.
|
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
|
@@ -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(
|
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 =
|
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(
|
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}
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/toggleswitch_widget.py
RENAMED
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/motion/movement/boundary_conditions.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/optics/filters/channels/channelschema.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/probabilityfuncs/markov_chain.md
RENAMED
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/API_Documentation/core/sample/flurophore/flurophore_schema.md
RENAMED
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
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_confocal.svg
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/buttons/ButtonFigure_zstack_twocolor_widefield.svg
RENAMED
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/docs/assets/icons/Cells-actin-like-a-tree-Jamie-Whitelaw-1.png
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0. 0.]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.04 0.04]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.1 0.1]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_base_[[0.4 0.4]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0. 0.]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.04 0.04]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.1 0.1]].txt
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/QuantitativeExperiments/FRAP/FRAP_data_[[0.4 0.4]].txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/laser_modulation.ipynb
RENAMED
File without changes
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/examples/VisualizingIndividualModules/modules_explained.ipynb
RENAMED
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
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/core/groundtruth_generators/nuclearporecomplexes.py
RENAMED
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
|
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
|
{ams_bp-0.4.41 → ams_bp-0.4.42}/src/AMS_BP/gui/widgets/utility_widgets/scinotation_widget.py
RENAMED
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
|