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,240 @@
1
+ """Generate run scripts and directories for CORSIKA simulations."""
2
+
3
+ import logging
4
+ import os
5
+ from pathlib import Path
6
+
7
+ from simtools.io_operations import io_handler
8
+ from simtools.runners.runner_services import RunnerServices
9
+
10
+ __all__ = ["CorsikaRunner", "MissingRequiredEntryInCorsikaConfigError"]
11
+
12
+
13
+ class MissingRequiredEntryInCorsikaConfigError(Exception):
14
+ """Exception for missing required entry in corsika config."""
15
+
16
+
17
+ class CorsikaRunner:
18
+ """
19
+ Generate run scripts and directories for CORSIKA simulations. Run simulations if requested.
20
+
21
+ CorsikaRunner is responsible for configuring and running CORSIKA, using corsika_autoinputs
22
+ provided by the sim_telarray package. CorsikaRunner generates shell scripts to be run
23
+ externally or by the simulator module simulator.
24
+
25
+ CorsikaRunner is configured through a CorsikaConfig instance.
26
+
27
+ Parameters
28
+ ----------
29
+ corsika_config_data: CorsikaConfig
30
+ CORSIKA configuration.
31
+ simtel_path: str or Path
32
+ Location of source of the sim_telarray/CORSIKA package.
33
+ label: str
34
+ Instance label.
35
+ keep_seeds: bool
36
+ Use seeds based on run number and primary particle. If False, use sim_telarray seeds.
37
+ use_multipipe: bool
38
+ Use multipipe to run CORSIKA and sim_telarray.
39
+ """
40
+
41
+ def __init__(
42
+ self,
43
+ corsika_config,
44
+ simtel_path,
45
+ label=None,
46
+ keep_seeds=False,
47
+ use_multipipe=False,
48
+ ):
49
+ """Initialize CorsikaRunner."""
50
+ self._logger = logging.getLogger(__name__)
51
+ self._logger.debug("Init CorsikaRunner")
52
+ self.label = label
53
+
54
+ self.corsika_config = corsika_config
55
+ self._keep_seeds = keep_seeds
56
+ self._use_multipipe = use_multipipe
57
+
58
+ self._simtel_path = Path(simtel_path)
59
+ self.io_handler = io_handler.IOHandler()
60
+
61
+ self.runner_service = RunnerServices(corsika_config, label)
62
+ self._directory = self.runner_service.load_data_directories("corsika")
63
+
64
+ def prepare_run_script(
65
+ self, run_number=None, extra_commands=None, input_file=None, use_pfp=True
66
+ ):
67
+ """
68
+ Get the full path of the run script file for a given run number.
69
+
70
+ Parameters
71
+ ----------
72
+ use_pfp: bool
73
+ Whether to use the preprocessor in preparing the CORSIKA input file
74
+ run_number: int
75
+ Run number.
76
+ extra_commands: str
77
+ Additional commands for running simulations.
78
+
79
+ Returns
80
+ -------
81
+ Path:
82
+ Full path of the run script file.
83
+ """
84
+ if input_file is not None:
85
+ self._logger.warning(
86
+ "input_file parameter is not used in CorsikaRunner.prepare_run_script"
87
+ )
88
+ self.corsika_config.run_number = run_number
89
+
90
+ script_file_path = self.get_file_name(
91
+ file_type="sub_script", run_number=self.corsika_config.run_number
92
+ )
93
+ corsika_input_file = self.corsika_config.generate_corsika_input_file(
94
+ use_multipipe=self._use_multipipe, use_test_seeds=self._keep_seeds
95
+ )
96
+
97
+ # CORSIKA input file for a specific run, created by the preprocessor pfp
98
+ corsika_input_tmp_name = self.corsika_config.get_corsika_config_file_name(
99
+ file_type="config_tmp", run_number=self.corsika_config.run_number
100
+ )
101
+ corsika_input_tmp_file = self._directory["inputs"].joinpath(corsika_input_tmp_name)
102
+
103
+ if use_pfp:
104
+ pfp_command = self._get_pfp_command(corsika_input_tmp_file, corsika_input_file)
105
+ autoinputs_command = self._get_autoinputs_command(
106
+ self.corsika_config.run_number, corsika_input_tmp_file
107
+ )
108
+
109
+ self._logger.debug(f"Extra commands to be added to the run script: {extra_commands}")
110
+ self._logger.debug(f"CORSIKA data will be set to {self._directory['data']}")
111
+
112
+ with open(script_file_path, "w", encoding="utf-8") as file:
113
+ file.write("#!/usr/bin/env bash\n")
114
+ file.write("set -e\n")
115
+ file.write("set -o pipefail\n")
116
+
117
+ # Setting SECONDS variable to measure runtime
118
+ file.write("\nSECONDS=0\n")
119
+
120
+ if extra_commands is not None:
121
+ file.write("\n# Writing extras\n")
122
+ file.write(f"{extra_commands}\n")
123
+ file.write("# End of extras\n\n")
124
+
125
+ file.write(f"export CORSIKA_DATA={self._directory['data']}\n")
126
+ file.write('mkdir -p "$CORSIKA_DATA"\n')
127
+ file.write('cd "$CORSIKA_DATA" || exit 2\n')
128
+ if use_pfp:
129
+ file.write("\n# Running pfp\n")
130
+ file.write(pfp_command)
131
+ file.write("\n# Replacing the XXXXXX placeholder with the run number\n")
132
+ file.write(
133
+ f"sed -i 's/XXXXXX/{self.corsika_config.run_number:06}/g' "
134
+ f"{corsika_input_tmp_file}\n"
135
+ )
136
+ else:
137
+ file.write("\n# Copying CORSIKA input file to run location\n")
138
+ file.write(f"cp {corsika_input_file} {corsika_input_tmp_file}")
139
+ file.write("\n# Running corsika_autoinputs\n")
140
+ file.write(autoinputs_command)
141
+
142
+ file.write('\necho "RUNTIME: $SECONDS"\n')
143
+
144
+ os.system(f"chmod ug+x {script_file_path}")
145
+
146
+ return script_file_path
147
+
148
+ def get_resources(self, run_number=None):
149
+ """Return computing resources used."""
150
+ return self.runner_service.get_resources(run_number)
151
+
152
+ def _get_pfp_command(self, input_tmp_file, corsika_input_file):
153
+ """
154
+ Get pfp pre-processor command.
155
+
156
+ pfp is a pre-processor tool and part of sim_telarray.
157
+
158
+ Parameters
159
+ ----------
160
+ input_tmp_file: Path
161
+ Temporary input file.
162
+
163
+ Returns
164
+ -------
165
+ str
166
+ pfp command.
167
+ """
168
+ cmd = self._simtel_path.joinpath("sim_telarray/bin/pfp")
169
+ cmd = str(cmd) + f" -V -DWITHOUT_MULTIPIPE - < {corsika_input_file}"
170
+ cmd += f" > {input_tmp_file} || exit\n"
171
+ return cmd
172
+
173
+ def _get_autoinputs_command(self, run_number, input_tmp_file):
174
+ """
175
+ Get autoinputs command.
176
+
177
+ corsika_autoinputs is a tool to generate random and user/host dependent
178
+ parameters for CORSIKA configuration.
179
+
180
+ Parameters
181
+ ----------
182
+ run_number: int
183
+ Run number.
184
+ input_tmp_file: Path
185
+ Temporary input file.
186
+
187
+ Returns
188
+ -------
189
+ str
190
+ autoinputs command.
191
+ """
192
+ corsika_bin_path = self._simtel_path.joinpath("corsika-run/corsika")
193
+
194
+ log_file = self.get_file_name(file_type="log", run_number=run_number)
195
+ if self._use_multipipe:
196
+ log_file = log_file.with_name(f"multipipe_{log_file.name}")
197
+
198
+ cmd = self._simtel_path.joinpath("sim_telarray/bin/corsika_autoinputs")
199
+ cmd = str(cmd) + f" --run {corsika_bin_path}"
200
+ cmd += f" -R {run_number}"
201
+ cmd += ' -p "$CORSIKA_DATA"'
202
+ if self._keep_seeds:
203
+ logging.warning(
204
+ "Using --keep-seeds option in corsika_autoinputs is not recommended. "
205
+ "It should only be used for testing purposes."
206
+ )
207
+ cmd += " --keep-seeds"
208
+ cmd += f" {input_tmp_file} | gzip > {log_file} 2>&1"
209
+ cmd += " || exit 1\n"
210
+ return cmd
211
+
212
+ def get_file_name(
213
+ self, simulation_software="corsika", file_type=None, run_number=None, mode=""
214
+ ):
215
+ """
216
+ Get the full path of a file for a given run number.
217
+
218
+ Parameters
219
+ ----------
220
+ simulation_software: str
221
+ Simulation software.
222
+ file_type: str
223
+ File type.
224
+ run_number: int
225
+ Run number.
226
+
227
+ Returns
228
+ -------
229
+ str
230
+ File name with full path.
231
+ """
232
+ if simulation_software.lower() != "corsika":
233
+ raise ValueError(
234
+ f"simulation_software ({simulation_software}) is not supported in CorsikaRunner"
235
+ )
236
+ return self.runner_service.get_file_name(
237
+ file_type=file_type,
238
+ run_number=run_number,
239
+ mode=mode,
240
+ )
@@ -0,0 +1,225 @@
1
+ """Run simulations with CORSIKA and pipe it to sim_telarray using the multipipe functionality."""
2
+
3
+ import logging
4
+ import stat
5
+ from pathlib import Path
6
+
7
+ from simtools.runners.corsika_runner import CorsikaRunner
8
+ from simtools.simtel.simulator_array import SimulatorArray
9
+
10
+ __all__ = ["CorsikaSimtelRunner"]
11
+
12
+
13
+ class CorsikaSimtelRunner:
14
+ """
15
+ Run simulations with CORSIKA and pipe it to sim_telarray using the multipipe functionality.
16
+
17
+ Uses CorsikaConfig to manage the CORSIKA configuration and SimulatorArray
18
+ for the sim_telarray configuration.
19
+
20
+ Parameters
21
+ ----------
22
+ corsika_config : CorsikaConfig
23
+ Configuration parameters for CORSIKA.
24
+ simtel_path : str or Path
25
+ Location of the sim_telarray package.
26
+ label : str
27
+ Label.
28
+ keep_seeds : bool
29
+ Use seeds based on run number and primary particle. If False, use sim_telarray seeds.
30
+ use_multipipe : bool
31
+ Use multipipe to run CORSIKA and sim_telarray.
32
+ """
33
+
34
+ def __init__(
35
+ self,
36
+ corsika_config,
37
+ simtel_path,
38
+ label=None,
39
+ keep_seeds=False,
40
+ use_multipipe=False,
41
+ sim_telarray_seeds=None,
42
+ ):
43
+ self._logger = logging.getLogger(__name__)
44
+ self.corsika_config = corsika_config
45
+ self._simtel_path = simtel_path
46
+ self.sim_telarray_seeds = sim_telarray_seeds
47
+ self.label = label
48
+
49
+ self.corsika_config.set_output_file_and_directory(use_multipipe)
50
+ self.corsika_runner = CorsikaRunner(
51
+ corsika_config=corsika_config,
52
+ simtel_path=simtel_path,
53
+ label=label,
54
+ keep_seeds=keep_seeds,
55
+ use_multipipe=use_multipipe,
56
+ )
57
+ self.simulator_array = SimulatorArray(
58
+ corsika_config=corsika_config,
59
+ simtel_path=simtel_path,
60
+ label=label,
61
+ use_multipipe=use_multipipe,
62
+ sim_telarray_seeds=sim_telarray_seeds,
63
+ )
64
+
65
+ def prepare_run_script(
66
+ self, run_number=None, input_file=None, extra_commands=None, use_pfp=False
67
+ ):
68
+ """
69
+ Get the full path of the run script file for a given run number.
70
+
71
+ Parameters
72
+ ----------
73
+ run_number: int
74
+ Run number.
75
+ use_pfp: bool
76
+ Whether to use the preprocessor in preparing the CORSIKA input file
77
+
78
+ Returns
79
+ -------
80
+ Path:
81
+ Full path of the run script file.
82
+ """
83
+ self._export_multipipe_script(run_number)
84
+ return self.corsika_runner.prepare_run_script(
85
+ run_number=run_number,
86
+ input_file=input_file,
87
+ extra_commands=extra_commands,
88
+ use_pfp=use_pfp,
89
+ )
90
+
91
+ def _export_multipipe_script(self, run_number):
92
+ """
93
+ Write the multipipe script used in piping CORSIKA to sim_telarray.
94
+
95
+ Parameters
96
+ ----------
97
+ run_number: int
98
+ Run number.
99
+
100
+ Returns
101
+ -------
102
+ Path:
103
+ Full path of the run script file.
104
+ """
105
+ run_command = self._make_run_command(
106
+ run_number=run_number,
107
+ input_file="-", # instruct sim_telarray to take input from standard output
108
+ )
109
+ multipipe_file = Path(self.corsika_config.config_file_path.parent).joinpath(
110
+ self.corsika_config.get_corsika_config_file_name("multipipe")
111
+ )
112
+ with open(multipipe_file, "w", encoding="utf-8") as file:
113
+ file.write(f"{run_command}")
114
+ self._logger.info(f"Multipipe script: {multipipe_file}")
115
+ self._write_multipipe_script(multipipe_file)
116
+
117
+ def _write_multipipe_script(self, multipipe_file):
118
+ """
119
+ Write script used to call the multipipe_corsika command.
120
+
121
+ Parameters
122
+ ----------
123
+ multipipe_file: str or Path
124
+ The name of the multipipe file which contains all of the multipipe commands.
125
+ """
126
+ multipipe_script = Path(self.corsika_config.config_file_path.parent).joinpath(
127
+ "run_cta_multipipe"
128
+ )
129
+ with open(multipipe_script, "w", encoding="utf-8") as file:
130
+ multipipe_command = Path(self._simtel_path).joinpath(
131
+ "sim_telarray/bin/multipipe_corsika "
132
+ f"-c {multipipe_file}"
133
+ " || echo 'Fan-out failed'"
134
+ )
135
+ file.write(f"{multipipe_command}")
136
+
137
+ multipipe_script.chmod(multipipe_script.stat().st_mode | stat.S_IEXEC)
138
+
139
+ def _make_run_command(self, run_number=None, input_file=None):
140
+ """
141
+ Build and return the command to run simtel_array.
142
+
143
+ Parameters
144
+ ----------
145
+ run_number: int
146
+ Run number.
147
+ input_file: str
148
+ Full path of the input CORSIKA file.
149
+ Use '-' to tell sim_telarray to read from standard output
150
+
151
+ Returns
152
+ -------
153
+ str:
154
+ Command to run sim_telarray.
155
+ """
156
+ try:
157
+ weak_pointing = any(pointing in self.label for pointing in ["divergent", "convergent"])
158
+ except TypeError: # allow for self.label to be None
159
+ weak_pointing = False
160
+
161
+ command = str(self._simtel_path.joinpath("sim_telarray/bin/sim_telarray"))
162
+ command += f" -c {self.corsika_config.array_model.get_config_file()}"
163
+ command += f" -I{self.corsika_config.array_model.get_config_directory()}"
164
+ command += self.simulator_array.get_config_option(
165
+ "telescope_theta", self.corsika_config.zenith_angle, weak_option=weak_pointing
166
+ )
167
+ command += self.simulator_array.get_config_option(
168
+ "telescope_phi", self.corsika_config.azimuth_angle, weak_option=weak_pointing
169
+ )
170
+ command += self.simulator_array.get_config_option(
171
+ "power_law",
172
+ SimulatorArray.get_power_law_for_sim_telarray_histograms(
173
+ self.corsika_config.primary_particle
174
+ ),
175
+ )
176
+ command += self.simulator_array.get_config_option(
177
+ "histogram_file",
178
+ self.get_file_name(
179
+ simulation_software="simtel", file_type="histogram", run_number=run_number
180
+ ),
181
+ )
182
+ command += self.simulator_array.get_config_option("random_state", "none")
183
+ if self.sim_telarray_seeds:
184
+ command += self.simulator_array.get_config_option(
185
+ "random_seed", self.sim_telarray_seeds
186
+ )
187
+ command += self.simulator_array.get_config_option("show", "all")
188
+ command += self.simulator_array.get_config_option(
189
+ "output_file",
190
+ self.simulator_array.get_file_name(
191
+ simulation_software="simtel", file_type="output", run_number=run_number
192
+ ),
193
+ )
194
+ command += f" {input_file}"
195
+ _log_file = self.simulator_array.get_file_name(
196
+ simulation_software="simtel", file_type="log", run_number=run_number
197
+ )
198
+ command += f" | gzip > {_log_file} 2>&1 || exit"
199
+
200
+ return command
201
+
202
+ def get_file_name(self, simulation_software=None, file_type=None, run_number=None, mode=None):
203
+ """
204
+ Get the full path of a file for a given run number.
205
+
206
+ Parameters
207
+ ----------
208
+ simulation_software: str
209
+ Simulation software.
210
+ file_type: str
211
+ File type.
212
+ run_number: int
213
+ Run number.
214
+
215
+ Returns
216
+ -------
217
+ str
218
+ File name with full path.
219
+ """
220
+ if simulation_software is None:
221
+ # preference to simtel output (multipipe)
222
+ simulation_software = "simtel" if self.simulator_array else "corsika"
223
+
224
+ runner = self.corsika_runner if simulation_software == "corsika" else self.simulator_array
225
+ return runner.get_file_name(file_type=file_type, run_number=run_number, mode=mode)