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
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
"""Simulation using the light emission package for calibration."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import astropy.units as u
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
from simtools.io_operations import io_handler
|
|
11
|
+
from simtools.runners.simtel_runner import SimtelRunner
|
|
12
|
+
|
|
13
|
+
__all__ = ["SimulatorLightEmission"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SimulatorLightEmission(SimtelRunner):
|
|
17
|
+
"""
|
|
18
|
+
Interface with sim_telarray to perform light emission package simulations.
|
|
19
|
+
|
|
20
|
+
The light emission package is used to simulate a artificial light source, used for calibration.
|
|
21
|
+
|
|
22
|
+
The angle and pointing vector calculations use the convention north (x) towards
|
|
23
|
+
east (-y).
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
telescope_model:
|
|
28
|
+
Instance of the TelescopeModel class.
|
|
29
|
+
calibration_model:
|
|
30
|
+
CalibrationModel instance to define calibration device.
|
|
31
|
+
site_model:
|
|
32
|
+
SiteModel instance to define the site specific parameters.
|
|
33
|
+
default_le_config: dict
|
|
34
|
+
defines parameters for running the sim_telarray light emission application.
|
|
35
|
+
le_application: str
|
|
36
|
+
Name of the application. Default sim_telarray application running
|
|
37
|
+
the sim_telarray LightEmission package is xyzls.
|
|
38
|
+
simtel_path: str or Path
|
|
39
|
+
Location of sim_telarray installation.
|
|
40
|
+
light_source_type: str
|
|
41
|
+
The light source type.
|
|
42
|
+
label: str
|
|
43
|
+
Label for output directory.
|
|
44
|
+
config_data: dict
|
|
45
|
+
Dict containing the configurable parameters.
|
|
46
|
+
config_file: str or Path
|
|
47
|
+
Path of the yaml file containing the configurable parameters.
|
|
48
|
+
test: bool
|
|
49
|
+
Test flag.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
telescope_model,
|
|
55
|
+
calibration_model,
|
|
56
|
+
site_model,
|
|
57
|
+
default_le_config,
|
|
58
|
+
le_application,
|
|
59
|
+
simtel_path,
|
|
60
|
+
light_source_type,
|
|
61
|
+
label=None,
|
|
62
|
+
test=False,
|
|
63
|
+
):
|
|
64
|
+
"""Initialize SimtelRunner."""
|
|
65
|
+
super().__init__(label=label, simtel_path=simtel_path)
|
|
66
|
+
|
|
67
|
+
self._logger = logging.getLogger(__name__)
|
|
68
|
+
self._logger.debug("Init SimtelRunnerLightEmission")
|
|
69
|
+
self._simtel_path = simtel_path
|
|
70
|
+
|
|
71
|
+
self._telescope_model = telescope_model
|
|
72
|
+
|
|
73
|
+
self.label = label if label is not None else self._telescope_model.label
|
|
74
|
+
|
|
75
|
+
self._calibration_model = calibration_model
|
|
76
|
+
self._site_model = site_model
|
|
77
|
+
self.io_handler = io_handler.IOHandler()
|
|
78
|
+
self.output_directory = self.io_handler.get_output_directory(self.label)
|
|
79
|
+
|
|
80
|
+
# LightEmission - default parameters
|
|
81
|
+
self._rep_number = 0
|
|
82
|
+
self.runs = 1
|
|
83
|
+
self.photons_per_run = (
|
|
84
|
+
self._calibration_model.get_parameter_value("photons_per_run") if not test else 1e7
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
self.le_application = le_application
|
|
88
|
+
self.default_le_config = default_le_config
|
|
89
|
+
self.distance = self.telescope_calibration_device_distance()
|
|
90
|
+
self.light_source_type = light_source_type
|
|
91
|
+
self._telescope_model.export_config_file()
|
|
92
|
+
self.test = test
|
|
93
|
+
|
|
94
|
+
@staticmethod
|
|
95
|
+
def light_emission_default_configuration():
|
|
96
|
+
"""
|
|
97
|
+
Get default light emission configuration.
|
|
98
|
+
|
|
99
|
+
Returns
|
|
100
|
+
-------
|
|
101
|
+
dict
|
|
102
|
+
Default configuration light emission.
|
|
103
|
+
|
|
104
|
+
"""
|
|
105
|
+
return {
|
|
106
|
+
"zenith_angle": {
|
|
107
|
+
"len": 1,
|
|
108
|
+
"unit": u.Unit("deg"),
|
|
109
|
+
"default": 0.0 * u.deg,
|
|
110
|
+
"names": ["zenith", "theta"],
|
|
111
|
+
},
|
|
112
|
+
"azimuth_angle": {
|
|
113
|
+
"len": 1,
|
|
114
|
+
"unit": u.Unit("deg"),
|
|
115
|
+
"default": 0.0 * u.deg,
|
|
116
|
+
"names": ["azimuth", "phi"],
|
|
117
|
+
},
|
|
118
|
+
"source_distance": {
|
|
119
|
+
"len": 1,
|
|
120
|
+
"unit": u.Unit("m"),
|
|
121
|
+
"default": 1000 * u.m,
|
|
122
|
+
"names": ["sourcedist", "srcdist"],
|
|
123
|
+
},
|
|
124
|
+
"off_axis_angle": {
|
|
125
|
+
"len": 1,
|
|
126
|
+
"unit": u.Unit("deg"),
|
|
127
|
+
"default": 0 * u.deg,
|
|
128
|
+
"names": ["off_axis"],
|
|
129
|
+
},
|
|
130
|
+
"fadc_bins": {
|
|
131
|
+
"len": 1,
|
|
132
|
+
"unit": u.dimensionless_unscaled,
|
|
133
|
+
"default": 128,
|
|
134
|
+
"names": ["fadc_bins"],
|
|
135
|
+
},
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
def calibration_pointing_direction(self):
|
|
139
|
+
"""
|
|
140
|
+
Calculate the pointing of the calibration device towards the telescope.
|
|
141
|
+
|
|
142
|
+
Returns
|
|
143
|
+
-------
|
|
144
|
+
list
|
|
145
|
+
The pointing vector from the calibration device to the telescope.
|
|
146
|
+
"""
|
|
147
|
+
# use DB coordinates later
|
|
148
|
+
x_cal, y_cal, z_cal = self._calibration_model.get_parameter_value(
|
|
149
|
+
"array_element_position_ground"
|
|
150
|
+
)
|
|
151
|
+
cal_vect = np.array([x_cal, y_cal, z_cal])
|
|
152
|
+
x_tel, y_tel, z_tel = self._telescope_model.get_parameter_value(
|
|
153
|
+
"array_element_position_ground"
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
tel_vect = np.array([x_tel, y_tel, z_tel])
|
|
157
|
+
|
|
158
|
+
direction_vector = tel_vect - cal_vect
|
|
159
|
+
# pointing vector from calibration device to telescope
|
|
160
|
+
|
|
161
|
+
pointing_vector = np.round(direction_vector / np.linalg.norm(direction_vector), 6)
|
|
162
|
+
|
|
163
|
+
# Calculate telescope theta and phi angles
|
|
164
|
+
tel_theta = 180 - np.round(
|
|
165
|
+
np.rad2deg(np.arccos(direction_vector[2] / np.linalg.norm(direction_vector))), 6
|
|
166
|
+
)
|
|
167
|
+
tel_phi = 180 - np.round(
|
|
168
|
+
np.rad2deg(np.arctan2(direction_vector[1], direction_vector[0])), 6
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# Calculate laser beam theta and phi angles
|
|
172
|
+
direction_vector_inv = direction_vector * -1
|
|
173
|
+
laser_theta = np.round(
|
|
174
|
+
np.rad2deg(np.arccos(direction_vector_inv[2] / np.linalg.norm(direction_vector_inv))), 6
|
|
175
|
+
)
|
|
176
|
+
laser_phi = np.round(
|
|
177
|
+
np.rad2deg(np.arctan2(direction_vector_inv[1], direction_vector_inv[0])), 6
|
|
178
|
+
)
|
|
179
|
+
return pointing_vector.tolist(), [tel_theta, tel_phi, laser_theta, laser_phi]
|
|
180
|
+
|
|
181
|
+
def telescope_calibration_device_distance(self):
|
|
182
|
+
"""
|
|
183
|
+
Calculate the distance between the telescope and the calibration device.
|
|
184
|
+
|
|
185
|
+
Returns
|
|
186
|
+
-------
|
|
187
|
+
astropy Quantity
|
|
188
|
+
The distance between the telescope and the calibration device.
|
|
189
|
+
"""
|
|
190
|
+
if not self.default_le_config:
|
|
191
|
+
x_cal, y_cal, z_cal = self._calibration_model.get_parameter_value(
|
|
192
|
+
"array_element_position_ground"
|
|
193
|
+
)
|
|
194
|
+
x_tel, y_tel, z_tel = self._telescope_model.get_parameter_value(
|
|
195
|
+
"array_element_position_ground"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
else:
|
|
199
|
+
x_tel = self.default_le_config["x_pos"]["default"].to(u.m).value
|
|
200
|
+
y_tel = self.default_le_config["y_pos"]["default"].to(u.m).value
|
|
201
|
+
z_tel = self.default_le_config["z_pos"]["default"].to(u.m).value
|
|
202
|
+
|
|
203
|
+
x_cal, y_cal, z_cal = 0, 0, 0
|
|
204
|
+
|
|
205
|
+
tel_vect = np.array([x_tel, y_tel, z_tel])
|
|
206
|
+
cal_vect = np.array([x_cal, y_cal, z_cal])
|
|
207
|
+
distance = np.linalg.norm(cal_vect - tel_vect)
|
|
208
|
+
|
|
209
|
+
return distance * u.m
|
|
210
|
+
|
|
211
|
+
def _make_light_emission_script(self):
|
|
212
|
+
"""
|
|
213
|
+
Create the light emission script to run the light emission package.
|
|
214
|
+
|
|
215
|
+
Require the specified pre-compiled light emission package application
|
|
216
|
+
in the sim_telarray/LightEmission/ path.
|
|
217
|
+
|
|
218
|
+
Returns
|
|
219
|
+
-------
|
|
220
|
+
str
|
|
221
|
+
The commands to run the Light Emission package
|
|
222
|
+
"""
|
|
223
|
+
x_cal, y_cal, z_cal = (
|
|
224
|
+
self._calibration_model.get_parameter_value("array_element_position_ground") * u.m
|
|
225
|
+
)
|
|
226
|
+
x_tel, y_tel, z_tel = (
|
|
227
|
+
self._telescope_model.get_parameter_value("array_element_position_ground") * u.m
|
|
228
|
+
)
|
|
229
|
+
_model_directory = self.io_handler.get_output_directory(self.label, "model")
|
|
230
|
+
command = f" rm {self.output_directory}/"
|
|
231
|
+
command += f"{self.le_application[0]}_{self.le_application[1]}.simtel.gz\n"
|
|
232
|
+
command += str(self._simtel_path.joinpath("sim_telarray/LightEmission/"))
|
|
233
|
+
command += f"/{self.le_application[0]}"
|
|
234
|
+
|
|
235
|
+
if self.light_source_type == "led":
|
|
236
|
+
|
|
237
|
+
if self.le_application[1] == "variable":
|
|
238
|
+
command += f" -x {self.default_le_config['x_pos']['default'].to(u.cm).value}"
|
|
239
|
+
command += f" -y {self.default_le_config['y_pos']['default'].to(u.cm).value}"
|
|
240
|
+
command += f" -z {self.default_le_config['z_pos']['default'].to(u.cm).value}"
|
|
241
|
+
command += (
|
|
242
|
+
f" -d {','.join(map(str, self.default_le_config['direction']['default']))}"
|
|
243
|
+
)
|
|
244
|
+
command += f" -n {self.photons_per_run}"
|
|
245
|
+
|
|
246
|
+
elif self.le_application[1] == "layout":
|
|
247
|
+
|
|
248
|
+
x_origin = x_cal - x_tel
|
|
249
|
+
y_origin = y_cal - y_tel
|
|
250
|
+
z_origin = z_cal - z_tel
|
|
251
|
+
# light_source coordinates relative to telescope
|
|
252
|
+
command += f" -x {x_origin.to(u.cm).value}"
|
|
253
|
+
command += f" -y {y_origin.to(u.cm).value}"
|
|
254
|
+
command += f" -z {z_origin.to(u.cm).value}"
|
|
255
|
+
pointing_vector = self.calibration_pointing_direction()[0]
|
|
256
|
+
command += f" -d {','.join(map(str, pointing_vector))}"
|
|
257
|
+
|
|
258
|
+
command += f" -n {self.photons_per_run}"
|
|
259
|
+
|
|
260
|
+
# same wavelength as for laser
|
|
261
|
+
command += f" -s {self._calibration_model.get_parameter_value('laser_wavelength')}"
|
|
262
|
+
|
|
263
|
+
# pulse
|
|
264
|
+
command += (
|
|
265
|
+
f" -p Gauss:{self._calibration_model.get_parameter_value('led_pulse_sigtime')}"
|
|
266
|
+
)
|
|
267
|
+
command += " -a isotropic" # angular distribution
|
|
268
|
+
|
|
269
|
+
command += f" -A {_model_directory}/"
|
|
270
|
+
command += f"{self._telescope_model.get_parameter_value('atmospheric_profile')}"
|
|
271
|
+
|
|
272
|
+
elif self.light_source_type == "laser":
|
|
273
|
+
command += " --events 1"
|
|
274
|
+
command += " --bunches 2500000"
|
|
275
|
+
command += " --step 0.1"
|
|
276
|
+
command += " --bunchsize 1"
|
|
277
|
+
command += (
|
|
278
|
+
f" --spectrum {self._calibration_model.get_parameter_value('laser_wavelength')}"
|
|
279
|
+
)
|
|
280
|
+
command += " --lightpulse Gauss:"
|
|
281
|
+
command += f"{self._calibration_model.get_parameter_value('laser_pulse_sigtime')}"
|
|
282
|
+
x_origin = x_cal - x_tel
|
|
283
|
+
y_origin = y_cal - y_tel
|
|
284
|
+
z_origin = z_cal - z_tel
|
|
285
|
+
_, angles = self.calibration_pointing_direction()
|
|
286
|
+
angle_theta = angles[0]
|
|
287
|
+
angle_phi = angles[1]
|
|
288
|
+
positions = x_origin.to(u.cm).value, y_origin.to(u.cm).value, z_origin.to(u.cm).value
|
|
289
|
+
command += f" --laser-position '{positions[0]},{positions[1]},{positions[2]}'"
|
|
290
|
+
|
|
291
|
+
command += f" --telescope-theta {angle_theta}"
|
|
292
|
+
command += f" --telescope-phi {angle_phi}"
|
|
293
|
+
command += f" --laser-theta {90-angles[2]}"
|
|
294
|
+
command += f" --laser-phi {angles[3]}" # convention north (x) towards east (-y)
|
|
295
|
+
command += f" --atmosphere {_model_directory}/"
|
|
296
|
+
command += f"{self._telescope_model.get_parameter_value('atmospheric_profile')}"
|
|
297
|
+
command += f" -o {self.output_directory}/{self.le_application[0]}.iact.gz"
|
|
298
|
+
command += "\n"
|
|
299
|
+
|
|
300
|
+
return command
|
|
301
|
+
|
|
302
|
+
def _make_simtel_script(self):
|
|
303
|
+
"""
|
|
304
|
+
Return the command to run simtel_array using the output from the previous step.
|
|
305
|
+
|
|
306
|
+
Returns
|
|
307
|
+
-------
|
|
308
|
+
str
|
|
309
|
+
The command to run simtel_array
|
|
310
|
+
"""
|
|
311
|
+
# LightEmission
|
|
312
|
+
_, angles = self.calibration_pointing_direction()
|
|
313
|
+
|
|
314
|
+
command = f"{self._simtel_path.joinpath('sim_telarray/bin/sim_telarray/')}"
|
|
315
|
+
command += " -I"
|
|
316
|
+
command += f" -I{self._telescope_model.config_file_directory}"
|
|
317
|
+
command += f" -c {self._telescope_model.get_config_file(no_export=True)}"
|
|
318
|
+
if not self.test:
|
|
319
|
+
self._remove_line_from_config(
|
|
320
|
+
self._telescope_model.get_config_file(no_export=True), "array_triggers"
|
|
321
|
+
)
|
|
322
|
+
self._remove_line_from_config(
|
|
323
|
+
self._telescope_model.get_config_file(no_export=True), "axes_offsets"
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
command += " -DNUM_TELESCOPES=1"
|
|
327
|
+
|
|
328
|
+
command += super().get_config_option(
|
|
329
|
+
"altitude", self._site_model.get_parameter_value("corsika_observation_level")
|
|
330
|
+
)
|
|
331
|
+
command += super().get_config_option(
|
|
332
|
+
"atmospheric_transmission",
|
|
333
|
+
self._telescope_model.get_parameter_value("atmospheric_transmission"),
|
|
334
|
+
)
|
|
335
|
+
command += super().get_config_option("TRIGGER_TELESCOPES", "1")
|
|
336
|
+
|
|
337
|
+
command += super().get_config_option("TELTRIG_MIN_SIGSUM", "2")
|
|
338
|
+
command += super().get_config_option("PULSE_ANALYSIS", "-30")
|
|
339
|
+
command += super().get_config_option("MAXIMUM_TELESCOPES", 1)
|
|
340
|
+
|
|
341
|
+
if self.le_application[1] == "variable":
|
|
342
|
+
command += super().get_config_option("telescope_theta", 0)
|
|
343
|
+
command += super().get_config_option("telescope_phi", 0)
|
|
344
|
+
else:
|
|
345
|
+
command += super().get_config_option("telescope_theta", f"{angles[0]}")
|
|
346
|
+
command += super().get_config_option("telescope_phi", f"{angles[1]}")
|
|
347
|
+
|
|
348
|
+
command += super().get_config_option("power_law", "2.68")
|
|
349
|
+
command += super().get_config_option(
|
|
350
|
+
"input_file", f"{self.output_directory}/{self.le_application[0]}.iact.gz"
|
|
351
|
+
)
|
|
352
|
+
command += super().get_config_option(
|
|
353
|
+
"output_file",
|
|
354
|
+
f"{self.output_directory}/"
|
|
355
|
+
f"{self.le_application[0]}_{self.le_application[1]}.simtel.gz",
|
|
356
|
+
)
|
|
357
|
+
command += super().get_config_option(
|
|
358
|
+
"histogram_file",
|
|
359
|
+
f"{self.output_directory}/"
|
|
360
|
+
f"{self.le_application[0]}_{self.le_application[1]}.ctsim.hdata\n",
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
return command
|
|
364
|
+
|
|
365
|
+
def _remove_line_from_config(self, file_path, line_prefix):
|
|
366
|
+
"""
|
|
367
|
+
Remove lines starting with a specific prefix from the config.
|
|
368
|
+
|
|
369
|
+
Parameters
|
|
370
|
+
----------
|
|
371
|
+
file_path : Path
|
|
372
|
+
The path to the configuration file.
|
|
373
|
+
line_prefix : str
|
|
374
|
+
The prefix of lines to be removed.
|
|
375
|
+
"""
|
|
376
|
+
file_path = Path(file_path)
|
|
377
|
+
with file_path.open("r", encoding="utf-8") as file:
|
|
378
|
+
lines = file.readlines()
|
|
379
|
+
|
|
380
|
+
with file_path.open("w", encoding="utf-8") as file:
|
|
381
|
+
for line in lines:
|
|
382
|
+
if not line.startswith(line_prefix):
|
|
383
|
+
file.write(line)
|
|
384
|
+
|
|
385
|
+
def _create_postscript(self, **kwargs):
|
|
386
|
+
"""
|
|
387
|
+
Write out post-script file using read_cta in hessioxxx/bin/read_cta.
|
|
388
|
+
|
|
389
|
+
parts from the documentation
|
|
390
|
+
-r level (Use 10/5 tail-cut image cleaning and redo reconstruction.)
|
|
391
|
+
level >= 1: show parameters from sim_hessarray.
|
|
392
|
+
level >= 2: redo shower reconstruction
|
|
393
|
+
level >= 3: redo image cleaning (and shower reconstruction
|
|
394
|
+
with new image parameters)
|
|
395
|
+
level >= 4: redo amplitude summation
|
|
396
|
+
level >= 5: PostScript file includes original and
|
|
397
|
+
new shower reconstruction.
|
|
398
|
+
--integration-window w,o[,ps] *(Set integration window width and offset.)
|
|
399
|
+
For some integration schemes there is a pulse shaping option.
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
Returns
|
|
403
|
+
-------
|
|
404
|
+
str
|
|
405
|
+
Command to create the postscript file
|
|
406
|
+
"""
|
|
407
|
+
postscript_dir = self.output_directory.joinpath("postscripts")
|
|
408
|
+
postscript_dir.mkdir(parents=True, exist_ok=True)
|
|
409
|
+
|
|
410
|
+
command = str(self._simtel_path.joinpath("hessioxxx/bin/read_cta"))
|
|
411
|
+
command += " --min-tel 1 --min-trg-tel 1"
|
|
412
|
+
command += " -q --integration-scheme 4"
|
|
413
|
+
command += " --integration-window "
|
|
414
|
+
command += f"{kwargs['integration_window'][0]},{kwargs['integration_window'][1]}"
|
|
415
|
+
command += f" -r {kwargs['level']}"
|
|
416
|
+
command += " --plot-with-sum-only"
|
|
417
|
+
command += " --plot-with-pixel-amp --plot-with-pixel-id"
|
|
418
|
+
command += (
|
|
419
|
+
f" -p {postscript_dir}/"
|
|
420
|
+
f"{self.le_application[0]}_{self.le_application[1]}_"
|
|
421
|
+
f"d_{int(self.distance.to(u.m).value)}.ps"
|
|
422
|
+
)
|
|
423
|
+
command += (
|
|
424
|
+
f" {self.output_directory}/"
|
|
425
|
+
f"{self.le_application[0]}_{self.le_application[1]}.simtel.gz\n"
|
|
426
|
+
)
|
|
427
|
+
# ps2pdf required, now only store postscripts
|
|
428
|
+
# command += f"ps2pdf {self.output_directory}/{self.le_application}.ps
|
|
429
|
+
# {self.output_directory}/{self.le_application}.pdf"
|
|
430
|
+
return command
|
|
431
|
+
|
|
432
|
+
def prepare_script(self, generate_postscript=False, **kwargs):
|
|
433
|
+
"""
|
|
434
|
+
Build and return bash run script containing the light-emission command.
|
|
435
|
+
|
|
436
|
+
Parameters
|
|
437
|
+
----------
|
|
438
|
+
plot: bool
|
|
439
|
+
If output should be plotted.
|
|
440
|
+
|
|
441
|
+
generate_postscript: bool
|
|
442
|
+
If postscript should be generated with read_cta.
|
|
443
|
+
|
|
444
|
+
Returns
|
|
445
|
+
-------
|
|
446
|
+
Path
|
|
447
|
+
Full path of the run script.
|
|
448
|
+
"""
|
|
449
|
+
self._logger.debug("Creating run bash script")
|
|
450
|
+
|
|
451
|
+
_script_dir = self.output_directory.joinpath("scripts")
|
|
452
|
+
_script_dir.mkdir(parents=True, exist_ok=True)
|
|
453
|
+
_script_file = _script_dir.joinpath(f"{self.le_application[0]}-lightemission.sh")
|
|
454
|
+
self._logger.debug(f"Run bash script - {_script_file}")
|
|
455
|
+
|
|
456
|
+
command_le = self._make_light_emission_script()
|
|
457
|
+
command_simtel = self._make_simtel_script()
|
|
458
|
+
|
|
459
|
+
with _script_file.open("w", encoding="utf-8") as file:
|
|
460
|
+
file.write("#!/usr/bin/env bash\n\n")
|
|
461
|
+
|
|
462
|
+
file.write(f"{command_le}\n\n")
|
|
463
|
+
file.write(f"{command_simtel}\n\n")
|
|
464
|
+
|
|
465
|
+
if generate_postscript:
|
|
466
|
+
self._logger.debug("Write out postscript file")
|
|
467
|
+
command_plot = self._create_postscript(**kwargs)
|
|
468
|
+
file.write("# Generate postscript\n\n")
|
|
469
|
+
file.write(f"{command_plot}\n\n")
|
|
470
|
+
file.write("# End\n\n")
|
|
471
|
+
|
|
472
|
+
os.system(f"chmod ug+x {_script_file}")
|
|
473
|
+
return _script_file
|