gammasimtools 0.8.1__py3-none-any.whl → 0.9.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.8.1.dist-info → gammasimtools-0.9.0.dist-info}/METADATA +4 -3
- gammasimtools-0.9.0.dist-info/RECORD +350 -0
- {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/WHEEL +1 -1
- {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/entry_points.txt +2 -0
- simtools/_dev_version/__init__.py +9 -0
- simtools/_version.py +2 -2
- simtools/applications/convert_all_model_parameters_from_simtel.py +1 -1
- simtools/applications/convert_geo_coordinates_of_array_elements.py +8 -9
- simtools/applications/convert_model_parameter_from_simtel.py +1 -1
- simtools/applications/db_add_model_parameters_from_repository_to_db.py +2 -10
- simtools/applications/db_add_value_from_json_to_db.py +1 -9
- simtools/applications/db_get_array_layouts_from_db.py +3 -1
- simtools/applications/db_get_parameter_from_db.py +1 -1
- simtools/applications/derive_mirror_rnda.py +10 -1
- simtools/applications/derive_psf_parameters.py +1 -1
- simtools/applications/generate_array_config.py +1 -5
- simtools/applications/generate_regular_arrays.py +9 -6
- simtools/applications/generate_simtel_array_histograms.py +1 -1
- simtools/applications/plot_array_layout.py +3 -1
- simtools/applications/plot_tabular_data.py +84 -0
- simtools/applications/production_scale_events.py +1 -2
- simtools/applications/simulate_light_emission.py +2 -2
- simtools/applications/simulate_prod.py +24 -59
- simtools/applications/simulate_prod_htcondor_generator.py +95 -0
- simtools/applications/submit_data_from_external.py +1 -1
- simtools/applications/validate_camera_efficiency.py +1 -1
- simtools/applications/validate_camera_fov.py +4 -8
- simtools/applications/validate_cumulative_psf.py +3 -7
- simtools/applications/validate_file_using_schema.py +31 -23
- simtools/applications/validate_optics.py +3 -4
- simtools/camera_efficiency.py +1 -4
- simtools/configuration/commandline_parser.py +9 -15
- simtools/configuration/configurator.py +6 -19
- simtools/constants.py +3 -3
- simtools/data_model/metadata_collector.py +19 -1
- simtools/data_model/metadata_model.py +18 -5
- simtools/data_model/model_data_writer.py +1 -1
- simtools/data_model/validate_data.py +67 -10
- simtools/db/db_handler.py +92 -315
- simtools/io_operations/legacy_data_handler.py +61 -0
- simtools/job_execution/htcondor_script_generator.py +133 -0
- simtools/job_execution/job_manager.py +77 -50
- simtools/model/array_model.py +30 -26
- simtools/model/calibration_model.py +10 -10
- simtools/model/camera.py +79 -63
- simtools/model/mirrors.py +8 -6
- simtools/model/model_parameter.py +42 -12
- simtools/model/model_utils.py +6 -6
- simtools/model/site_model.py +2 -2
- simtools/model/telescope_model.py +26 -22
- simtools/ray_tracing/mirror_panel_psf.py +47 -27
- simtools/runners/corsika_runner.py +14 -3
- simtools/runners/runner_services.py +3 -3
- simtools/runners/simtel_runner.py +27 -8
- simtools/schemas/integration_tests_config.metaschema.yml +15 -5
- simtools/schemas/model_parameter.metaschema.yml +90 -2
- 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 +1 -1
- simtools/schemas/model_parameters/array_element_position_ground.schema.yml +1 -1
- simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
- simtools/schemas/model_parameters/array_layouts.schema.yml +1 -1
- simtools/schemas/model_parameters/array_triggers.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/atmospheric_transmission.schema.yml +1 -1
- simtools/schemas/model_parameters/axes_offsets.schema.yml +1 -1
- 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_filter_incidence_angle.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/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_first_interaction_height.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_longitudinal_shower_development.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +1 -1
- simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +1 -1
- simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
- simtools/schemas/model_parameters/default_trigger.schema.yml +1 -1
- simtools/schemas/model_parameters/design_model.schema.yml +1 -1
- simtools/schemas/model_parameters/disc_ac_coupled.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_pulse_shape.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_pedsub.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
- simtools/schemas/model_parameters/dsum_prescale.schema.yml +1 -1
- 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_shaping_renormalize.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 +32 -2
- simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
- simtools/schemas/model_parameters/fadc_ac_coupled.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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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_pulse_shape.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/flatfielding.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +1 -1
- simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/focus_offset.schema.yml +1 -1
- 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 +1 -1
- simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +1 -1
- 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 +1 -1
- simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +1 -1
- simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_offaxis.schema.yml +1 -1
- 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 +1 -1
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +1 -1
- simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
- simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +1 -1
- simtools/schemas/model_parameters/optics_properties.schema.yml +1 -1
- simtools/schemas/model_parameters/parabolic_dish.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_photoelectron_spectrum.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_transit_time.schema.yml +1 -1
- simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
- 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_incidence_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +1 -1
- 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/quantum_efficiency.schema.yml +1 -1
- simtools/schemas/model_parameters/random_focal_length.schema.yml +1 -1
- simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_latitude.schema.yml +1 -1
- simtools/schemas/model_parameters/reference_point_longitude.schema.yml +1 -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/sampled_output.schema.yml +1 -1
- simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +1 -1
- 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_incidence_angle.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
- simtools/schemas/model_parameters/secondary_mirror_reflectivity.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/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 +1 -1
- 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 +1 -1
- simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
- simtools/simtel/simtel_table_reader.py +410 -0
- simtools/simtel/simulator_camera_efficiency.py +6 -4
- simtools/simtel/simulator_light_emission.py +2 -2
- simtools/simtel/simulator_ray_tracing.py +1 -2
- simtools/simulator.py +80 -33
- simtools/testing/configuration.py +12 -8
- simtools/testing/helpers.py +5 -5
- simtools/testing/validate_output.py +28 -28
- simtools/utils/general.py +50 -3
- simtools/utils/names.py +3 -4
- simtools/utils/value_conversion.py +9 -1
- simtools/version.py +1 -1
- simtools/visualization/plot_tables.py +106 -0
- simtools/visualization/visualize.py +43 -5
- gammasimtools-0.8.1.dist-info/RECORD +0 -346
- simtools/_dev_version/scm_version.py +0 -10
- simtools/db/db_from_repo_handler.py +0 -106
- {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/LICENSE +0 -0
- {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/top_level.txt +0 -0
|
@@ -198,13 +198,6 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
198
198
|
required=False,
|
|
199
199
|
default=None,
|
|
200
200
|
)
|
|
201
|
-
_job_group.add_argument(
|
|
202
|
-
"--db_simulation_model_url",
|
|
203
|
-
help="simulation model repository URL",
|
|
204
|
-
type=str,
|
|
205
|
-
required=False,
|
|
206
|
-
default=None,
|
|
207
|
-
)
|
|
208
201
|
|
|
209
202
|
def initialize_job_submission_arguments(self):
|
|
210
203
|
"""Initialize job submission arguments for simulator."""
|
|
@@ -243,12 +236,13 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
243
236
|
return
|
|
244
237
|
|
|
245
238
|
_job_group = self.add_argument_group("simulation model")
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
239
|
+
if "model_version" in model_options:
|
|
240
|
+
_job_group.add_argument(
|
|
241
|
+
"--model_version",
|
|
242
|
+
help="model version",
|
|
243
|
+
type=str,
|
|
244
|
+
default=None,
|
|
245
|
+
)
|
|
252
246
|
if any(
|
|
253
247
|
option in model_options for option in ["site", "telescope", "layout", "layout_file"]
|
|
254
248
|
):
|
|
@@ -263,8 +257,8 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
263
257
|
_job_group.add_argument(
|
|
264
258
|
"--telescope_model_file",
|
|
265
259
|
help=(
|
|
266
|
-
"
|
|
267
|
-
"
|
|
260
|
+
"Path to a YAML file containing modifications to the telescope model. "
|
|
261
|
+
"This feature is intended for developers and lacks validation."
|
|
268
262
|
),
|
|
269
263
|
type=Path,
|
|
270
264
|
required=False,
|
|
@@ -10,6 +10,7 @@ import astropy.units as u
|
|
|
10
10
|
from dotenv import load_dotenv
|
|
11
11
|
|
|
12
12
|
import simtools.configuration.commandline_parser as argparser
|
|
13
|
+
from simtools.db.db_handler import jsonschema_db_dict
|
|
13
14
|
from simtools.io_operations import io_handler
|
|
14
15
|
from simtools.utils import general as gen
|
|
15
16
|
|
|
@@ -438,24 +439,10 @@ class Configurator:
|
|
|
438
439
|
"""
|
|
439
440
|
Return parameters for DB configuration.
|
|
440
441
|
|
|
441
|
-
|
|
442
|
-
|
|
442
|
+
Returns
|
|
443
|
+
-------
|
|
443
444
|
dict
|
|
444
|
-
Dictionary with DB parameters
|
|
445
|
+
Dictionary with DB parameters.
|
|
445
446
|
"""
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
"db_api_user",
|
|
449
|
-
"db_api_pw",
|
|
450
|
-
"db_api_port",
|
|
451
|
-
"db_server",
|
|
452
|
-
"db_simulation_model",
|
|
453
|
-
"db_simulation_model_url",
|
|
454
|
-
)
|
|
455
|
-
try:
|
|
456
|
-
for _para in _db_para:
|
|
457
|
-
_db_dict[_para] = self.config[_para]
|
|
458
|
-
except KeyError:
|
|
459
|
-
pass
|
|
460
|
-
|
|
461
|
-
return _db_dict
|
|
447
|
+
db_params = jsonschema_db_dict["properties"].keys()
|
|
448
|
+
return {param: self.config.get(param) for param in db_params if param in self.config}
|
simtools/constants.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""Project wide constants."""
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from importlib.resources import files
|
|
4
4
|
|
|
5
5
|
# Path to metadata jsonschema
|
|
6
|
-
METADATA_JSON_SCHEMA =
|
|
6
|
+
METADATA_JSON_SCHEMA = files("simtools") / "schemas/metadata.metaschema.yml"
|
|
7
7
|
|
|
8
8
|
# Path to model parameter schema files
|
|
9
|
-
MODEL_PARAMETER_SCHEMA_PATH =
|
|
9
|
+
MODEL_PARAMETER_SCHEMA_PATH = files("simtools") / "schemas/model_parameters"
|
|
@@ -86,6 +86,24 @@ class MetadataCollector:
|
|
|
86
86
|
except AttributeError:
|
|
87
87
|
self._logger.debug(f"Method _fill_{meta_type}_meta not implemented")
|
|
88
88
|
|
|
89
|
+
def get_top_level_metadata(self):
|
|
90
|
+
"""
|
|
91
|
+
Return top level metadata dictionary (with updated activity end time).
|
|
92
|
+
|
|
93
|
+
Returns
|
|
94
|
+
-------
|
|
95
|
+
dict
|
|
96
|
+
Top level metadata dictionary.
|
|
97
|
+
|
|
98
|
+
"""
|
|
99
|
+
try:
|
|
100
|
+
self.top_level_meta[self.observatory]["activity"][
|
|
101
|
+
"end"
|
|
102
|
+
] = datetime.datetime.now().isoformat(timespec="seconds")
|
|
103
|
+
except KeyError:
|
|
104
|
+
pass
|
|
105
|
+
return self.top_level_meta
|
|
106
|
+
|
|
89
107
|
def get_data_model_schema_file_name(self):
|
|
90
108
|
"""
|
|
91
109
|
Return data model schema file name.
|
|
@@ -523,7 +541,7 @@ class MetadataCollector:
|
|
|
523
541
|
Returns
|
|
524
542
|
-------
|
|
525
543
|
bool
|
|
526
|
-
True if all entries are None
|
|
544
|
+
True if all entries are None.
|
|
527
545
|
|
|
528
546
|
"""
|
|
529
547
|
if not isinstance(input_dict, dict):
|
|
@@ -38,7 +38,10 @@ def validate_schema(data, schema_file):
|
|
|
38
38
|
if validation fails
|
|
39
39
|
|
|
40
40
|
"""
|
|
41
|
-
schema, schema_file = _load_schema(
|
|
41
|
+
schema, schema_file = _load_schema(
|
|
42
|
+
schema_file,
|
|
43
|
+
data.get("schema_version", "0.1.0"), # default version to ensure backward compatibility
|
|
44
|
+
)
|
|
42
45
|
|
|
43
46
|
try:
|
|
44
47
|
jsonschema.validate(data, schema=schema, format_checker=format_checkers.format_checker)
|
|
@@ -72,17 +75,17 @@ def get_default_metadata_dict(schema_file=None, observatory="CTA"):
|
|
|
72
75
|
return _fill_defaults(schema["definitions"], observatory)
|
|
73
76
|
|
|
74
77
|
|
|
75
|
-
def _load_schema(schema_file=None):
|
|
78
|
+
def _load_schema(schema_file=None, schema_version=None):
|
|
76
79
|
"""
|
|
77
80
|
Load parameter schema from file from simpipe metadata schema.
|
|
78
81
|
|
|
79
82
|
Returns
|
|
80
83
|
-------
|
|
81
|
-
schema_file
|
|
82
|
-
Schema used for validation.
|
|
83
|
-
schema_file str
|
|
84
|
+
schema_file: str
|
|
84
85
|
File name schema is loaded from. If schema_file is not given,
|
|
85
86
|
the default schema file name is returned.
|
|
87
|
+
schema_version: str
|
|
88
|
+
Schema version.
|
|
86
89
|
|
|
87
90
|
Raises
|
|
88
91
|
------
|
|
@@ -98,6 +101,16 @@ def _load_schema(schema_file=None):
|
|
|
98
101
|
except FileNotFoundError:
|
|
99
102
|
schema_file = files("simtools").joinpath("schemas") / schema_file
|
|
100
103
|
schema = gen.collect_data_from_file(file_name=schema_file)
|
|
104
|
+
|
|
105
|
+
if isinstance(schema, list): # schema file with several schemas defined
|
|
106
|
+
if schema_version is None:
|
|
107
|
+
raise ValueError(f"Schema version not given in {schema_file}.")
|
|
108
|
+
schema = next((doc for doc in schema if doc.get("version") == schema_version), None)
|
|
109
|
+
if schema is None:
|
|
110
|
+
raise ValueError(f"Schema version {schema_version} not found in {schema_file}.")
|
|
111
|
+
elif schema_version is not None and schema_version != schema.get("version"):
|
|
112
|
+
_logger.warning(f"Schema version {schema_version} does not match {schema.get('version')}")
|
|
113
|
+
|
|
101
114
|
_logger.debug(f"Loading schema from {schema_file}")
|
|
102
115
|
_add_array_elements("InstrumentTypeElement", schema)
|
|
103
116
|
|
|
@@ -170,7 +170,7 @@ class ModelDataWriter:
|
|
|
170
170
|
metadata_input_dict["output_file"] = output_file
|
|
171
171
|
metadata_input_dict["output_file_format"] = Path(output_file).suffix.lstrip(".")
|
|
172
172
|
writer.write_metadata_to_yml(
|
|
173
|
-
metadata=MetadataCollector(args_dict=metadata_input_dict).
|
|
173
|
+
metadata=MetadataCollector(args_dict=metadata_input_dict).get_top_level_metadata(),
|
|
174
174
|
yml_file=output_path / f"{Path(output_file).stem}",
|
|
175
175
|
)
|
|
176
176
|
return _json_dict
|
|
@@ -12,6 +12,7 @@ from astropy.table import Column, Table, unique
|
|
|
12
12
|
from astropy.utils.diff import report_diff_values
|
|
13
13
|
|
|
14
14
|
import simtools.utils.general as gen
|
|
15
|
+
from simtools.constants import MODEL_PARAMETER_SCHEMA_PATH
|
|
15
16
|
from simtools.data_model import format_checkers
|
|
16
17
|
from simtools.utils import value_conversion
|
|
17
18
|
|
|
@@ -57,7 +58,7 @@ class DataValidator:
|
|
|
57
58
|
self.data_table = data_table
|
|
58
59
|
self.check_exact_data_type = check_exact_data_type
|
|
59
60
|
|
|
60
|
-
def validate_and_transform(self, is_model_parameter=False):
|
|
61
|
+
def validate_and_transform(self, is_model_parameter=False, lists_as_strings=False):
|
|
61
62
|
"""
|
|
62
63
|
Validate data and data file.
|
|
63
64
|
|
|
@@ -65,6 +66,8 @@ class DataValidator:
|
|
|
65
66
|
----------
|
|
66
67
|
is_model_parameter: bool
|
|
67
68
|
This is a model parameter (add some data preparation)
|
|
69
|
+
lists_as_strings: bool
|
|
70
|
+
Convert lists to strings (as needed for model parameters)
|
|
68
71
|
|
|
69
72
|
Returns
|
|
70
73
|
-------
|
|
@@ -80,13 +83,9 @@ class DataValidator:
|
|
|
80
83
|
if self.data_file_name:
|
|
81
84
|
self.validate_data_file()
|
|
82
85
|
if isinstance(self.data_dict, dict):
|
|
83
|
-
|
|
84
|
-
self._prepare_model_parameter()
|
|
85
|
-
self._validate_data_dict()
|
|
86
|
-
return self.data_dict
|
|
86
|
+
return self._validate_data_dict(is_model_parameter, lists_as_strings)
|
|
87
87
|
if isinstance(self.data_table, Table):
|
|
88
|
-
self._validate_data_table()
|
|
89
|
-
return self.data_table
|
|
88
|
+
return self._validate_data_table()
|
|
90
89
|
self._logger.error("No data or data table to validate")
|
|
91
90
|
raise TypeError
|
|
92
91
|
|
|
@@ -108,25 +107,57 @@ class DataValidator:
|
|
|
108
107
|
|
|
109
108
|
def validate_parameter_and_file_name(self):
|
|
110
109
|
"""Validate that file name and key 'parameter_name' in data dict are the same."""
|
|
111
|
-
if self.data_dict.get("parameter")
|
|
110
|
+
if not str(Path(self.data_file_name).stem).startswith(self.data_dict.get("parameter")):
|
|
112
111
|
raise ValueError(
|
|
113
112
|
f"Parameter name in data dict {self.data_dict.get('parameter')} and "
|
|
114
113
|
f"file name {Path(self.data_file_name).stem} do not match."
|
|
115
114
|
)
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
@staticmethod
|
|
117
|
+
def validate_model_parameter(par_dict):
|
|
118
|
+
"""
|
|
119
|
+
Validate a simulation model parameter (static method).
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
par_dict: dict
|
|
124
|
+
Data dictionary
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
dict
|
|
129
|
+
Validated data dictionary
|
|
130
|
+
"""
|
|
131
|
+
data_validator = DataValidator(
|
|
132
|
+
schema_file=MODEL_PARAMETER_SCHEMA_PATH / "f{par_dict['parameter']}.schema.yml",
|
|
133
|
+
data_dict=par_dict,
|
|
134
|
+
check_exact_data_type=False,
|
|
135
|
+
)
|
|
136
|
+
return data_validator.validate_and_transform(is_model_parameter=True)
|
|
137
|
+
|
|
138
|
+
def _validate_data_dict(self, is_model_parameter=False, lists_as_strings=False):
|
|
118
139
|
"""
|
|
119
140
|
Validate values in a dictionary.
|
|
120
141
|
|
|
121
142
|
Handles different types of naming in data dicts (using 'name' or 'parameter'
|
|
122
143
|
keys for name fields).
|
|
123
144
|
|
|
145
|
+
Parameters
|
|
146
|
+
----------
|
|
147
|
+
is_model_parameter: bool
|
|
148
|
+
This is a model parameter (add some data preparation)
|
|
149
|
+
lists_as_strings: bool
|
|
150
|
+
Convert lists to strings (as needed for model parameters)
|
|
151
|
+
|
|
124
152
|
Raises
|
|
125
153
|
------
|
|
126
154
|
KeyError
|
|
127
155
|
if data dict does not contain a 'name' or 'parameter' key.
|
|
128
156
|
|
|
129
157
|
"""
|
|
158
|
+
if is_model_parameter:
|
|
159
|
+
self._prepare_model_parameter()
|
|
160
|
+
|
|
130
161
|
if not (_name := self.data_dict.get("name") or self.data_dict.get("parameter")):
|
|
131
162
|
raise KeyError("Data dict does not contain a 'name' or 'parameter' key.")
|
|
132
163
|
self._data_description = self._read_validation_schema(self.schema_file_name, _name)
|
|
@@ -145,6 +176,11 @@ class DataValidator:
|
|
|
145
176
|
|
|
146
177
|
self._check_version_string(self.data_dict.get("version"))
|
|
147
178
|
|
|
179
|
+
if lists_as_strings:
|
|
180
|
+
self._convert_results_to_model_format()
|
|
181
|
+
|
|
182
|
+
return self.data_dict
|
|
183
|
+
|
|
148
184
|
def _validate_value_and_unit(self, value, unit, index):
|
|
149
185
|
"""
|
|
150
186
|
Validate value, unit, and perform type checking and conversions.
|
|
@@ -191,7 +227,13 @@ class DataValidator:
|
|
|
191
227
|
conversion_factor = [
|
|
192
228
|
1 if v is None else u.Unit(v).to(u.Unit(t)) for v, t in zip(unit, target_unit)
|
|
193
229
|
]
|
|
194
|
-
|
|
230
|
+
try:
|
|
231
|
+
return [
|
|
232
|
+
v * c if not isinstance(v, bool) and not isinstance(v, dict) else v
|
|
233
|
+
for v, c in zip(value, conversion_factor)
|
|
234
|
+
], target_unit
|
|
235
|
+
except TypeError:
|
|
236
|
+
return [None], target_unit
|
|
195
237
|
|
|
196
238
|
def _validate_data_dict_using_json_schema(self, data, json_schema):
|
|
197
239
|
"""
|
|
@@ -228,6 +270,7 @@ class DataValidator:
|
|
|
228
270
|
self._validate_data_columns()
|
|
229
271
|
self._check_data_for_duplicates()
|
|
230
272
|
self._sort_data()
|
|
273
|
+
return self.data_table
|
|
231
274
|
|
|
232
275
|
def _validate_data_columns(self):
|
|
233
276
|
"""
|
|
@@ -726,6 +769,8 @@ class DataValidator:
|
|
|
726
769
|
)
|
|
727
770
|
)
|
|
728
771
|
except IndexError as exc:
|
|
772
|
+
if len(self._data_description) == 1: # all columns are described by the same schema
|
|
773
|
+
return self._data_description[0]
|
|
729
774
|
self._logger.error(
|
|
730
775
|
f"Data column '{column_name}' not found in reference column definition"
|
|
731
776
|
)
|
|
@@ -771,6 +816,18 @@ class DataValidator:
|
|
|
771
816
|
if self.data_dict["unit"] is not None:
|
|
772
817
|
self.data_dict["unit"] = gen.convert_string_to_list(self.data_dict["unit"])
|
|
773
818
|
|
|
819
|
+
def _convert_results_to_model_format(self):
|
|
820
|
+
"""
|
|
821
|
+
Convert results to model format.
|
|
822
|
+
|
|
823
|
+
Convert lists to strings (as needed for model parameters).
|
|
824
|
+
"""
|
|
825
|
+
value = self.data_dict["value"]
|
|
826
|
+
if isinstance(value, list):
|
|
827
|
+
self.data_dict["value"] = gen.convert_list_to_string(value)
|
|
828
|
+
if isinstance(self.data_dict["unit"], list):
|
|
829
|
+
self.data_dict["unit"] = gen.convert_list_to_string(self.data_dict["unit"])
|
|
830
|
+
|
|
774
831
|
def _check_version_string(self, version):
|
|
775
832
|
"""
|
|
776
833
|
Check that version string follows semantic versioning.
|