gammasimtools 0.18.0__py3-none-any.whl → 0.20.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 (367) hide show
  1. {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/METADATA +24 -69
  2. gammasimtools-0.20.0.dist-info/RECORD +395 -0
  3. {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/entry_points.txt +11 -4
  4. {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/licenses/LICENSE +1 -1
  5. simtools/_version.py +16 -3
  6. simtools/applications/calculate_incident_angles.py +182 -0
  7. simtools/applications/convert_all_model_parameters_from_simtel.py +4 -3
  8. simtools/applications/convert_geo_coordinates_of_array_elements.py +3 -3
  9. simtools/applications/db_add_simulation_model_from_repository_to_db.py +17 -14
  10. simtools/applications/db_add_value_from_json_to_db.py +8 -10
  11. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +8 -13
  12. simtools/applications/db_generate_compound_indexes.py +65 -0
  13. simtools/applications/db_get_file_from_db.py +12 -24
  14. simtools/applications/db_get_parameter_from_db.py +4 -4
  15. simtools/applications/db_inspect_databases.py +20 -10
  16. simtools/applications/derive_mirror_rnda.py +17 -11
  17. simtools/applications/derive_psf_parameters.py +59 -309
  18. simtools/applications/derive_trigger_rates.py +91 -0
  19. simtools/applications/docs_produce_array_element_report.py +1 -1
  20. simtools/applications/docs_produce_calibration_reports.py +1 -1
  21. simtools/applications/docs_produce_model_parameter_reports.py +1 -1
  22. simtools/applications/docs_produce_simulation_configuration_report.py +1 -1
  23. simtools/applications/generate_corsika_histograms.py +1 -1
  24. simtools/applications/generate_default_metadata.py +8 -24
  25. simtools/applications/generate_simtel_event_data.py +11 -11
  26. simtools/applications/maintain_simulation_model_add_production_table.py +71 -0
  27. simtools/applications/maintain_simulation_model_compare_productions.py +98 -0
  28. simtools/applications/{verify_simulation_model_production_tables.py → maintain_simulation_model_verify_production_tables.py} +9 -1
  29. simtools/applications/merge_tables.py +2 -2
  30. simtools/applications/plot_array_layout.py +3 -3
  31. simtools/applications/plot_simtel_events.py +421 -0
  32. simtools/applications/plot_tabular_data.py +9 -2
  33. simtools/applications/plot_tabular_data_for_model_parameter.py +2 -1
  34. simtools/applications/print_version.py +8 -9
  35. simtools/applications/production_derive_corsika_limits.py +6 -7
  36. simtools/applications/production_derive_statistics.py +1 -1
  37. simtools/applications/production_generate_grid.py +2 -2
  38. simtools/applications/production_merge_corsika_limits.py +214 -0
  39. simtools/applications/run_application.py +47 -113
  40. simtools/applications/simulate_calibration_events.py +166 -0
  41. simtools/applications/simulate_flasher.py +141 -0
  42. simtools/applications/{simulate_light_emission.py → simulate_illuminator.py} +35 -99
  43. simtools/applications/simulate_prod.py +6 -24
  44. simtools/applications/simulate_prod_htcondor_generator.py +7 -0
  45. simtools/applications/submit_array_layouts.py +2 -1
  46. simtools/applications/submit_model_parameter_from_external.py +1 -1
  47. simtools/applications/validate_camera_efficiency.py +30 -12
  48. simtools/applications/validate_camera_fov.py +1 -1
  49. simtools/applications/validate_cumulative_psf.py +1 -1
  50. simtools/applications/validate_file_using_schema.py +9 -5
  51. simtools/applications/validate_optics.py +1 -1
  52. simtools/camera/camera_efficiency.py +61 -45
  53. simtools/camera/single_photon_electron_spectrum.py +1 -1
  54. simtools/configuration/commandline_parser.py +46 -11
  55. simtools/configuration/configurator.py +4 -4
  56. simtools/corsika/corsika_config.py +45 -25
  57. simtools/corsika/corsika_histograms.py +6 -5
  58. simtools/data_model/data_reader.py +2 -3
  59. simtools/data_model/metadata_collector.py +32 -36
  60. simtools/data_model/metadata_model.py +15 -12
  61. simtools/data_model/model_data_writer.py +13 -32
  62. simtools/data_model/schema.py +74 -24
  63. simtools/data_model/validate_data.py +42 -12
  64. simtools/db/db_handler.py +125 -62
  65. simtools/db/db_model_upload.py +14 -19
  66. simtools/dependencies.py +98 -30
  67. simtools/io/ascii_handler.py +279 -0
  68. simtools/{io_operations → io}/io_handler.py +25 -3
  69. simtools/job_execution/htcondor_script_generator.py +15 -4
  70. simtools/layout/array_layout.py +1 -1
  71. simtools/layout/array_layout_utils.py +51 -12
  72. simtools/model/array_model.py +41 -5
  73. simtools/model/flasher_model.py +106 -0
  74. simtools/model/model_parameter.py +4 -4
  75. simtools/model/model_repository.py +197 -2
  76. simtools/model/site_model.py +25 -0
  77. simtools/model/telescope_model.py +3 -1
  78. simtools/production_configuration/derive_corsika_limits.py +336 -427
  79. simtools/production_configuration/derive_production_statistics_handler.py +7 -6
  80. simtools/production_configuration/generate_production_grid.py +9 -11
  81. simtools/production_configuration/merge_corsika_limits.py +528 -0
  82. simtools/ray_tracing/incident_angles.py +706 -0
  83. simtools/ray_tracing/mirror_panel_psf.py +1 -0
  84. simtools/ray_tracing/psf_parameter_optimisation.py +792 -0
  85. simtools/ray_tracing/ray_tracing.py +6 -2
  86. simtools/reporting/docs_read_parameters.py +150 -62
  87. simtools/runners/corsika_runner.py +1 -1
  88. simtools/runners/corsika_simtel_runner.py +14 -5
  89. simtools/runners/runner_services.py +10 -5
  90. simtools/runners/simtools_runner.py +267 -0
  91. simtools/schemas/application_workflow.metaschema.yml +101 -68
  92. simtools/schemas/input/MST_mirror_2f_measurements.schema.yml +1 -1
  93. simtools/schemas/input/single_pe_spectrum.schema.yml +1 -1
  94. simtools/schemas/metadata.metaschema.yml +577 -3
  95. simtools/schemas/model_parameter.metaschema.yml +6 -6
  96. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +4 -4
  97. simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
  98. simtools/schemas/model_parameters/altitude.schema.yml +1 -1
  99. simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
  100. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +1 -1
  101. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +1 -1
  102. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +1 -1
  103. simtools/schemas/model_parameters/array_layouts.schema.yml +1 -1
  104. simtools/schemas/model_parameters/array_triggers.schema.yml +1 -1
  105. simtools/schemas/model_parameters/array_window.schema.yml +1 -1
  106. simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
  107. simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
  108. simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
  109. simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
  110. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
  111. simtools/schemas/model_parameters/atmospheric_transmission.schema.yml +1 -1
  112. simtools/schemas/model_parameters/axes_offsets.schema.yml +1 -1
  113. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
  114. simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
  115. simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
  116. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
  117. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
  118. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
  119. simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
  120. simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
  121. simtools/schemas/model_parameters/camera_filter_incidence_angle.schema.yml +1 -1
  122. simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
  123. simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
  124. simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
  125. simtools/schemas/model_parameters/correct_nsb_spectrum_to_telescope_altitude.schema.yml +1 -1
  126. simtools/schemas/model_parameters/corsika_cherenkov_photon_bunch_size.schema.yml +1 -1
  127. simtools/schemas/model_parameters/corsika_cherenkov_photon_wavelength_range.schema.yml +1 -1
  128. simtools/schemas/model_parameters/corsika_first_interaction_height.schema.yml +1 -1
  129. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
  130. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
  131. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
  132. simtools/schemas/model_parameters/corsika_longitudinal_shower_development.schema.yml +1 -1
  133. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
  134. simtools/schemas/model_parameters/corsika_particle_kinetic_energy_cutoff.schema.yml +1 -1
  135. simtools/schemas/model_parameters/corsika_starting_grammage.schema.yml +3 -3
  136. simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
  137. simtools/schemas/model_parameters/default_trigger.schema.yml +1 -1
  138. simtools/schemas/model_parameters/design_model.schema.yml +1 -1
  139. simtools/schemas/model_parameters/disc_ac_coupled.schema.yml +1 -1
  140. simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
  141. simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
  142. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
  143. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
  144. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
  145. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
  146. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
  147. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
  148. simtools/schemas/model_parameters/discriminator_pulse_shape.schema.yml +1 -1
  149. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
  150. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
  151. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
  152. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
  153. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
  154. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
  155. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
  156. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
  157. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
  158. simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
  159. simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
  160. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
  161. simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
  162. simtools/schemas/model_parameters/dsum_pedsub.schema.yml +1 -1
  163. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
  164. simtools/schemas/model_parameters/dsum_prescale.schema.yml +1 -1
  165. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
  166. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
  167. simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
  168. simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml +1 -1
  169. simtools/schemas/model_parameters/dsum_threshold.schema.yml +2 -2
  170. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
  171. simtools/schemas/model_parameters/effective_focal_length.schema.yml +1 -1
  172. simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
  173. simtools/schemas/model_parameters/fadc_ac_coupled.schema.yml +1 -1
  174. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
  175. simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
  176. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
  177. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +1 -1
  178. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
  179. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
  180. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
  181. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
  182. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +1 -1
  183. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
  184. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
  185. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
  186. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +1 -1
  187. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
  188. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
  189. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
  190. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
  191. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
  192. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
  193. simtools/schemas/model_parameters/fadc_long_event_threshold.schema.yml +35 -0
  194. simtools/schemas/model_parameters/fadc_long_sum_bins.schema.yml +41 -0
  195. simtools/schemas/model_parameters/fadc_long_sum_offset.schema.yml +38 -0
  196. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
  197. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +1 -1
  198. simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
  199. simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
  200. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
  201. simtools/schemas/model_parameters/fadc_pulse_shape.schema.yml +1 -1
  202. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
  203. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
  204. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
  205. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
  206. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
  207. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
  208. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
  209. simtools/schemas/model_parameters/flatfielding.schema.yml +1 -1
  210. simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
  211. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +1 -1
  212. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
  213. simtools/schemas/model_parameters/focus_offset.schema.yml +1 -1
  214. simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
  215. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
  216. simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
  217. simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
  218. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
  219. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
  220. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
  221. simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
  222. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
  223. simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
  224. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
  225. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
  226. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
  227. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
  228. simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
  229. simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
  230. simtools/schemas/model_parameters/led_events.schema.yml +1 -1
  231. simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
  232. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
  233. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
  234. simtools/schemas/model_parameters/led_var_photons.schema.yml +1 -1
  235. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
  236. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +50 -1
  237. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
  238. simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
  239. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
  240. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +1 -1
  241. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +1 -1
  242. simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
  243. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
  244. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
  245. simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
  246. simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
  247. simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +1 -1
  248. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +1 -1
  249. simtools/schemas/model_parameters/mirror_reflectivity.schema.yml +1 -1
  250. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
  251. simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +1 -1
  252. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +1 -1
  253. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
  254. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +1 -1
  255. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
  256. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +2 -2
  257. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
  258. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
  259. simtools/schemas/model_parameters/nsb_sky_map.schema.yml +1 -1
  260. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +23 -30
  261. simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
  262. simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml +1 -1
  263. simtools/schemas/model_parameters/optics_properties.schema.yml +1 -1
  264. simtools/schemas/model_parameters/parabolic_dish.schema.yml +1 -1
  265. simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
  266. simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
  267. simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
  268. simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
  269. simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
  270. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
  271. simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
  272. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
  273. simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
  274. simtools/schemas/model_parameters/pm_photoelectron_spectrum.schema.yml +1 -1
  275. simtools/schemas/model_parameters/pm_transit_time.schema.yml +1 -1
  276. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
  277. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +1 -1
  278. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
  279. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
  280. simtools/schemas/model_parameters/primary_mirror_incidence_angle.schema.yml +11 -1
  281. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +1 -1
  282. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
  283. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
  284. simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
  285. simtools/schemas/model_parameters/quantum_efficiency.schema.yml +1 -1
  286. simtools/schemas/model_parameters/random_focal_length.schema.yml +1 -1
  287. simtools/schemas/model_parameters/random_generator.schema.yml +1 -1
  288. simtools/schemas/model_parameters/random_mono_probability.schema.yml +1 -1
  289. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
  290. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +1 -1
  291. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +1 -1
  292. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
  293. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
  294. simtools/schemas/model_parameters/sampled_output.schema.yml +1 -1
  295. simtools/schemas/model_parameters/save_pe_with_amplitude.schema.yml +1 -1
  296. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +1 -1
  297. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
  298. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
  299. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
  300. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
  301. simtools/schemas/model_parameters/secondary_mirror_incidence_angle.schema.yml +11 -1
  302. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +1 -1
  303. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
  304. simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml +11 -1
  305. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
  306. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
  307. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
  308. simtools/schemas/model_parameters/stars.schema.yml +2 -2
  309. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
  310. simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
  311. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
  312. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
  313. simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
  314. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
  315. simtools/schemas/model_parameters/telescope_transmission.schema.yml +1 -1
  316. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
  317. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
  318. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
  319. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
  320. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
  321. simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
  322. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
  323. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
  324. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +1 -1
  325. simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
  326. simtools/schemas/plot_configuration.metaschema.yml +5 -2
  327. simtools/schemas/production_configuration_metrics.schema.yml +12 -2
  328. simtools/schemas/production_tables.schema.yml +7 -2
  329. simtools/simtel/simtel_config_reader.py +2 -2
  330. simtools/simtel/simtel_config_writer.py +33 -23
  331. simtools/simtel/simtel_io_event_histograms.py +483 -0
  332. simtools/simtel/simtel_io_event_reader.py +65 -43
  333. simtools/simtel/simtel_io_event_writer.py +40 -20
  334. simtools/simtel/simtel_io_metadata.py +1 -1
  335. simtools/simtel/simtel_table_reader.py +95 -13
  336. simtools/simtel/simulator_array.py +138 -10
  337. simtools/simtel/simulator_camera_efficiency.py +32 -23
  338. simtools/simtel/simulator_light_emission.py +437 -271
  339. simtools/simtel/simulator_ray_tracing.py +1 -1
  340. simtools/simulator.py +105 -147
  341. simtools/telescope_trigger_rates.py +119 -0
  342. simtools/testing/configuration.py +24 -26
  343. simtools/testing/helpers.py +2 -2
  344. simtools/testing/log_inspector.py +52 -0
  345. simtools/testing/validate_output.py +87 -37
  346. simtools/utils/general.py +125 -255
  347. simtools/utils/geometry.py +56 -0
  348. simtools/utils/names.py +1 -1
  349. simtools/visualization/legend_handlers.py +180 -264
  350. simtools/visualization/plot_array_layout.py +20 -8
  351. simtools/visualization/plot_incident_angles.py +431 -0
  352. simtools/visualization/plot_pixels.py +1 -1
  353. simtools/visualization/plot_simtel_event_histograms.py +376 -0
  354. simtools/visualization/plot_simtel_events.py +816 -0
  355. simtools/visualization/plot_tables.py +133 -37
  356. simtools/visualization/visualize.py +1 -100
  357. gammasimtools-0.18.0.dist-info/RECORD +0 -376
  358. simtools/applications/calculate_trigger_rate.py +0 -187
  359. simtools/applications/generate_sim_telarray_histograms.py +0 -196
  360. simtools/production_configuration/derive_corsika_limits_grid.py +0 -232
  361. simtools/simtel/simtel_io_histogram.py +0 -621
  362. simtools/simtel/simtel_io_histograms.py +0 -552
  363. {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/WHEEL +0 -0
  364. {gammasimtools-0.18.0.dist-info → gammasimtools-0.20.0.dist-info}/top_level.txt +0 -0
  365. /simtools/{io_operations → io}/hdf5_handler.py +0 -0
  366. /simtools/{io_operations → io}/legacy_data_handler.py +0 -0
  367. /simtools/{io_operations/io_table_handler.py → io/table_handler.py} +0 -0
@@ -4,9 +4,8 @@ import logging
4
4
  import os
5
5
  from pathlib import Path
6
6
 
7
- import yaml
8
-
9
7
  import simtools.utils.general as gen
8
+ from simtools.io import ascii_handler
10
9
 
11
10
  _logger = logging.getLogger(__name__)
12
11
 
@@ -43,24 +42,24 @@ def get_list_of_test_configurations(config_files):
43
42
 
44
43
  # list of all applications
45
44
  # (needs to be sorted for pytest-xdist, see Known Limitations in their website)
46
- _applications = sorted({item["APPLICATION"] for item in configs if "APPLICATION" in item})
45
+ _applications = sorted({item["application"] for item in configs if "application" in item})
47
46
  for app in _applications:
48
47
  configs.extend(
49
48
  [
50
- {"APPLICATION": app, "TEST_NAME": "auto-help", "CONFIGURATION": {"HELP": True}},
49
+ {"application": app, "test_name": "auto-help", "configuration": {"help": True}},
51
50
  {
52
- "APPLICATION": app,
53
- "TEST_NAME": "auto-version",
54
- "CONFIGURATION": {"VERSION": True},
51
+ "application": app,
52
+ "test_name": "auto-version",
53
+ "configuration": {"version": True},
55
54
  },
56
- {"APPLICATION": app, "TEST_NAME": "auto-no_config"},
55
+ {"application": app, "test_name": "auto-no_config"},
57
56
  ]
58
57
  )
59
58
 
60
59
  return (
61
60
  configs,
62
61
  [
63
- f"{item.get('APPLICATION', 'no-app-name')}_{item.get('TEST_NAME', 'no-test-name')}"
62
+ f"{item.get('application', 'no-app-name')}_{item.get('test_name', 'no-test-name')}"
64
63
  for item in configs
65
64
  ],
66
65
  )
@@ -74,9 +73,9 @@ def _read_configs_from_files(config_files):
74
73
  # remove new line characters from config - otherwise issues
75
74
  # with especially long file names
76
75
  _dict = gen.remove_substring_recursively_from_dict(
77
- gen.collect_data_from_file(file_name=config_file), substring="\n"
76
+ ascii_handler.collect_data_from_file(file_name=config_file), substring="\n"
78
77
  )
79
- for application in _dict.get("CTA_SIMPIPE", {}).get("APPLICATIONS", []):
78
+ for application in _dict.get("applications", []):
80
79
  configs.append(application)
81
80
  return configs
82
81
 
@@ -108,12 +107,12 @@ def configure(config, tmp_test_directory, request):
108
107
  if isinstance(model_version_requested, list) and len(model_version_requested) == 1:
109
108
  model_version_requested = model_version_requested[0]
110
109
 
111
- if "CONFIGURATION" in config:
110
+ if "configuration" in config:
112
111
  _skip_test_for_model_version(config, model_version_requested)
113
112
  _skip_test_for_production_db(config)
114
113
 
115
114
  config_file, config_string, config_file_model_version = _prepare_test_options(
116
- config["CONFIGURATION"],
115
+ config["configuration"],
117
116
  output_path=tmp_output_path,
118
117
  model_version=model_version_requested,
119
118
  )
@@ -123,7 +122,7 @@ def configure(config, tmp_test_directory, request):
123
122
  config_file_model_version = None
124
123
 
125
124
  cmd = get_application_command(
126
- app=config.get("APPLICATION", None),
125
+ app=config.get("application", None),
127
126
  config_file=config_file,
128
127
  config_string=config_string,
129
128
  )
@@ -132,9 +131,9 @@ def configure(config, tmp_test_directory, request):
132
131
 
133
132
  def _skip_test_for_model_version(config, model_version_requested):
134
133
  """Skip test if model version requested is not supported."""
135
- if config.get("MODEL_VERSION_USE_CURRENT") is None or model_version_requested is None:
134
+ if config.get("model_version_use_current") is None or model_version_requested is None:
136
135
  return
137
- model_version_config = config["CONFIGURATION"]["MODEL_VERSION"]
136
+ model_version_config = config["configuration"]["model_version"]
138
137
  if model_version_requested != model_version_config:
139
138
  raise VersionError(
140
139
  f"Model version requested {model_version_requested} not supported for this test"
@@ -143,7 +142,7 @@ def _skip_test_for_model_version(config, model_version_requested):
143
142
 
144
143
  def _skip_test_for_production_db(config):
145
144
  """Skip test if production db is used."""
146
- if not config.get("SKIP_FOR_PRODUCTION_DB"):
145
+ if not config.get("skip_for_production_db"):
147
146
  return
148
147
 
149
148
  if "db.zeuthen.desy.de" in os.getenv("SIMTOOLS_DB_SERVER", ""):
@@ -184,19 +183,18 @@ def _prepare_test_options(config, output_path, model_version=None):
184
183
  return None, "--" + next(iter(config.keys())).lower(), None
185
184
 
186
185
  tmp_config_file = output_path / "tmp_config.yml"
187
- config_file_model_version = config.get("MODEL_VERSION")
188
- if model_version and "MODEL_VERSION" in config:
189
- config.update({"MODEL_VERSION": model_version})
186
+ config_file_model_version = config.get("model_version")
187
+ if model_version and "model_version" in config:
188
+ config.update({"model_version": model_version})
190
189
 
191
- for key in ["OUTPUT_PATH", "DATA_DIRECTORY", "PACK_FOR_GRID_REGISTER"]:
190
+ for key in ["output_path", "data_directory", "pack_for_grid_register"]:
192
191
  if key in config:
193
192
  config[key] = str(Path(output_path).joinpath(config[key]))
194
- if key == "OUTPUT_PATH":
195
- config["USE_PLAIN_OUTPUT_PATH"] = True
193
+ if key == "output_path":
194
+ config["use_plain_output_path"] = True
196
195
 
197
196
  _logger.info(f"Writing config file: {tmp_config_file}")
198
- with open(tmp_config_file, "w", encoding="utf-8") as file:
199
- yaml.safe_dump(config, file, sort_keys=False)
197
+ ascii_handler.write_data_to_file(data=config, output_file=tmp_config_file, sort_keys=False)
200
198
 
201
199
  return tmp_config_file, None, config_file_model_version
202
200
 
@@ -245,7 +243,7 @@ def create_tmp_output_path(tmp_test_directory, config):
245
243
  """
246
244
  try:
247
245
  tmp_output_path = Path(tmp_test_directory).joinpath(
248
- config["APPLICATION"] + "-" + config["TEST_NAME"]
246
+ config["application"] + "-" + config["test_name"]
249
247
  )
250
248
  except KeyError as exc:
251
249
  raise KeyError(f"No application defined in configuration {config}.") from exc
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
 
7
7
  def skip_camera_efficiency(config):
8
8
  """Skip camera efficiency tests if the old version of testeff is used."""
9
- if "camera-efficiency" in config["APPLICATION"] and not _new_testeff_version():
9
+ if "camera-efficiency" in config["application"] and not _new_testeff_version():
10
10
  return (
11
11
  "Any applications calling the old version of testeff are skipped "
12
12
  "due to a limitation of the old testeff not allowing to specify "
@@ -42,7 +42,7 @@ def skip_multiple_version_test(config, model_version):
42
42
  if not isinstance(model_version, list):
43
43
  return None
44
44
 
45
- config_model_version = config.get("CONFIGURATION", {}).get("MODEL_VERSION", [])
45
+ config_model_version = config.get("configuration", {}).get("model_version", [])
46
46
 
47
47
  if not isinstance(config_model_version, list):
48
48
  config_model_version = [config_model_version]
@@ -0,0 +1,52 @@
1
+ """Inspect logs and output for errors and warnings."""
2
+
3
+ import logging
4
+ import re
5
+
6
+ _logger = logging.getLogger(__name__)
7
+
8
+
9
+ ERROR_PATTERNS = [
10
+ re.compile(r"error", re.IGNORECASE),
11
+ re.compile(r"exception", re.IGNORECASE),
12
+ re.compile(r"traceback", re.IGNORECASE),
13
+ re.compile(r"\b(failed to|has failed)\b", re.IGNORECASE),
14
+ re.compile(r"runtime\s*warning", re.IGNORECASE),
15
+ re.compile(r"segmentation fault", re.IGNORECASE),
16
+ ]
17
+
18
+ IGNORE_PATTERNS = [re.compile(r"Falling back to 'utf-8' with errors='ignore'", re.IGNORECASE)]
19
+
20
+
21
+ def inspect(log_text):
22
+ """
23
+ Inspect log text for errors and run-time warnings.
24
+
25
+ Ignore any lines containing "INFO::" (to avoid false positives
26
+ like "INFO:: Job error stream ").
27
+
28
+ Parameters
29
+ ----------
30
+ log_text: str or list of str
31
+ Text of the log to inspect.
32
+
33
+ Returns
34
+ -------
35
+ bool
36
+ True if no errors or warnings are found, False otherwise.
37
+ """
38
+ log_text = log_text if isinstance(log_text, list) else [log_text]
39
+
40
+ issues = [
41
+ (lineno, line)
42
+ for txt in log_text
43
+ for lineno, line in enumerate(txt.splitlines(), 1)
44
+ if "INFO::" not in line
45
+ and any(p.search(line) for p in ERROR_PATTERNS)
46
+ and not any(p.search(line) for p in IGNORE_PATTERNS)
47
+ ]
48
+
49
+ for lineno, line in issues:
50
+ _logger.error(f"Error or warning found in log at line {lineno}: {line.strip()}")
51
+
52
+ return not issues
@@ -7,12 +7,16 @@ import numpy as np
7
7
  from astropy.table import Table
8
8
 
9
9
  import simtools.utils.general as gen
10
+ from simtools.db import db_handler
11
+ from simtools.io import ascii_handler
10
12
  from simtools.testing import assertions
11
13
 
12
14
  _logger = logging.getLogger(__name__)
13
15
 
14
16
 
15
- def validate_application_output(config, from_command_line=None, from_config_file=None):
17
+ def validate_application_output(
18
+ config, from_command_line=None, from_config_file=None, db_config=None
19
+ ):
16
20
  """
17
21
  Validate application output against expected output.
18
22
 
@@ -30,41 +34,47 @@ def validate_application_output(config, from_command_line=None, from_config_file
30
34
  Model version from the configuration file.
31
35
 
32
36
  """
33
- if "INTEGRATION_TESTS" not in config:
37
+ if "integration_tests" not in config:
34
38
  return
35
39
 
36
- for integration_test in config["INTEGRATION_TESTS"]:
40
+ for integration_test in config["integration_tests"]:
37
41
  _logger.info(f"Testing application output: {integration_test}")
38
42
 
39
43
  if from_command_line == from_config_file:
40
- _validate_output_files(config, integration_test)
44
+ _validate_output_files(config, integration_test, db_config)
41
45
 
42
- if "FILE_TYPE" in integration_test:
46
+ if "file_type" in integration_test:
43
47
  assert assertions.assert_file_type(
44
- integration_test["FILE_TYPE"],
45
- Path(config["CONFIGURATION"]["OUTPUT_PATH"]).joinpath(
46
- config["CONFIGURATION"]["OUTPUT_FILE"]
48
+ integration_test["file_type"],
49
+ Path(config["configuration"]["output_path"]).joinpath(
50
+ config["configuration"]["output_file"]
47
51
  ),
48
52
  )
49
53
  _test_simtel_cfg_files(config, integration_test, from_command_line, from_config_file)
50
54
 
51
55
 
52
- def _validate_output_files(config, integration_test):
56
+ def _validate_output_files(config, integration_test, db_config):
53
57
  """Validate output files."""
54
- if "REFERENCE_OUTPUT_FILE" in integration_test:
58
+ if "reference_output_file" in integration_test:
55
59
  _validate_reference_output_file(config, integration_test)
56
- if "TEST_OUTPUT_FILES" in integration_test:
57
- _validate_output_path_and_file(config, integration_test["TEST_OUTPUT_FILES"])
58
- if "OUTPUT_FILE" in integration_test:
60
+ if "test_output_files" in integration_test:
61
+ _validate_output_path_and_file(config, integration_test["test_output_files"])
62
+ if "output_file" in integration_test:
59
63
  _validate_output_path_and_file(
60
64
  config,
61
- [{"PATH_DESCRIPTOR": "OUTPUT_PATH", "FILE": integration_test["OUTPUT_FILE"]}],
65
+ [{"path_descriptor": "output_path", "file": integration_test["output_file"]}],
66
+ )
67
+ if "model_parameter_validation" in integration_test:
68
+ _validate_model_parameter_json_file(
69
+ config,
70
+ integration_test["model_parameter_validation"],
71
+ db_config,
62
72
  )
63
73
 
64
74
 
65
75
  def _test_simtel_cfg_files(config, integration_test, from_command_line, from_config_file):
66
76
  """Test simtel cfg files."""
67
- cfg_files = integration_test.get("TEST_SIMTEL_CFG_FILES", {})
77
+ cfg_files = integration_test.get("test_simtel_cfg_files", {})
68
78
  if isinstance(from_command_line, list):
69
79
  sources = from_command_line
70
80
  elif isinstance(from_config_file, list):
@@ -81,12 +91,12 @@ def _test_simtel_cfg_files(config, integration_test, from_command_line, from_con
81
91
  def _validate_reference_output_file(config, integration_test):
82
92
  """Compare with reference output file."""
83
93
  assert compare_files(
84
- integration_test["REFERENCE_OUTPUT_FILE"],
85
- Path(config["CONFIGURATION"]["OUTPUT_PATH"]).joinpath(
86
- config["CONFIGURATION"]["OUTPUT_FILE"]
94
+ integration_test["reference_output_file"],
95
+ Path(config["configuration"]["output_path"]).joinpath(
96
+ config["configuration"]["output_file"]
87
97
  ),
88
- integration_test.get("TOLERANCE", 1.0e-5),
89
- integration_test.get("TEST_COLUMNS", None),
98
+ integration_test.get("tolerance", 1.0e-5),
99
+ integration_test.get("test_columns", None),
90
100
  )
91
101
 
92
102
 
@@ -94,26 +104,64 @@ def _validate_output_path_and_file(config, integration_file_tests):
94
104
  """Check if output paths and files exist."""
95
105
  for file_test in integration_file_tests:
96
106
  try:
97
- output_path = config["CONFIGURATION"][file_test["PATH_DESCRIPTOR"]]
107
+ output_path = config["configuration"][file_test["path_descriptor"]]
98
108
  except KeyError as exc:
99
109
  raise KeyError(
100
- f"Path {file_test['PATH_DESCRIPTOR']} not found in integration test configuration."
110
+ f"Path {file_test['path_descriptor']} not found in integration test configuration."
101
111
  ) from exc
102
112
 
103
- output_file_path = Path(output_path) / file_test["FILE"]
113
+ output_file_path = Path(output_path) / file_test["file"]
104
114
  _logger.info(f"Checking path: {output_file_path}")
105
115
  try:
106
116
  assert output_file_path.exists()
107
117
  except AssertionError as exc:
108
118
  raise AssertionError(f"Output file {output_file_path} does not exist. ") from exc
109
119
 
110
- if "EXPECTED_OUTPUT" in file_test:
120
+ if "expected_output" in file_test:
111
121
  assert assertions.check_output_from_sim_telarray(
112
122
  output_file_path,
113
- file_test["EXPECTED_OUTPUT"],
123
+ file_test["expected_output"],
114
124
  )
115
125
 
116
126
 
127
+ def _validate_model_parameter_json_file(config, model_parameter_validation, db_config):
128
+ """
129
+ Validate model parameter json file and compare it with a reference parameter from the database.
130
+
131
+ Requires database connection to pull the model parameter for a given telescope or site model.
132
+
133
+ Parameters
134
+ ----------
135
+ config: dict
136
+ Configuration dictionary.
137
+ model_parameter_validation: dict
138
+ Dictionary with model parameter validation configuration.
139
+
140
+ """
141
+ _logger.info(f"Checking model parameter json file: {model_parameter_validation}")
142
+ db = db_handler.DatabaseHandler(mongo_db_config=db_config)
143
+
144
+ reference_parameter_name = model_parameter_validation.get("reference_parameter_name")
145
+
146
+ reference_model_parameter = db.get_model_parameter(
147
+ parameter=reference_parameter_name,
148
+ site=config["configuration"].get("site"),
149
+ array_element_name=config["configuration"].get("telescope"),
150
+ model_version=config["configuration"].get("model_version"),
151
+ )
152
+ parameter_file = (
153
+ Path(config["configuration"]["output_path"])
154
+ / config["configuration"].get("telescope")
155
+ / model_parameter_validation["parameter_file"]
156
+ )
157
+ model_parameter = ascii_handler.collect_data_from_file(parameter_file)
158
+ assert _compare_value_from_parameter_dict(
159
+ model_parameter["value"],
160
+ reference_model_parameter[reference_parameter_name]["value"],
161
+ model_parameter_validation["tolerance"],
162
+ )
163
+
164
+
117
165
  def compare_files(file1, file2, tolerance=1.0e-5, test_columns=None):
118
166
  """
119
167
  Compare two files of file type ecsv, json or yaml.
@@ -171,8 +219,8 @@ def compare_json_or_yaml_files(file1, file2, tolerance=1.0e-2):
171
219
  True if the files are equal.
172
220
 
173
221
  """
174
- data1 = gen.collect_data_from_file(file1)
175
- data2 = gen.collect_data_from_file(file2)
222
+ data1 = ascii_handler.collect_data_from_file(file1)
223
+ data2 = ascii_handler.collect_data_from_file(file2)
176
224
  data1.pop("schema_version", None)
177
225
  data2.pop("schema_version", None)
178
226
 
@@ -229,9 +277,9 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
229
277
  cuts applied. This is configured through the test_columns parameter. This is
230
278
  a list of dictionaries, where each dictionary contains the following
231
279
  key-value pairs:
232
- - TEST_COLUMN_NAME: column name to compare.
233
- - CUT_COLUMN_NAME: column for filtering.
234
- - CUT_CONDITION: condition for filtering.
280
+ - test_column_name: column name to compare.
281
+ - cut_column_name: column for filtering.
282
+ - cut_condition: condition for filtering.
235
283
 
236
284
  Parameters
237
285
  ----------
@@ -250,7 +298,7 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
250
298
  table2 = Table.read(file2, format="ascii.ecsv")
251
299
 
252
300
  if test_columns is None:
253
- test_columns = [{"TEST_COLUMN_NAME": col} for col in table1.colnames]
301
+ test_columns = [{"test_column_name": col} for col in table1.colnames]
254
302
 
255
303
  def generate_mask(table, column, condition):
256
304
  """Generate a boolean mask based on the condition (note the usage of eval)."""
@@ -261,12 +309,12 @@ def compare_ecsv_files(file1, file2, tolerance=1.0e-5, test_columns=None):
261
309
  )
262
310
 
263
311
  for col_dict in test_columns:
264
- col_name = col_dict["TEST_COLUMN_NAME"]
312
+ col_name = col_dict["test_column_name"]
265
313
  mask1 = generate_mask(
266
- table1, col_dict.get("CUT_COLUMN_NAME", ""), col_dict.get("CUT_CONDITION", "")
314
+ table1, col_dict.get("cut_column_name", ""), col_dict.get("cut_condition", "")
267
315
  )
268
316
  mask2 = generate_mask(
269
- table2, col_dict.get("CUT_COLUMN_NAME", ""), col_dict.get("CUT_CONDITION", "")
317
+ table2, col_dict.get("cut_column_name", ""), col_dict.get("cut_condition", "")
270
318
  )
271
319
  table1_masked, table2_masked = table1[mask1], table2[mask2]
272
320
 
@@ -289,12 +337,14 @@ def _validate_simtel_cfg_files(config, simtel_cfg_file):
289
337
 
290
338
  """
291
339
  reference_file = Path(simtel_cfg_file)
292
- test_file = Path(config["CONFIGURATION"]["OUTPUT_PATH"]) / reference_file.name.replace(
293
- "_test", f"_{config['CONFIGURATION']['LABEL']}"
340
+ test_file = (
341
+ Path(config["configuration"]["output_path"])
342
+ / f"model/{config['configuration']['model_version']}"
343
+ / reference_file.name.replace("_test", f"_{config['configuration']['label']}")
294
344
  )
295
345
  _logger.info(
296
346
  f"Comparing simtel cfg files: {reference_file} and {test_file} "
297
- f"for model version {config['CONFIGURATION']['MODEL_VERSION']}"
347
+ f"for model version {config['configuration']['model_version']}"
298
348
  )
299
349
  return _compare_simtel_cfg_files(reference_file, test_file)
300
350