AMS-BP 0.4.41__py3-none-any.whl → 0.4.42__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.
AMS_BP/__init__.py CHANGED
@@ -10,4 +10,4 @@ Last updated: 2024-12-16
10
10
 
11
11
  """
12
12
 
13
- __version__ = "0.4.41"
13
+ __version__ = "0.4.42"
@@ -6,6 +6,9 @@ import numpy as np
6
6
  import tomli
7
7
  from pydantic import BaseModel
8
8
 
9
+ from ...core.optics.collection_efficiency import (
10
+ collection_efficiency_isotropic_emission,
11
+ )
9
12
  from ..cells import BaseCell, create_cell
10
13
  from ..motion import Track_generator, create_condensate_dict
11
14
  from ..motion.track_gen import (
@@ -274,11 +277,19 @@ def create_psf_from_config(config: Dict[str, Any]) -> Tuple[Callable, Dict[str,
274
277
  additional_config = {
275
278
  "type": psf_config.get("type", "gaussian"),
276
279
  "custom_path": psf_config.get("custom_path", ""),
280
+ "psf_config": psf_config,
277
281
  }
278
282
 
279
283
  return Partial_PSFengine, additional_config
280
284
 
281
285
 
286
+ def create_collection_efficiency(config: Dict[str, Any]) -> float:
287
+ na = config.get("psf").get("parameters").get("numerical_aperture")
288
+ n = config.get("psf").get("parameters").get("refractive_index")
289
+ col_eff = collection_efficiency_isotropic_emission(na=na, n=n)
290
+ return col_eff
291
+
292
+
282
293
  # Helper function to find pixel size
283
294
  def find_pixel_size(magnification: float, pixel_detector_size: float) -> float:
284
295
  return pixel_detector_size / magnification
@@ -728,6 +739,7 @@ def setup_microscope(config: Dict[str, Any]) -> dict:
728
739
  fluorophores = create_fluorophores_from_config(config)
729
740
  # psf config
730
741
  psf, psf_config = create_psf_from_config(config)
742
+ collection_efficiency = create_collection_efficiency(config)
731
743
  # lasers config
732
744
  lasers = create_lasers_from_config(config)
733
745
  # channels config
@@ -776,6 +788,7 @@ def setup_microscope(config: Dict[str, Any]) -> dict:
776
788
  channels=channels,
777
789
  psf=psf,
778
790
  config=base_config,
791
+ collection_efficiency=collection_efficiency,
779
792
  )
780
793
 
781
794
  return {
@@ -0,0 +1,24 @@
1
+ import warnings
2
+ from functools import lru_cache
3
+
4
+ import numpy as np
5
+
6
+
7
+ @lru_cache(maxsize=None)
8
+ def collection_efficiency_isotropic_emission(na: float, n: float) -> float:
9
+ ratio = na / n
10
+
11
+ if ratio > 1.0:
12
+ warnings.warn(
13
+ f"NA ({na}) exceeds refractive index n ({n}), which is unphysical. "
14
+ f"Clipping NA/n to 1.0 for collection efficiency calculation."
15
+ )
16
+ ratio = 1.0
17
+ elif ratio < 0.0:
18
+ warnings.warn(
19
+ f"NA ({na}) is negative, which is unphysical. " f"Clipping NA/n to 0.0."
20
+ )
21
+ ratio = 0.0
22
+
23
+ # Use identity: cos(arcsin(x)) = sqrt(1 - x^2)
24
+ return 0.5 * (1 - np.sqrt(1 - ratio**2))
@@ -157,7 +157,9 @@ class incident_photons:
157
157
  else:
158
158
  self.generator.append(0)
159
159
 
160
- def incident_photons_calc(self, dt: float) -> Tuple[float, List]:
160
+ def incident_photons_calc(
161
+ self, dt: float, collection_efficiency: float = 1
162
+ ) -> Tuple[float, List]:
161
163
  photons = 0
162
164
  psf_hold = []
163
165
  for i in range(len(self.transmission_photon_rate.wavelengths)):
@@ -165,7 +167,9 @@ class incident_photons:
165
167
  qe_lam = self.quantumEff.get_qe(
166
168
  self.transmission_photon_rate.wavelengths[i]
167
169
  )
168
- photons_n = self.transmission_photon_rate.values[i] * dt
170
+ photons_n = (
171
+ self.transmission_photon_rate.values[i] * dt * collection_efficiency
172
+ )
169
173
  photons += photons_n
170
174
  psf_gen = (
171
175
  self.generator[i].psf_z(
@@ -30,6 +30,7 @@ class VirtualMicroscope:
30
30
  channels: Channels,
31
31
  psf: Callable[[float | int, Optional[float | int]], PSFEngine],
32
32
  config: ConfigList,
33
+ collection_efficiency: float = 1,
33
34
  start_time: int = 0,
34
35
  ):
35
36
  # Core components
@@ -41,6 +42,7 @@ class VirtualMicroscope:
41
42
  self.psf = psf
42
43
  self._time = start_time # ms
43
44
  self.config = config
45
+ self.collection_efficiency = collection_efficiency
44
46
 
45
47
  # Cached initial configuration
46
48
  self._cached_initial_config()
@@ -271,7 +273,9 @@ class VirtualMicroscope:
271
273
  self.psf,
272
274
  florPos,
273
275
  )
274
- _, psfs = inc.incident_photons_calc(deltaTime)
276
+ _, psfs = inc.incident_photons_calc(
277
+ deltaTime, self.collection_efficiency
278
+ )
275
279
  for ipsf in psfs:
276
280
  mapSC[self.channels.names[channel_num]].add_psf_frame(
277
281
  ipsf, florPos[:2], frame_list[time_index]
AMS_BP/gui/main.py CHANGED
@@ -36,12 +36,10 @@ class MainWindow(QMainWindow):
36
36
  # Set up the main layout
37
37
  layout = QVBoxLayout()
38
38
 
39
- # Add logo as a placeholder (SVG format)
40
39
  self.logo_label = QLabel() # Label to hold the logo
41
40
  self.set_svg_logo(LOGO_PATH) # Set the SVG logo
42
41
  layout.addWidget(self.logo_label, alignment=Qt.AlignmentFlag.AlignCenter)
43
42
 
44
- # Add the maintainer's name under the image
45
43
  self.maintainer_label = QLabel(
46
44
  "Maintainer: Baljyot Parmar \n baljyotparmar@hotmail.com"
47
45
  )
@@ -96,7 +94,6 @@ class MainWindow(QMainWindow):
96
94
  def package_logs(self):
97
95
  log_dir = Path.home() / "AMS_runs"
98
96
 
99
- # Step 1: Open dialog to select folders
100
97
  folder_paths = QFileDialog.getExistingDirectory(
101
98
  self,
102
99
  "Select Folder Containing Run Logs",
@@ -107,7 +104,6 @@ class MainWindow(QMainWindow):
107
104
  if not folder_paths:
108
105
  return
109
106
 
110
- # QFileDialog.getExistingDirectory() returns a single path.
111
107
  # For now, let's treat this as a single run_* folder being selected.
112
108
 
113
109
  run_dir = Path(folder_paths)
@@ -117,7 +113,6 @@ class MainWindow(QMainWindow):
117
113
  )
118
114
  return
119
115
 
120
- # Step 2: Ask for destination .zip archive
121
116
  zip_path_str, _ = QFileDialog.getSaveFileName(
122
117
  self,
123
118
  "Save Zipped Folder As",
@@ -220,7 +215,6 @@ class MainWindow(QMainWindow):
220
215
 
221
216
  if file_path:
222
217
  try:
223
- # Load the image (expand here if you want ND2 or Zarr support)
224
218
  image = tifffile.imread(file_path)
225
219
 
226
220
  # Open Napari viewer and display the image
@@ -233,7 +227,6 @@ class MainWindow(QMainWindow):
233
227
 
234
228
  def set_svg_logo(self, svg_path):
235
229
  """Set an SVG logo to the QLabel, maintaining the aspect ratio."""
236
- # Create a QSvgRenderer to render the SVG
237
230
  renderer = QSvgRenderer(svg_path)
238
231
  if renderer.isValid():
239
232
  # Get the size of the SVG image
@@ -123,7 +123,6 @@ class CameraConfigWidget(QWidget):
123
123
  "wavelengths": dialog.wavelengths,
124
124
  "quantum_efficiency": dialog.intensities,
125
125
  }
126
- # You can now use this data wherever needed, e.g., saving or validation
127
126
 
128
127
  def validate(self) -> bool:
129
128
  try:
@@ -132,7 +131,6 @@ class CameraConfigWidget(QWidget):
132
131
  # Convert QE before passing
133
132
  qe = create_quantum_efficiency_from_config(data["quantum_efficiency"])
134
133
 
135
- # Prepare CMOS-specific parameters only (drop "type" and "quantum_efficiency")
136
134
  camera_data = {
137
135
  k: v for k, v in data.items() if k not in {"type", "quantum_efficiency"}
138
136
  }
@@ -168,9 +166,7 @@ class CameraConfigWidget(QWidget):
168
166
  "sensitivity": self.sensitivity.value(),
169
167
  "base_adu": self.base_adu.value(),
170
168
  "binning_size": self.binning_size.value(),
171
- "quantum_efficiency": convert_dict_to_2_list(
172
- self.quantum_efficiency_data
173
- ), # Use edited data here
169
+ "quantum_efficiency": convert_dict_to_2_list(self.quantum_efficiency_data),
174
170
  }
175
171
  return camera_data
176
172
 
@@ -55,7 +55,6 @@ class ChannelConfigWidget(QWidget):
55
55
  # Full simulation-level validation
56
56
  channels = create_channels({"channels": data})
57
57
 
58
- # Optional: Validate shape consistency
59
58
  if len(channels.names) != channels.num_channels:
60
59
  raise ValueError("Channel count does not match number of names.")
61
60
 
@@ -122,7 +122,6 @@ class CondensateConfigWidget(QWidget):
122
122
  condensate_controls.addWidget(condensate_count)
123
123
  layout.addLayout(condensate_controls)
124
124
 
125
- # === Density Difference field RIGHT AFTER the condensate count ===
126
125
  density_layout = QHBoxLayout()
127
126
  density_layout.addWidget(QLabel("Density Difference:"))
128
127
 
@@ -133,7 +132,6 @@ class CondensateConfigWidget(QWidget):
133
132
  density_layout.addWidget(density_spin)
134
133
  layout.addLayout(density_layout)
135
134
 
136
- # === Condensate containers BELOW this point ===
137
135
  condensate_container = QVBoxLayout()
138
136
  layout.addLayout(condensate_container)
139
137
 
@@ -307,10 +305,8 @@ class CondensateConfigWidget(QWidget):
307
305
  try:
308
306
  data = self.get_data()
309
307
 
310
- # Step 1: Validate with Pydantic
311
308
  validated = CondensateParameters(**data)
312
309
 
313
- # Step 2: Validate simulation compatibility for each condensate
314
310
  # Create a dummy cell just for validation context
315
311
  dummy_cell = create_cell(
316
312
  "SphericalCell", {"center": [0, 0, 0], "radius": 5.0}
@@ -41,13 +41,11 @@ class ToggleSwitch(QWidget):
41
41
  painter = QPainter(self)
42
42
  painter.setRenderHint(QPainter.RenderHint.Antialiasing)
43
43
 
44
- # NEW: Background indicates *next* theme
45
44
  bg_color = QColor("#dddddd") if self._checked else QColor("#333333")
46
45
  painter.setBrush(QBrush(bg_color))
47
46
  painter.setPen(Qt.PenStyle.NoPen)
48
47
  painter.drawRoundedRect(0, 0, self.width(), self.height(), 14, 14)
49
48
 
50
- # Handle (always green)
51
49
  painter.setBrush(QBrush(QColor("#008000")))
52
50
  painter.drawEllipse(int(self._circle_position), 2, 24, 24)
53
51
 
@@ -198,23 +198,19 @@ class ConfigEditor(QWidget):
198
198
  def preview_config(self):
199
199
  """Preview the full TOML config in a dialog before saving."""
200
200
  try:
201
- # Step 1: Validate tabs
202
201
  if not self.validate_all_tabs():
203
202
  QMessageBox.warning(
204
203
  self, "Validation Error", "Fix errors before preview."
205
204
  )
206
205
  return
207
206
 
208
- # Step 2: Collect config data
209
207
  config = self.collect_all_config()
210
208
 
211
- # Step 3: Convert to TOML string
212
209
  toml_doc = tomlkit.document()
213
210
  for key, value in config.items():
214
211
  toml_doc[key] = value
215
212
  toml_str = tomlkit.dumps(toml_doc)
216
213
 
217
- # Step 4: Show preview dialog
218
214
  preview_dialog = QDialog(self)
219
215
  preview_dialog.setWindowTitle("Preview TOML Configuration")
220
216
  layout = QVBoxLayout(preview_dialog)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AMS_BP
3
- Version: 0.4.41
3
+ Version: 0.4.42
4
4
  Summary: Advanced Microscopy Simulations developed for the Weber Lab by Baljyot Singh Parmar
5
5
  Project-URL: Documentation, https://joemans3.github.io/AMS_BP/
6
6
  Project-URL: Source code, https://github.com/joemans3/AMS_BP
@@ -1,14 +1,14 @@
1
- AMS_BP/__init__.py,sha256=H0K3YhBrQ5e1jJ-LrEb_2gXpTU1K78stoJSHBtYVKFc,327
1
+ AMS_BP/__init__.py,sha256=a35SZK734gHwpLAEZQ1CXjk7s_pxy_vDEy9UHuqDCCE,327
2
2
  AMS_BP/main_cli.py,sha256=Z2vRNCSY2GZq0yG5unCZI2BAdtKtVnh1DuNuB2rIo2g,5797
3
3
  AMS_BP/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  AMS_BP/core/run_sim_util.py,sha256=UQr0l9rbtTmzuuWXjkIaTQV-ETO5AqyXRwflF6U2WYs,2415
5
- AMS_BP/core/sim_microscopy.py,sha256=zkDynBmEivhRwRsWNxvIO8VL-zUNVPvkkUcdHQSa_fo,19990
5
+ AMS_BP/core/sim_microscopy.py,sha256=M8-bqxngUQ0cgzifQ2kuOM8Ej5e4sJIglRdTkwHOWRM,20181
6
6
  AMS_BP/core/cells/__init__.py,sha256=Rd2gpWWUZJxW2u_piI2ZcIqLtYkzVOr_MjU3upiUv8Q,866
7
7
  AMS_BP/core/cells/budding_yeast_cell.py,sha256=_n0jhiRvrMcPddfoR8Vi4RdOJQTo_nR4JF7ydsrCF98,9448
8
8
  AMS_BP/core/cells/cell_factory.py,sha256=a-M5xHDkYDHoMv3vbQyn4x0KQ-lshO2CEdfrStLGSOU,4422
9
9
  AMS_BP/core/configio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  AMS_BP/core/configio/configmodels.py,sha256=2KxvXy1jRWjmu5PWcDGyHAoM6EfpW2TaigCiZLrP3P0,3764
11
- AMS_BP/core/configio/convertconfig.py,sha256=HqJnrIO6CiC_uUWw32Thd25xJbGSQ1_d6JQXKmNDtBE,28321
11
+ AMS_BP/core/configio/convertconfig.py,sha256=ek54bZeqhQnWl_T09GVlZiUWF3HrgREjG5vN16qCWF0,28866
12
12
  AMS_BP/core/configio/experiments.py,sha256=dls7oALLqLr7ejyEGXm4A9TZzkYa0G3lZjpLeCtmdzI,4122
13
13
  AMS_BP/core/configio/saving.py,sha256=596QgAadV32rzsN4B2FngGFcBWCzCDnLFN-qtQsv3bM,857
14
14
  AMS_BP/core/groundtruth_generators/__init__.py,sha256=UPVmhiB81OfyqAes5LoN-n6XgQuBCYCqRPAGd2jpMfc,99
@@ -21,6 +21,7 @@ AMS_BP/core/motion/track_gen.py,sha256=V3bFDxDajObRhPWiOzjWiW_VA9aJEWFwDjxMqqlVR
21
21
  AMS_BP/core/motion/movement/__init__.py,sha256=tBNb9UVDPAAnjENRtvI35YF2BdKKBqBkgWJMZSENL8U,59
22
22
  AMS_BP/core/motion/movement/boundary_conditions.py,sha256=FB9T1eO7_P9z9k37OVtB9VC8mB5PhkVJt06UfGXU85c,2547
23
23
  AMS_BP/core/optics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ AMS_BP/core/optics/collection_efficiency.py,sha256=jG2gZwZ2szfEmLBwTwBpX_CQPKJfSpxQ0rm5VWnjgBE,677
24
25
  AMS_BP/core/optics/camera/__init__.py,sha256=eCoDUFHcoCWgbgYdLn8EH7AULM53A3XWTXNZnV8QxeY,182
25
26
  AMS_BP/core/optics/camera/detectors.py,sha256=_815Ovo7Aj375OZh5Xim8pFuZEEcSVtSdnLRYFqb3_8,10355
26
27
  AMS_BP/core/optics/camera/quantum_eff.py,sha256=ZCvJ8dJESOUbjwblsJIBcCg_b-_DNdhDlkzd7HeGMDg,2378
@@ -34,7 +35,7 @@ AMS_BP/core/optics/lasers/scanning_patterns.py,sha256=Xen96e5BlYI892HzZDXdwm80id
34
35
  AMS_BP/core/optics/psf/__init__.py,sha256=ezrKPgpTeR4gTHOvF0mhF6u2zMMTd8Bgp8PGeOf11fA,121
35
36
  AMS_BP/core/optics/psf/psf_engine.py,sha256=FbR4VHQ-VgCWrrDj8AHPPnVgwVUGs-OP19w_TjcbMcU,10215
36
37
  AMS_BP/core/photophysics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- AMS_BP/core/photophysics/photon_physics.py,sha256=Egzopn62RTmVExz_HIF5PNaOF6-HXpPcT4xr9OnH124,6625
38
+ AMS_BP/core/photophysics/photon_physics.py,sha256=clN_dPL1_u4GAEdL59QvE6PPMV70uGcuPq32HdViMY4,6737
38
39
  AMS_BP/core/photophysics/state_kinetics.py,sha256=hDb1VqoeEkbYcse-N-S7BzyE4hIt4KLMju7ZKOIJDYc,6980
39
40
  AMS_BP/core/probabilityfuncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
41
  AMS_BP/core/probabilityfuncs/markov_chain.py,sha256=LV6KGr8Lv4NIvBPJqsR0CEynssa_mPH30qLaK85GObA,4339
@@ -45,7 +46,7 @@ AMS_BP/core/sample/flurophores/__init__.py,sha256=arLVUx1-yh5T41fH9Mr6RNY8Ao3Zio
45
46
  AMS_BP/core/sample/flurophores/flurophore_schema.py,sha256=QyWnaNqsyHcci_V8Va0KnU1F7jCQz-J9n1um4vG0zMo,10887
46
47
  AMS_BP/gui/README.md,sha256=z2XreAPQeeFmKSXbhsa2kznHbk-YbLD55-VPWikNQp4,2778
47
48
  AMS_BP/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- AMS_BP/gui/main.py,sha256=Ej7DcduU8ESjoCvvIao2MPsthvKG-pLhiwaeaMVCOSY,10681
49
+ AMS_BP/gui/main.py,sha256=sHWD35NWLubhcbU78-hiUEbgf0AlnMWQHtyELZCXVt8,10284
49
50
  AMS_BP/gui/sim_worker.py,sha256=bwnCzPU0dnBbPwi2eXzM_VBg_gwIwWjyBnjGIOvhkEo,1980
50
51
  AMS_BP/gui/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
52
  AMS_BP/gui/assets/drawing.svg,sha256=8L2O509kczSQ_AUSzew4fHjMQGSikGn3dVt9Ons6kvo,26563
@@ -65,10 +66,10 @@ AMS_BP/gui/help_docs/psf_help.md,sha256=onH-suSxocfj9mD6WCE6lG7yxov1yCoGeau82oG-
65
66
  AMS_BP/gui/themes/dark_theme.qss,sha256=6MUyaaZnmZCnXTNNJuqi7NN8Om8P8P9pSfAffv4ampA,1462
66
67
  AMS_BP/gui/themes/light_theme.qss,sha256=wVEIcnFzGVZN7ohLHrus6zX5ybGnyfTwihAPSvhrDL8,1424
67
68
  AMS_BP/gui/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- AMS_BP/gui/widgets/camera_config_widget.py,sha256=Ripck-RqgTbjbDWjaFKDBSy_fr_VubaqM59irE0HtIY,7764
69
+ AMS_BP/gui/widgets/camera_config_widget.py,sha256=yDIolqOXrOuEf3oEmgKyGGHGP5saW-T_EbRVXJUcj-I,7535
69
70
  AMS_BP/gui/widgets/cell_config_widget.py,sha256=eHS7h3hBHG9Qp6SClFRDE4-TwBljdwVx7lDIXNwwdxo,8056
70
- AMS_BP/gui/widgets/channel_config_widget.py,sha256=d1NbpXZf4My-lkWbo3dCGIWIIknF22ZWZfIlK1Sznbc,11000
71
- AMS_BP/gui/widgets/condensate_config_widget.py,sha256=inJlqh92BpzhEPGGOzPQDJwH06uEGMi9510gvZUXz1Q,12564
71
+ AMS_BP/gui/widgets/channel_config_widget.py,sha256=Ot6WoS2-oe8lZWLDqDt0O7mSzsGAmybnY-Hw6JqKZt8,10949
72
+ AMS_BP/gui/widgets/condensate_config_widget.py,sha256=4-K8gDVODmbS2De1ozYC90d6R6uK8L1Z84_uGyYyzJI,12310
72
73
  AMS_BP/gui/widgets/experiment_config_widget.py,sha256=uyxLXwHQRpaOC_GvqYkKUpqK2x4oa8VC1eyDM9rTF84,11971
73
74
  AMS_BP/gui/widgets/flurophore_config_widget.py,sha256=g1dag-S_BsbhwdJm9g42K02ZibZCqQPtAR56iV7Cuko,19889
74
75
  AMS_BP/gui/widgets/general_config_widget.py,sha256=YbnE11TnWZBgb-xqKWM00p8RdSp-9eTbwTZ9mikPvZc,1321
@@ -80,9 +81,9 @@ AMS_BP/gui/widgets/psf_config_widget.py,sha256=75ggeolYI_Sbn5LD_hUGY3S4Z9uRkJGtz
80
81
  AMS_BP/gui/widgets/utility_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
82
  AMS_BP/gui/widgets/utility_widgets/scinotation_widget.py,sha256=sLrQqueRJ0wEy4aF1I8UJO0Bolnm7yTsAyfNqrHiAKI,553
82
83
  AMS_BP/gui/widgets/utility_widgets/spectrum_widget.py,sha256=QQjYV-aErjyI1HdOZMIPaddHpi0sag6r4V8nBSdgEn8,3659
83
- AMS_BP/gui/widgets/utility_widgets/toggleswitch_widget.py,sha256=vldANnsLcoqwmM8PNQc6PZAMtPN2h6A-JCCx9etBLKU,1945
84
+ AMS_BP/gui/widgets/utility_widgets/toggleswitch_widget.py,sha256=ZBT8_wgjvRnftxFj_28MY8FI-TDQ3AXdE8DAxyzhtZM,1864
84
85
  AMS_BP/gui/windows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- AMS_BP/gui/windows/configuration_window.py,sha256=7YtftXdschTTtiFHdkzYaHkS5KhOLpGQqPri_7uYcCE,12225
86
+ AMS_BP/gui/windows/configuration_window.py,sha256=9Cj8pEtyeVCuOcYaFllhZl6NZIama-R1Qu3rlKSOKdA,12060
86
87
  AMS_BP/gui/windows/help_window.py,sha256=Jn844Vez7ULC1VGKb4iGgRvuw3wPTd0pcyRv7VWbeV4,790
87
88
  AMS_BP/gui/windows/logging_window.py,sha256=a7HbmfYP3YavLuyT317YRE1xWXJtB4i8EoK9QAstOv8,2938
88
89
  AMS_BP/gui/windows/template_window_selection.py,sha256=AkrqY3KnTHO109axaDAyot4BoPcjkf9VRzUZWW7q9Pk,4182
@@ -103,8 +104,8 @@ AMS_BP/utils/decorators.py,sha256=4qFdvzPJne0dhkhD1znPxRln1Rfr5NX8rdcCDcbATRU,62
103
104
  AMS_BP/utils/errors.py,sha256=7BOd-L4_YeKmWn3Q4EOdTnNF3Bj_exDa3eg5X0yCZrc,759
104
105
  AMS_BP/utils/maskMaker.py,sha256=2ca3n2nc8rFtUh1LurKXOJJsUmhrOpWbRnVX7fjRVvs,335
105
106
  AMS_BP/utils/util_functions.py,sha256=9Qlr4kjY04fObktR8TrzB0IgoG1yXtcmxPRX9AN34mM,9671
106
- ams_bp-0.4.41.dist-info/METADATA,sha256=ZHg98aTBe7F0Nl1VgTwApNA2bE_t2CLPsJz-bp7hikg,9909
107
- ams_bp-0.4.41.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
108
- ams_bp-0.4.41.dist-info/entry_points.txt,sha256=06NS85P4dz6vosMOKXHfx8l7gK9WXBZxuwjl55XfT2c,65
109
- ams_bp-0.4.41.dist-info/licenses/LICENSE,sha256=k_-JV1DQKvO0FR8WjvOisqdTl0kp6VJ7RFM3YZhao0c,1071
110
- ams_bp-0.4.41.dist-info/RECORD,,
107
+ ams_bp-0.4.42.dist-info/METADATA,sha256=XJS5nw93yvPTH50D8w1K2-XDJU5i5gjzCmsEHEs1TV0,9909
108
+ ams_bp-0.4.42.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
109
+ ams_bp-0.4.42.dist-info/entry_points.txt,sha256=06NS85P4dz6vosMOKXHfx8l7gK9WXBZxuwjl55XfT2c,65
110
+ ams_bp-0.4.42.dist-info/licenses/LICENSE,sha256=k_-JV1DQKvO0FR8WjvOisqdTl0kp6VJ7RFM3YZhao0c,1071
111
+ ams_bp-0.4.42.dist-info/RECORD,,