gammasimtools 0.6.1__py3-none-any.whl → 0.8.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gammasimtools-0.8.2.dist-info/METADATA +173 -0
- gammasimtools-0.8.2.dist-info/RECORD +345 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/WHEEL +1 -1
- gammasimtools-0.8.2.dist-info/entry_points.txt +31 -0
- simtools/_dev_version/__init__.py +9 -0
- simtools/_version.py +2 -2
- simtools/applications/calculate_trigger_rate.py +210 -0
- simtools/applications/convert_all_model_parameters_from_simtel.py +372 -0
- simtools/applications/{print_array_elements.py → convert_geo_coordinates_of_array_elements.py} +58 -63
- simtools/applications/convert_model_parameter_from_simtel.py +119 -0
- simtools/applications/{add_file_to_db.py → db_add_file_to_db.py} +70 -60
- simtools/applications/db_add_model_parameters_from_repository_to_db.py +184 -0
- simtools/applications/db_add_value_from_json_to_db.py +105 -0
- simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +180 -0
- simtools/applications/db_get_array_layouts_from_db.py +162 -0
- simtools/applications/{get_file_from_db.py → db_get_file_from_db.py} +30 -34
- simtools/applications/db_get_parameter_from_db.py +131 -0
- simtools/applications/db_inspect_databases.py +52 -0
- simtools/applications/derive_mirror_rnda.py +39 -255
- simtools/applications/derive_psf_parameters.py +441 -0
- simtools/applications/generate_array_config.py +82 -0
- simtools/applications/generate_corsika_histograms.py +52 -52
- simtools/applications/generate_default_metadata.py +5 -8
- simtools/applications/generate_regular_arrays.py +117 -0
- simtools/applications/generate_simtel_array_histograms.py +97 -56
- simtools/applications/plot_array_layout.py +345 -115
- simtools/applications/production_generate_simulation_config.py +158 -0
- simtools/applications/production_scale_events.py +168 -0
- simtools/applications/simulate_light_emission.py +478 -0
- simtools/applications/simulate_prod.py +97 -175
- simtools/applications/submit_data_from_external.py +9 -12
- simtools/applications/submit_model_parameter_from_external.py +122 -0
- simtools/applications/validate_camera_efficiency.py +35 -102
- simtools/applications/validate_camera_fov.py +20 -19
- simtools/applications/{compare_cumulative_psf.py → validate_cumulative_psf.py} +45 -44
- simtools/applications/validate_file_using_schema.py +111 -47
- simtools/applications/validate_optics.py +17 -22
- simtools/camera_efficiency.py +193 -202
- simtools/configuration/commandline_parser.py +384 -96
- simtools/configuration/configurator.py +55 -71
- simtools/constants.py +5 -5
- simtools/corsika/corsika_config.py +482 -342
- simtools/corsika/corsika_histograms.py +226 -204
- simtools/corsika/corsika_histograms_visualize.py +23 -24
- simtools/corsika/primary_particle.py +159 -0
- simtools/data_model/data_reader.py +25 -20
- simtools/data_model/format_checkers.py +52 -0
- simtools/data_model/metadata_collector.py +211 -185
- simtools/data_model/metadata_model.py +115 -37
- simtools/data_model/model_data_writer.py +335 -26
- simtools/data_model/validate_data.py +366 -154
- simtools/db/db_array_elements.py +130 -0
- simtools/db/db_from_repo_handler.py +106 -0
- simtools/db/db_handler.py +1246 -0
- simtools/io_operations/hdf5_handler.py +3 -1
- simtools/io_operations/io_handler.py +32 -57
- simtools/job_execution/job_manager.py +82 -69
- simtools/layout/array_layout.py +325 -537
- simtools/layout/geo_coordinates.py +8 -11
- simtools/layout/telescope_position.py +163 -86
- simtools/model/array_model.py +312 -259
- simtools/model/calibration_model.py +50 -0
- simtools/model/camera.py +277 -523
- simtools/model/mirrors.py +68 -49
- simtools/model/model_parameter.py +602 -0
- simtools/model/model_utils.py +11 -39
- simtools/model/site_model.py +161 -0
- simtools/model/telescope_model.py +143 -633
- simtools/production_configuration/calculate_statistical_errors_grid_point.py +454 -0
- simtools/production_configuration/event_scaler.py +146 -0
- simtools/production_configuration/generate_simulation_config.py +193 -0
- simtools/production_configuration/interpolation_handler.py +197 -0
- simtools/ray_tracing/__init__.py +0 -0
- simtools/ray_tracing/mirror_panel_psf.py +280 -0
- simtools/{psf_analysis.py → ray_tracing/psf_analysis.py} +133 -47
- simtools/ray_tracing/ray_tracing.py +646 -0
- simtools/runners/__init__.py +0 -0
- simtools/runners/corsika_runner.py +240 -0
- simtools/runners/corsika_simtel_runner.py +225 -0
- simtools/runners/runner_services.py +307 -0
- simtools/runners/simtel_runner.py +224 -0
- simtools/schemas/array_elements.yml +137 -0
- simtools/schemas/integration_tests_config.metaschema.yml +93 -0
- simtools/schemas/metadata.metaschema.yml +6 -0
- simtools/schemas/model_parameter.metaschema.yml +78 -0
- simtools/schemas/{data.metaschema.yml → model_parameter_and_data_schema.metaschema.yml} +27 -44
- simtools/schemas/model_parameters/adjust_gain.schema.yml +37 -0
- simtools/schemas/model_parameters/altitude.schema.yml +37 -0
- simtools/schemas/model_parameters/array_coordinates.schema.yml +33 -0
- simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +77 -0
- simtools/schemas/model_parameters/array_element_position_ground.schema.yml +39 -0
- simtools/schemas/model_parameters/array_element_position_utm.schema.yml +39 -0
- simtools/schemas/model_parameters/array_layouts.schema.yml +48 -0
- simtools/schemas/model_parameters/array_triggers.schema.yml +93 -0
- simtools/schemas/model_parameters/asum_clipping.schema.yml +38 -0
- simtools/schemas/model_parameters/asum_offset.schema.yml +35 -0
- simtools/schemas/model_parameters/asum_shaping.schema.yml +35 -0
- simtools/schemas/model_parameters/asum_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/atmospheric_profile.schema.yml +32 -0
- simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +35 -0
- simtools/schemas/model_parameters/axes_offsets.schema.yml +53 -0
- simtools/schemas/model_parameters/camera_body_diameter.schema.yml +40 -0
- simtools/schemas/model_parameters/camera_body_shape.schema.yml +45 -0
- simtools/schemas/model_parameters/camera_config_file.schema.yml +40 -0
- simtools/schemas/model_parameters/camera_config_rotate.schema.yml +36 -0
- simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +43 -0
- simtools/schemas/model_parameters/camera_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/camera_depth.schema.yml +42 -0
- simtools/schemas/model_parameters/camera_filter.schema.yml +45 -0
- simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/camera_pixels.schema.yml +36 -0
- simtools/schemas/model_parameters/camera_transmission.schema.yml +41 -0
- simtools/schemas/model_parameters/channels_per_chip.schema.yml +36 -0
- simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +35 -0
- simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +38 -0
- simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +28 -0
- simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +23 -0
- simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +28 -0
- simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +27 -0
- simtools/schemas/model_parameters/corsika_observation_level.schema.yml +38 -0
- simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +52 -0
- simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +27 -0
- simtools/schemas/model_parameters/dark_events.schema.yml +32 -0
- simtools/schemas/model_parameters/default_trigger.schema.yml +35 -0
- simtools/schemas/model_parameters/design_model.schema.yml +31 -0
- simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +32 -0
- simtools/schemas/model_parameters/disc_bins.schema.yml +39 -0
- simtools/schemas/model_parameters/disc_start.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +42 -0
- simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +39 -0
- simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +40 -0
- simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +33 -0
- simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +42 -0
- simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +37 -0
- simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +44 -0
- simtools/schemas/model_parameters/discriminator_threshold.schema.yml +36 -0
- simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +45 -0
- simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +40 -0
- simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +41 -0
- simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +38 -0
- simtools/schemas/model_parameters/dish_shape_length.schema.yml +41 -0
- simtools/schemas/model_parameters/dsum_clipping.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_offset.schema.yml +37 -0
- simtools/schemas/model_parameters/dsum_pedsub.schema.yml +33 -0
- simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +39 -0
- simtools/schemas/model_parameters/dsum_prescale.schema.yml +44 -0
- simtools/schemas/model_parameters/dsum_presum_max.schema.yml +38 -0
- simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +45 -0
- simtools/schemas/model_parameters/dsum_shaping.schema.yml +44 -0
- simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +32 -0
- simtools/schemas/model_parameters/dsum_threshold.schema.yml +43 -0
- simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +42 -0
- simtools/schemas/model_parameters/effective_focal_length.schema.yml +61 -0
- simtools/schemas/model_parameters/epsg_code.schema.yml +37 -0
- simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +35 -0
- simtools/schemas/model_parameters/fadc_amplitude.schema.yml +46 -0
- simtools/schemas/model_parameters/fadc_bins.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +38 -0
- simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +49 -0
- simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +47 -0
- simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +51 -0
- simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +37 -0
- simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +49 -0
- simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_max_signal.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_max_sum.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_mhz.schema.yml +31 -0
- simtools/schemas/model_parameters/fadc_noise.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_pedestal.schema.yml +40 -0
- simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +39 -0
- simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +50 -0
- simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +43 -0
- simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +42 -0
- simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +41 -0
- simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +42 -0
- simtools/schemas/model_parameters/flatfielding.schema.yml +37 -0
- simtools/schemas/model_parameters/focal_length.schema.yml +45 -0
- simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +158 -0
- simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +29 -0
- simtools/schemas/model_parameters/focus_offset.schema.yml +66 -0
- simtools/schemas/model_parameters/gain_variation.schema.yml +43 -0
- simtools/schemas/model_parameters/geomag_horizontal.schema.yml +34 -0
- simtools/schemas/model_parameters/geomag_rotation.schema.yml +37 -0
- simtools/schemas/model_parameters/geomag_vertical.schema.yml +34 -0
- simtools/schemas/model_parameters/hg_lg_variation.schema.yml +36 -0
- simtools/schemas/model_parameters/iobuf_maximum.schema.yml +34 -0
- simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_events.schema.yml +36 -0
- simtools/schemas/model_parameters/laser_external_trigger.schema.yml +35 -0
- simtools/schemas/model_parameters/laser_photons.schema.yml +32 -0
- simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +34 -0
- simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_var_photons.schema.yml +33 -0
- simtools/schemas/model_parameters/laser_wavelength.schema.yml +33 -0
- simtools/schemas/model_parameters/led_events.schema.yml +34 -0
- simtools/schemas/model_parameters/led_photons.schema.yml +34 -0
- simtools/schemas/model_parameters/led_pulse_offset.schema.yml +32 -0
- simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +33 -0
- simtools/schemas/model_parameters/led_var_photons.schema.yml +34 -0
- simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +41 -0
- simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +43 -0
- simtools/schemas/model_parameters/min_photoelectrons.schema.yml +35 -0
- simtools/schemas/model_parameters/min_photons.schema.yml +32 -0
- simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +36 -0
- simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +64 -0
- simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +64 -0
- simtools/schemas/model_parameters/mirror_class.schema.yml +41 -0
- simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +51 -0
- simtools/schemas/model_parameters/mirror_focal_length.schema.yml +42 -0
- simtools/schemas/model_parameters/mirror_list.schema.yml +38 -0
- simtools/schemas/model_parameters/mirror_offset.schema.yml +41 -0
- simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +39 -0
- simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +61 -0
- simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +40 -0
- simtools/schemas/model_parameters/multiplicity_offset.schema.yml +46 -0
- simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +51 -0
- simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +37 -0
- simtools/schemas/model_parameters/nsb_offaxis.schema.yml +79 -0
- simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +47 -0
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +34 -0
- simtools/schemas/model_parameters/nsb_reference_value.schema.yml +33 -0
- simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +35 -0
- simtools/schemas/model_parameters/nsb_skymap.schema.yml +39 -0
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml +50 -0
- simtools/schemas/model_parameters/num_gains.schema.yml +34 -0
- simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +33 -0
- simtools/schemas/model_parameters/optics_properties.schema.yml +31 -0
- simtools/schemas/model_parameters/parabolic_dish.schema.yml +32 -0
- simtools/schemas/model_parameters/pedestal_events.schema.yml +32 -0
- simtools/schemas/model_parameters/photon_delay.schema.yml +38 -0
- simtools/schemas/model_parameters/photons_per_run.schema.yml +33 -0
- simtools/schemas/model_parameters/pixel_cells.schema.yml +35 -0
- simtools/schemas/model_parameters/pixels_parallel.schema.yml +54 -0
- simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +40 -0
- simtools/schemas/model_parameters/pm_average_gain.schema.yml +34 -0
- simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +40 -0
- simtools/schemas/model_parameters/pm_gain_index.schema.yml +36 -0
- simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +41 -0
- simtools/schemas/model_parameters/pm_transit_time.schema.yml +63 -0
- simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +39 -0
- simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +168 -0
- simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +36 -0
- simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +34 -0
- simtools/schemas/model_parameters/qe_variation.schema.yml +43 -0
- simtools/schemas/model_parameters/quantum_efficiency.schema.yml +42 -0
- simtools/schemas/model_parameters/random_focal_length.schema.yml +45 -0
- simtools/schemas/model_parameters/random_generator.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_altitude.schema.yml +35 -0
- simtools/schemas/model_parameters/reference_point_latitude.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_longitude.schema.yml +36 -0
- simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +34 -0
- simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +34 -0
- simtools/schemas/model_parameters/sampled_output.schema.yml +31 -0
- simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +34 -0
- simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +79 -0
- simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +42 -0
- simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +41 -0
- simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +33 -0
- simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +36 -0
- simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +29 -0
- simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +168 -0
- simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +36 -0
- simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +35 -0
- simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +37 -0
- simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +40 -0
- simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +40 -0
- simtools/schemas/model_parameters/store_photoelectrons.schema.yml +41 -0
- simtools/schemas/model_parameters/tailcut_scale.schema.yml +40 -0
- simtools/schemas/model_parameters/telescope_axis_height.schema.yml +31 -0
- simtools/schemas/model_parameters/telescope_random_angle.schema.yml +35 -0
- simtools/schemas/model_parameters/telescope_random_error.schema.yml +34 -0
- simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +37 -0
- simtools/schemas/model_parameters/telescope_transmission.schema.yml +113 -0
- simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +41 -0
- simtools/schemas/model_parameters/teltrig_min_time.schema.yml +36 -0
- simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +36 -0
- simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +37 -0
- simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +38 -0
- simtools/schemas/model_parameters/transit_time_error.schema.yml +45 -0
- simtools/schemas/model_parameters/transit_time_jitter.schema.yml +36 -0
- simtools/schemas/model_parameters/trigger_current_limit.schema.yml +32 -0
- simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +53 -0
- simtools/schemas/model_parameters/trigger_pixels.schema.yml +40 -0
- simtools/simtel/simtel_config_reader.py +353 -0
- simtools/simtel/simtel_config_writer.py +244 -63
- simtools/simtel/{simtel_events.py → simtel_io_events.py} +26 -25
- simtools/simtel/simtel_io_histogram.py +661 -0
- simtools/simtel/simtel_io_histograms.py +569 -0
- simtools/simtel/simulator_array.py +145 -0
- simtools/simtel/{simtel_runner_camera_efficiency.py → simulator_camera_efficiency.py} +76 -52
- simtools/simtel/simulator_light_emission.py +473 -0
- simtools/simtel/simulator_ray_tracing.py +262 -0
- simtools/simulator.py +220 -446
- simtools/testing/__init__.py +0 -0
- simtools/testing/assertions.py +151 -0
- simtools/testing/configuration.py +226 -0
- simtools/testing/helpers.py +42 -0
- simtools/testing/validate_output.py +240 -0
- simtools/utils/general.py +340 -437
- simtools/utils/geometry.py +12 -12
- simtools/utils/names.py +257 -644
- simtools/utils/value_conversion.py +176 -0
- simtools/version.py +3 -1
- simtools/visualization/legend_handlers.py +135 -152
- simtools/visualization/plot_camera.py +379 -0
- simtools/visualization/visualize.py +346 -167
- gammasimtools-0.6.1.dist-info/METADATA +0 -180
- gammasimtools-0.6.1.dist-info/RECORD +0 -91
- gammasimtools-0.6.1.dist-info/entry_points.txt +0 -23
- simtools/_dev_version/scm_version.py +0 -10
- simtools/applications/db_development_tools/add_new_parameter_to_db.py +0 -81
- simtools/applications/db_development_tools/add_unit_to_parameter_in_db.py +0 -59
- simtools/applications/db_development_tools/mark_non_optics_parameters_non_applicable.py +0 -102
- simtools/applications/get_parameter.py +0 -92
- simtools/applications/make_regular_arrays.py +0 -160
- simtools/applications/produce_array_config.py +0 -136
- simtools/applications/production.py +0 -313
- simtools/applications/sim_showers_for_trigger_rates.py +0 -187
- simtools/applications/tune_psf.py +0 -334
- simtools/corsika/corsika_default_config.py +0 -282
- simtools/corsika/corsika_runner.py +0 -450
- simtools/corsika_simtel/corsika_simtel_runner.py +0 -197
- simtools/db_handler.py +0 -1480
- simtools/ray_tracing.py +0 -525
- simtools/simtel/simtel_histograms.py +0 -414
- simtools/simtel/simtel_runner.py +0 -244
- simtools/simtel/simtel_runner_array.py +0 -293
- simtools/simtel/simtel_runner_ray_tracing.py +0 -277
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/LICENSE +0 -0
- {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/top_level.txt +0 -0
- /simtools/{corsika_simtel → db}/__init__.py +0 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"""Generate run scripts and directories for CORSIKA simulations."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from simtools.io_operations import io_handler
|
|
8
|
+
from simtools.runners.runner_services import RunnerServices
|
|
9
|
+
|
|
10
|
+
__all__ = ["CorsikaRunner", "MissingRequiredEntryInCorsikaConfigError"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class MissingRequiredEntryInCorsikaConfigError(Exception):
|
|
14
|
+
"""Exception for missing required entry in corsika config."""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CorsikaRunner:
|
|
18
|
+
"""
|
|
19
|
+
Generate run scripts and directories for CORSIKA simulations. Run simulations if requested.
|
|
20
|
+
|
|
21
|
+
CorsikaRunner is responsible for configuring and running CORSIKA, using corsika_autoinputs
|
|
22
|
+
provided by the sim_telarray package. CorsikaRunner generates shell scripts to be run
|
|
23
|
+
externally or by the simulator module simulator.
|
|
24
|
+
|
|
25
|
+
CorsikaRunner is configured through a CorsikaConfig instance.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
corsika_config_data: CorsikaConfig
|
|
30
|
+
CORSIKA configuration.
|
|
31
|
+
simtel_path: str or Path
|
|
32
|
+
Location of source of the sim_telarray/CORSIKA package.
|
|
33
|
+
label: str
|
|
34
|
+
Instance label.
|
|
35
|
+
keep_seeds: bool
|
|
36
|
+
Use seeds based on run number and primary particle. If False, use sim_telarray seeds.
|
|
37
|
+
use_multipipe: bool
|
|
38
|
+
Use multipipe to run CORSIKA and sim_telarray.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(
|
|
42
|
+
self,
|
|
43
|
+
corsika_config,
|
|
44
|
+
simtel_path,
|
|
45
|
+
label=None,
|
|
46
|
+
keep_seeds=False,
|
|
47
|
+
use_multipipe=False,
|
|
48
|
+
):
|
|
49
|
+
"""Initialize CorsikaRunner."""
|
|
50
|
+
self._logger = logging.getLogger(__name__)
|
|
51
|
+
self._logger.debug("Init CorsikaRunner")
|
|
52
|
+
self.label = label
|
|
53
|
+
|
|
54
|
+
self.corsika_config = corsika_config
|
|
55
|
+
self._keep_seeds = keep_seeds
|
|
56
|
+
self._use_multipipe = use_multipipe
|
|
57
|
+
|
|
58
|
+
self._simtel_path = Path(simtel_path)
|
|
59
|
+
self.io_handler = io_handler.IOHandler()
|
|
60
|
+
|
|
61
|
+
self.runner_service = RunnerServices(corsika_config, label)
|
|
62
|
+
self._directory = self.runner_service.load_data_directories("corsika")
|
|
63
|
+
|
|
64
|
+
def prepare_run_script(
|
|
65
|
+
self, run_number=None, extra_commands=None, input_file=None, use_pfp=True
|
|
66
|
+
):
|
|
67
|
+
"""
|
|
68
|
+
Get the full path of the run script file for a given run number.
|
|
69
|
+
|
|
70
|
+
Parameters
|
|
71
|
+
----------
|
|
72
|
+
use_pfp: bool
|
|
73
|
+
Whether to use the preprocessor in preparing the CORSIKA input file
|
|
74
|
+
run_number: int
|
|
75
|
+
Run number.
|
|
76
|
+
extra_commands: str
|
|
77
|
+
Additional commands for running simulations.
|
|
78
|
+
|
|
79
|
+
Returns
|
|
80
|
+
-------
|
|
81
|
+
Path:
|
|
82
|
+
Full path of the run script file.
|
|
83
|
+
"""
|
|
84
|
+
if input_file is not None:
|
|
85
|
+
self._logger.warning(
|
|
86
|
+
"input_file parameter is not used in CorsikaRunner.prepare_run_script"
|
|
87
|
+
)
|
|
88
|
+
self.corsika_config.run_number = run_number
|
|
89
|
+
|
|
90
|
+
script_file_path = self.get_file_name(
|
|
91
|
+
file_type="sub_script", run_number=self.corsika_config.run_number
|
|
92
|
+
)
|
|
93
|
+
corsika_input_file = self.corsika_config.generate_corsika_input_file(
|
|
94
|
+
use_multipipe=self._use_multipipe, use_test_seeds=self._keep_seeds
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# CORSIKA input file for a specific run, created by the preprocessor pfp
|
|
98
|
+
corsika_input_tmp_name = self.corsika_config.get_corsika_config_file_name(
|
|
99
|
+
file_type="config_tmp", run_number=self.corsika_config.run_number
|
|
100
|
+
)
|
|
101
|
+
corsika_input_tmp_file = self._directory["inputs"].joinpath(corsika_input_tmp_name)
|
|
102
|
+
|
|
103
|
+
if use_pfp:
|
|
104
|
+
pfp_command = self._get_pfp_command(corsika_input_tmp_file, corsika_input_file)
|
|
105
|
+
autoinputs_command = self._get_autoinputs_command(
|
|
106
|
+
self.corsika_config.run_number, corsika_input_tmp_file
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
self._logger.debug(f"Extra commands to be added to the run script: {extra_commands}")
|
|
110
|
+
self._logger.debug(f"CORSIKA data will be set to {self._directory['data']}")
|
|
111
|
+
|
|
112
|
+
with open(script_file_path, "w", encoding="utf-8") as file:
|
|
113
|
+
file.write("#!/usr/bin/env bash\n")
|
|
114
|
+
file.write("set -e\n")
|
|
115
|
+
file.write("set -o pipefail\n")
|
|
116
|
+
|
|
117
|
+
# Setting SECONDS variable to measure runtime
|
|
118
|
+
file.write("\nSECONDS=0\n")
|
|
119
|
+
|
|
120
|
+
if extra_commands is not None:
|
|
121
|
+
file.write("\n# Writing extras\n")
|
|
122
|
+
file.write(f"{extra_commands}\n")
|
|
123
|
+
file.write("# End of extras\n\n")
|
|
124
|
+
|
|
125
|
+
file.write(f"export CORSIKA_DATA={self._directory['data']}\n")
|
|
126
|
+
file.write('mkdir -p "$CORSIKA_DATA"\n')
|
|
127
|
+
file.write('cd "$CORSIKA_DATA" || exit 2\n')
|
|
128
|
+
if use_pfp:
|
|
129
|
+
file.write("\n# Running pfp\n")
|
|
130
|
+
file.write(pfp_command)
|
|
131
|
+
file.write("\n# Replacing the XXXXXX placeholder with the run number\n")
|
|
132
|
+
file.write(
|
|
133
|
+
f"sed -i 's/XXXXXX/{self.corsika_config.run_number:06}/g' "
|
|
134
|
+
f"{corsika_input_tmp_file}\n"
|
|
135
|
+
)
|
|
136
|
+
else:
|
|
137
|
+
file.write("\n# Copying CORSIKA input file to run location\n")
|
|
138
|
+
file.write(f"cp {corsika_input_file} {corsika_input_tmp_file}")
|
|
139
|
+
file.write("\n# Running corsika_autoinputs\n")
|
|
140
|
+
file.write(autoinputs_command)
|
|
141
|
+
|
|
142
|
+
file.write('\necho "RUNTIME: $SECONDS"\n')
|
|
143
|
+
|
|
144
|
+
os.system(f"chmod ug+x {script_file_path}")
|
|
145
|
+
|
|
146
|
+
return script_file_path
|
|
147
|
+
|
|
148
|
+
def get_resources(self, run_number=None):
|
|
149
|
+
"""Return computing resources used."""
|
|
150
|
+
return self.runner_service.get_resources(run_number)
|
|
151
|
+
|
|
152
|
+
def _get_pfp_command(self, input_tmp_file, corsika_input_file):
|
|
153
|
+
"""
|
|
154
|
+
Get pfp pre-processor command.
|
|
155
|
+
|
|
156
|
+
pfp is a pre-processor tool and part of sim_telarray.
|
|
157
|
+
|
|
158
|
+
Parameters
|
|
159
|
+
----------
|
|
160
|
+
input_tmp_file: Path
|
|
161
|
+
Temporary input file.
|
|
162
|
+
|
|
163
|
+
Returns
|
|
164
|
+
-------
|
|
165
|
+
str
|
|
166
|
+
pfp command.
|
|
167
|
+
"""
|
|
168
|
+
cmd = self._simtel_path.joinpath("sim_telarray/bin/pfp")
|
|
169
|
+
cmd = str(cmd) + f" -V -DWITHOUT_MULTIPIPE - < {corsika_input_file}"
|
|
170
|
+
cmd += f" > {input_tmp_file} || exit\n"
|
|
171
|
+
return cmd
|
|
172
|
+
|
|
173
|
+
def _get_autoinputs_command(self, run_number, input_tmp_file):
|
|
174
|
+
"""
|
|
175
|
+
Get autoinputs command.
|
|
176
|
+
|
|
177
|
+
corsika_autoinputs is a tool to generate random and user/host dependent
|
|
178
|
+
parameters for CORSIKA configuration.
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
run_number: int
|
|
183
|
+
Run number.
|
|
184
|
+
input_tmp_file: Path
|
|
185
|
+
Temporary input file.
|
|
186
|
+
|
|
187
|
+
Returns
|
|
188
|
+
-------
|
|
189
|
+
str
|
|
190
|
+
autoinputs command.
|
|
191
|
+
"""
|
|
192
|
+
corsika_bin_path = self._simtel_path.joinpath("corsika-run/corsika")
|
|
193
|
+
|
|
194
|
+
log_file = self.get_file_name(file_type="log", run_number=run_number)
|
|
195
|
+
if self._use_multipipe:
|
|
196
|
+
log_file = log_file.with_name(f"multipipe_{log_file.name}")
|
|
197
|
+
|
|
198
|
+
cmd = self._simtel_path.joinpath("sim_telarray/bin/corsika_autoinputs")
|
|
199
|
+
cmd = str(cmd) + f" --run {corsika_bin_path}"
|
|
200
|
+
cmd += f" -R {run_number}"
|
|
201
|
+
cmd += ' -p "$CORSIKA_DATA"'
|
|
202
|
+
if self._keep_seeds:
|
|
203
|
+
logging.warning(
|
|
204
|
+
"Using --keep-seeds option in corsika_autoinputs is not recommended. "
|
|
205
|
+
"It should only be used for testing purposes."
|
|
206
|
+
)
|
|
207
|
+
cmd += " --keep-seeds"
|
|
208
|
+
cmd += f" {input_tmp_file} | gzip > {log_file} 2>&1"
|
|
209
|
+
cmd += " || exit 1\n"
|
|
210
|
+
return cmd
|
|
211
|
+
|
|
212
|
+
def get_file_name(
|
|
213
|
+
self, simulation_software="corsika", file_type=None, run_number=None, mode=""
|
|
214
|
+
):
|
|
215
|
+
"""
|
|
216
|
+
Get the full path of a file for a given run number.
|
|
217
|
+
|
|
218
|
+
Parameters
|
|
219
|
+
----------
|
|
220
|
+
simulation_software: str
|
|
221
|
+
Simulation software.
|
|
222
|
+
file_type: str
|
|
223
|
+
File type.
|
|
224
|
+
run_number: int
|
|
225
|
+
Run number.
|
|
226
|
+
|
|
227
|
+
Returns
|
|
228
|
+
-------
|
|
229
|
+
str
|
|
230
|
+
File name with full path.
|
|
231
|
+
"""
|
|
232
|
+
if simulation_software.lower() != "corsika":
|
|
233
|
+
raise ValueError(
|
|
234
|
+
f"simulation_software ({simulation_software}) is not supported in CorsikaRunner"
|
|
235
|
+
)
|
|
236
|
+
return self.runner_service.get_file_name(
|
|
237
|
+
file_type=file_type,
|
|
238
|
+
run_number=run_number,
|
|
239
|
+
mode=mode,
|
|
240
|
+
)
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"""Run simulations with CORSIKA and pipe it to sim_telarray using the multipipe functionality."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import stat
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from simtools.runners.corsika_runner import CorsikaRunner
|
|
8
|
+
from simtools.simtel.simulator_array import SimulatorArray
|
|
9
|
+
|
|
10
|
+
__all__ = ["CorsikaSimtelRunner"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CorsikaSimtelRunner:
|
|
14
|
+
"""
|
|
15
|
+
Run simulations with CORSIKA and pipe it to sim_telarray using the multipipe functionality.
|
|
16
|
+
|
|
17
|
+
Uses CorsikaConfig to manage the CORSIKA configuration and SimulatorArray
|
|
18
|
+
for the sim_telarray configuration.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
corsika_config : CorsikaConfig
|
|
23
|
+
Configuration parameters for CORSIKA.
|
|
24
|
+
simtel_path : str or Path
|
|
25
|
+
Location of the sim_telarray package.
|
|
26
|
+
label : str
|
|
27
|
+
Label.
|
|
28
|
+
keep_seeds : bool
|
|
29
|
+
Use seeds based on run number and primary particle. If False, use sim_telarray seeds.
|
|
30
|
+
use_multipipe : bool
|
|
31
|
+
Use multipipe to run CORSIKA and sim_telarray.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
corsika_config,
|
|
37
|
+
simtel_path,
|
|
38
|
+
label=None,
|
|
39
|
+
keep_seeds=False,
|
|
40
|
+
use_multipipe=False,
|
|
41
|
+
sim_telarray_seeds=None,
|
|
42
|
+
):
|
|
43
|
+
self._logger = logging.getLogger(__name__)
|
|
44
|
+
self.corsika_config = corsika_config
|
|
45
|
+
self._simtel_path = simtel_path
|
|
46
|
+
self.sim_telarray_seeds = sim_telarray_seeds
|
|
47
|
+
self.label = label
|
|
48
|
+
|
|
49
|
+
self.corsika_config.set_output_file_and_directory(use_multipipe)
|
|
50
|
+
self.corsika_runner = CorsikaRunner(
|
|
51
|
+
corsika_config=corsika_config,
|
|
52
|
+
simtel_path=simtel_path,
|
|
53
|
+
label=label,
|
|
54
|
+
keep_seeds=keep_seeds,
|
|
55
|
+
use_multipipe=use_multipipe,
|
|
56
|
+
)
|
|
57
|
+
self.simulator_array = SimulatorArray(
|
|
58
|
+
corsika_config=corsika_config,
|
|
59
|
+
simtel_path=simtel_path,
|
|
60
|
+
label=label,
|
|
61
|
+
use_multipipe=use_multipipe,
|
|
62
|
+
sim_telarray_seeds=sim_telarray_seeds,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
def prepare_run_script(
|
|
66
|
+
self, run_number=None, input_file=None, extra_commands=None, use_pfp=False
|
|
67
|
+
):
|
|
68
|
+
"""
|
|
69
|
+
Get the full path of the run script file for a given run number.
|
|
70
|
+
|
|
71
|
+
Parameters
|
|
72
|
+
----------
|
|
73
|
+
run_number: int
|
|
74
|
+
Run number.
|
|
75
|
+
use_pfp: bool
|
|
76
|
+
Whether to use the preprocessor in preparing the CORSIKA input file
|
|
77
|
+
|
|
78
|
+
Returns
|
|
79
|
+
-------
|
|
80
|
+
Path:
|
|
81
|
+
Full path of the run script file.
|
|
82
|
+
"""
|
|
83
|
+
self._export_multipipe_script(run_number)
|
|
84
|
+
return self.corsika_runner.prepare_run_script(
|
|
85
|
+
run_number=run_number,
|
|
86
|
+
input_file=input_file,
|
|
87
|
+
extra_commands=extra_commands,
|
|
88
|
+
use_pfp=use_pfp,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
def _export_multipipe_script(self, run_number):
|
|
92
|
+
"""
|
|
93
|
+
Write the multipipe script used in piping CORSIKA to sim_telarray.
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
run_number: int
|
|
98
|
+
Run number.
|
|
99
|
+
|
|
100
|
+
Returns
|
|
101
|
+
-------
|
|
102
|
+
Path:
|
|
103
|
+
Full path of the run script file.
|
|
104
|
+
"""
|
|
105
|
+
run_command = self._make_run_command(
|
|
106
|
+
run_number=run_number,
|
|
107
|
+
input_file="-", # instruct sim_telarray to take input from standard output
|
|
108
|
+
)
|
|
109
|
+
multipipe_file = Path(self.corsika_config.config_file_path.parent).joinpath(
|
|
110
|
+
self.corsika_config.get_corsika_config_file_name("multipipe")
|
|
111
|
+
)
|
|
112
|
+
with open(multipipe_file, "w", encoding="utf-8") as file:
|
|
113
|
+
file.write(f"{run_command}")
|
|
114
|
+
self._logger.info(f"Multipipe script: {multipipe_file}")
|
|
115
|
+
self._write_multipipe_script(multipipe_file)
|
|
116
|
+
|
|
117
|
+
def _write_multipipe_script(self, multipipe_file):
|
|
118
|
+
"""
|
|
119
|
+
Write script used to call the multipipe_corsika command.
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
multipipe_file: str or Path
|
|
124
|
+
The name of the multipipe file which contains all of the multipipe commands.
|
|
125
|
+
"""
|
|
126
|
+
multipipe_script = Path(self.corsika_config.config_file_path.parent).joinpath(
|
|
127
|
+
"run_cta_multipipe"
|
|
128
|
+
)
|
|
129
|
+
with open(multipipe_script, "w", encoding="utf-8") as file:
|
|
130
|
+
multipipe_command = Path(self._simtel_path).joinpath(
|
|
131
|
+
"sim_telarray/bin/multipipe_corsika "
|
|
132
|
+
f"-c {multipipe_file}"
|
|
133
|
+
" || echo 'Fan-out failed'"
|
|
134
|
+
)
|
|
135
|
+
file.write(f"{multipipe_command}")
|
|
136
|
+
|
|
137
|
+
multipipe_script.chmod(multipipe_script.stat().st_mode | stat.S_IEXEC)
|
|
138
|
+
|
|
139
|
+
def _make_run_command(self, run_number=None, input_file=None):
|
|
140
|
+
"""
|
|
141
|
+
Build and return the command to run simtel_array.
|
|
142
|
+
|
|
143
|
+
Parameters
|
|
144
|
+
----------
|
|
145
|
+
run_number: int
|
|
146
|
+
Run number.
|
|
147
|
+
input_file: str
|
|
148
|
+
Full path of the input CORSIKA file.
|
|
149
|
+
Use '-' to tell sim_telarray to read from standard output
|
|
150
|
+
|
|
151
|
+
Returns
|
|
152
|
+
-------
|
|
153
|
+
str:
|
|
154
|
+
Command to run sim_telarray.
|
|
155
|
+
"""
|
|
156
|
+
try:
|
|
157
|
+
weak_pointing = any(pointing in self.label for pointing in ["divergent", "convergent"])
|
|
158
|
+
except TypeError: # allow for self.label to be None
|
|
159
|
+
weak_pointing = False
|
|
160
|
+
|
|
161
|
+
command = str(self._simtel_path.joinpath("sim_telarray/bin/sim_telarray"))
|
|
162
|
+
command += f" -c {self.corsika_config.array_model.get_config_file()}"
|
|
163
|
+
command += f" -I{self.corsika_config.array_model.get_config_directory()}"
|
|
164
|
+
command += self.simulator_array.get_config_option(
|
|
165
|
+
"telescope_theta", self.corsika_config.zenith_angle, weak_option=weak_pointing
|
|
166
|
+
)
|
|
167
|
+
command += self.simulator_array.get_config_option(
|
|
168
|
+
"telescope_phi", self.corsika_config.azimuth_angle, weak_option=weak_pointing
|
|
169
|
+
)
|
|
170
|
+
command += self.simulator_array.get_config_option(
|
|
171
|
+
"power_law",
|
|
172
|
+
SimulatorArray.get_power_law_for_sim_telarray_histograms(
|
|
173
|
+
self.corsika_config.primary_particle
|
|
174
|
+
),
|
|
175
|
+
)
|
|
176
|
+
command += self.simulator_array.get_config_option(
|
|
177
|
+
"histogram_file",
|
|
178
|
+
self.get_file_name(
|
|
179
|
+
simulation_software="simtel", file_type="histogram", run_number=run_number
|
|
180
|
+
),
|
|
181
|
+
)
|
|
182
|
+
command += self.simulator_array.get_config_option("random_state", "none")
|
|
183
|
+
if self.sim_telarray_seeds:
|
|
184
|
+
command += self.simulator_array.get_config_option(
|
|
185
|
+
"random_seed", self.sim_telarray_seeds
|
|
186
|
+
)
|
|
187
|
+
command += self.simulator_array.get_config_option("show", "all")
|
|
188
|
+
command += self.simulator_array.get_config_option(
|
|
189
|
+
"output_file",
|
|
190
|
+
self.simulator_array.get_file_name(
|
|
191
|
+
simulation_software="simtel", file_type="output", run_number=run_number
|
|
192
|
+
),
|
|
193
|
+
)
|
|
194
|
+
command += f" {input_file}"
|
|
195
|
+
_log_file = self.simulator_array.get_file_name(
|
|
196
|
+
simulation_software="simtel", file_type="log", run_number=run_number
|
|
197
|
+
)
|
|
198
|
+
command += f" | gzip > {_log_file} 2>&1 || exit"
|
|
199
|
+
|
|
200
|
+
return command
|
|
201
|
+
|
|
202
|
+
def get_file_name(self, simulation_software=None, file_type=None, run_number=None, mode=None):
|
|
203
|
+
"""
|
|
204
|
+
Get the full path of a file for a given run number.
|
|
205
|
+
|
|
206
|
+
Parameters
|
|
207
|
+
----------
|
|
208
|
+
simulation_software: str
|
|
209
|
+
Simulation software.
|
|
210
|
+
file_type: str
|
|
211
|
+
File type.
|
|
212
|
+
run_number: int
|
|
213
|
+
Run number.
|
|
214
|
+
|
|
215
|
+
Returns
|
|
216
|
+
-------
|
|
217
|
+
str
|
|
218
|
+
File name with full path.
|
|
219
|
+
"""
|
|
220
|
+
if simulation_software is None:
|
|
221
|
+
# preference to simtel output (multipipe)
|
|
222
|
+
simulation_software = "simtel" if self.simulator_array else "corsika"
|
|
223
|
+
|
|
224
|
+
runner = self.corsika_runner if simulation_software == "corsika" else self.simulator_array
|
|
225
|
+
return runner.get_file_name(file_type=file_type, run_number=run_number, mode=mode)
|