gammasimtools 0.23.0__py3-none-any.whl → 0.24.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 (59) hide show
  1. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/METADATA +1 -1
  2. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/RECORD +59 -58
  3. simtools/_version.py +2 -2
  4. simtools/application_control.py +4 -4
  5. simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
  6. simtools/applications/db_add_file_to_db.py +2 -2
  7. simtools/applications/db_add_simulation_model_from_repository_to_db.py +1 -1
  8. simtools/applications/db_add_value_from_json_to_db.py +2 -2
  9. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +1 -1
  10. simtools/applications/db_generate_compound_indexes.py +1 -1
  11. simtools/applications/db_get_array_layouts_from_db.py +2 -2
  12. simtools/applications/db_get_file_from_db.py +1 -1
  13. simtools/applications/db_get_parameter_from_db.py +1 -1
  14. simtools/applications/db_inspect_databases.py +4 -2
  15. simtools/applications/db_upload_model_repository.py +1 -1
  16. simtools/applications/derive_ctao_array_layouts.py +1 -1
  17. simtools/applications/generate_array_config.py +1 -1
  18. simtools/applications/maintain_simulation_model_add_production.py +11 -21
  19. simtools/applications/production_generate_grid.py +1 -1
  20. simtools/applications/submit_array_layouts.py +2 -2
  21. simtools/applications/validate_camera_fov.py +1 -1
  22. simtools/applications/validate_cumulative_psf.py +2 -2
  23. simtools/applications/validate_optics.py +1 -1
  24. simtools/configuration/commandline_parser.py +7 -9
  25. simtools/configuration/configurator.py +1 -1
  26. simtools/corsika/corsika_config.py +2 -4
  27. simtools/data_model/model_data_writer.py +1 -1
  28. simtools/data_model/schema.py +36 -34
  29. simtools/db/db_handler.py +61 -294
  30. simtools/db/db_model_upload.py +1 -1
  31. simtools/db/mongo_db.py +535 -0
  32. simtools/dependencies.py +33 -8
  33. simtools/layout/array_layout.py +7 -7
  34. simtools/layout/array_layout_utils.py +3 -3
  35. simtools/model/array_model.py +36 -67
  36. simtools/model/calibration_model.py +12 -9
  37. simtools/model/model_parameter.py +196 -159
  38. simtools/model/model_repository.py +159 -35
  39. simtools/model/model_utils.py +3 -3
  40. simtools/model/site_model.py +59 -27
  41. simtools/model/telescope_model.py +21 -13
  42. simtools/ray_tracing/mirror_panel_psf.py +4 -4
  43. simtools/ray_tracing/psf_parameter_optimisation.py +1 -1
  44. simtools/reporting/docs_auto_report_generator.py +1 -1
  45. simtools/reporting/docs_read_parameters.py +3 -2
  46. simtools/schemas/simulation_models_info.schema.yml +2 -1
  47. simtools/simtel/simtel_config_writer.py +97 -20
  48. simtools/simulator.py +2 -1
  49. simtools/testing/assertions.py +50 -6
  50. simtools/testing/validate_output.py +4 -8
  51. simtools/utils/value_conversion.py +10 -5
  52. simtools/version.py +24 -0
  53. simtools/visualization/plot_pixels.py +1 -1
  54. simtools/visualization/plot_psf.py +1 -1
  55. simtools/visualization/plot_tables.py +1 -1
  56. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/WHEEL +0 -0
  57. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/entry_points.txt +0 -0
  58. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/licenses/LICENSE +0 -0
  59. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,6 @@ import astropy.units as u
7
7
  from astropy.table import QTable
8
8
 
9
9
  from simtools.data_model import data_reader, schema
10
- from simtools.db import db_handler
11
10
  from simtools.io import io_handler
12
11
  from simtools.model.calibration_model import CalibrationModel
13
12
  from simtools.model.site_model import SiteModel
@@ -22,8 +21,8 @@ class ArrayModel:
22
21
 
23
22
  Parameters
24
23
  ----------
25
- mongo_db_config: dict
26
- MongoDB configuration.
24
+ db_config: dict
25
+ Database configuration.
27
26
  model_version: str
28
27
  Model version.
29
28
  label: str, optional
@@ -35,30 +34,33 @@ class ArrayModel:
35
34
  array_elements: Union[str, Path, List[str]], optional
36
35
  Array element definitions (list of array element or path to file with
37
36
  the array element positions).
37
+ calibration_device_types: List[str], optional
38
+ List of calibration device types (e.g., 'flat_fielding') attached to each telescope.
38
39
  sim_telarray_seeds : dict, optional
39
40
  Dictionary with configuration for sim_telarray random instrument setup.
40
41
  simtel_path: str, Path, optional
41
42
  Path to the sim_telarray installation directory.
42
- calibration_device_types: List[str], optional
43
- List of calibration device types (e.g., 'flat_fielding') attached to each telescope.
43
+ overwrite_model_parameters: str, optional
44
+ File name to overwrite model parameters from DB with provided values.
44
45
  """
45
46
 
46
47
  def __init__(
47
48
  self,
48
- mongo_db_config,
49
+ db_config,
49
50
  model_version,
50
51
  label=None,
51
52
  site=None,
52
53
  layout_name=None,
53
54
  array_elements=None,
55
+ calibration_device_types=None,
54
56
  sim_telarray_seeds=None,
55
57
  simtel_path=None,
56
- calibration_device_types=None,
58
+ overwrite_model_parameters=None,
57
59
  ):
58
60
  """Initialize ArrayModel."""
59
61
  self._logger = logging.getLogger(__name__)
60
62
  self._logger.debug("Init ArrayModel")
61
- self.mongo_db_config = mongo_db_config
63
+ self.db_config = db_config
62
64
  self.model_version = model_version
63
65
  self.label = label
64
66
  self.layout_name = (
@@ -69,7 +71,8 @@ class ArrayModel:
69
71
  self._config_file_path = None
70
72
  self._config_file_directory = None
71
73
  self.io_handler = io_handler.IOHandler()
72
- self.db = db_handler.DatabaseHandler(mongo_db_config=mongo_db_config)
74
+
75
+ self.overwrite_model_parameters = overwrite_model_parameters
73
76
 
74
77
  self.array_elements, self.site_model, self.telescope_models, self.calibration_models = (
75
78
  self._initialize(site, array_elements, calibration_device_types)
@@ -105,9 +108,10 @@ class ArrayModel:
105
108
  self._logger.debug(f"Getting site parameters from DB ({site})")
106
109
  site_model = SiteModel(
107
110
  site=names.validate_site_name(site),
108
- mongo_db_config=self.mongo_db_config,
111
+ db_config=self.db_config,
109
112
  model_version=self.model_version,
110
113
  label=self.label,
114
+ overwrite_model_parameters=self.overwrite_model_parameters,
111
115
  )
112
116
 
113
117
  # Case 1: array_elements is a file name
@@ -117,7 +121,7 @@ class ArrayModel:
117
121
  )
118
122
  # Case 2: array elements is a list of elements
119
123
  elif isinstance(array_elements_config, list):
120
- array_elements = self._get_array_elements_from_list(array_elements_config)
124
+ array_elements = self._get_array_elements_from_list(array_elements_config, site_model)
121
125
  # Case 3: array elements defined in DB by array layout name
122
126
  elif self.layout_name is not None:
123
127
  array_elements = self._get_array_elements_from_list(
@@ -168,7 +172,7 @@ class ArrayModel:
168
172
  return len(self.telescope_models)
169
173
 
170
174
  @property
171
- def site(self) -> str:
175
+ def site(self):
172
176
  """
173
177
  Return site.
174
178
 
@@ -179,34 +183,6 @@ class ArrayModel:
179
183
  """
180
184
  return self.site_model.site
181
185
 
182
- @property
183
- def model_version(self):
184
- """Model version."""
185
- return self._model_version
186
-
187
- @model_version.setter
188
- def model_version(self, model_version):
189
- """
190
- Set model version.
191
-
192
- Parameters
193
- ----------
194
- _model_version: str or list
195
- Model version (e.g., "6.0.0").
196
- If a list is passed, it must contain exactly one element,
197
- and only that element will be used.
198
-
199
- Raises
200
- ------
201
- ValueError
202
- If more than one model version is passed.
203
- """
204
- if isinstance(model_version, list):
205
- raise ValueError(
206
- f"Only one model version can be passed to {self.__class__.__name__}, not a list."
207
- )
208
- self._model_version = model_version
209
-
210
186
  def _build_telescope_models(self, site_model, array_elements, calibration_device_types):
211
187
  """
212
188
  Build telescope models for all telescopes of this array.
@@ -243,8 +219,9 @@ class ArrayModel:
243
219
  site=site_model.site,
244
220
  telescope_name=element_name,
245
221
  model_version=self.model_version,
246
- mongo_db_config=self.mongo_db_config,
222
+ db_config=self.db_config,
247
223
  label=self.label,
224
+ overwrite_model_parameters=self.overwrite_model_parameters,
248
225
  )
249
226
  calibration_models[element_name] = self._build_calibration_models(
250
227
  telescope_models[element_name],
@@ -274,9 +251,10 @@ class ArrayModel:
274
251
  calibration_models[device_name] = CalibrationModel(
275
252
  site=site_model.site,
276
253
  calibration_device_model_name=device_name,
277
- mongo_db_config=self.mongo_db_config,
254
+ db_config=self.db_config,
278
255
  model_version=self.model_version,
279
256
  label=self.label,
257
+ overwrite_model_parameters=self.overwrite_model_parameters,
280
258
  )
281
259
  return calibration_models
282
260
 
@@ -289,9 +267,7 @@ class ArrayModel:
289
267
  """Export sim_telarray configuration files for all telescopes into the model directory."""
290
268
  exported_models = []
291
269
  for tel_model in self.telescope_models.values():
292
- name = tel_model.name + (
293
- "_" + tel_model.extra_label if tel_model.extra_label != "" else ""
294
- )
270
+ name = tel_model.name
295
271
  if name not in exported_models:
296
272
  self._logger.debug(f"Exporting configuration file for telescope {name}")
297
273
  tel_model.write_sim_telarray_config_file(
@@ -336,7 +312,7 @@ class ArrayModel:
336
312
  if not self._array_model_file_exported:
337
313
  self.export_sim_telarray_config_file()
338
314
 
339
- def get_config_directory(self) -> Path:
315
+ def get_config_directory(self):
340
316
  """
341
317
  Get the path of the array config directory for sim_telarray.
342
318
 
@@ -370,9 +346,7 @@ class ArrayModel:
370
346
  self._logger.info(f"Packed model files into {archive_name}")
371
347
  return archive_name
372
348
 
373
- def _load_array_element_positions_from_file(
374
- self, array_elements_file: str | Path, site: str
375
- ) -> dict:
349
+ def _load_array_element_positions_from_file(self, array_elements_file, site):
376
350
  """
377
351
  Load array element (e.g. telescope) positions from a file into a dict.
378
352
 
@@ -400,14 +374,8 @@ class ArrayModel:
400
374
  }
401
375
 
402
376
  def _get_telescope_position_parameter(
403
- self,
404
- telescope_name: str,
405
- site: str,
406
- x: u.Quantity,
407
- y: u.Quantity,
408
- z: u.Quantity,
409
- parameter_version: str | None = None,
410
- ) -> dict:
377
+ self, telescope_name, site, x, y, z, parameter_version=None
378
+ ):
411
379
  """
412
380
  Return dictionary with telescope position parameters (following DB model database format).
413
381
 
@@ -444,7 +412,7 @@ class ArrayModel:
444
412
  "model_parameter_schema_version": "0.1.0",
445
413
  }
446
414
 
447
- def _get_array_elements_from_list(self, array_elements_list: list[str]) -> dict:
415
+ def _get_array_elements_from_list(self, array_elements_list, site_model=None):
448
416
  """
449
417
  Return dictionary with array elements from a list of telescope names.
450
418
 
@@ -456,6 +424,8 @@ class ArrayModel:
456
424
  ----------
457
425
  array_elements_list: list
458
426
  List of telescope names.
427
+ site_model: SiteModel
428
+ Site model.
459
429
 
460
430
  Returns
461
431
  -------
@@ -467,31 +437,30 @@ class ArrayModel:
467
437
  try:
468
438
  array_elements_dict[names.validate_array_element_name(name)] = None
469
439
  except ValueError:
470
- array_elements_dict.update(self._get_all_array_elements_of_type(name))
440
+ array_elements_dict.update(self._get_all_array_elements_of_type(name, site_model))
471
441
  return array_elements_dict
472
442
 
473
- def _get_all_array_elements_of_type(self, array_element_type: str) -> dict:
443
+ def _get_all_array_elements_of_type(self, array_element_type, site_model):
474
444
  """
475
- Return all array elements of a specific type using the database.
445
+ Return all array elements of a specific type.
476
446
 
477
447
  Parameters
478
448
  ----------
479
449
  array_element_type : str
480
450
  Type of the array element (e.g. LSTN, MSTS)
451
+ site_model: SiteModel
452
+ Site model.
481
453
 
482
454
  Returns
483
455
  -------
484
456
  dict
485
457
  Dict with array elements.
486
458
  """
487
- all_elements = self.db.get_array_elements_of_type(
488
- array_element_type=array_element_type,
489
- model_version=self.model_version,
490
- collection="telescopes",
459
+ return self._get_array_elements_from_list(
460
+ site_model.get_array_elements_of_type(array_element_type)
491
461
  )
492
- return self._get_array_elements_from_list(all_elements)
493
462
 
494
- def export_array_elements_as_table(self, coordinate_system: str = "ground") -> QTable:
463
+ def export_array_elements_as_table(self, coordinate_system="ground"):
495
464
  """
496
465
  Export array elements positions to astropy table.
497
466
 
@@ -17,31 +17,34 @@ class CalibrationModel(ModelParameter):
17
17
  Site name (e.g., South or North).
18
18
  calibration_device_model_name: str
19
19
  Calibration device model name (ex. ILLS-01, ILLN-01, ...).
20
- mongo_db_config: dict
21
- MongoDB configuration.
20
+ db_config: dict
21
+ Database configuration.
22
22
  model_version: str
23
23
  Model version.
24
24
  label: str, optional
25
25
  Instance label. Important for output file naming.
26
+ overwrite_model_parameters: str, optional
27
+ File name to overwrite model parameters from DB with provided values.
26
28
  """
27
29
 
28
30
  def __init__(
29
31
  self,
30
- site: str,
31
- calibration_device_model_name: str,
32
- mongo_db_config: dict,
33
- model_version: str,
34
- label: str | None = None,
32
+ site,
33
+ calibration_device_model_name,
34
+ db_config,
35
+ model_version,
36
+ label=None,
37
+ overwrite_model_parameters=None,
35
38
  ):
36
39
  """Initialize CalibrationModel."""
37
40
  super().__init__(
38
41
  site=site,
39
42
  array_element_name=calibration_device_model_name,
40
43
  collection="calibration_devices",
41
- mongo_db_config=mongo_db_config,
44
+ db_config=db_config,
42
45
  model_version=model_version,
43
- db=None,
44
46
  label=label,
47
+ overwrite_model_parameters=overwrite_model_parameters,
45
48
  )
46
49
 
47
50
  self._logger = logging.getLogger(__name__)