AMS-BP 0.0.11__tar.gz → 0.0.22__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 (97) hide show
  1. {ams_bp-0.0.11 → ams_bp-0.0.22}/PKG-INFO +19 -42
  2. {ams_bp-0.0.11 → ams_bp-0.0.22}/README.md +17 -40
  3. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/configio/configmodels.md +12 -11
  4. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/configio/convertconfig.md +3 -3
  5. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/psf/psf_engine.md +42 -3
  6. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/sim_config.md +8 -7
  7. ams_bp-0.0.22/docs/assets/icons/Cells-actin-like-a-tree-Jamie-Whitelaw-1.png +0 -0
  8. ams_bp-0.0.22/docs/assets/icons/drawing.pdf +0 -0
  9. ams_bp-0.0.22/docs/assets/icons/drawing.png +0 -0
  10. ams_bp-0.0.22/docs/assets/icons/drawing.svg +107 -0
  11. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/index.md +4 -1
  12. {ams_bp-0.0.11 → ams_bp-0.0.22}/mkdocs.yml +1 -0
  13. {ams_bp-0.0.11 → ams_bp-0.0.22}/pyproject.toml +1 -1
  14. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/__init__.py +1 -1
  15. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/configio/configmodels.py +14 -11
  16. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/configio/convertconfig.py +32 -23
  17. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/metadata/metadata.py +2 -2
  18. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/psf/psf_engine.py +79 -35
  19. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/run_cell_simulation.py +3 -3
  20. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sim_config.toml +41 -11
  21. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sim_microscopy.py +1 -1
  22. {ams_bp-0.0.11 → ams_bp-0.0.22}/.github/workflows/lint.yml +0 -0
  23. {ams_bp-0.0.11 → ams_bp-0.0.22}/.github/workflows/pages.yml +0 -0
  24. {ams_bp-0.0.11 → ams_bp-0.0.22}/.github/workflows/publish_pypi.yml +0 -0
  25. {ams_bp-0.0.11 → ams_bp-0.0.22}/.gitignore +0 -0
  26. {ams_bp-0.0.11 → ams_bp-0.0.22}/LICENSE +0 -0
  27. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/cells/base_cell.md +0 -0
  28. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/cells/rectangular_cell.md +0 -0
  29. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/cells/rod_cell.md +0 -0
  30. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/cells/spherical_cell.md +0 -0
  31. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/configio/experiments.md +0 -0
  32. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/configio/saving.md +0 -0
  33. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/metadata/metadata.md +0 -0
  34. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/motion/condensate_movement.md +0 -0
  35. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/motion/movement/boundary_conditions.md +0 -0
  36. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/motion/movement/fbm_BP.md +0 -0
  37. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/motion/track_gen.md +0 -0
  38. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/camera/detectors.md +0 -0
  39. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/camera/quantum_eff.md +0 -0
  40. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/filters/channels/channelschema.md +0 -0
  41. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/filters/filters.md +0 -0
  42. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/optics/lasers/laser_profiles.md +0 -0
  43. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/photophysics/photon_physics.md +0 -0
  44. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/photophysics/state_kinetics.md +0 -0
  45. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/probabilityfuncs/markov_chain.md +0 -0
  46. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/probabilityfuncs/probability_functions.md +0 -0
  47. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/run_cell_simulation.md +0 -0
  48. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/sample/flurophore/flurophore_schema.md +0 -0
  49. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/sample/sim_sampleplane.md +0 -0
  50. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/sim_microscopy.md +0 -0
  51. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/utils/constants.md +0 -0
  52. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/utils/errors.md +0 -0
  53. {ams_bp-0.0.11 → ams_bp-0.0.22}/docs/API_Documentation/utils/util_functions.md +0 -0
  54. {ams_bp-0.0.11 → ams_bp-0.0.22}/pytest.ini +0 -0
  55. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/cells/__init__.py +0 -0
  56. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/cells/base_cell.py +0 -0
  57. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/cells/rectangular_cell.py +0 -0
  58. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/cells/rod_cell.py +0 -0
  59. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/cells/spherical_cell.py +0 -0
  60. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/configio/__init__.py +0 -0
  61. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/configio/experiments.py +0 -0
  62. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/configio/saving.py +0 -0
  63. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/metadata/__init__.py +0 -0
  64. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/__init__.py +0 -0
  65. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/condensate_movement.py +0 -0
  66. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/movement/__init__.py +0 -0
  67. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/movement/boundary_conditions.py +0 -0
  68. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/movement/fbm_BP.py +0 -0
  69. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/motion/track_gen.py +0 -0
  70. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/__init__.py +0 -0
  71. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/camera/__init__.py +0 -0
  72. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/camera/detectors.py +0 -0
  73. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/camera/quantum_eff.py +0 -0
  74. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/filters/__init__.py +0 -0
  75. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/filters/channels/__init__.py +0 -0
  76. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/filters/channels/channelschema.py +0 -0
  77. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/filters/filters.py +0 -0
  78. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/lasers/__init__.py +0 -0
  79. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/lasers/laser_profiles.py +0 -0
  80. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/optics/psf/__init__.py +0 -0
  81. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/photophysics/__init__.py +0 -0
  82. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/photophysics/photon_physics.py +0 -0
  83. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/photophysics/state_kinetics.py +0 -0
  84. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/probabilityfuncs/__init__.py +0 -0
  85. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/probabilityfuncs/markov_chain.py +0 -0
  86. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/probabilityfuncs/probability_functions.py +0 -0
  87. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sample/__init__.py +0 -0
  88. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sample/flurophores/__init__.py +0 -0
  89. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sample/flurophores/flurophore_schema.py +0 -0
  90. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/sample/sim_sampleplane.py +0 -0
  91. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/__init__.py +0 -0
  92. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/constants.py +0 -0
  93. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/decorators.py +0 -0
  94. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/errors.py +0 -0
  95. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/maskMaker.py +0 -0
  96. {ams_bp-0.0.11 → ams_bp-0.0.22}/src/AMS_BP/utils/util_functions.py +0 -0
  97. {ams_bp-0.0.11 → ams_bp-0.0.22}/uv.lock +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AMS_BP
3
- Version: 0.0.11
4
- Summary: Advanced Molecule Simulations and Microscopy Simulations developed for the Weber Lab by Baljyot Singh Parmar
3
+ Version: 0.0.22
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
7
7
  Author-email: Baljyot Singh Parmar <baljyotparmar@hotmail.com>
@@ -19,11 +19,17 @@ Requires-Dist: tomli>=2.0.2
19
19
  Requires-Dist: typer>=0.12.5
20
20
  Description-Content-Type: text/markdown
21
21
 
22
- # AMS-BP User Guide
23
- ## Advanced Molecule Simulation Tool
22
+ # AMS-BP
23
+ <p>
24
+ <img src="./docs/assets/icons/drawing.svg" alt="AMS-BP Logo" width="500" height="200">
25
+ </p>
26
+
27
+ ## Advanced Fluorescence Microscopy Simulation Tool
24
28
 
25
29
  AMS-BP is a powerful simulation tool for advanced fluorescence microscopy experiments. This guide covers both command-line usage and library integration.
26
30
 
31
+ > **_NOTE:_** Please note that this application DOES NOT currently model the process of stimulated emission, and as such is not suitable for simulating stimulated emission microscopy ([STED](https://en.wikipedia.org/wiki/STED_microscopy))-type experiments. Work in this area is ongoing.
32
+
27
33
  ## Table of Contents
28
34
  - [Installation](#installation)
29
35
  - [Command Line Interface](#command-line-interface)
@@ -49,6 +55,14 @@ uv tool install AMS_BP
49
55
  - `run_AMS_BP config` : This is a helper tool to generate a template config file for the simulation. (see `run_AMS_BP config --help` for more details)
50
56
  - Note: using `run_AMS_BP --help` will show you all the available commands.
51
57
  4. You can now use these tools (they are isolated in their own env created by uv, which is cool).
58
+
59
+ ### ***PyPi***
60
+
61
+ 1. Run:
62
+ ```bash
63
+ pip install AMS_BP
64
+ ```
65
+
52
66
  ## Command Line Interface
53
67
 
54
68
  AMS-BP provides a command-line interface with two main commands:
@@ -70,7 +84,7 @@ run_AMS_BP runsim CONFIG_FILE
70
84
 
71
85
  The configuration file (sim_config.toml) is divided into several key sections:
72
86
 
73
- #### For a detailed description of the configuration file, refer to the [Configuration File Reference](./API_Documentation/sim_config.md).
87
+ #### For a detailed description of the configuration file, refer to the [Configuration File Reference](https://joemans3.github.io/AMS_BP/API_Documentation/sim_config/).
74
88
  ### Basic Units
75
89
  ```toml
76
90
  version = "0.1"
@@ -158,40 +172,3 @@ frames, metadata = function_exp(microscope=microscope, config=config_exp)
158
172
  from AMS_BP.configio.saving import save_config_frames
159
173
  save_config_frames(metadata, frames, setup_config["base_config"].OutputParameters)
160
174
  ```
161
-
162
- ### Key Components When Using as Library
163
-
164
- 1. **ConfigLoader**: Handles configuration file parsing and validation
165
- 2. **Microscope**: Represents the virtual microscope setup
166
- 3. **Experiment Functions**: Control experiment execution
167
- 4. **Save Functions**: Handle data output
168
-
169
- ### Custom Experiment Types
170
-
171
- When using AMS-BP as a library, you can create custom experiment types by:
172
-
173
- 1. Extending the base experiment class
174
- 2. Implementing custom scanning patterns
175
- 3. Defining new molecule behaviors
176
- 4. Creating specialized analysis routines
177
-
178
- ## Tips and Best Practices
179
-
180
- 1. **Configuration Management**
181
- - Keep separate config files for different experiment types
182
- - Version control your configurations
183
- - Document any custom modifications
184
-
185
- 2. **Resource Usage**
186
- - Monitor memory usage for large simulations
187
- - Use appropriate sampling rates
188
-
189
- 3. **Data Output**
190
- - Set appropriate output paths
191
- - Use meaningful naming conventions
192
- - Consider data format requirements for analysis
193
-
194
- ## Troubleshooting
195
-
196
- Common issues and their solutions:
197
- TODO
@@ -1,8 +1,14 @@
1
- # AMS-BP User Guide
2
- ## Advanced Molecule Simulation Tool
1
+ # AMS-BP
2
+ <p>
3
+ <img src="./docs/assets/icons/drawing.svg" alt="AMS-BP Logo" width="500" height="200">
4
+ </p>
5
+
6
+ ## Advanced Fluorescence Microscopy Simulation Tool
3
7
 
4
8
  AMS-BP is a powerful simulation tool for advanced fluorescence microscopy experiments. This guide covers both command-line usage and library integration.
5
9
 
10
+ > **_NOTE:_** Please note that this application DOES NOT currently model the process of stimulated emission, and as such is not suitable for simulating stimulated emission microscopy ([STED](https://en.wikipedia.org/wiki/STED_microscopy))-type experiments. Work in this area is ongoing.
11
+
6
12
  ## Table of Contents
7
13
  - [Installation](#installation)
8
14
  - [Command Line Interface](#command-line-interface)
@@ -28,6 +34,14 @@ uv tool install AMS_BP
28
34
  - `run_AMS_BP config` : This is a helper tool to generate a template config file for the simulation. (see `run_AMS_BP config --help` for more details)
29
35
  - Note: using `run_AMS_BP --help` will show you all the available commands.
30
36
  4. You can now use these tools (they are isolated in their own env created by uv, which is cool).
37
+
38
+ ### ***PyPi***
39
+
40
+ 1. Run:
41
+ ```bash
42
+ pip install AMS_BP
43
+ ```
44
+
31
45
  ## Command Line Interface
32
46
 
33
47
  AMS-BP provides a command-line interface with two main commands:
@@ -49,7 +63,7 @@ run_AMS_BP runsim CONFIG_FILE
49
63
 
50
64
  The configuration file (sim_config.toml) is divided into several key sections:
51
65
 
52
- #### For a detailed description of the configuration file, refer to the [Configuration File Reference](./API_Documentation/sim_config.md).
66
+ #### For a detailed description of the configuration file, refer to the [Configuration File Reference](https://joemans3.github.io/AMS_BP/API_Documentation/sim_config/).
53
67
  ### Basic Units
54
68
  ```toml
55
69
  version = "0.1"
@@ -137,40 +151,3 @@ frames, metadata = function_exp(microscope=microscope, config=config_exp)
137
151
  from AMS_BP.configio.saving import save_config_frames
138
152
  save_config_frames(metadata, frames, setup_config["base_config"].OutputParameters)
139
153
  ```
140
-
141
- ### Key Components When Using as Library
142
-
143
- 1. **ConfigLoader**: Handles configuration file parsing and validation
144
- 2. **Microscope**: Represents the virtual microscope setup
145
- 3. **Experiment Functions**: Control experiment execution
146
- 4. **Save Functions**: Handle data output
147
-
148
- ### Custom Experiment Types
149
-
150
- When using AMS-BP as a library, you can create custom experiment types by:
151
-
152
- 1. Extending the base experiment class
153
- 2. Implementing custom scanning patterns
154
- 3. Defining new molecule behaviors
155
- 4. Creating specialized analysis routines
156
-
157
- ## Tips and Best Practices
158
-
159
- 1. **Configuration Management**
160
- - Keep separate config files for different experiment types
161
- - Version control your configurations
162
- - Document any custom modifications
163
-
164
- 2. **Resource Usage**
165
- - Monitor memory usage for large simulations
166
- - Use appropriate sampling rates
167
-
168
- 3. **Data Output**
169
- - Set appropriate output paths
170
- - Use meaningful naming conventions
171
- - Consider data format requirements for analysis
172
-
173
- ## Troubleshooting
174
-
175
- Common issues and their solutions:
176
- TODO
@@ -107,23 +107,24 @@ class CondensateParameters(BaseModel)
107
107
  ```
108
108
 
109
109
  #### Fields
110
- - `initial_centers: List[List[float]]`
110
+ First dimension represents the types of molecules. (similar to the MoleculeParameters)
111
+ - `initial_centers: List[List[List[float]]]`
111
112
  - Description: Initial centers in micrometers
112
113
  - 2D array automatically converted to numpy array
113
114
 
114
- - `initial_scale: List[float]`
115
+ - `initial_scale: List[List[float]]`
115
116
  - Description: Initial scale in micrometers
116
117
  - Automatically converted to numpy array
117
118
 
118
- - `diffusion_coefficient: List[float]`
119
+ - `diffusion_coefficient: List[List[float]]`
119
120
  - Description: Diffusion coefficients in μm²/s
120
121
  - Automatically converted to numpy array
121
122
 
122
- - `hurst_exponent: List[float]`
123
+ - `hurst_exponent: List[List[float]]`
123
124
  - Description: Hurst exponents for motion
124
125
  - Automatically converted to numpy array
125
126
 
126
- - `density_dif: int`
127
+ - `density_dif: List[int]`
127
128
  - Description: Density difference parameter
128
129
 
129
130
  ### OutputParameters
@@ -190,11 +191,11 @@ config = ConfigList(
190
191
  oversample_motion_time=10
191
192
  ),
192
193
  CondensateParameters=CondensateParameters(
193
- initial_centers=[[5.0, 5.0]],
194
- initial_scale=[2.0],
195
- diffusion_coefficient=[0.1],
196
- hurst_exponent=[0.7],
197
- density_dif=2
194
+ initial_centers=[[[5.0, 5.0]]],
195
+ initial_scale=[[2.0]],
196
+ diffusion_coefficient=[[0.1]],
197
+ hurst_exponent=[[0.7]],
198
+ density_dif=[2]
198
199
  ),
199
200
  OutputParameters=OutputParameters(
200
201
  output_path="./output",
@@ -208,4 +209,4 @@ config = ConfigList(
208
209
  ## Dependencies
209
210
  - `pydantic`: For data validation and settings management
210
211
  - `numpy`: For array operations
211
- - `typing`: For type hints
212
+ - `typing`: For type hints
@@ -108,13 +108,13 @@ Creates sample plane from parameters.
108
108
 
109
109
  ### `make_condensatedict`
110
110
  ```python
111
- def make_condensatedict(condensate_params, cell) -> dict
111
+ def make_condensatedict(condensate_params, cell) -> List[dict]
112
112
  ```
113
- Creates condensate dictionary from parameters.
113
+ Creates condensate dictionaries from parameters.
114
114
  - **Parameters:**
115
115
  - `condensate_params`: Condensate parameters
116
116
  - `cell`: Cell instance
117
- - **Returns:** Condensate dictionary
117
+ - **Returns:** Condensate dictionaries
118
118
 
119
119
  ### `get_tracks`
120
120
  ```python
@@ -12,14 +12,35 @@ This module provides functionality for generating Point Spread Functions (PSFs)
12
12
  - [_calculate_sigma_z](#_calculate_sigma_z)
13
13
  - [_generate_grid](#_generate_grid)
14
14
  - [calculate_psf_size](#calculate_psf_size)
15
+ - [_generate_pinhole_mask](#_generate_pinhole_mask)
15
16
 
16
17
  ---
17
18
 
18
19
  ## Classes
19
20
 
20
21
  ### `PSFParameters`
21
-
22
-
22
+ #### Description
23
+ This is a frozen dataclass (enum-ish?) with the following parameters / cached properties
24
+ ```python
25
+ emission_wavelength: float
26
+ numerical_aperture: float
27
+ pixel_size: float
28
+ z_step: float
29
+ refractive_index: float = 1.0
30
+ pinhole_diameter: Optional[float] = None # um
31
+
32
+ @cached_property
33
+ def wavelength_um(self) -> float:
34
+ """Emission wavelength in micrometers."""
35
+ return self.emission_wavelength / 1000.0
36
+ @cached_property
37
+ def pinhole_radius(self) -> Optional[float]:
38
+ """Pinhole radius in micrometers."""
39
+ return (
40
+ self.pinhole_diameter / 2.0 if self.pinhole_diameter is not None else None
41
+ )
42
+ ```
43
+ ### `PSFEngine`
23
44
  #### Methods
24
45
 
25
46
  - **`__init__`**: Initializes the PSF engine with the given parameters.
@@ -29,6 +50,7 @@ This module provides functionality for generating Point Spread Functions (PSFs)
29
50
  - **`_3d_normalization_A`**: Computes the normalization factor for a 3D Gaussian PSF.
30
51
  - **`_2d_normalization_A`**: Computes the normalization factor for a 2D Gaussian PSF.
31
52
  - **`normalize_psf`**: Normalizes the PSF using different schemes.
53
+ - **`_generate_pinhole_mask`**: Generate a binary mask representing the pinhole's spatial filtering.
32
54
 
33
55
  ---
34
56
 
@@ -105,4 +127,21 @@ Calculates the appropriate PSF size based on physical parameters.
105
127
 
106
128
  #### Returns
107
129
 
108
- - **`Tuple[int, ...]`**: Tuple of dimensions (z, y, x) or (y, x) for the PSF calculation.
130
+ - **`Tuple[int, ...]`**: Tuple of dimensions (z, y, x) or (y, x) for the PSF calculation.
131
+
132
+ ---
133
+
134
+ ### `_generate_pinhole_mask`
135
+
136
+
137
+ #### Description
138
+
139
+ Generate a binary mask representing the pinhole's spatial filtering.
140
+
141
+ The pinhole blocks emission light based on position in the image plane,
142
+ affecting what portion of the diffracted light reaches the detector.
143
+
144
+ #### Parameters
145
+ #### Returns
146
+
147
+ - **`NDArray[np.float64]`**: Same dimensions as the psf generated but with binary values (0,1) indicating the transmittance of the psf due to the pinhole. Note, if the pinhole size is smaller than 1*airy disk diameter, then diffraction due to the pinhole is NOT non negligiable and diffraction effects will be introduced. A ValueError is thrown if this is the case.
@@ -122,24 +122,24 @@ This document provides a detailed explanation of the TOML configuration file use
122
122
  ## 5. **Condensate Parameters**
123
123
 
124
124
  ### `initial_centers`
125
- - **Type**: Array of Arrays of Numbers
126
- - **Shape**: `[[x, y, z], ...]`
127
- - **Description**: The initial centers of condensates in micrometers (`um`).
125
+ - **Type**: Array of Array of Arrays of Numbers
126
+ - **Shape**: `[[[x, y, z], ...], ...]`
127
+ - **Description**: The initial centers of condensates in micrometers (`um`). The first dimension is the types of different molecules. Similarr to the `num_molecules` array in the molecule parameters.
128
128
 
129
129
  ### `initial_scale`
130
- - **Type**: Array of Numbers
130
+ - **Type**: Array of Array of Numbers
131
131
  - **Description**: The initial scale of condensates in micrometers (`um`).
132
132
 
133
133
  ### `diffusion_coefficient`
134
- - **Type**: Array of Numbers
134
+ - **Type**: Array of Array of Numbers
135
135
  - **Description**: The diffusion coefficients of condensates in `um^2/s`.
136
136
 
137
137
  ### `hurst_exponent`
138
- - **Type**: Array of Numbers
138
+ - **Type**: Array of Array of Numbers
139
139
  - **Description**: The Hurst exponents of condensates.
140
140
 
141
141
  ### `density_dif`
142
- - **Type**: Number
142
+ - **Type**: Array of Number
143
143
  - **Description**: The density difference between the condensate and the background.
144
144
 
145
145
  ---
@@ -224,6 +224,7 @@ Each fluorophore has transitions defined with the following parameters:
224
224
  - **Properties**:
225
225
  - **`numerical_aperture`**: The numerical aperture (typical range: 0.1 - 1.5).
226
226
  - **`refractive_index`**: The refractive index (default is air: 1.0).
227
+ - **`pinhole_diameter`**: None or float. In units of um. None = no pinhole before the detector.
227
228
 
228
229
  ---
229
230
 
@@ -0,0 +1,107 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="125.97778mm"
6
+ height="53.644855mm"
7
+ viewBox="0 0 125.97776 53.644857"
8
+ version="1.1"
9
+ id="svg5"
10
+ xml:space="preserve"
11
+ inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
12
+ sodipodi:docname="drawing.svg"
13
+ inkscape:export-filename="drawing.png"
14
+ inkscape:export-xdpi="96"
15
+ inkscape:export-ydpi="96"
16
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
17
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
18
+ xmlns:xlink="http://www.w3.org/1999/xlink"
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
21
+ id="namedview7"
22
+ pagecolor="#ffffff"
23
+ bordercolor="#000000"
24
+ borderopacity="0.25"
25
+ inkscape:showpageshadow="2"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pagecheckerboard="0"
28
+ inkscape:deskcolor="#d1d1d1"
29
+ inkscape:document-units="mm"
30
+ showgrid="false"
31
+ inkscape:zoom="0.73986917"
32
+ inkscape:cx="160.83925"
33
+ inkscape:cy="87.85337"
34
+ inkscape:window-width="1309"
35
+ inkscape:window-height="456"
36
+ inkscape:window-x="0"
37
+ inkscape:window-y="37"
38
+ inkscape:window-maximized="0"
39
+ inkscape:current-layer="g3684" /><defs
40
+ id="defs2" /><g
41
+ inkscape:label="Layer 1"
42
+ inkscape:groupmode="layer"
43
+ id="layer1"
44
+ transform="translate(-27.086214,-76.914915)"><g
45
+ id="g3684"
46
+ transform="matrix(1.9992994,0,0,2.2020296,-94.700072,-124.92117)"><rect
47
+ style="fill:#000000;fill-opacity:1;stroke:#020003;stroke-width:0.995148;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
48
+ id="rect3488"
49
+ width="38.09753"
50
+ height="22.701815"
51
+ x="62.086613"
52
+ y="92.491959"
53
+ ry="2.0249722" /><g
54
+ id="g3010"
55
+ transform="matrix(0.06365389,0,0,0.06365391,96.148715,87.667151)"><path
56
+ d="M 402.773,182.731 272.587,122.942 v -4.525 A 35.36,35.36 0 0 0 237.267,83.1 h -8.619 a 35.36,35.36 0 0 0 -35.32,35.321 v 64.531 a 21.723,21.723 0 0 0 14.946,20.643 v 34.972 a 24.684,24.684 0 0 0 49.367,0 V 203.6 a 21.732,21.732 0 0 0 14.946,-20.648 v -4.1 l 37.313,46.205 c 0.027,0.032 0.053,0.065 0.08,0.1 a 33.611,33.611 0 0 1 7.9,21.628 v 28.13 h -160.9 a 18.456,18.456 0 1 0 0,36.911 h 95.32 a 31.079,31.079 0 0 0 -6.655,19.241 v 30.479 a 31.079,31.079 0 0 0 6.655,19.241 H 104.373 a 21.924,21.924 0 0 0 -21.9,21.9 v 4.323 a 21.924,21.924 0 0 0 21.9,21.9 h 319.153 a 6,6 0 0 0 6,-6 V 224.23 a 45.635,45.635 0 0 0 -26.753,-41.499 z m -169.815,68.514 a 12.7,12.7 0 0 1 -12.684,-12.682 v -33.847 l 0.006,-0.011 h 25.361 v 33.858 a 12.7,12.7 0 0 1 -12.683,12.682 z m 27.629,-68.3 a 9.74,9.74 0 0 1 -9.229,9.739 c -0.178,0.008 -0.349,0.018 -0.527,0.018 h -35.748 c -0.178,0 -0.348,-0.01 -0.5,-0.017 a 9.744,9.744 0 0 1 -9.25,-9.74 V 118.417 A 23.347,23.347 0 0 1 228.648,95.1 h 8.619 a 23.348,23.348 0 0 1 23.32,23.321 z M 150.523,293.366 a 6.463,6.463 0 0 1 6.456,-6.455 h 160.9 v 12.911 h -160.9 a 6.463,6.463 0 0 1 -6.456,-6.456 z m 107.118,68.176 v -30.479 a 19.261,19.261 0 0 1 19.24,-19.241 h 41 v 68.961 h -41 a 19.262,19.262 0 0 1 -19.24,-19.241 z M 417.526,416.9 H 104.373 a 9.91,9.91 0 0 1 -9.9,-9.9 v -4.323 a 9.911,9.911 0 0 1 9.9,-9.9 h 313.153 z m 0,-36.121 h -87.643 v -134 a 45.622,45.622 0 0 0 -10.68,-29.31 l -45.948,-56.9 a 6.023,6.023 0 0 0 -0.668,-0.694 v -23.727 l 125.21,57.5 a 33.626,33.626 0 0 1 19.729,30.58 z"
57
+ id="path2881"
58
+ style="fill:#d0ce2d;fill-opacity:1;stroke:#648ddb;stroke-opacity:1" /><path
59
+ d="m 374,288 a 38,38 0 1 0 38,38 38.043,38.043 0 0 0 -38,-38 z m 0,64 a 26,26 0 1 1 26,-26 26.029,26.029 0 0 1 -26,26 z"
60
+ id="path2883"
61
+ style="fill:#000000;fill-opacity:1" /></g><g
62
+ id="g3652"
63
+ transform="matrix(0.9,0,0,0.9,8.29375,10.389063)"><g
64
+ id="g1060"><image
65
+ width="15.875"
66
+ height="22.489582"
67
+ preserveAspectRatio="none"
68
+ xlink:href="data:image/PNG;base64, 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 rkJggg== "
69
+ id="image140"
70
+ x="86.665413"
71
+ y="92.645836" /><image
72
+ width="15.875"
73
+ height="22.489582"
74
+ preserveAspectRatio="none"
75
+ xlink:href="data:image/PNG;base64, iVBORw0KGgoAAAANSUhEUgAAADwAAABVCAMAAAAi2XfSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA B6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACN1BMVEUAAAABAAAEAAAIAAAOAAAW AAAdAAAkAAArAAAwAAAuAAApAAAhAAAgAAAnAAAfAAAXAAAQAAANAAAUAAAYAAAaAAAmAAAqAAAiAA AVAAAlAAAvAAARAAACAAADAAAHAAASAAAjAAAbAAAPAAATAAAxAAAyAAAeAAAKAAAFAAAoAAAsAAA5 AABDAABEAAA/AAA2AAAZAAALAAA3AAAcAAAzAABNAABQAABOAAAJAAAtAABMAABSAABGAAA6AAAGAA A0AAA+AABFAAA9AAAMAAA1AAA4AAA7AAA8AABAAABCAABPAABBAABKAABIAABmAAB9AAB+AABwAABb AABYAABpAAB1AAB3AAB2AAByAABqAABgAABLAABJAABlAACQAACuAACzAACiAACGAAB0AACFAACaAA CpAACvAACrAACkAACVAAB/AABnAABRAAC0AADbAADhAADSAACyAACXAACTAAC5AADKAADRAADTAADJ AAC4AACZAABTAACKAADAAADtAAD9AADvAADQAACxAACjAACtAAC/AADOAADgAADdAADGAACgAABaAA C6AADnAAD/AAD5AAC3AAClAACoAADPAADZAADcAADUAAC7AADpAADlAADMAACbAACsAAC9AADLAACc AABVAAB4AAChAACLAAB6AACNAACmAACWAABtAABZAACBAAB7AABWAABUAABHAABfAABoAABeAACDAA CCAABXAABvAACeAACfAACRAABhAAD///81K/IXAAAAAWJLR0S8StLi7wAAAAd0SU1FB+gMGAw1NgIP D3UAAA3LSURBVFjDbViHe+PmeT+R2MAHgMQekrBIUAAlESRwd8T5KOpEUuN0lziOR5u7NE3itnFq1x 1uWjvubrrS60r3dtKZjqtbd/5z/UFXH6k8pR6Jkp7n5fd+7/gN3LiB11arTdEMy/GCKBGJlVlF7XSp jqYbjGRalmwbjmO4gse5LGF0ze+2W9s3/u+1tb2z2w0MxeUslpBQxlsUxJ1EZ4jtcr2+IKeO7zCuG4 auyZJI9Qd7Wx/Hbm3vtbu+ykiuGRLJ5fp8ltKJhn+wcj7cPzgcmVES0IURpaFsskoUDFrr4NbuOE70 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 OjUzOjU0KzAwOjAw6yLFsgAAAABJRU5ErkJggg== "
76
+ id="image152"
77
+ x="73.332962"
78
+ y="92.645836" /><image
79
+ width="15.875"
80
+ height="22.489584"
81
+ preserveAspectRatio="none"
82
+ xlink:href="data:image/PNG;base64, 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 "
83
+ id="image164"
84
+ x="60"
85
+ y="92.645836" /></g><text
86
+ xml:space="preserve"
87
+ style="font-weight:bold;font-size:17.0365px;line-height:11.6365px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:center;letter-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#fefcff;stroke-width:0.252758;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
88
+ x="89.708412"
89
+ y="99.697433"
90
+ id="text501"
91
+ transform="scale(0.90157797,1.1091664)"><tspan
92
+ sodipodi:role="line"
93
+ id="tspan499"
94
+ style="fill:none;fill-opacity:1;stroke:#fefcff;stroke-width:0.252758;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
95
+ x="89.708412"
96
+ y="99.697433">AMS</tspan></text></g><text
97
+ xml:space="preserve"
98
+ style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.18572px;line-height:1.60776px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;fill:#000000;stroke:none;stroke-width:0.290723;stroke-linecap:round;paint-order:fill markers stroke"
99
+ x="114.30348"
100
+ y="114.54252"
101
+ id="text738"
102
+ transform="scale(1.0494764,0.95285612)"><tspan
103
+ sodipodi:role="line"
104
+ id="tspan736"
105
+ style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.18572px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none;stroke-width:0.290723"
106
+ x="114.30348"
107
+ y="114.54252">BP</tspan></text></g></g></svg>
@@ -1,5 +1,8 @@
1
1
  # AMS-BP User Guide
2
- ## Advanced Molecule Simulation Tool
2
+ <p>
3
+ <img src="assets/icons/drawing.svg" alt="AMS-BP Logo" width="500" height="200">
4
+ </p>
5
+ ## Advanced Fluorescence Microscopy Simulation Tool
3
6
 
4
7
  AMS-BP is a powerful simulation tool for advanced fluorescence microscopy experiments. This guide covers both command-line usage and library integration.
5
8
 
@@ -3,6 +3,7 @@ site_url: https://joemans3.github.io/AMS_BP/
3
3
  repo_url: https://github.com/joemans3/AMS_BP
4
4
  theme:
5
5
  name: material
6
+ logo: assets/icons/drawing.png
6
7
  icon:
7
8
  repo: fontawesome/brands/git-alt
8
9
  features:
@@ -3,7 +3,7 @@ name = "AMS_BP"
3
3
 
4
4
  dynamic = ["version"]
5
5
 
6
- description = "Advanced Molecule Simulations and Microscopy Simulations developed for the Weber Lab by Baljyot Singh Parmar"
6
+ description = "Advanced Microscopy Simulations developed for the Weber Lab by Baljyot Singh Parmar"
7
7
 
8
8
  readme = "README.md"
9
9
 
@@ -10,4 +10,4 @@ Last updated: 2024-12-16
10
10
 
11
11
  """
12
12
 
13
- __version__ = "0.0.11"
13
+ __version__ = "0.0.22"
@@ -60,19 +60,22 @@ class GlobalParameters(BaseModel):
60
60
 
61
61
 
62
62
  class CondensateParameters(BaseModel):
63
- initial_centers: List[List[float]] = Field(description="Initial centers in um")
64
- initial_scale: List[float] = Field(description="Initial scale in um")
65
- diffusion_coefficient: List[float] = Field(
66
- description="Diffusion coefficients in um^2/s"
63
+ initial_centers: List[List[List[float]]] = Field(
64
+ description="Initial centers in um"
67
65
  )
68
- hurst_exponent: List[float]
69
- density_dif: int
70
-
71
- @field_validator(
72
- "initial_centers", "initial_scale", "diffusion_coefficient", "hurst_exponent"
66
+ initial_scale: List[List[float]] = Field(description="Initial scale in um")
67
+ diffusion_coefficient: List[List[float]] = Field(
68
+ description="Diffusion coefficients in um^2/s"
73
69
  )
74
- def convert_to_array(cls, v):
75
- return np.array(v)
70
+ hurst_exponent: List[List[float]]
71
+ density_dif: List[int]
72
+
73
+ # @field_validator(
74
+ # "initial_centers", "initial_scale", "diffusion_coefficient", "hurst_exponent"
75
+ # )
76
+ # def convert_to_array(cls, v):
77
+ # return np.array(v)
78
+ #
76
79
 
77
80
 
78
81
  class OutputParameters(BaseModel):