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,353 @@
1
+ #!/usr/bin/python3
2
+ """Read model parameters and configuration from sim_telarray configuration files."""
3
+
4
+ import logging
5
+ import re
6
+
7
+ import numpy as np
8
+
9
+ import simtools.utils.general as gen
10
+
11
+ __all__ = ["SimtelConfigReader"]
12
+
13
+
14
+ class SimtelConfigReader:
15
+ """
16
+ Reads model parameters from configuration files and converts to the simtools representation.
17
+
18
+ The output format are simtool-db-style json dicts.
19
+ Model parameters are read from sim_telarray configuration files.
20
+ The sim_telarray configuration can be generated using e.g., the following sim_telarray command:
21
+
22
+ ... code-block:: console
23
+
24
+ sim_telarray/bin/sim_telarray \
25
+ -c sim_telarray/cfg/CTA/CTA-PROD6-LaPalma.cfg\
26
+ -C limits=no-internal -C initlist=no-internal -C list=no-internal\
27
+ -C typelist=no-internal -C maximum_telescopes=30\
28
+ -DNSB_AUTOSCALE -DNECTARCAM -DHYPER_LAYOUT\
29
+ -DNUM_TELESCOPES=30 /dev/null 2>|/dev/null | grep '(@cfg)'
30
+
31
+ Parameters
32
+ ----------
33
+ schema_file: str
34
+ Schema file describing the model parameter.
35
+ simtel_config_file: str or Path
36
+ Path of the file to read from.
37
+ simtel_telescope_name: str
38
+ Telescope name (sim_telarray convention)
39
+ parameter_name: str
40
+ Parameter name (default: read from schema file)
41
+ camera_pixels: int
42
+ Number of camera pixels
43
+ """
44
+
45
+ def __init__(
46
+ self,
47
+ schema_file,
48
+ simtel_config_file,
49
+ simtel_telescope_name,
50
+ parameter_name=None,
51
+ camera_pixels=None,
52
+ ):
53
+ """Initialize SimtelConfigReader."""
54
+ self._logger = logging.getLogger(__name__)
55
+ self._logger.debug("Init SimtelConfigReader")
56
+
57
+ self.schema_file = schema_file
58
+ self.schema_dict = (
59
+ gen.collect_data_from_file(file_name=self.schema_file)
60
+ if self.schema_file is not None
61
+ else None
62
+ )
63
+ self.parameter_name = self.schema_dict.get("name") if self.schema_dict else parameter_name
64
+ self.simtel_parameter_name = self._get_simtel_parameter_name(self.parameter_name)
65
+ self.simtel_telescope_name = simtel_telescope_name
66
+ self.camera_pixels = camera_pixels
67
+ self.parameter_dict = self.read_simtel_config_file(
68
+ simtel_config_file, simtel_telescope_name
69
+ )
70
+
71
+ def _should_skip_limits_check(self, data_type):
72
+ """Check if limits should be skipped."""
73
+ return data_type == "limits" and self.parameter_dict.get("type") == "bool"
74
+
75
+ def _get_schema_values(self, data_type):
76
+ """Check schema values for limits and defaults."""
77
+ try:
78
+ if data_type == "limits":
79
+ _from_schema = [
80
+ self.schema_dict["data"][0]["allowed_range"].get("min"),
81
+ self.schema_dict["data"][0]["allowed_range"].get("max"),
82
+ ]
83
+ return _from_schema[0] if _from_schema[1] is None else _from_schema
84
+ if len(self.schema_dict["data"]) == 1:
85
+ return self.schema_dict["data"][0]["default"]
86
+ return [data.get("default") for data in self.schema_dict["data"]]
87
+ except (KeyError, IndexError):
88
+ return None
89
+
90
+ @staticmethod
91
+ def _values_match(_from_simtel, _from_schema):
92
+ """Check if values match (are close for floats)."""
93
+ try:
94
+ if not isinstance(_from_schema, list | np.ndarray) and _from_simtel == _from_schema:
95
+ return True
96
+ except ValueError:
97
+ pass
98
+
99
+ try:
100
+ if np.all(np.isclose(_from_simtel, _from_schema)):
101
+ return True
102
+ except (TypeError, ValueError):
103
+ pass
104
+
105
+ return False
106
+
107
+ def _log_mismatch_warning(self, data_type, _from_simtel, _from_schema):
108
+ """Log mismatch warning."""
109
+ self._logger.warning(f"Values for {data_type} do not match:")
110
+ self._logger.warning(
111
+ f" from simtel: {self.simtel_parameter_name} {_from_simtel} ({type(_from_simtel)})"
112
+ )
113
+ self._logger.warning(
114
+ f" from schema: {self.parameter_name} {_from_schema} ({type(_from_schema)})"
115
+ )
116
+
117
+ def compare_simtel_config_with_schema(self):
118
+ """
119
+ Compare limits and defaults reported by simtel_array with schema.
120
+
121
+ This is mostly for debugging purposes and includes simple printing.
122
+ Check for differences in 'default' and 'limits' entries.
123
+ """
124
+ for data_type in ["default", "limits"]:
125
+ _from_simtel = self.parameter_dict.get(data_type)
126
+ if self._should_skip_limits_check(data_type):
127
+ continue
128
+
129
+ _from_schema = self._get_schema_values(data_type)
130
+ if isinstance(_from_schema, list):
131
+ _from_schema = np.array(_from_schema, dtype=np.dtype(self.parameter_dict["type"]))
132
+
133
+ if self._values_match(_from_simtel, _from_schema):
134
+ self._logger.debug(f"Values for {data_type} match")
135
+ else:
136
+ self._log_mismatch_warning(data_type, _from_simtel, _from_schema)
137
+
138
+ def read_simtel_config_file(self, simtel_config_file, simtel_telescope_name):
139
+ """
140
+ Read sim_telarray configuration file and return a dictionary with the parameter values.
141
+
142
+ Parameters
143
+ ----------
144
+ simtel_config_file: str or Path
145
+ Path of the file to read from.
146
+ simtel_telescope_name: str
147
+ Telescope name (sim_telarray convention)
148
+
149
+ Returns
150
+ -------
151
+ dict
152
+ Dictionary with the parameter values.
153
+
154
+ """
155
+ self._logger.debug(
156
+ f"Reading simtel config file {simtel_config_file} "
157
+ f"for parameter {self.parameter_name}"
158
+ )
159
+ matching_lines = {}
160
+ try:
161
+ with open(simtel_config_file, encoding="utf-8") as file:
162
+ for line in file:
163
+ # split line into parts (space, tabs, comma separated)
164
+ parts_of_lines = re.split(r",\s*|\s+", line.strip())
165
+ if self.simtel_parameter_name == parts_of_lines[1].upper():
166
+ matching_lines[parts_of_lines[0]] = parts_of_lines[2:]
167
+ except FileNotFoundError as exc:
168
+ self._logger.error(f"File {simtel_config_file} not found.")
169
+ raise exc
170
+ if len(matching_lines) == 0:
171
+ self._logger.info(f"No entries found for parameter {self.simtel_parameter_name}")
172
+ return None
173
+
174
+ _para_dict = {}
175
+ # first: extract line type (required for conversions and dimension)
176
+ _para_dict["type"], _para_dict["dimension"] = self._get_type_and_dimension_from_simtel_cfg(
177
+ matching_lines["type"]
178
+ )
179
+ # then: extract other fields
180
+ # (order of keys matter; not all field are present for all parameters)
181
+ for key in ["default", simtel_telescope_name, "limits"]:
182
+ try:
183
+ _para_dict[key], _ = self._add_value_from_simtel_cfg(
184
+ matching_lines[key],
185
+ dtype=_para_dict.get("type"),
186
+ n_dim=_para_dict.get("dimension"),
187
+ default=_para_dict.get("default"),
188
+ )
189
+ except KeyError:
190
+ pass
191
+
192
+ return _para_dict
193
+
194
+ def _resolve_all_in_column(self, column):
195
+ """
196
+ Resolve 'all' entries in a column.
197
+
198
+ This needs to resolve the following cases:
199
+ no 'all' in any entry; ['all:', '5'], ['all: 5'], ['all:5', '3:1']
200
+ This function is fine-tuned to the simtel configuration output.
201
+
202
+ Parameters
203
+ ----------
204
+ column: list
205
+ List of strings to resolve.
206
+
207
+ Returns
208
+ -------
209
+ list
210
+ List of resolved strings.
211
+
212
+ """
213
+ # don't do anything if all string items in column do not start with 'all'
214
+ if not any(isinstance(item, str) and item.startswith("all") for item in column):
215
+ return column, {}
216
+
217
+ self._logger.debug(f"Resolving 'all' entries in column: {column}")
218
+ # remove 'all:' entries
219
+ column = [item for item in column if item not in ("all:", "all")]
220
+ # resolve 'all:5' type entries
221
+ column = [
222
+ item.split(":")[1].replace(" ", "") if item.startswith("all:") else item
223
+ for item in column
224
+ ]
225
+ # find 'index:value' type entries
226
+ except_from_all = {}
227
+ for item in column:
228
+ if ":" in item:
229
+ index, value = item.split(":")
230
+ except_from_all[index] = value
231
+ # finally remove entries containing ':'
232
+ column = [item for item in column if ":" not in item]
233
+
234
+ return column, except_from_all
235
+
236
+ def _add_value_from_simtel_cfg(self, column, dtype=None, n_dim=1, default=None):
237
+ """
238
+ Extract value(s) from simtel configuration file columns.
239
+
240
+ This function is fine-tuned to the simtel configuration output.
241
+
242
+ Parameters
243
+ ----------
244
+ column: list
245
+ List of strings to extract value from.
246
+ dtype: str
247
+ Data type to convert value to.
248
+ n_dim: int
249
+ Length of array to be returned.
250
+ default: object
251
+ Default value to extend array to required length.
252
+
253
+ Returns
254
+ -------
255
+ object, int
256
+ Values extracted from column. Of object is a list of array, return length of array.
257
+
258
+ """
259
+ # string represents a lists of values (space or comma separated)
260
+ if len(column) == 1:
261
+ column = column[0].split(",") if "," in column[0] else column[0].split(" ")
262
+ self._logger.debug(
263
+ f"Adding value from simtel config: {column} (n_dim={n_dim}, default={default})"
264
+ )
265
+ column = [None if item.lower() == "none" else item for item in column]
266
+ column, except_from_all = self._resolve_all_in_column(column)
267
+ # extend array to required length (simtel uses sometimes 'all:' for all entries)
268
+ if n_dim > 1 and len(column) < n_dim:
269
+ try:
270
+ # skip formatting: black reformats and violates E203
271
+ column += default[len(column):] # fmt: skip
272
+ except TypeError:
273
+ # extend array to required length using previous value
274
+ column.extend([column[-1]] * (n_dim - len(column)))
275
+ for index, value in except_from_all.items():
276
+ column[int(index)] = value
277
+ if dtype == "bool":
278
+ column = np.array([bool(int(item)) for item in column])
279
+
280
+ return self._process_column(column, dtype)
281
+
282
+ def _process_column(self, column, dtype):
283
+ """
284
+ Process and return column prepared in _add_value_from_simtel_cfg.
285
+
286
+ Parameters
287
+ ----------
288
+ column: list
289
+ List of strings to process.
290
+ dtype: str
291
+ Data type to convert value to.
292
+ """
293
+ if len(column) == 1:
294
+ if column[0] is not None:
295
+ array_dtype = np.dtype(dtype) if dtype else None
296
+ processed_value = np.array(column, dtype=array_dtype)[0]
297
+ return processed_value, 1
298
+ return None, 1
299
+ if len(column) > 1:
300
+ return np.array(column, dtype=np.dtype(dtype) if dtype else None), len(column)
301
+ return None, None
302
+
303
+ def _get_type_and_dimension_from_simtel_cfg(self, column):
304
+ """
305
+ Return type and dimension from simtel configuration column.
306
+
307
+ 'Func' type from simtel is treated as string. Return number
308
+ of camera pixel for a hard-wired set up parameters.
309
+
310
+ Parameters
311
+ ----------
312
+ column: list
313
+ List of strings to extract value from.
314
+
315
+ Returns
316
+ -------
317
+ str, int
318
+ Type and dimension.
319
+
320
+ """
321
+ if column[0].lower() == "text" or column[0].lower() == "func":
322
+ return "str", 1
323
+ if column[0].lower() == "ibool":
324
+ return "bool", int(column[1])
325
+ if self.camera_pixels is not None and self.simtel_parameter_name in ["NIGHTSKY_BACKGROUND"]:
326
+ return str(np.dtype(column[0].lower())), self.camera_pixels
327
+ return str(np.dtype(column[0].lower())), int(column[1])
328
+
329
+ def _get_simtel_parameter_name(self, parameter_name):
330
+ """
331
+ Return parameter name as used in sim_telarray.
332
+
333
+ This is documented in the schema file.
334
+
335
+ Parameters
336
+ ----------
337
+ parameter_name: str
338
+ Model parameter name (as used in simtools)
339
+
340
+ Returns
341
+ -------
342
+ str
343
+ Parameter name as used in sim_telarray.
344
+
345
+ """
346
+ try:
347
+ for sim_soft in self.schema_dict["simulation_software"]:
348
+ if sim_soft["name"] == "sim_telarray":
349
+ return sim_soft["internal_parameter_name"].upper()
350
+ except (KeyError, TypeError):
351
+ pass
352
+
353
+ return parameter_name.upper()