gammasimtools 0.12.0__py3-none-any.whl → 0.14.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 (276) hide show
  1. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/METADATA +3 -3
  2. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/RECORD +257 -263
  3. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/entry_points.txt +4 -1
  5. simtools/_version.py +2 -2
  6. simtools/applications/convert_all_model_parameters_from_simtel.py +77 -88
  7. simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
  8. simtools/applications/db_add_file_to_db.py +15 -0
  9. simtools/applications/db_add_value_from_json_to_db.py +18 -1
  10. simtools/applications/db_get_parameter_from_db.py +52 -22
  11. simtools/applications/derive_ctao_array_layouts.py +120 -0
  12. simtools/applications/derive_photon_electron_spectrum.py +30 -2
  13. simtools/applications/docs_produce_array_element_report.py +42 -26
  14. simtools/applications/docs_produce_model_parameter_reports.py +28 -21
  15. simtools/applications/generate_simtel_event_data.py +117 -0
  16. simtools/applications/plot_tabular_data.py +14 -2
  17. simtools/applications/print_version.py +81 -0
  18. simtools/applications/production_derive_corsika_limits.py +240 -0
  19. simtools/applications/production_scale_events.py +59 -36
  20. simtools/applications/run_application.py +47 -18
  21. simtools/applications/simulate_light_emission.py +115 -247
  22. simtools/applications/simulate_prod_htcondor_generator.py +2 -2
  23. simtools/applications/submit_data_from_external.py +1 -1
  24. simtools/applications/submit_model_parameter_from_external.py +2 -1
  25. simtools/camera/single_photon_electron_spectrum.py +169 -17
  26. simtools/constants.py +7 -0
  27. simtools/data_model/metadata_collector.py +159 -61
  28. simtools/data_model/model_data_writer.py +18 -61
  29. simtools/data_model/schema.py +2 -1
  30. simtools/data_model/validate_data.py +5 -3
  31. simtools/db/db_handler.py +123 -33
  32. simtools/dependencies.py +38 -3
  33. simtools/layout/array_layout.py +1 -0
  34. simtools/layout/ctao_array_layouts.py +172 -0
  35. simtools/model/array_model.py +3 -4
  36. simtools/model/model_parameter.py +30 -118
  37. simtools/production_configuration/derive_corsika_limits.py +328 -0
  38. simtools/production_configuration/event_scaler.py +2 -2
  39. simtools/ray_tracing/mirror_panel_psf.py +1 -1
  40. simtools/reporting/docs_auto_report_generator.py +217 -0
  41. simtools/reporting/docs_read_parameters.py +298 -143
  42. simtools/schemas/application_workflow.metaschema.yml +3 -0
  43. simtools/schemas/metadata.metaschema.yml +7 -6
  44. simtools/schemas/model_parameter.metaschema.yml +13 -4
  45. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +19 -5
  46. simtools/schemas/model_parameters/adjust_gain.schema.yml +1 -1
  47. simtools/schemas/model_parameters/altitude.schema.yml +1 -1
  48. simtools/schemas/model_parameters/array_coordinates.schema.yml +1 -1
  49. simtools/schemas/model_parameters/array_coordinates_UTM.schema.yml +3 -3
  50. simtools/schemas/model_parameters/array_element_position_ground.schema.yml +3 -3
  51. simtools/schemas/model_parameters/array_element_position_utm.schema.yml +3 -3
  52. simtools/schemas/model_parameters/array_layouts.schema.yml +3 -0
  53. simtools/schemas/model_parameters/array_window.schema.yml +1 -1
  54. simtools/schemas/model_parameters/asum_clipping.schema.yml +1 -1
  55. simtools/schemas/model_parameters/asum_offset.schema.yml +1 -1
  56. simtools/schemas/model_parameters/asum_shaping.schema.yml +1 -1
  57. simtools/schemas/model_parameters/asum_threshold.schema.yml +1 -1
  58. simtools/schemas/model_parameters/atmospheric_profile.schema.yml +1 -1
  59. simtools/schemas/model_parameters/axes_offsets.schema.yml +2 -2
  60. simtools/schemas/model_parameters/camera_body_diameter.schema.yml +1 -1
  61. simtools/schemas/model_parameters/camera_body_shape.schema.yml +1 -1
  62. simtools/schemas/model_parameters/camera_config_file.schema.yml +1 -1
  63. simtools/schemas/model_parameters/camera_config_rotate.schema.yml +1 -1
  64. simtools/schemas/model_parameters/camera_degraded_efficiency.schema.yml +1 -1
  65. simtools/schemas/model_parameters/camera_degraded_map.schema.yml +1 -1
  66. simtools/schemas/model_parameters/camera_depth.schema.yml +1 -1
  67. simtools/schemas/model_parameters/camera_filter.schema.yml +1 -1
  68. simtools/schemas/model_parameters/camera_pixels.schema.yml +1 -1
  69. simtools/schemas/model_parameters/camera_transmission.schema.yml +1 -1
  70. simtools/schemas/model_parameters/channels_per_chip.schema.yml +1 -1
  71. simtools/schemas/model_parameters/corsika_iact_io_buffer.schema.yml +1 -1
  72. simtools/schemas/model_parameters/corsika_iact_max_bunches.schema.yml +1 -1
  73. simtools/schemas/model_parameters/corsika_iact_split_auto.schema.yml +1 -1
  74. simtools/schemas/model_parameters/corsika_observation_level.schema.yml +1 -1
  75. simtools/schemas/model_parameters/dark_events.schema.yml +1 -1
  76. simtools/schemas/model_parameters/disc_bins.schema.yml +1 -1
  77. simtools/schemas/model_parameters/disc_start.schema.yml +1 -1
  78. simtools/schemas/model_parameters/discriminator_amplitude.schema.yml +1 -1
  79. simtools/schemas/model_parameters/discriminator_fall_time.schema.yml +1 -1
  80. simtools/schemas/model_parameters/discriminator_gate_length.schema.yml +1 -1
  81. simtools/schemas/model_parameters/discriminator_hysteresis.schema.yml +1 -1
  82. simtools/schemas/model_parameters/discriminator_output_amplitude.schema.yml +1 -1
  83. simtools/schemas/model_parameters/discriminator_output_var_percent.schema.yml +1 -1
  84. simtools/schemas/model_parameters/discriminator_rise_time.schema.yml +1 -1
  85. simtools/schemas/model_parameters/discriminator_scale_threshold.schema.yml +1 -1
  86. simtools/schemas/model_parameters/discriminator_sigsum_over_threshold.schema.yml +1 -1
  87. simtools/schemas/model_parameters/discriminator_threshold.schema.yml +1 -1
  88. simtools/schemas/model_parameters/discriminator_time_over_threshold.schema.yml +1 -1
  89. simtools/schemas/model_parameters/discriminator_var_gate_length.schema.yml +1 -1
  90. simtools/schemas/model_parameters/discriminator_var_sigsum_over_threshold.schema.yml +1 -1
  91. simtools/schemas/model_parameters/discriminator_var_threshold.schema.yml +1 -1
  92. simtools/schemas/model_parameters/discriminator_var_time_over_threshold.schema.yml +1 -1
  93. simtools/schemas/model_parameters/dish_shape_length.schema.yml +1 -1
  94. simtools/schemas/model_parameters/dsum_clipping.schema.yml +1 -1
  95. simtools/schemas/model_parameters/dsum_ignore_below.schema.yml +1 -1
  96. simtools/schemas/model_parameters/dsum_offset.schema.yml +1 -1
  97. simtools/schemas/model_parameters/dsum_pre_clipping.schema.yml +1 -1
  98. simtools/schemas/model_parameters/dsum_prescale.schema.yml +2 -2
  99. simtools/schemas/model_parameters/dsum_presum_max.schema.yml +1 -1
  100. simtools/schemas/model_parameters/dsum_presum_shift.schema.yml +1 -1
  101. simtools/schemas/model_parameters/dsum_shaping.schema.yml +1 -1
  102. simtools/schemas/model_parameters/dsum_threshold.schema.yml +1 -1
  103. simtools/schemas/model_parameters/dsum_zero_clip.schema.yml +1 -1
  104. simtools/schemas/model_parameters/effective_focal_length.schema.yml +5 -5
  105. simtools/schemas/model_parameters/epsg_code.schema.yml +1 -1
  106. simtools/schemas/model_parameters/fadc_amplitude.schema.yml +1 -1
  107. simtools/schemas/model_parameters/fadc_bins.schema.yml +1 -1
  108. simtools/schemas/model_parameters/fadc_compensate_pedestal.schema.yml +1 -1
  109. simtools/schemas/model_parameters/fadc_dev_pedestal.schema.yml +2 -2
  110. simtools/schemas/model_parameters/fadc_err_compensate_pedestal.schema.yml +1 -1
  111. simtools/schemas/model_parameters/fadc_err_pedestal.schema.yml +1 -1
  112. simtools/schemas/model_parameters/fadc_lg_amplitude.schema.yml +1 -1
  113. simtools/schemas/model_parameters/fadc_lg_compensate_pedestal.schema.yml +1 -1
  114. simtools/schemas/model_parameters/fadc_lg_dev_pedestal.schema.yml +2 -2
  115. simtools/schemas/model_parameters/fadc_lg_err_compensate_pedestal.schema.yml +1 -1
  116. simtools/schemas/model_parameters/fadc_lg_err_pedestal.schema.yml +1 -1
  117. simtools/schemas/model_parameters/fadc_lg_max_signal.schema.yml +1 -1
  118. simtools/schemas/model_parameters/fadc_lg_max_sum.schema.yml +4 -4
  119. simtools/schemas/model_parameters/fadc_lg_noise.schema.yml +1 -1
  120. simtools/schemas/model_parameters/fadc_lg_pedestal.schema.yml +1 -1
  121. simtools/schemas/model_parameters/fadc_lg_sensitivity.schema.yml +1 -1
  122. simtools/schemas/model_parameters/fadc_lg_sysvar_pedestal.schema.yml +1 -1
  123. simtools/schemas/model_parameters/fadc_lg_var_pedestal.schema.yml +1 -1
  124. simtools/schemas/model_parameters/fadc_lg_var_sensitivity.schema.yml +1 -1
  125. simtools/schemas/model_parameters/fadc_max_signal.schema.yml +1 -1
  126. simtools/schemas/model_parameters/fadc_max_sum.schema.yml +4 -4
  127. simtools/schemas/model_parameters/fadc_mhz.schema.yml +1 -1
  128. simtools/schemas/model_parameters/fadc_noise.schema.yml +1 -1
  129. simtools/schemas/model_parameters/fadc_pedestal.schema.yml +1 -1
  130. simtools/schemas/model_parameters/fadc_sensitivity.schema.yml +1 -1
  131. simtools/schemas/model_parameters/fadc_sum_bins.schema.yml +1 -1
  132. simtools/schemas/model_parameters/fadc_sum_offset.schema.yml +1 -1
  133. simtools/schemas/model_parameters/fadc_sysvar_pedestal.schema.yml +1 -1
  134. simtools/schemas/model_parameters/fadc_var_pedestal.schema.yml +1 -1
  135. simtools/schemas/model_parameters/fadc_var_sensitivity.schema.yml +1 -1
  136. simtools/schemas/model_parameters/fake_mirror_list.schema.yml +1 -1
  137. simtools/schemas/model_parameters/focal_length.schema.yml +1 -1
  138. simtools/schemas/model_parameters/focal_surface_parameters.schema.yml +20 -20
  139. simtools/schemas/model_parameters/focal_surface_ref_radius.schema.yml +1 -1
  140. simtools/schemas/model_parameters/focus_offset.schema.yml +4 -4
  141. simtools/schemas/model_parameters/gain_variation.schema.yml +1 -1
  142. simtools/schemas/model_parameters/geomag_horizontal.schema.yml +1 -1
  143. simtools/schemas/model_parameters/geomag_rotation.schema.yml +1 -1
  144. simtools/schemas/model_parameters/geomag_vertical.schema.yml +1 -1
  145. simtools/schemas/model_parameters/hg_lg_variation.schema.yml +1 -1
  146. simtools/schemas/model_parameters/iobuf_maximum.schema.yml +1 -1
  147. simtools/schemas/model_parameters/iobuf_output_maximum.schema.yml +1 -1
  148. simtools/schemas/model_parameters/laser_events.schema.yml +1 -1
  149. simtools/schemas/model_parameters/laser_external_trigger.schema.yml +1 -1
  150. simtools/schemas/model_parameters/laser_photons.schema.yml +1 -1
  151. simtools/schemas/model_parameters/laser_pulse_exptime.schema.yml +1 -1
  152. simtools/schemas/model_parameters/laser_pulse_offset.schema.yml +1 -1
  153. simtools/schemas/model_parameters/laser_pulse_sigtime.schema.yml +1 -1
  154. simtools/schemas/model_parameters/laser_pulse_twidth.schema.yml +1 -1
  155. simtools/schemas/model_parameters/laser_var_photons.schema.yml +1 -1
  156. simtools/schemas/model_parameters/laser_wavelength.schema.yml +1 -1
  157. simtools/schemas/model_parameters/led_events.schema.yml +1 -1
  158. simtools/schemas/model_parameters/led_photons.schema.yml +1 -1
  159. simtools/schemas/model_parameters/led_pulse_offset.schema.yml +1 -1
  160. simtools/schemas/model_parameters/led_pulse_sigtime.schema.yml +1 -1
  161. simtools/schemas/model_parameters/led_var_photons.schema.yml +1 -1
  162. simtools/schemas/model_parameters/lightguide_efficiency_vs_incidence_angle.schema.yml +1 -1
  163. simtools/schemas/model_parameters/lightguide_efficiency_vs_wavelength.schema.yml +1 -1
  164. simtools/schemas/model_parameters/min_photoelectrons.schema.yml +1 -1
  165. simtools/schemas/model_parameters/min_photons.schema.yml +1 -1
  166. simtools/schemas/model_parameters/mirror_align_random_distance.schema.yml +1 -1
  167. simtools/schemas/model_parameters/mirror_align_random_horizontal.schema.yml +4 -4
  168. simtools/schemas/model_parameters/mirror_align_random_vertical.schema.yml +4 -4
  169. simtools/schemas/model_parameters/mirror_class.schema.yml +1 -1
  170. simtools/schemas/model_parameters/mirror_degraded_reflection.schema.yml +1 -1
  171. simtools/schemas/model_parameters/mirror_focal_length.schema.yml +1 -1
  172. simtools/schemas/model_parameters/mirror_list.schema.yml +1 -1
  173. simtools/schemas/model_parameters/mirror_offset.schema.yml +1 -1
  174. simtools/schemas/model_parameters/mirror_panel_2f_measurements.schema.yml +3 -3
  175. simtools/schemas/model_parameters/mirror_reflection_random_angle.schema.yml +3 -3
  176. simtools/schemas/model_parameters/multiplicity_offset.schema.yml +1 -1
  177. simtools/schemas/model_parameters/muon_mono_threshold.schema.yml +45 -0
  178. simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml +2 -2
  179. simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml +1 -1
  180. simtools/schemas/model_parameters/nsb_offaxis.schema.yml +5 -5
  181. simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml +1 -1
  182. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
  183. simtools/schemas/model_parameters/nsb_reference_value.schema.yml +1 -1
  184. simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml +1 -1
  185. simtools/schemas/model_parameters/{nsb_skymap.schema.yml → nsb_sky_map.schema.yml} +1 -1
  186. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +2 -2
  187. simtools/schemas/model_parameters/num_gains.schema.yml +1 -1
  188. simtools/schemas/model_parameters/pedestal_events.schema.yml +1 -1
  189. simtools/schemas/model_parameters/photon_delay.schema.yml +1 -1
  190. simtools/schemas/model_parameters/photons_per_run.schema.yml +1 -1
  191. simtools/schemas/model_parameters/pixel_cells.schema.yml +1 -1
  192. simtools/schemas/model_parameters/pixels_parallel.schema.yml +1 -1
  193. simtools/schemas/model_parameters/pixeltrg_time_step.schema.yml +1 -1
  194. simtools/schemas/model_parameters/pm_average_gain.schema.yml +1 -1
  195. simtools/schemas/model_parameters/pm_collection_efficiency.schema.yml +1 -1
  196. simtools/schemas/model_parameters/pm_gain_index.schema.yml +1 -1
  197. simtools/schemas/model_parameters/pm_transit_time.schema.yml +4 -4
  198. simtools/schemas/model_parameters/pm_voltage_variation.schema.yml +1 -1
  199. simtools/schemas/model_parameters/primary_mirror_degraded_map.schema.yml +8 -4
  200. simtools/schemas/model_parameters/primary_mirror_diameter.schema.yml +1 -1
  201. simtools/schemas/model_parameters/primary_mirror_hole_diameter.schema.yml +1 -1
  202. simtools/schemas/model_parameters/primary_mirror_parameters.schema.yml +20 -20
  203. simtools/schemas/model_parameters/primary_mirror_ref_radius.schema.yml +1 -1
  204. simtools/schemas/model_parameters/primary_mirror_segmentation.schema.yml +1 -1
  205. simtools/schemas/model_parameters/qe_variation.schema.yml +1 -1
  206. simtools/schemas/model_parameters/random_focal_length.schema.yml +2 -2
  207. simtools/schemas/model_parameters/random_mono_probability.schema.yml +38 -0
  208. simtools/schemas/model_parameters/reference_point_altitude.schema.yml +1 -1
  209. simtools/schemas/model_parameters/reference_point_latitude.schema.yml +4 -1
  210. simtools/schemas/model_parameters/reference_point_longitude.schema.yml +4 -1
  211. simtools/schemas/model_parameters/reference_point_utm_east.schema.yml +1 -1
  212. simtools/schemas/model_parameters/reference_point_utm_north.schema.yml +1 -1
  213. simtools/schemas/model_parameters/secondary_mirror_baffle.schema.yml +5 -5
  214. simtools/schemas/model_parameters/secondary_mirror_degraded_map.schema.yml +1 -1
  215. simtools/schemas/model_parameters/secondary_mirror_degraded_reflection.schema.yml +1 -1
  216. simtools/schemas/model_parameters/secondary_mirror_diameter.schema.yml +1 -1
  217. simtools/schemas/model_parameters/secondary_mirror_hole_diameter.schema.yml +1 -1
  218. simtools/schemas/model_parameters/secondary_mirror_parameters.schema.yml +20 -20
  219. simtools/schemas/model_parameters/secondary_mirror_ref_radius.schema.yml +1 -1
  220. simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml +1 -1
  221. simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml +1 -1
  222. simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml +1 -1
  223. simtools/schemas/model_parameters/stars.schema.yml +36 -0
  224. simtools/schemas/model_parameters/store_photoelectrons.schema.yml +1 -1
  225. simtools/schemas/model_parameters/tailcut_scale.schema.yml +1 -1
  226. simtools/schemas/model_parameters/telescope_axis_height.schema.yml +1 -1
  227. simtools/schemas/model_parameters/telescope_random_angle.schema.yml +1 -1
  228. simtools/schemas/model_parameters/telescope_random_error.schema.yml +1 -1
  229. simtools/schemas/model_parameters/telescope_sphere_radius.schema.yml +1 -1
  230. simtools/schemas/model_parameters/telescope_transmission.schema.yml +6 -6
  231. simtools/schemas/model_parameters/teltrig_min_sigsum.schema.yml +1 -1
  232. simtools/schemas/model_parameters/teltrig_min_time.schema.yml +1 -1
  233. simtools/schemas/model_parameters/transit_time_calib_error.schema.yml +1 -1
  234. simtools/schemas/model_parameters/transit_time_compensate_error.schema.yml +1 -1
  235. simtools/schemas/model_parameters/transit_time_compensate_step.schema.yml +1 -1
  236. simtools/schemas/model_parameters/transit_time_error.schema.yml +1 -1
  237. simtools/schemas/model_parameters/transit_time_jitter.schema.yml +1 -1
  238. simtools/schemas/model_parameters/trigger_current_limit.schema.yml +1 -1
  239. simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml +4 -4
  240. simtools/schemas/model_parameters/trigger_pixels.schema.yml +1 -1
  241. simtools/schemas/plot_configuration.metaschema.yml +162 -0
  242. simtools/schemas/production_tables.schema.yml +1 -1
  243. simtools/simtel/simtel_config_reader.py +85 -34
  244. simtools/simtel/simtel_config_writer.py +70 -38
  245. simtools/simtel/simtel_io_event_reader.py +278 -0
  246. simtools/simtel/simtel_io_event_writer.py +317 -0
  247. simtools/simtel/simtel_table_reader.py +4 -0
  248. simtools/simtel/simulator_light_emission.py +181 -67
  249. simtools/simulator.py +2 -2
  250. simtools/testing/configuration.py +17 -0
  251. simtools/utils/general.py +83 -16
  252. simtools/utils/geometry.py +19 -0
  253. simtools/utils/names.py +14 -3
  254. simtools/visualization/plot_tables.py +25 -20
  255. simtools/visualization/visualize.py +73 -25
  256. simtools/_dev_version/__init__.py +0 -9
  257. simtools/applications/__init__.py +0 -0
  258. simtools/applications/production_derive_limits.py +0 -95
  259. simtools/configuration/__init__.py +0 -0
  260. simtools/corsika/__init__.py +0 -0
  261. simtools/data_model/__init__.py +0 -0
  262. simtools/db/__init__.py +0 -0
  263. simtools/io_operations/__init__.py +0 -0
  264. simtools/job_execution/__init__.py +0 -0
  265. simtools/layout/__init__.py +0 -0
  266. simtools/model/__init__.py +0 -0
  267. simtools/production_configuration/limits_calculation.py +0 -202
  268. simtools/ray_tracing/__init__.py +0 -0
  269. simtools/runners/__init__.py +0 -0
  270. simtools/simtel/__init__.py +0 -0
  271. simtools/simtel/simtel_io_events.py +0 -265
  272. simtools/testing/__init__.py +0 -0
  273. simtools/utils/__init__.py +0 -0
  274. simtools/visualization/__init__.py +0 -0
  275. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info/licenses}/LICENSE +0 -0
  276. {gammasimtools-0.12.0.dist-info → gammasimtools-0.14.0.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -10,6 +10,7 @@ simtools-db-get-array-layouts-from-db = simtools.applications.db_get_array_layou
10
10
  simtools-db-get-file-from-db = simtools.applications.db_get_file_from_db:main
11
11
  simtools-db-get-parameter-from-db = simtools.applications.db_get_parameter_from_db:main
12
12
  simtools-db-inspect-databases = simtools.applications.db_inspect_databases:main
13
+ simtools-derive-ctao-array-layouts = simtools.applications.derive_ctao_array_layouts:main
13
14
  simtools-derive-mirror-rnda = simtools.applications.derive_mirror_rnda:main
14
15
  simtools-derive-photon-electron-spectrum = simtools.applications.derive_photon_electron_spectrum:main
15
16
  simtools-derive-psf-parameters = simtools.applications.derive_psf_parameters:main
@@ -20,9 +21,11 @@ simtools-generate-corsika-histograms = simtools.applications.generate_corsika_hi
20
21
  simtools-generate-default-metadata = simtools.applications.generate_default_metadata:main
21
22
  simtools-generate-regular-arrays = simtools.applications.generate_regular_arrays:main
22
23
  simtools-generate-simtel-array-histograms = simtools.applications.generate_simtel_array_histograms:main
24
+ simtools-generate-simtel-event-data = simtools.applications.generate_simtel_event_data:main
23
25
  simtools-plot-array-layout = simtools.applications.plot_array_layout:main
24
26
  simtools-plot-tabular-data = simtools.applications.plot_tabular_data:main
25
- simtools-production-derive-limits = simtools.applications.production_derive_limits:main
27
+ simtools-print-version = simtools.applications.print_version:main
28
+ simtools-production-derive-corsika-limits = simtools.applications.production_derive_corsika_limits:main
26
29
  simtools-production-generate-simulation-config = simtools.applications.production_generate_simulation_config:main
27
30
  simtools-production-scale-events = simtools.applications.production_scale_events:main
28
31
  simtools-run-application = simtools.applications.run_application:main
simtools/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.12.0'
21
- __version_tuple__ = version_tuple = (0, 12, 0)
20
+ __version__ = version = '0.14.0'
21
+ __version_tuple__ = version_tuple = (0, 14, 0)
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/python3
2
2
  r"""
3
- Convert all simulation model parameters exported from sim_telarray format using schema files.
3
+ Convert all simulation model parameters exported from sim_telarray format.
4
4
 
5
- Check value, type, and range, convert units, and write json files
5
+ Check value, type, and range, convert units using schema files. Write json files
6
6
  ready to be submitted to the model database. Prints out parameters which are not found
7
7
  in simtel configuration file and parameters which are not found in simtools schema files.
8
8
 
@@ -19,22 +19,15 @@ r"""
19
19
  telescope (str, optional)
20
20
  Telescope model name (e.g. LST-1, SST-D, ...)
21
21
 
22
+ skip_parameter (str, optional)
23
+ List of parameters to be skipped (use sim_telarray names).
24
+
22
25
  Example
23
26
  -------
24
27
 
25
- Extract model parameters with schema files from simtel configuration file
26
- (requires access to the model parameter repository)
27
-
28
- .. code-block:: console
29
-
30
- simtools-convert-all-model-parameters-from-simtel \\
31
- --schema_directory ../model_parameters/schema\\
32
- --simtel_cfg_file all_telescope_config_la_palma.cfg\\
33
- --simtel_telescope_name CT1\\
34
- --telescope LSTN-01\\
35
- --parameter_version "1.0.0"
36
-
37
- The export of the model parameters from sim_telarray for 6.0.0 can be done e.g., as follows:
28
+ To export the model parameters from sim_telarray, first copy and unpack the configuration
29
+ tar ball from sim_telarray (usually called 'sim_telarray_config.tar.gz') to the sim_telarray
30
+ working directory. Extract the configuration using the following command:
38
31
 
39
32
  .. code-block:: console
40
33
 
@@ -42,18 +35,32 @@ r"""
42
35
  -C limits=no-internal -C initlist=no-internal -C list=no-internal \\
43
36
  -C typelist=no-internal -C maximum_telescopes=30 -DNSB_AUTOSCALE \\
44
37
  -DNECTARCAM -DHYPER_LAYOUT -DNUM_TELESCOPES=30 /dev/null \\
45
- 2>|/dev/null | grep '(@cfg)' >| all_telescope_config_la_palma.cfg
38
+ 2>|/dev/null | grep '(@cfg)' | sed 's/^(@cfg) //' >| all_telescope_config_la_palma.cfg
46
39
 
47
40
  ./sim_telarray/bin/sim_telarray -c sim_telarray/cfg/CTA/CTA-PROD6-Paranal.cfg \\
48
41
  -C limits=no-internal -C initlist=no-internal -C list=no-internal \\
49
42
  -C typelist=no-internal -C maximum_telescopes=87 -DNSB_AUTOSCALE \\
50
43
  -DFLASHCAM -DHYPER_LAYOUT -DNUM_TELESCOPES=87 /dev/null \\
51
- 2>|/dev/null | grep '(@cfg)' >| all_telescope_config_paranal.cfg
44
+ 2>|/dev/null | grep '(@cfg)' | sed 's/^(@cfg) //' >| all_telescope_config_paranal.cfg
45
+
46
+
47
+ Extract then model parameters from the simtel_array configuration file for LSTN-01
48
+ (telescopes are named CT1, CT2, ..., in the sim_telarray configuration file and must be
49
+ provided in the "simtel_telescope_name" command line argument)
50
+ and write json files in the same format as the model parameter database:
51
+
52
+ .. code-block:: console
53
+
54
+ simtools-convert-all-model-parameters-from-simtel \\
55
+ --simtel_cfg_file all_telescope_config_la_palma.cfg\\
56
+ --simtel_telescope_name CT1\\
57
+ --telescope LSTN-01\\
58
+ --parameter_version "1.0.0"\\
59
+ --output_path /path/to/output
52
60
 
53
61
  """
54
62
 
55
63
  import logging
56
- import re
57
64
  from pathlib import Path
58
65
 
59
66
  import numpy as np
@@ -63,7 +70,7 @@ import simtools.utils.general as gen
63
70
  from simtools.configuration import configurator
64
71
  from simtools.data_model import schema
65
72
  from simtools.io_operations.io_handler import IOHandler
66
- from simtools.simtel.simtel_config_reader import SimtelConfigReader
73
+ from simtools.simtel import simtel_config_reader
67
74
 
68
75
 
69
76
  def _parse(label=None, description=None):
@@ -85,14 +92,6 @@ def _parse(label=None, description=None):
85
92
  """
86
93
  config = configurator.Configurator(label=label, description=description)
87
94
 
88
- config.parser.add_argument(
89
- "--schema_directory",
90
- help=(
91
- "Directory with schema files for model parameter validation "
92
- "(default: simtools schema directory)"
93
- ),
94
- required=False,
95
- )
96
95
  config.parser.add_argument(
97
96
  "--simtel_cfg_file",
98
97
  help="File name for simtel_array configuration",
@@ -105,36 +104,17 @@ def _parse(label=None, description=None):
105
104
  type=str,
106
105
  required=True,
107
106
  )
107
+ config.parser.add_argument(
108
+ "--skip_parameter",
109
+ help="List of parameters to be skipped.",
110
+ type=str,
111
+ nargs="*",
112
+ default=[],
113
+ )
108
114
  return config.initialize(simulation_model=["telescope", "parameter_version"])
109
115
 
110
116
 
111
- def get_list_of_simtel_parameters(simtel_config_file, logger):
112
- """
113
- Return list of simtel parameters found in simtel configuration file.
114
-
115
- Parameters
116
- ----------
117
- simtel_config_file: str
118
- File name for sim_telarray configuration
119
- logger: logging.Logger
120
- Logger object
121
-
122
- Returns
123
- -------
124
- list
125
- List of parameters found in simtel configuration file.
126
-
127
- """
128
- simtel_parameter_set = set()
129
- with open(simtel_config_file, encoding="utf-8") as file:
130
- for line in file:
131
- parts_of_lines = re.split(r",\s*|\s+", line.strip())
132
- simtel_parameter_set.add(parts_of_lines[1].lower())
133
- logger.info(f"Found {len(simtel_parameter_set)} parameters in simtel configuration file.")
134
- return list(simtel_parameter_set)
135
-
136
-
137
- def read_simtel_config_file(args_dict, logger, schema_file, camera_pixels=None):
117
+ def read_simtel_config_file(args_dict, schema_file, camera_pixels=None):
138
118
  """
139
119
  Read the simtel configuration file.
140
120
 
@@ -142,25 +122,26 @@ def read_simtel_config_file(args_dict, logger, schema_file, camera_pixels=None):
142
122
  ----------
143
123
  args_dict: dict
144
124
  Dictionary with command line arguments.
145
- logger: logging.Logger
146
- Logger object
147
125
  schema_file: str
148
126
  Schema path name.
149
127
  camera_pixels: int
150
128
  Number of camera pixels.
151
129
 
130
+ Returns
131
+ -------
132
+ SimtelConfigReader, None
133
+ SimtelConfigReader object (None if parameter not found)
134
+
152
135
  """
153
- simtel_config_reader = SimtelConfigReader(
136
+ config_reader = simtel_config_reader.SimtelConfigReader(
154
137
  schema_file=schema_file,
155
138
  simtel_config_file=args_dict["simtel_cfg_file"],
156
139
  simtel_telescope_name=args_dict["simtel_telescope_name"],
157
140
  camera_pixels=camera_pixels,
158
141
  )
159
- logger.info(f"Simtel parameter: {simtel_config_reader.parameter_dict}")
160
-
161
- if simtel_config_reader.parameter_dict is None or len(simtel_config_reader.parameter_dict) == 0:
142
+ if config_reader.parameter_dict is None or len(config_reader.parameter_dict) == 0:
162
143
  return None
163
- return simtel_config_reader
144
+ return config_reader
164
145
 
165
146
 
166
147
  def get_number_of_camera_pixel(args_dict, logger):
@@ -184,12 +165,10 @@ def get_number_of_camera_pixel(args_dict, logger):
184
165
 
185
166
  """
186
167
  try:
187
- simtel_config_reader = SimtelConfigReader(
188
- schema_file=schema.get_model_parameter_schema_file("camera_pixels"),
189
- simtel_config_file=args_dict["simtel_cfg_file"],
190
- simtel_telescope_name=args_dict["simtel_telescope_name"],
168
+ config_reader = read_simtel_config_file(
169
+ args_dict, schema.get_model_parameter_schema_file("camera_pixels")
191
170
  )
192
- _camera_pixel = simtel_config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
171
+ _camera_pixel = config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
193
172
  except (FileNotFoundError, AttributeError):
194
173
  logger.warning("Failed to read camera pixel parameter.")
195
174
  _camera_pixel = None
@@ -219,13 +198,14 @@ def read_and_export_parameters(args_dict, logger):
219
198
  List of simtools parameter not found in simtel configuration file.
220
199
 
221
200
  """
222
- _parameters, _schema_files = schema.get_get_model_parameter_schema_files(
223
- args_dict.get("schema_directory")
201
+ _parameters, _schema_files = schema.get_get_model_parameter_schema_files()
202
+ _simtel_parameters = simtel_config_reader.get_list_of_simtel_parameters(
203
+ args_dict["simtel_cfg_file"]
224
204
  )
225
- _simtel_parameters = get_list_of_simtel_parameters(args_dict["simtel_cfg_file"], logger)
205
+ logger.info(f"Found {len(_simtel_parameters)} parameters in simtel configuration file.")
226
206
 
227
207
  io_handler = IOHandler()
228
- io_handler.set_paths(output_path=args_dict["output_path"], use_plain_output_path=True)
208
+ io_handler.set_paths(output_path=args_dict["output_path"])
229
209
 
230
210
  _camera_pixel = get_number_of_camera_pixel(args_dict, logger)
231
211
 
@@ -233,27 +213,34 @@ def read_and_export_parameters(args_dict, logger):
233
213
 
234
214
  for _parameter, _schema_file in zip(_parameters, _schema_files):
235
215
  logger.info(f"Parameter: {_parameter} Schema file: {_schema_file}")
236
- simtel_config_reader = read_simtel_config_file(
237
- args_dict, logger, _schema_file, _camera_pixel
238
- )
216
+ if _parameter in args_dict["skip_parameter"]:
217
+ logger.info(f"Skipping {_parameter}")
218
+ continue
219
+ config_reader = read_simtel_config_file(args_dict, _schema_file, _camera_pixel)
239
220
 
240
- if simtel_config_reader is None:
221
+ if config_reader is None:
241
222
  logger.info("Parameter not found in sim_telarray configuration file.")
242
223
  _parameters_not_in_simtel.append(_parameter)
243
224
  continue
244
225
 
226
+ logger.info(f"Simtel parameter: {config_reader.parameter_dict}")
227
+
245
228
  _json_dict = writer.ModelDataWriter.dump_model_parameter(
246
229
  parameter_name=_parameter,
247
- value=simtel_config_reader.parameter_dict.get(args_dict["simtel_telescope_name"]),
230
+ value=config_reader.parameter_dict.get(args_dict["simtel_telescope_name"]),
248
231
  instrument=args_dict["telescope"],
249
232
  parameter_version=args_dict["parameter_version"],
250
- output_file=io_handler.get_output_file(f"{_parameter}.json"),
233
+ output_file=io_handler.get_output_file(
234
+ f"{_parameter}-{args_dict['parameter_version']}.json",
235
+ label=f"{args_dict['telescope']}",
236
+ sub_dir=f"{_parameter}",
237
+ ),
251
238
  )
252
239
 
253
- simtel_config_reader.compare_simtel_config_with_schema()
240
+ config_reader.compare_simtel_config_with_schema()
254
241
 
255
- if simtel_config_reader.simtel_parameter_name.lower() in _simtel_parameters:
256
- _simtel_parameters.remove(simtel_config_reader.simtel_parameter_name.lower())
242
+ if config_reader.simtel_parameter_name.lower() in _simtel_parameters:
243
+ _simtel_parameters.remove(config_reader.simtel_parameter_name.lower())
257
244
 
258
245
  if _json_dict["file"]:
259
246
  logger.info(f"File name for {_parameter} is {_json_dict['value']}")
@@ -263,7 +250,7 @@ def read_and_export_parameters(args_dict, logger):
263
250
 
264
251
  def print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, args_dict, logger):
265
252
  """
266
- Print simtel/simtools parameter not found in schema and ocnfiguration files.
253
+ Print simtel/simtools parameter not found in schema and configuration files.
267
254
 
268
255
  For simtel parameters not found, check if the setting for the chose
269
256
  telescope is different from the default values.
@@ -289,29 +276,31 @@ def print_parameters_not_found(_parameters_not_in_simtel, _simtel_parameters, ar
289
276
  logger.info(f"Simtel parameters not found in schema files ({len(_simtel_parameters)}):")
290
277
  for para in sorted(_simtel_parameters):
291
278
  logger.info(f"Simtel parameter: {para}")
292
- simtel_config_reader = SimtelConfigReader(
279
+ config_reader = simtel_config_reader.SimtelConfigReader(
293
280
  schema_file=None,
294
281
  simtel_config_file=args_dict["simtel_cfg_file"],
295
282
  simtel_telescope_name=args_dict["simtel_telescope_name"],
296
283
  parameter_name=para,
297
284
  )
298
- _default = simtel_config_reader.parameter_dict.get("default")
299
- _tel_value = simtel_config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
285
+ _default = config_reader.parameter_dict.get("default")
286
+ _tel_value = config_reader.parameter_dict.get(args_dict["simtel_telescope_name"])
300
287
  # simple comparison of default value and telescope values, does not work for lists
301
288
  try:
302
289
  if _default == _tel_value or np.isclose(_default, _tel_value):
303
- logger.info(f" Default and telescope values are equal: {_default}")
290
+ logger.info(f" Default and telescope values for {para} are equal: {_default}")
304
291
  continue
305
292
  except (ValueError, TypeError):
306
293
  pass
307
294
  if isinstance(_default, np.ndarray):
308
- logger.warning(f" Default value: {_default} (length: {_default.size})")
295
+ logger.warning(f" Default value ({para}): {_default} (length: {_default.size})")
309
296
  else:
310
- logger.warning(f" Default value: {_default}")
297
+ logger.warning(f" Default value ({para}): {_default}")
311
298
  if isinstance(_tel_value, np.ndarray):
312
- logger.warning(f" Telescope value: {_tel_value} (length: {_tel_value.size})")
299
+ logger.warning(
300
+ f" Telescope value ({para}): {_tel_value} (length: {_tel_value.size})"
301
+ )
313
302
  else:
314
- logger.warning(f" Telescope value: {_tel_value}")
303
+ logger.warning(f" Telescope value ({para}): {_tel_value}")
315
304
 
316
305
 
317
306
  def print_list_of_files(args_dict, logger):
@@ -178,7 +178,7 @@ def main():
178
178
  )
179
179
  writer.ModelDataWriter.dump(
180
180
  args_dict=args_dict,
181
- metadata=metadata.get_top_level_metadata() if metadata else None,
181
+ metadata=metadata,
182
182
  product_data=product_data,
183
183
  validate_schema_file=validate_schema_file,
184
184
  )
@@ -38,6 +38,7 @@
38
38
  """
39
39
 
40
40
  import logging
41
+ import uuid
41
42
  from pathlib import Path
42
43
 
43
44
  import simtools.utils.general as gen
@@ -69,6 +70,11 @@ def _parse():
69
70
  type=str,
70
71
  help=("The database to insert the files to."),
71
72
  )
73
+ config.parser.add_argument(
74
+ "--test_db",
75
+ help="Use sandbox database. Drop all data after the operation.",
76
+ action="store_true",
77
+ )
72
78
 
73
79
  return config.initialize(paths=False, db_config=True)
74
80
 
@@ -134,6 +140,10 @@ def confirm_and_insert_files(files_to_insert, args_dict, db, logger):
134
140
  """
135
141
  plural = "" if len(files_to_insert) == 1 else "s"
136
142
 
143
+ if args_dict.get("test_db", False):
144
+ args_dict["db"] = args_dict["db"] + str(uuid.uuid4())
145
+ logger.info(f"Using test database: {args_dict['db']}")
146
+
137
147
  print(f"Should the following file{plural} be inserted to the {args_dict['db']} DB?:\n")
138
148
  print(*files_to_insert, sep="\n")
139
149
  print()
@@ -145,6 +155,11 @@ def confirm_and_insert_files(files_to_insert, args_dict, db, logger):
145
155
  else:
146
156
  logger.info(f"Aborted, did not insert file{plural} to the {args_dict['db']} DB")
147
157
 
158
+ # drop test database; be safe and required DB name is sandbox
159
+ if args_dict.get("test_db", False) and "sandbox" in args_dict["db"]:
160
+ logger.info(f"Test database used. Dropping all data from {args_dict['db']}")
161
+ db.db_client.drop_database(args_dict["db"])
162
+
148
163
 
149
164
  def main(): # noqa: D103
150
165
  args_dict, db_config = _parse()
@@ -26,6 +26,7 @@ r"""
26
26
  """
27
27
 
28
28
  import logging
29
+ import uuid
29
30
  from pathlib import Path
30
31
 
31
32
  import simtools.utils.general as gen
@@ -45,7 +46,11 @@ def _parse():
45
46
  config.parser.add_argument(
46
47
  "--db_collection", help="DB collection to which to add new values.", required=True
47
48
  )
48
- config.parser.add_argument("--db", help="Database name", type=str, required=True)
49
+ config.parser.add_argument(
50
+ "--test_db",
51
+ help="Use sandbox database. Drop all data after the operation.",
52
+ action="store_true",
53
+ )
49
54
  return config.initialize(db_config=True)
50
55
 
51
56
 
@@ -55,6 +60,9 @@ def main(): # noqa: D103
55
60
  logger = logging.getLogger()
56
61
  logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
57
62
 
63
+ if args_dict.get("test_db", False):
64
+ db_config["db_simulation_model"] = db_config["db_simulation_model"] + str(uuid.uuid4())
65
+ logger.info(f"Using test database: {db_config['db_simulation_model']}")
58
66
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
59
67
 
60
68
  files_to_insert = []
@@ -74,6 +82,8 @@ def main(): # noqa: D103
74
82
  print(*files_to_insert, sep="\n")
75
83
  print()
76
84
 
85
+ logger.info(f"DB {args_dict['db_simulation_model']} selected.")
86
+
77
87
  if gen.user_confirm():
78
88
  for file_to_insert_now in files_to_insert:
79
89
  par_dict = gen.collect_data_from_file(file_name=file_to_insert_now)
@@ -91,6 +101,13 @@ def main(): # noqa: D103
91
101
  else:
92
102
  logger.info("Aborted, no change applied to the database")
93
103
 
104
+ # drop test database; be safe and required DB name is sandbox
105
+ if args_dict.get("test_db", False) and "sandbox" in args_dict["db_simulation_model"]:
106
+ logger.info(
107
+ f"Test database used. Dropping all data from {db_config['db_simulation_model']}"
108
+ )
109
+ db.db_client.drop_database(db_config["db_simulation_model"])
110
+
94
111
 
95
112
  if __name__ == "__main__":
96
113
  main()
@@ -3,22 +3,36 @@
3
3
  r"""
4
4
  Get a parameter entry from DB for a specific telescope or a site.
5
5
 
6
- The application receives a parameter name, a site, a telescope (if applicable) and \
7
- a version. It then prints out the parameter entry.
6
+ The application receives a parameter name, a site, a telescope (if applicable) and
7
+ a version. Allow to print the parameter entry to screen or save it to a file.
8
+ Parameter describing a table file can be written to disk or exported as an astropy table
9
+ (if available).
8
10
 
9
11
  Command line arguments
10
12
  ----------------------
11
13
  parameter (str, required)
12
14
  Parameter name
13
15
 
16
+ parameter_version (str, optional)
17
+ Parameter version
18
+
19
+ model_version (str, required)
20
+ Model version
21
+
14
22
  site (str, required)
15
23
  South or North.
16
24
 
17
25
  telescope (str, optional)
18
26
  Telescope model name (e.g. LST-1, SST-D, ...)
19
27
 
20
- log_level (str, optional)
21
- Log level to print.
28
+ output_file (str, optional)
29
+ Output file name. If not given, print to stdout.
30
+
31
+ export_model_file (bool, optional)
32
+ Export model file (if parameter describes a file).
33
+
34
+ export_model_file_as_table (bool, optional)
35
+ Export model file as astropy table (if parameter describes a file).
22
36
 
23
37
  Raises
24
38
  ------
@@ -35,12 +49,14 @@ r"""
35
49
  --model_version 5.0.0
36
50
 
37
51
  Get the mirror_list parameter using the parameter_version from the DB.
52
+ Write the mirror list to disk.
38
53
 
39
54
  .. code-block:: console
40
55
 
41
56
  simtools-db-get-parameter-from-db --parameter mirror_list \\
42
57
  --site North --telescope LSTN-01 \\
43
- --parameter_version 1.0.0
58
+ --parameter_version 1.0.0 \\
59
+ --export_model_file
44
60
 
45
61
  """
46
62
 
@@ -53,7 +69,6 @@ import simtools.utils.general as gen
53
69
  from simtools.configuration import configurator
54
70
  from simtools.db import db_handler
55
71
  from simtools.io_operations import io_handler
56
- from simtools.utils import names
57
72
 
58
73
 
59
74
  def _parse():
@@ -72,6 +87,18 @@ def _parse():
72
87
  type=str,
73
88
  required=False,
74
89
  )
90
+ config.parser.add_argument(
91
+ "--export_model_file",
92
+ help="Export model file (if parameter describes a file)",
93
+ action="store_true",
94
+ required=False,
95
+ )
96
+ config.parser.add_argument(
97
+ "--export_model_file_as_table",
98
+ help="Export model file as astropy table (if parameter describes a file)",
99
+ action="store_true",
100
+ required=False,
101
+ )
75
102
 
76
103
  return config.initialize(
77
104
  db_config=True, simulation_model=["telescope", "parameter_version", "model_version"]
@@ -86,26 +113,29 @@ def main(): # noqa: D103
86
113
 
87
114
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
88
115
 
89
- # get parameter using 'parameter_version'
90
- if args_dict["parameter_version"] is not None:
91
- pars = db.get_model_parameter(
116
+ pars = db.get_model_parameter(
117
+ parameter=args_dict["parameter"],
118
+ site=args_dict["site"],
119
+ array_element_name=args_dict.get("telescope"),
120
+ parameter_version=args_dict.get("parameter_version"),
121
+ model_version=args_dict.get("model_version"),
122
+ )
123
+ if args_dict["export_model_file"] or args_dict["export_model_file_as_table"]:
124
+ table = db.export_model_file(
92
125
  parameter=args_dict["parameter"],
93
- parameter_version=args_dict["parameter_version"],
94
126
  site=args_dict["site"],
95
127
  array_element_name=args_dict["telescope"],
128
+ parameter_version=args_dict.get("parameter_version"),
129
+ model_version=args_dict.get("model_version"),
130
+ export_file_as_table=args_dict["export_model_file_as_table"],
96
131
  )
97
- # get parameter using 'model_version'
98
- elif args_dict["model_version"] is not None:
99
- pars = db.get_model_parameters(
100
- site=args_dict["site"],
101
- array_element_name=args_dict.get("telescope"),
102
- model_version=args_dict["model_version"],
103
- collection=names.get_collection_name_from_parameter_name(args_dict["parameter"]),
104
- )
105
- else:
106
- raise ValueError("Either 'parameter_version' or 'model_version' must be provided.")
107
- if args_dict["parameter"] not in pars:
108
- raise KeyError(f"The requested parameter, {args_dict['parameter']}, does not exist.")
132
+ param_value = pars[args_dict["parameter"]]["value"]
133
+ table_file = Path(io_handler.IOHandler().get_output_directory()) / f"{param_value}"
134
+ logger.info(f"Exported model file {param_value} to {table_file}")
135
+ if table and table_file.suffix != ".ecsv":
136
+ table.write(table_file.with_suffix(".ecsv"), format="ascii.ecsv", overwrite=True)
137
+ logger.info(f"Exported model file {param_value} to {table_file.with_suffix('.ecsv')}")
138
+
109
139
  if args_dict["output_file"] is not None:
110
140
  _output_file = (
111
141
  Path(io_handler.IOHandler().get_output_directory()) / args_dict["output_file"]