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.
Files changed (355) hide show
  1. gammasimtools-0.8.2.dist-info/METADATA +173 -0
  2. gammasimtools-0.8.2.dist-info/RECORD +345 -0
  3. {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/WHEEL +1 -1
  4. gammasimtools-0.8.2.dist-info/entry_points.txt +31 -0
  5. simtools/_dev_version/__init__.py +9 -0
  6. simtools/_version.py +2 -2
  7. simtools/applications/calculate_trigger_rate.py +210 -0
  8. simtools/applications/convert_all_model_parameters_from_simtel.py +372 -0
  9. simtools/applications/{print_array_elements.py → convert_geo_coordinates_of_array_elements.py} +58 -63
  10. simtools/applications/convert_model_parameter_from_simtel.py +119 -0
  11. simtools/applications/{add_file_to_db.py → db_add_file_to_db.py} +70 -60
  12. simtools/applications/db_add_model_parameters_from_repository_to_db.py +184 -0
  13. simtools/applications/db_add_value_from_json_to_db.py +105 -0
  14. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +180 -0
  15. simtools/applications/db_get_array_layouts_from_db.py +162 -0
  16. simtools/applications/{get_file_from_db.py → db_get_file_from_db.py} +30 -34
  17. simtools/applications/db_get_parameter_from_db.py +131 -0
  18. simtools/applications/db_inspect_databases.py +52 -0
  19. simtools/applications/derive_mirror_rnda.py +39 -255
  20. simtools/applications/derive_psf_parameters.py +441 -0
  21. simtools/applications/generate_array_config.py +82 -0
  22. simtools/applications/generate_corsika_histograms.py +52 -52
  23. simtools/applications/generate_default_metadata.py +5 -8
  24. simtools/applications/generate_regular_arrays.py +117 -0
  25. simtools/applications/generate_simtel_array_histograms.py +97 -56
  26. simtools/applications/plot_array_layout.py +345 -115
  27. simtools/applications/production_generate_simulation_config.py +158 -0
  28. simtools/applications/production_scale_events.py +168 -0
  29. simtools/applications/simulate_light_emission.py +478 -0
  30. simtools/applications/simulate_prod.py +97 -175
  31. simtools/applications/submit_data_from_external.py +9 -12
  32. simtools/applications/submit_model_parameter_from_external.py +122 -0
  33. simtools/applications/validate_camera_efficiency.py +35 -102
  34. simtools/applications/validate_camera_fov.py +20 -19
  35. simtools/applications/{compare_cumulative_psf.py → validate_cumulative_psf.py} +45 -44
  36. simtools/applications/validate_file_using_schema.py +111 -47
  37. simtools/applications/validate_optics.py +17 -22
  38. simtools/camera_efficiency.py +193 -202
  39. simtools/configuration/commandline_parser.py +384 -96
  40. simtools/configuration/configurator.py +55 -71
  41. simtools/constants.py +5 -5
  42. simtools/corsika/corsika_config.py +482 -342
  43. simtools/corsika/corsika_histograms.py +226 -204
  44. simtools/corsika/corsika_histograms_visualize.py +23 -24
  45. simtools/corsika/primary_particle.py +159 -0
  46. simtools/data_model/data_reader.py +25 -20
  47. simtools/data_model/format_checkers.py +52 -0
  48. simtools/data_model/metadata_collector.py +211 -185
  49. simtools/data_model/metadata_model.py +115 -37
  50. simtools/data_model/model_data_writer.py +335 -26
  51. simtools/data_model/validate_data.py +366 -154
  52. simtools/db/db_array_elements.py +130 -0
  53. simtools/db/db_from_repo_handler.py +106 -0
  54. simtools/db/db_handler.py +1246 -0
  55. simtools/io_operations/hdf5_handler.py +3 -1
  56. simtools/io_operations/io_handler.py +32 -57
  57. simtools/job_execution/job_manager.py +82 -69
  58. simtools/layout/array_layout.py +325 -537
  59. simtools/layout/geo_coordinates.py +8 -11
  60. simtools/layout/telescope_position.py +163 -86
  61. simtools/model/array_model.py +312 -259
  62. simtools/model/calibration_model.py +50 -0
  63. simtools/model/camera.py +277 -523
  64. simtools/model/mirrors.py +68 -49
  65. simtools/model/model_parameter.py +602 -0
  66. simtools/model/model_utils.py +11 -39
  67. simtools/model/site_model.py +161 -0
  68. simtools/model/telescope_model.py +143 -633
  69. simtools/production_configuration/calculate_statistical_errors_grid_point.py +454 -0
  70. simtools/production_configuration/event_scaler.py +146 -0
  71. simtools/production_configuration/generate_simulation_config.py +193 -0
  72. simtools/production_configuration/interpolation_handler.py +197 -0
  73. simtools/ray_tracing/__init__.py +0 -0
  74. simtools/ray_tracing/mirror_panel_psf.py +280 -0
  75. simtools/{psf_analysis.py → ray_tracing/psf_analysis.py} +133 -47
  76. simtools/ray_tracing/ray_tracing.py +646 -0
  77. simtools/runners/__init__.py +0 -0
  78. simtools/runners/corsika_runner.py +240 -0
  79. simtools/runners/corsika_simtel_runner.py +225 -0
  80. simtools/runners/runner_services.py +307 -0
  81. simtools/runners/simtel_runner.py +224 -0
  82. simtools/schemas/array_elements.yml +137 -0
  83. simtools/schemas/integration_tests_config.metaschema.yml +93 -0
  84. simtools/schemas/metadata.metaschema.yml +6 -0
  85. simtools/schemas/model_parameter.metaschema.yml +78 -0
  86. simtools/schemas/{data.metaschema.yml → model_parameter_and_data_schema.metaschema.yml} +27 -44
  87. simtools/schemas/model_parameters/adjust_gain.schema.yml +37 -0
  88. simtools/schemas/model_parameters/altitude.schema.yml +37 -0
  89. simtools/schemas/model_parameters/array_coordinates.schema.yml +33 -0
  90. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +77 -0
  91. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +39 -0
  92. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +39 -0
  93. simtools/schemas/model_parameters/array_layouts.schema.yml +48 -0
  94. simtools/schemas/model_parameters/array_triggers.schema.yml +93 -0
  95. simtools/schemas/model_parameters/asum_clipping.schema.yml +38 -0
  96. simtools/schemas/model_parameters/asum_offset.schema.yml +35 -0
  97. simtools/schemas/model_parameters/asum_shaping.schema.yml +35 -0
  98. simtools/schemas/model_parameters/asum_threshold.schema.yml +38 -0
  99. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +32 -0
  100. simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +35 -0
  101. simtools/schemas/model_parameters/axes_offsets.schema.yml +53 -0
  102. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +40 -0
  103. simtools/schemas/model_parameters/camera_body_shape.schema.yml +45 -0
  104. simtools/schemas/model_parameters/camera_config_file.schema.yml +40 -0
  105. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +36 -0
  106. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +43 -0
  107. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +42 -0
  108. simtools/schemas/model_parameters/camera_depth.schema.yml +42 -0
  109. simtools/schemas/model_parameters/camera_filter.schema.yml +45 -0
  110. simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +29 -0
  111. simtools/schemas/model_parameters/camera_pixels.schema.yml +36 -0
  112. simtools/schemas/model_parameters/camera_transmission.schema.yml +41 -0
  113. simtools/schemas/model_parameters/channels_per_chip.schema.yml +36 -0
  114. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +35 -0
  115. simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +27 -0
  116. simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +38 -0
  117. simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +28 -0
  118. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +23 -0
  119. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +27 -0
  120. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +28 -0
  121. simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +27 -0
  122. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +38 -0
  123. simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +52 -0
  124. simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +27 -0
  125. simtools/schemas/model_parameters/dark_events.schema.yml +32 -0
  126. simtools/schemas/model_parameters/default_trigger.schema.yml +35 -0
  127. simtools/schemas/model_parameters/design_model.schema.yml +31 -0
  128. simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +32 -0
  129. simtools/schemas/model_parameters/disc_bins.schema.yml +39 -0
  130. simtools/schemas/model_parameters/disc_start.schema.yml +41 -0
  131. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +42 -0
  132. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +41 -0
  133. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +41 -0
  134. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +39 -0
  135. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +40 -0
  136. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +41 -0
  137. simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +33 -0
  138. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +42 -0
  139. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +37 -0
  140. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +44 -0
  141. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +36 -0
  142. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +45 -0
  143. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +40 -0
  144. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +41 -0
  145. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +38 -0
  146. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +38 -0
  147. simtools/schemas/model_parameters/dish_shape_length.schema.yml +41 -0
  148. simtools/schemas/model_parameters/dsum_clipping.schema.yml +38 -0
  149. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +38 -0
  150. simtools/schemas/model_parameters/dsum_offset.schema.yml +37 -0
  151. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +33 -0
  152. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +39 -0
  153. simtools/schemas/model_parameters/dsum_prescale.schema.yml +44 -0
  154. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +38 -0
  155. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +45 -0
  156. simtools/schemas/model_parameters/dsum_shaping.schema.yml +44 -0
  157. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +32 -0
  158. simtools/schemas/model_parameters/dsum_threshold.schema.yml +43 -0
  159. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +42 -0
  160. simtools/schemas/model_parameters/effective_focal_length.schema.yml +61 -0
  161. simtools/schemas/model_parameters/epsg_code.schema.yml +37 -0
  162. simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +35 -0
  163. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +46 -0
  164. simtools/schemas/model_parameters/fadc_bins.schema.yml +40 -0
  165. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +50 -0
  166. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +38 -0
  167. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +42 -0
  168. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +49 -0
  169. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +47 -0
  170. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +51 -0
  171. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +37 -0
  172. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +43 -0
  173. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +49 -0
  174. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +43 -0
  175. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +39 -0
  176. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +42 -0
  177. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +40 -0
  178. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +50 -0
  179. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +42 -0
  180. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +41 -0
  181. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +42 -0
  182. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +43 -0
  183. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +39 -0
  184. simtools/schemas/model_parameters/fadc_mhz.schema.yml +31 -0
  185. simtools/schemas/model_parameters/fadc_noise.schema.yml +41 -0
  186. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +40 -0
  187. simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +39 -0
  188. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +50 -0
  189. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +43 -0
  190. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +43 -0
  191. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +42 -0
  192. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +41 -0
  193. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +42 -0
  194. simtools/schemas/model_parameters/flatfielding.schema.yml +37 -0
  195. simtools/schemas/model_parameters/focal_length.schema.yml +45 -0
  196. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +158 -0
  197. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +29 -0
  198. simtools/schemas/model_parameters/focus_offset.schema.yml +66 -0
  199. simtools/schemas/model_parameters/gain_variation.schema.yml +43 -0
  200. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +34 -0
  201. simtools/schemas/model_parameters/geomag_rotation.schema.yml +37 -0
  202. simtools/schemas/model_parameters/geomag_vertical.schema.yml +34 -0
  203. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +36 -0
  204. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +34 -0
  205. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +34 -0
  206. simtools/schemas/model_parameters/laser_events.schema.yml +36 -0
  207. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +35 -0
  208. simtools/schemas/model_parameters/laser_photons.schema.yml +32 -0
  209. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +34 -0
  210. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +34 -0
  211. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +33 -0
  212. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +33 -0
  213. simtools/schemas/model_parameters/laser_var_photons.schema.yml +33 -0
  214. simtools/schemas/model_parameters/laser_wavelength.schema.yml +33 -0
  215. simtools/schemas/model_parameters/led_events.schema.yml +34 -0
  216. simtools/schemas/model_parameters/led_photons.schema.yml +34 -0
  217. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +32 -0
  218. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +33 -0
  219. simtools/schemas/model_parameters/led_var_photons.schema.yml +34 -0
  220. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +41 -0
  221. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +43 -0
  222. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +35 -0
  223. simtools/schemas/model_parameters/min_photons.schema.yml +32 -0
  224. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +36 -0
  225. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +64 -0
  226. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +64 -0
  227. simtools/schemas/model_parameters/mirror_class.schema.yml +41 -0
  228. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +51 -0
  229. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +42 -0
  230. simtools/schemas/model_parameters/mirror_list.schema.yml +38 -0
  231. simtools/schemas/model_parameters/mirror_offset.schema.yml +41 -0
  232. simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +39 -0
  233. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +61 -0
  234. simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +40 -0
  235. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +46 -0
  236. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +51 -0
  237. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +37 -0
  238. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +79 -0
  239. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +47 -0
  240. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +34 -0
  241. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +33 -0
  242. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +35 -0
  243. simtools/schemas/model_parameters/nsb_skymap.schema.yml +39 -0
  244. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +50 -0
  245. simtools/schemas/model_parameters/num_gains.schema.yml +34 -0
  246. simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +33 -0
  247. simtools/schemas/model_parameters/optics_properties.schema.yml +31 -0
  248. simtools/schemas/model_parameters/parabolic_dish.schema.yml +32 -0
  249. simtools/schemas/model_parameters/pedestal_events.schema.yml +32 -0
  250. simtools/schemas/model_parameters/photon_delay.schema.yml +38 -0
  251. simtools/schemas/model_parameters/photons_per_run.schema.yml +33 -0
  252. simtools/schemas/model_parameters/pixel_cells.schema.yml +35 -0
  253. simtools/schemas/model_parameters/pixels_parallel.schema.yml +54 -0
  254. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +40 -0
  255. simtools/schemas/model_parameters/pm_average_gain.schema.yml +34 -0
  256. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +40 -0
  257. simtools/schemas/model_parameters/pm_gain_index.schema.yml +36 -0
  258. simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +41 -0
  259. simtools/schemas/model_parameters/pm_transit_time.schema.yml +63 -0
  260. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +39 -0
  261. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +42 -0
  262. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +33 -0
  263. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +33 -0
  264. simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +29 -0
  265. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +168 -0
  266. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +36 -0
  267. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +34 -0
  268. simtools/schemas/model_parameters/qe_variation.schema.yml +43 -0
  269. simtools/schemas/model_parameters/quantum_efficiency.schema.yml +42 -0
  270. simtools/schemas/model_parameters/random_focal_length.schema.yml +45 -0
  271. simtools/schemas/model_parameters/random_generator.schema.yml +36 -0
  272. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +35 -0
  273. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +36 -0
  274. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +36 -0
  275. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +34 -0
  276. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +34 -0
  277. simtools/schemas/model_parameters/sampled_output.schema.yml +31 -0
  278. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +34 -0
  279. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +79 -0
  280. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +42 -0
  281. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +41 -0
  282. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +33 -0
  283. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +36 -0
  284. simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +29 -0
  285. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +168 -0
  286. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +36 -0
  287. simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +35 -0
  288. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +37 -0
  289. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +40 -0
  290. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +40 -0
  291. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +41 -0
  292. simtools/schemas/model_parameters/tailcut_scale.schema.yml +40 -0
  293. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +31 -0
  294. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +35 -0
  295. simtools/schemas/model_parameters/telescope_random_error.schema.yml +34 -0
  296. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +37 -0
  297. simtools/schemas/model_parameters/telescope_transmission.schema.yml +113 -0
  298. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +41 -0
  299. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +36 -0
  300. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +36 -0
  301. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +37 -0
  302. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +38 -0
  303. simtools/schemas/model_parameters/transit_time_error.schema.yml +45 -0
  304. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +36 -0
  305. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +32 -0
  306. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +53 -0
  307. simtools/schemas/model_parameters/trigger_pixels.schema.yml +40 -0
  308. simtools/simtel/simtel_config_reader.py +353 -0
  309. simtools/simtel/simtel_config_writer.py +244 -63
  310. simtools/simtel/{simtel_events.py → simtel_io_events.py} +26 -25
  311. simtools/simtel/simtel_io_histogram.py +661 -0
  312. simtools/simtel/simtel_io_histograms.py +569 -0
  313. simtools/simtel/simulator_array.py +145 -0
  314. simtools/simtel/{simtel_runner_camera_efficiency.py → simulator_camera_efficiency.py} +76 -52
  315. simtools/simtel/simulator_light_emission.py +473 -0
  316. simtools/simtel/simulator_ray_tracing.py +262 -0
  317. simtools/simulator.py +220 -446
  318. simtools/testing/__init__.py +0 -0
  319. simtools/testing/assertions.py +151 -0
  320. simtools/testing/configuration.py +226 -0
  321. simtools/testing/helpers.py +42 -0
  322. simtools/testing/validate_output.py +240 -0
  323. simtools/utils/general.py +340 -437
  324. simtools/utils/geometry.py +12 -12
  325. simtools/utils/names.py +257 -644
  326. simtools/utils/value_conversion.py +176 -0
  327. simtools/version.py +3 -1
  328. simtools/visualization/legend_handlers.py +135 -152
  329. simtools/visualization/plot_camera.py +379 -0
  330. simtools/visualization/visualize.py +346 -167
  331. gammasimtools-0.6.1.dist-info/METADATA +0 -180
  332. gammasimtools-0.6.1.dist-info/RECORD +0 -91
  333. gammasimtools-0.6.1.dist-info/entry_points.txt +0 -23
  334. simtools/_dev_version/scm_version.py +0 -10
  335. simtools/applications/db_development_tools/add_new_parameter_to_db.py +0 -81
  336. simtools/applications/db_development_tools/add_unit_to_parameter_in_db.py +0 -59
  337. simtools/applications/db_development_tools/mark_non_optics_parameters_non_applicable.py +0 -102
  338. simtools/applications/get_parameter.py +0 -92
  339. simtools/applications/make_regular_arrays.py +0 -160
  340. simtools/applications/produce_array_config.py +0 -136
  341. simtools/applications/production.py +0 -313
  342. simtools/applications/sim_showers_for_trigger_rates.py +0 -187
  343. simtools/applications/tune_psf.py +0 -334
  344. simtools/corsika/corsika_default_config.py +0 -282
  345. simtools/corsika/corsika_runner.py +0 -450
  346. simtools/corsika_simtel/corsika_simtel_runner.py +0 -197
  347. simtools/db_handler.py +0 -1480
  348. simtools/ray_tracing.py +0 -525
  349. simtools/simtel/simtel_histograms.py +0 -414
  350. simtools/simtel/simtel_runner.py +0 -244
  351. simtools/simtel/simtel_runner_array.py +0 -293
  352. simtools/simtel/simtel_runner_ray_tracing.py +0 -277
  353. {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/LICENSE +0 -0
  354. {gammasimtools-0.6.1.dist-info → gammasimtools-0.8.2.dist-info}/top_level.txt +0 -0
  355. /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