gammasimtools 0.23.0__py3-none-any.whl → 0.25.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.25.0.dist-info}/METADATA +1 -1
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.25.0.dist-info}/RECORD +89 -85
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.25.0.dist-info}/entry_points.txt +1 -0
- simtools/_version.py +2 -2
- simtools/application_control.py +54 -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/derive_psf_parameters.py +5 -0
- simtools/applications/derive_pulse_shape_parameters.py +195 -0
- simtools/applications/generate_array_config.py +1 -1
- simtools/applications/maintain_simulation_model_add_production.py +11 -21
- simtools/applications/plot_array_layout.py +63 -1
- simtools/applications/production_generate_grid.py +1 -1
- simtools/applications/simulate_flasher.py +3 -2
- simtools/applications/simulate_pedestals.py +1 -1
- simtools/applications/simulate_prod.py +8 -23
- simtools/applications/simulate_prod_htcondor_generator.py +7 -0
- simtools/applications/submit_array_layouts.py +7 -5
- simtools/applications/validate_camera_fov.py +1 -1
- simtools/applications/validate_cumulative_psf.py +2 -2
- simtools/applications/validate_file_using_schema.py +49 -123
- simtools/applications/validate_optics.py +1 -1
- simtools/configuration/commandline_parser.py +15 -15
- simtools/configuration/configurator.py +1 -1
- simtools/corsika/corsika_config.py +199 -91
- simtools/data_model/model_data_writer.py +15 -3
- simtools/data_model/schema.py +145 -36
- simtools/data_model/validate_data.py +82 -48
- simtools/db/db_handler.py +61 -294
- simtools/db/db_model_upload.py +3 -2
- simtools/db/mongo_db.py +626 -0
- simtools/dependencies.py +38 -17
- simtools/io/eventio_handler.py +128 -0
- simtools/job_execution/htcondor_script_generator.py +0 -2
- simtools/layout/array_layout.py +7 -7
- simtools/layout/array_layout_utils.py +4 -4
- simtools/model/array_model.py +72 -72
- simtools/model/calibration_model.py +12 -9
- simtools/model/model_parameter.py +196 -160
- simtools/model/model_repository.py +176 -39
- 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_analysis.py +11 -8
- simtools/ray_tracing/psf_parameter_optimisation.py +823 -680
- simtools/reporting/docs_auto_report_generator.py +1 -1
- simtools/reporting/docs_read_parameters.py +72 -11
- simtools/runners/corsika_runner.py +12 -3
- simtools/runners/corsika_simtel_runner.py +6 -0
- simtools/runners/runner_services.py +17 -7
- simtools/runners/simtel_runner.py +12 -54
- simtools/schemas/model_parameters/flasher_pulse_exp_decay.schema.yml +2 -0
- simtools/schemas/model_parameters/flasher_pulse_shape.schema.yml +50 -0
- simtools/schemas/model_parameters/flasher_pulse_width.schema.yml +2 -0
- simtools/schemas/simulation_models_info.schema.yml +4 -1
- simtools/simtel/pulse_shapes.py +268 -0
- simtools/simtel/simtel_config_writer.py +179 -21
- simtools/simtel/simtel_io_event_writer.py +2 -2
- simtools/simtel/simulator_array.py +58 -12
- simtools/simtel/simulator_light_emission.py +45 -8
- simtools/simulator.py +361 -346
- simtools/testing/assertions.py +110 -10
- simtools/testing/configuration.py +1 -1
- simtools/testing/log_inspector.py +4 -1
- simtools/testing/sim_telarray_metadata.py +1 -1
- simtools/testing/validate_output.py +46 -15
- simtools/utils/names.py +2 -4
- simtools/utils/value_conversion.py +10 -5
- simtools/version.py +61 -0
- simtools/visualization/legend_handlers.py +14 -4
- simtools/visualization/plot_array_layout.py +229 -33
- simtools/visualization/plot_mirrors.py +837 -0
- simtools/visualization/plot_pixels.py +1 -1
- simtools/visualization/plot_psf.py +1 -1
- simtools/visualization/plot_tables.py +1 -1
- simtools/simtel/simtel_io_file_info.py +0 -62
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.25.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.25.0.dist-info}/licenses/LICENSE +0 -0
- {gammasimtools-0.23.0.dist-info → gammasimtools-0.25.0.dist-info}/top_level.txt +0 -0
|
@@ -12,6 +12,7 @@ import numpy as np
|
|
|
12
12
|
from simtools.io import io_handler
|
|
13
13
|
from simtools.model.model_utils import initialize_simulation_models
|
|
14
14
|
from simtools.runners.simtel_runner import SimtelRunner
|
|
15
|
+
from simtools.simtel.simtel_config_writer import SimtelConfigWriter
|
|
15
16
|
from simtools.utils.general import clear_default_sim_telarray_cfg_directories
|
|
16
17
|
from simtools.utils.geometry import fiducial_radius_from_shape
|
|
17
18
|
|
|
@@ -335,18 +336,54 @@ class SimulatorLightEmission(SimtelRunner):
|
|
|
335
336
|
def _add_flasher_command_options(self):
|
|
336
337
|
"""Add flasher options for all telescope types (ff-1m style)."""
|
|
337
338
|
flasher_xyz = self.calibration_model.get_parameter_value_with_unit("flasher_position")
|
|
338
|
-
|
|
339
|
+
camera_diam_cm = (
|
|
339
340
|
self.telescope_model.get_parameter_value_with_unit("camera_body_diameter")
|
|
340
341
|
.to(u.cm)
|
|
341
|
-
.value
|
|
342
|
-
self.telescope_model.get_parameter_value("camera_body_shape"),
|
|
342
|
+
.value
|
|
343
343
|
)
|
|
344
|
+
camera_shape = self.telescope_model.get_parameter_value("camera_body_shape")
|
|
345
|
+
camera_radius = fiducial_radius_from_shape(camera_diam_cm, camera_shape)
|
|
344
346
|
flasher_wavelength = self.calibration_model.get_parameter_value_with_unit(
|
|
345
347
|
"flasher_wavelength"
|
|
346
348
|
)
|
|
347
349
|
dist_cm = self.calculate_distance_focal_plane_calibration_device().to(u.cm).value
|
|
348
350
|
angular_distribution = self._get_angular_distribution_string_for_sim_telarray()
|
|
349
351
|
|
|
352
|
+
# Build pulse table for ff-1m using model width/exp parameters; else use token.
|
|
353
|
+
pulse_arg = self._get_pulse_shape_string_for_sim_telarray()
|
|
354
|
+
pulse_shape = self.calibration_model.get_parameter_value("flasher_pulse_shape")
|
|
355
|
+
width_q = self.calibration_model.get_parameter_value_with_unit("flasher_pulse_width")
|
|
356
|
+
exp_q = self.calibration_model.get_parameter_value_with_unit("flasher_pulse_exp_decay")
|
|
357
|
+
if (
|
|
358
|
+
isinstance(exp_q, u.Quantity)
|
|
359
|
+
and isinstance(width_q, u.Quantity)
|
|
360
|
+
and pulse_shape == "Gauss-Exponential"
|
|
361
|
+
):
|
|
362
|
+
try:
|
|
363
|
+
base_dir = self.io_handler.get_output_directory("pulse_shapes")
|
|
364
|
+
|
|
365
|
+
def _sanitize_name(value):
|
|
366
|
+
return "".join(
|
|
367
|
+
ch if (ch.isalnum() or ch in ("-", "_")) else "_" for ch in str(value)
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
tel = self.light_emission_config.get("telescope") or "telescope"
|
|
371
|
+
cal = self.light_emission_config.get("light_source") or "calibration"
|
|
372
|
+
fname = f"flasher_pulse_shape_{_sanitize_name(tel)}_{_sanitize_name(cal)}.dat"
|
|
373
|
+
table_path = base_dir / fname
|
|
374
|
+
fadc_bins = self.telescope_model.get_parameter_value("fadc_sum_bins")
|
|
375
|
+
|
|
376
|
+
SimtelConfigWriter.write_lightpulse_table_gauss_expconv(
|
|
377
|
+
file_path=table_path,
|
|
378
|
+
width_ns=width_q.to(u.ns).value,
|
|
379
|
+
exp_decay_ns=exp_q.to(u.ns).value,
|
|
380
|
+
fadc_sum_bins=fadc_bins,
|
|
381
|
+
time_margin_ns=5.0,
|
|
382
|
+
)
|
|
383
|
+
pulse_arg = str(table_path)
|
|
384
|
+
except (ValueError, OSError) as err:
|
|
385
|
+
self._logger.warning(f"Failed to write pulse shape table, using token: {err}")
|
|
386
|
+
|
|
350
387
|
return [
|
|
351
388
|
f"--events {self.light_emission_config['number_of_events']}",
|
|
352
389
|
f"--photons {self.light_emission_config['flasher_photons']}",
|
|
@@ -355,7 +392,7 @@ class SimulatorLightEmission(SimtelRunner):
|
|
|
355
392
|
f"--distance {dist_cm}",
|
|
356
393
|
f"--camera-radius {camera_radius}",
|
|
357
394
|
f"--spectrum {int(flasher_wavelength.to(u.nm).value)}",
|
|
358
|
-
f"--lightpulse {
|
|
395
|
+
f"--lightpulse {pulse_arg}",
|
|
359
396
|
f"--angular-distribution {angular_distribution}",
|
|
360
397
|
]
|
|
361
398
|
|
|
@@ -475,9 +512,8 @@ class SimulatorLightEmission(SimtelRunner):
|
|
|
475
512
|
str
|
|
476
513
|
The angular distribution string.
|
|
477
514
|
"""
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
).lower()
|
|
515
|
+
opt = self.calibration_model.get_parameter_value("flasher_angular_distribution")
|
|
516
|
+
option_string = str(opt).lower() if opt is not None else ""
|
|
481
517
|
width = self.calibration_model.get_parameter_value_with_unit(
|
|
482
518
|
"flasher_angular_distribution_width"
|
|
483
519
|
)
|
|
@@ -492,6 +528,7 @@ class SimulatorLightEmission(SimtelRunner):
|
|
|
492
528
|
str
|
|
493
529
|
The pulse shape string.
|
|
494
530
|
"""
|
|
495
|
-
|
|
531
|
+
opt = self.calibration_model.get_parameter_value("flasher_pulse_shape")
|
|
532
|
+
option_string = str(opt).lower() if opt is not None else ""
|
|
496
533
|
width = self.calibration_model.get_parameter_value_with_unit("flasher_pulse_width")
|
|
497
534
|
return f"{option_string}:{width.to(u.ns).value}" if width is not None else option_string
|