gammasimtools 0.6.1__py3-none-any.whl → 0.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gammasimtools-0.8.1.dist-info/METADATA +172 -0
- gammasimtools-0.8.1.dist-info/RECORD +346 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.1.dist-info}/WHEEL +1 -1
- gammasimtools-0.8.1.dist-info/entry_points.txt +31 -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 +113 -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 +210 -184
- 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 +305 -256
- simtools/model/calibration_model.py +50 -0
- simtools/model/camera.py +233 -493
- simtools/model/mirrors.py +61 -44
- simtools/model/model_parameter.py +602 -0
- simtools/model/model_utils.py +7 -35
- simtools/model/site_model.py +161 -0
- simtools/model/telescope_model.py +127 -621
- 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 +258 -644
- simtools/utils/value_conversion.py +176 -0
- simtools/version.py +2 -0
- 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/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.1.dist-info}/LICENSE +0 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.1.dist-info}/top_level.txt +0 -0
- /simtools/{corsika_simtel → db}/__init__.py +0 -0
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
|
+
"""Configuration file writer for sim_telarray."""
|
|
2
3
|
|
|
3
4
|
import logging
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import astropy.units as u
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
import simtools.utils.general as gen
|
|
11
|
+
import simtools.version
|
|
12
|
+
from simtools.utils import names
|
|
4
13
|
|
|
5
14
|
__all__ = ["SimtelConfigWriter"]
|
|
6
15
|
|
|
7
16
|
|
|
8
17
|
class SimtelConfigWriter:
|
|
9
18
|
"""
|
|
10
|
-
SimtelConfigWriter writes sim_telarray configuration files.
|
|
11
|
-
|
|
19
|
+
SimtelConfigWriter writes sim_telarray configuration files.
|
|
20
|
+
|
|
21
|
+
It is designed to be used by model classes (TelescopeModel and ArrayModel) only.
|
|
12
22
|
|
|
13
23
|
Parameters
|
|
14
24
|
----------
|
|
15
25
|
site: str
|
|
16
26
|
South or North.
|
|
17
27
|
model_version: str
|
|
18
|
-
|
|
28
|
+
Model version.
|
|
19
29
|
telescope_model_name: str
|
|
20
30
|
Telescope model name.
|
|
21
31
|
layout_name: str
|
|
@@ -25,36 +35,11 @@ class SimtelConfigWriter:
|
|
|
25
35
|
"""
|
|
26
36
|
|
|
27
37
|
TAB = " " * 3
|
|
28
|
-
SITE_PARS = [
|
|
29
|
-
"altitude",
|
|
30
|
-
"atmospheric_transmission",
|
|
31
|
-
"ref_lat",
|
|
32
|
-
"ref_long",
|
|
33
|
-
"array_coordinates",
|
|
34
|
-
"atmospheric_profile",
|
|
35
|
-
"magnetic_field",
|
|
36
|
-
]
|
|
37
|
-
PARS_NOT_TO_WRITE = [
|
|
38
|
-
"pixel_shape",
|
|
39
|
-
"pixel_diameter",
|
|
40
|
-
"lightguide_efficiency_angle_file",
|
|
41
|
-
"lightguide_efficiency_wavelength_file",
|
|
42
|
-
"ref_lat",
|
|
43
|
-
"ref_long",
|
|
44
|
-
"array_coordinates",
|
|
45
|
-
"atmospheric_profile",
|
|
46
|
-
"magnetic_field",
|
|
47
|
-
"EPSG",
|
|
48
|
-
"mirror_panel_shape",
|
|
49
|
-
"mirror_panel_diameter",
|
|
50
|
-
]
|
|
51
38
|
|
|
52
39
|
def __init__(
|
|
53
40
|
self, site, model_version, layout_name=None, telescope_model_name=None, label=None
|
|
54
41
|
):
|
|
55
|
-
"""
|
|
56
|
-
Initialize SimtelConfigWriter.
|
|
57
|
-
"""
|
|
42
|
+
"""Initialize SimtelConfigWriter."""
|
|
58
43
|
self._logger = logging.getLogger(__name__)
|
|
59
44
|
self._logger.debug("Init SimtelConfigWriter")
|
|
60
45
|
|
|
@@ -64,47 +49,114 @@ class SimtelConfigWriter:
|
|
|
64
49
|
self._layout_name = layout_name
|
|
65
50
|
self._telescope_model_name = telescope_model_name
|
|
66
51
|
|
|
67
|
-
def write_telescope_config_file(self, config_file_path, parameters):
|
|
52
|
+
def write_telescope_config_file(self, config_file_path, parameters, config_parameters=None):
|
|
68
53
|
"""
|
|
69
|
-
|
|
54
|
+
Write the sim_telarray config file for a single telescope.
|
|
70
55
|
|
|
71
56
|
Parameters
|
|
72
57
|
----------
|
|
73
58
|
config_file_path: str or Path
|
|
74
59
|
Path of the file to write on.
|
|
75
60
|
parameters: dict
|
|
76
|
-
Model parameters
|
|
61
|
+
Model parameters
|
|
62
|
+
config_parameters: dict
|
|
63
|
+
Simulation software configuration parameters
|
|
77
64
|
"""
|
|
65
|
+
self._logger.debug(f"Writing telescope config file {config_file_path}")
|
|
66
|
+
|
|
67
|
+
if config_parameters:
|
|
68
|
+
parameters.update(config_parameters)
|
|
69
|
+
|
|
78
70
|
with open(config_file_path, "w", encoding="utf-8") as file:
|
|
79
71
|
self._write_header(file, "TELESCOPE CONFIGURATION FILE")
|
|
80
72
|
|
|
81
73
|
file.write("#ifdef TELESCOPE\n")
|
|
82
74
|
file.write(
|
|
83
75
|
f" echo Configuration for {self._telescope_model_name}"
|
|
84
|
-
|
|
76
|
+
" - TELESCOPE $(TELESCOPE)\n"
|
|
85
77
|
)
|
|
86
78
|
file.write("#endif\n\n")
|
|
87
79
|
|
|
88
|
-
for
|
|
89
|
-
if
|
|
90
|
-
continue
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
for _simtel_name, value in parameters.items():
|
|
81
|
+
if _simtel_name.startswith("array_trigger"):
|
|
82
|
+
continue # array trigger is a site parameter, not a telescope parameter
|
|
83
|
+
if _simtel_name:
|
|
84
|
+
file.write(f"{_simtel_name} = {self._get_value_string_for_simtel(value)}\n")
|
|
85
|
+
_config_meta = self._get_simtel_metadata("telescope")
|
|
86
|
+
for _simtel_name, value in _config_meta.items():
|
|
87
|
+
file.write(f"{_simtel_name} = {value}\n")
|
|
88
|
+
|
|
89
|
+
def _get_value_string_for_simtel(self, value):
|
|
90
|
+
"""
|
|
91
|
+
Return a value string for simtel.
|
|
92
|
+
|
|
93
|
+
Parameters
|
|
94
|
+
----------
|
|
95
|
+
value: any
|
|
96
|
+
Value to convert to string.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
str
|
|
101
|
+
Value string for simtel.
|
|
102
|
+
"""
|
|
103
|
+
value = "none" if value is None else value # simtel requires 'none'
|
|
104
|
+
if isinstance(value, bool):
|
|
105
|
+
value = 1 if value else 0
|
|
106
|
+
elif isinstance(value, (list, np.ndarray)): # noqa: UP038
|
|
107
|
+
value = gen.convert_list_to_string(value, shorten_list=True)
|
|
108
|
+
return value
|
|
109
|
+
|
|
110
|
+
def _get_simtel_metadata(self, config_type):
|
|
111
|
+
"""
|
|
112
|
+
Return simtel metadata.
|
|
113
|
+
|
|
114
|
+
Parameters
|
|
115
|
+
----------
|
|
116
|
+
type: str
|
|
117
|
+
Type of the configuration file (telescope, site)
|
|
118
|
+
|
|
119
|
+
Returns
|
|
120
|
+
-------
|
|
121
|
+
dict
|
|
122
|
+
Dictionary with simtel metadata.
|
|
123
|
+
|
|
124
|
+
"""
|
|
125
|
+
parameters = {}
|
|
126
|
+
parameters["config_release"] = (
|
|
127
|
+
f"{self._model_version} written by simtools v{simtools.version.__version__}"
|
|
128
|
+
)
|
|
129
|
+
parameters["config_version"] = self._model_version
|
|
130
|
+
if config_type == "telescope":
|
|
131
|
+
parameters["camera_config_name"] = self._telescope_model_name
|
|
132
|
+
parameters["camera_config_variant"] = ""
|
|
133
|
+
parameters["camera_config_version"] = self._model_version
|
|
134
|
+
parameters["optics_config_name"] = self._telescope_model_name
|
|
135
|
+
parameters["optics_config_variant"] = ""
|
|
136
|
+
parameters["optics_config_version"] = self._model_version
|
|
137
|
+
elif config_type == "site":
|
|
138
|
+
parameters["site_config_name"] = self._site
|
|
139
|
+
parameters["site_config_variant"] = ""
|
|
140
|
+
parameters["site_config_version"] = self._model_version
|
|
141
|
+
parameters["array_config_name"] = self._layout_name
|
|
142
|
+
parameters["array_config_variant"] = ""
|
|
143
|
+
parameters["array_config_version"] = self._model_version
|
|
144
|
+
else:
|
|
145
|
+
raise ValueError(f"Unknown metadata type {config_type}")
|
|
146
|
+
return parameters
|
|
93
147
|
|
|
94
|
-
def write_array_config_file(self, config_file_path,
|
|
148
|
+
def write_array_config_file(self, config_file_path, telescope_model, site_model):
|
|
95
149
|
"""
|
|
96
|
-
|
|
150
|
+
Write the sim_telarray config file for an array of telescopes.
|
|
97
151
|
|
|
98
152
|
Parameters
|
|
99
153
|
----------
|
|
100
154
|
config_file_path: str or Path
|
|
101
155
|
Path of the file to write on.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
site_parameters: dict
|
|
107
|
-
Site parameters.
|
|
156
|
+
telescope_model: dict of TelescopeModel
|
|
157
|
+
Dictionary of TelescopeModel's instances as used by the ArrayModel instance.
|
|
158
|
+
site_model: Site model
|
|
159
|
+
Site model.
|
|
108
160
|
"""
|
|
109
161
|
with open(config_file_path, "w", encoding="utf-8") as file:
|
|
110
162
|
self._write_header(file, "ARRAY CONFIGURATION FILE")
|
|
@@ -123,28 +175,31 @@ class SimtelConfigWriter:
|
|
|
123
175
|
file.write(self.TAB + "echo *****************************\n\n")
|
|
124
176
|
|
|
125
177
|
# Writing site parameters
|
|
126
|
-
self._write_site_parameters(
|
|
178
|
+
self._write_site_parameters(
|
|
179
|
+
file, site_model, Path(config_file_path).parent, telescope_model
|
|
180
|
+
)
|
|
127
181
|
|
|
128
182
|
# Maximum telescopes
|
|
129
183
|
file.write(self.TAB + f"maximum_telescopes = {len(telescope_model)}\n\n")
|
|
130
184
|
|
|
131
|
-
# Default telescope - 0th tel in telescope list
|
|
132
|
-
|
|
185
|
+
# Default telescope in sim_telarray - 0th tel in telescope list
|
|
186
|
+
_, first_telescope = next(iter(telescope_model.items()))
|
|
187
|
+
tel_config_file = first_telescope.get_config_file(no_export=True).name
|
|
133
188
|
file.write(f"# include <{tel_config_file}>\n\n")
|
|
134
189
|
|
|
135
|
-
# Looping over telescopes
|
|
136
|
-
for count, tel_model in enumerate(telescope_model):
|
|
190
|
+
# Looping over telescopes
|
|
191
|
+
for count, (tel_name, tel_model) in enumerate(telescope_model.items()):
|
|
137
192
|
tel_config_file = tel_model.get_config_file(no_export=True).name
|
|
138
|
-
file.write(f"%{
|
|
193
|
+
file.write(f"%{tel_name}\n")
|
|
139
194
|
file.write(f"#elif TELESCOPE == {count + 1}\n\n")
|
|
140
195
|
file.write(f"# include <{tel_config_file}>\n\n")
|
|
141
|
-
file.write("#endif \n\n")
|
|
196
|
+
file.write("#endif \n\n") # configuration files need to end with \n\n
|
|
142
197
|
|
|
143
198
|
def write_single_mirror_list_file(
|
|
144
199
|
self, mirror_number, mirrors, single_mirror_list_file, set_focal_length_to_zero=False
|
|
145
200
|
):
|
|
146
201
|
"""
|
|
147
|
-
|
|
202
|
+
Write the sim_telarray mirror list file for a single mirror.
|
|
148
203
|
|
|
149
204
|
Parameters
|
|
150
205
|
----------
|
|
@@ -190,8 +245,16 @@ class SimtelConfigWriter:
|
|
|
190
245
|
|
|
191
246
|
def _write_header(self, file, title, comment_char="%"):
|
|
192
247
|
"""
|
|
193
|
-
|
|
194
|
-
|
|
248
|
+
Write a generic header.
|
|
249
|
+
|
|
250
|
+
Parameters
|
|
251
|
+
----------
|
|
252
|
+
file: file
|
|
253
|
+
File to write.
|
|
254
|
+
title: str
|
|
255
|
+
Title of the header.
|
|
256
|
+
comment_char: str
|
|
257
|
+
Character to be used for comments, which differs among ctypes of config files.
|
|
195
258
|
"""
|
|
196
259
|
header = f"{comment_char}{50 * '='}\n"
|
|
197
260
|
header += f"{comment_char} {title}\n"
|
|
@@ -212,12 +275,130 @@ class SimtelConfigWriter:
|
|
|
212
275
|
header += f"{comment_char}\n"
|
|
213
276
|
file.write(header)
|
|
214
277
|
|
|
215
|
-
def _write_site_parameters(self, file,
|
|
216
|
-
"""
|
|
278
|
+
def _write_site_parameters(self, file, site_model, model_path, telescope_model):
|
|
279
|
+
"""
|
|
280
|
+
Write site parameters.
|
|
281
|
+
|
|
282
|
+
Parameters
|
|
283
|
+
----------
|
|
284
|
+
file: file
|
|
285
|
+
File to write on.
|
|
286
|
+
site_model: SiteModel
|
|
287
|
+
Site model.
|
|
288
|
+
model_path: Path
|
|
289
|
+
Path to the model for writing of additional files.
|
|
290
|
+
telescope_model: dict of TelescopeModel
|
|
291
|
+
Telescope models.
|
|
292
|
+
"""
|
|
217
293
|
file.write(self.TAB + "% Site parameters\n")
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
294
|
+
_site_parameters = site_model.get_simtel_parameters()
|
|
295
|
+
for par, value in _site_parameters.items():
|
|
296
|
+
_simtel_name = names.get_simulation_software_name_from_parameter_name(
|
|
297
|
+
par,
|
|
298
|
+
simulation_software="sim_telarray",
|
|
299
|
+
search_telescope_parameters=False,
|
|
300
|
+
search_site_parameters=True,
|
|
301
|
+
)
|
|
302
|
+
_simtel_name, value = self._convert_model_parameters_to_simtel_format(
|
|
303
|
+
_simtel_name, value, model_path, telescope_model
|
|
304
|
+
)
|
|
305
|
+
if _simtel_name is not None:
|
|
306
|
+
file.write(f"{self.TAB}{_simtel_name} = {value}\n")
|
|
307
|
+
_simtel_meta = self._get_simtel_metadata("site")
|
|
308
|
+
for _simtel_name, value in _simtel_meta.items():
|
|
309
|
+
file.write(f"{self.TAB}{_simtel_name} = {value}\n")
|
|
223
310
|
file.write("\n")
|
|
311
|
+
|
|
312
|
+
def _convert_model_parameters_to_simtel_format(
|
|
313
|
+
self, simtel_name, value, model_path, telescope_model
|
|
314
|
+
):
|
|
315
|
+
"""
|
|
316
|
+
Convert model parameter value to simtel format.
|
|
317
|
+
|
|
318
|
+
This might involve format or unit conversion and writing to a parameter file.
|
|
319
|
+
|
|
320
|
+
Parameters
|
|
321
|
+
----------
|
|
322
|
+
simtel_name: str
|
|
323
|
+
Parameter name.
|
|
324
|
+
value: any
|
|
325
|
+
Value to convert.
|
|
326
|
+
model_path: Path
|
|
327
|
+
Path to the model for writing of additional files.
|
|
328
|
+
telescope_model: dict of TelescopeModel
|
|
329
|
+
Telescope models.
|
|
330
|
+
|
|
331
|
+
Returns
|
|
332
|
+
-------
|
|
333
|
+
str, any
|
|
334
|
+
Converted parameter name and value.
|
|
335
|
+
"""
|
|
336
|
+
conversion_dict = {
|
|
337
|
+
"array_triggers": self._write_array_triggers_file,
|
|
338
|
+
}
|
|
339
|
+
try:
|
|
340
|
+
value = conversion_dict[simtel_name](value, model_path, telescope_model)
|
|
341
|
+
except KeyError:
|
|
342
|
+
pass
|
|
343
|
+
return simtel_name, value
|
|
344
|
+
|
|
345
|
+
def _write_array_triggers_file(self, array_triggers, model_path, telescope_model):
|
|
346
|
+
"""
|
|
347
|
+
Write array trigger definition file in simtel format.
|
|
348
|
+
|
|
349
|
+
Parameters
|
|
350
|
+
----------
|
|
351
|
+
array_triggers: dict
|
|
352
|
+
Array trigger definitions.
|
|
353
|
+
model_path: Path
|
|
354
|
+
Path to the model for writing of additional files.
|
|
355
|
+
telescope_model: dict of TelescopeModel
|
|
356
|
+
Telescope models.
|
|
357
|
+
"""
|
|
358
|
+
trigger_per_telescope_type = {}
|
|
359
|
+
for count, tel_name in enumerate(telescope_model.keys()):
|
|
360
|
+
telescope_type = names.get_array_element_type_from_name(tel_name)
|
|
361
|
+
trigger_per_telescope_type.setdefault(telescope_type, []).append(count + 1)
|
|
362
|
+
|
|
363
|
+
trigger_lines = {}
|
|
364
|
+
for tel_type, tel_list in trigger_per_telescope_type.items():
|
|
365
|
+
trigger_dict = self._get_array_triggers_for_telescope_type(array_triggers, tel_type)
|
|
366
|
+
trigger_lines[tel_type] = f"Trigger {trigger_dict['multiplicity']['value']} of "
|
|
367
|
+
trigger_lines[tel_type] += ", ".join(map(str, tel_list))
|
|
368
|
+
width = trigger_dict["width"]["value"] * u.Unit(trigger_dict["width"]["unit"]).to("ns")
|
|
369
|
+
trigger_lines[tel_type] += f" width {width}"
|
|
370
|
+
if trigger_dict.get("hard_stereo"):
|
|
371
|
+
trigger_lines[tel_type] += " hard_stereo"
|
|
372
|
+
if all(trigger_dict["min_separation"][key] is not None for key in ["value", "unit"]):
|
|
373
|
+
min_sep = trigger_dict["min_separation"]["value"] * u.Unit(
|
|
374
|
+
trigger_dict["min_separation"]["unit"]
|
|
375
|
+
).to("m")
|
|
376
|
+
trigger_lines[tel_type] += f" minsep {min_sep}"
|
|
377
|
+
|
|
378
|
+
array_triggers_file = "array_triggers.dat"
|
|
379
|
+
with open(model_path / array_triggers_file, "w", encoding="utf-8") as file:
|
|
380
|
+
file.write("# Array trigger definition\n")
|
|
381
|
+
file.writelines(f"{line}\n" for line in trigger_lines.values())
|
|
382
|
+
|
|
383
|
+
return array_triggers_file
|
|
384
|
+
|
|
385
|
+
def _get_array_triggers_for_telescope_type(self, array_triggers, telescope_type):
|
|
386
|
+
"""
|
|
387
|
+
Get array trigger for a specific telescope type.
|
|
388
|
+
|
|
389
|
+
Parameters
|
|
390
|
+
----------
|
|
391
|
+
array_triggers: dict
|
|
392
|
+
Array trigger definitions.
|
|
393
|
+
telescope_type: str
|
|
394
|
+
Telescope type.
|
|
395
|
+
|
|
396
|
+
Returns
|
|
397
|
+
-------
|
|
398
|
+
dict
|
|
399
|
+
Array trigger for the telescope type.
|
|
400
|
+
"""
|
|
401
|
+
for trigger_dict in array_triggers:
|
|
402
|
+
if trigger_dict["name"] == telescope_type + "_array":
|
|
403
|
+
return trigger_dict
|
|
404
|
+
return None
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"""Read sim_telarray events from file."""
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
4
|
import math
|
|
3
5
|
from copy import copy
|
|
@@ -6,16 +8,18 @@ import astropy.units as u
|
|
|
6
8
|
import numpy as np
|
|
7
9
|
from eventio.simtel import SimTelFile
|
|
8
10
|
|
|
9
|
-
__all__ = ["
|
|
11
|
+
__all__ = ["InconsistentInputFileError", "SimtelIOEvents"]
|
|
10
12
|
|
|
11
13
|
|
|
12
|
-
class
|
|
14
|
+
class InconsistentInputFileError(Exception):
|
|
13
15
|
"""Exception for inconsistent input file."""
|
|
14
16
|
|
|
15
17
|
|
|
16
|
-
class
|
|
18
|
+
class SimtelIOEvents:
|
|
17
19
|
"""
|
|
18
|
-
|
|
20
|
+
Read sim_telarray events from file.
|
|
21
|
+
|
|
22
|
+
sim_telarray files are read with eventio package.
|
|
19
23
|
|
|
20
24
|
Parameters
|
|
21
25
|
----------
|
|
@@ -24,9 +28,7 @@ class SimtelEvents:
|
|
|
24
28
|
"""
|
|
25
29
|
|
|
26
30
|
def __init__(self, input_files=None):
|
|
27
|
-
"""
|
|
28
|
-
Initialize SimtelEvents.
|
|
29
|
-
"""
|
|
31
|
+
"""Initialize SimtelIOEvents."""
|
|
30
32
|
self._logger = logging.getLogger(__name__)
|
|
31
33
|
self.load_input_files(input_files)
|
|
32
34
|
if self.number_of_files > 0:
|
|
@@ -54,7 +56,6 @@ class SimtelEvents:
|
|
|
54
56
|
|
|
55
57
|
for file in files:
|
|
56
58
|
self.input_files.append(file)
|
|
57
|
-
return
|
|
58
59
|
|
|
59
60
|
@property
|
|
60
61
|
def number_of_files(self):
|
|
@@ -69,10 +70,10 @@ class SimtelEvents:
|
|
|
69
70
|
|
|
70
71
|
def load_header_and_summary(self):
|
|
71
72
|
"""
|
|
72
|
-
Read MC header from sim_telarray files and store it into _mc_header.
|
|
73
|
-
summary_events with energy and core radius of triggered events.
|
|
74
|
-
"""
|
|
73
|
+
Read MC header from sim_telarray files and store it into _mc_header.
|
|
75
74
|
|
|
75
|
+
Also fills summary_events with energy and core radius of triggered events.
|
|
76
|
+
"""
|
|
76
77
|
self._number_of_files = len(self.input_files)
|
|
77
78
|
keys_to_grab = [
|
|
78
79
|
"obsheight",
|
|
@@ -119,7 +120,7 @@ class SimtelEvents:
|
|
|
119
120
|
if not _are_headers_consistent(self._mc_header, f.mc_run_headers[0]):
|
|
120
121
|
msg = "MC header pamameters from different files are inconsistent"
|
|
121
122
|
self._logger.error(msg)
|
|
122
|
-
raise
|
|
123
|
+
raise InconsistentInputFileError(msg)
|
|
123
124
|
|
|
124
125
|
is_first_file = False
|
|
125
126
|
|
|
@@ -154,13 +155,10 @@ class SimtelEvents:
|
|
|
154
155
|
energy_range = self._validate_energy_range(energy_range)
|
|
155
156
|
core_max = self._validate_core_max(core_max)
|
|
156
157
|
|
|
157
|
-
is_in_energy_range =
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
)
|
|
162
|
-
)
|
|
163
|
-
is_in_core_range = list(map(lambda r: r < core_max, self.summary_events["r_core"]))
|
|
158
|
+
is_in_energy_range = [
|
|
159
|
+
energy_range[0] < e < energy_range[1] for e in self.summary_events["energy"]
|
|
160
|
+
]
|
|
161
|
+
is_in_core_range = [r < core_max for r in self.summary_events["r_core"]]
|
|
164
162
|
return np.sum(np.array(is_in_energy_range) * np.array(is_in_core_range))
|
|
165
163
|
|
|
166
164
|
@u.quantity_input(core_max=u.m)
|
|
@@ -203,8 +201,9 @@ class SimtelEvents:
|
|
|
203
201
|
@u.quantity_input(core_max=u.m)
|
|
204
202
|
def count_simulated_events(self, energy_range=None, core_max=None):
|
|
205
203
|
"""
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
Determine number of simulated events within a certain energy range and core radius.
|
|
205
|
+
|
|
206
|
+
Use the simulated power law.
|
|
208
207
|
This calculation assumes the simulated spectrum is given by a single power law.
|
|
209
208
|
|
|
210
209
|
Parameters
|
|
@@ -236,8 +235,9 @@ class SimtelEvents:
|
|
|
236
235
|
|
|
237
236
|
def _validate_energy_range(self, energy_range):
|
|
238
237
|
"""
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
Return the default energy range from mc_header in case energy_range=None.
|
|
239
|
+
|
|
240
|
+
Check units, convert it to TeV and return it in the right format, otherwise.
|
|
241
241
|
"""
|
|
242
242
|
if energy_range is None:
|
|
243
243
|
return self._mc_header["E_range"]
|
|
@@ -258,7 +258,8 @@ class SimtelEvents:
|
|
|
258
258
|
|
|
259
259
|
def _validate_core_max(self, core_max):
|
|
260
260
|
"""
|
|
261
|
-
|
|
262
|
-
|
|
261
|
+
Return the default core_max from mc_header in case core_max=None.
|
|
262
|
+
|
|
263
|
+
Check units, convert it to m and return it in the right format, otherwise.
|
|
263
264
|
"""
|
|
264
265
|
return self._mc_header["core_range"][1] if core_max is None else core_max.to(u.m).value
|