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,379 @@
|
|
|
1
|
+
"""Plot camera pixel layout."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
import matplotlib.colors as mcolors
|
|
6
|
+
import matplotlib.patches as mpatches
|
|
7
|
+
import matplotlib.pyplot as plt
|
|
8
|
+
import numpy as np
|
|
9
|
+
from matplotlib.collections import PatchCollection
|
|
10
|
+
|
|
11
|
+
import simtools.visualization.legend_handlers as leg_h
|
|
12
|
+
from simtools.model.model_utils import is_two_mirror_telescope
|
|
13
|
+
from simtools.utils import names
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def plot_pixel_layout(camera, camera_in_sky_coor=False, pixels_id_to_print=50):
|
|
19
|
+
"""
|
|
20
|
+
Plot the pixel layout for an observer facing the camera.
|
|
21
|
+
|
|
22
|
+
Including in the plot edge pixels, off pixels, pixel ID for the first 50 pixels,
|
|
23
|
+
coordinate systems, FOV, focal length and the average edge radius.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
camera : Camera
|
|
28
|
+
Camera object to plot.
|
|
29
|
+
camera_in_sky_coor : bool, optional
|
|
30
|
+
Flag to plot the camera in the sky coordinate system.
|
|
31
|
+
pixels_id_to_print : int, optional
|
|
32
|
+
Number of pixel IDs to print in the plot.
|
|
33
|
+
|
|
34
|
+
Returns
|
|
35
|
+
-------
|
|
36
|
+
fig : plt.Figure
|
|
37
|
+
Figure with the pixel layout.
|
|
38
|
+
"""
|
|
39
|
+
logger.info(f"Plotting the {camera.telescope_model_name} camera")
|
|
40
|
+
|
|
41
|
+
fig, ax = plt.subplots(figsize=(8, 8))
|
|
42
|
+
|
|
43
|
+
if not is_two_mirror_telescope(camera.telescope_model_name) and not camera_in_sky_coor:
|
|
44
|
+
camera.pixels["y"] = [(-1) * y_val for y_val in camera.pixels["y"]]
|
|
45
|
+
|
|
46
|
+
on_pixels, edge_pixels, off_pixels = _pixel_type_lists(camera)
|
|
47
|
+
for i_pix, (x, y) in enumerate(zip(camera.pixels["x"], camera.pixels["y"])):
|
|
48
|
+
if camera.pixels["pix_id"][i_pix] < pixels_id_to_print + 1:
|
|
49
|
+
font_size = (
|
|
50
|
+
4
|
|
51
|
+
if "SCT" in names.get_array_element_type_from_name(camera.telescope_model_name)
|
|
52
|
+
else 2
|
|
53
|
+
)
|
|
54
|
+
plt.text(
|
|
55
|
+
x, y, camera.pixels["pix_id"][i_pix], ha="center", va="center", fontsize=font_size
|
|
56
|
+
)
|
|
57
|
+
ax.add_collection(
|
|
58
|
+
PatchCollection(on_pixels, facecolor="none", edgecolor="black", linewidth=0.2)
|
|
59
|
+
)
|
|
60
|
+
ax.add_collection(
|
|
61
|
+
PatchCollection(
|
|
62
|
+
edge_pixels,
|
|
63
|
+
facecolor=(*mcolors.to_rgb("brown"), 0.5),
|
|
64
|
+
edgecolor=(*mcolors.to_rgb("black"), 1),
|
|
65
|
+
linewidth=0.2,
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
ax.add_collection(
|
|
69
|
+
PatchCollection(off_pixels, facecolor="black", edgecolor="black", linewidth=0.2)
|
|
70
|
+
)
|
|
71
|
+
legend_objects = [leg_h.PixelObject(), leg_h.EdgePixelObject()]
|
|
72
|
+
legend_labels = ["Pixel", "Edge pixel"]
|
|
73
|
+
legend_handler_map = {
|
|
74
|
+
leg_h.PixelObject: (
|
|
75
|
+
leg_h.HexPixelHandler()
|
|
76
|
+
if isinstance(on_pixels[0], mpatches.RegularPolygon)
|
|
77
|
+
else leg_h.SquarePixelHandler()
|
|
78
|
+
),
|
|
79
|
+
leg_h.EdgePixelObject: (
|
|
80
|
+
leg_h.HexEdgePixelHandler()
|
|
81
|
+
if isinstance(on_pixels[0], mpatches.RegularPolygon)
|
|
82
|
+
else leg_h.SquareEdgePixelHandler()
|
|
83
|
+
),
|
|
84
|
+
leg_h.OffPixelObject: (
|
|
85
|
+
leg_h.HexOffPixelHandler()
|
|
86
|
+
if isinstance(on_pixels[0], mpatches.RegularPolygon)
|
|
87
|
+
else leg_h.SquareOffPixelHandler()
|
|
88
|
+
),
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if len(off_pixels) > 0:
|
|
92
|
+
legend_objects.append(leg_h.OffPixelObject())
|
|
93
|
+
legend_labels.append("Disabled pixel")
|
|
94
|
+
|
|
95
|
+
plt.axis("equal")
|
|
96
|
+
plt.grid(True)
|
|
97
|
+
ax.set_axisbelow(True)
|
|
98
|
+
plt.axis(
|
|
99
|
+
[
|
|
100
|
+
min(camera.pixels["x"]),
|
|
101
|
+
max(camera.pixels["x"]),
|
|
102
|
+
min(camera.pixels["y"]) * 1.42,
|
|
103
|
+
max(camera.pixels["y"]) * 1.42,
|
|
104
|
+
]
|
|
105
|
+
)
|
|
106
|
+
plt.xlabel("Horizontal scale [cm]", fontsize=18, labelpad=0)
|
|
107
|
+
plt.ylabel("Vertical scale [cm]", fontsize=18, labelpad=0)
|
|
108
|
+
ax.set_title(
|
|
109
|
+
f"Pixels layout in {camera.telescope_model_name:s} camera",
|
|
110
|
+
fontsize=15,
|
|
111
|
+
y=1.02,
|
|
112
|
+
)
|
|
113
|
+
plt.tick_params(axis="both", which="major", labelsize=15)
|
|
114
|
+
|
|
115
|
+
_plot_axes_def(camera, plt, camera.pixels["rotate_angle"])
|
|
116
|
+
|
|
117
|
+
description = {
|
|
118
|
+
False: "For an observer facing the camera",
|
|
119
|
+
True: "For an observer behind the camera looking through",
|
|
120
|
+
None: "For an observer looking from secondary to camera",
|
|
121
|
+
}[camera_in_sky_coor and not is_two_mirror_telescope(camera.telescope_model_name)]
|
|
122
|
+
ax.text(0.02, 0.02, description, transform=ax.transAxes, color="black", fontsize=12)
|
|
123
|
+
|
|
124
|
+
fov, r_edge_avg = camera.calc_fov()
|
|
125
|
+
ax.text(
|
|
126
|
+
0.02,
|
|
127
|
+
0.96,
|
|
128
|
+
rf"$f_{{\mathrm{{eff}}}} = {camera.focal_length:.3f}\,\mathrm{{cm}}$",
|
|
129
|
+
transform=ax.transAxes,
|
|
130
|
+
color="black",
|
|
131
|
+
fontsize=12,
|
|
132
|
+
)
|
|
133
|
+
ax.text(
|
|
134
|
+
0.02,
|
|
135
|
+
0.92,
|
|
136
|
+
rf"Avg. edge radius = {r_edge_avg:.3f}$\,\mathrm{{cm}}$",
|
|
137
|
+
transform=ax.transAxes,
|
|
138
|
+
color="black",
|
|
139
|
+
fontsize=12,
|
|
140
|
+
)
|
|
141
|
+
ax.text(
|
|
142
|
+
0.02,
|
|
143
|
+
0.88,
|
|
144
|
+
rf"FoV = {fov:.3f}$\,\mathrm{{deg}}$",
|
|
145
|
+
transform=ax.transAxes,
|
|
146
|
+
color="black",
|
|
147
|
+
fontsize=12,
|
|
148
|
+
)
|
|
149
|
+
plt.legend(
|
|
150
|
+
legend_objects,
|
|
151
|
+
legend_labels,
|
|
152
|
+
handler_map=legend_handler_map,
|
|
153
|
+
prop={"size": 11},
|
|
154
|
+
loc="upper right",
|
|
155
|
+
)
|
|
156
|
+
ax.set_aspect("equal", "datalim")
|
|
157
|
+
plt.tight_layout()
|
|
158
|
+
|
|
159
|
+
return fig
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def _pixel_type_lists(camera):
|
|
163
|
+
"""
|
|
164
|
+
Return on, off, and edge pixel lists.
|
|
165
|
+
|
|
166
|
+
Parameters
|
|
167
|
+
----------
|
|
168
|
+
camera : Camera
|
|
169
|
+
Camera object.
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
on_pixels : list
|
|
174
|
+
List of on pixels.
|
|
175
|
+
edge_pixels : list
|
|
176
|
+
List of edge pixels.
|
|
177
|
+
off_pixels : list
|
|
178
|
+
List of off pixels.
|
|
179
|
+
"""
|
|
180
|
+
on_pixels, edge_pixels, off_pixels = [], [], []
|
|
181
|
+
|
|
182
|
+
for i_pix, (x, y) in enumerate(zip(camera.pixels["x"], camera.pixels["y"])):
|
|
183
|
+
shape = _pixel_shape(camera, x, y)
|
|
184
|
+
if camera.pixels["pix_on"][i_pix]:
|
|
185
|
+
neighbors = camera.get_neighbor_pixels()[i_pix]
|
|
186
|
+
if len(neighbors) < 6 and camera.pixels["pixel_shape"] in (1, 3):
|
|
187
|
+
edge_pixels.append(shape)
|
|
188
|
+
elif len(neighbors) < 4 and camera.pixels["pixel_shape"] == 2:
|
|
189
|
+
edge_pixels.append(shape)
|
|
190
|
+
else:
|
|
191
|
+
on_pixels.append(shape)
|
|
192
|
+
else:
|
|
193
|
+
off_pixels.append(shape)
|
|
194
|
+
|
|
195
|
+
return on_pixels, edge_pixels, off_pixels
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def _pixel_shape(camera, x, y):
|
|
199
|
+
"""
|
|
200
|
+
Return the shape of the pixel.
|
|
201
|
+
|
|
202
|
+
Parameters
|
|
203
|
+
----------
|
|
204
|
+
camera : Camera
|
|
205
|
+
Camera object.
|
|
206
|
+
x : float
|
|
207
|
+
x-coordinate of the pixel.
|
|
208
|
+
y : float
|
|
209
|
+
y-coordinate of the pixel.
|
|
210
|
+
|
|
211
|
+
Returns
|
|
212
|
+
-------
|
|
213
|
+
shape : matplotlib.patches.Patch
|
|
214
|
+
Shape of the pixel.
|
|
215
|
+
"""
|
|
216
|
+
if camera.pixels["pixel_shape"] in (1, 3):
|
|
217
|
+
return mpatches.RegularPolygon(
|
|
218
|
+
(x, y),
|
|
219
|
+
numVertices=6,
|
|
220
|
+
radius=camera.pixels["pixel_diameter"] / np.sqrt(3),
|
|
221
|
+
orientation=np.deg2rad(camera.pixels["orientation"]),
|
|
222
|
+
)
|
|
223
|
+
if camera.pixels["pixel_shape"] == 2:
|
|
224
|
+
return mpatches.Rectangle(
|
|
225
|
+
(
|
|
226
|
+
x - camera.pixels["pixel_diameter"] / 2.0,
|
|
227
|
+
y - camera.pixels["pixel_diameter"] / 2.0,
|
|
228
|
+
),
|
|
229
|
+
width=camera.pixels["pixel_diameter"],
|
|
230
|
+
height=camera.pixels["pixel_diameter"],
|
|
231
|
+
)
|
|
232
|
+
return None
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _plot_axes_def(camera, plot, rotate_angle):
|
|
236
|
+
"""
|
|
237
|
+
Plot three axes definitions on the pyplot.plt instance provided.
|
|
238
|
+
|
|
239
|
+
The three axes are Alt/Az, the camera coordinate system and the original coordinate
|
|
240
|
+
system the pixel list was provided.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
camera : Camera
|
|
245
|
+
Camera object.
|
|
246
|
+
plot: pyplot.plt instance
|
|
247
|
+
A pyplot.plt instance where to add the axes definitions.
|
|
248
|
+
rotate_angle: float
|
|
249
|
+
The rotation angle applied
|
|
250
|
+
"""
|
|
251
|
+
invert_yaxis = False
|
|
252
|
+
x_left = 0.7 # Position of the left most axis
|
|
253
|
+
if not is_two_mirror_telescope(camera.telescope_model_name):
|
|
254
|
+
invert_yaxis = True
|
|
255
|
+
x_left = 0.8
|
|
256
|
+
|
|
257
|
+
x_title = r"$x_{\!pix}$"
|
|
258
|
+
y_title = r"$y_{\!pix}$"
|
|
259
|
+
x_pos, y_pos = (x_left, 0.12)
|
|
260
|
+
# The rotation of LST (above 100 degrees) raises the axes.
|
|
261
|
+
# In this case, lower the starting point.
|
|
262
|
+
if np.rad2deg(rotate_angle) > 100:
|
|
263
|
+
y_pos -= 0.09
|
|
264
|
+
x_pos -= 0.05
|
|
265
|
+
kwargs = {
|
|
266
|
+
"x_title": x_title,
|
|
267
|
+
"y_title": y_title,
|
|
268
|
+
"x_pos": x_pos,
|
|
269
|
+
"y_pos": y_pos,
|
|
270
|
+
"rotate_angle": rotate_angle - (1 / 2.0) * np.pi,
|
|
271
|
+
"fc": "black",
|
|
272
|
+
"ec": "black",
|
|
273
|
+
"invert_yaxis": invert_yaxis,
|
|
274
|
+
}
|
|
275
|
+
_plot_one_axis_def(plot, **kwargs)
|
|
276
|
+
|
|
277
|
+
x_title = r"$x_{\!cam}$"
|
|
278
|
+
y_title = r"$y_{\!cam}$"
|
|
279
|
+
x_pos, y_pos = (x_left + 0.15, 0.12)
|
|
280
|
+
kwargs = {
|
|
281
|
+
"x_title": x_title,
|
|
282
|
+
"y_title": y_title,
|
|
283
|
+
"x_pos": x_pos,
|
|
284
|
+
"y_pos": y_pos,
|
|
285
|
+
"rotate_angle": (3 / 2.0) * np.pi,
|
|
286
|
+
"fc": "blue",
|
|
287
|
+
"ec": "blue",
|
|
288
|
+
"invert_yaxis": invert_yaxis,
|
|
289
|
+
}
|
|
290
|
+
_plot_one_axis_def(plot, **kwargs)
|
|
291
|
+
|
|
292
|
+
x_title = "Alt"
|
|
293
|
+
y_title = "Az"
|
|
294
|
+
x_pos, y_pos = (x_left + 0.15, 0.25)
|
|
295
|
+
kwargs = {
|
|
296
|
+
"x_title": x_title,
|
|
297
|
+
"y_title": y_title,
|
|
298
|
+
"x_pos": x_pos,
|
|
299
|
+
"y_pos": y_pos,
|
|
300
|
+
"rotate_angle": (3 / 2.0) * np.pi,
|
|
301
|
+
"fc": "red",
|
|
302
|
+
"ec": "red",
|
|
303
|
+
"invert_yaxis": invert_yaxis,
|
|
304
|
+
}
|
|
305
|
+
_plot_one_axis_def(plot, **kwargs)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def _plot_one_axis_def(plot, **kwargs):
|
|
309
|
+
"""
|
|
310
|
+
Plot an axis on the pyplot.plt instance provided.
|
|
311
|
+
|
|
312
|
+
Parameters
|
|
313
|
+
----------
|
|
314
|
+
plot: pyplot.plt instance
|
|
315
|
+
A pyplot.plt instance where to add the axes definitions.
|
|
316
|
+
**kwargs: dict
|
|
317
|
+
x_title: str
|
|
318
|
+
x-axis title
|
|
319
|
+
y_title: str
|
|
320
|
+
y-axis title,
|
|
321
|
+
x_pos: float
|
|
322
|
+
x position of the axis to draw
|
|
323
|
+
y_pos: float
|
|
324
|
+
y position of the axis to draw
|
|
325
|
+
rotate_angle: float
|
|
326
|
+
rotation angle of the axis in radians
|
|
327
|
+
fc: str
|
|
328
|
+
face colour of the axis
|
|
329
|
+
ec: str
|
|
330
|
+
edge colour of the axis
|
|
331
|
+
invert_yaxis: bool
|
|
332
|
+
Flag to invert the y-axis (for dual mirror telescopes).
|
|
333
|
+
"""
|
|
334
|
+
x_title = kwargs["x_title"]
|
|
335
|
+
y_title = kwargs["y_title"]
|
|
336
|
+
x_pos, y_pos = (kwargs["x_pos"], kwargs["y_pos"])
|
|
337
|
+
|
|
338
|
+
r = 0.1 # size of arrow
|
|
339
|
+
sign = 1.0
|
|
340
|
+
if kwargs["invert_yaxis"]:
|
|
341
|
+
sign *= -1.0
|
|
342
|
+
x_text1 = x_pos + sign * r * np.cos(kwargs["rotate_angle"])
|
|
343
|
+
y_text1 = y_pos + r * np.sin(0 + kwargs["rotate_angle"])
|
|
344
|
+
x_text2 = x_pos + sign * r * np.cos(np.pi / 2.0 + kwargs["rotate_angle"])
|
|
345
|
+
y_text2 = y_pos + r * np.sin(np.pi / 2.0 + kwargs["rotate_angle"])
|
|
346
|
+
|
|
347
|
+
plot.gca().annotate(
|
|
348
|
+
x_title,
|
|
349
|
+
xy=(x_pos, y_pos),
|
|
350
|
+
xytext=(x_text1, y_text1),
|
|
351
|
+
xycoords="axes fraction",
|
|
352
|
+
ha="center",
|
|
353
|
+
va="center",
|
|
354
|
+
size="xx-large",
|
|
355
|
+
arrowprops={
|
|
356
|
+
"arrowstyle": "<|-",
|
|
357
|
+
"shrinkA": 0,
|
|
358
|
+
"shrinkB": 0,
|
|
359
|
+
"fc": kwargs["fc"],
|
|
360
|
+
"ec": kwargs["ec"],
|
|
361
|
+
},
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
plot.gca().annotate(
|
|
365
|
+
y_title,
|
|
366
|
+
xy=(x_pos, y_pos),
|
|
367
|
+
xytext=(x_text2, y_text2),
|
|
368
|
+
xycoords="axes fraction",
|
|
369
|
+
ha="center",
|
|
370
|
+
va="center",
|
|
371
|
+
size="xx-large",
|
|
372
|
+
arrowprops={
|
|
373
|
+
"arrowstyle": "<|-",
|
|
374
|
+
"shrinkA": 0,
|
|
375
|
+
"shrinkB": 0,
|
|
376
|
+
"fc": kwargs["fc"],
|
|
377
|
+
"ec": kwargs["ec"],
|
|
378
|
+
},
|
|
379
|
+
)
|