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,3 +1,5 @@
1
+ """Helper module for reading and writing in hd5 format."""
2
+
1
3
  import logging
2
4
  from pathlib import PosixPath
3
5
 
@@ -19,6 +21,7 @@ _logger = logging.getLogger(__name__)
19
21
  def fill_hdf5_table(hist, x_bin_edges, y_bin_edges, x_label, y_label, meta_data):
20
22
  """
21
23
  Create and fill an hdf5 table with the histogram information.
24
+
22
25
  It works for both 1D and 2D distributions.
23
26
 
24
27
  Parameters
@@ -38,7 +41,6 @@ def fill_hdf5_table(hist, x_bin_edges, y_bin_edges, x_label, y_label, meta_data)
38
41
  meta_data: dict
39
42
  Dictionary with the histogram metadata.
40
43
  """
41
-
42
44
  # Complement metadata
43
45
  if x_label is not None:
44
46
  meta_data["x_bin_edges"] = sanitize_name(x_label)
@@ -1,38 +1,37 @@
1
+ """Handle input and output paths."""
2
+
1
3
  import datetime
2
4
  import logging
3
- import re
4
5
  from pathlib import Path
5
6
 
6
- __all__ = ["IOHandlerSingleton", "IOHandler"]
7
+ __all__ = ["IOHandler", "IOHandlerSingleton"]
7
8
 
8
9
 
9
- class IncompleteIOHandlerInit(Exception):
10
- """Exception raised when IOHandler is not initialized"""
10
+ class IncompleteIOHandlerInitError(Exception):
11
+ """Exception raised when IOHandler is not initialized."""
11
12
 
12
13
 
13
14
  class IOHandlerSingleton(type):
14
- """
15
- Singleton base class
16
- """
15
+ """Singleton base class."""
17
16
 
18
17
  _instances = {}
19
18
 
20
19
  def __call__(cls, *args, **kwargs):
20
+ """
21
+ Ensure a single instance of the IOHandlerSingleton class.
22
+
23
+ Creates a new instance if it doesn't exist, otherwise returns the existing instance.
24
+ """
21
25
  if cls not in cls._instances:
22
- cls._instances[cls] = super(IOHandlerSingleton, cls).__call__(*args, **kwargs)
26
+ cls._instances[cls] = super().__call__(*args, **kwargs)
23
27
  return cls._instances[cls]
24
28
 
25
29
 
26
30
  class IOHandler(metaclass=IOHandlerSingleton):
27
- """
28
- Handle input and output paths.
29
- """
31
+ """Handle input and output paths."""
30
32
 
31
33
  def __init__(self):
32
- """
33
- Initialize IOHandler.
34
-
35
- """
34
+ """Initialize IOHandler."""
36
35
  self._logger = logging.getLogger(__name__)
37
36
  self._logger.debug("Init IOHandler")
38
37
 
@@ -64,9 +63,9 @@ class IOHandler(metaclass=IOHandlerSingleton):
64
63
  self.data_path = data_path
65
64
  self.model_path = model_path
66
65
 
67
- def get_output_directory(self, label=None, sub_dir=None, dir_type="simtools"):
66
+ def get_output_directory(self, label=None, sub_dir=None):
68
67
  """
69
- Return path to output directory
68
+ Return path to output directory.
70
69
 
71
70
  Parameters
72
71
  ----------
@@ -74,12 +73,6 @@ class IOHandler(metaclass=IOHandlerSingleton):
74
73
  Instance label.
75
74
  sub_dir: str
76
75
  Name of the subdirectory (ray-tracing, model etc)
77
- dir_type: str
78
- The type of directory (e.g., 'simtools', 'test', 'simtools-result').
79
- If 'simtools-result' is used, the output directory will be returned
80
- without appending a subdirectory string when using the
81
- use_plain_output_path option. For the cause of not using use_plain_output_path,
82
- output paths appended by 'simtools-output'.
83
76
 
84
77
  Returns
85
78
  -------
@@ -92,37 +85,27 @@ class IOHandler(metaclass=IOHandlerSingleton):
92
85
  TypeError
93
86
  raised for errors while creating directory name
94
87
  """
95
-
96
- if self.use_plain_output_path:
97
- path = Path(self.output_path)
98
- else:
99
- if str(self.output_path).endswith("-output"):
100
- output_directory_prefix = Path(self.output_path)
101
- else:
102
- try:
103
- output_directory_prefix = Path(self.output_path).joinpath(
104
- re.sub(r"\-result$", "", dir_type) + "-output"
105
- )
106
- except TypeError:
107
- self._logger.error(f"Error creating output directory name from {dir_type}")
108
- raise
88
+ path = Path(self.output_path)
89
+ if not self.use_plain_output_path:
90
+ path = (
91
+ path
92
+ if str(self.output_path).endswith("-output")
93
+ else path.joinpath("simtools-output")
94
+ )
109
95
  label_dir = label if label is not None else "d-" + str(datetime.date.today())
110
- path = output_directory_prefix.joinpath(label_dir)
111
- if sub_dir is not None:
112
- if not self.use_plain_output_path:
113
- path = path.joinpath(sub_dir)
114
- elif dir_type != "simtools-result":
115
- path = path.joinpath(sub_dir)
96
+ path = (
97
+ path.joinpath(label_dir) if sub_dir is None else path.joinpath(label_dir, sub_dir)
98
+ )
116
99
 
117
100
  try:
118
101
  path.mkdir(parents=True, exist_ok=True)
119
102
  except FileNotFoundError:
120
- self._logger.error(f"Error creating directory {str(path)}")
103
+ self._logger.error(f"Error creating directory {path!s}")
121
104
  raise
122
105
 
123
106
  return path.absolute()
124
107
 
125
- def get_output_file(self, file_name, label=None, sub_dir=None, dir_type="simtools"):
108
+ def get_output_file(self, file_name, label=None, sub_dir=None):
126
109
  """
127
110
  Get path of an output file.
128
111
 
@@ -134,25 +117,18 @@ class IOHandler(metaclass=IOHandlerSingleton):
134
117
  Instance label.
135
118
  sub_dir: str
136
119
  Name of the subdirectory (ray-tracing, model etc)
137
- dir_type: str
138
- Directory type (e.g., 'simtools', 'test', 'simtools-result')
139
- If 'simtools-result' is used, the output directory will be returned
140
- without appending a subdirectory string when using the
141
- use_plain_output_path option.
142
120
 
143
121
  Returns
144
122
  -------
145
123
  Path
146
124
  """
147
125
  return (
148
- self.get_output_directory(label=label, sub_dir=sub_dir, dir_type=dir_type)
149
- .joinpath(file_name)
150
- .absolute()
126
+ self.get_output_directory(label=label, sub_dir=sub_dir).joinpath(file_name).absolute()
151
127
  )
152
128
 
153
129
  def get_input_data_file(self, parent_dir=None, file_name=None, test=False):
154
130
  """
155
- Get path of a data file, using data_path
131
+ Get path of a data file, using data_path.
156
132
 
157
133
  Parameters
158
134
  ----------
@@ -169,15 +145,14 @@ class IOHandler(metaclass=IOHandlerSingleton):
169
145
 
170
146
  Raises
171
147
  ------
172
- IncompleteIOHandlerInit
148
+ IncompleteIOHandlerInitError
173
149
  if data_path is not set
174
150
 
175
151
  """
176
-
177
152
  if test:
178
153
  file_prefix = Path("tests/resources/")
179
154
  elif self.data_path is not None:
180
155
  file_prefix = Path(self.data_path).joinpath(parent_dir)
181
156
  else:
182
- raise IncompleteIOHandlerInit
157
+ raise IncompleteIOHandlerInitError
183
158
  return file_prefix.joinpath(file_name).absolute()
@@ -1,78 +1,90 @@
1
+ """Interface to workload managers like gridengine or HTCondor."""
2
+
1
3
  import logging
2
4
  import os
3
- from copy import copy
4
5
  from pathlib import Path
5
6
 
6
7
  import simtools.utils.general as gen
7
8
 
8
- __all__ = ["JobManager", "MissingWorkloadManager", "JobExecutionError"]
9
-
10
-
11
- class MissingWorkloadManager(Exception):
12
- """Exception for missing work load manager."""
9
+ __all__ = ["JobExecutionError", "JobManager"]
13
10
 
14
11
 
15
12
  class JobExecutionError(Exception):
16
- """Exception for job execution error (usually CORSIKA or sim_telarray)."""
13
+ """Job execution error."""
17
14
 
18
15
 
19
16
  class JobManager:
20
17
  """
21
- JobManager provides an interface to workload managers like gridengine or HTCondor.
18
+ Interface to workload managers like gridengine or HTCondor.
19
+
20
+ Expects that jobs are described by shell scripts.
22
21
 
23
22
  Parameters
24
23
  ----------
25
- submit_command: str
26
- Job submission command.
27
- test: bool
24
+ submit_engine : str
25
+ Job submission system. Default is local.
26
+ test : bool
28
27
  Testing mode without sub submission.
29
-
30
- Raises
31
- ------
32
- MissingWorkloadManager
33
- if requested workflow manager not found.
34
28
  """
35
29
 
36
- def __init__(self, submit_command=None, test=False):
37
- """
38
- Initialize JobManager
39
- """
30
+ engines = {
31
+ "gridengine": "qsub",
32
+ "htcondor": "condor_submit",
33
+ "local": "",
34
+ "test_wms": "test_wms", # used for testing only
35
+ }
36
+
37
+ def __init__(self, submit_engine=None, submit_options=None, test=False):
38
+ """Initialize JobManager."""
40
39
  self._logger = logging.getLogger(__name__)
41
- self.submit_command = submit_command
40
+ self.submit_engine = submit_engine
41
+ self.submit_options = submit_options
42
42
  self.test = test
43
43
  self.run_script = None
44
44
  self.run_out_file = None
45
45
 
46
- try:
47
- self.test_submission_system()
48
- except MissingWorkloadManager:
49
- self._logger.error(f"Requested workflow manager not found: {self.submit_command}")
50
- raise
46
+ self.check_submission_system()
47
+
48
+ @property
49
+ def submit_engine(self):
50
+ """Get the submit command."""
51
+ return self._submit_engine
51
52
 
52
- def test_submission_system(self):
53
+ @submit_engine.setter
54
+ def submit_engine(self, value):
53
55
  """
54
- Check that the requested workload manager exist on the system this script is executed.
56
+ Set the submit command.
57
+
58
+ Parameters
59
+ ----------
60
+ value : str
61
+ Name of submit engine.
55
62
 
56
63
  Raises
57
64
  ------
58
- MissingWorkloadManager
59
- if workflow manager is not found.
65
+ ValueError
66
+ if invalid submit engine.
60
67
  """
68
+ if value is None:
69
+ value = "local"
70
+ if value not in self.engines:
71
+ raise ValueError(f"Invalid submit command: {value}")
72
+ self._submit_engine = value
61
73
 
62
- if self.submit_command is None:
63
- return
64
- if self.submit_command.find("qsub") >= 0:
65
- if gen.program_is_executable("qsub"):
66
- return
67
- raise MissingWorkloadManager
68
- if self.submit_command.find("condor_submit") >= 0:
69
- if gen.program_is_executable("condor_submit"):
70
- return
71
- raise MissingWorkloadManager
72
- if self.submit_command.find("local") >= 0:
74
+ def check_submission_system(self):
75
+ """
76
+ Check that the requested workload manager exist on the system.
77
+
78
+ Raises
79
+ ------
80
+ MissingWorkloadManagerError
81
+ if workflow manager is not found.
82
+ """
83
+ if self.submit_engine is None or self.submit_engine == "local":
73
84
  return
74
85
 
75
- raise MissingWorkloadManager
86
+ if gen.program_is_executable(self.engines[self.submit_engine]):
87
+ return
76
88
 
77
89
  def submit(self, run_script=None, run_out_file=None, log_file=None):
78
90
  """
@@ -97,17 +109,16 @@ class JobManager:
97
109
  self._logger.info(f"Job error stream {self.run_out_file + '.err'}")
98
110
  self._logger.info(f"Job log stream {self.run_out_file + '.job'}")
99
111
 
100
- if self.submit_command.find("qsub") >= 0:
112
+ if self.submit_engine == "gridengine":
101
113
  self._submit_gridengine()
102
- elif self.submit_command.find("condor_submit") >= 0:
114
+ elif self.submit_engine == "htcondor":
103
115
  self._submit_htcondor()
104
- elif self.submit_command.find("local") >= 0:
116
+ elif self.submit_engine == "local":
105
117
  self._submit_local(log_file)
106
118
 
107
119
  def _submit_local(self, log_file):
108
120
  """
109
- Run a job script on the command line
110
- (no submission to a workload manager)
121
+ Run a job script on the command line (no submission to a workload manager).
111
122
 
112
123
  Parameters
113
124
  ----------
@@ -115,7 +126,6 @@ class JobManager:
115
126
  The log file of the actual simulator (CORSIKA or sim_telarray).
116
127
  Provided in order to print the log excerpt in case of run time error.
117
128
  """
118
-
119
129
  self._logger.info("Running script locally")
120
130
 
121
131
  shell_command = f"{self.run_script} > {self.run_out_file}.out 2> {self.run_out_file}.err"
@@ -133,45 +143,48 @@ class JobManager:
133
143
  self._logger.info("Testing (local)")
134
144
 
135
145
  def _submit_htcondor(self):
136
- """
137
- Submit a job described by a shell script to HTcondor
138
-
139
- """
140
-
146
+ """Submit a job described by a shell script to HTcondor."""
141
147
  _condor_file = self.run_script + ".condor"
142
- self._logger.info(f"Submitting script to HTCondor ({_condor_file})")
143
148
  try:
144
149
  with open(_condor_file, "w", encoding="utf-8") as file:
145
150
  file.write(f"Executable = {self.run_script}\n")
146
151
  file.write(f"Output = {self.run_out_file + '.out'}\n")
147
152
  file.write(f"Error = {self.run_out_file + '.err'}\n")
148
153
  file.write(f"Log = {self.run_out_file + '.job'}\n")
154
+ if self.submit_options:
155
+ submit_option_list = self.submit_options.split(",")
156
+ for option in submit_option_list:
157
+ file.write(option.lstrip() + "\n")
149
158
  file.write("queue 1\n")
150
- except FileNotFoundError:
159
+ except FileNotFoundError as exc:
151
160
  self._logger.error(f"Failed creating condor submission file {_condor_file}")
161
+ raise JobExecutionError from exc
152
162
 
153
- shell_command = self.submit_command + " " + _condor_file
154
- if not self.test:
155
- os.system(shell_command)
156
- else:
157
- self._logger.info("Testing (HTcondor)")
163
+ self._execute(self.submit_engine, self.engines[self.submit_engine] + " " + _condor_file)
158
164
 
159
165
  def _submit_gridengine(self):
160
- """
161
- Submit a job described by a shell script to gridengine
162
-
163
- """
164
-
165
- this_sub_cmd = copy(self.submit_command)
166
+ """Submit a job described by a shell script to gridengine."""
167
+ this_sub_cmd = self.engines[self.submit_engine]
166
168
  this_sub_cmd = this_sub_cmd + " -o " + self.run_out_file + ".out"
167
169
  this_sub_cmd = this_sub_cmd + " -e " + self.run_out_file + ".err"
168
170
 
169
- self._logger.info("Submitting script to gridengine")
171
+ self._execute(self.submit_engine, this_sub_cmd + " " + self.run_script)
170
172
 
171
- shell_command = this_sub_cmd + " " + self.run_script
173
+ def _execute(self, engine, shell_command):
174
+ """
175
+ Execute a shell command using a specific engine.
176
+
177
+ Parameters
178
+ ----------
179
+ engine : str
180
+ Engine to use.
181
+ shell_command : str
182
+ Shell command to execute.
183
+ """
184
+ self._logger.info(f"Submitting script to {engine}")
172
185
  self._logger.debug(shell_command)
173
186
  if not self.test:
174
187
  os.system(shell_command)
175
188
  else:
176
- self._logger.info("Testing (gridengine)")
189
+ self._logger.info(f"Testing ({engine})")
177
190
  self._logger.info(shell_command)