gammasimtools 0.11.0__py3-none-any.whl → 0.13.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.11.0.dist-info → gammasimtools-0.13.0.dist-info}/METADATA +1 -1
- {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/RECORD +66 -79
- {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/WHEEL +1 -1
- {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/entry_points.txt +2 -1
- simtools/_version.py +2 -2
- simtools/applications/convert_all_model_parameters_from_simtel.py +77 -88
- simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
- simtools/applications/db_get_parameter_from_db.py +52 -22
- simtools/applications/derive_photon_electron_spectrum.py +1 -1
- simtools/applications/docs_produce_array_element_report.py +1 -10
- simtools/applications/docs_produce_model_parameter_reports.py +4 -17
- simtools/applications/plot_tabular_data.py +14 -2
- simtools/applications/{production_derive_limits.py → production_derive_corsika_limits.py} +20 -8
- simtools/applications/production_extract_mc_event_data.py +125 -0
- simtools/applications/run_application.py +9 -10
- simtools/applications/submit_data_from_external.py +1 -1
- simtools/applications/submit_model_parameter_from_external.py +2 -1
- simtools/camera/single_photon_electron_spectrum.py +6 -2
- simtools/configuration/commandline_parser.py +1 -1
- simtools/constants.py +7 -0
- simtools/data_model/metadata_collector.py +159 -61
- simtools/data_model/model_data_writer.py +11 -55
- simtools/data_model/schema.py +2 -1
- simtools/data_model/validate_data.py +5 -3
- simtools/db/db_handler.py +119 -33
- simtools/model/model_parameter.py +0 -31
- simtools/production_configuration/derive_corsika_limits.py +260 -0
- simtools/production_configuration/extract_mc_event_data.py +253 -0
- simtools/ray_tracing/mirror_panel_psf.py +1 -1
- simtools/reporting/docs_read_parameters.py +164 -91
- simtools/schemas/metadata.metaschema.yml +7 -6
- simtools/schemas/model_parameter.metaschema.yml +0 -4
- simtools/schemas/model_parameter_and_data_schema.metaschema.yml +13 -5
- simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
- simtools/schemas/model_parameters/array_layouts.schema.yml +3 -0
- simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +3 -3
- simtools/schemas/model_parameters/fadc_max_sum.schema.yml +3 -3
- simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_skymap.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/plot_configuration.metaschema.yml +162 -0
- simtools/schemas/production_tables.schema.yml +1 -1
- simtools/simtel/simtel_config_reader.py +85 -34
- simtools/simtel/simtel_table_reader.py +4 -0
- simtools/utils/general.py +50 -9
- simtools/utils/names.py +7 -2
- simtools/utils/value_conversion.py +6 -4
- simtools/visualization/plot_tables.py +25 -20
- simtools/visualization/visualize.py +71 -23
- simtools/_dev_version/__init__.py +0 -9
- simtools/applications/__init__.py +0 -0
- simtools/configuration/__init__.py +0 -0
- simtools/corsika/__init__.py +0 -0
- simtools/data_model/__init__.py +0 -0
- simtools/db/__init__.py +0 -0
- simtools/io_operations/__init__.py +0 -0
- simtools/job_execution/__init__.py +0 -0
- simtools/layout/__init__.py +0 -0
- simtools/model/__init__.py +0 -0
- simtools/production_configuration/limits_calculation.py +0 -202
- simtools/ray_tracing/__init__.py +0 -0
- simtools/runners/__init__.py +0 -0
- simtools/simtel/__init__.py +0 -0
- simtools/testing/__init__.py +0 -0
- simtools/utils/__init__.py +0 -0
- simtools/visualization/__init__.py +0 -0
- {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/LICENSE +0 -0
- {gammasimtools-0.11.0.dist-info → gammasimtools-0.13.0.dist-info}/top_level.txt +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
2
|
r"""
|
|
3
|
-
Convert all simulation model parameters exported from sim_telarray format
|
|
3
|
+
Convert all simulation model parameters exported from sim_telarray format.
|
|
4
4
|
|
|
5
|
-
Check value, type, and range, convert units
|
|
5
|
+
Check value, type, and range, convert units using schema files. Write json files
|
|
6
6
|
ready to be submitted to the model database. Prints out parameters which are not found
|
|
7
7
|
in simtel configuration file and parameters which are not found in simtools schema files.
|
|
8
8
|
|
|
@@ -19,22 +19,15 @@ r"""
|
|
|
19
19
|
telescope (str, optional)
|
|
20
20
|
Telescope model name (e.g. LST-1, SST-D, ...)
|
|
21
21
|
|
|
22
|
+
skip_parameter (str, optional)
|
|
23
|
+
List of parameters to be skipped (use sim_telarray names).
|
|
24
|
+
|
|
22
25
|
Example
|
|
23
26
|
-------
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
(
|
|
27
|
-
|
|
28
|
-
.. code-block:: console
|
|
29
|
-
|
|
30
|
-
simtools-convert-all-model-parameters-from-simtel \\
|
|
31
|
-
--schema_directory ../model_parameters/schema\\
|
|
32
|
-
--simtel_cfg_file all_telescope_config_la_palma.cfg\\
|
|
33
|
-
--simtel_telescope_name CT1\\
|
|
34
|
-
--telescope LSTN-01\\
|
|
35
|
-
--parameter_version "1.0.0"
|
|
36
|
-
|
|
37
|
-
The export of the model parameters from sim_telarray for 6.0.0 can be done e.g., as follows:
|
|
28
|
+
To export the model parameters from sim_telarray, first copy and unpack the configuration
|
|
29
|
+
tar ball from sim_telarray (usually called 'sim_telarray_config.tar.gz') to the sim_telarray
|
|
30
|
+
working directory. Extract the configuration using the following command:
|
|
38
31
|
|
|
39
32
|
.. code-block:: console
|
|
40
33
|
|
|
@@ -42,18 +35,32 @@ r"""
|
|
|
42
35
|
-C limits=no-internal -C initlist=no-internal -C list=no-internal \\
|
|
43
36
|
-C typelist=no-internal -C maximum_telescopes=30 -DNSB_AUTOSCALE \\
|
|
44
37
|
-DNECTARCAM -DHYPER_LAYOUT -DNUM_TELESCOPES=30 /dev/null \\
|
|
45
|
-
2>|/dev/null | grep '(@cfg)'
|
|
38
|
+
2>|/dev/null | grep '(@cfg)' | sed 's/^(@cfg) //' >| all_telescope_config_la_palma.cfg
|
|
46
39
|
|
|
47
40
|
./sim_telarray/bin/sim_telarray -c sim_telarray/cfg/CTA/CTA-PROD6-Paranal.cfg \\
|
|
48
41
|
-C limits=no-internal -C initlist=no-internal -C list=no-internal \\
|
|
49
42
|
-C typelist=no-internal -C maximum_telescopes=87 -DNSB_AUTOSCALE \\
|
|
50
43
|
-DFLASHCAM -DHYPER_LAYOUT -DNUM_TELESCOPES=87 /dev/null \\
|
|
51
|
-
2>|/dev/null | grep '(@cfg)'
|
|
44
|
+
2>|/dev/null | grep '(@cfg)' | sed 's/^(@cfg) //' >| all_telescope_config_paranal.cfg
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
Extract then model parameters from the simtel_array configuration file for LSTN-01
|
|
48
|
+
(telescopes are named CT1, CT2, ..., in the sim_telarray configuration file and must be
|
|
49
|
+
provided in the "simtel_telescope_name" command line argument)
|
|
50
|
+
and write json files in the same format as the model parameter database:
|
|
51
|
+
|
|
52
|
+
.. code-block:: console
|
|
53
|
+
|
|
54
|
+
simtools-convert-all-model-parameters-from-simtel \\
|
|
55
|
+
--simtel_cfg_file all_telescope_config_la_palma.cfg\\
|
|
56
|
+
--simtel_telescope_name CT1\\
|
|
57
|
+
--telescope LSTN-01\\
|
|
58
|
+
--parameter_version "1.0.0"\\
|
|
59
|
+
--output_path /path/to/output
|
|
52
60
|
|
|
53
61
|
"""
|
|
54
62
|
|
|
55
63
|
import logging
|
|
56
|
-
import re
|
|
57
64
|
from pathlib import Path
|
|
58
65
|
|
|
59
66
|
import numpy as np
|
|
@@ -63,7 +70,7 @@ import simtools.utils.general as gen
|
|
|
63
70
|
from simtools.configuration import configurator
|
|
64
71
|
from simtools.data_model import schema
|
|
65
72
|
from simtools.io_operations.io_handler import IOHandler
|
|
66
|
-
from simtools.simtel
|
|
73
|
+
from simtools.simtel import simtel_config_reader
|
|
67
74
|
|
|
68
75
|
|
|
69
76
|
def _parse(label=None, description=None):
|
|
@@ -85,14 +92,6 @@ def _parse(label=None, description=None):
|
|
|
85
92
|
"""
|
|
86
93
|
config = configurator.Configurator(label=label, description=description)
|
|
87
94
|
|
|
88
|
-
config.parser.add_argument(
|
|
89
|
-
"--schema_directory",
|
|
90
|
-
help=(
|
|
91
|
-
"Directory with schema files for model parameter validation "
|
|
92
|
-
"(default: simtools schema directory)"
|
|
93
|
-
),
|
|
94
|
-
required=False,
|
|
95
|
-
)
|
|
96
95
|
config.parser.add_argument(
|
|
97
96
|
"--simtel_cfg_file",
|
|
98
97
|
help="File name for simtel_array configuration",
|
|
@@ -105,36 +104,17 @@ def _parse(label=None, description=None):
|
|
|
105
104
|
type=str,
|
|
106
105
|
required=True,
|
|
107
106
|
)
|
|
107
|
+
config.parser.add_argument(
|
|
108
|
+
"--skip_parameter",
|
|
109
|
+
help="List of parameters to be skipped.",
|
|
110
|
+
type=str,
|
|
111
|
+
nargs="*",
|
|
112
|
+
default=[],
|
|
113
|
+
)
|
|
108
114
|
return config.initialize(simulation_model=["telescope", "parameter_version"])
|
|
109
115
|
|
|
110
116
|
|
|
111
|
-
def
|
|
112
|
-
"""
|
|
113
|
-
Return list of simtel parameters found in simtel configuration file.
|
|
114
|
-
|
|
115
|
-
Parameters
|
|
116
|
-
----------
|
|
117
|
-
simtel_config_file: str
|
|
118
|
-
File name for sim_telarray configuration
|
|
119
|
-
logger: logging.Logger
|
|
120
|
-
Logger object
|
|
121
|
-
|
|
122
|
-
Returns
|
|
123
|
-
-------
|
|
124
|
-
list
|
|
125
|
-
List of parameters found in simtel configuration file.
|
|
126
|
-
|
|
127
|
-
"""
|
|
128
|
-
simtel_parameter_set = set()
|
|
129
|
-
with open(simtel_config_file, encoding="utf-8") as file:
|
|
130
|
-
for line in file:
|
|
131
|
-
parts_of_lines = re.split(r",\s*|\s+", line.strip())
|
|
132
|
-
simtel_parameter_set.add(parts_of_lines[1].lower())
|
|
133
|
-
logger.info(f"Found {len(simtel_parameter_set)} parameters in simtel configuration file.")
|
|
134
|
-
return list(simtel_parameter_set)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def read_simtel_config_file(args_dict, logger, schema_file, camera_pixels=None):
|
|
117
|
+
def read_simtel_config_file(args_dict, schema_file, camera_pixels=None):
|
|
138
118
|
"""
|
|
139
119
|
Read the simtel configuration file.
|
|
140
120
|
|
|
@@ -142,25 +122,26 @@ def read_simtel_config_file(args_dict, logger, schema_file, camera_pixels=None):
|
|
|
142
122
|
----------
|
|
143
123
|
args_dict: dict
|
|
144
124
|
Dictionary with command line arguments.
|
|
145
|
-
logger: logging.Logger
|
|
146
|
-
Logger object
|
|
147
125
|
schema_file: str
|
|
148
126
|
Schema path name.
|
|
149
127
|
camera_pixels: int
|
|
150
128
|
Number of camera pixels.
|
|
151
129
|
|
|
130
|
+
Returns
|
|
131
|
+
-------
|
|
132
|
+
SimtelConfigReader, None
|
|
133
|
+
SimtelConfigReader object (None if parameter not found)
|
|
134
|
+
|
|
152
135
|
"""
|
|
153
|
-
|
|
136
|
+
config_reader = simtel_config_reader.SimtelConfigReader(
|
|
154
137
|
schema_file=schema_file,
|
|
155
138
|
simtel_config_file=args_dict["simtel_cfg_file"],
|
|
156
139
|
simtel_telescope_name=args_dict["simtel_telescope_name"],
|
|
157
140
|
camera_pixels=camera_pixels,
|
|
158
141
|
)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if simtel_config_reader.parameter_dict is None or len(simtel_config_reader.parameter_dict) == 0:
|
|
142
|
+
if config_reader.parameter_dict is None or len(config_reader.parameter_dict) == 0:
|
|
162
143
|
return None
|
|
163
|
-
return
|
|
144
|
+
return config_reader
|
|
164
145
|
|
|
165
146
|
|
|
166
147
|
def get_number_of_camera_pixel(args_dict, logger):
|
|
@@ -184,12 +165,10 @@ def get_number_of_camera_pixel(args_dict, logger):
|
|
|
184
165
|
|
|
185
166
|
"""
|
|
186
167
|
try:
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
simtel_config_file=args_dict["simtel_cfg_file"],
|
|
190
|
-
simtel_telescope_name=args_dict["simtel_telescope_name"],
|
|
168
|
+
config_reader = read_simtel_config_file(
|
|
169
|
+
args_dict, schema.get_model_parameter_schema_file("camera_pixels")
|
|
191
170
|
)
|
|
192
|
-
_camera_pixel =
|
|
171
|
+
_camera_pixel = config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
|
|
193
172
|
except (FileNotFoundError, AttributeError):
|
|
194
173
|
logger.warning("Failed to read camera pixel parameter.")
|
|
195
174
|
_camera_pixel = None
|
|
@@ -219,13 +198,14 @@ def read_and_export_parameters(args_dict, logger):
|
|
|
219
198
|
List of simtools parameter not found in simtel configuration file.
|
|
220
199
|
|
|
221
200
|
"""
|
|
222
|
-
_parameters, _schema_files = schema.get_get_model_parameter_schema_files(
|
|
223
|
-
|
|
201
|
+
_parameters, _schema_files = schema.get_get_model_parameter_schema_files()
|
|
202
|
+
_simtel_parameters = simtel_config_reader.get_list_of_simtel_parameters(
|
|
203
|
+
args_dict["simtel_cfg_file"]
|
|
224
204
|
)
|
|
225
|
-
_simtel_parameters
|
|
205
|
+
logger.info(f"Found {len(_simtel_parameters)} parameters in simtel configuration file.")
|
|
226
206
|
|
|
227
207
|
io_handler = IOHandler()
|
|
228
|
-
io_handler.set_paths(output_path=args_dict["output_path"]
|
|
208
|
+
io_handler.set_paths(output_path=args_dict["output_path"])
|
|
229
209
|
|
|
230
210
|
_camera_pixel = get_number_of_camera_pixel(args_dict, logger)
|
|
231
211
|
|
|
@@ -233,27 +213,34 @@ def read_and_export_parameters(args_dict, logger):
|
|
|
233
213
|
|
|
234
214
|
for _parameter, _schema_file in zip(_parameters, _schema_files):
|
|
235
215
|
logger.info(f"Parameter: {_parameter} Schema file: {_schema_file}")
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
216
|
+
if _parameter in args_dict["skip_parameter"]:
|
|
217
|
+
logger.info(f"Skipping {_parameter}")
|
|
218
|
+
continue
|
|
219
|
+
config_reader = read_simtel_config_file(args_dict, _schema_file, _camera_pixel)
|
|
239
220
|
|
|
240
|
-
if
|
|
221
|
+
if config_reader is None:
|
|
241
222
|
logger.info("Parameter not found in sim_telarray configuration file.")
|
|
242
223
|
_parameters_not_in_simtel.append(_parameter)
|
|
243
224
|
continue
|
|
244
225
|
|
|
226
|
+
logger.info(f"Simtel parameter: {config_reader.parameter_dict}")
|
|
227
|
+
|
|
245
228
|
_json_dict = writer.ModelDataWriter.dump_model_parameter(
|
|
246
229
|
parameter_name=_parameter,
|
|
247
|
-
value=
|
|
230
|
+
value=config_reader.parameter_dict.get(args_dict["simtel_telescope_name"]),
|
|
248
231
|
instrument=args_dict["telescope"],
|
|
249
232
|
parameter_version=args_dict["parameter_version"],
|
|
250
|
-
output_file=io_handler.get_output_file(
|
|
233
|
+
output_file=io_handler.get_output_file(
|
|
234
|
+
f"{_parameter}-{args_dict['parameter_version']}.json",
|
|
235
|
+
label=f"{args_dict['telescope']}",
|
|
236
|
+
sub_dir=f"{_parameter}",
|
|
237
|
+
),
|
|
251
238
|
)
|
|
252
239
|
|
|
253
|
-
|
|
240
|
+
config_reader.compare_simtel_config_with_schema()
|
|
254
241
|
|
|
255
|
-
if
|
|
256
|
-
_simtel_parameters.remove(
|
|
242
|
+
if config_reader.simtel_parameter_name.lower() in _simtel_parameters:
|
|
243
|
+
_simtel_parameters.remove(config_reader.simtel_parameter_name.lower())
|
|
257
244
|
|
|
258
245
|
if _json_dict["file"]:
|
|
259
246
|
logger.info(f"File name for {_parameter} is {_json_dict['value']}")
|
|
@@ -263,7 +250,7 @@ def read_and_export_parameters(args_dict, logger):
|
|
|
263
250
|
|
|
264
251
|
def print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, args_dict, logger):
|
|
265
252
|
"""
|
|
266
|
-
Print simtel/simtools parameter not found in schema and
|
|
253
|
+
Print simtel/simtools parameter not found in schema and configuration files.
|
|
267
254
|
|
|
268
255
|
For simtel parameters not found, check if the setting for the chose
|
|
269
256
|
telescope is different from the default values.
|
|
@@ -289,29 +276,31 @@ def print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, ar
|
|
|
289
276
|
logger.info(f"Simtel parameters not found in schema files ({len(_simtel_parameters)}):")
|
|
290
277
|
for para in sorted(_simtel_parameters):
|
|
291
278
|
logger.info(f"Simtel parameter: {para}")
|
|
292
|
-
|
|
279
|
+
config_reader = simtel_config_reader.SimtelConfigReader(
|
|
293
280
|
schema_file=None,
|
|
294
281
|
simtel_config_file=args_dict["simtel_cfg_file"],
|
|
295
282
|
simtel_telescope_name=args_dict["simtel_telescope_name"],
|
|
296
283
|
parameter_name=para,
|
|
297
284
|
)
|
|
298
|
-
_default =
|
|
299
|
-
_tel_value =
|
|
285
|
+
_default = config_reader.parameter_dict.get("default")
|
|
286
|
+
_tel_value = config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
|
|
300
287
|
# simple comparison of default value and telescope values, does not work for lists
|
|
301
288
|
try:
|
|
302
289
|
if _default == _tel_value or np.isclose(_default, _tel_value):
|
|
303
|
-
logger.info(f" Default and telescope values are equal: {_default}")
|
|
290
|
+
logger.info(f" Default and telescope values for {para} are equal: {_default}")
|
|
304
291
|
continue
|
|
305
292
|
except (ValueError, TypeError):
|
|
306
293
|
pass
|
|
307
294
|
if isinstance(_default, np.ndarray):
|
|
308
|
-
logger.warning(f" Default value: {_default} (length: {_default.size})")
|
|
295
|
+
logger.warning(f" Default value ({para}): {_default} (length: {_default.size})")
|
|
309
296
|
else:
|
|
310
|
-
logger.warning(f" Default value: {_default}")
|
|
297
|
+
logger.warning(f" Default value ({para}): {_default}")
|
|
311
298
|
if isinstance(_tel_value, np.ndarray):
|
|
312
|
-
logger.warning(
|
|
299
|
+
logger.warning(
|
|
300
|
+
f" Telescope value ({para}): {_tel_value} (length: {_tel_value.size})"
|
|
301
|
+
)
|
|
313
302
|
else:
|
|
314
|
-
logger.warning(f" Telescope value: {_tel_value}")
|
|
303
|
+
logger.warning(f" Telescope value ({para}): {_tel_value}")
|
|
315
304
|
|
|
316
305
|
|
|
317
306
|
def print_list_of_files(args_dict, logger):
|
|
@@ -178,7 +178,7 @@ def main():
|
|
|
178
178
|
)
|
|
179
179
|
writer.ModelDataWriter.dump(
|
|
180
180
|
args_dict=args_dict,
|
|
181
|
-
metadata=metadata
|
|
181
|
+
metadata=metadata,
|
|
182
182
|
product_data=product_data,
|
|
183
183
|
validate_schema_file=validate_schema_file,
|
|
184
184
|
)
|
|
@@ -3,22 +3,36 @@
|
|
|
3
3
|
r"""
|
|
4
4
|
Get a parameter entry from DB for a specific telescope or a site.
|
|
5
5
|
|
|
6
|
-
The application receives a parameter name, a site, a telescope (if applicable) and
|
|
7
|
-
a version.
|
|
6
|
+
The application receives a parameter name, a site, a telescope (if applicable) and
|
|
7
|
+
a version. Allow to print the parameter entry to screen or save it to a file.
|
|
8
|
+
Parameter describing a table file can be written to disk or exported as an astropy table
|
|
9
|
+
(if available).
|
|
8
10
|
|
|
9
11
|
Command line arguments
|
|
10
12
|
----------------------
|
|
11
13
|
parameter (str, required)
|
|
12
14
|
Parameter name
|
|
13
15
|
|
|
16
|
+
parameter_version (str, optional)
|
|
17
|
+
Parameter version
|
|
18
|
+
|
|
19
|
+
model_version (str, required)
|
|
20
|
+
Model version
|
|
21
|
+
|
|
14
22
|
site (str, required)
|
|
15
23
|
South or North.
|
|
16
24
|
|
|
17
25
|
telescope (str, optional)
|
|
18
26
|
Telescope model name (e.g. LST-1, SST-D, ...)
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
output_file (str, optional)
|
|
29
|
+
Output file name. If not given, print to stdout.
|
|
30
|
+
|
|
31
|
+
export_model_file (bool, optional)
|
|
32
|
+
Export model file (if parameter describes a file).
|
|
33
|
+
|
|
34
|
+
export_model_file_as_table (bool, optional)
|
|
35
|
+
Export model file as astropy table (if parameter describes a file).
|
|
22
36
|
|
|
23
37
|
Raises
|
|
24
38
|
------
|
|
@@ -35,12 +49,14 @@ r"""
|
|
|
35
49
|
--model_version 5.0.0
|
|
36
50
|
|
|
37
51
|
Get the mirror_list parameter using the parameter_version from the DB.
|
|
52
|
+
Write the mirror list to disk.
|
|
38
53
|
|
|
39
54
|
.. code-block:: console
|
|
40
55
|
|
|
41
56
|
simtools-db-get-parameter-from-db --parameter mirror_list \\
|
|
42
57
|
--site North --telescope LSTN-01 \\
|
|
43
|
-
--parameter_version 1.0.0
|
|
58
|
+
--parameter_version 1.0.0 \\
|
|
59
|
+
--export_model_file
|
|
44
60
|
|
|
45
61
|
"""
|
|
46
62
|
|
|
@@ -53,7 +69,6 @@ import simtools.utils.general as gen
|
|
|
53
69
|
from simtools.configuration import configurator
|
|
54
70
|
from simtools.db import db_handler
|
|
55
71
|
from simtools.io_operations import io_handler
|
|
56
|
-
from simtools.utils import names
|
|
57
72
|
|
|
58
73
|
|
|
59
74
|
def _parse():
|
|
@@ -72,6 +87,18 @@ def _parse():
|
|
|
72
87
|
type=str,
|
|
73
88
|
required=False,
|
|
74
89
|
)
|
|
90
|
+
config.parser.add_argument(
|
|
91
|
+
"--export_model_file",
|
|
92
|
+
help="Export model file (if parameter describes a file)",
|
|
93
|
+
action="store_true",
|
|
94
|
+
required=False,
|
|
95
|
+
)
|
|
96
|
+
config.parser.add_argument(
|
|
97
|
+
"--export_model_file_as_table",
|
|
98
|
+
help="Export model file as astropy table (if parameter describes a file)",
|
|
99
|
+
action="store_true",
|
|
100
|
+
required=False,
|
|
101
|
+
)
|
|
75
102
|
|
|
76
103
|
return config.initialize(
|
|
77
104
|
db_config=True, simulation_model=["telescope", "parameter_version", "model_version"]
|
|
@@ -86,26 +113,29 @@ def main(): # noqa: D103
|
|
|
86
113
|
|
|
87
114
|
db = db_handler.DatabaseHandler(mongo_db_config=db_config)
|
|
88
115
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
116
|
+
pars = db.get_model_parameter(
|
|
117
|
+
parameter=args_dict["parameter"],
|
|
118
|
+
site=args_dict["site"],
|
|
119
|
+
array_element_name=args_dict.get("telescope"),
|
|
120
|
+
parameter_version=args_dict.get("parameter_version"),
|
|
121
|
+
model_version=args_dict.get("model_version"),
|
|
122
|
+
)
|
|
123
|
+
if args_dict["export_model_file"] or args_dict["export_model_file_as_table"]:
|
|
124
|
+
table = db.export_model_file(
|
|
92
125
|
parameter=args_dict["parameter"],
|
|
93
|
-
parameter_version=args_dict["parameter_version"],
|
|
94
126
|
site=args_dict["site"],
|
|
95
127
|
array_element_name=args_dict["telescope"],
|
|
128
|
+
parameter_version=args_dict.get("parameter_version"),
|
|
129
|
+
model_version=args_dict.get("model_version"),
|
|
130
|
+
export_file_as_table=args_dict["export_model_file_as_table"],
|
|
96
131
|
)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
)
|
|
105
|
-
else:
|
|
106
|
-
raise ValueError("Either 'parameter_version' or 'model_version' must be provided.")
|
|
107
|
-
if args_dict["parameter"] not in pars:
|
|
108
|
-
raise KeyError(f"The requested parameter, {args_dict['parameter']}, does not exist.")
|
|
132
|
+
param_value = pars[args_dict["parameter"]]["value"]
|
|
133
|
+
table_file = Path(io_handler.IOHandler().get_output_directory()) / f"{param_value}"
|
|
134
|
+
logger.info(f"Exported model file {param_value} to {table_file}")
|
|
135
|
+
if table and table_file.suffix != ".ecsv":
|
|
136
|
+
table.write(table_file.with_suffix(".ecsv"), format="ascii.ecsv", overwrite=True)
|
|
137
|
+
logger.info(f"Exported model file {param_value} to {table_file.with_suffix('.ecsv')}")
|
|
138
|
+
|
|
109
139
|
if args_dict["output_file"] is not None:
|
|
110
140
|
_output_file = (
|
|
111
141
|
Path(io_handler.IOHandler().get_output_directory()) / args_dict["output_file"]
|
|
@@ -12,7 +12,6 @@ import logging
|
|
|
12
12
|
|
|
13
13
|
from simtools.configuration import configurator
|
|
14
14
|
from simtools.io_operations import io_handler
|
|
15
|
-
from simtools.model.telescope_model import TelescopeModel
|
|
16
15
|
from simtools.reporting.docs_read_parameters import ReadParameters
|
|
17
16
|
from simtools.utils import general as gen
|
|
18
17
|
|
|
@@ -46,17 +45,9 @@ def main(): # noqa: D103
|
|
|
46
45
|
logger = logging.getLogger()
|
|
47
46
|
logger.setLevel(gen.get_log_level_from_user(args["log_level"]))
|
|
48
47
|
|
|
49
|
-
telescope_model = TelescopeModel(
|
|
50
|
-
site=args["site"],
|
|
51
|
-
telescope_name=args["telescope"],
|
|
52
|
-
model_version=args["model_version"],
|
|
53
|
-
label=label_name,
|
|
54
|
-
mongo_db_config=db_config,
|
|
55
|
-
)
|
|
56
|
-
|
|
57
48
|
ReadParameters(
|
|
58
49
|
db_config,
|
|
59
|
-
|
|
50
|
+
args,
|
|
60
51
|
output_path,
|
|
61
52
|
).produce_array_element_report()
|
|
62
53
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
2
|
|
|
3
3
|
r"""
|
|
4
|
-
Produce
|
|
4
|
+
Produce a model parameter report per array element.
|
|
5
5
|
|
|
6
6
|
The markdown reports include detailed information on each parameter,
|
|
7
7
|
comparing their values over various model versions.
|
|
@@ -12,7 +12,6 @@ import logging
|
|
|
12
12
|
|
|
13
13
|
from simtools.configuration import configurator
|
|
14
14
|
from simtools.io_operations import io_handler
|
|
15
|
-
from simtools.model.telescope_model import TelescopeModel
|
|
16
15
|
from simtools.reporting.docs_read_parameters import ReadParameters
|
|
17
16
|
from simtools.utils import general as gen
|
|
18
17
|
|
|
@@ -24,9 +23,7 @@ def _parse(label):
|
|
|
24
23
|
description=("Produce a markdown report for model parameters."),
|
|
25
24
|
)
|
|
26
25
|
|
|
27
|
-
return config.initialize(
|
|
28
|
-
db_config=True, simulation_model=["site", "telescope", "model_version"]
|
|
29
|
-
)
|
|
26
|
+
return config.initialize(db_config=True, simulation_model=["site", "telescope"])
|
|
30
27
|
|
|
31
28
|
|
|
32
29
|
def main(): # noqa: D103
|
|
@@ -38,24 +35,14 @@ def main(): # noqa: D103
|
|
|
38
35
|
logger = logging.getLogger()
|
|
39
36
|
logger.setLevel(gen.get_log_level_from_user(args["log_level"]))
|
|
40
37
|
|
|
41
|
-
telescope_model = TelescopeModel(
|
|
42
|
-
site=args["site"],
|
|
43
|
-
telescope_name=args["telescope"],
|
|
44
|
-
model_version=args["model_version"],
|
|
45
|
-
label=label_name,
|
|
46
|
-
mongo_db_config=db_config,
|
|
47
|
-
)
|
|
48
|
-
|
|
49
38
|
ReadParameters(
|
|
50
39
|
db_config,
|
|
51
|
-
|
|
40
|
+
args,
|
|
52
41
|
output_path,
|
|
53
42
|
).produce_model_parameter_reports()
|
|
54
43
|
|
|
55
44
|
logger.info(
|
|
56
|
-
f"Markdown report generated for {args['site']}"
|
|
57
|
-
f" Telescope {args['telescope']} (v{args['model_version']}):"
|
|
58
|
-
f" {output_path}"
|
|
45
|
+
f"Markdown report generated for {args['site']} Telescope {args['telescope']}: {output_path}"
|
|
59
46
|
)
|
|
60
47
|
|
|
61
48
|
|
|
@@ -17,6 +17,9 @@ from pathlib import Path
|
|
|
17
17
|
|
|
18
18
|
import simtools.utils.general as gen
|
|
19
19
|
from simtools.configuration import configurator
|
|
20
|
+
from simtools.constants import PLOT_CONFIG_SCHEMA
|
|
21
|
+
from simtools.data_model import schema
|
|
22
|
+
from simtools.data_model.metadata_collector import MetadataCollector
|
|
20
23
|
from simtools.io_operations import io_handler
|
|
21
24
|
from simtools.visualization import plot_tables
|
|
22
25
|
|
|
@@ -54,7 +57,7 @@ def _parse(label, description, usage):
|
|
|
54
57
|
type=str,
|
|
55
58
|
required=True,
|
|
56
59
|
)
|
|
57
|
-
return config.initialize(db_config=True)
|
|
60
|
+
return config.initialize(db_config=True, simulation_model=["telescope"])
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
def main():
|
|
@@ -70,7 +73,10 @@ def main():
|
|
|
70
73
|
io_handler_instance = io_handler.IOHandler()
|
|
71
74
|
|
|
72
75
|
plot_config = gen.convert_keys_in_dict_to_lowercase(
|
|
73
|
-
|
|
76
|
+
schema.validate_dict_using_schema(
|
|
77
|
+
gen.collect_data_from_file(args_dict["plot_config"]),
|
|
78
|
+
PLOT_CONFIG_SCHEMA,
|
|
79
|
+
)
|
|
74
80
|
)
|
|
75
81
|
|
|
76
82
|
plot_tables.plot(
|
|
@@ -79,6 +85,12 @@ def main():
|
|
|
79
85
|
db_config=db_config_,
|
|
80
86
|
)
|
|
81
87
|
|
|
88
|
+
MetadataCollector.dump(
|
|
89
|
+
args_dict,
|
|
90
|
+
io_handler_instance.get_output_file(args_dict["output_file"]),
|
|
91
|
+
add_activity_name=True,
|
|
92
|
+
)
|
|
93
|
+
|
|
82
94
|
|
|
83
95
|
if __name__ == "__main__":
|
|
84
96
|
main()
|
|
@@ -11,6 +11,10 @@ event_data_file (str, required)
|
|
|
11
11
|
Path to the file containing the event data.
|
|
12
12
|
loss_fraction (float, required)
|
|
13
13
|
Fraction of events to be lost.
|
|
14
|
+
telescope_ids (list of int, optional)
|
|
15
|
+
List of telescope IDs to filter the events (default is None).
|
|
16
|
+
Definition of the telescope IDs can be found
|
|
17
|
+
in the telescope definition file used for simulations.
|
|
14
18
|
|
|
15
19
|
|
|
16
20
|
Example
|
|
@@ -19,17 +23,17 @@ Derive limits for a given file with a specified loss fraction.
|
|
|
19
23
|
|
|
20
24
|
.. code-block:: console
|
|
21
25
|
|
|
22
|
-
simtools-production-derive-limits\\
|
|
26
|
+
simtools-production-derive-corsika-limits\\
|
|
23
27
|
--event_data_file path/to/event_data_file.hdf5 \\
|
|
24
|
-
--loss_fraction 1e-6
|
|
28
|
+
--loss_fraction 1e-6 \\
|
|
29
|
+
--telescope_ids 1 2 3
|
|
25
30
|
"""
|
|
26
31
|
|
|
27
32
|
import logging
|
|
28
33
|
|
|
29
34
|
import simtools.utils.general as gen
|
|
30
35
|
from simtools.configuration import configurator
|
|
31
|
-
from simtools.
|
|
32
|
-
from simtools.production_configuration.limits_calculation import LimitCalculator
|
|
36
|
+
from simtools.production_configuration.derive_corsika_limits import LimitCalculator
|
|
33
37
|
|
|
34
38
|
_logger = logging.getLogger(__name__)
|
|
35
39
|
|
|
@@ -44,6 +48,10 @@ def _parse():
|
|
|
44
48
|
The event data file.
|
|
45
49
|
loss_fraction: float
|
|
46
50
|
Loss fraction of events for limit derivation.
|
|
51
|
+
telescope_ids: list of int, optional
|
|
52
|
+
List of telescope IDs to filter the events (default is None).
|
|
53
|
+
Definition of the telescope IDs can be found in the telescope
|
|
54
|
+
definition file used for simulations.
|
|
47
55
|
|
|
48
56
|
Returns
|
|
49
57
|
-------
|
|
@@ -63,6 +71,12 @@ def _parse():
|
|
|
63
71
|
config.parser.add_argument(
|
|
64
72
|
"--loss_fraction", type=float, required=True, help="Fraction of events to be lost."
|
|
65
73
|
)
|
|
74
|
+
config.parser.add_argument(
|
|
75
|
+
"--telescope_ids",
|
|
76
|
+
type=int,
|
|
77
|
+
nargs="*",
|
|
78
|
+
help="List of telescope IDs to filter the events as used in sim_telarray.",
|
|
79
|
+
)
|
|
66
80
|
return config.initialize(db_config=False)
|
|
67
81
|
|
|
68
82
|
|
|
@@ -75,11 +89,9 @@ def main():
|
|
|
75
89
|
|
|
76
90
|
event_data_file_path = args_dict["event_data_file"]
|
|
77
91
|
loss_fraction = args_dict["loss_fraction"]
|
|
92
|
+
telescope_ids = args_dict.get("telescope_ids")
|
|
78
93
|
|
|
79
|
-
|
|
80
|
-
tables = read_hdf5(event_data_file_path)
|
|
81
|
-
|
|
82
|
-
calculator = LimitCalculator(tables)
|
|
94
|
+
calculator = LimitCalculator(event_data_file_path, telescope_list=telescope_ids)
|
|
83
95
|
|
|
84
96
|
lower_energy_limit = calculator.compute_lower_energy_limit(loss_fraction)
|
|
85
97
|
_logger.info(f"Lower energy threshold: {lower_energy_limit}")
|