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,569 @@
1
+ """
2
+ Reads the content of multiples files from sim_telarray.
3
+
4
+ Reads the content of either multiple histogram (.hdata, or .hdata.zst) or
5
+ simtel_array output files (.simtel or .simtel.zst). The module is built on top of the
6
+ simtel_io_histogram module and uses its class (SimtelIOHistogram) to read the individual files.
7
+ """
8
+
9
+ import copy
10
+ import logging
11
+
12
+ import numpy as np
13
+ from ctapipe.io import write_table
14
+ from eventio import EventIOFile, Histograms
15
+ from eventio.search_utils import yield_toplevel_of_type
16
+
17
+ from simtools import version
18
+ from simtools.io_operations.hdf5_handler import fill_hdf5_table
19
+ from simtools.simtel.simtel_io_histogram import (
20
+ HistogramIdNotFoundError,
21
+ InconsistentHistogramFormatError,
22
+ SimtelIOHistogram,
23
+ )
24
+ from simtools.utils.names import sanitize_name
25
+
26
+ __all__ = [
27
+ "SimtelIOHistograms",
28
+ ]
29
+
30
+
31
+ class SimtelIOHistograms:
32
+ """
33
+ Read the content of either multiple histogram (.hdata, or .hdata.zst) or simtel_array files.
34
+
35
+ Allow both the .hdata.zst histogram and the .simtel.zst output file type.
36
+ It uses the SimtelIOHistogram class to deal with individual files.
37
+ Histogram files are ultimately handled by using eventio library.
38
+
39
+ Parameters
40
+ ----------
41
+ histogram_files: list
42
+ List of sim_telarray histogram files (str of Path).
43
+ test: bool
44
+ If True, only a fraction of the histograms will be processed, leading to a much shorter\
45
+ runtime.
46
+ area_from_distribution: bool
47
+ If true, the area thrown (the area in which the simulated events are distributed)
48
+ in the trigger rate calculation is estimated based on the event distribution.
49
+ The expected shape of the distribution of events as function of the core distance is
50
+ triangular up to the maximum distance. The weighted mean radius of the triangular
51
+ distribution is 2/3 times the upper edge. Therefore, when using the
52
+ ``area_from_distribution`` flag, the mean distance times 3/2, returns just the position of
53
+ the upper edge in the triangle distribution with little impact of the binning and little
54
+ dependence on the scatter area defined in the simulation. This is special useful when
55
+ calculating trigger rate for individual telescopes.
56
+ If false, the area thrown is estimated based on the maximum distance as given in
57
+ the simulation configuration.
58
+ energy_range: list
59
+ The energy range used in the simulation. It must be passed as a list of floats and the
60
+ energy must be in TeV (as in the CORSIKA configuration).
61
+ This argument is only needed and used if histogram_file is a .hdata file, in which case the
62
+ energy range cannot be retrieved directly from the file.
63
+ view_cone: list
64
+ The view cone used in the simulation. It must be passed as a list of floats and the
65
+ view cone must be in deg (as in the CORSIKA configuration).
66
+ This argument is only needed and used if histogram_file is a .hdata file, in which case the
67
+ view cone cannot be retrieved directly from the file.
68
+ """
69
+
70
+ def __init__(
71
+ self,
72
+ histogram_files,
73
+ test=False,
74
+ area_from_distribution=False,
75
+ energy_range=None,
76
+ view_cone=None,
77
+ ):
78
+ """Initialize SimtelIOHistograms."""
79
+ self._logger = logging.getLogger(__name__)
80
+ if not isinstance(histogram_files, list):
81
+ histogram_files = [histogram_files]
82
+ self.histogram_files = histogram_files
83
+ self.view_cone = view_cone
84
+ self.energy_range = energy_range
85
+ self._is_test = test
86
+ self._combined_hists = None
87
+ self._list_of_histograms = None
88
+ self.__meta_dict = None
89
+ self.area_from_distribution = area_from_distribution
90
+
91
+ def calculate_trigger_rates(self, print_info=False, stack_files=False):
92
+ """
93
+ Calculate the triggered and simulated event rate considering the histograms in each file.
94
+
95
+ It returns also a list with the tables where the energy dependent trigger rate for each
96
+ file can be found.
97
+
98
+ Parameters
99
+ ----------
100
+ print_info: bool
101
+ if True, prints out the information about the histograms such as energy range, area,
102
+ etc.
103
+ stack_files: bool
104
+ if True, stack the histograms from the different files into single histograms.
105
+ Useful to increase event statistics when calculating the trigger rate.
106
+
107
+ Returns
108
+ -------
109
+ sim_event_rates: list of astropy.Quantity[1/time]
110
+ The simulated event rates.
111
+ triggered_event_rates: list of astropy.Quantity[1/time]
112
+ The triggered event rates.
113
+ triggered_event_rate_uncertainties: list of astropy.Quantity[1/time]
114
+ The uncertainties in the triggered event rates.
115
+ trigger_rate_in_tables: list of astropy.QTable
116
+ The energy dependent trigger rates.
117
+ Only filled if stack_files is False.
118
+ """
119
+ if stack_files:
120
+ (
121
+ sim_event_rates,
122
+ triggered_event_rates,
123
+ triggered_event_rate_uncertainties,
124
+ ) = self._rates_for_stacked_files()
125
+ trigger_rate_in_tables = []
126
+ else:
127
+ (
128
+ sim_event_rates,
129
+ triggered_event_rates,
130
+ triggered_event_rate_uncertainties,
131
+ trigger_rate_in_tables,
132
+ ) = self._rates_for_each_file(print_info)
133
+
134
+ return (
135
+ sim_event_rates,
136
+ triggered_event_rates,
137
+ triggered_event_rate_uncertainties,
138
+ trigger_rate_in_tables,
139
+ )
140
+
141
+ def _fill_stacked_events(self):
142
+ """
143
+ Retrieve the simulated and triggered event histograms from the stacked histograms instead.
144
+
145
+ Returns
146
+ -------
147
+ first_hist_file: dict
148
+ The simulated 2D event histogram.
149
+ second_hist_file: dict
150
+ The triggered 2D event histogram.
151
+
152
+ Raises
153
+ ------
154
+ HistogramIdNotFoundError:
155
+ if histogram ids not found. Problem with the file.
156
+ """
157
+ sim_hist = None
158
+ trig_hist = None
159
+ for _, one_hist in enumerate(self.combined_hists):
160
+ if one_hist["id"] == 1:
161
+ sim_hist = one_hist
162
+ elif one_hist["id"] == 2:
163
+ trig_hist = one_hist
164
+
165
+ if sim_hist is None or trig_hist is None:
166
+ msg = (
167
+ "Simulated and triggered histograms were not found in the stacked histograms."
168
+ " Please check your simtel_array files!"
169
+ )
170
+ self._logger.error(msg)
171
+ raise HistogramIdNotFoundError
172
+
173
+ return sim_hist, trig_hist
174
+
175
+ def get_stacked_num_events(self):
176
+ """
177
+ Return stacked number of simulated events and triggered events.
178
+
179
+ Returns
180
+ -------
181
+ int:
182
+ total number of simulated events for the stacked dataset.
183
+ int:
184
+ total number of triggered events for the stacked dataset.
185
+ """
186
+ stacked_num_simulated_events = 0
187
+ stacked_num_triggered_events = 0
188
+ for _, file in enumerate(self.histogram_files):
189
+ simtel_hist_instance = SimtelIOHistogram(
190
+ file,
191
+ area_from_distribution=self.area_from_distribution,
192
+ energy_range=self.energy_range,
193
+ view_cone=self.view_cone,
194
+ )
195
+ stacked_num_simulated_events += simtel_hist_instance.total_num_simulated_events
196
+ stacked_num_triggered_events += simtel_hist_instance.total_num_triggered_events
197
+ return stacked_num_simulated_events, stacked_num_triggered_events
198
+
199
+ def _rates_for_stacked_files(self):
200
+ """
201
+ Calculate trigger rate for the stacked case.
202
+
203
+ Returns
204
+ -------
205
+ sim_event_rates: list of astropy.Quantity[1/time]
206
+ The simulated event rates.
207
+ triggered_event_rates: list of astropy.Quantity[1/time]
208
+ The triggered event rates.
209
+ triggered_event_rate_uncertainties: list of astropy.Quantity[1/time]
210
+ The uncertainties in the triggered event rates.
211
+ trigger_rate_in_tables: list of astropy.QTable
212
+ The energy dependent trigger rates.
213
+ Only filled if stack_files is False.
214
+ """
215
+ logging.info("Estimates for the stacked histograms:")
216
+ sim_hist, trig_hist = self._fill_stacked_events()
217
+ # Using a dummy instance of SimtelIOHistogram to calculate the trigger rate for the
218
+ # stacked files
219
+ simtel_hist_instance = SimtelIOHistogram(
220
+ self.histogram_files[0],
221
+ area_from_distribution=self.area_from_distribution,
222
+ energy_range=self.energy_range,
223
+ view_cone=self.view_cone,
224
+ )
225
+
226
+ stacked_num_simulated_events, stacked_num_triggered_events = self.get_stacked_num_events()
227
+ logging.info("Total number of simulated events: " f"{stacked_num_simulated_events} events")
228
+ logging.info("Total number of triggered events: " f"{stacked_num_triggered_events} events")
229
+ obs_time = simtel_hist_instance.estimate_observation_time(stacked_num_simulated_events)
230
+ logging.info(
231
+ "Estimated equivalent observation time corresponding to the number of"
232
+ f"events simulated: {obs_time.value} s"
233
+ )
234
+ sim_event_rate = stacked_num_simulated_events / obs_time
235
+ logging.info(f"Simulated event rate: {sim_event_rate.value:.4e} Hz")
236
+ (
237
+ triggered_event_rate,
238
+ _,
239
+ ) = simtel_hist_instance.compute_system_trigger_rate(
240
+ events_histogram=sim_hist, triggered_events_histogram=trig_hist
241
+ )
242
+ triggered_event_rate_uncertainty = simtel_hist_instance.estimate_trigger_rate_uncertainty(
243
+ triggered_event_rate, stacked_num_simulated_events, stacked_num_triggered_events
244
+ )
245
+ logging.info(
246
+ f"System trigger event rate for stacked files: "
247
+ # pylint: disable=E1101
248
+ f"{triggered_event_rate.value:.4e} \u00B1 "
249
+ # pylint: disable=E1101
250
+ f"{triggered_event_rate_uncertainty.value:.4e} Hz"
251
+ )
252
+ return (
253
+ [sim_event_rate],
254
+ [triggered_event_rate],
255
+ [triggered_event_rate_uncertainty],
256
+ )
257
+
258
+ def _rates_for_each_file(self, print_info=False):
259
+ """
260
+ Calculate trigger rate for each file.
261
+
262
+ Returns
263
+ -------
264
+ sim_event_rates: list of astropy.Quantity[1/time]
265
+ The simulated event rates.
266
+ triggered_event_rates: list of astropy.Quantity[1/time]
267
+ The triggered event rates.
268
+ triggered_event_rate_uncertainties: list of astropy.Quantity[1/time]
269
+ The uncertainties in the triggered event rates.
270
+ """
271
+ triggered_event_rates = []
272
+ sim_event_rates = []
273
+ trigger_rate_in_tables = []
274
+ triggered_event_rate_uncertainties = []
275
+ for i_file, file in enumerate(self.histogram_files):
276
+ simtel_hist_instance = SimtelIOHistogram(
277
+ file,
278
+ area_from_distribution=self.area_from_distribution,
279
+ energy_range=self.energy_range,
280
+ view_cone=self.view_cone,
281
+ )
282
+ if print_info:
283
+ simtel_hist_instance.print_info()
284
+
285
+ logging.info(f"Histogram {i_file + 1}:")
286
+ logging.info(
287
+ "Total number of simulated events: "
288
+ f"{simtel_hist_instance.total_num_simulated_events} events"
289
+ )
290
+ logging.info(
291
+ "Total number of triggered events: "
292
+ f"{simtel_hist_instance.total_num_triggered_events} events"
293
+ )
294
+
295
+ obs_time = simtel_hist_instance.estimate_observation_time(
296
+ simtel_hist_instance.total_num_simulated_events
297
+ )
298
+ logging.info(
299
+ f"Estimated equivalent observation time corresponding to the number of "
300
+ f"events simulated: {obs_time.value} s"
301
+ )
302
+ sim_event_rate = simtel_hist_instance.total_num_simulated_events / obs_time
303
+ sim_event_rates.append(sim_event_rate)
304
+ logging.info(f"Simulated event rate: {sim_event_rate.value:.4e} Hz")
305
+
306
+ (
307
+ triggered_event_rate,
308
+ triggered_event_rate_uncertainty,
309
+ ) = simtel_hist_instance.compute_system_trigger_rate()
310
+ logging.info(
311
+ f"System trigger event rate: "
312
+ # pylint: disable=E1101
313
+ f"{triggered_event_rate.value:.4e} \u00B1 "
314
+ # pylint: disable=E1101
315
+ f"{triggered_event_rate_uncertainty.value:.4e} Hz"
316
+ )
317
+ triggered_event_rates.append(triggered_event_rate)
318
+ triggered_event_rate_uncertainties.append(triggered_event_rate_uncertainty)
319
+ trigger_rate_in_tables.append(simtel_hist_instance.trigger_info_in_table())
320
+ return (
321
+ sim_event_rates,
322
+ triggered_event_rates,
323
+ triggered_event_rate_uncertainties,
324
+ trigger_rate_in_tables,
325
+ )
326
+
327
+ @property
328
+ def number_of_files(self):
329
+ """Returns number of histograms."""
330
+ return len(self.histogram_files)
331
+
332
+ def _check_consistency(self, first_hist_file, second_hist_file):
333
+ """
334
+ Check whether two histograms have the same format.
335
+
336
+ Raises an error in case they are not consistent.
337
+
338
+ Parameters
339
+ ----------
340
+ first_hist_file: dict
341
+ One histogram from a single file.
342
+ second_hist_file: dict
343
+ One histogram from a single file.
344
+
345
+ Raises
346
+ ------
347
+ InconsistentHistogramFormatError:
348
+ if the format of the histograms have inconsistent dimensions.
349
+ """
350
+ for key_to_test in [
351
+ "lower_x",
352
+ "upper_x",
353
+ "n_bins_x",
354
+ "title",
355
+ ]:
356
+ if first_hist_file[key_to_test] != second_hist_file[key_to_test]:
357
+ msg = "Trying to add histograms with inconsistent dimensions"
358
+ self._logger.error(msg)
359
+ raise InconsistentHistogramFormatError
360
+
361
+ @property
362
+ def list_of_histograms(self):
363
+ """
364
+ Returns a list with the histograms for each file.
365
+
366
+ Returns
367
+ -------
368
+ list:
369
+ List of histograms.
370
+ """
371
+ if self._list_of_histograms is None:
372
+ self._list_of_histograms = []
373
+ for file in self.histogram_files:
374
+ with EventIOFile(file) as f:
375
+ for o in yield_toplevel_of_type(f, Histograms):
376
+ hists = o.parse()
377
+ self._list_of_histograms.append(hists)
378
+ return self._list_of_histograms
379
+
380
+ @property
381
+ def combined_hists(self):
382
+ """
383
+ Combine histograms of same type of histogram.
384
+
385
+ Histograms are read from various lists into a single histogram list.
386
+ """
387
+ # Processing and combining histograms from multiple files
388
+ if self._combined_hists is None:
389
+ self._combined_hists = []
390
+ for histogram_index, hists_one_file in enumerate(self.list_of_histograms):
391
+ if histogram_index == 0:
392
+ # First file
393
+ self._combined_hists = copy.copy(hists_one_file)
394
+
395
+ else:
396
+ for hist, this_combined_hist in zip(hists_one_file, self._combined_hists):
397
+ self._check_consistency(hist, this_combined_hist)
398
+
399
+ this_combined_hist["data"] = np.add(
400
+ this_combined_hist["data"], hist["data"]
401
+ )
402
+
403
+ self._logger.debug(f"End of reading {len(self.histogram_files)} files")
404
+ return self._combined_hists
405
+
406
+ @combined_hists.setter
407
+ def combined_hists(self, new_combined_hists):
408
+ """
409
+ Setter for combined_hists.
410
+
411
+ Parameters
412
+ ----------
413
+ new_combined_hists:
414
+ Combined histograms.
415
+ """
416
+ self._combined_hists = new_combined_hists
417
+
418
+ def plot_one_histogram(self, histogram_index, ax):
419
+ """
420
+ Plot a single histogram referent to the index histogram_index.
421
+
422
+ Parameters
423
+ ----------
424
+ histogram_index: int
425
+ Index of the histogram to be plotted.
426
+ ax: matplotlib.axes.Axes
427
+ Instance of matplotlib.axes.Axes in which to plot the histogram.
428
+ """
429
+ hist = self.combined_hists[histogram_index]
430
+ ax.set_title(hist["title"])
431
+
432
+ def _get_bins(hist, axis=0):
433
+ ax_str = "x" if axis == 0 else "y"
434
+ return np.linspace(
435
+ hist["lower_" + ax_str],
436
+ hist["upper_" + ax_str],
437
+ hist["n_bins_" + ax_str] + 1,
438
+ )
439
+
440
+ def _get_ax_lim(hist, axis=0):
441
+ if np.sum(hist["data"]) == 0:
442
+ return 0, 1
443
+
444
+ bins = _get_bins(hist, axis=axis)
445
+
446
+ if hist["data"].ndim == 1:
447
+ non_zero = np.where(hist["data"] != 0)
448
+ else:
449
+ marginal = np.sum(hist["data"], axis=axis)
450
+ non_zero = np.where(marginal != 0)
451
+
452
+ return bins[non_zero[0][0]], bins[non_zero[0][-1] + 1]
453
+
454
+ if hist["n_bins_y"] > 0:
455
+ # 2D histogram
456
+
457
+ xlim = _get_ax_lim(hist, axis=0)
458
+ ylim = _get_ax_lim(hist, axis=1)
459
+
460
+ if np.sum(hist["data"]) == 0:
461
+ ax.text(
462
+ 0.5,
463
+ 0.5,
464
+ "EMPTY",
465
+ horizontalalignment="center",
466
+ verticalalignment="center",
467
+ transform=ax.transAxes,
468
+ )
469
+ return
470
+
471
+ x_bins = _get_bins(hist, axis=0)
472
+ y_bins = _get_bins(hist, axis=1)
473
+
474
+ ax.pcolormesh(x_bins, y_bins, hist["data"])
475
+ ax.set_xlim(xlim)
476
+ ax.set_ylim(ylim)
477
+
478
+ else:
479
+ # 1D histogram
480
+
481
+ xlim = _get_ax_lim(hist, axis=0)
482
+
483
+ if np.sum(hist["data"]) == 0:
484
+ ax.text(
485
+ 0.5,
486
+ 0.5,
487
+ "EMPTY",
488
+ horizontalalignment="center",
489
+ verticalalignment="center",
490
+ transform=ax.transAxes,
491
+ )
492
+ return
493
+
494
+ x_bins = _get_bins(hist, axis=0)
495
+ centers = 0.5 * (x_bins[:-1] + x_bins[1:])
496
+ ax.hist(centers, bins=x_bins, weights=hist["data"])
497
+ ax.set_xlim(xlim)
498
+
499
+ @property
500
+ def _meta_dict(self):
501
+ """
502
+ Define the meta dictionary for exporting the histograms.
503
+
504
+ Returns
505
+ -------
506
+ dict
507
+ Meta dictionary for the hdf5 files with the histograms.
508
+ """
509
+ if self.__meta_dict is None:
510
+ self.__meta_dict = {
511
+ "simtools_version": version.__version__,
512
+ "note": "Only lower bin edges are given.",
513
+ }
514
+ return self.__meta_dict
515
+
516
+ def export_histograms(self, hdf5_file_name, overwrite=False):
517
+ """
518
+ Export the histograms to hdf5 files.
519
+
520
+ Parameters
521
+ ----------
522
+ hdf5_file_name: str
523
+ Name of the file to be saved with the hdf5 tables.
524
+ overwrite: bool
525
+ If True overwrites the histograms already saved in the hdf5 file.
526
+ """
527
+ for histogram in self.combined_hists:
528
+ x_bin_edges_list = np.linspace(
529
+ histogram["lower_x"],
530
+ histogram["upper_x"],
531
+ num=histogram["n_bins_x"] + 1,
532
+ endpoint=True,
533
+ )
534
+ if histogram["n_bins_y"] > 0:
535
+ y_bin_edges_list = np.linspace(
536
+ histogram["lower_y"],
537
+ histogram["upper_y"],
538
+ num=histogram["n_bins_y"] + 1,
539
+ endpoint=True,
540
+ )
541
+ else:
542
+ y_bin_edges_list = None
543
+
544
+ self._meta_dict["Title"] = sanitize_name(histogram["title"])
545
+
546
+ table = fill_hdf5_table(
547
+ hist=histogram["data"],
548
+ x_bin_edges=x_bin_edges_list,
549
+ y_bin_edges=y_bin_edges_list,
550
+ x_label=None,
551
+ y_label=None,
552
+ meta_data=self._meta_dict,
553
+ )
554
+
555
+ self._logger.debug(
556
+ f"Writing histogram with name {self._meta_dict['Title']} to {hdf5_file_name}."
557
+ )
558
+ # overwrite takes precedence over append
559
+ if overwrite is True:
560
+ append = False
561
+ else:
562
+ append = True
563
+ write_table(
564
+ table,
565
+ hdf5_file_name,
566
+ f"/{self._meta_dict['Title']}",
567
+ append=append,
568
+ overwrite=overwrite,
569
+ )