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.
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/METADATA +1 -1
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/RECORD +59 -58
- simtools/_version.py +2 -2
- simtools/application_control.py +4 -4
- simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
- simtools/applications/db_add_file_to_db.py +2 -2
- simtools/applications/db_add_simulation_model_from_repository_to_db.py +1 -1
- simtools/applications/db_add_value_from_json_to_db.py +2 -2
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +1 -1
- simtools/applications/db_generate_compound_indexes.py +1 -1
- simtools/applications/db_get_array_layouts_from_db.py +2 -2
- simtools/applications/db_get_file_from_db.py +1 -1
- simtools/applications/db_get_parameter_from_db.py +1 -1
- simtools/applications/db_inspect_databases.py +4 -2
- simtools/applications/db_upload_model_repository.py +1 -1
- simtools/applications/derive_ctao_array_layouts.py +1 -1
- simtools/applications/generate_array_config.py +1 -1
- simtools/applications/maintain_simulation_model_add_production.py +11 -21
- simtools/applications/production_generate_grid.py +1 -1
- simtools/applications/submit_array_layouts.py +2 -2
- simtools/applications/validate_camera_fov.py +1 -1
- simtools/applications/validate_cumulative_psf.py +2 -2
- simtools/applications/validate_optics.py +1 -1
- simtools/configuration/commandline_parser.py +7 -9
- simtools/configuration/configurator.py +1 -1
- simtools/corsika/corsika_config.py +2 -4
- simtools/data_model/model_data_writer.py +1 -1
- simtools/data_model/schema.py +36 -34
- simtools/db/db_handler.py +61 -294
- simtools/db/db_model_upload.py +1 -1
- simtools/db/mongo_db.py +535 -0
- simtools/dependencies.py +33 -8
- simtools/layout/array_layout.py +7 -7
- simtools/layout/array_layout_utils.py +3 -3
- simtools/model/array_model.py +36 -67
- simtools/model/calibration_model.py +12 -9
- simtools/model/model_parameter.py +196 -159
- simtools/model/model_repository.py +159 -35
- simtools/model/model_utils.py +3 -3
- simtools/model/site_model.py +59 -27
- simtools/model/telescope_model.py +21 -13
- simtools/ray_tracing/mirror_panel_psf.py +4 -4
- simtools/ray_tracing/psf_parameter_optimisation.py +1 -1
- simtools/reporting/docs_auto_report_generator.py +1 -1
- simtools/reporting/docs_read_parameters.py +3 -2
- simtools/schemas/simulation_models_info.schema.yml +2 -1
- simtools/simtel/simtel_config_writer.py +97 -20
- simtools/simulator.py +2 -1
- simtools/testing/assertions.py +50 -6
- simtools/testing/validate_output.py +4 -8
- simtools/utils/value_conversion.py +10 -5
- simtools/version.py +24 -0
- simtools/visualization/plot_pixels.py +1 -1
- simtools/visualization/plot_psf.py +1 -1
- simtools/visualization/plot_tables.py +1 -1
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/entry_points.txt +0 -0
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/licenses/LICENSE +0 -0
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/top_level.txt +0 -0
simtools/model/array_model.py
CHANGED
|
@@ -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
|
-
|
|
26
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
488
|
-
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
|
|
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
|
-
|
|
21
|
-
|
|
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
|
|
31
|
-
calibration_device_model_name
|
|
32
|
-
|
|
33
|
-
model_version
|
|
34
|
-
label
|
|
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
|
-
|
|
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__)
|