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,145 @@
1
+ """Simulation runner for array simulations."""
2
+
3
+ import logging
4
+
5
+ from simtools.io_operations import io_handler
6
+ from simtools.runners.simtel_runner import InvalidOutputFileError, SimtelRunner
7
+
8
+ __all__ = ["SimulatorArray"]
9
+
10
+
11
+ class SimulatorArray(SimtelRunner):
12
+ """
13
+ SimulatorArray is the interface with sim_telarray to perform array simulations.
14
+
15
+ Parameters
16
+ ----------
17
+ corsika_config_data: CorsikaConfig
18
+ CORSIKA configuration.
19
+ simtel_path: str or Path
20
+ Location of source of the sim_telarray/CORSIKA package.
21
+ label: str
22
+ Instance label.
23
+ use_multipipe: bool
24
+ Use multipipe to run CORSIKA and sim_telarray.
25
+ """
26
+
27
+ def __init__(
28
+ self,
29
+ corsika_config,
30
+ simtel_path,
31
+ label=None,
32
+ use_multipipe=False,
33
+ sim_telarray_seeds=None,
34
+ ):
35
+ """Initialize SimulatorArray."""
36
+ self._logger = logging.getLogger(__name__)
37
+ self._logger.debug("Init SimulatorArray")
38
+ super().__init__(
39
+ label=label,
40
+ simtel_path=simtel_path,
41
+ corsika_config=corsika_config,
42
+ use_multipipe=use_multipipe,
43
+ )
44
+
45
+ self.sim_telarray_seeds = sim_telarray_seeds
46
+ self.corsika_config = corsika_config
47
+ self.io_handler = io_handler.IOHandler()
48
+ self._log_file = None
49
+
50
+ def _make_run_command(self, run_number=None, input_file=None):
51
+ """
52
+ Build and return the command to run simtel_array.
53
+
54
+ Parameters
55
+ ----------
56
+ input_file: str
57
+ Full path of the input CORSIKA file
58
+ run_number: int (optional)
59
+ run number
60
+
61
+ Returns
62
+ -------
63
+ str
64
+ Command to run sim_telarray.
65
+ """
66
+ self._log_file = self.get_file_name(file_type="log", run_number=run_number)
67
+ histogram_file = self.get_file_name(file_type="histogram", run_number=run_number)
68
+ output_file = self.get_file_name(file_type="output", run_number=run_number)
69
+
70
+ # Array
71
+ command = str(self._simtel_path.joinpath("sim_telarray/bin/sim_telarray"))
72
+ command += f" -c {self.corsika_config.array_model.get_config_file()}"
73
+ command += f" -I{self.corsika_config.array_model.get_config_directory()}"
74
+ command += super().get_config_option("telescope_theta", self.corsika_config.zenith_angle)
75
+ command += super().get_config_option("telescope_phi", self.corsika_config.azimuth_angle)
76
+ command += super().get_config_option(
77
+ "power_law",
78
+ SimulatorArray.get_power_law_for_sim_telarray_histograms(
79
+ self.corsika_config.primary_particle
80
+ ),
81
+ )
82
+ command += super().get_config_option("histogram_file", histogram_file)
83
+ command += super().get_config_option("output_file", output_file)
84
+ command += super().get_config_option("random_state", "none")
85
+ if self.sim_telarray_seeds:
86
+ command += super().get_config_option("random_seed", self.sim_telarray_seeds)
87
+ command += super().get_config_option("show", "all")
88
+ command += f" {input_file}"
89
+ command += f" > {self._log_file} 2>&1 || exit"
90
+
91
+ return command
92
+
93
+ def _check_run_result(self, run_number=None):
94
+ """
95
+ Check if simtel output file exists.
96
+
97
+ Parameters
98
+ ----------
99
+ run_number: int
100
+ Run number.
101
+
102
+ Returns
103
+ -------
104
+ bool
105
+ True if simtel output file exists.
106
+
107
+ Raises
108
+ ------
109
+ InvalidOutputFileError
110
+ If simtel output file does not exist.
111
+ """
112
+ output_file = self.get_file_name(file_type="output", run_number=run_number)
113
+ if not output_file.exists():
114
+ msg = f"sim_telarray output file {output_file} does not exist."
115
+ self._logger.error(msg)
116
+ raise InvalidOutputFileError(msg)
117
+ self._logger.debug(f"simtel_array output file {output_file} exists.")
118
+ return True
119
+
120
+ @staticmethod
121
+ def get_power_law_for_sim_telarray_histograms(primary):
122
+ """
123
+ Get the power law index for sim_telarray.
124
+
125
+ Events will be histogrammed in sim_telarray with a weight according to
126
+ the difference between this exponent and the one used for the shower simulations.
127
+
128
+ Parameters
129
+ ----------
130
+ primary: str
131
+ Primary particle.
132
+
133
+ Returns
134
+ -------
135
+ float
136
+ Power law index.
137
+ """
138
+ power_laws = {
139
+ "gamma": 2.5,
140
+ "electron": 3.3,
141
+ }
142
+ if primary.name in power_laws:
143
+ return power_laws[primary.name]
144
+
145
+ return 2.68
@@ -1,15 +1,18 @@
1
+ """Simulation runner for camera efficiency calculations."""
2
+
1
3
  import logging
2
4
  from pathlib import Path
3
5
 
4
- from simtools.simtel.simtel_runner import SimtelRunner
6
+ from simtools.model.model_parameter import InvalidModelParameterError
7
+ from simtools.runners.simtel_runner import SimtelRunner
8
+ from simtools.utils import general
5
9
 
6
- __all__ = ["SimtelRunnerCameraEfficiency"]
10
+ __all__ = ["SimulatorCameraEfficiency"]
7
11
 
8
12
 
9
- class SimtelRunnerCameraEfficiency(SimtelRunner):
13
+ class SimulatorCameraEfficiency(SimtelRunner):
10
14
  """
11
- SimtelRunnerCameraEfficiency is the interface with the testeff tool of sim_telarray to perform\
12
- camera efficiency simulations.
15
+ Interface with the testeff tool of sim_telarray to perform camera efficiency simulations.
13
16
 
14
17
  Parameters
15
18
  ----------
@@ -17,31 +20,32 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
17
20
  Instance of TelescopeModel class.
18
21
  label: str
19
22
  Instance label. Important for output file naming.
20
- simtel_source_path: str or Path
23
+ simtel_path: str or Path
21
24
  Location of sim_telarray installation.
22
25
  file_simtel: str or Path
23
- location of the sim_telarray testeff tool output file.
26
+ Location of the sim_telarray testeff tool output file.
24
27
  zenith_angle: float
25
- The zenith angle given in the config to CameraEfficiency.
28
+ Zenith angle given in the config to CameraEfficiency.
29
+ nsb_spectrum: str or Path
30
+ Path to the nsb spectrum file.
26
31
  """
27
32
 
28
33
  def __init__(
29
34
  self,
30
35
  telescope_model,
31
36
  label=None,
32
- simtel_source_path=None,
37
+ simtel_path=None,
33
38
  file_simtel=None,
34
39
  file_log=None,
35
40
  zenith_angle=None,
36
41
  nsb_spectrum=None,
42
+ skip_correction_to_nsb_spectrum=False,
37
43
  ):
38
- """
39
- Initialize SimtelRunner.
40
- """
44
+ """Initialize SimtelRunner."""
41
45
  self._logger = logging.getLogger(__name__)
42
- self._logger.debug("Init SimtelRunnerCameraEfficiency")
46
+ self._logger.debug("Init SimulatorCameraEfficiency")
43
47
 
44
- super().__init__(label=label, simtel_source_path=simtel_source_path)
48
+ super().__init__(label=label, simtel_path=simtel_path)
45
49
 
46
50
  self._telescope_model = telescope_model
47
51
  self.label = label if label is not None else self._telescope_model.label
@@ -50,29 +54,28 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
50
54
  self._file_log = file_log
51
55
  self.zenith_angle = zenith_angle
52
56
  self.nsb_spectrum = nsb_spectrum
57
+ self.skip_correction_to_nsb_spectrum = skip_correction_to_nsb_spectrum
53
58
 
54
59
  @property
55
60
  def nsb_spectrum(self):
56
- """nsb_spectrum property"""
61
+ """nsb_spectrum property."""
57
62
  return self._nsb_spectrum
58
63
 
59
64
  @nsb_spectrum.setter
60
65
  def nsb_spectrum(self, nsb_spectrum):
61
- """Setter for nsb_spectrum"""
66
+ """Setter for nsb_spectrum."""
62
67
  if nsb_spectrum is not None:
63
68
  self._nsb_spectrum = self._validate_or_fix_nsb_spectrum_file_format(nsb_spectrum)
64
69
  else:
65
- self._nsb_spectrum = None
66
-
67
- def _shall_run(self, **kwargs): # pylint: disable=unused-argument; applies only to this line
68
- """Tells if simulations should be run again based on the existence of output files."""
69
- return not self._file_simtel.exists()
70
-
71
- def _make_run_command(self, **kwargs): # pylint: disable=unused-argument
72
- """
73
- Prepare the command used to run testeff
74
- """
70
+ self._nsb_spectrum = (
71
+ self._telescope_model.config_file_directory
72
+ / Path(self._telescope_model.get_parameter_value("nsb_reference_spectrum")).name
73
+ )
75
74
 
75
+ def _make_run_command(
76
+ self, run_number=None, input_file=None
77
+ ): # pylint: disable=unused-argument
78
+ """Prepare the command used to run testeff."""
76
79
  self._logger.debug("Preparing the command to run testeff")
77
80
 
78
81
  # Processing camera pixel features
@@ -81,20 +84,21 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
81
84
  pixel_diameter = self._telescope_model.camera.get_pixel_diameter()
82
85
 
83
86
  # Processing focal length
84
- focal_length = self._telescope_model.get_parameter_value_with_unit("effective_focal_length")
85
- if focal_length == 0.0:
86
- self._logger.warning("Using focal_length because effective_focal_length is 0")
87
- focal_length = self._telescope_model.get_parameter_value_with_unit("focal_length")
87
+ focal_length = self._telescope_model.get_telescope_effective_focal_length("m", True)
88
88
 
89
89
  # Processing mirror class
90
90
  mirror_class = 1
91
- if self._telescope_model.has_parameter("mirror_class"):
91
+ try:
92
92
  mirror_class = self._telescope_model.get_parameter_value("mirror_class")
93
+ except InvalidModelParameterError:
94
+ pass
93
95
 
94
96
  # Processing camera transmission
95
97
  camera_transmission = 1
96
- if self._telescope_model.has_parameter("camera_transmission"):
98
+ try:
97
99
  camera_transmission = self._telescope_model.get_parameter_value("camera_transmission")
100
+ except KeyError:
101
+ pass
98
102
 
99
103
  # Processing camera filter
100
104
  # A special case is testeff does not support 2D distributions
@@ -117,21 +121,26 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
117
121
  "mirror_reflectivity", "secondary_mirror_incidence_angle"
118
122
  )
119
123
 
120
- command = str(self._simtel_source_path.joinpath("sim_telarray/bin/testeff"))
124
+ command = str(self._simtel_path.joinpath("sim_telarray/testeff"))
125
+ if self.skip_correction_to_nsb_spectrum:
126
+ command += " -nc" # Do not apply correction to original altitude where B&E was derived
127
+ command += " -I" # Clear the fall-back configuration directories
128
+ command += f" -I{self._telescope_model.config_file_directory}"
121
129
  if self.nsb_spectrum is not None:
122
130
  command += f" -fnsb {self.nsb_spectrum}"
123
131
  command += " -nm -nsb-extra"
124
- command += f" -alt {self._telescope_model.get_parameter_value('altitude')}"
132
+ command += f" -alt {self._telescope_model.get_parameter_value('corsika_observation_level')}"
125
133
  command += f" -fatm {self._telescope_model.get_parameter_value('atmospheric_transmission')}"
126
- command += f" -flen {focal_length.to('m').value}"
134
+ command += f" -flen {focal_length}"
127
135
  command += f" {pixel_shape_cmd} {pixel_diameter}"
128
- if mirror_class == 1:
136
+ if mirror_class == 0:
129
137
  command += f" -fmir {self._telescope_model.get_parameter_value('mirror_list')}"
130
138
  command += f" -fref {mirror_reflectivity}"
131
139
  if mirror_class == 2:
132
140
  command += " -m2"
133
141
  command += f" -fref2 {mirror_reflectivity_secondary}"
134
- command += f" -teltrans {self._telescope_model.get_telescope_transmission_parameters()[0]}"
142
+ command += " -teltrans "
143
+ command += f"{self._telescope_model.get_parameter_value('telescope_transmission')[0]}"
135
144
  command += f" -camtrans {camera_transmission}"
136
145
  command += f" -fflt {camera_filter_file}"
137
146
  command += (
@@ -142,18 +151,16 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
142
151
  )
143
152
  command += f" -fqe {self._telescope_model.get_parameter_value('quantum_efficiency')}"
144
153
  command += " 200 1000" # lmin and lmax
145
- command += " 300 26" # Xmax, ioatm (Konrad always uses 26)
154
+ command += " 300" # Xmax
155
+ command += f" {self._telescope_model.get_parameter_value('atmospheric_profile')}"
146
156
  command += f" {self.zenith_angle}"
147
157
  command += f" 2>{self._file_log}"
148
158
  command += f" >{self._file_simtel}"
149
159
 
150
- # Moving to sim_telarray directory before running
151
- command = f"cd {self._simtel_source_path.joinpath('sim_telarray')} && {command}"
160
+ return f"cd {self._simtel_path.joinpath('sim_telarray')} && {command}"
152
161
 
153
- return command
154
-
155
- def _check_run_result(self, **kwargs): # pylint: disable=unused-argument
156
- """Checking run results
162
+ def _check_run_result(self, run_number=None): # pylint: disable=unused-argument
163
+ """Check run results.
157
164
 
158
165
  Raises
159
166
  ------
@@ -171,10 +178,18 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
171
178
  def _get_one_dim_distribution(self, two_dim_parameter, weighting_distribution_parameter):
172
179
  """
173
180
  Calculate an average one-dimensional curve for testeff from the two-dimensional curve.
181
+
174
182
  The two-dimensional distribution is provided in two_dim_parameter. The distribution
175
183
  of weights to use for averaging the two-dimensional distribution is given in
176
184
  weighting_distribution_parameter.
177
185
 
186
+ Parameters
187
+ ----------
188
+ two_dim_parameter: str
189
+ The name of the two-dimensional distribution parameter.
190
+ weighting_distribution_parameter: str
191
+ The name of the parameter with the distribution of weights.
192
+
178
193
  Returns
179
194
  -------
180
195
  one_dim_file: Path
@@ -203,27 +218,36 @@ class SimtelRunnerCameraEfficiency(SimtelRunner):
203
218
  new_file_name = (
204
219
  f"weighted_average_1D_{self._telescope_model.get_parameter_value(two_dim_parameter)}"
205
220
  )
206
- one_dim_file = self._telescope_model.export_table_to_model_directory(
221
+ return self._telescope_model.export_table_to_model_directory(
207
222
  new_file_name, distribution_to_export
208
223
  )
209
224
 
210
- return one_dim_file
211
-
212
225
  def _validate_or_fix_nsb_spectrum_file_format(self, nsb_spectrum_file):
213
226
  """
214
227
  Validate or fix the nsb spectrum file format.
228
+
215
229
  The nsb spectrum file format required by sim_telarray has three columns:
216
- wavelength (nm), ignored, NSB flux [1e9 * ph/m2/s/sr/nm],
230
+ wavelength (nm), ignored, NSB flux [1e9 * ph/m2/s/sr/nm],
217
231
  where the second column is ignored by sim_telarray and the third is used for the NSB flux.
218
232
  This function makes sure the file has at least three columns,
219
233
  by copying the second column to the third.
220
- """
221
234
 
235
+ Parameters
236
+ ----------
237
+ nsb_spectrum_file: str or Path
238
+ The path to the nsb spectrum file.
239
+
240
+ Returns
241
+ -------
242
+ validated_nsb_spectrum_file: Path
243
+ The path to the validated nsb spectrum file.
244
+ """
222
245
  validated_nsb_spectrum_file = (
223
- self._telescope_model.get_config_directory() / Path(nsb_spectrum_file).name
246
+ self._telescope_model.config_file_directory / Path(nsb_spectrum_file).name
224
247
  )
225
- with open(nsb_spectrum_file, "r", encoding="utf-8") as file:
226
- lines = file.readlines()
248
+
249
+ lines = general.read_file_encoded_in_utf_or_latin(nsb_spectrum_file)
250
+
227
251
  with open(validated_nsb_spectrum_file, "w", encoding="utf-8") as file:
228
252
  for line in lines:
229
253
  if line.startswith("#"):