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
@@ -1,21 +1,31 @@
1
1
  #!/usr/bin/python3
2
+ """Configuration file writer for sim_telarray."""
2
3
 
3
4
  import logging
5
+ from pathlib import Path
6
+
7
+ import astropy.units as u
8
+ import numpy as np
9
+
10
+ import simtools.utils.general as gen
11
+ import simtools.version
12
+ from simtools.utils import names
4
13
 
5
14
  __all__ = ["SimtelConfigWriter"]
6
15
 
7
16
 
8
17
  class SimtelConfigWriter:
9
18
  """
10
- SimtelConfigWriter writes sim_telarray configuration files. It is designed to be used by model
11
- classes (TelescopeModel and ArrayModel) only.
19
+ SimtelConfigWriter writes sim_telarray configuration files.
20
+
21
+ It is designed to be used by model classes (TelescopeModel and ArrayModel) only.
12
22
 
13
23
  Parameters
14
24
  ----------
15
25
  site: str
16
26
  South or North.
17
27
  model_version: str
18
- Version of the model (ex. prod5).
28
+ Model version.
19
29
  telescope_model_name: str
20
30
  Telescope model name.
21
31
  layout_name: str
@@ -25,36 +35,11 @@ class SimtelConfigWriter:
25
35
  """
26
36
 
27
37
  TAB = " " * 3
28
- SITE_PARS = [
29
- "altitude",
30
- "atmospheric_transmission",
31
- "ref_lat",
32
- "ref_long",
33
- "array_coordinates",
34
- "atmospheric_profile",
35
- "magnetic_field",
36
- ]
37
- PARS_NOT_TO_WRITE = [
38
- "pixel_shape",
39
- "pixel_diameter",
40
- "lightguide_efficiency_angle_file",
41
- "lightguide_efficiency_wavelength_file",
42
- "ref_lat",
43
- "ref_long",
44
- "array_coordinates",
45
- "atmospheric_profile",
46
- "magnetic_field",
47
- "EPSG",
48
- "mirror_panel_shape",
49
- "mirror_panel_diameter",
50
- ]
51
38
 
52
39
  def __init__(
53
40
  self, site, model_version, layout_name=None, telescope_model_name=None, label=None
54
41
  ):
55
- """
56
- Initialize SimtelConfigWriter.
57
- """
42
+ """Initialize SimtelConfigWriter."""
58
43
  self._logger = logging.getLogger(__name__)
59
44
  self._logger.debug("Init SimtelConfigWriter")
60
45
 
@@ -64,47 +49,114 @@ class SimtelConfigWriter:
64
49
  self._layout_name = layout_name
65
50
  self._telescope_model_name = telescope_model_name
66
51
 
67
- def write_telescope_config_file(self, config_file_path, parameters):
52
+ def write_telescope_config_file(self, config_file_path, parameters, config_parameters=None):
68
53
  """
69
- Writes the sim_telarray config file for a single telescope.
54
+ Write the sim_telarray config file for a single telescope.
70
55
 
71
56
  Parameters
72
57
  ----------
73
58
  config_file_path: str or Path
74
59
  Path of the file to write on.
75
60
  parameters: dict
76
- Model parameters in the same structure as used by the TelescopeModel class.
61
+ Model parameters
62
+ config_parameters: dict
63
+ Simulation software configuration parameters
77
64
  """
65
+ self._logger.debug(f"Writing telescope config file {config_file_path}")
66
+
67
+ if config_parameters:
68
+ parameters.update(config_parameters)
69
+
78
70
  with open(config_file_path, "w", encoding="utf-8") as file:
79
71
  self._write_header(file, "TELESCOPE CONFIGURATION FILE")
80
72
 
81
73
  file.write("#ifdef TELESCOPE\n")
82
74
  file.write(
83
75
  f" echo Configuration for {self._telescope_model_name}"
84
- + " - TELESCOPE $(TELESCOPE)\n"
76
+ " - TELESCOPE $(TELESCOPE)\n"
85
77
  )
86
78
  file.write("#endif\n\n")
87
79
 
88
- for par in parameters.keys():
89
- if par in self.PARS_NOT_TO_WRITE:
90
- continue
91
- value = parameters[par]["Value"]
92
- file.write(f"{par} = {value}\n")
80
+ for _simtel_name, value in parameters.items():
81
+ if _simtel_name.startswith("array_trigger"):
82
+ continue # array trigger is a site parameter, not a telescope parameter
83
+ if _simtel_name:
84
+ file.write(f"{_simtel_name} = {self._get_value_string_for_simtel(value)}\n")
85
+ _config_meta = self._get_simtel_metadata("telescope")
86
+ for _simtel_name, value in _config_meta.items():
87
+ file.write(f"{_simtel_name} = {value}\n")
88
+
89
+ def _get_value_string_for_simtel(self, value):
90
+ """
91
+ Return a value string for simtel.
92
+
93
+ Parameters
94
+ ----------
95
+ value: any
96
+ Value to convert to string.
97
+
98
+ Returns
99
+ -------
100
+ str
101
+ Value string for simtel.
102
+ """
103
+ value = "none" if value is None else value # simtel requires 'none'
104
+ if isinstance(value, bool):
105
+ value = 1 if value else 0
106
+ elif isinstance(value, (list, np.ndarray)): # noqa: UP038
107
+ value = gen.convert_list_to_string(value, shorten_list=True)
108
+ return value
109
+
110
+ def _get_simtel_metadata(self, config_type):
111
+ """
112
+ Return simtel metadata.
113
+
114
+ Parameters
115
+ ----------
116
+ type: str
117
+ Type of the configuration file (telescope, site)
118
+
119
+ Returns
120
+ -------
121
+ dict
122
+ Dictionary with simtel metadata.
123
+
124
+ """
125
+ parameters = {}
126
+ parameters["config_release"] = (
127
+ f"{self._model_version} written by simtools v{simtools.version.__version__}"
128
+ )
129
+ parameters["config_version"] = self._model_version
130
+ if config_type == "telescope":
131
+ parameters["camera_config_name"] = self._telescope_model_name
132
+ parameters["camera_config_variant"] = ""
133
+ parameters["camera_config_version"] = self._model_version
134
+ parameters["optics_config_name"] = self._telescope_model_name
135
+ parameters["optics_config_variant"] = ""
136
+ parameters["optics_config_version"] = self._model_version
137
+ elif config_type == "site":
138
+ parameters["site_config_name"] = self._site
139
+ parameters["site_config_variant"] = ""
140
+ parameters["site_config_version"] = self._model_version
141
+ parameters["array_config_name"] = self._layout_name
142
+ parameters["array_config_variant"] = ""
143
+ parameters["array_config_version"] = self._model_version
144
+ else:
145
+ raise ValueError(f"Unknown metadata type {config_type}")
146
+ return parameters
93
147
 
94
- def write_array_config_file(self, config_file_path, layout, telescope_model, site_parameters):
148
+ def write_array_config_file(self, config_file_path, telescope_model, site_model):
95
149
  """
96
- Writes the sim_telarray config file for an array of telescopes.
150
+ Write the sim_telarray config file for an array of telescopes.
97
151
 
98
152
  Parameters
99
153
  ----------
100
154
  config_file_path: str or Path
101
155
  Path of the file to write on.
102
- layout: ArrayLayout
103
- Instance of ArrayLayout referent to the array model.
104
- telescope_model: list of TelescopeModel
105
- List of TelescopeModel's instances as used by the ArrayModel instance.
106
- site_parameters: dict
107
- Site parameters.
156
+ telescope_model: dict of TelescopeModel
157
+ Dictionary of TelescopeModel's instances as used by the ArrayModel instance.
158
+ site_model: Site model
159
+ Site model.
108
160
  """
109
161
  with open(config_file_path, "w", encoding="utf-8") as file:
110
162
  self._write_header(file, "ARRAY CONFIGURATION FILE")
@@ -123,28 +175,31 @@ class SimtelConfigWriter:
123
175
  file.write(self.TAB + "echo *****************************\n\n")
124
176
 
125
177
  # Writing site parameters
126
- self._write_site_parameters(file, site_parameters)
178
+ self._write_site_parameters(
179
+ file, site_model, Path(config_file_path).parent, telescope_model
180
+ )
127
181
 
128
182
  # Maximum telescopes
129
183
  file.write(self.TAB + f"maximum_telescopes = {len(telescope_model)}\n\n")
130
184
 
131
- # Default telescope - 0th tel in telescope list
132
- tel_config_file = telescope_model[0].get_config_file(no_export=True).name
185
+ # Default telescope in sim_telarray - 0th tel in telescope list
186
+ _, first_telescope = next(iter(telescope_model.items()))
187
+ tel_config_file = first_telescope.get_config_file(no_export=True).name
133
188
  file.write(f"# include <{tel_config_file}>\n\n")
134
189
 
135
- # Looping over telescopes - from 1 to ...
136
- for count, tel_model in enumerate(telescope_model):
190
+ # Looping over telescopes
191
+ for count, (tel_name, tel_model) in enumerate(telescope_model.items()):
137
192
  tel_config_file = tel_model.get_config_file(no_export=True).name
138
- file.write(f"%{layout[count].name}\n")
193
+ file.write(f"%{tel_name}\n")
139
194
  file.write(f"#elif TELESCOPE == {count + 1}\n\n")
140
195
  file.write(f"# include <{tel_config_file}>\n\n")
141
- file.write("#endif \n\n")
196
+ file.write("#endif \n\n") # configuration files need to end with \n\n
142
197
 
143
198
  def write_single_mirror_list_file(
144
199
  self, mirror_number, mirrors, single_mirror_list_file, set_focal_length_to_zero=False
145
200
  ):
146
201
  """
147
- Writes the sim_telarray mirror list file for a single mirror.
202
+ Write the sim_telarray mirror list file for a single mirror.
148
203
 
149
204
  Parameters
150
205
  ----------
@@ -190,8 +245,16 @@ class SimtelConfigWriter:
190
245
 
191
246
  def _write_header(self, file, title, comment_char="%"):
192
247
  """
193
- Writes a generic header. commen_char is the character to be used for comments, which \
194
- differs among ctypes of config files.
248
+ Write a generic header.
249
+
250
+ Parameters
251
+ ----------
252
+ file: file
253
+ File to write.
254
+ title: str
255
+ Title of the header.
256
+ comment_char: str
257
+ Character to be used for comments, which differs among ctypes of config files.
195
258
  """
196
259
  header = f"{comment_char}{50 * '='}\n"
197
260
  header += f"{comment_char} {title}\n"
@@ -212,12 +275,130 @@ class SimtelConfigWriter:
212
275
  header += f"{comment_char}\n"
213
276
  file.write(header)
214
277
 
215
- def _write_site_parameters(self, file, site_parameters):
216
- """Writes site parameters."""
278
+ def _write_site_parameters(self, file, site_model, model_path, telescope_model):
279
+ """
280
+ Write site parameters.
281
+
282
+ Parameters
283
+ ----------
284
+ file: file
285
+ File to write on.
286
+ site_model: SiteModel
287
+ Site model.
288
+ model_path: Path
289
+ Path to the model for writing of additional files.
290
+ telescope_model: dict of TelescopeModel
291
+ Telescope models.
292
+ """
217
293
  file.write(self.TAB + "% Site parameters\n")
218
- for par in site_parameters:
219
- if par in self.PARS_NOT_TO_WRITE:
220
- continue
221
- value = site_parameters[par]["Value"]
222
- file.write(self.TAB + f"{par} = {value}\n")
294
+ _site_parameters = site_model.get_simtel_parameters()
295
+ for par, value in _site_parameters.items():
296
+ _simtel_name = names.get_simulation_software_name_from_parameter_name(
297
+ par,
298
+ simulation_software="sim_telarray",
299
+ search_telescope_parameters=False,
300
+ search_site_parameters=True,
301
+ )
302
+ _simtel_name, value = self._convert_model_parameters_to_simtel_format(
303
+ _simtel_name, value, model_path, telescope_model
304
+ )
305
+ if _simtel_name is not None:
306
+ file.write(f"{self.TAB}{_simtel_name} = {value}\n")
307
+ _simtel_meta = self._get_simtel_metadata("site")
308
+ for _simtel_name, value in _simtel_meta.items():
309
+ file.write(f"{self.TAB}{_simtel_name} = {value}\n")
223
310
  file.write("\n")
311
+
312
+ def _convert_model_parameters_to_simtel_format(
313
+ self, simtel_name, value, model_path, telescope_model
314
+ ):
315
+ """
316
+ Convert model parameter value to simtel format.
317
+
318
+ This might involve format or unit conversion and writing to a parameter file.
319
+
320
+ Parameters
321
+ ----------
322
+ simtel_name: str
323
+ Parameter name.
324
+ value: any
325
+ Value to convert.
326
+ model_path: Path
327
+ Path to the model for writing of additional files.
328
+ telescope_model: dict of TelescopeModel
329
+ Telescope models.
330
+
331
+ Returns
332
+ -------
333
+ str, any
334
+ Converted parameter name and value.
335
+ """
336
+ conversion_dict = {
337
+ "array_triggers": self._write_array_triggers_file,
338
+ }
339
+ try:
340
+ value = conversion_dict[simtel_name](value, model_path, telescope_model)
341
+ except KeyError:
342
+ pass
343
+ return simtel_name, value
344
+
345
+ def _write_array_triggers_file(self, array_triggers, model_path, telescope_model):
346
+ """
347
+ Write array trigger definition file in simtel format.
348
+
349
+ Parameters
350
+ ----------
351
+ array_triggers: dict
352
+ Array trigger definitions.
353
+ model_path: Path
354
+ Path to the model for writing of additional files.
355
+ telescope_model: dict of TelescopeModel
356
+ Telescope models.
357
+ """
358
+ trigger_per_telescope_type = {}
359
+ for count, tel_name in enumerate(telescope_model.keys()):
360
+ telescope_type = names.get_array_element_type_from_name(tel_name)
361
+ trigger_per_telescope_type.setdefault(telescope_type, []).append(count + 1)
362
+
363
+ trigger_lines = {}
364
+ for tel_type, tel_list in trigger_per_telescope_type.items():
365
+ trigger_dict = self._get_array_triggers_for_telescope_type(array_triggers, tel_type)
366
+ trigger_lines[tel_type] = f"Trigger {trigger_dict['multiplicity']['value']} of "
367
+ trigger_lines[tel_type] += ", ".join(map(str, tel_list))
368
+ width = trigger_dict["width"]["value"] * u.Unit(trigger_dict["width"]["unit"]).to("ns")
369
+ trigger_lines[tel_type] += f" width {width}"
370
+ if trigger_dict.get("hard_stereo"):
371
+ trigger_lines[tel_type] += " hard_stereo"
372
+ if all(trigger_dict["min_separation"][key] is not None for key in ["value", "unit"]):
373
+ min_sep = trigger_dict["min_separation"]["value"] * u.Unit(
374
+ trigger_dict["min_separation"]["unit"]
375
+ ).to("m")
376
+ trigger_lines[tel_type] += f" minsep {min_sep}"
377
+
378
+ array_triggers_file = "array_triggers.dat"
379
+ with open(model_path / array_triggers_file, "w", encoding="utf-8") as file:
380
+ file.write("# Array trigger definition\n")
381
+ file.writelines(f"{line}\n" for line in trigger_lines.values())
382
+
383
+ return array_triggers_file
384
+
385
+ def _get_array_triggers_for_telescope_type(self, array_triggers, telescope_type):
386
+ """
387
+ Get array trigger for a specific telescope type.
388
+
389
+ Parameters
390
+ ----------
391
+ array_triggers: dict
392
+ Array trigger definitions.
393
+ telescope_type: str
394
+ Telescope type.
395
+
396
+ Returns
397
+ -------
398
+ dict
399
+ Array trigger for the telescope type.
400
+ """
401
+ for trigger_dict in array_triggers:
402
+ if trigger_dict["name"] == telescope_type + "_array":
403
+ return trigger_dict
404
+ return None
@@ -1,3 +1,5 @@
1
+ """Read sim_telarray events from file."""
2
+
1
3
  import logging
2
4
  import math
3
5
  from copy import copy
@@ -6,16 +8,18 @@ import astropy.units as u
6
8
  import numpy as np
7
9
  from eventio.simtel import SimTelFile
8
10
 
9
- __all__ = ["InconsistentInputFile", "SimtelEvents"]
11
+ __all__ = ["InconsistentInputFileError", "SimtelIOEvents"]
10
12
 
11
13
 
12
- class InconsistentInputFile(Exception):
14
+ class InconsistentInputFileError(Exception):
13
15
  """Exception for inconsistent input file."""
14
16
 
15
17
 
16
- class SimtelEvents:
18
+ class SimtelIOEvents:
17
19
  """
18
- This class handle sim_telarray events. sim_telarray files are read with eventio package.
20
+ Read sim_telarray events from file.
21
+
22
+ sim_telarray files are read with eventio package.
19
23
 
20
24
  Parameters
21
25
  ----------
@@ -24,9 +28,7 @@ class SimtelEvents:
24
28
  """
25
29
 
26
30
  def __init__(self, input_files=None):
27
- """
28
- Initialize SimtelEvents.
29
- """
31
+ """Initialize SimtelIOEvents."""
30
32
  self._logger = logging.getLogger(__name__)
31
33
  self.load_input_files(input_files)
32
34
  if self.number_of_files > 0:
@@ -54,7 +56,6 @@ class SimtelEvents:
54
56
 
55
57
  for file in files:
56
58
  self.input_files.append(file)
57
- return
58
59
 
59
60
  @property
60
61
  def number_of_files(self):
@@ -69,10 +70,10 @@ class SimtelEvents:
69
70
 
70
71
  def load_header_and_summary(self):
71
72
  """
72
- Read MC header from sim_telarray files and store it into _mc_header. Also fills \
73
- summary_events with energy and core radius of triggered events.
74
- """
73
+ Read MC header from sim_telarray files and store it into _mc_header.
75
74
 
75
+ Also fills summary_events with energy and core radius of triggered events.
76
+ """
76
77
  self._number_of_files = len(self.input_files)
77
78
  keys_to_grab = [
78
79
  "obsheight",
@@ -119,7 +120,7 @@ class SimtelEvents:
119
120
  if not _are_headers_consistent(self._mc_header, f.mc_run_headers[0]):
120
121
  msg = "MC header pamameters from different files are inconsistent"
121
122
  self._logger.error(msg)
122
- raise InconsistentInputFile(msg)
123
+ raise InconsistentInputFileError(msg)
123
124
 
124
125
  is_first_file = False
125
126
 
@@ -154,13 +155,10 @@ class SimtelEvents:
154
155
  energy_range = self._validate_energy_range(energy_range)
155
156
  core_max = self._validate_core_max(core_max)
156
157
 
157
- is_in_energy_range = list(
158
- map(
159
- lambda e: energy_range[0] < e < energy_range[1],
160
- self.summary_events["energy"],
161
- )
162
- )
163
- is_in_core_range = list(map(lambda r: r < core_max, self.summary_events["r_core"]))
158
+ is_in_energy_range = [
159
+ energy_range[0] < e < energy_range[1] for e in self.summary_events["energy"]
160
+ ]
161
+ is_in_core_range = [r < core_max for r in self.summary_events["r_core"]]
164
162
  return np.sum(np.array(is_in_energy_range) * np.array(is_in_core_range))
165
163
 
166
164
  @u.quantity_input(core_max=u.m)
@@ -203,8 +201,9 @@ class SimtelEvents:
203
201
  @u.quantity_input(core_max=u.m)
204
202
  def count_simulated_events(self, energy_range=None, core_max=None):
205
203
  """
206
- Count (or calculate) number of simulated events within a certain energy range and \
207
- core radius, based on the simulated power law.
204
+ Determine number of simulated events within a certain energy range and core radius.
205
+
206
+ Use the simulated power law.
208
207
  This calculation assumes the simulated spectrum is given by a single power law.
209
208
 
210
209
  Parameters
@@ -236,8 +235,9 @@ class SimtelEvents:
236
235
 
237
236
  def _validate_energy_range(self, energy_range):
238
237
  """
239
- Returns the default energy range from mc_header in case energy_range=None.
240
- Checks units, convert it to TeV and return it in the right format, otherwise.
238
+ Return the default energy range from mc_header in case energy_range=None.
239
+
240
+ Check units, convert it to TeV and return it in the right format, otherwise.
241
241
  """
242
242
  if energy_range is None:
243
243
  return self._mc_header["E_range"]
@@ -258,7 +258,8 @@ class SimtelEvents:
258
258
 
259
259
  def _validate_core_max(self, core_max):
260
260
  """
261
- Returns the default core_max from mc_header in case core_max=None.
262
- Checks units, convert it to m and return it in the right format, otherwise.
261
+ Return the default core_max from mc_header in case core_max=None.
262
+
263
+ Check units, convert it to m and return it in the right format, otherwise.
263
264
  """
264
265
  return self._mc_header["core_range"][1] if core_max is None else core_max.to(u.m).value