gammasimtools 0.18.0__py3-none-any.whl → 0.20.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.18.0.dist-info → gammasimtools-0.20.0.dist-info}/METADATA +24 -69
- gammasimtools-0.20.0.dist-info/RECORD +395 -0
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/entry_points.txt +11 -4
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/licenses/LICENSE +1 -1
- simtools/_version.py +16 -3
- simtools/applications/calculate_incident_angles.py +182 -0
- simtools/applications/convert_all_model_parameters_from_simtel.py +4 -3
- simtools/applications/convert_geo_coordinates_of_array_elements.py +3 -3
- simtools/applications/db_add_simulation_model_from_repository_to_db.py +17 -14
- simtools/applications/db_add_value_from_json_to_db.py +8 -10
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +8 -13
- simtools/applications/db_generate_compound_indexes.py +65 -0
- simtools/applications/db_get_file_from_db.py +12 -24
- simtools/applications/db_get_parameter_from_db.py +4 -4
- simtools/applications/db_inspect_databases.py +20 -10
- simtools/applications/derive_mirror_rnda.py +17 -11
- simtools/applications/derive_psf_parameters.py +59 -309
- simtools/applications/derive_trigger_rates.py +91 -0
- simtools/applications/docs_produce_array_element_report.py +1 -1
- simtools/applications/docs_produce_calibration_reports.py +1 -1
- simtools/applications/docs_produce_model_parameter_reports.py +1 -1
- simtools/applications/docs_produce_simulation_configuration_report.py +1 -1
- simtools/applications/generate_corsika_histograms.py +1 -1
- simtools/applications/generate_default_metadata.py +8 -24
- simtools/applications/generate_simtel_event_data.py +11 -11
- simtools/applications/maintain_simulation_model_add_production_table.py +71 -0
- simtools/applications/maintain_simulation_model_compare_productions.py +98 -0
- simtools/applications/{verify_simulation_model_production_tables.py → maintain_simulation_model_verify_production_tables.py} +9 -1
- simtools/applications/merge_tables.py +2 -2
- simtools/applications/plot_array_layout.py +3 -3
- simtools/applications/plot_simtel_events.py +421 -0
- simtools/applications/plot_tabular_data.py +9 -2
- simtools/applications/plot_tabular_data_for_model_parameter.py +2 -1
- simtools/applications/print_version.py +8 -9
- simtools/applications/production_derive_corsika_limits.py +6 -7
- simtools/applications/production_derive_statistics.py +1 -1
- simtools/applications/production_generate_grid.py +2 -2
- simtools/applications/production_merge_corsika_limits.py +214 -0
- simtools/applications/run_application.py +47 -113
- simtools/applications/simulate_calibration_events.py +166 -0
- simtools/applications/simulate_flasher.py +141 -0
- simtools/applications/{simulate_light_emission.py → simulate_illuminator.py} +35 -99
- simtools/applications/simulate_prod.py +6 -24
- simtools/applications/simulate_prod_htcondor_generator.py +7 -0
- simtools/applications/submit_array_layouts.py +2 -1
- simtools/applications/submit_model_parameter_from_external.py +1 -1
- simtools/applications/validate_camera_efficiency.py +30 -12
- simtools/applications/validate_camera_fov.py +1 -1
- simtools/applications/validate_cumulative_psf.py +1 -1
- simtools/applications/validate_file_using_schema.py +9 -5
- simtools/applications/validate_optics.py +1 -1
- simtools/camera/camera_efficiency.py +61 -45
- simtools/camera/single_photon_electron_spectrum.py +1 -1
- simtools/configuration/commandline_parser.py +46 -11
- simtools/configuration/configurator.py +4 -4
- simtools/corsika/corsika_config.py +45 -25
- simtools/corsika/corsika_histograms.py +6 -5
- simtools/data_model/data_reader.py +2 -3
- simtools/data_model/metadata_collector.py +32 -36
- simtools/data_model/metadata_model.py +15 -12
- simtools/data_model/model_data_writer.py +13 -32
- simtools/data_model/schema.py +74 -24
- simtools/data_model/validate_data.py +42 -12
- simtools/db/db_handler.py +125 -62
- simtools/db/db_model_upload.py +14 -19
- simtools/dependencies.py +98 -30
- simtools/io/ascii_handler.py +279 -0
- simtools/{io_operations → io}/io_handler.py +25 -3
- simtools/job_execution/htcondor_script_generator.py +15 -4
- simtools/layout/array_layout.py +1 -1
- simtools/layout/array_layout_utils.py +51 -12
- simtools/model/array_model.py +41 -5
- simtools/model/flasher_model.py +106 -0
- simtools/model/model_parameter.py +4 -4
- simtools/model/model_repository.py +197 -2
- simtools/model/site_model.py +25 -0
- simtools/model/telescope_model.py +3 -1
- simtools/production_configuration/derive_corsika_limits.py +336 -427
- simtools/production_configuration/derive_production_statistics_handler.py +7 -6
- simtools/production_configuration/generate_production_grid.py +9 -11
- simtools/production_configuration/merge_corsika_limits.py +528 -0
- simtools/ray_tracing/incident_angles.py +706 -0
- simtools/ray_tracing/mirror_panel_psf.py +1 -0
- simtools/ray_tracing/psf_parameter_optimisation.py +792 -0
- simtools/ray_tracing/ray_tracing.py +6 -2
- simtools/reporting/docs_read_parameters.py +150 -62
- simtools/runners/corsika_runner.py +1 -1
- simtools/runners/corsika_simtel_runner.py +14 -5
- simtools/runners/runner_services.py +10 -5
- simtools/runners/simtools_runner.py +267 -0
- simtools/schemas/application_workflow.metaschema.yml +101 -68
- simtools/schemas/input/MST_mirror_2f_measurements.schema.yml +1 -1
- simtools/schemas/input/single_pe_spectrum.schema.yml +1 -1
- simtools/schemas/metadata.metaschema.yml +577 -3
- simtools/schemas/model_parameter.metaschema.yml +6 -6
- simtools/schemas/model_parameter_and_data_schema.metaschema.yml +4 -4
- 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/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/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 +3 -3
- 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 +2 -2
- simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
- simtools/schemas/model_parameters/effective_focal_length.schema.yml +1 -1
- 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_long_event_threshold.schema.yml +35 -0
- simtools/schemas/model_parameters/fadc_long_sum_bins.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_long_sum_offset.schema.yml +38 -0
- 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/fake_mirror_list.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 +50 -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/muon_mono_threshold.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 +2 -2
- 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_sky_map.schema.yml +1 -1
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +23 -30
- 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 +11 -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/random_mono_probability.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 +11 -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 +11 -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 +2 -2
- 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/schemas/plot_configuration.metaschema.yml +5 -2
- simtools/schemas/production_configuration_metrics.schema.yml +12 -2
- simtools/schemas/production_tables.schema.yml +7 -2
- simtools/simtel/simtel_config_reader.py +2 -2
- simtools/simtel/simtel_config_writer.py +33 -23
- simtools/simtel/simtel_io_event_histograms.py +483 -0
- simtools/simtel/simtel_io_event_reader.py +65 -43
- simtools/simtel/simtel_io_event_writer.py +40 -20
- simtools/simtel/simtel_io_metadata.py +1 -1
- simtools/simtel/simtel_table_reader.py +95 -13
- simtools/simtel/simulator_array.py +138 -10
- simtools/simtel/simulator_camera_efficiency.py +32 -23
- simtools/simtel/simulator_light_emission.py +437 -271
- simtools/simtel/simulator_ray_tracing.py +1 -1
- simtools/simulator.py +105 -147
- simtools/telescope_trigger_rates.py +119 -0
- simtools/testing/configuration.py +24 -26
- simtools/testing/helpers.py +2 -2
- simtools/testing/log_inspector.py +52 -0
- simtools/testing/validate_output.py +87 -37
- simtools/utils/general.py +125 -255
- simtools/utils/geometry.py +56 -0
- simtools/utils/names.py +1 -1
- simtools/visualization/legend_handlers.py +180 -264
- simtools/visualization/plot_array_layout.py +20 -8
- simtools/visualization/plot_incident_angles.py +431 -0
- simtools/visualization/plot_pixels.py +1 -1
- simtools/visualization/plot_simtel_event_histograms.py +376 -0
- simtools/visualization/plot_simtel_events.py +816 -0
- simtools/visualization/plot_tables.py +133 -37
- simtools/visualization/visualize.py +1 -100
- gammasimtools-0.18.0.dist-info/RECORD +0 -376
- simtools/applications/calculate_trigger_rate.py +0 -187
- simtools/applications/generate_sim_telarray_histograms.py +0 -196
- simtools/production_configuration/derive_corsika_limits_grid.py +0 -232
- simtools/simtel/simtel_io_histogram.py +0 -621
- simtools/simtel/simtel_io_histograms.py +0 -552
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/top_level.txt +0 -0
- /simtools/{io_operations → io}/hdf5_handler.py +0 -0
- /simtools/{io_operations → io}/legacy_data_handler.py +0 -0
- /simtools/{io_operations/io_table_handler.py → io/table_handler.py} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
2
|
"""Plot tabular data."""
|
|
3
3
|
|
|
4
|
+
import logging
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
import numpy as np
|
|
@@ -9,11 +10,13 @@ from astropy.table import Table
|
|
|
9
10
|
import simtools.utils.general as gen
|
|
10
11
|
from simtools.constants import SCHEMA_PATH
|
|
11
12
|
from simtools.db import db_handler
|
|
12
|
-
from simtools.
|
|
13
|
+
from simtools.io import ascii_handler, legacy_data_handler
|
|
13
14
|
from simtools.visualization import visualize
|
|
14
15
|
|
|
16
|
+
_logger = logging.getLogger(__name__)
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
def plot(config, output_file, db_config=None, data_path=None):
|
|
17
20
|
"""
|
|
18
21
|
Plot tabular data from data or from model parameter files.
|
|
19
22
|
|
|
@@ -25,8 +28,10 @@ def plot(config, output_file, db_config=None):
|
|
|
25
28
|
Output file.
|
|
26
29
|
db_config: dict, optional
|
|
27
30
|
Database configuration dictionary for accessing the model parameter database.
|
|
31
|
+
data_path: Path or str, optional
|
|
32
|
+
Path to the data files (optional). Expect all files to be in the same directory.
|
|
28
33
|
"""
|
|
29
|
-
data = read_table_data(config, db_config)
|
|
34
|
+
data = read_table_data(config, db_config, data_path)
|
|
30
35
|
|
|
31
36
|
fig = visualize.plot_1d(
|
|
32
37
|
data,
|
|
@@ -37,7 +42,7 @@ def plot(config, output_file, db_config=None):
|
|
|
37
42
|
return output_file
|
|
38
43
|
|
|
39
44
|
|
|
40
|
-
def read_table_data(config, db_config):
|
|
45
|
+
def read_table_data(config, db_config, data_path=None):
|
|
41
46
|
"""
|
|
42
47
|
Read table data from file or parameter database.
|
|
43
48
|
|
|
@@ -45,6 +50,10 @@ def read_table_data(config, db_config):
|
|
|
45
50
|
----------
|
|
46
51
|
config: dict
|
|
47
52
|
Configuration dictionary for plotting.
|
|
53
|
+
db_config: dict
|
|
54
|
+
Database configuration dictionary for accessing the model parameter database.
|
|
55
|
+
data_path: Path or str, optional
|
|
56
|
+
Path to the data files (optional). Expect all files to be in the same directory.
|
|
48
57
|
|
|
49
58
|
Returns
|
|
50
59
|
-------
|
|
@@ -57,36 +66,55 @@ def read_table_data(config, db_config):
|
|
|
57
66
|
if "parameter" in _config:
|
|
58
67
|
table = _read_table_from_model_database(_config, db_config)
|
|
59
68
|
elif "file_name" in _config:
|
|
69
|
+
file_name = (
|
|
70
|
+
_config["file_name"]
|
|
71
|
+
if data_path is None or _config.get("ignore_table_data_path", False)
|
|
72
|
+
else Path(data_path) / _config["file_name"]
|
|
73
|
+
)
|
|
74
|
+
_logger.info(f"Reading tabular data from {file_name}")
|
|
60
75
|
if "legacy" in _config.get("type", ""):
|
|
61
|
-
table = legacy_data_handler.read_legacy_data_as_table(
|
|
62
|
-
_config["file_name"], _config["type"]
|
|
63
|
-
)
|
|
76
|
+
table = legacy_data_handler.read_legacy_data_as_table(file_name, _config["type"])
|
|
64
77
|
else:
|
|
65
|
-
table = Table.read(
|
|
78
|
+
table = Table.read(file_name, format="ascii.ecsv")
|
|
66
79
|
else:
|
|
67
80
|
raise ValueError("No table data defined in configuration.")
|
|
68
81
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
data[_get_plotting_label(_config, data)] = _process_table_data(table, _config)
|
|
83
|
+
|
|
84
|
+
return data
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _get_plotting_label(config, data):
|
|
88
|
+
"""Get a label for plotting based on the configuration."""
|
|
89
|
+
label = config.get("label", f"{config.get('column_x')} vs {config.get('column_y')}")
|
|
90
|
+
if label in data:
|
|
91
|
+
index = 1
|
|
92
|
+
while f"{label} ({index})" in data:
|
|
93
|
+
index += 1
|
|
94
|
+
label = f"{label} ({index})"
|
|
95
|
+
return label
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _process_table_data(table, _config):
|
|
99
|
+
"""Process table data based on configuration."""
|
|
100
|
+
if _config.get("normalize_y"):
|
|
101
|
+
table[_config["column_y"]] = table[_config["column_y"]] / table[_config["column_y"]].max()
|
|
102
|
+
if _config.get("select_values"):
|
|
103
|
+
table = _select_values_from_table(
|
|
81
104
|
table,
|
|
82
|
-
[
|
|
83
|
-
|
|
84
|
-
_config["column_y"],
|
|
85
|
-
_config.get("column_x_err"),
|
|
86
|
-
_config.get("column_y_err"),
|
|
87
|
-
],
|
|
105
|
+
_config["select_values"]["column_name"],
|
|
106
|
+
_config["select_values"]["value"],
|
|
88
107
|
)
|
|
89
|
-
|
|
108
|
+
|
|
109
|
+
return gen.get_structure_array_from_table(
|
|
110
|
+
table,
|
|
111
|
+
[
|
|
112
|
+
_config["column_x"],
|
|
113
|
+
_config["column_y"],
|
|
114
|
+
_config.get("column_x_err"),
|
|
115
|
+
_config.get("column_y_err"),
|
|
116
|
+
],
|
|
117
|
+
)
|
|
90
118
|
|
|
91
119
|
|
|
92
120
|
def _read_table_from_model_database(table_config, db_config):
|
|
@@ -119,8 +147,38 @@ def _select_values_from_table(table, column_name, value):
|
|
|
119
147
|
return table[np.isclose(table[column_name], value)]
|
|
120
148
|
|
|
121
149
|
|
|
150
|
+
def _filter_config_by_plot_type(config, plot_type):
|
|
151
|
+
"""Filter a configuration based on plot type."""
|
|
152
|
+
if plot_type != "all" and config.get("type") != plot_type:
|
|
153
|
+
return False
|
|
154
|
+
return True
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _validate_config_columns(config, valid_columns, logger):
|
|
158
|
+
"""Validate that all required columns in a config exist and have valid data."""
|
|
159
|
+
for table_config in config.get("tables", []):
|
|
160
|
+
required_cols = [table_config.get("column_x"), table_config.get("column_y")]
|
|
161
|
+
if not all(col in valid_columns for col in required_cols if col):
|
|
162
|
+
missing_cols = [col for col in required_cols if col not in valid_columns]
|
|
163
|
+
logger.info(
|
|
164
|
+
f"Skipping plot config {config.get('type')}: "
|
|
165
|
+
f"Missing valid data in columns: {missing_cols}"
|
|
166
|
+
)
|
|
167
|
+
return False
|
|
168
|
+
return True
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def _get_valid_columns(table):
|
|
172
|
+
"""Return columns that exist and have valid data (not all NaN)."""
|
|
173
|
+
valid_columns = []
|
|
174
|
+
for col in table.colnames:
|
|
175
|
+
if not all(np.isnan(table[col])):
|
|
176
|
+
valid_columns.append(col)
|
|
177
|
+
return valid_columns
|
|
178
|
+
|
|
179
|
+
|
|
122
180
|
def generate_plot_configurations(
|
|
123
|
-
parameter, parameter_version, site, telescope, output_path, plot_type
|
|
181
|
+
parameter, parameter_version, site, telescope, output_path, plot_type, db_config
|
|
124
182
|
):
|
|
125
183
|
"""
|
|
126
184
|
Generate plot configurations for a model parameter from schema files.
|
|
@@ -129,6 +187,18 @@ def generate_plot_configurations(
|
|
|
129
187
|
----------
|
|
130
188
|
parameter: str
|
|
131
189
|
Model parameter name.
|
|
190
|
+
parameter_version: str
|
|
191
|
+
Parameter version.
|
|
192
|
+
site: str
|
|
193
|
+
Site name.
|
|
194
|
+
telescope: str
|
|
195
|
+
Telescope name.
|
|
196
|
+
output_path: str or Path
|
|
197
|
+
Output path for the plots.
|
|
198
|
+
plot_type: str
|
|
199
|
+
Plot type or "all" for all plots.
|
|
200
|
+
db_config: dict
|
|
201
|
+
Database configuration.
|
|
132
202
|
|
|
133
203
|
Returns
|
|
134
204
|
-------
|
|
@@ -136,26 +206,52 @@ def generate_plot_configurations(
|
|
|
136
206
|
Tuple containing a list of plot configurations and a list of output file names.
|
|
137
207
|
Return None, if no plot configurations are found.
|
|
138
208
|
"""
|
|
209
|
+
logger = logging.getLogger(__name__)
|
|
210
|
+
|
|
211
|
+
# Get schema configuration
|
|
139
212
|
schema = gen.change_dict_keys_case(
|
|
140
|
-
|
|
213
|
+
ascii_handler.collect_data_from_file(
|
|
141
214
|
file_name=SCHEMA_PATH / "model_parameters" / f"{parameter}.schema.yml"
|
|
142
215
|
)
|
|
143
216
|
)
|
|
144
217
|
configs = schema.get("plot_configuration")
|
|
145
218
|
if not configs:
|
|
146
219
|
return None
|
|
147
|
-
if plot_type != "all":
|
|
148
|
-
configs = [config for config in configs if config.get("type") == plot_type]
|
|
149
|
-
if not configs:
|
|
150
|
-
raise ValueError(
|
|
151
|
-
f"No plot configuration found for type '{plot_type}' in parameter '{parameter}'."
|
|
152
|
-
)
|
|
153
220
|
|
|
221
|
+
# Get data table and determine valid columns
|
|
222
|
+
table = _read_table_from_model_database(
|
|
223
|
+
{
|
|
224
|
+
"parameter": parameter,
|
|
225
|
+
"site": site,
|
|
226
|
+
"telescope": telescope,
|
|
227
|
+
"parameter_version": parameter_version,
|
|
228
|
+
},
|
|
229
|
+
db_config=db_config,
|
|
230
|
+
)
|
|
231
|
+
valid_columns = _get_valid_columns(table)
|
|
232
|
+
|
|
233
|
+
# Filter configs based on plot type and column validity
|
|
234
|
+
valid_configs = []
|
|
235
|
+
for config in configs:
|
|
236
|
+
if not _filter_config_by_plot_type(config, plot_type):
|
|
237
|
+
continue
|
|
238
|
+
|
|
239
|
+
if _validate_config_columns(config, valid_columns, logger):
|
|
240
|
+
valid_configs.append(config)
|
|
241
|
+
|
|
242
|
+
if not valid_configs:
|
|
243
|
+
if plot_type != "all":
|
|
244
|
+
logger.warning("No valid plot config found.")
|
|
245
|
+
return None
|
|
246
|
+
|
|
247
|
+
# Generate output files
|
|
154
248
|
output_files = []
|
|
155
|
-
for _config in
|
|
249
|
+
for _config in valid_configs:
|
|
156
250
|
for _table in _config.get("tables", []):
|
|
157
251
|
_table["parameter_version"] = parameter_version
|
|
158
252
|
_table["site"] = site
|
|
253
|
+
_table["telescope"] = telescope
|
|
254
|
+
|
|
159
255
|
output_files.append(
|
|
160
256
|
_generate_output_file_name(
|
|
161
257
|
parameter=parameter,
|
|
@@ -167,7 +263,7 @@ def generate_plot_configurations(
|
|
|
167
263
|
)
|
|
168
264
|
)
|
|
169
265
|
|
|
170
|
-
return
|
|
266
|
+
return valid_configs, output_files
|
|
171
267
|
|
|
172
268
|
|
|
173
269
|
def _generate_output_file_name(
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
2
|
"""Module for visualization."""
|
|
3
3
|
|
|
4
|
-
import copy
|
|
5
4
|
import logging
|
|
6
5
|
import re
|
|
7
6
|
from collections import OrderedDict
|
|
@@ -24,6 +23,7 @@ __all__ = [
|
|
|
24
23
|
"set_style",
|
|
25
24
|
]
|
|
26
25
|
|
|
26
|
+
|
|
27
27
|
COLORS = {}
|
|
28
28
|
COLORS["classic"] = [
|
|
29
29
|
"#ba2c54",
|
|
@@ -627,105 +627,6 @@ def plot_hist_2d(data, **kwargs):
|
|
|
627
627
|
return fig
|
|
628
628
|
|
|
629
629
|
|
|
630
|
-
def plot_simtel_ctapipe(filename, cleaning_args, distance, return_cleaned=False):
|
|
631
|
-
"""
|
|
632
|
-
Read in a sim_telarray file and plots reconstructed photoelectrons via ctapipe.
|
|
633
|
-
|
|
634
|
-
Parameters
|
|
635
|
-
----------
|
|
636
|
-
filename : str
|
|
637
|
-
Path to the sim_telarray file.
|
|
638
|
-
cleaning_args : tuple, optional
|
|
639
|
-
Cleaning parameters as (boundary_thresh, picture_thresh, min_number_picture_neighbors).
|
|
640
|
-
distance : astropy Quantity, optional
|
|
641
|
-
Distance to the target.
|
|
642
|
-
return_cleaned : bool, optional
|
|
643
|
-
If True, apply cleaning to the image.
|
|
644
|
-
|
|
645
|
-
Returns
|
|
646
|
-
-------
|
|
647
|
-
fig : matplotlib.figure.Figure
|
|
648
|
-
The matplotlib figure containing the plot.
|
|
649
|
-
"""
|
|
650
|
-
# pylint:disable=import-outside-toplevel
|
|
651
|
-
import numpy as np
|
|
652
|
-
from ctapipe.calib import CameraCalibrator
|
|
653
|
-
from ctapipe.image import tailcuts_clean
|
|
654
|
-
from ctapipe.io import EventSource
|
|
655
|
-
from ctapipe.visualization import CameraDisplay
|
|
656
|
-
|
|
657
|
-
default_cleaning_levels = {
|
|
658
|
-
"CHEC": (2, 4, 2),
|
|
659
|
-
"LSTCam": (3.5, 7, 2),
|
|
660
|
-
"FlashCam": (3.5, 7, 2),
|
|
661
|
-
"NectarCam": (4, 8, 2),
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
source = EventSource(filename, max_events=1)
|
|
665
|
-
event = None
|
|
666
|
-
events = [copy.deepcopy(event) for event in source]
|
|
667
|
-
if len(events) > 1:
|
|
668
|
-
event = events[-1]
|
|
669
|
-
else:
|
|
670
|
-
try:
|
|
671
|
-
event = events[0]
|
|
672
|
-
except IndexError:
|
|
673
|
-
event = events
|
|
674
|
-
tel_id = sorted(event.r1.tel.keys())[0]
|
|
675
|
-
|
|
676
|
-
calib = CameraCalibrator(subarray=source.subarray)
|
|
677
|
-
calib(event)
|
|
678
|
-
|
|
679
|
-
geometry = source.subarray.tel[1].camera.geometry
|
|
680
|
-
image = event.dl1.tel[tel_id].image
|
|
681
|
-
cleaned = image.copy()
|
|
682
|
-
|
|
683
|
-
if return_cleaned:
|
|
684
|
-
if cleaning_args is None:
|
|
685
|
-
boundary, picture, min_neighbors = default_cleaning_levels[geometry.name]
|
|
686
|
-
else:
|
|
687
|
-
boundary, picture, min_neighbors = cleaning_args
|
|
688
|
-
mask = tailcuts_clean(
|
|
689
|
-
geometry,
|
|
690
|
-
image,
|
|
691
|
-
picture_thresh=picture,
|
|
692
|
-
boundary_thresh=boundary,
|
|
693
|
-
min_number_picture_neighbors=min_neighbors,
|
|
694
|
-
)
|
|
695
|
-
cleaned[~mask] = 0
|
|
696
|
-
|
|
697
|
-
fig, ax = plt.subplots(dpi=300)
|
|
698
|
-
title = f"CT{tel_id}, run {event.index.obs_id} event {event.index.event_id}"
|
|
699
|
-
disp = CameraDisplay(geometry, image=cleaned, norm="symlog", ax=ax)
|
|
700
|
-
disp.cmap = "RdBu_r"
|
|
701
|
-
disp.add_colorbar(fraction=0.02, pad=-0.1)
|
|
702
|
-
disp.set_limits_percent(100)
|
|
703
|
-
ax.set_title(title, pad=20)
|
|
704
|
-
ax.annotate(
|
|
705
|
-
f"tel type: {source.subarray.tel[1].type.name}\n"
|
|
706
|
-
f"optics: {source.subarray.tel[1].optics.name}\n"
|
|
707
|
-
f"camera: {source.subarray.tel[1].camera_name}\n"
|
|
708
|
-
f"distance: {distance.to(u.m)}",
|
|
709
|
-
xy=(0, 0),
|
|
710
|
-
xytext=(0.1, 1),
|
|
711
|
-
xycoords="axes fraction",
|
|
712
|
-
va="top",
|
|
713
|
-
size=7,
|
|
714
|
-
)
|
|
715
|
-
ax.annotate(
|
|
716
|
-
f"dl1 image,\ntotal $p.e._{{reco}}$: {np.round(np.sum(image))}\n",
|
|
717
|
-
xy=(0, 0),
|
|
718
|
-
xytext=(0.75, 1),
|
|
719
|
-
xycoords="axes fraction",
|
|
720
|
-
va="top",
|
|
721
|
-
ha="left",
|
|
722
|
-
size=7,
|
|
723
|
-
)
|
|
724
|
-
ax.set_axis_off()
|
|
725
|
-
fig.tight_layout()
|
|
726
|
-
return fig
|
|
727
|
-
|
|
728
|
-
|
|
729
630
|
def save_figure(fig, output_file, figure_format=None, log_title="", dpi="figure"):
|
|
730
631
|
"""
|
|
731
632
|
Save figure to output file(s).
|