gammasimtools 0.12.0__py3-none-any.whl → 0.14.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.12.0.dist-info → gammasimtools-0.14.0.dist-info}/METADATA +3 -3
- {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/RECORD +257 -263
- {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/WHEEL +1 -1
- {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/entry_points.txt +4 -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_add_file_to_db.py +15 -0
- simtools/applications/db_add_value_from_json_to_db.py +18 -1
- simtools/applications/db_get_parameter_from_db.py +52 -22
- simtools/applications/derive_ctao_array_layouts.py +120 -0
- simtools/applications/derive_photon_electron_spectrum.py +30 -2
- simtools/applications/docs_produce_array_element_report.py +42 -26
- simtools/applications/docs_produce_model_parameter_reports.py +28 -21
- simtools/applications/generate_simtel_event_data.py +117 -0
- simtools/applications/plot_tabular_data.py +14 -2
- simtools/applications/print_version.py +81 -0
- simtools/applications/production_derive_corsika_limits.py +240 -0
- simtools/applications/production_scale_events.py +59 -36
- simtools/applications/run_application.py +47 -18
- simtools/applications/simulate_light_emission.py +115 -247
- simtools/applications/simulate_prod_htcondor_generator.py +2 -2
- 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 +169 -17
- simtools/constants.py +7 -0
- simtools/data_model/metadata_collector.py +159 -61
- simtools/data_model/model_data_writer.py +18 -61
- simtools/data_model/schema.py +2 -1
- simtools/data_model/validate_data.py +5 -3
- simtools/db/db_handler.py +123 -33
- simtools/dependencies.py +38 -3
- simtools/layout/array_layout.py +1 -0
- simtools/layout/ctao_array_layouts.py +172 -0
- simtools/model/array_model.py +3 -4
- simtools/model/model_parameter.py +30 -118
- simtools/production_configuration/derive_corsika_limits.py +328 -0
- simtools/production_configuration/event_scaler.py +2 -2
- simtools/ray_tracing/mirror_panel_psf.py +1 -1
- simtools/reporting/docs_auto_report_generator.py +217 -0
- simtools/reporting/docs_read_parameters.py +298 -143
- simtools/schemas/application_workflow.metaschema.yml +3 -0
- simtools/schemas/metadata.metaschema.yml +7 -6
- simtools/schemas/model_parameter.metaschema.yml +13 -4
- simtools/schemas/model_parameter_and_data_schema.metaschema.yml +19 -5
- simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
- simtools/schemas/model_parameters/altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
- simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +3 -3
- simtools/schemas/model_parameters/array_element_position_ground.schema.yml +3 -3
- simtools/schemas/model_parameters/array_element_position_utm.schema.yml +3 -3
- simtools/schemas/model_parameters/array_layouts.schema.yml +3 -0
- simtools/schemas/model_parameters/array_window.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
- simtools/schemas/model_parameters/axes_offsets.schema.yml +2 -2
- simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
- simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
- simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
- simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_prescale.schema.yml +2 -2
- simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_threshold.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
- simtools/schemas/model_parameters/effective_focal_length.schema.yml +5 -5
- simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +2 -2
- simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +2 -2
- simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +4 -4
- simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_max_sum.schema.yml +4 -4
- simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
- simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +20 -20
- simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/focus_offset.schema.yml +4 -4
- simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
- simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
- simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
- simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
- simtools/schemas/model_parameters/led_events.schema.yml +1 -1
- simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
- simtools/schemas/model_parameters/led_var_photons.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/min_photoelectrons.schema.yml +1 -1
- simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +4 -4
- simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +4 -4
- simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +3 -3
- simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +3 -3
- simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +45 -0
- simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +2 -2
- simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_offaxis.schema.yml +5 -5
- simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
- simtools/schemas/model_parameters/{nsb_skymap.schema.yml → nsb_sky_map.schema.yml} +1 -1
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +2 -2
- simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
- simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
- simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
- simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
- simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
- simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
- simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_transit_time.schema.yml +4 -4
- simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +8 -4
- simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +20 -20
- simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/random_focal_length.schema.yml +2 -2
- simtools/schemas/model_parameters/random_mono_probability.schema.yml +38 -0
- simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_latitude.schema.yml +4 -1
- simtools/schemas/model_parameters/reference_point_longitude.schema.yml +4 -1
- simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +5 -5
- simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +20 -20
- simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/stars.schema.yml +36 -0
- simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
- simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/telescope_transmission.schema.yml +6 -6
- simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
- simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
- simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
- simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
- simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +4 -4
- simtools/schemas/model_parameters/trigger_pixels.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_config_writer.py +70 -38
- simtools/simtel/simtel_io_event_reader.py +278 -0
- simtools/simtel/simtel_io_event_writer.py +317 -0
- simtools/simtel/simtel_table_reader.py +4 -0
- simtools/simtel/simulator_light_emission.py +181 -67
- simtools/simulator.py +2 -2
- simtools/testing/configuration.py +17 -0
- simtools/utils/general.py +83 -16
- simtools/utils/geometry.py +19 -0
- simtools/utils/names.py +14 -3
- simtools/visualization/plot_tables.py +25 -20
- simtools/visualization/visualize.py +73 -25
- simtools/_dev_version/__init__.py +0 -9
- simtools/applications/__init__.py +0 -0
- simtools/applications/production_derive_limits.py +0 -95
- 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/simtel/simtel_io_events.py +0 -265
- simtools/testing/__init__.py +0 -0
- simtools/utils/__init__.py +0 -0
- simtools/visualization/__init__.py +0 -0
- {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info/licenses}/LICENSE +0 -0
- {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/python3
|
|
2
|
+
|
|
3
|
+
r"""Class to automate generation of all reports according to command line inputs."""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from collections.abc import Generator
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from simtools.db import db_handler
|
|
10
|
+
from simtools.reporting.docs_read_parameters import ReadParameters
|
|
11
|
+
from simtools.utils import names
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ReportGenerator:
|
|
17
|
+
"""Automate report generation."""
|
|
18
|
+
|
|
19
|
+
def __init__(self, db_config, args, output_path):
|
|
20
|
+
"""Initialise class."""
|
|
21
|
+
self._logger = logging.getLogger(__name__)
|
|
22
|
+
self.db = db_handler.DatabaseHandler(mongo_db_config=db_config)
|
|
23
|
+
self.db_config = db_config
|
|
24
|
+
self.args = args
|
|
25
|
+
self.output_path = output_path
|
|
26
|
+
|
|
27
|
+
def _add_design_models_to_telescopes(self, model_version, telescopes):
|
|
28
|
+
"""Add design models to the list of telescopes for a given model version."""
|
|
29
|
+
updated_telescopes = telescopes.copy() # Copy original list to avoid modifying it directly
|
|
30
|
+
for telescope in telescopes:
|
|
31
|
+
design_model = self.db.get_design_model(model_version, telescope) # Get design model
|
|
32
|
+
if design_model and design_model not in updated_telescopes:
|
|
33
|
+
updated_telescopes.append(design_model) # Add design model if not already present
|
|
34
|
+
return updated_telescopes
|
|
35
|
+
|
|
36
|
+
def _filter_telescopes_by_site(self, telescopes, selected_sites):
|
|
37
|
+
"""Filter telescopes by selected sites."""
|
|
38
|
+
filtered_telescopes = []
|
|
39
|
+
for telescope in telescopes:
|
|
40
|
+
sites = names.get_site_from_array_element_name(telescope)
|
|
41
|
+
sites = sites if isinstance(sites, list) else [sites]
|
|
42
|
+
if any(site in selected_sites for site in sites):
|
|
43
|
+
filtered_telescopes.append(telescope)
|
|
44
|
+
return filtered_telescopes
|
|
45
|
+
|
|
46
|
+
def _generate_array_element_report_combinations(self):
|
|
47
|
+
"""Generate combinations of model versions, telescopes, and sites for array element reports.
|
|
48
|
+
|
|
49
|
+
This generator function yields tuples of (model_version, telescope, site) for array element
|
|
50
|
+
report generation based on the input arguments and flags.
|
|
51
|
+
|
|
52
|
+
The function filters telescopes by site and ensures that design models are included
|
|
53
|
+
when necessary.
|
|
54
|
+
|
|
55
|
+
Yields
|
|
56
|
+
------
|
|
57
|
+
tuple[str, str, str]: A tuple containing (model_version, telescope, site) for each
|
|
58
|
+
valid combination based on the input arguments.
|
|
59
|
+
"""
|
|
60
|
+
all_sites = names.site_names()
|
|
61
|
+
|
|
62
|
+
model_versions = (
|
|
63
|
+
self.db.get_model_versions()
|
|
64
|
+
if self.args.get("all_model_versions")
|
|
65
|
+
else [self.args["model_version"]]
|
|
66
|
+
)
|
|
67
|
+
selected_sites = all_sites if self.args.get("all_sites") else {self.args["site"]}
|
|
68
|
+
|
|
69
|
+
def get_telescopes(model_version):
|
|
70
|
+
"""Get list of telescopes depending on input arguments."""
|
|
71
|
+
if not self.args.get("all_telescopes"):
|
|
72
|
+
return [self.args["telescope"]]
|
|
73
|
+
telescopes = self.db.get_array_elements(model_version)
|
|
74
|
+
all_telescopes = self._add_design_models_to_telescopes(model_version, telescopes)
|
|
75
|
+
return self._filter_telescopes_by_site(all_telescopes, selected_sites)
|
|
76
|
+
|
|
77
|
+
def get_valid_sites(telescope):
|
|
78
|
+
sites = names.get_site_from_array_element_name(telescope)
|
|
79
|
+
sites = sites if isinstance(sites, list) else [sites]
|
|
80
|
+
return [site for site in sites if site in selected_sites]
|
|
81
|
+
|
|
82
|
+
def generate_combinations():
|
|
83
|
+
for version in model_versions:
|
|
84
|
+
telescopes = get_telescopes(version)
|
|
85
|
+
for telescope in telescopes:
|
|
86
|
+
for site in get_valid_sites(telescope):
|
|
87
|
+
yield version, telescope, site
|
|
88
|
+
|
|
89
|
+
return generate_combinations()
|
|
90
|
+
|
|
91
|
+
def _generate_single_array_element_report(self, model_version, telescope, site):
|
|
92
|
+
"""Generate a single report with given parameters."""
|
|
93
|
+
self.args.update(
|
|
94
|
+
{
|
|
95
|
+
"telescope": telescope,
|
|
96
|
+
"site": site,
|
|
97
|
+
"model_version": model_version,
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
output_path = Path(self.output_path) / str(model_version)
|
|
102
|
+
ReadParameters(self.db_config, self.args, output_path).produce_array_element_report()
|
|
103
|
+
|
|
104
|
+
logger.info(
|
|
105
|
+
f"Markdown report generated for {site} "
|
|
106
|
+
f"Telescope {telescope} (v{model_version}): {output_path}"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def auto_generate_array_element_reports(self):
|
|
110
|
+
"""Generate all reports based on which --all_* flag is passed."""
|
|
111
|
+
if self.args.get("observatory"):
|
|
112
|
+
self.auto_generate_observatory_reports()
|
|
113
|
+
return
|
|
114
|
+
for params in self._generate_array_element_report_combinations():
|
|
115
|
+
self._generate_single_array_element_report(*params)
|
|
116
|
+
|
|
117
|
+
def _get_telescopes_from_layout(self, site: str) -> set[str]:
|
|
118
|
+
"""Get unique telescopes for a given site across all versions."""
|
|
119
|
+
if not self.args.get("all_telescopes"):
|
|
120
|
+
return {self.args["telescope"]}
|
|
121
|
+
|
|
122
|
+
# Get layouts for all versions for this site
|
|
123
|
+
layouts = self.db.get_model_parameters_for_all_model_versions(
|
|
124
|
+
site=site, array_element_name=f"OBS-{site}", collection="sites"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# Collect all telescopes from hyper array layouts
|
|
128
|
+
all_telescopes = set()
|
|
129
|
+
for key, version_data in layouts.items():
|
|
130
|
+
layout = version_data.get("array_layouts", {}).get("value", [])
|
|
131
|
+
hyper_array = next(
|
|
132
|
+
(layout["elements"] for layout in layout if layout["name"] == "hyper_array"), []
|
|
133
|
+
)
|
|
134
|
+
all_telescopes.update(hyper_array)
|
|
135
|
+
all_telescopes.update(self._add_design_models_to_telescopes(key, list(all_telescopes)))
|
|
136
|
+
|
|
137
|
+
return all_telescopes
|
|
138
|
+
|
|
139
|
+
def _get_valid_sites_for_telescope(self, telescope: str) -> list[str]:
|
|
140
|
+
"""Get valid sites for a given telescope."""
|
|
141
|
+
sites = names.get_site_from_array_element_name(telescope)
|
|
142
|
+
return [sites] if not isinstance(sites, list) else sites
|
|
143
|
+
|
|
144
|
+
def _generate_parameter_report_combinations(self) -> Generator[tuple[str, str], None, None]:
|
|
145
|
+
"""Generate combinations of telescopes and sites for report generation."""
|
|
146
|
+
if not self.args.get("all_telescopes"):
|
|
147
|
+
# For a specific telescope, get its valid sites regardless of --all_sites
|
|
148
|
+
telescope = self.args["telescope"]
|
|
149
|
+
for site in self._get_valid_sites_for_telescope(telescope):
|
|
150
|
+
yield telescope, site
|
|
151
|
+
else:
|
|
152
|
+
# For --all_telescopes, use selected sites to get telescopes
|
|
153
|
+
all_sites = names.site_names()
|
|
154
|
+
selected_sites = all_sites if self.args.get("all_sites") else {self.args["site"]}
|
|
155
|
+
|
|
156
|
+
for site in selected_sites:
|
|
157
|
+
telescopes = self._get_telescopes_from_layout(site)
|
|
158
|
+
yield from ((telescope, site) for telescope in telescopes)
|
|
159
|
+
|
|
160
|
+
def auto_generate_parameter_reports(self):
|
|
161
|
+
"""Generate parameter reports for all telescope-site combinations."""
|
|
162
|
+
for telescope, site in self._generate_parameter_report_combinations():
|
|
163
|
+
self.args.update(
|
|
164
|
+
{
|
|
165
|
+
"telescope": telescope,
|
|
166
|
+
"site": site,
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
ReadParameters(
|
|
171
|
+
self.db_config, self.args, self.output_path
|
|
172
|
+
).produce_model_parameter_reports()
|
|
173
|
+
|
|
174
|
+
logger.info(
|
|
175
|
+
f"Markdown report generated for {site} Telescope {telescope}: {self.output_path}"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
def _generate_observatory_report_combinations(self) -> Generator[tuple[str, str], None, None]:
|
|
179
|
+
"""Generate combinations of sites and model versions for observatory reports.
|
|
180
|
+
|
|
181
|
+
Yields
|
|
182
|
+
------
|
|
183
|
+
tuple[str, str]: A tuple containing (site, model_version) for each valid combination
|
|
184
|
+
based on the input arguments.
|
|
185
|
+
"""
|
|
186
|
+
all_sites = names.site_names()
|
|
187
|
+
selected_sites = all_sites if self.args.get("all_sites") else {self.args["site"]}
|
|
188
|
+
|
|
189
|
+
model_versions = (
|
|
190
|
+
self.db.get_model_versions()
|
|
191
|
+
if self.args.get("all_model_versions")
|
|
192
|
+
else [self.args["model_version"]]
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
for site in selected_sites:
|
|
196
|
+
for version in model_versions:
|
|
197
|
+
yield site, version
|
|
198
|
+
|
|
199
|
+
def _generate_single_observatory_report(self, site: str, model_version: str):
|
|
200
|
+
"""Generate a single observatory report with given parameters."""
|
|
201
|
+
self.args.update(
|
|
202
|
+
{
|
|
203
|
+
"site": site,
|
|
204
|
+
"model_version": model_version,
|
|
205
|
+
"observatory": True,
|
|
206
|
+
}
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
output_path = Path(self.output_path) / str(model_version)
|
|
210
|
+
ReadParameters(self.db_config, self.args, output_path).produce_observatory_report()
|
|
211
|
+
|
|
212
|
+
logger.info(f"Observatory report generated for {site} (v{model_version}): {output_path}")
|
|
213
|
+
|
|
214
|
+
def auto_generate_observatory_reports(self):
|
|
215
|
+
"""Generate all observatory reports based on which --all_* flags are passed."""
|
|
216
|
+
for params in self._generate_observatory_report_combinations():
|
|
217
|
+
self._generate_single_observatory_report(*params)
|