gammasimtools 0.6.1__py3-none-any.whl → 0.8.2__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.2.dist-info/METADATA +173 -0
- gammasimtools-0.8.2.dist-info/RECORD +345 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/WHEEL +1 -1
- gammasimtools-0.8.2.dist-info/entry_points.txt +31 -0
- simtools/_dev_version/__init__.py +9 -0
- simtools/_version.py +2 -2
- simtools/applications/calculate_trigger_rate.py +210 -0
- simtools/applications/convert_all_model_parameters_from_simtel.py +372 -0
- simtools/applications/{print_array_elements.py → convert_geo_coordinates_of_array_elements.py} +58 -63
- simtools/applications/convert_model_parameter_from_simtel.py +119 -0
- simtools/applications/{add_file_to_db.py → db_add_file_to_db.py} +70 -60
- simtools/applications/db_add_model_parameters_from_repository_to_db.py +184 -0
- simtools/applications/db_add_value_from_json_to_db.py +105 -0
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +180 -0
- simtools/applications/db_get_array_layouts_from_db.py +162 -0
- simtools/applications/{get_file_from_db.py → db_get_file_from_db.py} +30 -34
- simtools/applications/db_get_parameter_from_db.py +131 -0
- simtools/applications/db_inspect_databases.py +52 -0
- simtools/applications/derive_mirror_rnda.py +39 -255
- simtools/applications/derive_psf_parameters.py +441 -0
- simtools/applications/generate_array_config.py +82 -0
- simtools/applications/generate_corsika_histograms.py +52 -52
- simtools/applications/generate_default_metadata.py +5 -8
- simtools/applications/generate_regular_arrays.py +117 -0
- simtools/applications/generate_simtel_array_histograms.py +97 -56
- simtools/applications/plot_array_layout.py +345 -115
- simtools/applications/production_generate_simulation_config.py +158 -0
- simtools/applications/production_scale_events.py +168 -0
- simtools/applications/simulate_light_emission.py +478 -0
- simtools/applications/simulate_prod.py +97 -175
- simtools/applications/submit_data_from_external.py +9 -12
- simtools/applications/submit_model_parameter_from_external.py +122 -0
- simtools/applications/validate_camera_efficiency.py +35 -102
- simtools/applications/validate_camera_fov.py +20 -19
- simtools/applications/{compare_cumulative_psf.py → validate_cumulative_psf.py} +45 -44
- simtools/applications/validate_file_using_schema.py +111 -47
- simtools/applications/validate_optics.py +17 -22
- simtools/camera_efficiency.py +193 -202
- simtools/configuration/commandline_parser.py +384 -96
- simtools/configuration/configurator.py +55 -71
- simtools/constants.py +5 -5
- simtools/corsika/corsika_config.py +482 -342
- simtools/corsika/corsika_histograms.py +226 -204
- simtools/corsika/corsika_histograms_visualize.py +23 -24
- simtools/corsika/primary_particle.py +159 -0
- simtools/data_model/data_reader.py +25 -20
- simtools/data_model/format_checkers.py +52 -0
- simtools/data_model/metadata_collector.py +211 -185
- simtools/data_model/metadata_model.py +115 -37
- simtools/data_model/model_data_writer.py +335 -26
- simtools/data_model/validate_data.py +366 -154
- simtools/db/db_array_elements.py +130 -0
- simtools/db/db_from_repo_handler.py +106 -0
- simtools/db/db_handler.py +1246 -0
- simtools/io_operations/hdf5_handler.py +3 -1
- simtools/io_operations/io_handler.py +32 -57
- simtools/job_execution/job_manager.py +82 -69
- simtools/layout/array_layout.py +325 -537
- simtools/layout/geo_coordinates.py +8 -11
- simtools/layout/telescope_position.py +163 -86
- simtools/model/array_model.py +312 -259
- simtools/model/calibration_model.py +50 -0
- simtools/model/camera.py +277 -523
- simtools/model/mirrors.py +68 -49
- simtools/model/model_parameter.py +602 -0
- simtools/model/model_utils.py +11 -39
- simtools/model/site_model.py +161 -0
- simtools/model/telescope_model.py +143 -633
- simtools/production_configuration/calculate_statistical_errors_grid_point.py +454 -0
- simtools/production_configuration/event_scaler.py +146 -0
- simtools/production_configuration/generate_simulation_config.py +193 -0
- simtools/production_configuration/interpolation_handler.py +197 -0
- simtools/ray_tracing/__init__.py +0 -0
- simtools/ray_tracing/mirror_panel_psf.py +280 -0
- simtools/{psf_analysis.py → ray_tracing/psf_analysis.py} +133 -47
- simtools/ray_tracing/ray_tracing.py +646 -0
- simtools/runners/__init__.py +0 -0
- simtools/runners/corsika_runner.py +240 -0
- simtools/runners/corsika_simtel_runner.py +225 -0
- simtools/runners/runner_services.py +307 -0
- simtools/runners/simtel_runner.py +224 -0
- simtools/schemas/array_elements.yml +137 -0
- simtools/schemas/integration_tests_config.metaschema.yml +93 -0
- simtools/schemas/metadata.metaschema.yml +6 -0
- simtools/schemas/model_parameter.metaschema.yml +78 -0
- simtools/schemas/{data.metaschema.yml → model_parameter_and_data_schema.metaschema.yml} +27 -44
- simtools/schemas/model_parameters/adjust_gain.schema.yml +37 -0
- simtools/schemas/model_parameters/altitude.schema.yml +37 -0
- simtools/schemas/model_parameters/array_coordinates.schema.yml +33 -0
- simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +77 -0
- simtools/schemas/model_parameters/array_element_position_ground.schema.yml +39 -0
- simtools/schemas/model_parameters/array_element_position_utm.schema.yml +39 -0
- simtools/schemas/model_parameters/array_layouts.schema.yml +48 -0
- simtools/schemas/model_parameters/array_triggers.schema.yml +93 -0
- simtools/schemas/model_parameters/asum_clipping.schema.yml +38 -0
- simtools/schemas/model_parameters/asum_offset.schema.yml +35 -0
- simtools/schemas/model_parameters/asum_shaping.schema.yml +35 -0
- simtools/schemas/model_parameters/asum_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/atmospheric_profile.schema.yml +32 -0
- simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +35 -0
- simtools/schemas/model_parameters/axes_offsets.schema.yml +53 -0
- simtools/schemas/model_parameters/camera_body_diameter.schema.yml +40 -0
- simtools/schemas/model_parameters/camera_body_shape.schema.yml +45 -0
- simtools/schemas/model_parameters/camera_config_file.schema.yml +40 -0
- simtools/schemas/model_parameters/camera_config_rotate.schema.yml +36 -0
- simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +43 -0
- simtools/schemas/model_parameters/camera_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/camera_depth.schema.yml +42 -0
- simtools/schemas/model_parameters/camera_filter.schema.yml +45 -0
- simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/camera_pixels.schema.yml +36 -0
- simtools/schemas/model_parameters/camera_transmission.schema.yml +41 -0
- simtools/schemas/model_parameters/channels_per_chip.schema.yml +36 -0
- simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +35 -0
- simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +38 -0
- simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +28 -0
- simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +23 -0
- simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +28 -0
- simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_observation_level.schema.yml +38 -0
- simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +52 -0
- simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +27 -0
- simtools/schemas/model_parameters/dark_events.schema.yml +32 -0
- simtools/schemas/model_parameters/default_trigger.schema.yml +35 -0
- simtools/schemas/model_parameters/design_model.schema.yml +31 -0
- simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +32 -0
- simtools/schemas/model_parameters/disc_bins.schema.yml +39 -0
- simtools/schemas/model_parameters/disc_start.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +42 -0
- simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +39 -0
- simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +40 -0
- simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +33 -0
- simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +42 -0
- simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +37 -0
- simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +44 -0
- simtools/schemas/model_parameters/discriminator_threshold.schema.yml +36 -0
- simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +45 -0
- simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +40 -0
- simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/dish_shape_length.schema.yml +41 -0
- simtools/schemas/model_parameters/dsum_clipping.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_offset.schema.yml +37 -0
- simtools/schemas/model_parameters/dsum_pedsub.schema.yml +33 -0
- simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +39 -0
- simtools/schemas/model_parameters/dsum_prescale.schema.yml +44 -0
- simtools/schemas/model_parameters/dsum_presum_max.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +45 -0
- simtools/schemas/model_parameters/dsum_shaping.schema.yml +44 -0
- simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +32 -0
- simtools/schemas/model_parameters/dsum_threshold.schema.yml +43 -0
- simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +42 -0
- simtools/schemas/model_parameters/effective_focal_length.schema.yml +61 -0
- simtools/schemas/model_parameters/epsg_code.schema.yml +37 -0
- simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +35 -0
- simtools/schemas/model_parameters/fadc_amplitude.schema.yml +46 -0
- simtools/schemas/model_parameters/fadc_bins.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +38 -0
- simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +49 -0
- simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +47 -0
- simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +51 -0
- simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +37 -0
- simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +49 -0
- simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_max_signal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_max_sum.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_mhz.schema.yml +31 -0
- simtools/schemas/model_parameters/fadc_noise.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_pedestal.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +42 -0
- simtools/schemas/model_parameters/flatfielding.schema.yml +37 -0
- simtools/schemas/model_parameters/focal_length.schema.yml +45 -0
- simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +158 -0
- simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +29 -0
- simtools/schemas/model_parameters/focus_offset.schema.yml +66 -0
- simtools/schemas/model_parameters/gain_variation.schema.yml +43 -0
- simtools/schemas/model_parameters/geomag_horizontal.schema.yml +34 -0
- simtools/schemas/model_parameters/geomag_rotation.schema.yml +37 -0
- simtools/schemas/model_parameters/geomag_vertical.schema.yml +34 -0
- simtools/schemas/model_parameters/hg_lg_variation.schema.yml +36 -0
- simtools/schemas/model_parameters/iobuf_maximum.schema.yml +34 -0
- simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_events.schema.yml +36 -0
- simtools/schemas/model_parameters/laser_external_trigger.schema.yml +35 -0
- simtools/schemas/model_parameters/laser_photons.schema.yml +32 -0
- simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_var_photons.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_wavelength.schema.yml +33 -0
- simtools/schemas/model_parameters/led_events.schema.yml +34 -0
- simtools/schemas/model_parameters/led_photons.schema.yml +34 -0
- simtools/schemas/model_parameters/led_pulse_offset.schema.yml +32 -0
- simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +33 -0
- simtools/schemas/model_parameters/led_var_photons.schema.yml +34 -0
- simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +41 -0
- simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +43 -0
- simtools/schemas/model_parameters/min_photoelectrons.schema.yml +35 -0
- simtools/schemas/model_parameters/min_photons.schema.yml +32 -0
- simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +36 -0
- simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +64 -0
- simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +64 -0
- simtools/schemas/model_parameters/mirror_class.schema.yml +41 -0
- simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +51 -0
- simtools/schemas/model_parameters/mirror_focal_length.schema.yml +42 -0
- simtools/schemas/model_parameters/mirror_list.schema.yml +38 -0
- simtools/schemas/model_parameters/mirror_offset.schema.yml +41 -0
- simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +39 -0
- simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +61 -0
- simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +40 -0
- simtools/schemas/model_parameters/multiplicity_offset.schema.yml +46 -0
- simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +51 -0
- simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +37 -0
- simtools/schemas/model_parameters/nsb_offaxis.schema.yml +79 -0
- simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +47 -0
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +34 -0
- simtools/schemas/model_parameters/nsb_reference_value.schema.yml +33 -0
- simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +35 -0
- simtools/schemas/model_parameters/nsb_skymap.schema.yml +39 -0
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +50 -0
- simtools/schemas/model_parameters/num_gains.schema.yml +34 -0
- simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +33 -0
- simtools/schemas/model_parameters/optics_properties.schema.yml +31 -0
- simtools/schemas/model_parameters/parabolic_dish.schema.yml +32 -0
- simtools/schemas/model_parameters/pedestal_events.schema.yml +32 -0
- simtools/schemas/model_parameters/photon_delay.schema.yml +38 -0
- simtools/schemas/model_parameters/photons_per_run.schema.yml +33 -0
- simtools/schemas/model_parameters/pixel_cells.schema.yml +35 -0
- simtools/schemas/model_parameters/pixels_parallel.schema.yml +54 -0
- simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +40 -0
- simtools/schemas/model_parameters/pm_average_gain.schema.yml +34 -0
- simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +40 -0
- simtools/schemas/model_parameters/pm_gain_index.schema.yml +36 -0
- simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +41 -0
- simtools/schemas/model_parameters/pm_transit_time.schema.yml +63 -0
- simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +39 -0
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +168 -0
- simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +36 -0
- simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +34 -0
- simtools/schemas/model_parameters/qe_variation.schema.yml +43 -0
- simtools/schemas/model_parameters/quantum_efficiency.schema.yml +42 -0
- simtools/schemas/model_parameters/random_focal_length.schema.yml +45 -0
- simtools/schemas/model_parameters/random_generator.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_altitude.schema.yml +35 -0
- simtools/schemas/model_parameters/reference_point_latitude.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_longitude.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +34 -0
- simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +34 -0
- simtools/schemas/model_parameters/sampled_output.schema.yml +31 -0
- simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +34 -0
- simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +79 -0
- simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +41 -0
- simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +36 -0
- simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +168 -0
- simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +36 -0
- simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +35 -0
- simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +37 -0
- simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +40 -0
- simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +40 -0
- simtools/schemas/model_parameters/store_photoelectrons.schema.yml +41 -0
- simtools/schemas/model_parameters/tailcut_scale.schema.yml +40 -0
- simtools/schemas/model_parameters/telescope_axis_height.schema.yml +31 -0
- simtools/schemas/model_parameters/telescope_random_angle.schema.yml +35 -0
- simtools/schemas/model_parameters/telescope_random_error.schema.yml +34 -0
- simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +37 -0
- simtools/schemas/model_parameters/telescope_transmission.schema.yml +113 -0
- simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +41 -0
- simtools/schemas/model_parameters/teltrig_min_time.schema.yml +36 -0
- simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +36 -0
- simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +37 -0
- simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +38 -0
- simtools/schemas/model_parameters/transit_time_error.schema.yml +45 -0
- simtools/schemas/model_parameters/transit_time_jitter.schema.yml +36 -0
- simtools/schemas/model_parameters/trigger_current_limit.schema.yml +32 -0
- simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +53 -0
- simtools/schemas/model_parameters/trigger_pixels.schema.yml +40 -0
- simtools/simtel/simtel_config_reader.py +353 -0
- simtools/simtel/simtel_config_writer.py +244 -63
- simtools/simtel/{simtel_events.py → simtel_io_events.py} +26 -25
- simtools/simtel/simtel_io_histogram.py +661 -0
- simtools/simtel/simtel_io_histograms.py +569 -0
- simtools/simtel/simulator_array.py +145 -0
- simtools/simtel/{simtel_runner_camera_efficiency.py → simulator_camera_efficiency.py} +76 -52
- simtools/simtel/simulator_light_emission.py +473 -0
- simtools/simtel/simulator_ray_tracing.py +262 -0
- simtools/simulator.py +220 -446
- simtools/testing/__init__.py +0 -0
- simtools/testing/assertions.py +151 -0
- simtools/testing/configuration.py +226 -0
- simtools/testing/helpers.py +42 -0
- simtools/testing/validate_output.py +240 -0
- simtools/utils/general.py +340 -437
- simtools/utils/geometry.py +12 -12
- simtools/utils/names.py +257 -644
- simtools/utils/value_conversion.py +176 -0
- simtools/version.py +3 -1
- simtools/visualization/legend_handlers.py +135 -152
- simtools/visualization/plot_camera.py +379 -0
- simtools/visualization/visualize.py +346 -167
- gammasimtools-0.6.1.dist-info/METADATA +0 -180
- gammasimtools-0.6.1.dist-info/RECORD +0 -91
- gammasimtools-0.6.1.dist-info/entry_points.txt +0 -23
- simtools/_dev_version/scm_version.py +0 -10
- simtools/applications/db_development_tools/add_new_parameter_to_db.py +0 -81
- simtools/applications/db_development_tools/add_unit_to_parameter_in_db.py +0 -59
- simtools/applications/db_development_tools/mark_non_optics_parameters_non_applicable.py +0 -102
- simtools/applications/get_parameter.py +0 -92
- simtools/applications/make_regular_arrays.py +0 -160
- simtools/applications/produce_array_config.py +0 -136
- simtools/applications/production.py +0 -313
- simtools/applications/sim_showers_for_trigger_rates.py +0 -187
- simtools/applications/tune_psf.py +0 -334
- simtools/corsika/corsika_default_config.py +0 -282
- simtools/corsika/corsika_runner.py +0 -450
- simtools/corsika_simtel/corsika_simtel_runner.py +0 -197
- simtools/db_handler.py +0 -1480
- simtools/ray_tracing.py +0 -525
- simtools/simtel/simtel_histograms.py +0 -414
- simtools/simtel/simtel_runner.py +0 -244
- simtools/simtel/simtel_runner_array.py +0 -293
- simtools/simtel/simtel_runner_ray_tracing.py +0 -277
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/LICENSE +0 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/top_level.txt +0 -0
- /simtools/{corsika_simtel → db}/__init__.py +0 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
#!/usr/bin/python3
|
|
2
|
+
"""Read model parameters and configuration from sim_telarray configuration files."""
|
|
3
|
+
|
|
4
|
+
import logging
|
|
5
|
+
import re
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
import simtools.utils.general as gen
|
|
10
|
+
|
|
11
|
+
__all__ = ["SimtelConfigReader"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SimtelConfigReader:
|
|
15
|
+
"""
|
|
16
|
+
Reads model parameters from configuration files and converts to the simtools representation.
|
|
17
|
+
|
|
18
|
+
The output format are simtool-db-style json dicts.
|
|
19
|
+
Model parameters are read from sim_telarray configuration files.
|
|
20
|
+
The sim_telarray configuration can be generated using e.g., the following sim_telarray command:
|
|
21
|
+
|
|
22
|
+
... code-block:: console
|
|
23
|
+
|
|
24
|
+
sim_telarray/bin/sim_telarray \
|
|
25
|
+
-c sim_telarray/cfg/CTA/CTA-PROD6-LaPalma.cfg\
|
|
26
|
+
-C limits=no-internal -C initlist=no-internal -C list=no-internal\
|
|
27
|
+
-C typelist=no-internal -C maximum_telescopes=30\
|
|
28
|
+
-DNSB_AUTOSCALE -DNECTARCAM -DHYPER_LAYOUT\
|
|
29
|
+
-DNUM_TELESCOPES=30 /dev/null 2>|/dev/null | grep '(@cfg)'
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
schema_file: str
|
|
34
|
+
Schema file describing the model parameter.
|
|
35
|
+
simtel_config_file: str or Path
|
|
36
|
+
Path of the file to read from.
|
|
37
|
+
simtel_telescope_name: str
|
|
38
|
+
Telescope name (sim_telarray convention)
|
|
39
|
+
parameter_name: str
|
|
40
|
+
Parameter name (default: read from schema file)
|
|
41
|
+
camera_pixels: int
|
|
42
|
+
Number of camera pixels
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(
|
|
46
|
+
self,
|
|
47
|
+
schema_file,
|
|
48
|
+
simtel_config_file,
|
|
49
|
+
simtel_telescope_name,
|
|
50
|
+
parameter_name=None,
|
|
51
|
+
camera_pixels=None,
|
|
52
|
+
):
|
|
53
|
+
"""Initialize SimtelConfigReader."""
|
|
54
|
+
self._logger = logging.getLogger(__name__)
|
|
55
|
+
self._logger.debug("Init SimtelConfigReader")
|
|
56
|
+
|
|
57
|
+
self.schema_file = schema_file
|
|
58
|
+
self.schema_dict = (
|
|
59
|
+
gen.collect_data_from_file(file_name=self.schema_file)
|
|
60
|
+
if self.schema_file is not None
|
|
61
|
+
else None
|
|
62
|
+
)
|
|
63
|
+
self.parameter_name = self.schema_dict.get("name") if self.schema_dict else parameter_name
|
|
64
|
+
self.simtel_parameter_name = self._get_simtel_parameter_name(self.parameter_name)
|
|
65
|
+
self.simtel_telescope_name = simtel_telescope_name
|
|
66
|
+
self.camera_pixels = camera_pixels
|
|
67
|
+
self.parameter_dict = self.read_simtel_config_file(
|
|
68
|
+
simtel_config_file, simtel_telescope_name
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
def _should_skip_limits_check(self, data_type):
|
|
72
|
+
"""Check if limits should be skipped."""
|
|
73
|
+
return data_type == "limits" and self.parameter_dict.get("type") == "bool"
|
|
74
|
+
|
|
75
|
+
def _get_schema_values(self, data_type):
|
|
76
|
+
"""Check schema values for limits and defaults."""
|
|
77
|
+
try:
|
|
78
|
+
if data_type == "limits":
|
|
79
|
+
_from_schema = [
|
|
80
|
+
self.schema_dict["data"][0]["allowed_range"].get("min"),
|
|
81
|
+
self.schema_dict["data"][0]["allowed_range"].get("max"),
|
|
82
|
+
]
|
|
83
|
+
return _from_schema[0] if _from_schema[1] is None else _from_schema
|
|
84
|
+
if len(self.schema_dict["data"]) == 1:
|
|
85
|
+
return self.schema_dict["data"][0]["default"]
|
|
86
|
+
return [data.get("default") for data in self.schema_dict["data"]]
|
|
87
|
+
except (KeyError, IndexError):
|
|
88
|
+
return None
|
|
89
|
+
|
|
90
|
+
@staticmethod
|
|
91
|
+
def _values_match(_from_simtel, _from_schema):
|
|
92
|
+
"""Check if values match (are close for floats)."""
|
|
93
|
+
try:
|
|
94
|
+
if not isinstance(_from_schema, list | np.ndarray) and _from_simtel == _from_schema:
|
|
95
|
+
return True
|
|
96
|
+
except ValueError:
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
if np.all(np.isclose(_from_simtel, _from_schema)):
|
|
101
|
+
return True
|
|
102
|
+
except (TypeError, ValueError):
|
|
103
|
+
pass
|
|
104
|
+
|
|
105
|
+
return False
|
|
106
|
+
|
|
107
|
+
def _log_mismatch_warning(self, data_type, _from_simtel, _from_schema):
|
|
108
|
+
"""Log mismatch warning."""
|
|
109
|
+
self._logger.warning(f"Values for {data_type} do not match:")
|
|
110
|
+
self._logger.warning(
|
|
111
|
+
f" from simtel: {self.simtel_parameter_name} {_from_simtel} ({type(_from_simtel)})"
|
|
112
|
+
)
|
|
113
|
+
self._logger.warning(
|
|
114
|
+
f" from schema: {self.parameter_name} {_from_schema} ({type(_from_schema)})"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
def compare_simtel_config_with_schema(self):
|
|
118
|
+
"""
|
|
119
|
+
Compare limits and defaults reported by simtel_array with schema.
|
|
120
|
+
|
|
121
|
+
This is mostly for debugging purposes and includes simple printing.
|
|
122
|
+
Check for differences in 'default' and 'limits' entries.
|
|
123
|
+
"""
|
|
124
|
+
for data_type in ["default", "limits"]:
|
|
125
|
+
_from_simtel = self.parameter_dict.get(data_type)
|
|
126
|
+
if self._should_skip_limits_check(data_type):
|
|
127
|
+
continue
|
|
128
|
+
|
|
129
|
+
_from_schema = self._get_schema_values(data_type)
|
|
130
|
+
if isinstance(_from_schema, list):
|
|
131
|
+
_from_schema = np.array(_from_schema, dtype=np.dtype(self.parameter_dict["type"]))
|
|
132
|
+
|
|
133
|
+
if self._values_match(_from_simtel, _from_schema):
|
|
134
|
+
self._logger.debug(f"Values for {data_type} match")
|
|
135
|
+
else:
|
|
136
|
+
self._log_mismatch_warning(data_type, _from_simtel, _from_schema)
|
|
137
|
+
|
|
138
|
+
def read_simtel_config_file(self, simtel_config_file, simtel_telescope_name):
|
|
139
|
+
"""
|
|
140
|
+
Read sim_telarray configuration file and return a dictionary with the parameter values.
|
|
141
|
+
|
|
142
|
+
Parameters
|
|
143
|
+
----------
|
|
144
|
+
simtel_config_file: str or Path
|
|
145
|
+
Path of the file to read from.
|
|
146
|
+
simtel_telescope_name: str
|
|
147
|
+
Telescope name (sim_telarray convention)
|
|
148
|
+
|
|
149
|
+
Returns
|
|
150
|
+
-------
|
|
151
|
+
dict
|
|
152
|
+
Dictionary with the parameter values.
|
|
153
|
+
|
|
154
|
+
"""
|
|
155
|
+
self._logger.debug(
|
|
156
|
+
f"Reading simtel config file {simtel_config_file} "
|
|
157
|
+
f"for parameter {self.parameter_name}"
|
|
158
|
+
)
|
|
159
|
+
matching_lines = {}
|
|
160
|
+
try:
|
|
161
|
+
with open(simtel_config_file, encoding="utf-8") as file:
|
|
162
|
+
for line in file:
|
|
163
|
+
# split line into parts (space, tabs, comma separated)
|
|
164
|
+
parts_of_lines = re.split(r",\s*|\s+", line.strip())
|
|
165
|
+
if self.simtel_parameter_name == parts_of_lines[1].upper():
|
|
166
|
+
matching_lines[parts_of_lines[0]] = parts_of_lines[2:]
|
|
167
|
+
except FileNotFoundError as exc:
|
|
168
|
+
self._logger.error(f"File {simtel_config_file} not found.")
|
|
169
|
+
raise exc
|
|
170
|
+
if len(matching_lines) == 0:
|
|
171
|
+
self._logger.info(f"No entries found for parameter {self.simtel_parameter_name}")
|
|
172
|
+
return None
|
|
173
|
+
|
|
174
|
+
_para_dict = {}
|
|
175
|
+
# first: extract line type (required for conversions and dimension)
|
|
176
|
+
_para_dict["type"], _para_dict["dimension"] = self._get_type_and_dimension_from_simtel_cfg(
|
|
177
|
+
matching_lines["type"]
|
|
178
|
+
)
|
|
179
|
+
# then: extract other fields
|
|
180
|
+
# (order of keys matter; not all field are present for all parameters)
|
|
181
|
+
for key in ["default", simtel_telescope_name, "limits"]:
|
|
182
|
+
try:
|
|
183
|
+
_para_dict[key], _ = self._add_value_from_simtel_cfg(
|
|
184
|
+
matching_lines[key],
|
|
185
|
+
dtype=_para_dict.get("type"),
|
|
186
|
+
n_dim=_para_dict.get("dimension"),
|
|
187
|
+
default=_para_dict.get("default"),
|
|
188
|
+
)
|
|
189
|
+
except KeyError:
|
|
190
|
+
pass
|
|
191
|
+
|
|
192
|
+
return _para_dict
|
|
193
|
+
|
|
194
|
+
def _resolve_all_in_column(self, column):
|
|
195
|
+
"""
|
|
196
|
+
Resolve 'all' entries in a column.
|
|
197
|
+
|
|
198
|
+
This needs to resolve the following cases:
|
|
199
|
+
no 'all' in any entry; ['all:', '5'], ['all: 5'], ['all:5', '3:1']
|
|
200
|
+
This function is fine-tuned to the simtel configuration output.
|
|
201
|
+
|
|
202
|
+
Parameters
|
|
203
|
+
----------
|
|
204
|
+
column: list
|
|
205
|
+
List of strings to resolve.
|
|
206
|
+
|
|
207
|
+
Returns
|
|
208
|
+
-------
|
|
209
|
+
list
|
|
210
|
+
List of resolved strings.
|
|
211
|
+
|
|
212
|
+
"""
|
|
213
|
+
# don't do anything if all string items in column do not start with 'all'
|
|
214
|
+
if not any(isinstance(item, str) and item.startswith("all") for item in column):
|
|
215
|
+
return column, {}
|
|
216
|
+
|
|
217
|
+
self._logger.debug(f"Resolving 'all' entries in column: {column}")
|
|
218
|
+
# remove 'all:' entries
|
|
219
|
+
column = [item for item in column if item not in ("all:", "all")]
|
|
220
|
+
# resolve 'all:5' type entries
|
|
221
|
+
column = [
|
|
222
|
+
item.split(":")[1].replace(" ", "") if item.startswith("all:") else item
|
|
223
|
+
for item in column
|
|
224
|
+
]
|
|
225
|
+
# find 'index:value' type entries
|
|
226
|
+
except_from_all = {}
|
|
227
|
+
for item in column:
|
|
228
|
+
if ":" in item:
|
|
229
|
+
index, value = item.split(":")
|
|
230
|
+
except_from_all[index] = value
|
|
231
|
+
# finally remove entries containing ':'
|
|
232
|
+
column = [item for item in column if ":" not in item]
|
|
233
|
+
|
|
234
|
+
return column, except_from_all
|
|
235
|
+
|
|
236
|
+
def _add_value_from_simtel_cfg(self, column, dtype=None, n_dim=1, default=None):
|
|
237
|
+
"""
|
|
238
|
+
Extract value(s) from simtel configuration file columns.
|
|
239
|
+
|
|
240
|
+
This function is fine-tuned to the simtel configuration output.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
column: list
|
|
245
|
+
List of strings to extract value from.
|
|
246
|
+
dtype: str
|
|
247
|
+
Data type to convert value to.
|
|
248
|
+
n_dim: int
|
|
249
|
+
Length of array to be returned.
|
|
250
|
+
default: object
|
|
251
|
+
Default value to extend array to required length.
|
|
252
|
+
|
|
253
|
+
Returns
|
|
254
|
+
-------
|
|
255
|
+
object, int
|
|
256
|
+
Values extracted from column. Of object is a list of array, return length of array.
|
|
257
|
+
|
|
258
|
+
"""
|
|
259
|
+
# string represents a lists of values (space or comma separated)
|
|
260
|
+
if len(column) == 1:
|
|
261
|
+
column = column[0].split(",") if "," in column[0] else column[0].split(" ")
|
|
262
|
+
self._logger.debug(
|
|
263
|
+
f"Adding value from simtel config: {column} (n_dim={n_dim}, default={default})"
|
|
264
|
+
)
|
|
265
|
+
column = [None if item.lower() == "none" else item for item in column]
|
|
266
|
+
column, except_from_all = self._resolve_all_in_column(column)
|
|
267
|
+
# extend array to required length (simtel uses sometimes 'all:' for all entries)
|
|
268
|
+
if n_dim > 1 and len(column) < n_dim:
|
|
269
|
+
try:
|
|
270
|
+
# skip formatting: black reformats and violates E203
|
|
271
|
+
column += default[len(column):] # fmt: skip
|
|
272
|
+
except TypeError:
|
|
273
|
+
# extend array to required length using previous value
|
|
274
|
+
column.extend([column[-1]] * (n_dim - len(column)))
|
|
275
|
+
for index, value in except_from_all.items():
|
|
276
|
+
column[int(index)] = value
|
|
277
|
+
if dtype == "bool":
|
|
278
|
+
column = np.array([bool(int(item)) for item in column])
|
|
279
|
+
|
|
280
|
+
return self._process_column(column, dtype)
|
|
281
|
+
|
|
282
|
+
def _process_column(self, column, dtype):
|
|
283
|
+
"""
|
|
284
|
+
Process and return column prepared in _add_value_from_simtel_cfg.
|
|
285
|
+
|
|
286
|
+
Parameters
|
|
287
|
+
----------
|
|
288
|
+
column: list
|
|
289
|
+
List of strings to process.
|
|
290
|
+
dtype: str
|
|
291
|
+
Data type to convert value to.
|
|
292
|
+
"""
|
|
293
|
+
if len(column) == 1:
|
|
294
|
+
if column[0] is not None:
|
|
295
|
+
array_dtype = np.dtype(dtype) if dtype else None
|
|
296
|
+
processed_value = np.array(column, dtype=array_dtype)[0]
|
|
297
|
+
return processed_value, 1
|
|
298
|
+
return None, 1
|
|
299
|
+
if len(column) > 1:
|
|
300
|
+
return np.array(column, dtype=np.dtype(dtype) if dtype else None), len(column)
|
|
301
|
+
return None, None
|
|
302
|
+
|
|
303
|
+
def _get_type_and_dimension_from_simtel_cfg(self, column):
|
|
304
|
+
"""
|
|
305
|
+
Return type and dimension from simtel configuration column.
|
|
306
|
+
|
|
307
|
+
'Func' type from simtel is treated as string. Return number
|
|
308
|
+
of camera pixel for a hard-wired set up parameters.
|
|
309
|
+
|
|
310
|
+
Parameters
|
|
311
|
+
----------
|
|
312
|
+
column: list
|
|
313
|
+
List of strings to extract value from.
|
|
314
|
+
|
|
315
|
+
Returns
|
|
316
|
+
-------
|
|
317
|
+
str, int
|
|
318
|
+
Type and dimension.
|
|
319
|
+
|
|
320
|
+
"""
|
|
321
|
+
if column[0].lower() == "text" or column[0].lower() == "func":
|
|
322
|
+
return "str", 1
|
|
323
|
+
if column[0].lower() == "ibool":
|
|
324
|
+
return "bool", int(column[1])
|
|
325
|
+
if self.camera_pixels is not None and self.simtel_parameter_name in ["NIGHTSKY_BACKGROUND"]:
|
|
326
|
+
return str(np.dtype(column[0].lower())), self.camera_pixels
|
|
327
|
+
return str(np.dtype(column[0].lower())), int(column[1])
|
|
328
|
+
|
|
329
|
+
def _get_simtel_parameter_name(self, parameter_name):
|
|
330
|
+
"""
|
|
331
|
+
Return parameter name as used in sim_telarray.
|
|
332
|
+
|
|
333
|
+
This is documented in the schema file.
|
|
334
|
+
|
|
335
|
+
Parameters
|
|
336
|
+
----------
|
|
337
|
+
parameter_name: str
|
|
338
|
+
Model parameter name (as used in simtools)
|
|
339
|
+
|
|
340
|
+
Returns
|
|
341
|
+
-------
|
|
342
|
+
str
|
|
343
|
+
Parameter name as used in sim_telarray.
|
|
344
|
+
|
|
345
|
+
"""
|
|
346
|
+
try:
|
|
347
|
+
for sim_soft in self.schema_dict["simulation_software"]:
|
|
348
|
+
if sim_soft["name"] == "sim_telarray":
|
|
349
|
+
return sim_soft["internal_parameter_name"].upper()
|
|
350
|
+
except (KeyError, TypeError):
|
|
351
|
+
pass
|
|
352
|
+
|
|
353
|
+
return parameter_name.upper()
|