gammasimtools 0.20.0__py3-none-any.whl → 0.22.0__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 (315) hide show
  1. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/METADATA +2 -3
  2. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/RECORD +313 -296
  3. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/entry_points.txt +3 -2
  4. simtools/_version.py +2 -2
  5. simtools/applications/calculate_incident_angles.py +1 -4
  6. simtools/applications/convert_all_model_parameters_from_simtel.py +1 -2
  7. simtools/applications/convert_model_parameter_from_simtel.py +0 -1
  8. simtools/applications/db_generate_compound_indexes.py +4 -17
  9. simtools/applications/db_upload_model_repository.py +122 -0
  10. simtools/applications/derive_psf_parameters.py +71 -42
  11. simtools/applications/docs_produce_array_element_report.py +1 -1
  12. simtools/applications/docs_produce_calibration_reports.py +1 -1
  13. simtools/applications/docs_produce_model_parameter_reports.py +1 -1
  14. simtools/applications/docs_produce_simulation_configuration_report.py +1 -1
  15. simtools/applications/generate_corsika_histograms.py +8 -185
  16. simtools/applications/maintain_simulation_model_add_production.py +81 -0
  17. simtools/applications/merge_tables.py +1 -1
  18. simtools/applications/plot_array_layout.py +1 -2
  19. simtools/applications/plot_simtel_events.py +2 -228
  20. simtools/applications/print_version.py +8 -7
  21. simtools/applications/production_derive_statistics.py +1 -2
  22. simtools/applications/production_generate_grid.py +1 -1
  23. simtools/applications/simulate_flasher.py +74 -72
  24. simtools/applications/simulate_illuminator.py +52 -186
  25. simtools/applications/{simulate_calibration_events.py → simulate_pedestals.py} +9 -55
  26. simtools/applications/submit_model_parameter_from_external.py +0 -1
  27. simtools/applications/validate_camera_efficiency.py +0 -1
  28. simtools/applications/validate_camera_fov.py +1 -2
  29. simtools/applications/validate_cumulative_psf.py +2 -3
  30. simtools/applications/validate_file_using_schema.py +20 -12
  31. simtools/applications/validate_optics.py +2 -2
  32. simtools/camera/camera_efficiency.py +8 -11
  33. simtools/configuration/commandline_parser.py +1 -7
  34. simtools/configuration/configurator.py +0 -2
  35. simtools/corsika/corsika_config.py +9 -11
  36. simtools/corsika/corsika_histograms.py +82 -1
  37. simtools/data_model/model_data_writer.py +87 -25
  38. simtools/data_model/schema.py +61 -2
  39. simtools/data_model/validate_data.py +1 -1
  40. simtools/db/db_handler.py +103 -48
  41. simtools/db/db_model_upload.py +247 -16
  42. simtools/io/io_handler.py +31 -83
  43. simtools/job_execution/job_manager.py +45 -0
  44. simtools/layout/array_layout_utils.py +1 -5
  45. simtools/model/array_model.py +93 -42
  46. simtools/model/model_parameter.py +20 -9
  47. simtools/model/model_repository.py +197 -109
  48. simtools/model/model_utils.py +21 -6
  49. simtools/model/telescope_model.py +20 -0
  50. simtools/production_configuration/derive_corsika_limits.py +1 -1
  51. simtools/ray_tracing/incident_angles.py +7 -7
  52. simtools/ray_tracing/mirror_panel_psf.py +1 -1
  53. simtools/ray_tracing/psf_parameter_optimisation.py +1106 -565
  54. simtools/ray_tracing/ray_tracing.py +1 -3
  55. simtools/reporting/docs_read_parameters.py +171 -101
  56. simtools/resources/array_elements.yml +26 -0
  57. simtools/runners/corsika_simtel_runner.py +11 -17
  58. simtools/runners/runner_services.py +5 -6
  59. simtools/runners/simtools_runner.py +0 -2
  60. simtools/schemas/application_workflow.metaschema.yml +1 -1
  61. simtools/schemas/common_definitions.schema.yml +39 -0
  62. simtools/schemas/model_parameter.metaschema.yml +19 -13
  63. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +6 -12
  64. simtools/schemas/model_parameters/adjust_gain.schema.yml +0 -5
  65. simtools/schemas/model_parameters/altitude.schema.yml +0 -5
  66. simtools/schemas/model_parameters/array_coordinates.schema.yml +0 -5
  67. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +0 -5
  68. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +0 -7
  69. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +0 -7
  70. simtools/schemas/model_parameters/array_layouts.schema.yml +0 -5
  71. simtools/schemas/model_parameters/array_triggers.schema.yml +0 -5
  72. simtools/schemas/model_parameters/array_window.schema.yml +0 -7
  73. simtools/schemas/model_parameters/asum_clipping.schema.yml +0 -3
  74. simtools/schemas/model_parameters/asum_offset.schema.yml +0 -7
  75. simtools/schemas/model_parameters/asum_shaping.schema.yml +0 -7
  76. simtools/schemas/model_parameters/asum_threshold.schema.yml +0 -7
  77. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +0 -5
  78. simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +0 -5
  79. simtools/schemas/model_parameters/axes_offsets.schema.yml +0 -7
  80. simtools/schemas/model_parameters/calibration_devices.schema.yml +30 -0
  81. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +0 -7
  82. simtools/schemas/model_parameters/camera_body_shape.schema.yml +0 -7
  83. simtools/schemas/model_parameters/camera_config_file.schema.yml +0 -7
  84. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +0 -7
  85. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +0 -7
  86. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +0 -7
  87. simtools/schemas/model_parameters/camera_depth.schema.yml +0 -7
  88. simtools/schemas/model_parameters/camera_filter.schema.yml +0 -7
  89. simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +0 -3
  90. simtools/schemas/model_parameters/camera_pixels.schema.yml +0 -7
  91. simtools/schemas/model_parameters/camera_transmission.schema.yml +0 -7
  92. simtools/schemas/model_parameters/channels_per_chip.schema.yml +0 -7
  93. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +0 -7
  94. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +0 -5
  95. simtools/schemas/model_parameters/dark_events.schema.yml +4 -3
  96. simtools/schemas/model_parameters/default_trigger.schema.yml +0 -7
  97. simtools/schemas/model_parameters/design_model.schema.yml +0 -7
  98. simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +0 -7
  99. simtools/schemas/model_parameters/disc_bins.schema.yml +0 -7
  100. simtools/schemas/model_parameters/disc_start.schema.yml +0 -7
  101. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +0 -7
  102. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +0 -7
  103. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +0 -7
  104. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +0 -7
  105. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +0 -7
  106. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +0 -7
  107. simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +0 -7
  108. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +0 -7
  109. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +0 -7
  110. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +0 -7
  111. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +0 -7
  112. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -9
  113. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +0 -7
  114. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +0 -7
  115. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +0 -7
  116. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +0 -7
  117. simtools/schemas/model_parameters/dish_shape_length.schema.yml +0 -5
  118. simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -5
  119. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +0 -3
  120. simtools/schemas/model_parameters/dsum_offset.schema.yml +0 -3
  121. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +0 -3
  122. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +0 -3
  123. simtools/schemas/model_parameters/dsum_prescale.schema.yml +0 -3
  124. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +0 -3
  125. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +0 -3
  126. simtools/schemas/model_parameters/dsum_shaping.schema.yml +0 -3
  127. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +0 -3
  128. simtools/schemas/model_parameters/dsum_threshold.schema.yml +2 -12
  129. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +0 -3
  130. simtools/schemas/model_parameters/effective_focal_length.schema.yml +0 -7
  131. simtools/schemas/model_parameters/epsg_code.schema.yml +0 -5
  132. simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +0 -7
  133. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +2 -9
  134. simtools/schemas/model_parameters/fadc_bins.schema.yml +0 -7
  135. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +0 -7
  136. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +0 -2
  137. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +0 -7
  138. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +0 -7
  139. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +2 -9
  140. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +0 -7
  141. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +0 -2
  142. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +0 -7
  143. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +0 -7
  144. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +0 -7
  145. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +0 -2
  146. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +0 -7
  147. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +0 -7
  148. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +0 -7
  149. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +0 -7
  150. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +0 -7
  151. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +0 -7
  152. simtools/schemas/model_parameters/fadc_long_event_threshold.schema.yml +0 -3
  153. simtools/schemas/model_parameters/fadc_long_sum_bins.schema.yml +0 -3
  154. simtools/schemas/model_parameters/fadc_long_sum_offset.schema.yml +0 -3
  155. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +0 -7
  156. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +0 -2
  157. simtools/schemas/model_parameters/fadc_mhz.schema.yml +0 -7
  158. simtools/schemas/model_parameters/fadc_noise.schema.yml +0 -7
  159. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +0 -7
  160. simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +0 -7
  161. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +0 -7
  162. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +0 -7
  163. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +0 -7
  164. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +0 -7
  165. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +0 -7
  166. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +0 -7
  167. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +0 -3
  168. simtools/schemas/model_parameters/flasher_angular_distribution.schema.yml +32 -0
  169. simtools/schemas/model_parameters/flasher_angular_distribution_width.schema.yml +32 -0
  170. simtools/schemas/model_parameters/flasher_bunch_size.schema.yml +28 -0
  171. simtools/schemas/model_parameters/flasher_external_trigger.schema.yml +32 -0
  172. simtools/schemas/model_parameters/flasher_photons.schema.yml +34 -0
  173. simtools/schemas/model_parameters/flasher_position.schema.yml +43 -0
  174. simtools/schemas/model_parameters/flasher_pulse_exp_decay.schema.yml +29 -0
  175. simtools/schemas/model_parameters/flasher_pulse_offset.schema.yml +35 -0
  176. simtools/schemas/model_parameters/flasher_pulse_shape.schema.yml +30 -0
  177. simtools/schemas/model_parameters/flasher_pulse_width.schema.yml +32 -0
  178. simtools/schemas/model_parameters/flasher_type.schema.yml +28 -0
  179. simtools/schemas/model_parameters/flasher_var_photons.schema.yml +31 -0
  180. simtools/schemas/model_parameters/flasher_wavelength.schema.yml +33 -0
  181. simtools/schemas/model_parameters/flatfielding.schema.yml +0 -7
  182. simtools/schemas/model_parameters/focal_length.schema.yml +0 -7
  183. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +0 -3
  184. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +0 -3
  185. simtools/schemas/model_parameters/focus_offset.schema.yml +0 -7
  186. simtools/schemas/model_parameters/gain_variation.schema.yml +0 -7
  187. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +2 -7
  188. simtools/schemas/model_parameters/geomag_rotation.schema.yml +2 -7
  189. simtools/schemas/model_parameters/geomag_vertical.schema.yml +2 -7
  190. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +0 -5
  191. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +0 -7
  192. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +0 -7
  193. simtools/schemas/model_parameters/laser_events.schema.yml +4 -3
  194. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +4 -3
  195. simtools/schemas/model_parameters/laser_photons.schema.yml +4 -3
  196. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +4 -3
  197. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +4 -3
  198. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +4 -3
  199. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +4 -3
  200. simtools/schemas/model_parameters/laser_var_photons.schema.yml +4 -3
  201. simtools/schemas/model_parameters/laser_wavelength.schema.yml +4 -3
  202. simtools/schemas/model_parameters/led_events.schema.yml +4 -3
  203. simtools/schemas/model_parameters/led_photons.schema.yml +4 -3
  204. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +4 -3
  205. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +4 -3
  206. simtools/schemas/model_parameters/led_var_photons.schema.yml +4 -3
  207. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +0 -7
  208. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +0 -7
  209. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +0 -7
  210. simtools/schemas/model_parameters/min_photons.schema.yml +0 -7
  211. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +0 -5
  212. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +0 -7
  213. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +0 -7
  214. simtools/schemas/model_parameters/mirror_class.schema.yml +2 -9
  215. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +0 -7
  216. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +0 -5
  217. simtools/schemas/model_parameters/mirror_list.schema.yml +0 -7
  218. simtools/schemas/model_parameters/mirror_offset.schema.yml +0 -7
  219. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +0 -7
  220. simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +0 -7
  221. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +0 -7
  222. simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +0 -7
  223. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +0 -7
  224. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +0 -3
  225. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +0 -7
  226. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +0 -7
  227. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +0 -5
  228. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +0 -5
  229. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +0 -5
  230. simtools/schemas/model_parameters/nsb_sky_map.schema.yml +0 -5
  231. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +0 -5
  232. simtools/schemas/model_parameters/num_gains.schema.yml +0 -7
  233. simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +0 -7
  234. simtools/schemas/model_parameters/optics_properties.schema.yml +0 -7
  235. simtools/schemas/model_parameters/parabolic_dish.schema.yml +0 -3
  236. simtools/schemas/model_parameters/pedestal_events.schema.yml +4 -7
  237. simtools/schemas/model_parameters/photon_delay.schema.yml +0 -7
  238. simtools/schemas/model_parameters/photons_per_run.schema.yml +4 -4
  239. simtools/schemas/model_parameters/pixel_cells.schema.yml +0 -3
  240. simtools/schemas/model_parameters/pixels_parallel.schema.yml +0 -3
  241. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +0 -7
  242. simtools/schemas/model_parameters/pm_average_gain.schema.yml +0 -5
  243. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +0 -5
  244. simtools/schemas/model_parameters/pm_gain_index.schema.yml +0 -5
  245. simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +0 -7
  246. simtools/schemas/model_parameters/pm_transit_time.schema.yml +4 -9
  247. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +0 -5
  248. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +0 -7
  249. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +0 -3
  250. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +0 -3
  251. simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +0 -3
  252. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +0 -3
  253. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +0 -3
  254. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +0 -3
  255. simtools/schemas/model_parameters/qe_variation.schema.yml +0 -7
  256. simtools/schemas/model_parameters/quantum_efficiency.schema.yml +0 -7
  257. simtools/schemas/model_parameters/random_focal_length.schema.yml +2 -7
  258. simtools/schemas/model_parameters/random_generator.schema.yml +0 -7
  259. simtools/schemas/model_parameters/random_mono_probability.schema.yml +0 -7
  260. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +0 -5
  261. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +0 -5
  262. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +0 -5
  263. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +0 -5
  264. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +0 -5
  265. simtools/schemas/model_parameters/sampled_output.schema.yml +0 -7
  266. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +0 -7
  267. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +0 -3
  268. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +0 -3
  269. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +0 -3
  270. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +0 -3
  271. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +0 -3
  272. simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +0 -3
  273. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +0 -3
  274. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +0 -3
  275. simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +0 -3
  276. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +0 -3
  277. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +0 -3
  278. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +0 -3
  279. simtools/schemas/model_parameters/stars.schema.yml +0 -5
  280. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +0 -7
  281. simtools/schemas/model_parameters/tailcut_scale.schema.yml +0 -7
  282. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +0 -7
  283. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +0 -7
  284. simtools/schemas/model_parameters/telescope_random_error.schema.yml +0 -7
  285. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +0 -7
  286. simtools/schemas/model_parameters/telescope_transmission.schema.yml +0 -7
  287. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +0 -7
  288. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +0 -7
  289. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +0 -7
  290. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +0 -7
  291. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +0 -7
  292. simtools/schemas/model_parameters/transit_time_error.schema.yml +0 -7
  293. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +0 -7
  294. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +0 -7
  295. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +0 -7
  296. simtools/schemas/model_parameters/trigger_pixels.schema.yml +0 -7
  297. simtools/schemas/production_tables.schema.yml +8 -8
  298. simtools/schemas/simulation_models_info.schema.yml +78 -0
  299. simtools/simtel/simtel_config_writer.py +88 -14
  300. simtools/simtel/simulator_array.py +44 -74
  301. simtools/simtel/simulator_light_emission.py +336 -629
  302. simtools/simtel/simulator_ray_tracing.py +2 -2
  303. simtools/simulator.py +46 -18
  304. simtools/testing/configuration.py +4 -2
  305. simtools/testing/sim_telarray_metadata.py +4 -4
  306. simtools/utils/geometry.py +34 -0
  307. simtools/version.py +111 -0
  308. simtools/{corsika/corsika_histograms_visualize.py → visualization/plot_corsika_histograms.py} +109 -0
  309. simtools/visualization/plot_psf.py +775 -0
  310. simtools/visualization/plot_simtel_events.py +284 -87
  311. simtools/applications/maintain_simulation_model_add_production_table.py +0 -71
  312. simtools/model/flasher_model.py +0 -106
  313. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/WHEEL +0 -0
  314. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/licenses/LICENSE +0 -0
  315. {gammasimtools-0.20.0.dist-info → gammasimtools-0.22.0.dist-info}/top_level.txt +0 -0
@@ -11,6 +11,7 @@ simtools-db-get-array-layouts-from-db = simtools.applications.db_get_array_layou
11
11
  simtools-db-get-file-from-db = simtools.applications.db_get_file_from_db:main
12
12
  simtools-db-get-parameter-from-db = simtools.applications.db_get_parameter_from_db:main
13
13
  simtools-db-inspect-databases = simtools.applications.db_inspect_databases:main
14
+ simtools-db-upload-model-repository = simtools.applications.db_upload_model_repository:main
14
15
  simtools-derive-ctao-array-layouts = simtools.applications.derive_ctao_array_layouts:main
15
16
  simtools-derive-mirror-rnda = simtools.applications.derive_mirror_rnda:main
16
17
  simtools-derive-photon-electron-spectrum = simtools.applications.derive_photon_electron_spectrum:main
@@ -25,7 +26,7 @@ simtools-generate-corsika-histograms = simtools.applications.generate_corsika_hi
25
26
  simtools-generate-default-metadata = simtools.applications.generate_default_metadata:main
26
27
  simtools-generate-regular-arrays = simtools.applications.generate_regular_arrays:main
27
28
  simtools-generate-simtel-event-data = simtools.applications.generate_simtel_event_data:main
28
- simtools-maintain-simulation-model-add-production-table = simtools.applications.maintain_simulation_model_add_production_table:main
29
+ simtools-maintain-simulation-model-add-production = simtools.applications.maintain_simulation_model_add_production:main
29
30
  simtools-maintain-simulation-model-compare-productions = simtools.applications.maintain_simulation_model_compare_productions:main
30
31
  simtools-maintain-simulation-model-verify-production-tables = simtools.applications.maintain_simulation_model_verify_production_tables:main
31
32
  simtools-merge-tables = simtools.applications.merge_tables:main
@@ -39,9 +40,9 @@ simtools-production-derive-statistics = simtools.applications.production_derive_
39
40
  simtools-production-generate-grid = simtools.applications.production_generate_grid:main
40
41
  simtools-production-merge-corsika-limits = simtools.applications.production_merge_corsika_limits:main
41
42
  simtools-run-application = simtools.applications.run_application:main
42
- simtools-simulate-calibration-events = simtools.applications.simulate_calibration_events:main
43
43
  simtools-simulate-flasher = simtools.applications.simulate_flasher:main
44
44
  simtools-simulate-illuminator = simtools.applications.simulate_illuminator:main
45
+ simtools-simulate-pedestals = simtools.applications.simulate_pedestals:main
45
46
  simtools-simulate-prod = simtools.applications.simulate_prod:main
46
47
  simtools-simulate-prod-htcondor-generator = simtools.applications.simulate_prod_htcondor_generator:main
47
48
  simtools-submit-array-layouts = simtools.applications.submit_array_layouts:main
simtools/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.20.0'
32
- __version_tuple__ = version_tuple = (0, 20, 0)
31
+ __version__ = version = '0.22.0'
32
+ __version_tuple__ = version_tuple = (0, 22, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -144,10 +144,7 @@ def main():
144
144
 
145
145
  logger.info("Starting calculation of incident angles")
146
146
 
147
- output_base = Path(args_dict.get("output_path", "./"))
148
- output_dir = (
149
- output_base / label if not args_dict.get("use_plain_output_path", False) else output_base
150
- )
147
+ output_dir = Path(args_dict.get("output_path", "./"))
151
148
  base_label = args_dict.get("label", label)
152
149
  telescope_name = args_dict["telescope"]
153
150
  label_with_telescope = f"{base_label}_{telescope_name}"
@@ -233,8 +233,7 @@ def read_and_export_parameters(args_dict, logger):
233
233
  parameter_version=args_dict["parameter_version"],
234
234
  output_file=io_handler.get_output_file(
235
235
  f"{_parameter}-{args_dict['parameter_version']}.json",
236
- label=f"{args_dict['telescope']}",
237
- sub_dir=f"{_parameter}",
236
+ sub_dir=[f"{args_dict['telescope']}", f"{_parameter}"],
238
237
  ),
239
238
  )
240
239
 
@@ -109,7 +109,6 @@ def main(): # noqa: D103
109
109
  parameter_version=args_dict["parameter_version"],
110
110
  output_file=args_dict["output_file"],
111
111
  output_path=args_dict.get("output_path"),
112
- use_plain_output_path=args_dict.get("use_plain_output_path"),
113
112
  )
114
113
  logger.info(f"Validated parameter: {_json_dict}")
115
114
 
@@ -40,25 +40,12 @@ def main(): # noqa: D103
40
40
  logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
41
41
 
42
42
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
43
- # databases without internal databases we don't have rights to modify
44
- databases = [
45
- d for d in db.db_client.list_database_names() if d not in ("config", "admin", "local")
46
- ]
47
- requested = db.get_db_name(
43
+
44
+ db.generate_compound_indexes_for_databases(
48
45
  db_name=args_dict["db_name"],
49
- model_version=args_dict.get("db_simulation_model_version"),
50
- model_name=args_dict.get("db_simulation_model"),
46
+ db_simulation_model=args_dict.get("db_simulation_model"),
47
+ db_simulation_model_version=args_dict.get("db_simulation_model_version"),
51
48
  )
52
- if requested != "all" and requested not in databases:
53
- raise ValueError(
54
- f"Requested database '{requested}' not found. "
55
- f"Following databases are available: {', '.join(databases)}"
56
- )
57
-
58
- databases = databases if requested == "all" else [requested]
59
- for db_name in databases:
60
- logger.info(f"Generating compound indexes for database: {db_name}")
61
- db.generate_compound_indexes(db_name=db_name)
62
49
 
63
50
 
64
51
  if __name__ == "__main__":
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/python3
2
+ r"""
3
+ Upload model parameters from simulation model repository to a local or remote database.
4
+
5
+ This script clones the CTAO simulation model repository and uploads model parameters
6
+ and production tables to a MongoDB database. It includes retry functionality for
7
+ network operations and confirmation prompts for remote database uploads.
8
+
9
+ Command line arguments
10
+ ----------------------
11
+ db_simulation_model (str, required)
12
+ Name of the database simulation model.
13
+ db_simulation_model_version (str, required)
14
+ Version of the database simulation model.
15
+ branch (str, optional)
16
+ Repository branch to clone (if not provided, uses the version tag).
17
+ tmp_dir (str, optional)
18
+ Temporary directory for cloning the repository (default: ./tmp_model_parameters).
19
+
20
+ Examples
21
+ --------
22
+ Upload model repository to database using a version tag
23
+ (see simulation model repository for available tags):
24
+
25
+ .. code-block:: console
26
+
27
+ simtools-db-upload-model-repository \\
28
+ --db_simulation_model CTAO-Simulation-Model \\
29
+ --db_simulation_model_version v10.10.10
30
+
31
+ Upload model repository using specific branch (the version tag is
32
+ used to name the database, but no tag checkout is done):
33
+
34
+ .. code-block:: console
35
+
36
+ simtools-db-upload-model-repository \\
37
+ --db_simulation_model CTAO-Simulation-Model \\
38
+ --db_simulation_model_version v10.10.10 \\
39
+ --branch main
40
+
41
+ """
42
+
43
+ import logging
44
+ from pathlib import Path
45
+
46
+ import simtools.utils.general as gen
47
+ from simtools.configuration import configurator
48
+ from simtools.db import db_handler, db_model_upload
49
+
50
+ DEFAULT_REPOSITORY_URL = (
51
+ "https://gitlab.cta-observatory.org/cta-science/simulations/"
52
+ "simulation-model/simulation-models.git"
53
+ )
54
+
55
+
56
+ def _parse(label=None, description=None):
57
+ """
58
+ Parse command line configuration.
59
+
60
+ Parameters
61
+ ----------
62
+ label : str
63
+ Label describing application.
64
+ description : str
65
+ Description of application.
66
+
67
+ Returns
68
+ -------
69
+ tuple
70
+ Command line parser object and database configuration.
71
+ """
72
+ config = configurator.Configurator(label=label, description=description)
73
+ config.parser.add_argument(
74
+ "--branch",
75
+ help="Repository branch to clone (optional, defaults to using version tag).",
76
+ type=str,
77
+ required=False,
78
+ )
79
+ config.parser.add_argument(
80
+ "--tmp_dir",
81
+ help="Temporary directory for cloning the repository (default: ./tmp_model_parameters).",
82
+ type=str,
83
+ default="tmp_model_parameters",
84
+ required=False,
85
+ )
86
+
87
+ args_dict, db_config = config.initialize(output=True, require_command_line=True, db_config=True)
88
+
89
+ if args_dict.get("db_simulation_model_version"):
90
+ db_config["db_simulation_model"] = args_dict.get(
91
+ "db_simulation_model", "CTAO-Simulation-Model"
92
+ )
93
+ db_config["db_simulation_model_version"] = args_dict["db_simulation_model_version"]
94
+ else:
95
+ raise ValueError("Setting of db_simulation_model_version is required.")
96
+
97
+ return args_dict, db_config
98
+
99
+
100
+ def main():
101
+ """Application main."""
102
+ args_dict, db_config = _parse(
103
+ label=Path(__file__).stem, description="Upload model parameters from repository to database"
104
+ )
105
+ logger = logging.getLogger()
106
+ logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
107
+
108
+ db = db_handler.DatabaseHandler(mongo_db_config=db_config)
109
+ db.print_connection_info()
110
+
111
+ db_model_upload.add_complete_model(
112
+ tmp_dir=args_dict.get("tmp_dir"),
113
+ db=db,
114
+ db_simulation_model=args_dict.get("db_simulation_model"),
115
+ db_simulation_model_version=args_dict.get("db_simulation_model_version"),
116
+ repository_url=DEFAULT_REPOSITORY_URL,
117
+ repository_branch=args_dict.get("branch"),
118
+ )
119
+
120
+
121
+ if __name__ == "__main__":
122
+ main()
@@ -6,25 +6,22 @@ r"""
6
6
  This includes parameters mirror_reflection_random_angle, \
7
7
  mirror_align_random_horizontal and mirror_align_random_vertical.
8
8
 
9
- The telescope zenith angle and the source distance can be set by command line arguments.
10
-
11
9
  The measured cumulative PSF should be provided by using the command line argument data. \
12
10
  A file name is expected, in which the file should contain 3 columns: radial distance in mm, \
13
11
  differential value of photon intensity and its integral value.
14
12
 
15
- The derivation is performed through a random search. A number of random combination of the \
16
- parameters are tested and the best ones are selected based on the minimum value of \
17
- the Root Mean Squared Deviation between data and simulations. The range in which the \
18
- parameter are drawn uniformly are defined based on the previous value on the telescope model.
13
+ The derivation is performed through gradient descent optimization that minimizes either the \
14
+ Root Mean Squared Deviation (RMSD) between measured and simulated PSF curves (default) or the \
15
+ Kolmogorov-Smirnov (KS) statistic when the --ks_statistic flag is used.
19
16
 
20
17
  The optimization workflow includes:
21
18
 
22
19
  * Loading and preprocessing PSF data from measurement files
23
- * Generating random parameter combinations for optimization
24
- * Running ray-tracing simulations for each parameter set
25
- * Calculating RMSD between measured and simulated PSF curves
26
- * Identifying the best-fit parameters with minimum RMSD
27
- * Creating comprehensive plots and D80 vs off-axis angle analysis
20
+ * Running gradient descent optimization to minimize RMSD
21
+ * Generating cumulative PSF plots for each iteration showing optimization progression
22
+ * Logging parameter evolution through gradient descent steps
23
+ * Creating convergence plots showing RMSD and D80 evolution
24
+ * Automatically generating D80 vs off-axis angle analysis for best parameters
28
25
  * Optionally exporting optimized parameters as simulation model files
29
26
 
30
27
  The assumption are:
@@ -36,7 +33,7 @@ r"""
36
33
  One example of the plot generated by this applications are shown below.
37
34
 
38
35
  .. _derive_psf_parameters_plot:
39
- .. image:: images/derive_psf_parameters.png
36
+ .. image:: images/gradient_descent.png
40
37
  :width: 49 %
41
38
 
42
39
  Command line arguments
@@ -63,47 +60,53 @@ r"""
63
60
  If activated, application will be faster by simulating fewer photons.
64
61
  write_psf_parameters (activation mode, optional)
65
62
  Write the optimized PSF parameters as simulation model parameter files.
66
- random_seed (int, optional)
67
- Random seed for parameter generation.
68
- n_runs (int, optional)
69
- Number of parameter combinations to test.
63
+ rmsd_threshold (float, optional)
64
+ RMSD threshold for gradient descent convergence (default: 0.007).
65
+ learning_rate (float, optional)
66
+ Learning rate for gradient descent optimization (default: 0.01).
67
+ monte_carlo_analysis (activation mode, optional)
68
+ Run Monte Carlo analysis to find statistical uncertainties.
70
69
 
71
70
  Example
72
71
  -------
73
- LSTN-01 5.0.0
74
-
75
- Runtime < 3 min.
72
+ --telescope LSTN-01 --model_version 6.0.0
76
73
 
77
- Get PSF data from the DB:
78
-
79
- .. code-block:: console
80
74
 
81
- simtools-db-get-file-from-db --file_name PSFcurve_data_v2.txt
82
75
 
83
76
  Run the application:
84
77
 
85
78
  .. code-block:: console
86
79
 
87
80
  simtools-derive-psf-parameters --site North --telescope LSTN-01 \\
88
- --model_version 6.0.0 --data tests/resources/PSFcurve_data_v2.txt --plot_all --test
81
+ --model_version 6.0.0 --data tests/resources/PSFcurve_data_v2.ecsv --plot_all --test
89
82
 
90
83
  Run with parameter export:
91
84
 
92
85
  .. code-block:: console
93
86
 
94
- simtools-derive-psf-parameters --site North --telescope LSTN-01 \\
95
- --model_version 6.0.0 \\
96
- --data tests/resources/PSFcurve_data_v2.txt --write_psf_parameters
87
+ simtools-derive-psf-parameters --site North --telescope LSTN-01 --model_version 6.0.0 \\
88
+ --plot_all --test --rmsd_threshold 0.01 --learning_rate 0.001 \\
89
+ --data tests/resources/PSFcurve_data_v2.ecsv \\
90
+ --write_psf_parameters
91
+
92
+ Run monte carlo analysis:
97
93
 
98
- The output is saved in simtools-output/tune_psf.
94
+ .. code-block:: console
95
+
96
+ simtools-derive-psf-parameters --site North --telescope LSTN-01 --model_version 6.0.0 \\
97
+ --plot_all --test --monte_carlo_analysis \\
98
+ --data tests/resources/PSFcurve_data_v2.ecsv \\
99
+ --write_psf_parameters
100
+
101
+ The output is saved in simtools-output/derive_psf_parameters.
99
102
 
100
103
  Output files include:
101
104
 
102
- * Parameter optimization results in tested_psf_parameters.txt
103
- * PSF comparison plots in tune_psf_[telescope].pdf
105
+ * Gradient descent progression log in psf_gradient_descent_[telescope].log
106
+ * Gradient descent convergence plots in gradient_descent_convergence_[telescope].png
107
+ * PSF progression plots showing evolution through iterations (if --plot_all is specified)
104
108
  * D80 vs off-axis angle plots (d80_vs_offaxis_cm.png, d80_vs_offaxis_deg.png)
105
109
  * Optimized simulation model parameter files (if --write_psf_parameters is specified)
106
- * Cumulative PSF plots for all tested combinations (if --plot_all is specified)
107
110
 
108
111
  """
109
112
 
@@ -154,16 +157,38 @@ def _parse():
154
157
  required=False,
155
158
  )
156
159
  config.parser.add_argument(
157
- "--random_seed",
158
- help="Random seed for parameter generation.",
159
- type=int,
160
- default=None,
160
+ "--rmsd_threshold",
161
+ help=(
162
+ "RMSD threshold for gradient descent convergence "
163
+ "(not used with --monte_carlo_analysis)."
164
+ ),
165
+ type=float,
166
+ default=0.01,
161
167
  )
162
168
  config.parser.add_argument(
163
- "--n_runs",
164
- help="Number of parameter combinations to test.",
165
- type=int,
166
- default=5,
169
+ "--learning_rate",
170
+ help=(
171
+ "Learning rate for gradient descent optimization "
172
+ "(not used with --monte_carlo_analysis)."
173
+ ),
174
+ type=float,
175
+ default=0.01,
176
+ )
177
+ config.parser.add_argument(
178
+ "--monte_carlo_analysis",
179
+ help="Run analysis to find monte carlo uncertainties.",
180
+ action="store_true",
181
+ )
182
+ config.parser.add_argument(
183
+ "--ks_statistic",
184
+ help="Use KS statistic for monte carlo uncertainty analysis.",
185
+ action="store_true",
186
+ )
187
+ config.parser.add_argument(
188
+ "--fraction",
189
+ help="PSF containment fraction for diameter calculation (e.g., 0.8 for D80, 0.95 for D95).",
190
+ type=float,
191
+ default=0.8,
167
192
  )
168
193
  return config.initialize(
169
194
  db_config=True,
@@ -179,8 +204,7 @@ def main(): # noqa: D103
179
204
  logger.setLevel(get_log_level_from_user(args_dict["log_level"]))
180
205
 
181
206
  _io_handler = io_handler.IOHandler()
182
- output_dir = _io_handler.get_output_directory(label, sub_dir="application-plots")
183
- tel_model, site_model = initialize_simulation_models(
207
+ tel_model, site_model, _ = initialize_simulation_models(
184
208
  label=label,
185
209
  db_config=db_config,
186
210
  site=args_dict["site"],
@@ -188,7 +212,12 @@ def main(): # noqa: D103
188
212
  model_version=args_dict["model_version"],
189
213
  )
190
214
 
191
- psf_opt.run_psf_optimization_workflow(tel_model, site_model, args_dict, output_dir)
215
+ psf_opt.run_psf_optimization_workflow(
216
+ tel_model,
217
+ site_model,
218
+ args_dict,
219
+ _io_handler.get_output_directory(),
220
+ )
192
221
 
193
222
 
194
223
  if __name__ == "__main__":
@@ -56,7 +56,7 @@ def main(): # noqa: D103
56
56
  args, db_config = _parse(label_name)
57
57
 
58
58
  io_handler_instance = io_handler.IOHandler()
59
- output_path = io_handler_instance.get_output_directory(label=label_name, sub_dir="productions")
59
+ output_path = io_handler_instance.get_output_directory()
60
60
 
61
61
  logger = logging.getLogger()
62
62
  logger.setLevel(gen.get_log_level_from_user(args["log_level"]))
@@ -28,7 +28,7 @@ def main(): # noqa: D103
28
28
  args, db_config = _parse(label_name)
29
29
 
30
30
  io_handler_instance = io_handler.IOHandler()
31
- output_path = io_handler_instance.get_output_directory(label=label_name, sub_dir="productions")
31
+ output_path = io_handler_instance.get_output_directory()
32
32
 
33
33
  logger = logging.getLogger()
34
34
  logger.setLevel(gen.get_log_level_from_user(args["log_level"]))
@@ -41,7 +41,7 @@ def main(): # noqa: D103
41
41
  label_name = "reports"
42
42
  args, db_config = _parse(label_name)
43
43
  io_handler_instance = io_handler.IOHandler()
44
- output_path = io_handler_instance.get_output_directory(label=label_name, sub_dir="parameters")
44
+ output_path = io_handler_instance.get_output_directory()
45
45
 
46
46
  logger = logging.getLogger()
47
47
  logger.setLevel(gen.get_log_level_from_user(args["log_level"]))
@@ -29,7 +29,7 @@ def main(): # noqa: D103
29
29
  args, db_config = _parse(label_name)
30
30
 
31
31
  io_handler_instance = io_handler.IOHandler()
32
- output_path = io_handler_instance.get_output_directory(label=label_name, sub_dir="productions")
32
+ output_path = io_handler_instance.get_output_directory()
33
33
 
34
34
  logger = logging.getLogger()
35
35
  logger.setLevel(gen.get_log_level_from_user(args["log_level"]))