gammasimtools 0.17.0__py3-none-any.whl → 0.19.0__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 (363) hide show
  1. {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/METADATA +27 -69
  2. gammasimtools-0.19.0.dist-info/RECORD +393 -0
  3. {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/entry_points.txt +10 -2
  4. {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/licenses/LICENSE +1 -1
  5. simtools/_version.py +16 -3
  6. simtools/applications/calculate_trigger_rate.py +1 -1
  7. simtools/applications/convert_all_model_parameters_from_simtel.py +4 -3
  8. simtools/applications/convert_geo_coordinates_of_array_elements.py +3 -3
  9. simtools/applications/db_add_simulation_model_from_repository_to_db.py +10 -1
  10. simtools/applications/db_add_value_from_json_to_db.py +2 -1
  11. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +8 -13
  12. simtools/applications/db_generate_compound_indexes.py +61 -0
  13. simtools/applications/db_get_file_from_db.py +1 -1
  14. simtools/applications/db_get_parameter_from_db.py +4 -4
  15. simtools/applications/db_inspect_databases.py +20 -10
  16. simtools/applications/derive_mirror_rnda.py +18 -12
  17. simtools/applications/derive_psf_parameters.py +59 -309
  18. simtools/applications/docs_produce_array_element_report.py +1 -1
  19. simtools/applications/docs_produce_calibration_reports.py +1 -1
  20. simtools/applications/docs_produce_model_parameter_reports.py +1 -1
  21. simtools/applications/docs_produce_simulation_configuration_report.py +1 -1
  22. simtools/applications/generate_corsika_histograms.py +1 -1
  23. simtools/applications/generate_default_metadata.py +8 -24
  24. simtools/applications/generate_sim_telarray_histograms.py +1 -1
  25. simtools/applications/generate_simtel_event_data.py +97 -5
  26. simtools/applications/maintain_simulation_model_add_production_table.py +71 -0
  27. simtools/applications/maintain_simulation_model_compare_productions.py +98 -0
  28. simtools/applications/{verify_simulation_model_production_tables.py → maintain_simulation_model_verify_production_tables.py} +9 -1
  29. simtools/applications/merge_tables.py +16 -18
  30. simtools/applications/plot_array_layout.py +3 -3
  31. simtools/applications/plot_simtel_events.py +379 -0
  32. simtools/applications/plot_tabular_data.py +21 -3
  33. simtools/applications/plot_tabular_data_for_model_parameter.py +104 -0
  34. simtools/applications/print_version.py +8 -9
  35. simtools/applications/production_derive_corsika_limits.py +64 -27
  36. simtools/applications/production_derive_statistics.py +1 -1
  37. simtools/applications/production_generate_grid.py +2 -2
  38. simtools/applications/production_merge_corsika_limits.py +214 -0
  39. simtools/applications/run_application.py +47 -113
  40. simtools/applications/simulate_calibration_events.py +166 -0
  41. simtools/applications/simulate_flasher.py +141 -0
  42. simtools/applications/{simulate_light_emission.py → simulate_illuminator.py} +35 -99
  43. simtools/applications/simulate_prod.py +6 -24
  44. simtools/applications/simulate_prod_htcondor_generator.py +7 -0
  45. simtools/applications/submit_array_layouts.py +2 -1
  46. simtools/applications/submit_model_parameter_from_external.py +1 -1
  47. simtools/applications/validate_camera_efficiency.py +30 -12
  48. simtools/applications/validate_camera_fov.py +1 -1
  49. simtools/applications/validate_cumulative_psf.py +1 -1
  50. simtools/applications/validate_file_using_schema.py +2 -1
  51. simtools/applications/validate_optics.py +1 -1
  52. simtools/camera/camera_efficiency.py +61 -45
  53. simtools/camera/single_photon_electron_spectrum.py +1 -1
  54. simtools/configuration/commandline_parser.py +31 -1
  55. simtools/configuration/configurator.py +4 -4
  56. simtools/constants.py +2 -0
  57. simtools/corsika/corsika_config.py +45 -25
  58. simtools/corsika/corsika_histograms.py +6 -5
  59. simtools/data_model/data_reader.py +2 -3
  60. simtools/data_model/metadata_collector.py +32 -36
  61. simtools/data_model/metadata_model.py +15 -12
  62. simtools/data_model/model_data_writer.py +13 -32
  63. simtools/data_model/schema.py +88 -24
  64. simtools/data_model/validate_data.py +34 -9
  65. simtools/db/db_handler.py +48 -37
  66. simtools/db/db_model_upload.py +3 -3
  67. simtools/dependencies.py +88 -25
  68. simtools/io/ascii_handler.py +279 -0
  69. simtools/{io_operations → io}/io_handler.py +25 -3
  70. simtools/{io_operations/io_table_handler.py → io/table_handler.py} +1 -1
  71. simtools/job_execution/htcondor_script_generator.py +15 -4
  72. simtools/layout/array_layout.py +1 -1
  73. simtools/layout/array_layout_utils.py +19 -8
  74. simtools/model/array_model.py +28 -5
  75. simtools/model/flasher_model.py +106 -0
  76. simtools/model/model_parameter.py +4 -4
  77. simtools/model/model_repository.py +197 -2
  78. simtools/model/telescope_model.py +3 -1
  79. simtools/production_configuration/derive_corsika_limits.py +361 -427
  80. simtools/production_configuration/derive_production_statistics_handler.py +7 -6
  81. simtools/production_configuration/generate_production_grid.py +9 -11
  82. simtools/production_configuration/merge_corsika_limits.py +528 -0
  83. simtools/ray_tracing/mirror_panel_psf.py +1 -0
  84. simtools/ray_tracing/psf_parameter_optimisation.py +792 -0
  85. simtools/ray_tracing/ray_tracing.py +6 -2
  86. simtools/reporting/docs_read_parameters.py +150 -62
  87. simtools/resources/array-element-ids.json +126 -0
  88. simtools/runners/corsika_runner.py +1 -1
  89. simtools/runners/corsika_simtel_runner.py +14 -5
  90. simtools/runners/runner_services.py +10 -5
  91. simtools/runners/simtools_runner.py +267 -0
  92. simtools/schemas/application_workflow.metaschema.yml +101 -68
  93. simtools/schemas/input/MST_mirror_2f_measurements.schema.yml +1 -1
  94. simtools/schemas/input/single_pe_spectrum.schema.yml +1 -1
  95. simtools/schemas/metadata.metaschema.yml +577 -3
  96. simtools/schemas/model_parameter.metaschema.yml +6 -6
  97. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +7 -3
  98. simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
  99. simtools/schemas/model_parameters/altitude.schema.yml +1 -1
  100. simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
  101. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +1 -1
  102. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +1 -1
  103. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
  104. simtools/schemas/model_parameters/array_layouts.schema.yml +1 -1
  105. simtools/schemas/model_parameters/array_triggers.schema.yml +1 -1
  106. simtools/schemas/model_parameters/array_window.schema.yml +1 -1
  107. simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
  108. simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
  109. simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
  110. simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
  111. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +42 -1
  112. simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +44 -1
  113. simtools/schemas/model_parameters/axes_offsets.schema.yml +1 -1
  114. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
  115. simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
  116. simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
  117. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
  118. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
  119. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
  120. simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
  121. simtools/schemas/model_parameters/camera_filter.schema.yml +11 -1
  122. simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +11 -1
  123. simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
  124. simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
  125. simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
  126. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
  127. simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +1 -1
  128. simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +1 -1
  129. simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +1 -1
  130. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
  131. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
  132. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
  133. simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +1 -1
  134. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
  135. simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +1 -1
  136. simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +3 -3
  137. simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
  138. simtools/schemas/model_parameters/default_trigger.schema.yml +1 -1
  139. simtools/schemas/model_parameters/design_model.schema.yml +1 -1
  140. simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +1 -1
  141. simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
  142. simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
  143. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
  144. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
  145. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
  146. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
  147. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
  148. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
  149. simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +32 -1
  150. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
  151. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
  152. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
  153. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
  154. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
  155. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
  156. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
  157. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
  158. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
  159. simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
  160. simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
  161. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
  162. simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
  163. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +1 -1
  164. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
  165. simtools/schemas/model_parameters/dsum_prescale.schema.yml +1 -1
  166. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
  167. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
  168. simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
  169. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +1 -1
  170. simtools/schemas/model_parameters/dsum_threshold.schema.yml +2 -2
  171. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
  172. simtools/schemas/model_parameters/effective_focal_length.schema.yml +1 -1
  173. simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
  174. simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +1 -1
  175. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
  176. simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
  177. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
  178. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
  179. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
  180. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
  181. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
  182. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
  183. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
  184. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
  185. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
  186. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
  187. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +1 -1
  188. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
  189. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
  190. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
  191. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
  192. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
  193. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
  194. simtools/schemas/model_parameters/fadc_long_event_threshold.schema.yml +35 -0
  195. simtools/schemas/model_parameters/fadc_long_sum_bins.schema.yml +41 -0
  196. simtools/schemas/model_parameters/fadc_long_sum_offset.schema.yml +38 -0
  197. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
  198. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +1 -1
  199. simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
  200. simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
  201. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
  202. simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +13 -1
  203. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
  204. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
  205. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
  206. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
  207. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
  208. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
  209. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
  210. simtools/schemas/model_parameters/flatfielding.schema.yml +1 -1
  211. simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
  212. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +1 -1
  213. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
  214. simtools/schemas/model_parameters/focus_offset.schema.yml +1 -1
  215. simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
  216. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
  217. simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
  218. simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
  219. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
  220. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
  221. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
  222. simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
  223. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
  224. simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
  225. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
  226. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
  227. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
  228. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
  229. simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
  230. simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
  231. simtools/schemas/model_parameters/led_events.schema.yml +1 -1
  232. simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
  233. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
  234. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
  235. simtools/schemas/model_parameters/led_var_photons.schema.yml +1 -1
  236. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +11 -1
  237. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +50 -1
  238. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
  239. simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
  240. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
  241. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +1 -1
  242. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +1 -1
  243. simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
  244. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
  245. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
  246. simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
  247. simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
  248. simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +1 -1
  249. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +1 -1
  250. simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +11 -1
  251. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
  252. simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +1 -1
  253. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +1 -1
  254. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
  255. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +1 -1
  256. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
  257. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +13 -1
  258. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
  259. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
  260. simtools/schemas/model_parameters/nsb_sky_map.schema.yml +1 -1
  261. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +1 -1
  262. simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
  263. simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +1 -1
  264. simtools/schemas/model_parameters/optics_properties.schema.yml +1 -1
  265. simtools/schemas/model_parameters/parabolic_dish.schema.yml +1 -1
  266. simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
  267. simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
  268. simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
  269. simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
  270. simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
  271. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
  272. simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
  273. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
  274. simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
  275. simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +20 -1
  276. simtools/schemas/model_parameters/pm_transit_time.schema.yml +1 -1
  277. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
  278. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
  279. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
  280. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
  281. simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +11 -1
  282. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +1 -1
  283. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
  284. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
  285. simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
  286. simtools/schemas/model_parameters/quantum_efficiency.schema.yml +11 -1
  287. simtools/schemas/model_parameters/random_focal_length.schema.yml +1 -1
  288. simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
  289. simtools/schemas/model_parameters/random_mono_probability.schema.yml +1 -1
  290. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
  291. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +1 -1
  292. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +1 -1
  293. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
  294. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
  295. simtools/schemas/model_parameters/sampled_output.schema.yml +1 -1
  296. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
  297. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +1 -1
  298. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
  299. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
  300. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
  301. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
  302. simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +11 -1
  303. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +1 -1
  304. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
  305. simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +11 -1
  306. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
  307. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
  308. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
  309. simtools/schemas/model_parameters/stars.schema.yml +1 -1
  310. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
  311. simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
  312. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
  313. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
  314. simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
  315. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
  316. simtools/schemas/model_parameters/telescope_transmission.schema.yml +1 -1
  317. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
  318. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
  319. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
  320. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
  321. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
  322. simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
  323. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
  324. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
  325. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +1 -1
  326. simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
  327. simtools/schemas/plot_configuration.metaschema.yml +51 -59
  328. simtools/schemas/production_configuration_metrics.schema.yml +12 -2
  329. simtools/schemas/production_tables.schema.yml +2 -2
  330. simtools/simtel/simtel_config_reader.py +2 -2
  331. simtools/simtel/simtel_config_writer.py +16 -4
  332. simtools/simtel/simtel_io_event_histograms.py +746 -0
  333. simtools/simtel/simtel_io_event_reader.py +16 -43
  334. simtools/simtel/simtel_io_event_writer.py +46 -10
  335. simtools/simtel/simtel_io_histogram.py +3 -1
  336. simtools/simtel/simtel_io_histograms.py +7 -3
  337. simtools/simtel/simtel_io_metadata.py +99 -3
  338. simtools/simtel/simtel_table_reader.py +92 -10
  339. simtools/simtel/simulator_array.py +138 -10
  340. simtools/simtel/simulator_camera_efficiency.py +32 -23
  341. simtools/simtel/simulator_light_emission.py +437 -271
  342. simtools/simtel/simulator_ray_tracing.py +1 -1
  343. simtools/simulator.py +105 -147
  344. simtools/testing/configuration.py +24 -26
  345. simtools/testing/helpers.py +2 -2
  346. simtools/testing/log_inspector.py +50 -0
  347. simtools/testing/validate_output.py +87 -37
  348. simtools/utils/general.py +125 -257
  349. simtools/utils/geometry.py +36 -0
  350. simtools/utils/names.py +72 -3
  351. simtools/visualization/legend_handlers.py +180 -264
  352. simtools/visualization/plot_array_layout.py +20 -8
  353. simtools/visualization/plot_pixels.py +1 -2
  354. simtools/visualization/plot_tables.py +202 -27
  355. simtools/visualization/simtel_event_plots.py +816 -0
  356. simtools/visualization/visualize.py +4 -101
  357. gammasimtools-0.17.0.dist-info/RECORD +0 -374
  358. simtools/production_configuration/derive_corsika_limits_grid.py +0 -189
  359. {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/WHEEL +0 -0
  360. {gammasimtools-0.17.0.dist-info → gammasimtools-0.19.0.dist-info}/top_level.txt +0 -0
  361. /simtools/{io_operations → io}/hdf5_handler.py +0 -0
  362. /simtools/{io_operations → io}/legacy_data_handler.py +0 -0
  363. /simtools/{schemas → resources}/array_elements.yml +0 -0
@@ -0,0 +1,267 @@
1
+ """Tools for running applications in the simtools framework."""
2
+
3
+ import shutil
4
+ import subprocess
5
+ from pathlib import Path
6
+
7
+ import simtools.utils.general as gen
8
+ from simtools import dependencies
9
+ from simtools.io import ascii_handler
10
+
11
+
12
+ def run_applications(args_dict, db_config, logger):
13
+ """
14
+ Run simtools applications step-by-step as defined in a configuration file.
15
+
16
+ Parameters
17
+ ----------
18
+ args_dict : dict
19
+ Dictionary containing command line arguments.
20
+ db_config : dict
21
+ Database configuration
22
+ logger : logging.Logger
23
+ Logger for logging application output.
24
+ """
25
+ configurations, runtime_environment, log_file = _read_application_configuration(
26
+ args_dict["configuration_file"], args_dict.get("steps"), logger
27
+ )
28
+ run_time = (
29
+ read_runtime_environment(runtime_environment)
30
+ if not args_dict["ignore_runtime_environment"]
31
+ else []
32
+ )
33
+
34
+ with log_file.open("w", encoding="utf-8") as file:
35
+ file.write("Running simtools applications\n")
36
+ file.write(dependencies.get_version_string(db_config, run_time))
37
+
38
+ for config in configurations:
39
+ app = config.get("application")
40
+ if not config.get("run_application"):
41
+ logger.info(f"Skipping application: {app}")
42
+ continue
43
+ logger.info(f"Running application: {app}")
44
+ stdout, stderr = run_application(run_time, app, config.get("configuration"), logger)
45
+ file.write("=" * 80 + "\n")
46
+ file.write(f"Application: {app}\nSTDOUT:\n{stdout}\nSTDERR:\n{stderr}\n")
47
+
48
+
49
+ def run_application(runtime_environment, application, configuration, logger):
50
+ """
51
+ Run a simtools application and return stdout and stderr.
52
+
53
+ Allow to specify a runtime environment (e.g., Docker) and a working directory.
54
+
55
+ Parameters
56
+ ----------
57
+ runtime_environment : list
58
+ Command to run the application in the specified runtime environment.
59
+ application : str
60
+ Name of the application to run.
61
+ configuration : dict
62
+ Configuration for the application.
63
+ logger : logging.Logger
64
+ Logger for logging application output.
65
+
66
+ Returns
67
+ -------
68
+ tuple
69
+ stdout and stderr from the application run.
70
+
71
+ """
72
+ command = [application, *_convert_dict_to_args(configuration)]
73
+ if runtime_environment:
74
+ command = runtime_environment + command
75
+ try:
76
+ result = subprocess.run(
77
+ command,
78
+ check=True,
79
+ capture_output=True,
80
+ text=True,
81
+ )
82
+ except subprocess.CalledProcessError as exc:
83
+ logger.error(f"Error running application {application}: {exc.stderr}")
84
+ raise exc
85
+
86
+ return result.stdout, result.stderr
87
+
88
+
89
+ def _convert_dict_to_args(parameters):
90
+ """
91
+ Convert a dictionary of parameters to a list of command line arguments.
92
+
93
+ Parameters
94
+ ----------
95
+ parameters : dict
96
+ Dictionary containing parameters to convert.
97
+
98
+ Returns
99
+ -------
100
+ list
101
+ List of command line arguments.
102
+ """
103
+ args = []
104
+ for key, value in parameters.items():
105
+ if isinstance(value, bool):
106
+ if value:
107
+ args.append(f"--{key}")
108
+ elif isinstance(value, list):
109
+ args.extend([f"--{key}", *(str(item) for item in value)])
110
+ else:
111
+ args.extend([f"--{key}", str(value)])
112
+ return args
113
+
114
+
115
+ def _read_application_configuration(configuration_file, steps, logger):
116
+ """
117
+ Read application configuration from file and modify for setting workflows.
118
+
119
+ Strong assumptions on the structure of input and output files:
120
+
121
+ - configuration file is expected to be in './input/<workflow directory>/<yaml file>'
122
+ - output files will be written out to './output/<workflow directory>/'
123
+
124
+ Replaces the placeholders in the configuration file with the actual values.
125
+ Sets 'USE_PLAIN_OUTPUT_PATH' to True for all applications.
126
+
127
+ Parameters
128
+ ----------
129
+ configuration_file : str
130
+ Configuration file name.
131
+ steps : list
132
+ List of steps to be executed (None: all steps).
133
+ logger : Logger
134
+ Logger object.
135
+
136
+ Returns
137
+ -------
138
+ dict
139
+ Application configuration.
140
+ dict:
141
+ Runtime environment configuration.
142
+ Path
143
+ Path to the log file.
144
+
145
+ """
146
+ job_configuration = ascii_handler.collect_data_from_file(configuration_file)
147
+ configurations = job_configuration.get("applications")
148
+ output_path, setting_workflow = _set_input_output_directories(configuration_file)
149
+ logger.info(f"Setting workflow output path to {output_path}")
150
+ for step_count, config in enumerate(configurations, start=1):
151
+ config["run_application"] = step_count in steps if steps else True
152
+ config = gen.change_dict_keys_case(config, True)
153
+ config["configuration"] = _replace_placeholders_in_configuration(
154
+ config.get("configuration", {}),
155
+ output_path,
156
+ setting_workflow,
157
+ )
158
+ configurations[step_count - 1] = config
159
+
160
+ return (
161
+ configurations,
162
+ job_configuration.get("runtime_environment"),
163
+ output_path / "simtools.log",
164
+ )
165
+
166
+
167
+ def _replace_placeholders_in_configuration(
168
+ configuration, output_path, setting_workflow, place_holder="__SETTING_WORKFLOW__"
169
+ ):
170
+ """
171
+ Replace placeholders in the configuration dictionary.
172
+
173
+ Parameters
174
+ ----------
175
+ configuration : dict
176
+ Configuration dictionary.
177
+ output_path : Path
178
+ Path to the output directory.
179
+ setting_workflow : str
180
+ The setting workflow to replace the placeholder with.
181
+ place_holder : str
182
+ Placeholder to be replaced.
183
+
184
+ Returns
185
+ -------
186
+ dict
187
+ Configuration dictionary with placeholders replaced.
188
+ """
189
+ for key, value in configuration.items():
190
+ if isinstance(value, str):
191
+ configuration[key] = value.replace(place_holder, setting_workflow)
192
+ if isinstance(value, list):
193
+ configuration[key] = [
194
+ item.replace(place_holder, setting_workflow) if isinstance(item, str) else item
195
+ for item in value
196
+ ]
197
+ if output_path:
198
+ configuration["use_plain_output_path"] = True
199
+ configuration["output_path"] = str(output_path)
200
+
201
+ return configuration
202
+
203
+
204
+ def _set_input_output_directories(path):
205
+ """
206
+ Set input and output directories based on the configuration file path.
207
+
208
+ Tuned to simulation models setting workflows.
209
+
210
+ Parameters
211
+ ----------
212
+ path : str or Path
213
+ Path to the configuration file.
214
+
215
+ Returns
216
+ -------
217
+ tuple
218
+ The first part is the 'input' directory, the second part is the subdirectory name
219
+ """
220
+ path = Path(path).resolve()
221
+ try:
222
+ input_index = path.parts.index("input")
223
+ # Get all parts after 'input', excluding the filename
224
+ subdirs = path.parts[input_index + 1 : -1]
225
+ setting_workflow = "/".join(subdirs)
226
+ workflow_dir = path.parts[input_index]
227
+ except (ValueError, IndexError) as exc:
228
+ raise ValueError(f"Could not find subdirectory under 'input': {exc}") from exc
229
+
230
+ output_path = Path(str(workflow_dir).replace("input", "output")) / Path(setting_workflow)
231
+ output_path.mkdir(parents=True, exist_ok=True)
232
+ return output_path, "/".join(subdirs)
233
+
234
+
235
+ def read_runtime_environment(runtime_environment, workdir="/workdir/external/"):
236
+ """
237
+ Read the runtime environment (e.g. docker runtime) and generate the required command.
238
+
239
+ Parameters
240
+ ----------
241
+ runtime_environment : str or None
242
+ Path to the runtime environment configuration file.
243
+
244
+ Returns
245
+ -------
246
+ list
247
+ Runtime command.
248
+ """
249
+ if runtime_environment is None:
250
+ return []
251
+
252
+ engine = runtime_environment.get("container_engine", "docker")
253
+ if shutil.which(engine) is None:
254
+ raise RuntimeError(f"Container engine '{engine}' not found.")
255
+ cmd = [engine, "run", "--rm", "-v", f"{Path.cwd()}:{workdir}", "-w", workdir]
256
+
257
+ if options := runtime_environment.get("options"):
258
+ for opt in options:
259
+ cmd.extend(opt.split())
260
+
261
+ if env := runtime_environment.get("env_file"):
262
+ cmd += ["--env-file", env]
263
+ if net := runtime_environment.get("network"):
264
+ cmd += ["--network", net]
265
+
266
+ cmd.append(runtime_environment["image"])
267
+ return cmd
@@ -3,8 +3,8 @@ $schema: http://json-schema.org/draft-06/schema#
3
3
  $ref: '#/definitions/SimtoolsApplicationWorkflowConfiguration'
4
4
  title: SimPipe application workflow configuration metaschema
5
5
  description: YAML representation of application workflow configuration metaschema
6
- version: 0.3.0
7
- name: application_workflow.metaschema
6
+ schema_version: 0.4.0
7
+ schema_name: application_workflow.metaschema
8
8
  type: object
9
9
  additionalProperties: false
10
10
 
@@ -13,103 +13,136 @@ definitions:
13
13
  type: object
14
14
  additionalProperties: false
15
15
  properties:
16
- CTA_SIMPIPE:
17
- "$ref": "#/definitions/CTASIMPIPE"
18
- SCHEMA_VERSION:
16
+ applications:
17
+ "$ref": "#/definitions/applications"
18
+ schema_version:
19
19
  type: string
20
20
  description: "Version of the schema."
21
- SCHEMA_URL:
21
+ schema_url:
22
22
  type: string
23
23
  format: uri
24
24
  description: "URL of the schema."
25
- SCHEMA_NAME:
25
+ schema_name:
26
26
  type: string
27
27
  description: "Name of the schema."
28
+ runtime_environment:
29
+ "$ref": "#/definitions/runtime_environment"
28
30
  required:
29
- - CTA_SIMPIPE
30
- - SCHEMA_VERSION
31
- - SCHEMA_NAME
31
+ - applications
32
+ - schema_version
33
+ - schema_name
32
34
  title: ""
33
- CTASIMPIPE:
34
- type: object
35
+ runtime_environment:
35
36
  additionalProperties: false
36
- properties:
37
- LOG_PATH:
38
- type: string
39
- description: "Path to the log file."
40
- APPLICATIONS:
41
- type: array
42
- items:
43
- type: object
44
- properties:
45
- APPLICATION:
46
- type: string
47
- description: "Name of simtools application"
48
- TEST_NAME:
49
- type: string
50
- description: "Test name. Should be unique for this application."
51
- SKIP_FOR_PRODUCTION_DB:
52
- type: boolean
53
- description: "Skip test if production DB is used."
54
- MODEL_VERSION_USE_CURRENT:
55
- type: boolean
56
- description: |
57
- "Skip test if model version is changed via command line.
58
- Important e.g., for cases where DB model is incomplete for some
59
- model versions."
60
- CONFIGURATION:
61
- "$ref": "#/definitions/Configuration"
62
- INTEGRATION_TESTS:
63
- type: array
64
- items:
65
- "$ref": "#/definitions/IntegrationTest"
66
- TEST_REQUIREMENT:
67
- type: string
68
- description: "Requirement ID of the test."
69
- TEST_USE_CASE:
70
- type: string
71
- description: "Use case ID of the test."
72
- required:
73
- - APPLICATION
74
- - CONFIGURATION
75
- title: CTASimpipe
76
- Configuration:
37
+ type: array
38
+ items:
39
+ type: object
40
+ properties:
41
+ image:
42
+ type: string
43
+ description: "Container image to use for the application."
44
+ network:
45
+ type: string
46
+ description: "Network configuration for the container."
47
+ environment_file:
48
+ type: string
49
+ description: "Path to the environment file for the container."
50
+ container_engine:
51
+ type: string
52
+ description: "Container engine to use (e.g., docker, podman)."
53
+ default: "docker"
54
+ applications:
55
+ additionalProperties: false
56
+ type: array
57
+ items:
58
+ type: object
59
+ properties:
60
+ application:
61
+ type: string
62
+ description: "Name of simtools application"
63
+ test_name:
64
+ type: string
65
+ description: "Test name. Should be unique for this application."
66
+ skip_for_production_db:
67
+ type: boolean
68
+ description: "Skip test if production DB is used."
69
+ model_version_use_current:
70
+ type: boolean
71
+ description: |
72
+ "Skip test if model version is changed via command line.
73
+ Important e.g., for cases where DB model is incomplete for some
74
+ model versions."
75
+ configuration:
76
+ "$ref": "#/definitions/configuration"
77
+ integration_tests:
78
+ type: array
79
+ items:
80
+ "$ref": "#/definitions/integration_test"
81
+ test_requirement:
82
+ type: string
83
+ description: "Requirement ID of the test."
84
+ test_use_case:
85
+ type: string
86
+ description: "Use case ID of the test."
87
+ required:
88
+ - application
89
+ - configuration
90
+ title: Applications
91
+ configuration:
77
92
  description: "Command line configuration of simtools application."
78
93
  type: object
79
94
  additionalProperties: true
80
95
  title: Configuration
81
- IntegrationTest:
96
+ integration_test:
82
97
  description: "List of integration tests."
83
98
  type: object
84
99
  additionalProperties: false
85
100
  properties:
86
- OUTPUT_FILE:
101
+ output_file:
87
102
  description: |
88
103
  "Path of output file tested to be generated by integration test."
89
104
  type: string
90
- TEST_OUTPUT_FILES:
105
+ test_output_files:
91
106
  type: array
92
107
  items:
93
108
  type: object
94
109
  properties:
95
- PATH_DESCRIPTOR:
110
+ path_descriptor:
96
111
  type: string
97
- FILE:
112
+ file:
98
113
  type: string
99
- EXPECTED_OUTPUT:
114
+ expected_output:
100
115
  description: |
101
116
  "Expected output of integration test."
102
117
  type: object
103
- required: ["PATH_DESCRIPTOR", "FILE"]
104
- FILE_TYPE:
118
+ required: ["path_descriptor", "file"]
119
+ file_type:
105
120
  description: |
106
121
  "Expected file type of output file generated by integration test."
107
122
  type: string
108
- REFERENCE_OUTPUT_FILE:
123
+ reference_output_file:
109
124
  description: |
110
125
  "Reference file used for comparison."
111
126
  type: string
112
- TEST_SIMTEL_CFG_FILES:
127
+ model_parameter_validation:
128
+ description: |
129
+ "Validation of model parameters against reference values."
130
+ type: object
131
+ additionalProperties: false
132
+ properties:
133
+ parameter_file:
134
+ description: |
135
+ "Path to the JSON file containing model parameters."
136
+ type: string
137
+ reference_parameter_name:
138
+ description: |
139
+ "Name of the parameter to validate against the reference."
140
+ type: string
141
+ tolerance:
142
+ description: |
143
+ "Allowed tolerance for floating point comparison."
144
+ type: number
145
+ test_simtel_cfg_files:
113
146
  description: |
114
147
  "Reference file used for comparison of sim_telarray configuration files."
115
148
  type: object
@@ -119,22 +152,22 @@ definitions:
119
152
  type: string
120
153
  description: Path to the configuration file for the given version.
121
154
  minProperties: 1
122
- TOLERANCE:
155
+ tolerance:
123
156
  description: "Allowed tolerance for floating point comparison."
124
157
  type: number
125
- TEST_COLUMNS:
158
+ test_columns:
126
159
  description: "List of columns to be compared, each with optional cut conditions."
127
160
  type: array
128
161
  items:
129
162
  type: object
130
163
  properties:
131
- TEST_COLUMN_NAME:
164
+ test_column_name:
132
165
  description: "Name of the column to compare."
133
166
  type: string
134
- CUT_COLUMN_NAME:
167
+ cut_column_name:
135
168
  description: "Name of the column for applying the cut."
136
169
  type: string
137
- CUT_CONDITION:
170
+ cut_condition:
138
171
  description: "Condition to apply to the cut column."
139
172
  type: string
140
173
  title: ApplicationWorkflow
@@ -1,7 +1,7 @@
1
1
  %YAML 1.2
2
2
  ---
3
3
  title: Schema for mirror panel 2F measurements
4
- version: 0.1.0
4
+ schema_version: 0.1.0
5
5
  meta_schema: simpipe-schema
6
6
  meta_schema_url: https://raw.githubusercontent.com/gammasim/simtools/main/src/simtools/schemas/model_parameter_and_data_schema.metaschema.yml
7
7
  meta_schema_version: 0.1.0
@@ -1,7 +1,7 @@
1
1
  %YAML 1.2
2
2
  ---
3
3
  title: Schema for single photon electron spectrum
4
- version: 0.1.0
4
+ schema_version: 0.1.0
5
5
  meta_schema: simpipe-schema
6
6
  meta_schema_url: https://raw.githubusercontent.com/gammasim/simtools/main/src/simtools/schemas/model_parameter_and_data_schema.metaschema.yml
7
7
  meta_schema_version: 0.1.0