AMS-BP 0.3.1__py3-none-any.whl → 0.4.0__py3-none-any.whl

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 (60) hide show
  1. AMS_BP/__init__.py +1 -1
  2. AMS_BP/configio/configmodels.py +26 -12
  3. AMS_BP/configio/convertconfig.py +508 -632
  4. AMS_BP/gui/README.md +77 -0
  5. AMS_BP/gui/__init__.py +0 -0
  6. AMS_BP/gui/assets/__init__.py +0 -0
  7. AMS_BP/gui/assets/drawing.svg +107 -0
  8. AMS_BP/gui/configuration_window.py +333 -0
  9. AMS_BP/gui/help_docs/__init__.py +0 -0
  10. AMS_BP/gui/help_docs/cell_help.md +45 -0
  11. AMS_BP/gui/help_docs/channels_help.md +78 -0
  12. AMS_BP/gui/help_docs/condensate_help.md +59 -0
  13. AMS_BP/gui/help_docs/detector_help.md +57 -0
  14. AMS_BP/gui/help_docs/experiment_help.md +92 -0
  15. AMS_BP/gui/help_docs/fluorophore_help.md +128 -0
  16. AMS_BP/gui/help_docs/general_help.md +43 -0
  17. AMS_BP/gui/help_docs/global_help.md +47 -0
  18. AMS_BP/gui/help_docs/laser_help.md +76 -0
  19. AMS_BP/gui/help_docs/molecule_help.md +78 -0
  20. AMS_BP/gui/help_docs/output_help.md +5 -0
  21. AMS_BP/gui/help_docs/psf_help.md +51 -0
  22. AMS_BP/gui/help_window.py +26 -0
  23. AMS_BP/gui/logging_window.py +93 -0
  24. AMS_BP/gui/main.py +255 -0
  25. AMS_BP/gui/sim_worker.py +58 -0
  26. AMS_BP/gui/template_window_selection.py +100 -0
  27. AMS_BP/gui/widgets/__init__.py +0 -0
  28. AMS_BP/gui/widgets/camera_config_widget.py +213 -0
  29. AMS_BP/gui/widgets/cell_config_widget.py +225 -0
  30. AMS_BP/gui/widgets/channel_config_widget.py +307 -0
  31. AMS_BP/gui/widgets/condensate_config_widget.py +341 -0
  32. AMS_BP/gui/widgets/experiment_config_widget.py +259 -0
  33. AMS_BP/gui/widgets/flurophore_config_widget.py +513 -0
  34. AMS_BP/gui/widgets/general_config_widget.py +47 -0
  35. AMS_BP/gui/widgets/global_config_widget.py +142 -0
  36. AMS_BP/gui/widgets/laser_config_widget.py +255 -0
  37. AMS_BP/gui/widgets/molecule_config_widget.py +714 -0
  38. AMS_BP/gui/widgets/output_config_widget.py +61 -0
  39. AMS_BP/gui/widgets/psf_config_widget.py +128 -0
  40. AMS_BP/gui/widgets/utility_widgets/__init__.py +0 -0
  41. AMS_BP/gui/widgets/utility_widgets/scinotation_widget.py +21 -0
  42. AMS_BP/gui/widgets/utility_widgets/spectrum_widget.py +115 -0
  43. AMS_BP/logging/__init__.py +0 -0
  44. AMS_BP/logging/logutil.py +83 -0
  45. AMS_BP/logging/setup_run_directory.py +35 -0
  46. AMS_BP/{run_cell_simulation.py → main_cli.py} +27 -72
  47. AMS_BP/optics/filters/filters.py +2 -0
  48. AMS_BP/resources/template_configs/metadata_configs.json +20 -0
  49. AMS_BP/resources/template_configs/sim_config.toml +408 -0
  50. AMS_BP/resources/template_configs/twocolor_widefield_timeseries_live.toml +399 -0
  51. AMS_BP/resources/template_configs/twocolor_widefield_zstack_fixed.toml +406 -0
  52. AMS_BP/resources/template_configs/twocolor_widefield_zstack_live.toml +408 -0
  53. AMS_BP/run_sim_util.py +76 -0
  54. {ams_bp-0.3.1.dist-info → ams_bp-0.4.0.dist-info}/METADATA +46 -27
  55. ams_bp-0.4.0.dist-info/RECORD +103 -0
  56. ams_bp-0.4.0.dist-info/entry_points.txt +2 -0
  57. ams_bp-0.3.1.dist-info/RECORD +0 -55
  58. ams_bp-0.3.1.dist-info/entry_points.txt +0 -2
  59. {ams_bp-0.3.1.dist-info → ams_bp-0.4.0.dist-info}/WHEEL +0 -0
  60. {ams_bp-0.3.1.dist-info → ams_bp-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,78 @@
1
+ # Channels Configuration Help
2
+
3
+ This section allows you to define the optical channels used in the simulation, including filters for excitation and emission as well as split efficiencies.
4
+
5
+ ## Fields
6
+
7
+ ### `num_of_channels`
8
+ - **Type**: Integer
9
+ - **Description**: Number of optical channels. Each channel is assigned its own tab.
10
+
11
+ ### `channel_names`
12
+ - **Type**: Array of Strings
13
+ - **Description**: Names of each channel (e.g., `"Channel 1"`, `"GFP"`, `"Cy5"`). Must be unique.
14
+
15
+ ### `split_efficiency`
16
+ - **Type**: Array of Numbers
17
+ - **Range**: `0.0` – `1.0`
18
+ - **Description**: Efficiency of the beam splitter for each channel. Determines what fraction of signal is passed to the channel.
19
+
20
+ ---
21
+
22
+ ## Filter Set Configuration
23
+
24
+ Each channel defines a **filter set** with excitation and emission filters.
25
+
26
+ ### `filter_set_name`
27
+ - **Type**: String
28
+ - **Description**: Descriptive name for the filter set.
29
+
30
+ ### `filter_set_description`
31
+ - **Type**: String
32
+ - **Description**: Optional details about the purpose of the filter set.
33
+
34
+ ---
35
+
36
+ ## Excitation Filter
37
+
38
+ ### `name`
39
+ - **Type**: String
40
+ - **Description**: Name of the excitation filter.
41
+
42
+ ### `type`
43
+ - **Type**: String
44
+ - **Options**: `"bandpass"`, `"allow_all"`
45
+ - **Description**:
46
+ - `"bandpass"` filters light around a central wavelength.
47
+ - `"allow_all"` passes all wavelengths without filtering.
48
+
49
+ ### `center_wavelength` *(only if type is `"bandpass"`)*
50
+ - **Type**: Integer
51
+ - **Unit**: Nanometers (nm)
52
+ - **Description**: Central wavelength of the bandpass filter.
53
+
54
+ ### `bandwidth` *(only if type is `"bandpass"`)*
55
+ - **Type**: Integer
56
+ - **Unit**: Nanometers (nm)
57
+ - **Description**: Width of the bandpass range.
58
+
59
+ ### `transmission_peak` *(only if type is `"bandpass"`)*
60
+ - **Type**: Float
61
+ - **Range**: `0.0` – `1.0`
62
+ - **Description**: Maximum transmission efficiency.
63
+
64
+ ### `points`
65
+ - **Type**: Integer
66
+ - **Description**: Number of discrete sampling points in the filter curve.
67
+
68
+ ---
69
+
70
+ ## Emission Filter
71
+
72
+ Identical in structure to the Excitation filter.
73
+
74
+ ### Notes:
75
+ - `"allow_all"` disables wavelength-specific fields.
76
+ - Bandpass filters should be configured carefully to avoid overlap between channels.
77
+ - Points determine how finely the spectrum is resolved during simulation.
78
+
@@ -0,0 +1,59 @@
1
+ # Condensate Configuration Help
2
+
3
+ This section defines parameters for **condensate droplets** within the simulation. Each tab corresponds to a molecule type, and each type can have multiple condensates.
4
+
5
+ ---
6
+
7
+ ## Molecule Count
8
+
9
+ ### `Number of Molecule Types`
10
+ - **Type**: Integer
11
+ - **Description**: The number of different molecule types in the simulation. Each will be assigned its own tab.
12
+
13
+ ---
14
+
15
+ ## Per-Molecule Condensate Parameters
16
+
17
+ ### `Number of Condensates`
18
+ - **Type**: Integer
19
+ - **Description**: The number of condensates of this molecule type.
20
+
21
+ Each condensate defines the following:
22
+
23
+ ### `Initial Center`
24
+ - **Type**: List of 3 Floats `[x, y, z]`
25
+ - **Unit**: Micrometers (µm)
26
+ - **Description**: The spatial center of the condensate in 3D.
27
+
28
+ ### `Initial Scale`
29
+ - **Type**: Float
30
+ - **Unit**: Micrometers (µm)
31
+ - **Description**: The initial physical size (radius or diameter) of the condensate.
32
+
33
+ ### `Diffusion Coefficient`
34
+ - **Type**: Float
35
+ - **Unit**: µm²/s
36
+ - **Description**: The diffusion coefficient for the condensate particles.
37
+
38
+ ### `Hurst Exponent`
39
+ - **Type**: Float
40
+ - **Range**: `0.0` – `1.0`
41
+ - **Description**: Controls the memory of the random walk. `0.5` = standard Brownian motion. Values above or below indicate persistent or antipersistent motion.
42
+
43
+ ---
44
+
45
+ ## Density Difference
46
+
47
+ ### `Density Difference`
48
+ - **Type**: Float
49
+ - **Description**: Represents the relative density difference between the condensate and its surrounding medium.
50
+ - **Location**: Set **per molecule type** (i.e., one value per tab).
51
+
52
+ ---
53
+
54
+ ### Notes
55
+
56
+ - All condensate values are grouped per molecule type.
57
+ - You may define different numbers of condensates for different molecule types.
58
+ - This module supports nested array generation for initialization within the simulation core.
59
+
@@ -0,0 +1,57 @@
1
+ # Camera Configuration Help
2
+
3
+ This section configures the camera model used in the simulation. Each field controls aspects of detection, noise, resolution, and efficiency.
4
+
5
+ ## Fields
6
+
7
+ ### `type`
8
+ - **Type**: `String`
9
+ - **Options**: `"CMOS"`
10
+ - **Description**: Specifies the camera sensor model. Only CMOS is currently supported in the UI. Programmatically you also have access to EMCCD.
11
+
12
+ ### `pixel_count`
13
+ - **Type**: `Array of Integers`
14
+ - **Shape**: `[width, height]`
15
+ - **Description**: Defines the resolution of the sensor in pixels. Affects image dimensions.
16
+
17
+ ### `pixel_detector_size`
18
+ - **Type**: `Number`
19
+ - **Units**: `micrometers (μm)`
20
+ - **Description**: Physical size of a single pixel. Affects spatial resolution and magnification scaling.
21
+
22
+ ### `magnification`
23
+ - **Type**: `Integer`
24
+ - **Description**: Optical magnification factor applied to the image.
25
+
26
+ ### `dark_current`
27
+ - **Type**: `Number`
28
+ - **Units**: `electrons/pixel/second`
29
+ - **Description**: Rate at which thermal electrons accumulate in each pixel without illumination.
30
+
31
+ ### `readout_noise`
32
+ - **Type**: `Number`
33
+ - **Units**: `electrons RMS`
34
+ - **Description**: Baseline electronic noise added during readout.
35
+
36
+ ### `bit_depth`
37
+ - **Type**: `Integer`
38
+ - **Description**: Bit depth of the analog-to-digital converter. Controls the dynamic range of intensity.
39
+
40
+ ### `sensitivity`
41
+ - **Type**: `Number`
42
+ - **Units**: `electrons/ADU`
43
+ - **Description**: Defines how many electrons are required to register one analog-digital unit (ADU) in the image.
44
+
45
+ ### `base_adu`
46
+ - **Type**: `Integer`
47
+ - **Description**: The base offset in ADUs added to all pixel values.
48
+
49
+ ### `binning_size`
50
+ - **Type**: `Integer`
51
+ - **Description**: Spatial binning size used to combine adjacent pixels. Common values are 1 (no binning), 2 (2x2 binning), etc.
52
+
53
+ ### `quantum_efficiency`
54
+ - **Type**: `Array of [wavelength, efficiency] pairs`
55
+ - **Units**: `nm`, `[0-1]`
56
+ - **Description**: Describes the wavelength-dependent efficiency of the camera. Higher values mean more photons are converted to signal.
57
+
@@ -0,0 +1,92 @@
1
+ # Experiment Configuration Help
2
+
3
+ This section defines the structure of the **experiment** to be simulated. It includes information about the type of acquisition, the z-plane positions, and the laser activation strategy.
4
+
5
+ ---
6
+
7
+ ## General Fields
8
+
9
+ ### `name`
10
+ - **Type**: String
11
+ - **Description**: The name of the experiment. This will be used to label output files and for documentation purposes.
12
+
13
+ ### `description`
14
+ - **Type**: String
15
+ - **Description**: A short description of the experiment setup or purpose.
16
+
17
+ ---
18
+
19
+ ## Experiment Type
20
+
21
+ ### `experiment_type`
22
+ - **Type**: String
23
+ - **Enum**: `["time-series", "z-stack"]`
24
+ - **Description**: Determines the acquisition mode:
25
+ - `time-series`: Single z-plane acquired over time.
26
+ - `z-stack`: Multiple z-planes acquired in a single timepoint sweep.
27
+
28
+ ---
29
+
30
+ ## Z Positions
31
+
32
+ ### `z_position`
33
+ - **Type**:
34
+ - Float for `time-series`
35
+ - List of Floats for `z-stack`
36
+ - **Unit**: Micrometers (µm)
37
+ - **Description**:
38
+ - In `time-series`, a single z-position is specified.
39
+ - In `z-stack`, multiple z-positions are given, each corresponding to a slice in the stack.
40
+
41
+ ---
42
+
43
+ ## Laser Activation
44
+
45
+ ### `laser_names_active`
46
+ - **Type**: List of Strings
47
+ - **Description**: Names of the lasers to be activated during this experiment. These must match the names defined in the laser configuration section.
48
+
49
+ ### `laser_powers_active`
50
+ - **Type**: List of Floats
51
+ - **Unit**: Watts
52
+ - **Description**: The power levels for each laser, in the same order as `laser_names_active`.
53
+
54
+ ### `laser_positions_active`
55
+ - **Type**: List of Lists `[x, y, z]`
56
+ - **Unit**: Micrometers (µm)
57
+ - **Description**: The position of each active laser beam in space. Each laser has a position defined as `[x, y, z]`.
58
+
59
+ ---
60
+
61
+ ## XY Offset
62
+
63
+ ### `xyoffset`
64
+ - **Type**: List `[x, y]`
65
+ - **Unit**: Micrometers (µm)
66
+ - **Description**: The lateral offset applied to the sample plane during acquisition.
67
+
68
+ ---
69
+
70
+ ## Time Parameters (only for `z-stack`)
71
+
72
+ ### `exposure_time`
73
+ - **Type**: Integer
74
+ - **Unit**: Milliseconds (ms)
75
+ - **Description**: Exposure duration per z-slice.
76
+
77
+ ### `interval_time`
78
+ - **Type**: Integer
79
+ - **Unit**: Milliseconds (ms)
80
+ - **Description**: Time between capturing consecutive z-slices.
81
+
82
+ > ⚠️ These time fields are only used for `z-stack` experiments.
83
+ > In `time-series` mode, time control should be handled globally under **Global Parameters**.
84
+
85
+ ---
86
+
87
+ ### Notes
88
+
89
+ - The number of `laser_names_active`, `laser_powers_active`, and `laser_positions_active` must match.
90
+ - Laser names must be defined in the Laser Configuration section.
91
+ - For `z-stack`, the total time per stack is `exposure_time × len(z_position) + interval_time × (len(z_position) - 1)`.
92
+
@@ -0,0 +1,128 @@
1
+ # Fluorophore Configuration Help
2
+
3
+ This section defines the **fluorophores** used in the simulation, including their photophysical states and transition dynamics.
4
+
5
+ Each fluorophore can contain one or more states, and transitions between them. States can be fluorescent, dark (non-emissive), or bleached (permanently off).
6
+
7
+ ---
8
+
9
+ ## Top-Level Fields
10
+
11
+ ### `num_of_fluorophores`
12
+ - **Type**: Integer
13
+ - **Description**: Total number of distinct fluorophore types.
14
+
15
+ ### `fluorophore_names`
16
+ - **Type**: List of Strings
17
+ - **Description**: Names identifying each fluorophore. These must be unique.
18
+
19
+ ---
20
+
21
+ ## Per-Fluorophore Fields
22
+
23
+ Each fluorophore has its own section named after its `name`.
24
+
25
+ ### `name`
26
+ - **Type**: String
27
+ - **Description**: Redundant copy of the fluorophore name.
28
+
29
+ ### `initial_state`
30
+ - **Type**: String
31
+ - **Description**: The state in which each fluorophore begins the simulation. Must match one of the defined state names.
32
+
33
+ ---
34
+
35
+ ## States Section
36
+
37
+ Each fluorophore contains a `states` section, defining its possible photophysical states.
38
+
39
+ ### `states`
40
+ - **Type**: Dictionary
41
+ - **Key**: State name (e.g., `"on"`, `"off"`, `"bleached"`)
42
+ - **Value**: Dictionary with the following fields:
43
+
44
+ #### `name`
45
+ - **Type**: String
46
+ - **Description**: Name of the state.
47
+
48
+ #### `state_type`
49
+ - **Type**: Enum
50
+ - **Options**: `"fluorescent"`, `"dark"`, `"bleached"`
51
+ - **Description**: Type of the photophysical state.
52
+
53
+ #### If `state_type == "fluorescent"`, the following fields are required:
54
+
55
+ ##### `quantum_yield`
56
+ - **Type**: Float
57
+ - **Range**: [0, 1]
58
+ - **Description**: Quantum yield of emission.
59
+
60
+ ##### `extinction_coefficient`
61
+ - **Type**: Float
62
+ - **Unit**: M⁻¹·cm⁻¹
63
+ - **Description**: Molar extinction coefficient for light absorption.
64
+
65
+ ##### `fluorescent_lifetime`
66
+ - **Type**: Float
67
+ - **Unit**: Seconds
68
+ - **Description**: Mean lifetime of the fluorophore before emitting a photon.
69
+
70
+ ##### `excitation_spectrum`
71
+ - **Type**: Dictionary
72
+ - **Fields**:
73
+ - `wavelengths`: List of Floats (nm)
74
+ - `intensities`: List of Floats (normalized to [0, 1])
75
+ - **Description**: Defines the excitation efficiency across the spectrum.
76
+
77
+ ##### `emission_spectrum`
78
+ - **Type**: Dictionary
79
+ - **Fields**:
80
+ - `wavelengths`: List of Floats (nm)
81
+ - `intensities`: List of Floats (normalized to [0, 1])
82
+ - **Description**: Defines the emission intensity across the spectrum.
83
+
84
+ ---
85
+
86
+ ## Transitions Section
87
+
88
+ Each fluorophore can also define transitions between states.
89
+
90
+ ### `transitions`
91
+ - **Type**: Dictionary
92
+ - **Key**: Transition label (e.g., `"on_to_off"`)
93
+ - **Value**: Dictionary with:
94
+
95
+ #### `from_state`, `to_state`
96
+ - **Type**: Strings
97
+ - **Description**: Names of the source and target states.
98
+
99
+ #### `photon_dependent`
100
+ - **Type**: Boolean
101
+ - **Description**: Whether this transition depends on light absorption.
102
+
103
+ #### If `photon_dependent == False`:
104
+
105
+ ##### `base_rate`
106
+ - **Type**: Float
107
+ - **Unit**: s⁻¹
108
+ - **Description**: Constant rate of transition (Poisson process).
109
+
110
+ #### If `photon_dependent == True`:
111
+
112
+ ##### `spectrum`
113
+ - **Type**: Dictionary
114
+ - **Fields**:
115
+ - `wavelengths`: List of Floats (nm)
116
+ - `intensities`: List of Floats (normalized)
117
+ - `quantum_yield`: Float [0, 1]
118
+ - `extinction_coefficient`: Float (M⁻¹·cm⁻¹)
119
+ - **Description**: Defines the absorption characteristics that trigger the transition.
120
+
121
+ ---
122
+
123
+ ## Notes
124
+
125
+ - State and transition names must be unique within a fluorophore.
126
+ - Spectral data should cover the same wavelength range for excitation and emission (typically 300–800 nm).
127
+ - Transitions allow for modeling of photoswitching, blinking, and photobleaching.
128
+
@@ -0,0 +1,43 @@
1
+ # General Configuration Help
2
+
3
+ This section defines the global settings that apply to **all units and measurements** throughout the simulation.
4
+
5
+ These values are typically fixed and should not be changed unless the simulation framework explicitly supports it.
6
+
7
+ ---
8
+
9
+ ## Fields
10
+
11
+ ### `version`
12
+ - **Type**: String
13
+ - **Format**: `X.Y` (e.g., `0.1`, `1.0`)
14
+ - **Description**: Version of the configuration schema being used. Ensures compatibility between your configuration file and the simulation engine.
15
+
16
+ ---
17
+
18
+ ### `length_unit`
19
+ - **Type**: String
20
+ - **Allowed Values**: `"um"` (micrometers)
21
+ - **Description**: The base unit of length for the simulation. All spatial dimensions (e.g., cell size, laser beam width, positions) are expressed in micrometers.
22
+
23
+ ---
24
+
25
+ ### `time_unit`
26
+ - **Type**: String
27
+ - **Allowed Values**: `"ms"` (milliseconds)
28
+ - **Description**: The unit of time for all time-related parameters like exposure, interval, and simulation durations.
29
+
30
+ ---
31
+
32
+ ### `diffusion_unit`
33
+ - **Type**: String
34
+ - **Allowed Values**: `"um^2/s"`
35
+ - **Description**: The unit for diffusion coefficients. All diffusion values are given in square micrometers per second.
36
+
37
+ ---
38
+
39
+ ## Notes
40
+
41
+ - These units are **not editable** in most configurations and are standardized to simplify parameter consistency.
42
+ - All widgets and backend systems interpret numeric values based on these settings.
43
+
@@ -0,0 +1,47 @@
1
+ # Global Parameters Help
2
+
3
+ This section defines the overarching timing and physical layout parameters of the simulation environment. These values affect **all molecules and the simulation timeline**.
4
+
5
+ ---
6
+
7
+ ## Fields
8
+
9
+ ### `sample_plane_dim`
10
+ - **Type**: Array of Numbers `[width, height]`
11
+ - **Units**: Micrometers (`μm`)
12
+ - **Description**: Specifies the width and height of the simulation's imaging plane. This defines the observable region for molecule motion and fluorescence.
13
+
14
+ ---
15
+
16
+ ### `cycle_count`
17
+ - **Type**: Integer
18
+ - **Description**: The number of complete exposure–interval cycles to simulate. For example, a cycle count of 5 with 100ms exposure and 50ms interval simulates a total of 750ms.
19
+
20
+ ---
21
+
22
+ ### `exposure_time`
23
+ - **Type**: Integer
24
+ - **Units**: Milliseconds (`ms`)
25
+ - **Description**: Duration for which the camera exposes per frame. Affects motion blur and signal strength.
26
+
27
+ ---
28
+
29
+ ### `interval_time`
30
+ - **Type**: Integer
31
+ - **Units**: Milliseconds (`ms`)
32
+ - **Description**: Time between exposures. Combined with exposure time, it defines the total frame interval.
33
+
34
+ ---
35
+
36
+ ### `oversample_motion_time`
37
+ - **Type**: Integer
38
+ - **Units**: Milliseconds (`ms`)
39
+ - **Description**: The time resolution used for simulating motion in a sub-frame manner. Useful for accurate motion blur or faster dynamics within a single exposure.
40
+
41
+ ---
42
+
43
+ ## Notes
44
+
45
+ - Exposure and interval times together define the temporal resolution of the simulation.
46
+ - Oversample motion time enables fine-grained molecule dynamics between frames.
47
+
@@ -0,0 +1,76 @@
1
+ # Laser Configuration Help
2
+
3
+ This section allows you to define the properties of each laser used in the simulation. Each laser must have a unique name and type, and may include physical and optical characteristics that influence excitation and activation.
4
+
5
+ ---
6
+
7
+ ## General Fields
8
+
9
+ ### `active`
10
+ - **Type**: Array of Strings
11
+ - **Description**: The list of lasers that are active during the experiment. These names must match the defined laser entries.
12
+
13
+ ---
14
+
15
+ ## Laser-Specific Parameters
16
+
17
+ Each laser has a dedicated section and includes the following fields:
18
+
19
+ ### `name`
20
+ - **Type**: String
21
+ - **Description**: Unique identifier for the laser. This name is used to associate laser settings with experiment configurations.
22
+
23
+ ---
24
+
25
+ ### `type`
26
+ - **Type**: Enum [`widefield`, `gaussian`, `hilo`]
27
+ - **Description**:
28
+ - `widefield`: Uniform illumination across the entire plane.
29
+ - `gaussian`: Focused beam with Gaussian profile.
30
+ - `hilo`: Highly inclined and laminated optical sheet—oblique angle illumination for reduced background.
31
+
32
+ ---
33
+
34
+ ### `preset`
35
+ - **Type**: String
36
+ - **Description**: An optional label to describe this laser's use case (e.g., `"default 488nm"`). Does not affect simulation directly.
37
+
38
+ ---
39
+
40
+ ### `parameters`
41
+
42
+ #### `power`
43
+ - **Type**: Float
44
+ - **Units**: Watts (W)
45
+ - **Description**: The power of the laser beam. Impacts excitation intensity and photophysics.
46
+
47
+ #### `wavelength`
48
+ - **Type**: Integer
49
+ - **Units**: Nanometers (nm)
50
+ - **Description**: The wavelength of emitted light from the laser. Should match fluorophore excitation peaks.
51
+
52
+ #### `beam_width`
53
+ - **Type**: Float
54
+ - **Units**: Micrometers (`μm`)
55
+ - **Description**: The width of the laser beam in the focal plane. Relevant for spatial precision.
56
+
57
+ #### `numerical_aperture`
58
+ - **Type**: Float
59
+ - **Description**: The NA of the illumination optics. Impacts the cone angle and axial resolution.
60
+
61
+ #### `refractive_index`
62
+ - **Type**: Float
63
+ - **Description**: The refractive index of the medium the laser is passing through (usually water or oil immersion).
64
+
65
+ #### `inclination_angle`
66
+ - **Type**: Float (only for `hilo`)
67
+ - **Units**: Degrees
68
+ - **Description**: The angle of incidence for HiLo illumination.
69
+
70
+ ---
71
+
72
+ ## Notes
73
+
74
+ - **Confocal Mode**: If confocal mode is enabled via PSF settings, all lasers are automatically forced to use Gaussian beams.
75
+ - The `inclination_angle` is only enabled when `type` is set to `"hilo"`.
76
+
@@ -0,0 +1,78 @@
1
+ # Molecule Configuration Help
2
+
3
+ This section allows you to define the behavior and motion characteristics of each molecular species in the simulation. Each molecule type can follow different track models and include multiple diffusive or subdiffusive states.
4
+
5
+ ---
6
+
7
+ ## `num_molecules`
8
+ - **Type**: Array of Integers
9
+ - **Description**: The number of molecules for each defined type. The number of entries in this array defines the number of molecule types in the simulation.
10
+
11
+ ---
12
+
13
+ ## `track_type`
14
+ - **Type**: Array of Strings
15
+ - **Enum**: `["constant", "fbm"]`
16
+ - **Description**:
17
+ - `constant`: Molecules exhibit fixed diffusion.
18
+ - `fbm` (Fractional Brownian Motion): Molecules follow anomalous diffusion governed by a Hurst exponent.
19
+
20
+ ---
21
+
22
+ ## `diffusion_coefficient`
23
+ - **Type**: Array of Arrays of Floats
24
+ - **Units**: `μm²/s`
25
+ - **Description**: Specifies the diffusion coefficients for each molecule type. Each type can have one or more diffusion states.
26
+
27
+ ---
28
+
29
+ ## `diffusion_track_amount`
30
+ - **Type**: Array of Arrays of Floats
31
+ - **Description**: Initial distribution (probabilities) of molecules across each diffusion state. Must sum to 1.0 per molecule type.
32
+
33
+ ---
34
+
35
+ ## `hurst_exponent`
36
+ - **Type**: Array of Arrays of Floats
37
+ - **Range**: [0, 1]
38
+ - **Description**: Only used for `fbm` track types. Defines the Hurst exponents controlling subdiffusive behavior.
39
+
40
+ ---
41
+
42
+ ## `hurst_track_amount`
43
+ - **Type**: Array of Arrays of Floats
44
+ - **Description**: Initial distribution of molecules across each Hurst exponent state. Must sum to 1.0. Ignored for `constant` track types.
45
+
46
+ ---
47
+
48
+ ## `allow_transition_probability`
49
+ - **Type**: Array of Booleans
50
+ - **Description**: Whether molecules of each type can switch between diffusion or hurst states during the simulation.
51
+
52
+ ---
53
+
54
+ ## `transition_matrix_time_step`
55
+ - **Type**: Array of Integers
56
+ - **Units**: `ms`
57
+ - **Description**: The timestep interval at which transitions between states are evaluated. Only relevant when `allow_transition_probability` is `true`.
58
+
59
+ ---
60
+
61
+ ## `diffusion_transition_matrix`
62
+ - **Type**: Array of 2D Arrays (Per Molecule Type)
63
+ - **Description**: Transition probability matrices for diffusion coefficients. Each row must sum to 1. Only used if transitions are allowed.
64
+
65
+ ---
66
+
67
+ ## `hurst_transition_matrix`
68
+ - **Type**: Array of 2D Arrays (Per Molecule Type)
69
+ - **Description**: Transition probability matrices for hurst states. Only used for `fbm` track types and when transitions are allowed.
70
+
71
+ ---
72
+
73
+ ## Notes
74
+
75
+ - If `track_type` is `constant`, the hurst-related fields will be ignored and hidden in the UI.
76
+ - If a molecule type has only one state, the associated transition matrix is a 1×1 matrix with value 1.0.
77
+ - State probability fields (`diffusion_track_amount`, `hurst_track_amount`) should match the number of corresponding states.
78
+
@@ -0,0 +1,5 @@
1
+ ## Saving Instructions
2
+
3
+ - **Output Path**: Directory to store results. Can be absolute or relative.
4
+ - **Output Name**: Filename prefix for the saved output.
5
+ - **Subsegment Type / Number**: Reserved for future implementation.