gammasimtools 0.17.0__py3-none-any.whl → 0.19.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.17.0.dist-info → gammasimtools-0.19.0.dist-info}/METADATA +27 -69
- gammasimtools-0.19.0.dist-info/RECORD +393 -0
- {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/entry_points.txt +10 -2
- {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/licenses/LICENSE +1 -1
- simtools/_version.py +16 -3
- simtools/applications/calculate_trigger_rate.py +1 -1
- 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 +10 -1
- simtools/applications/db_add_value_from_json_to_db.py +2 -1
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +8 -13
- simtools/applications/db_generate_compound_indexes.py +61 -0
- simtools/applications/db_get_file_from_db.py +1 -1
- simtools/applications/db_get_parameter_from_db.py +4 -4
- simtools/applications/db_inspect_databases.py +20 -10
- simtools/applications/derive_mirror_rnda.py +18 -12
- simtools/applications/derive_psf_parameters.py +59 -309
- 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_sim_telarray_histograms.py +1 -1
- simtools/applications/generate_simtel_event_data.py +97 -5
- 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 +16 -18
- simtools/applications/plot_array_layout.py +3 -3
- simtools/applications/plot_simtel_events.py +379 -0
- simtools/applications/plot_tabular_data.py +21 -3
- simtools/applications/plot_tabular_data_for_model_parameter.py +104 -0
- simtools/applications/print_version.py +8 -9
- simtools/applications/production_derive_corsika_limits.py +64 -27
- 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 +2 -1
- 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 +31 -1
- simtools/configuration/configurator.py +4 -4
- simtools/constants.py +2 -0
- 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 +88 -24
- simtools/data_model/validate_data.py +34 -9
- simtools/db/db_handler.py +48 -37
- simtools/db/db_model_upload.py +3 -3
- simtools/dependencies.py +88 -25
- simtools/io/ascii_handler.py +279 -0
- simtools/{io_operations → io}/io_handler.py +25 -3
- simtools/{io_operations/io_table_handler.py → io/table_handler.py} +1 -1
- simtools/job_execution/htcondor_script_generator.py +15 -4
- simtools/layout/array_layout.py +1 -1
- simtools/layout/array_layout_utils.py +19 -8
- simtools/model/array_model.py +28 -5
- simtools/model/flasher_model.py +106 -0
- simtools/model/model_parameter.py +4 -4
- simtools/model/model_repository.py +197 -2
- simtools/model/telescope_model.py +3 -1
- simtools/production_configuration/derive_corsika_limits.py +361 -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/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/resources/array-element-ids.json +126 -0
- 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 +7 -3
- 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 +42 -1
- simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +44 -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 +11 -1
- simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +11 -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 +32 -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 +13 -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 +11 -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 +11 -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 +13 -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_sky_map.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 +20 -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 +11 -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 +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/schemas/plot_configuration.metaschema.yml +51 -59
- simtools/schemas/production_configuration_metrics.schema.yml +12 -2
- simtools/schemas/production_tables.schema.yml +2 -2
- simtools/simtel/simtel_config_reader.py +2 -2
- simtools/simtel/simtel_config_writer.py +16 -4
- simtools/simtel/simtel_io_event_histograms.py +746 -0
- simtools/simtel/simtel_io_event_reader.py +16 -43
- simtools/simtel/simtel_io_event_writer.py +46 -10
- simtools/simtel/simtel_io_histogram.py +3 -1
- simtools/simtel/simtel_io_histograms.py +7 -3
- simtools/simtel/simtel_io_metadata.py +99 -3
- simtools/simtel/simtel_table_reader.py +92 -10
- 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/testing/configuration.py +24 -26
- simtools/testing/helpers.py +2 -2
- simtools/testing/log_inspector.py +50 -0
- simtools/testing/validate_output.py +87 -37
- simtools/utils/general.py +125 -257
- simtools/utils/geometry.py +36 -0
- simtools/utils/names.py +72 -3
- simtools/visualization/legend_handlers.py +180 -264
- simtools/visualization/plot_array_layout.py +20 -8
- simtools/visualization/plot_pixels.py +1 -2
- simtools/visualization/plot_tables.py +202 -27
- simtools/visualization/simtel_event_plots.py +816 -0
- simtools/visualization/visualize.py +4 -101
- gammasimtools-0.17.0.dist-info/RECORD +0 -374
- simtools/production_configuration/derive_corsika_limits_grid.py +0 -189
- {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/WHEEL +0 -0
- {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.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/{schemas → resources}/array_elements.yml +0 -0
|
@@ -5,10 +5,11 @@ import re
|
|
|
5
5
|
from collections import defaultdict
|
|
6
6
|
|
|
7
7
|
import astropy.io.ascii
|
|
8
|
+
import astropy.units as u
|
|
8
9
|
import numpy as np
|
|
9
10
|
from astropy.table import Table
|
|
10
11
|
|
|
11
|
-
from simtools.
|
|
12
|
+
from simtools.io import io_handler
|
|
12
13
|
from simtools.model.model_utils import initialize_simulation_models
|
|
13
14
|
from simtools.simtel.simulator_camera_efficiency import SimulatorCameraEfficiency
|
|
14
15
|
from simtools.utils import names
|
|
@@ -23,32 +24,20 @@ class CameraEfficiency:
|
|
|
23
24
|
|
|
24
25
|
Parameters
|
|
25
26
|
----------
|
|
26
|
-
simtel_path: str (or Path)
|
|
27
|
-
Location of sim_telarray installation.
|
|
28
27
|
db_config: dict
|
|
29
28
|
Configuration for the database.
|
|
30
29
|
label: str
|
|
31
30
|
Instance label, optional.
|
|
32
31
|
config_data: dict.
|
|
33
32
|
Dict containing the configurable parameters.
|
|
34
|
-
test: bool
|
|
35
|
-
Is it a test instance (at the moment only affects the location of files).
|
|
36
33
|
"""
|
|
37
34
|
|
|
38
|
-
def __init__(
|
|
39
|
-
self,
|
|
40
|
-
simtel_path,
|
|
41
|
-
config_data,
|
|
42
|
-
label,
|
|
43
|
-
db_config,
|
|
44
|
-
test=False,
|
|
45
|
-
):
|
|
35
|
+
def __init__(self, config_data, label, db_config):
|
|
46
36
|
"""Initialize the CameraEfficiency class."""
|
|
47
37
|
self._logger = logging.getLogger(__name__)
|
|
48
38
|
|
|
49
|
-
self._simtel_path = simtel_path
|
|
39
|
+
self._simtel_path = config_data.get("simtel_path")
|
|
50
40
|
self.label = label
|
|
51
|
-
self.test = test
|
|
52
41
|
|
|
53
42
|
self.io_handler = io_handler.IOHandler()
|
|
54
43
|
self.telescope_model, self.site_model = initialize_simulation_models(
|
|
@@ -66,15 +55,16 @@ class CameraEfficiency:
|
|
|
66
55
|
self.config = self._configuration_from_args_dict(config_data)
|
|
67
56
|
self._file = self._load_files()
|
|
68
57
|
|
|
58
|
+
self.nsb_pixel_pe_per_ns = None
|
|
59
|
+
self.nsb_rate_ref_conditions = None
|
|
60
|
+
|
|
69
61
|
def __repr__(self):
|
|
70
62
|
"""Return string representation of the CameraEfficiency instance."""
|
|
71
63
|
return f"CameraEfficiency(label={self.label})\n"
|
|
72
64
|
|
|
73
65
|
def _configuration_from_args_dict(self, config_data):
|
|
74
66
|
"""
|
|
75
|
-
Extract
|
|
76
|
-
|
|
77
|
-
Zenith and azimuth angles are set to default values if not provided.
|
|
67
|
+
Extract configuration data from command line arguments.
|
|
78
68
|
|
|
79
69
|
Parameters
|
|
80
70
|
----------
|
|
@@ -86,22 +76,9 @@ class CameraEfficiency:
|
|
|
86
76
|
dict
|
|
87
77
|
Configuration data.
|
|
88
78
|
"""
|
|
89
|
-
zenith_angle = config_data.get("zenith_angle")
|
|
90
|
-
if zenith_angle is not None:
|
|
91
|
-
zenith_angle = zenith_angle.to("deg").value
|
|
92
|
-
else:
|
|
93
|
-
zenith_angle = 20.0
|
|
94
|
-
self._logger.info(f"Setting zenith angle to default value {zenith_angle} deg")
|
|
95
|
-
azimuth_angle = config_data.get("azimuth_angle")
|
|
96
|
-
if azimuth_angle is not None:
|
|
97
|
-
azimuth_angle = azimuth_angle.to("deg").value
|
|
98
|
-
else:
|
|
99
|
-
azimuth_angle = 0.0
|
|
100
|
-
self._logger.info(f"Setting azimuth angle to default value {azimuth_angle} deg")
|
|
101
|
-
|
|
102
79
|
return {
|
|
103
|
-
"zenith_angle": zenith_angle,
|
|
104
|
-
"azimuth_angle": azimuth_angle,
|
|
80
|
+
"zenith_angle": config_data["zenith_angle"].to("deg").value,
|
|
81
|
+
"azimuth_angle": config_data["azimuth_angle"].to("deg").value,
|
|
105
82
|
"nsb_spectrum": config_data.get("nsb_spectrum", None),
|
|
106
83
|
}
|
|
107
84
|
|
|
@@ -149,7 +126,7 @@ class CameraEfficiency:
|
|
|
149
126
|
"skip_correction_to_nsb_spectrum", False
|
|
150
127
|
),
|
|
151
128
|
)
|
|
152
|
-
simtel.run(
|
|
129
|
+
simtel.run()
|
|
153
130
|
|
|
154
131
|
def export_model_files(self):
|
|
155
132
|
"""Export model and config files to the output directory."""
|
|
@@ -159,6 +136,30 @@ class CameraEfficiency:
|
|
|
159
136
|
model_directory=self.telescope_model.config_file_directory
|
|
160
137
|
)
|
|
161
138
|
|
|
139
|
+
def get_nsb_pixel_rate(self, reference_conditions=False):
|
|
140
|
+
"""
|
|
141
|
+
Return the expected NSB pixel rate for each camera pixel.
|
|
142
|
+
|
|
143
|
+
This is an approximation, as testeff calculates the expected NSB pixel rate
|
|
144
|
+
for the on-axis pixel only.
|
|
145
|
+
|
|
146
|
+
Returns
|
|
147
|
+
-------
|
|
148
|
+
list
|
|
149
|
+
Expected NSB pixel rate in p.e./ns for the provided NSB spectrum.
|
|
150
|
+
"""
|
|
151
|
+
base_rate = (
|
|
152
|
+
self.nsb_rate_ref_conditions if reference_conditions else self.nsb_pixel_pe_per_ns
|
|
153
|
+
)
|
|
154
|
+
# Accept either a plain float (assumed already in GHz) or an astropy Quantity
|
|
155
|
+
if isinstance(base_rate, u.Quantity):
|
|
156
|
+
base_rate_ghz = base_rate.to(u.GHz).value
|
|
157
|
+
else:
|
|
158
|
+
base_rate_ghz = float(base_rate)
|
|
159
|
+
|
|
160
|
+
n_pixels = int(self.telescope_model.get_parameter_value("camera_pixels"))
|
|
161
|
+
return u.Quantity(np.full(n_pixels, base_rate_ghz), u.GHz)
|
|
162
|
+
|
|
162
163
|
def analyze(self, export=True, force=False):
|
|
163
164
|
"""
|
|
164
165
|
Analyze camera efficiency output file and store the results in _results.
|
|
@@ -243,6 +244,8 @@ class CameraEfficiency:
|
|
|
243
244
|
self._results = Table(_results)
|
|
244
245
|
self._has_results = True
|
|
245
246
|
|
|
247
|
+
self.nsb_pixel_pe_per_ns, self.nsb_rate_ref_conditions = self.calc_nsb_rate()
|
|
248
|
+
|
|
246
249
|
print("\33[40;37;1m")
|
|
247
250
|
self._logger.info(f"\n{self.results_summary()}")
|
|
248
251
|
print("\033[0m")
|
|
@@ -257,7 +260,6 @@ class CameraEfficiency:
|
|
|
257
260
|
Include a header for the zenith/azimuth settings and the NSB spectrum file which was used.
|
|
258
261
|
The summary includes the various CTAO requirements and the final expected NSB pixel rate.
|
|
259
262
|
"""
|
|
260
|
-
nsb_pixel_pe_per_ns, nsb_rate_ref_conditions = self.calc_nsb_rate()
|
|
261
263
|
nsb_spectrum_text = (
|
|
262
264
|
f"NSB spectrum file: {self.config['nsb_spectrum']}"
|
|
263
265
|
if self.config["nsb_spectrum"]
|
|
@@ -277,9 +279,9 @@ class CameraEfficiency:
|
|
|
277
279
|
"(A-PERF-2025/B-TEL-0090): "
|
|
278
280
|
f"{self.calc_tot_efficiency(self.calc_tel_efficiency()):.4f}\n"
|
|
279
281
|
"Expected NSB pixel rate for the provided NSB spectrum: "
|
|
280
|
-
f"{nsb_pixel_pe_per_ns:.4f} [p.e./ns]\n"
|
|
282
|
+
f"{self.nsb_pixel_pe_per_ns:.4f} [p.e./ns]\n"
|
|
281
283
|
"Expected NSB pixel rate for the reference NSB: "
|
|
282
|
-
f"{nsb_rate_ref_conditions:.4f} [p.e./ns]\n"
|
|
284
|
+
f"{self.nsb_rate_ref_conditions:.4f} [p.e./ns]\n"
|
|
283
285
|
)
|
|
284
286
|
|
|
285
287
|
def export_results(self):
|
|
@@ -388,10 +390,17 @@ class CameraEfficiency:
|
|
|
388
390
|
c2_sum = np.sum(c2_reduced_wl)
|
|
389
391
|
return c2_sum / c1_sum / self._results["masts"][0]
|
|
390
392
|
|
|
391
|
-
def calc_nsb_rate(self):
|
|
393
|
+
def calc_nsb_rate(self, wavelength_range=(300 * u.nm, 650 * u.nm)):
|
|
392
394
|
"""
|
|
393
395
|
Calculate the NSB rate.
|
|
394
396
|
|
|
397
|
+
CTAO reference wavelength range is 300-650 nm.
|
|
398
|
+
|
|
399
|
+
Parameters
|
|
400
|
+
----------
|
|
401
|
+
wavelength_range: tuple
|
|
402
|
+
Wavelength range used for the NSB rate calculation (default: (300 nm, 650 nm)).
|
|
403
|
+
|
|
395
404
|
Returns
|
|
396
405
|
-------
|
|
397
406
|
nsb_rate_provided_spectrum: float
|
|
@@ -400,27 +409,34 @@ class CameraEfficiency:
|
|
|
400
409
|
NSB pixel rate in p.e./ns for reference conditions
|
|
401
410
|
(https://jama.cta-observatory.org/perspective.req#/items/26694?projectId=11)
|
|
402
411
|
"""
|
|
403
|
-
|
|
412
|
+
self.nsb_pixel_pe_per_ns = (
|
|
404
413
|
np.sum(self._results["N4"])
|
|
405
414
|
* self.telescope_model.camera.get_pixel_active_solid_angle()
|
|
406
415
|
* self.telescope_model.get_on_axis_eff_optical_area().to("m2").value
|
|
407
416
|
/ self.telescope_model.get_parameter_value("telescope_transmission")[0]
|
|
408
417
|
)
|
|
409
418
|
|
|
410
|
-
|
|
411
|
-
|
|
419
|
+
wavelength_range = (
|
|
420
|
+
wavelength_range[0].to("nm").value,
|
|
421
|
+
wavelength_range[1].to("nm").value,
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
# (integral is in ph./(m^2 ns sr) ) over wavelength_range
|
|
425
|
+
n1_reduced_wl = self._results["N1"][
|
|
426
|
+
[wavelength_range[0] <= wl_now <= wavelength_range[1] for wl_now in self._results["wl"]]
|
|
427
|
+
]
|
|
412
428
|
n1_sum = np.sum(n1_reduced_wl)
|
|
413
429
|
n1_integral_edges = self._results["N1"][
|
|
414
|
-
[wl_now in [
|
|
430
|
+
[wl_now in [wavelength_range[0], wavelength_range[1]] for wl_now in self._results["wl"]]
|
|
415
431
|
]
|
|
416
432
|
n1_integral_edges_sum = np.sum(n1_integral_edges)
|
|
417
433
|
nsb_integral = 0.0001 * (n1_sum - 0.5 * n1_integral_edges_sum)
|
|
418
|
-
nsb_rate_ref_conditions = (
|
|
419
|
-
|
|
434
|
+
self.nsb_rate_ref_conditions = (
|
|
435
|
+
self.nsb_pixel_pe_per_ns
|
|
420
436
|
* self.site_model.get_parameter_value("nsb_reference_value")
|
|
421
437
|
/ nsb_integral
|
|
422
438
|
)
|
|
423
|
-
return
|
|
439
|
+
return self.nsb_pixel_pe_per_ns * u.GHz, self.nsb_rate_ref_conditions * u.GHz
|
|
424
440
|
|
|
425
441
|
def plot_efficiency(self, efficiency_type, save_fig=False):
|
|
426
442
|
"""
|
|
@@ -15,7 +15,7 @@ import simtools.data_model.model_data_writer as writer
|
|
|
15
15
|
from simtools.constants import MODEL_PARAMETER_SCHEMA_URL, SCHEMA_PATH
|
|
16
16
|
from simtools.data_model import validate_data
|
|
17
17
|
from simtools.data_model.metadata_collector import MetadataCollector
|
|
18
|
-
from simtools.
|
|
18
|
+
from simtools.io import io_handler
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class SinglePhotonElectronSpectrum:
|
|
@@ -307,6 +307,12 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
307
307
|
selected_parameters=simulation_configuration["corsika_configuration"],
|
|
308
308
|
available_parameters=self._get_dictionary_with_shower_configuration(),
|
|
309
309
|
)
|
|
310
|
+
if "sim_telarray_configuration" in simulation_configuration:
|
|
311
|
+
self._initialize_simulation_configuration(
|
|
312
|
+
group_name="sim_telarray configuration",
|
|
313
|
+
selected_parameters=simulation_configuration["sim_telarray_configuration"],
|
|
314
|
+
available_parameters=self._get_dictionary_with_sim_telarray_configuration(),
|
|
315
|
+
)
|
|
310
316
|
|
|
311
317
|
def _initialize_simulation_software(self):
|
|
312
318
|
"""Initialize simulation software arguments."""
|
|
@@ -351,11 +357,13 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
351
357
|
),
|
|
352
358
|
"type": CommandLineParser.azimuth_angle,
|
|
353
359
|
"required": True,
|
|
360
|
+
"default": 0 * u.deg,
|
|
354
361
|
},
|
|
355
362
|
"zenith_angle": {
|
|
356
363
|
"help": "Zenith angle in degrees (between 0 and 180).",
|
|
357
364
|
"type": CommandLineParser.zenith_angle,
|
|
358
365
|
"required": True,
|
|
366
|
+
"default": 20 * u.deg,
|
|
359
367
|
},
|
|
360
368
|
"nshow": {
|
|
361
369
|
"help": "Number of showers per run to simulate.",
|
|
@@ -429,6 +437,27 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
429
437
|
},
|
|
430
438
|
}
|
|
431
439
|
|
|
440
|
+
@staticmethod
|
|
441
|
+
def _get_dictionary_with_sim_telarray_configuration():
|
|
442
|
+
"""Return dictionary with sim_telarray configuration parameters."""
|
|
443
|
+
return {
|
|
444
|
+
"sim_telarray_instrument_seeds": {
|
|
445
|
+
"help": (
|
|
446
|
+
"Random seed used for sim_telarray instrument setup. "
|
|
447
|
+
"If '--sim_telarray_random_instrument_instances' is not set: "
|
|
448
|
+
"use as sim_telarray seed ('random_seed' parameter). Otherwise: "
|
|
449
|
+
"use as base seed to generate the random instrument instance seeds."
|
|
450
|
+
),
|
|
451
|
+
"type": str,
|
|
452
|
+
"required": False,
|
|
453
|
+
},
|
|
454
|
+
"sim_telarray_random_instrument_instances": {
|
|
455
|
+
"help": "Number of random instrument instances initialized in sim_telarray.",
|
|
456
|
+
"type": int,
|
|
457
|
+
"required": False,
|
|
458
|
+
},
|
|
459
|
+
}
|
|
460
|
+
|
|
432
461
|
def _initialize_simulation_configuration(
|
|
433
462
|
self, group_name, selected_parameters, available_parameters
|
|
434
463
|
):
|
|
@@ -474,7 +503,8 @@ class CommandLineParser(argparse.ArgumentParser):
|
|
|
474
503
|
_layout_group = job_group.add_mutually_exclusive_group(required=required)
|
|
475
504
|
_layout_group.add_argument(
|
|
476
505
|
"--array_layout_name",
|
|
477
|
-
help="array layout name (e.g., alpha, subsystem_msts)",
|
|
506
|
+
help="array layout name(s) (e.g., alpha, subsystem_msts)",
|
|
507
|
+
nargs="+",
|
|
478
508
|
type=str,
|
|
479
509
|
required=False,
|
|
480
510
|
)
|
|
@@ -11,7 +11,7 @@ from dotenv import load_dotenv
|
|
|
11
11
|
|
|
12
12
|
import simtools.configuration.commandline_parser as argparser
|
|
13
13
|
from simtools.db.db_handler import jsonschema_db_dict
|
|
14
|
-
from simtools.
|
|
14
|
+
from simtools.io import ascii_handler, io_handler
|
|
15
15
|
from simtools.utils import general as gen
|
|
16
16
|
|
|
17
17
|
__all__ = [
|
|
@@ -280,15 +280,15 @@ class Configurator:
|
|
|
280
280
|
try:
|
|
281
281
|
self._logger.debug(f"Reading configuration from {config_file}")
|
|
282
282
|
_config_dict = (
|
|
283
|
-
|
|
283
|
+
ascii_handler.collect_data_from_file(file_name=config_file) if config_file else None
|
|
284
284
|
)
|
|
285
285
|
# yaml parser adds \n in multiline strings, remove them
|
|
286
286
|
_config_dict = gen.remove_substring_recursively_from_dict(_config_dict, substring="\n")
|
|
287
287
|
# read configuration for first application
|
|
288
|
-
if "
|
|
288
|
+
if "configuration" in _config_dict.get("applications", [{}])[0]:
|
|
289
289
|
self._fill_from_config_dict(
|
|
290
290
|
input_dict=gen.change_dict_keys_case(
|
|
291
|
-
_config_dict["
|
|
291
|
+
_config_dict["applications"][0]["configuration"],
|
|
292
292
|
),
|
|
293
293
|
overwrite=True,
|
|
294
294
|
)
|
simtools/constants.py
CHANGED
|
@@ -7,7 +7,7 @@ import numpy as np
|
|
|
7
7
|
from astropy import units as u
|
|
8
8
|
|
|
9
9
|
from simtools.corsika.primary_particle import PrimaryParticle
|
|
10
|
-
from simtools.
|
|
10
|
+
from simtools.io import io_handler
|
|
11
11
|
from simtools.model.model_parameter import ModelParameter
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
@@ -39,9 +39,12 @@ class CorsikaConfig:
|
|
|
39
39
|
MongoDB configuration.
|
|
40
40
|
label : str
|
|
41
41
|
Instance label.
|
|
42
|
+
dummy_simulations : bool
|
|
43
|
+
If True, the configuration is generated for dummy simulations
|
|
44
|
+
(e.g., sim_telarray requires for some run modes a valid CORSIKA input file).
|
|
42
45
|
"""
|
|
43
46
|
|
|
44
|
-
def __init__(self, array_model, args_dict, db_config=None, label=None):
|
|
47
|
+
def __init__(self, array_model, args_dict, db_config=None, label=None, dummy_simulations=False):
|
|
45
48
|
"""Initialize CorsikaConfig."""
|
|
46
49
|
self._logger = logging.getLogger(__name__)
|
|
47
50
|
self._logger.debug("Init CorsikaConfig")
|
|
@@ -51,13 +54,13 @@ class CorsikaConfig:
|
|
|
51
54
|
self.azimuth_angle = None
|
|
52
55
|
self._run_number = None
|
|
53
56
|
self.config_file_path = None
|
|
54
|
-
|
|
55
|
-
self.
|
|
57
|
+
self.primary_particle = args_dict # see setter for primary_particle
|
|
58
|
+
self.dummy_simulations = dummy_simulations
|
|
56
59
|
|
|
57
60
|
self.io_handler = io_handler.IOHandler()
|
|
58
61
|
self.array_model = array_model
|
|
59
62
|
self.config = self.fill_corsika_configuration(args_dict, db_config)
|
|
60
|
-
self.
|
|
63
|
+
self.is_file_updated = False
|
|
61
64
|
|
|
62
65
|
def __repr__(self):
|
|
63
66
|
"""CorsikaConfig class representation."""
|
|
@@ -110,7 +113,7 @@ class CorsikaConfig:
|
|
|
110
113
|
if args_dict is None:
|
|
111
114
|
return {}
|
|
112
115
|
|
|
113
|
-
self.
|
|
116
|
+
self.is_file_updated = False
|
|
114
117
|
self.azimuth_angle = int(args_dict["azimuth_angle"].to("deg").value)
|
|
115
118
|
self.zenith_angle = args_dict["zenith_angle"].to("deg").value
|
|
116
119
|
|
|
@@ -119,7 +122,10 @@ class CorsikaConfig:
|
|
|
119
122
|
)
|
|
120
123
|
|
|
121
124
|
config = {}
|
|
122
|
-
|
|
125
|
+
if self.dummy_simulations:
|
|
126
|
+
config["USER_INPUT"] = self._corsika_configuration_for_dummy_simulations()
|
|
127
|
+
else:
|
|
128
|
+
config["USER_INPUT"] = self._corsika_configuration_from_user_input(args_dict)
|
|
123
129
|
|
|
124
130
|
if db_config is None: # all following parameter require DB
|
|
125
131
|
return config
|
|
@@ -200,6 +206,30 @@ class CorsikaConfig:
|
|
|
200
206
|
f"Values are {current_value} and {next_value} respectively."
|
|
201
207
|
)
|
|
202
208
|
|
|
209
|
+
def _corsika_configuration_for_dummy_simulations(self):
|
|
210
|
+
"""
|
|
211
|
+
Return CORSIKA configuration for dummy simulations.
|
|
212
|
+
|
|
213
|
+
Settings are such that that the simulations are fast
|
|
214
|
+
and none (or not many) Cherenkov photons are generated.
|
|
215
|
+
|
|
216
|
+
Returns
|
|
217
|
+
-------
|
|
218
|
+
dict
|
|
219
|
+
Dictionary with CORSIKA parameters for dummy simulations.
|
|
220
|
+
"""
|
|
221
|
+
return {
|
|
222
|
+
"EVTNR": [1],
|
|
223
|
+
"NSHOW": [1],
|
|
224
|
+
"PRMPAR": [1], # CORSIKA ID 1 for primary gamma
|
|
225
|
+
"ESLOPE": [-2.0],
|
|
226
|
+
"ERANGE": [0.1, 0.1],
|
|
227
|
+
"THETAP": [20.0, 20.0],
|
|
228
|
+
"PHIP": [0.0, 0.0],
|
|
229
|
+
"VIEWCONE": [0.0, 0.0],
|
|
230
|
+
"CSCAT": [1, 0.0, 10.0],
|
|
231
|
+
}
|
|
232
|
+
|
|
203
233
|
def _corsika_configuration_from_user_input(self, args_dict):
|
|
204
234
|
"""
|
|
205
235
|
Get CORSIKA configuration from user input.
|
|
@@ -492,17 +522,9 @@ class CorsikaConfig:
|
|
|
492
522
|
if par_name in values:
|
|
493
523
|
par_value = values[par_name]
|
|
494
524
|
if len(par_value) == 0:
|
|
495
|
-
|
|
496
|
-
raise KeyError
|
|
525
|
+
raise KeyError(f"Parameter {par_name} is not a CORSIKA config parameter")
|
|
497
526
|
return par_value if len(par_value) > 1 else par_value[0]
|
|
498
527
|
|
|
499
|
-
def print_config_parameter(self):
|
|
500
|
-
"""Print CORSIKA config parameters for inspection."""
|
|
501
|
-
for parameter_type, parameter_dict in self.config.items():
|
|
502
|
-
print(f"Parameter type: {parameter_type}\n")
|
|
503
|
-
for par, value in parameter_dict.items():
|
|
504
|
-
print(f"{par} = {value}")
|
|
505
|
-
|
|
506
528
|
@staticmethod
|
|
507
529
|
def _get_text_single_line(pars, line_begin=""):
|
|
508
530
|
"""
|
|
@@ -538,7 +560,7 @@ class CorsikaConfig:
|
|
|
538
560
|
the output directly to sim_telarray.
|
|
539
561
|
|
|
540
562
|
"""
|
|
541
|
-
if self.
|
|
563
|
+
if self.is_file_updated:
|
|
542
564
|
self._logger.debug(f"CORSIKA input file already updated: {self.config_file_path}")
|
|
543
565
|
return self.config_file_path
|
|
544
566
|
_output_generic_file_name = self.set_output_file_and_directory(use_multipipe=use_multipipe)
|
|
@@ -605,7 +627,7 @@ class CorsikaConfig:
|
|
|
605
627
|
model_directory=self.array_model.get_config_directory()
|
|
606
628
|
)
|
|
607
629
|
|
|
608
|
-
self.
|
|
630
|
+
self.is_file_updated = True
|
|
609
631
|
return self.config_file_path
|
|
610
632
|
|
|
611
633
|
def get_corsika_config_file_name(self, file_type, run_number=None):
|
|
@@ -758,9 +780,7 @@ class CorsikaConfig:
|
|
|
758
780
|
|
|
759
781
|
def validate_run_number(self, run_number):
|
|
760
782
|
"""
|
|
761
|
-
Validate run number and return it.
|
|
762
|
-
|
|
763
|
-
Return run number from configuration if None.
|
|
783
|
+
Validate run number and return it. Return run number from configuration if None.
|
|
764
784
|
|
|
765
785
|
Parameters
|
|
766
786
|
----------
|
|
@@ -775,12 +795,12 @@ class CorsikaConfig:
|
|
|
775
795
|
Raises
|
|
776
796
|
------
|
|
777
797
|
ValueError
|
|
778
|
-
If run_number is not a valid value (
|
|
798
|
+
If run_number is not a valid value (< 1 or > 999999).
|
|
779
799
|
"""
|
|
780
800
|
if run_number is None:
|
|
781
801
|
return self.run_number
|
|
782
802
|
if not float(run_number).is_integer() or run_number < 1 or run_number > 999999:
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
803
|
+
raise ValueError(
|
|
804
|
+
f"Invalid type of run number ({run_number}) - it must be an uint < 1000000."
|
|
805
|
+
)
|
|
786
806
|
return run_number
|
|
@@ -17,9 +17,9 @@ from ctapipe.io import write_table
|
|
|
17
17
|
from eventio import IACTFile
|
|
18
18
|
|
|
19
19
|
from simtools import version
|
|
20
|
-
from simtools.
|
|
21
|
-
from simtools.
|
|
22
|
-
from simtools.
|
|
20
|
+
from simtools.io import io_handler
|
|
21
|
+
from simtools.io.ascii_handler import collect_data_from_file
|
|
22
|
+
from simtools.io.hdf5_handler import fill_hdf5_table
|
|
23
23
|
from simtools.utils.geometry import convert_2d_to_radial_distr, rotate
|
|
24
24
|
from simtools.utils.names import sanitize_name
|
|
25
25
|
|
|
@@ -752,8 +752,9 @@ class CorsikaHistograms:
|
|
|
752
752
|
elif label == "time_altitude":
|
|
753
753
|
mini_hist = self.hist_time_altitude[i_telescope]
|
|
754
754
|
hist_values.append(self.hist_time_altitude[i_telescope].view().T)
|
|
755
|
-
|
|
756
|
-
|
|
755
|
+
if mini_hist is not None:
|
|
756
|
+
x_bin_edges.append(mini_hist.axes.edges[0].flatten())
|
|
757
|
+
y_bin_edges.append(mini_hist.axes.edges[1].flatten())
|
|
757
758
|
|
|
758
759
|
return np.array(hist_values), np.array(x_bin_edges), np.array(y_bin_edges)
|
|
759
760
|
|
|
@@ -6,9 +6,9 @@ import astropy.units as u
|
|
|
6
6
|
from astropy.io.registry.base import IORegistryError
|
|
7
7
|
from astropy.table import QTable
|
|
8
8
|
|
|
9
|
-
import simtools.utils.general as gen
|
|
10
9
|
from simtools.data_model import validate_data
|
|
11
10
|
from simtools.data_model.metadata_collector import MetadataCollector
|
|
11
|
+
from simtools.io import ascii_handler
|
|
12
12
|
|
|
13
13
|
__all__ = ["read_table_from_file", "read_value_from_file"]
|
|
14
14
|
|
|
@@ -56,7 +56,6 @@ def read_table_from_file(file_name, schema_file=None, validate=False, metadata_f
|
|
|
56
56
|
metadata = MetadataCollector(
|
|
57
57
|
args_dict=None,
|
|
58
58
|
metadata_file_name=(metadata_file if metadata_file is not None else file_name),
|
|
59
|
-
data_model_name=None,
|
|
60
59
|
)
|
|
61
60
|
|
|
62
61
|
_validator = validate_data.DataValidator(
|
|
@@ -105,7 +104,7 @@ def read_value_from_file(file_name, schema_file=None, validate=False):
|
|
|
105
104
|
|
|
106
105
|
"""
|
|
107
106
|
try:
|
|
108
|
-
data =
|
|
107
|
+
data = ascii_handler.collect_data_from_file(file_name=file_name)
|
|
109
108
|
except FileNotFoundError as exc:
|
|
110
109
|
_logger.error("Error reading data from %s", file_name)
|
|
111
110
|
raise exc
|