gammasimtools 0.22.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.22.0.dist-info → gammasimtools-0.24.0.dist-info}/METADATA +2 -1
- {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/RECORD +128 -125
- simtools/_version.py +2 -2
- simtools/application_control.py +118 -0
- simtools/applications/calculate_incident_angles.py +17 -22
- simtools/applications/convert_all_model_parameters_from_simtel.py +28 -43
- simtools/applications/convert_geo_coordinates_of_array_elements.py +26 -45
- simtools/applications/convert_model_parameter_from_simtel.py +21 -41
- simtools/applications/db_add_file_to_db.py +13 -14
- simtools/applications/db_add_simulation_model_from_repository_to_db.py +20 -33
- simtools/applications/db_add_value_from_json_to_db.py +29 -24
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +20 -35
- simtools/applications/db_generate_compound_indexes.py +11 -13
- simtools/applications/db_get_array_layouts_from_db.py +20 -40
- simtools/applications/db_get_file_from_db.py +15 -17
- simtools/applications/db_get_parameter_from_db.py +33 -35
- simtools/applications/db_inspect_databases.py +13 -12
- simtools/applications/db_upload_model_repository.py +13 -31
- simtools/applications/derive_ctao_array_layouts.py +16 -21
- simtools/applications/derive_mirror_rnda.py +9 -14
- simtools/applications/derive_photon_electron_spectrum.py +7 -10
- simtools/applications/derive_psf_parameters.py +13 -20
- simtools/applications/derive_trigger_rates.py +6 -9
- simtools/applications/docs_produce_array_element_report.py +22 -23
- simtools/applications/docs_produce_calibration_reports.py +26 -24
- simtools/applications/docs_produce_model_parameter_reports.py +15 -22
- simtools/applications/docs_produce_simulation_configuration_report.py +21 -22
- simtools/applications/generate_array_config.py +14 -33
- simtools/applications/generate_corsika_histograms.py +22 -43
- simtools/applications/generate_default_metadata.py +15 -36
- simtools/applications/generate_regular_arrays.py +11 -15
- simtools/applications/generate_simtel_event_data.py +23 -33
- simtools/applications/maintain_simulation_model_add_production.py +20 -37
- simtools/applications/maintain_simulation_model_compare_productions.py +10 -12
- simtools/applications/maintain_simulation_model_verify_production_tables.py +8 -11
- simtools/applications/merge_tables.py +14 -23
- simtools/applications/plot_array_layout.py +77 -54
- simtools/applications/plot_simtel_events.py +11 -13
- simtools/applications/plot_tabular_data.py +17 -38
- simtools/applications/plot_tabular_data_for_model_parameter.py +16 -23
- simtools/applications/print_version.py +14 -42
- simtools/applications/production_derive_corsika_limits.py +5 -9
- simtools/applications/production_derive_statistics.py +12 -25
- simtools/applications/production_generate_grid.py +20 -48
- simtools/applications/production_merge_corsika_limits.py +17 -21
- simtools/applications/run_application.py +12 -32
- simtools/applications/simulate_flasher.py +21 -25
- simtools/applications/simulate_illuminator.py +7 -14
- simtools/applications/simulate_pedestals.py +13 -13
- simtools/applications/simulate_prod.py +21 -33
- simtools/applications/simulate_prod_htcondor_generator.py +11 -25
- simtools/applications/submit_array_layouts.py +16 -19
- simtools/applications/submit_data_from_external.py +18 -34
- simtools/applications/submit_model_parameter_from_external.py +27 -40
- simtools/applications/validate_camera_efficiency.py +23 -21
- simtools/applications/validate_camera_fov.py +21 -26
- simtools/applications/validate_cumulative_psf.py +27 -35
- simtools/applications/validate_file_using_schema.py +15 -33
- simtools/applications/validate_optics.py +27 -33
- simtools/camera/camera_efficiency.py +0 -2
- simtools/configuration/commandline_parser.py +39 -13
- simtools/configuration/configurator.py +1 -6
- simtools/corsika/corsika_config.py +2 -9
- simtools/data_model/data_reader.py +0 -2
- simtools/data_model/metadata_collector.py +0 -2
- simtools/data_model/model_data_writer.py +1 -3
- simtools/data_model/schema.py +36 -34
- simtools/data_model/validate_data.py +0 -2
- simtools/db/db_handler.py +61 -296
- simtools/db/db_model_upload.py +1 -1
- simtools/db/mongo_db.py +535 -0
- simtools/dependencies.py +33 -8
- simtools/io/hdf5_handler.py +0 -5
- simtools/io/legacy_data_handler.py +0 -5
- simtools/job_execution/job_manager.py +0 -3
- simtools/layout/array_layout.py +7 -9
- simtools/layout/array_layout_utils.py +3 -3
- simtools/layout/telescope_position.py +0 -2
- simtools/model/array_model.py +38 -71
- simtools/model/calibration_model.py +12 -11
- simtools/model/camera.py +0 -2
- simtools/model/mirrors.py +0 -2
- simtools/model/model_parameter.py +200 -140
- simtools/model/model_repository.py +159 -35
- simtools/model/model_utils.py +3 -8
- simtools/model/site_model.py +59 -29
- simtools/model/telescope_model.py +21 -15
- simtools/production_configuration/calculate_statistical_uncertainties_grid_point.py +0 -2
- simtools/production_configuration/derive_production_statistics.py +0 -2
- simtools/production_configuration/interpolation_handler.py +0 -2
- simtools/ray_tracing/mirror_panel_psf.py +4 -4
- simtools/ray_tracing/psf_analysis.py +0 -2
- simtools/ray_tracing/psf_parameter_optimisation.py +1 -1
- simtools/ray_tracing/ray_tracing.py +0 -2
- simtools/reporting/docs_auto_report_generator.py +109 -1
- simtools/reporting/docs_read_parameters.py +4 -9
- simtools/runners/corsika_runner.py +0 -2
- simtools/runners/corsika_simtel_runner.py +0 -2
- simtools/runners/simtel_runner.py +0 -2
- simtools/schemas/model_parameters/transit_time_random.schema.yml +29 -0
- simtools/schemas/simulation_models_info.schema.yml +2 -1
- simtools/simtel/simtel_config_reader.py +0 -2
- simtools/simtel/simtel_config_writer.py +128 -33
- simtools/simtel/simtel_io_metadata.py +3 -3
- simtools/simtel/simulator_array.py +9 -21
- simtools/simtel/simulator_camera_efficiency.py +0 -2
- simtools/simtel/simulator_light_emission.py +1 -3
- simtools/simtel/simulator_ray_tracing.py +0 -2
- simtools/simulator.py +2 -6
- simtools/testing/assertions.py +52 -8
- simtools/testing/configuration.py +17 -4
- simtools/testing/validate_output.py +4 -8
- simtools/utils/general.py +5 -13
- simtools/utils/geometry.py +0 -5
- simtools/utils/names.py +1 -13
- simtools/utils/value_conversion.py +10 -5
- simtools/version.py +85 -0
- simtools/visualization/plot_array_layout.py +129 -23
- simtools/visualization/plot_incident_angles.py +0 -2
- simtools/visualization/plot_pixels.py +1 -1
- simtools/visualization/plot_psf.py +1 -1
- simtools/visualization/plot_simtel_events.py +0 -11
- simtools/visualization/plot_tables.py +1 -1
- simtools/visualization/visualize.py +0 -12
- {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/entry_points.txt +0 -0
- {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/licenses/LICENSE +0 -0
- {gammasimtools-0.22.0.dist-info → gammasimtools-0.24.0.dist-info}/top_level.txt +0 -0
simtools/data_model/schema.py
CHANGED
|
@@ -4,12 +4,9 @@ import logging
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
6
|
import jsonschema
|
|
7
|
-
from packaging.specifiers import SpecifierSet
|
|
8
|
-
from packaging.version import Version
|
|
9
7
|
from referencing import Registry, Resource
|
|
10
8
|
|
|
11
9
|
import simtools.utils.general as gen
|
|
12
|
-
from simtools import version
|
|
13
10
|
from simtools.constants import (
|
|
14
11
|
METADATA_JSON_SCHEMA,
|
|
15
12
|
MODEL_PARAMETER_METASCHEMA,
|
|
@@ -17,8 +14,10 @@ from simtools.constants import (
|
|
|
17
14
|
SCHEMA_PATH,
|
|
18
15
|
)
|
|
19
16
|
from simtools.data_model import format_checkers
|
|
17
|
+
from simtools.dependencies import get_software_version
|
|
20
18
|
from simtools.io import ascii_handler
|
|
21
19
|
from simtools.utils import names
|
|
20
|
+
from simtools.version import check_version_constraint
|
|
22
21
|
|
|
23
22
|
_logger = logging.getLogger(__name__)
|
|
24
23
|
|
|
@@ -96,7 +95,7 @@ def get_model_parameter_schema_version(schema_version=None):
|
|
|
96
95
|
|
|
97
96
|
|
|
98
97
|
def validate_dict_using_schema(
|
|
99
|
-
data, schema_file=None, json_schema=None, ignore_software_version=False
|
|
98
|
+
data, schema_file=None, json_schema=None, ignore_software_version=False, offline=False
|
|
100
99
|
):
|
|
101
100
|
"""
|
|
102
101
|
Validate a data dictionary against a schema.
|
|
@@ -124,7 +123,7 @@ def validate_dict_using_schema(
|
|
|
124
123
|
if json_schema is None:
|
|
125
124
|
json_schema = load_schema(schema_file, get_schema_version_from_data(data))
|
|
126
125
|
|
|
127
|
-
|
|
126
|
+
validate_deprecation_and_version(data, ignore_software_version=ignore_software_version)
|
|
128
127
|
|
|
129
128
|
validator = jsonschema.Draft6Validator(
|
|
130
129
|
schema=json_schema,
|
|
@@ -137,6 +136,16 @@ def validate_dict_using_schema(
|
|
|
137
136
|
except jsonschema.exceptions.ValidationError as exc:
|
|
138
137
|
_logger.error(f"Validation failed using schema: {json_schema} for data: {data}")
|
|
139
138
|
raise exc
|
|
139
|
+
|
|
140
|
+
if not offline:
|
|
141
|
+
_validate_meta_schema_url(data)
|
|
142
|
+
|
|
143
|
+
_logger.debug(f"Successful validation of data using schema ({json_schema.get('name')})")
|
|
144
|
+
return data
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _validate_meta_schema_url(data):
|
|
148
|
+
"""Validate meta_schema_url if present in data."""
|
|
140
149
|
if (
|
|
141
150
|
isinstance(data, dict)
|
|
142
151
|
and data.get("meta_schema_url")
|
|
@@ -144,9 +153,6 @@ def validate_dict_using_schema(
|
|
|
144
153
|
):
|
|
145
154
|
raise FileNotFoundError(f"Meta schema URL does not exist: {data['meta_schema_url']}")
|
|
146
155
|
|
|
147
|
-
_logger.debug(f"Successful validation of data using schema ({json_schema.get('name')})")
|
|
148
|
-
return data
|
|
149
|
-
|
|
150
156
|
|
|
151
157
|
def _retrieve_yaml_schema_from_uri(uri):
|
|
152
158
|
"""Load schema from a file URI."""
|
|
@@ -307,9 +313,7 @@ def _add_array_elements(key, schema):
|
|
|
307
313
|
return schema
|
|
308
314
|
|
|
309
315
|
|
|
310
|
-
def
|
|
311
|
-
data, software_name="simtools", ignore_software_version=False
|
|
312
|
-
):
|
|
316
|
+
def validate_deprecation_and_version(data, software_name=None, ignore_software_version=False):
|
|
313
317
|
"""
|
|
314
318
|
Check if data contains deprecated parameters or version mismatches.
|
|
315
319
|
|
|
@@ -317,39 +321,37 @@ def _validate_deprecation_and_version(
|
|
|
317
321
|
----------
|
|
318
322
|
data: dict
|
|
319
323
|
Data dictionary to check.
|
|
320
|
-
software_name: str
|
|
321
|
-
Name of the software to check version against.
|
|
324
|
+
software_name: str or None
|
|
325
|
+
Name of the software to check version against. If None, use complete list
|
|
322
326
|
ignore_software_version: bool
|
|
323
327
|
If True, ignore software version check.
|
|
324
328
|
"""
|
|
325
329
|
if not isinstance(data, dict):
|
|
326
330
|
return
|
|
327
331
|
|
|
332
|
+
data_name = data.get("name", "<unknown>")
|
|
333
|
+
|
|
328
334
|
if data.get("deprecated", False):
|
|
329
335
|
note = data.get("deprecation_note", "(no deprecation note provided)")
|
|
330
|
-
_logger.warning(f"Data is deprecated. Note: {note}")
|
|
336
|
+
_logger.warning(f"Data for {data_name} is deprecated. Note: {note}")
|
|
331
337
|
|
|
332
|
-
|
|
333
|
-
constraint = sw.get("version")
|
|
334
|
-
if
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
338
|
+
for sw in data.get("simulation_software", []):
|
|
339
|
+
name, constraint = sw.get("name"), sw.get("version")
|
|
340
|
+
if not name or not constraint:
|
|
341
|
+
continue
|
|
342
|
+
if software_name is not None and name.lower() != software_name.lower():
|
|
343
|
+
continue
|
|
344
|
+
|
|
345
|
+
software_version = get_software_version(name)
|
|
346
|
+
if check_version_constraint(software_version, constraint):
|
|
339
347
|
_logger.debug(
|
|
340
|
-
f"
|
|
348
|
+
f"{data_name}: version {software_version} of {name} matches "
|
|
349
|
+
f"constraint {constraint}."
|
|
341
350
|
)
|
|
351
|
+
continue
|
|
352
|
+
|
|
353
|
+
msg = f"{data_name}: version {software_version} of {name} does not match {constraint}."
|
|
354
|
+
if ignore_software_version:
|
|
355
|
+
_logger.warning(f"{msg}, but version check is ignored.")
|
|
342
356
|
else:
|
|
343
|
-
msg = (
|
|
344
|
-
f"Version {version.__version__} of {software_name} "
|
|
345
|
-
f"does not match constraint {constraint}."
|
|
346
|
-
)
|
|
347
|
-
if ignore_software_version:
|
|
348
|
-
_logger.warning(f"{msg}, but version check is ignored.")
|
|
349
|
-
return
|
|
350
357
|
raise ValueError(msg)
|
|
351
|
-
|
|
352
|
-
for sw in data.get("simulation_software", []):
|
|
353
|
-
if sw.get("name") == software_name:
|
|
354
|
-
check_version(sw)
|
|
355
|
-
break
|