gammasimtools 0.8.1__py3-none-any.whl → 0.9.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 (296) hide show
  1. {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/METADATA +4 -3
  2. gammasimtools-0.9.0.dist-info/RECORD +350 -0
  3. {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/entry_points.txt +2 -0
  5. simtools/_dev_version/__init__.py +9 -0
  6. simtools/_version.py +2 -2
  7. simtools/applications/convert_all_model_parameters_from_simtel.py +1 -1
  8. simtools/applications/convert_geo_coordinates_of_array_elements.py +8 -9
  9. simtools/applications/convert_model_parameter_from_simtel.py +1 -1
  10. simtools/applications/db_add_model_parameters_from_repository_to_db.py +2 -10
  11. simtools/applications/db_add_value_from_json_to_db.py +1 -9
  12. simtools/applications/db_get_array_layouts_from_db.py +3 -1
  13. simtools/applications/db_get_parameter_from_db.py +1 -1
  14. simtools/applications/derive_mirror_rnda.py +10 -1
  15. simtools/applications/derive_psf_parameters.py +1 -1
  16. simtools/applications/generate_array_config.py +1 -5
  17. simtools/applications/generate_regular_arrays.py +9 -6
  18. simtools/applications/generate_simtel_array_histograms.py +1 -1
  19. simtools/applications/plot_array_layout.py +3 -1
  20. simtools/applications/plot_tabular_data.py +84 -0
  21. simtools/applications/production_scale_events.py +1 -2
  22. simtools/applications/simulate_light_emission.py +2 -2
  23. simtools/applications/simulate_prod.py +24 -59
  24. simtools/applications/simulate_prod_htcondor_generator.py +95 -0
  25. simtools/applications/submit_data_from_external.py +1 -1
  26. simtools/applications/validate_camera_efficiency.py +1 -1
  27. simtools/applications/validate_camera_fov.py +4 -8
  28. simtools/applications/validate_cumulative_psf.py +3 -7
  29. simtools/applications/validate_file_using_schema.py +31 -23
  30. simtools/applications/validate_optics.py +3 -4
  31. simtools/camera_efficiency.py +1 -4
  32. simtools/configuration/commandline_parser.py +9 -15
  33. simtools/configuration/configurator.py +6 -19
  34. simtools/constants.py +3 -3
  35. simtools/data_model/metadata_collector.py +19 -1
  36. simtools/data_model/metadata_model.py +18 -5
  37. simtools/data_model/model_data_writer.py +1 -1
  38. simtools/data_model/validate_data.py +67 -10
  39. simtools/db/db_handler.py +92 -315
  40. simtools/io_operations/legacy_data_handler.py +61 -0
  41. simtools/job_execution/htcondor_script_generator.py +133 -0
  42. simtools/job_execution/job_manager.py +77 -50
  43. simtools/model/array_model.py +30 -26
  44. simtools/model/calibration_model.py +10 -10
  45. simtools/model/camera.py +79 -63
  46. simtools/model/mirrors.py +8 -6
  47. simtools/model/model_parameter.py +42 -12
  48. simtools/model/model_utils.py +6 -6
  49. simtools/model/site_model.py +2 -2
  50. simtools/model/telescope_model.py +26 -22
  51. simtools/ray_tracing/mirror_panel_psf.py +47 -27
  52. simtools/runners/corsika_runner.py +14 -3
  53. simtools/runners/runner_services.py +3 -3
  54. simtools/runners/simtel_runner.py +27 -8
  55. simtools/schemas/integration_tests_config.metaschema.yml +15 -5
  56. simtools/schemas/model_parameter.metaschema.yml +90 -2
  57. simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
  58. simtools/schemas/model_parameters/altitude.schema.yml +1 -1
  59. simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
  60. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +1 -1
  61. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +1 -1
  62. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
  63. simtools/schemas/model_parameters/array_layouts.schema.yml +1 -1
  64. simtools/schemas/model_parameters/array_triggers.schema.yml +1 -1
  65. simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
  66. simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
  67. simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
  68. simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
  69. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
  70. simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +1 -1
  71. simtools/schemas/model_parameters/axes_offsets.schema.yml +1 -1
  72. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
  73. simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
  74. simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
  75. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
  76. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
  77. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
  78. simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
  79. simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
  80. simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +1 -1
  81. simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
  82. simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
  83. simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
  84. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
  85. simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +1 -1
  86. simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +1 -1
  87. simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +1 -1
  88. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
  89. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
  90. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
  91. simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +1 -1
  92. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
  93. simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +1 -1
  94. simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +1 -1
  95. simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
  96. simtools/schemas/model_parameters/default_trigger.schema.yml +1 -1
  97. simtools/schemas/model_parameters/design_model.schema.yml +1 -1
  98. simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +1 -1
  99. simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
  100. simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
  101. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
  102. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
  103. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
  104. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
  105. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
  106. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
  107. simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +1 -1
  108. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
  109. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
  110. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
  111. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
  112. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
  113. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
  114. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
  115. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
  116. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
  117. simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
  118. simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
  119. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
  120. simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
  121. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +1 -1
  122. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
  123. simtools/schemas/model_parameters/dsum_prescale.schema.yml +1 -1
  124. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
  125. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
  126. simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
  127. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +1 -1
  128. simtools/schemas/model_parameters/dsum_threshold.schema.yml +1 -1
  129. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
  130. simtools/schemas/model_parameters/effective_focal_length.schema.yml +32 -2
  131. simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
  132. simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +1 -1
  133. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
  134. simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
  135. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
  136. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
  137. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
  138. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
  139. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
  140. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
  141. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
  142. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
  143. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
  144. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
  145. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +1 -1
  146. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
  147. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
  148. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
  149. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
  150. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
  151. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
  152. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
  153. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +1 -1
  154. simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
  155. simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
  156. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
  157. simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +1 -1
  158. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
  159. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
  160. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
  161. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
  162. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
  163. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
  164. simtools/schemas/model_parameters/flatfielding.schema.yml +1 -1
  165. simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
  166. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +1 -1
  167. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
  168. simtools/schemas/model_parameters/focus_offset.schema.yml +1 -1
  169. simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
  170. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
  171. simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
  172. simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
  173. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
  174. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
  175. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
  176. simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
  177. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
  178. simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
  179. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
  180. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
  181. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
  182. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
  183. simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
  184. simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
  185. simtools/schemas/model_parameters/led_events.schema.yml +1 -1
  186. simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
  187. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
  188. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
  189. simtools/schemas/model_parameters/led_var_photons.schema.yml +1 -1
  190. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
  191. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +1 -1
  192. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
  193. simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
  194. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
  195. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +1 -1
  196. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +1 -1
  197. simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
  198. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
  199. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
  200. simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
  201. simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
  202. simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +1 -1
  203. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +1 -1
  204. simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +1 -1
  205. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
  206. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +1 -1
  207. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
  208. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +1 -1
  209. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
  210. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
  211. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
  212. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
  213. simtools/schemas/model_parameters/nsb_skymap.schema.yml +1 -1
  214. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +1 -1
  215. simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
  216. simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +1 -1
  217. simtools/schemas/model_parameters/optics_properties.schema.yml +1 -1
  218. simtools/schemas/model_parameters/parabolic_dish.schema.yml +1 -1
  219. simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
  220. simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
  221. simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
  222. simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
  223. simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
  224. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
  225. simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
  226. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
  227. simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
  228. simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +1 -1
  229. simtools/schemas/model_parameters/pm_transit_time.schema.yml +1 -1
  230. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
  231. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
  232. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
  233. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
  234. simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +1 -1
  235. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +1 -1
  236. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
  237. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
  238. simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
  239. simtools/schemas/model_parameters/quantum_efficiency.schema.yml +1 -1
  240. simtools/schemas/model_parameters/random_focal_length.schema.yml +1 -1
  241. simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
  242. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
  243. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +1 -1
  244. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +1 -1
  245. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
  246. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
  247. simtools/schemas/model_parameters/sampled_output.schema.yml +1 -1
  248. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
  249. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +1 -1
  250. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
  251. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
  252. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
  253. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
  254. simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +1 -1
  255. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +1 -1
  256. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
  257. simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +1 -1
  258. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
  259. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
  260. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
  261. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
  262. simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
  263. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
  264. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
  265. simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
  266. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
  267. simtools/schemas/model_parameters/telescope_transmission.schema.yml +1 -1
  268. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
  269. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
  270. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
  271. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
  272. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
  273. simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
  274. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
  275. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
  276. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +1 -1
  277. simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
  278. simtools/simtel/simtel_table_reader.py +410 -0
  279. simtools/simtel/simulator_camera_efficiency.py +6 -4
  280. simtools/simtel/simulator_light_emission.py +2 -2
  281. simtools/simtel/simulator_ray_tracing.py +1 -2
  282. simtools/simulator.py +80 -33
  283. simtools/testing/configuration.py +12 -8
  284. simtools/testing/helpers.py +5 -5
  285. simtools/testing/validate_output.py +28 -28
  286. simtools/utils/general.py +50 -3
  287. simtools/utils/names.py +3 -4
  288. simtools/utils/value_conversion.py +9 -1
  289. simtools/version.py +1 -1
  290. simtools/visualization/plot_tables.py +106 -0
  291. simtools/visualization/visualize.py +43 -5
  292. gammasimtools-0.8.1.dist-info/RECORD +0 -346
  293. simtools/_dev_version/scm_version.py +0 -10
  294. simtools/db/db_from_repo_handler.py +0 -106
  295. {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/LICENSE +0 -0
  296. {gammasimtools-0.8.1.dist-info → gammasimtools-0.9.0.dist-info}/top_level.txt +0 -0
@@ -198,13 +198,6 @@ class CommandLineParser(argparse.ArgumentParser):
198
198
  required=False,
199
199
  default=None,
200
200
  )
201
- _job_group.add_argument(
202
- "--db_simulation_model_url",
203
- help="simulation model repository URL",
204
- type=str,
205
- required=False,
206
- default=None,
207
- )
208
201
 
209
202
  def initialize_job_submission_arguments(self):
210
203
  """Initialize job submission arguments for simulator."""
@@ -243,12 +236,13 @@ class CommandLineParser(argparse.ArgumentParser):
243
236
  return
244
237
 
245
238
  _job_group = self.add_argument_group("simulation model")
246
- _job_group.add_argument(
247
- "--model_version",
248
- help="model version",
249
- type=str,
250
- default=None,
251
- )
239
+ if "model_version" in model_options:
240
+ _job_group.add_argument(
241
+ "--model_version",
242
+ help="model version",
243
+ type=str,
244
+ default=None,
245
+ )
252
246
  if any(
253
247
  option in model_options for option in ["site", "telescope", "layout", "layout_file"]
254
248
  ):
@@ -263,8 +257,8 @@ class CommandLineParser(argparse.ArgumentParser):
263
257
  _job_group.add_argument(
264
258
  "--telescope_model_file",
265
259
  help=(
266
- "File with changes to telescope model "
267
- " (yaml format; experimental with insufficient validation steps)."
260
+ "Path to a YAML file containing modifications to the telescope model. "
261
+ "This feature is intended for developers and lacks validation."
268
262
  ),
269
263
  type=Path,
270
264
  required=False,
@@ -10,6 +10,7 @@ import astropy.units as u
10
10
  from dotenv import load_dotenv
11
11
 
12
12
  import simtools.configuration.commandline_parser as argparser
13
+ from simtools.db.db_handler import jsonschema_db_dict
13
14
  from simtools.io_operations import io_handler
14
15
  from simtools.utils import general as gen
15
16
 
@@ -438,24 +439,10 @@ class Configurator:
438
439
  """
439
440
  Return parameters for DB configuration.
440
441
 
441
- Parameters
442
- ----------
442
+ Returns
443
+ -------
443
444
  dict
444
- Dictionary with DB parameters
445
+ Dictionary with DB parameters.
445
446
  """
446
- _db_dict = {}
447
- _db_para = (
448
- "db_api_user",
449
- "db_api_pw",
450
- "db_api_port",
451
- "db_server",
452
- "db_simulation_model",
453
- "db_simulation_model_url",
454
- )
455
- try:
456
- for _para in _db_para:
457
- _db_dict[_para] = self.config[_para]
458
- except KeyError:
459
- pass
460
-
461
- return _db_dict
447
+ db_params = jsonschema_db_dict["properties"].keys()
448
+ return {param: self.config.get(param) for param in db_params if param in self.config}
simtools/constants.py CHANGED
@@ -1,9 +1,9 @@
1
1
  """Project wide constants."""
2
2
 
3
- from pathlib import Path
3
+ from importlib.resources import files
4
4
 
5
5
  # Path to metadata jsonschema
6
- METADATA_JSON_SCHEMA = Path(__file__).parent / "../simtools/schemas/metadata.metaschema.yml"
6
+ METADATA_JSON_SCHEMA = files("simtools") / "schemas/metadata.metaschema.yml"
7
7
 
8
8
  # Path to model parameter schema files
9
- MODEL_PARAMETER_SCHEMA_PATH = Path(__file__).parent / "../simtools/schemas/model_parameters"
9
+ MODEL_PARAMETER_SCHEMA_PATH = files("simtools") / "schemas/model_parameters"
@@ -86,6 +86,24 @@ class MetadataCollector:
86
86
  except AttributeError:
87
87
  self._logger.debug(f"Method _fill_{meta_type}_meta not implemented")
88
88
 
89
+ def get_top_level_metadata(self):
90
+ """
91
+ Return top level metadata dictionary (with updated activity end time).
92
+
93
+ Returns
94
+ -------
95
+ dict
96
+ Top level metadata dictionary.
97
+
98
+ """
99
+ try:
100
+ self.top_level_meta[self.observatory]["activity"][
101
+ "end"
102
+ ] = datetime.datetime.now().isoformat(timespec="seconds")
103
+ except KeyError:
104
+ pass
105
+ return self.top_level_meta
106
+
89
107
  def get_data_model_schema_file_name(self):
90
108
  """
91
109
  Return data model schema file name.
@@ -523,7 +541,7 @@ class MetadataCollector:
523
541
  Returns
524
542
  -------
525
543
  bool
526
- True if all entries are None, False otherwise.
544
+ True if all entries are None.
527
545
 
528
546
  """
529
547
  if not isinstance(input_dict, dict):
@@ -38,7 +38,10 @@ def validate_schema(data, schema_file):
38
38
  if validation fails
39
39
 
40
40
  """
41
- schema, schema_file = _load_schema(schema_file)
41
+ schema, schema_file = _load_schema(
42
+ schema_file,
43
+ data.get("schema_version", "0.1.0"), # default version to ensure backward compatibility
44
+ )
42
45
 
43
46
  try:
44
47
  jsonschema.validate(data, schema=schema, format_checker=format_checkers.format_checker)
@@ -72,17 +75,17 @@ def get_default_metadata_dict(schema_file=None, observatory="CTA"):
72
75
  return _fill_defaults(schema["definitions"], observatory)
73
76
 
74
77
 
75
- def _load_schema(schema_file=None):
78
+ def _load_schema(schema_file=None, schema_version=None):
76
79
  """
77
80
  Load parameter schema from file from simpipe metadata schema.
78
81
 
79
82
  Returns
80
83
  -------
81
- schema_file dict
82
- Schema used for validation.
83
- schema_file str
84
+ schema_file: str
84
85
  File name schema is loaded from. If schema_file is not given,
85
86
  the default schema file name is returned.
87
+ schema_version: str
88
+ Schema version.
86
89
 
87
90
  Raises
88
91
  ------
@@ -98,6 +101,16 @@ def _load_schema(schema_file=None):
98
101
  except FileNotFoundError:
99
102
  schema_file = files("simtools").joinpath("schemas") / schema_file
100
103
  schema = gen.collect_data_from_file(file_name=schema_file)
104
+
105
+ if isinstance(schema, list): # schema file with several schemas defined
106
+ if schema_version is None:
107
+ raise ValueError(f"Schema version not given in {schema_file}.")
108
+ schema = next((doc for doc in schema if doc.get("version") == schema_version), None)
109
+ if schema is None:
110
+ raise ValueError(f"Schema version {schema_version} not found in {schema_file}.")
111
+ elif schema_version is not None and schema_version != schema.get("version"):
112
+ _logger.warning(f"Schema version {schema_version} does not match {schema.get('version')}")
113
+
101
114
  _logger.debug(f"Loading schema from {schema_file}")
102
115
  _add_array_elements("InstrumentTypeElement", schema)
103
116
 
@@ -170,7 +170,7 @@ class ModelDataWriter:
170
170
  metadata_input_dict["output_file"] = output_file
171
171
  metadata_input_dict["output_file_format"] = Path(output_file).suffix.lstrip(".")
172
172
  writer.write_metadata_to_yml(
173
- metadata=MetadataCollector(args_dict=metadata_input_dict).top_level_meta,
173
+ metadata=MetadataCollector(args_dict=metadata_input_dict).get_top_level_metadata(),
174
174
  yml_file=output_path / f"{Path(output_file).stem}",
175
175
  )
176
176
  return _json_dict
@@ -12,6 +12,7 @@ from astropy.table import Column, Table, unique
12
12
  from astropy.utils.diff import report_diff_values
13
13
 
14
14
  import simtools.utils.general as gen
15
+ from simtools.constants import MODEL_PARAMETER_SCHEMA_PATH
15
16
  from simtools.data_model import format_checkers
16
17
  from simtools.utils import value_conversion
17
18
 
@@ -57,7 +58,7 @@ class DataValidator:
57
58
  self.data_table = data_table
58
59
  self.check_exact_data_type = check_exact_data_type
59
60
 
60
- def validate_and_transform(self, is_model_parameter=False):
61
+ def validate_and_transform(self, is_model_parameter=False, lists_as_strings=False):
61
62
  """
62
63
  Validate data and data file.
63
64
 
@@ -65,6 +66,8 @@ class DataValidator:
65
66
  ----------
66
67
  is_model_parameter: bool
67
68
  This is a model parameter (add some data preparation)
69
+ lists_as_strings: bool
70
+ Convert lists to strings (as needed for model parameters)
68
71
 
69
72
  Returns
70
73
  -------
@@ -80,13 +83,9 @@ class DataValidator:
80
83
  if self.data_file_name:
81
84
  self.validate_data_file()
82
85
  if isinstance(self.data_dict, dict):
83
- if is_model_parameter:
84
- self._prepare_model_parameter()
85
- self._validate_data_dict()
86
- return self.data_dict
86
+ return self._validate_data_dict(is_model_parameter, lists_as_strings)
87
87
  if isinstance(self.data_table, Table):
88
- self._validate_data_table()
89
- return self.data_table
88
+ return self._validate_data_table()
90
89
  self._logger.error("No data or data table to validate")
91
90
  raise TypeError
92
91
 
@@ -108,25 +107,57 @@ class DataValidator:
108
107
 
109
108
  def validate_parameter_and_file_name(self):
110
109
  """Validate that file name and key 'parameter_name' in data dict are the same."""
111
- if self.data_dict.get("parameter") != Path(self.data_file_name).stem:
110
+ if not str(Path(self.data_file_name).stem).startswith(self.data_dict.get("parameter")):
112
111
  raise ValueError(
113
112
  f"Parameter name in data dict {self.data_dict.get('parameter')} and "
114
113
  f"file name {Path(self.data_file_name).stem} do not match."
115
114
  )
116
115
 
117
- def _validate_data_dict(self):
116
+ @staticmethod
117
+ def validate_model_parameter(par_dict):
118
+ """
119
+ Validate a simulation model parameter (static method).
120
+
121
+ Parameters
122
+ ----------
123
+ par_dict: dict
124
+ Data dictionary
125
+
126
+ Returns
127
+ -------
128
+ dict
129
+ Validated data dictionary
130
+ """
131
+ data_validator = DataValidator(
132
+ schema_file=MODEL_PARAMETER_SCHEMA_PATH / "f{par_dict['parameter']}.schema.yml",
133
+ data_dict=par_dict,
134
+ check_exact_data_type=False,
135
+ )
136
+ return data_validator.validate_and_transform(is_model_parameter=True)
137
+
138
+ def _validate_data_dict(self, is_model_parameter=False, lists_as_strings=False):
118
139
  """
119
140
  Validate values in a dictionary.
120
141
 
121
142
  Handles different types of naming in data dicts (using 'name' or 'parameter'
122
143
  keys for name fields).
123
144
 
145
+ Parameters
146
+ ----------
147
+ is_model_parameter: bool
148
+ This is a model parameter (add some data preparation)
149
+ lists_as_strings: bool
150
+ Convert lists to strings (as needed for model parameters)
151
+
124
152
  Raises
125
153
  ------
126
154
  KeyError
127
155
  if data dict does not contain a 'name' or 'parameter' key.
128
156
 
129
157
  """
158
+ if is_model_parameter:
159
+ self._prepare_model_parameter()
160
+
130
161
  if not (_name := self.data_dict.get("name") or self.data_dict.get("parameter")):
131
162
  raise KeyError("Data dict does not contain a 'name' or 'parameter' key.")
132
163
  self._data_description = self._read_validation_schema(self.schema_file_name, _name)
@@ -145,6 +176,11 @@ class DataValidator:
145
176
 
146
177
  self._check_version_string(self.data_dict.get("version"))
147
178
 
179
+ if lists_as_strings:
180
+ self._convert_results_to_model_format()
181
+
182
+ return self.data_dict
183
+
148
184
  def _validate_value_and_unit(self, value, unit, index):
149
185
  """
150
186
  Validate value, unit, and perform type checking and conversions.
@@ -191,7 +227,13 @@ class DataValidator:
191
227
  conversion_factor = [
192
228
  1 if v is None else u.Unit(v).to(u.Unit(t)) for v, t in zip(unit, target_unit)
193
229
  ]
194
- return [v * c for v, c in zip(value, conversion_factor)], target_unit
230
+ try:
231
+ return [
232
+ v * c if not isinstance(v, bool) and not isinstance(v, dict) else v
233
+ for v, c in zip(value, conversion_factor)
234
+ ], target_unit
235
+ except TypeError:
236
+ return [None], target_unit
195
237
 
196
238
  def _validate_data_dict_using_json_schema(self, data, json_schema):
197
239
  """
@@ -228,6 +270,7 @@ class DataValidator:
228
270
  self._validate_data_columns()
229
271
  self._check_data_for_duplicates()
230
272
  self._sort_data()
273
+ return self.data_table
231
274
 
232
275
  def _validate_data_columns(self):
233
276
  """
@@ -726,6 +769,8 @@ class DataValidator:
726
769
  )
727
770
  )
728
771
  except IndexError as exc:
772
+ if len(self._data_description) == 1: # all columns are described by the same schema
773
+ return self._data_description[0]
729
774
  self._logger.error(
730
775
  f"Data column '{column_name}' not found in reference column definition"
731
776
  )
@@ -771,6 +816,18 @@ class DataValidator:
771
816
  if self.data_dict["unit"] is not None:
772
817
  self.data_dict["unit"] = gen.convert_string_to_list(self.data_dict["unit"])
773
818
 
819
+ def _convert_results_to_model_format(self):
820
+ """
821
+ Convert results to model format.
822
+
823
+ Convert lists to strings (as needed for model parameters).
824
+ """
825
+ value = self.data_dict["value"]
826
+ if isinstance(value, list):
827
+ self.data_dict["value"] = gen.convert_list_to_string(value)
828
+ if isinstance(self.data_dict["unit"], list):
829
+ self.data_dict["unit"] = gen.convert_list_to_string(self.data_dict["unit"])
830
+
774
831
  def _check_version_string(self, version):
775
832
  """
776
833
  Check that version string follows semantic versioning.