gammasimtools 0.16.0__py3-none-any.whl → 0.17.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 (63) hide show
  1. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/METADATA +4 -2
  2. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/RECORD +60 -54
  3. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/WHEEL +1 -1
  4. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/entry_points.txt +3 -1
  5. simtools/_version.py +2 -2
  6. simtools/applications/derive_ctao_array_layouts.py +5 -5
  7. simtools/applications/generate_simtel_event_data.py +36 -46
  8. simtools/applications/merge_tables.py +104 -0
  9. simtools/applications/plot_array_layout.py +145 -258
  10. simtools/applications/production_derive_corsika_limits.py +35 -220
  11. simtools/applications/production_derive_statistics.py +77 -43
  12. simtools/applications/simulate_light_emission.py +1 -0
  13. simtools/applications/simulate_prod.py +30 -18
  14. simtools/applications/simulate_prod_htcondor_generator.py +0 -1
  15. simtools/applications/submit_array_layouts.py +93 -0
  16. simtools/applications/verify_simulation_model_production_tables.py +52 -0
  17. simtools/camera/camera_efficiency.py +3 -3
  18. simtools/configuration/commandline_parser.py +28 -34
  19. simtools/configuration/configurator.py +0 -4
  20. simtools/corsika/corsika_config.py +17 -12
  21. simtools/corsika/primary_particle.py +46 -13
  22. simtools/data_model/metadata_collector.py +7 -3
  23. simtools/db/db_handler.py +11 -11
  24. simtools/db/db_model_upload.py +2 -2
  25. simtools/io_operations/io_handler.py +2 -2
  26. simtools/io_operations/io_table_handler.py +345 -0
  27. simtools/job_execution/htcondor_script_generator.py +2 -2
  28. simtools/job_execution/job_manager.py +7 -121
  29. simtools/layout/array_layout_utils.py +385 -0
  30. simtools/model/array_model.py +5 -0
  31. simtools/model/model_repository.py +134 -0
  32. simtools/production_configuration/{calculate_statistical_errors_grid_point.py → calculate_statistical_uncertainties_grid_point.py} +101 -112
  33. simtools/production_configuration/derive_corsika_limits.py +239 -111
  34. simtools/production_configuration/derive_corsika_limits_grid.py +189 -0
  35. simtools/production_configuration/derive_production_statistics.py +57 -26
  36. simtools/production_configuration/derive_production_statistics_handler.py +70 -37
  37. simtools/production_configuration/interpolation_handler.py +296 -94
  38. simtools/ray_tracing/ray_tracing.py +7 -6
  39. simtools/reporting/docs_read_parameters.py +104 -62
  40. simtools/runners/corsika_simtel_runner.py +4 -1
  41. simtools/runners/runner_services.py +5 -4
  42. simtools/schemas/model_parameters/dsum_threshold.schema.yml +41 -0
  43. simtools/schemas/production_configuration_metrics.schema.yml +2 -2
  44. simtools/simtel/simtel_config_writer.py +34 -14
  45. simtools/simtel/simtel_io_event_reader.py +301 -194
  46. simtools/simtel/simtel_io_event_writer.py +207 -227
  47. simtools/simtel/simtel_io_file_info.py +9 -4
  48. simtools/simtel/simtel_io_metadata.py +20 -5
  49. simtools/simtel/simulator_array.py +2 -2
  50. simtools/simtel/simulator_light_emission.py +79 -34
  51. simtools/simtel/simulator_ray_tracing.py +2 -2
  52. simtools/simulator.py +101 -68
  53. simtools/testing/validate_output.py +4 -1
  54. simtools/utils/general.py +1 -1
  55. simtools/utils/names.py +5 -5
  56. simtools/visualization/plot_array_layout.py +242 -0
  57. simtools/visualization/plot_pixels.py +681 -0
  58. simtools/visualization/visualize.py +3 -219
  59. simtools/applications/production_generate_simulation_config.py +0 -152
  60. simtools/layout/ctao_array_layouts.py +0 -172
  61. simtools/production_configuration/generate_simulation_config.py +0 -158
  62. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/licenses/LICENSE +0 -0
  63. {gammasimtools-0.16.0.dist-info → gammasimtools-0.17.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gammasimtools
3
- Version: 0.16.0
3
+ Version: 0.17.0
4
4
  Summary: Tools for the Simulation System of the CTA Observatory
5
5
  Author-email: simtools developers <simtools-developer@desy.de>
6
6
  License-Expression: BSD-3-Clause
@@ -22,6 +22,7 @@ Requires-Dist: boost-histogram
22
22
  Requires-Dist: ctao-dpps-cosmic-ray-spectra
23
23
  Requires-Dist: ctapipe
24
24
  Requires-Dist: eventio
25
+ Requires-Dist: h5py
25
26
  Requires-Dist: jsonschema
26
27
  Requires-Dist: matplotlib
27
28
  Requires-Dist: numpy
@@ -39,8 +40,8 @@ Requires-Dist: ruff; extra == "dev"
39
40
  Provides-Extra: doc
40
41
  Requires-Dist: myst-parser; extra == "doc"
41
42
  Requires-Dist: numpydoc; extra == "doc"
43
+ Requires-Dist: pydata-sphinx-theme; extra == "doc"
42
44
  Requires-Dist: sphinx; extra == "doc"
43
- Requires-Dist: sphinx-book-theme; extra == "doc"
44
45
  Requires-Dist: towncrier; extra == "doc"
45
46
  Provides-Extra: tests
46
47
  Requires-Dist: pytest; extra == "tests"
@@ -50,6 +51,7 @@ Requires-Dist: pytest-profiling; extra == "tests"
50
51
  Requires-Dist: pytest-random-order; extra == "tests"
51
52
  Requires-Dist: pytest-repeat; extra == "tests"
52
53
  Requires-Dist: pytest-requirements; extra == "tests"
54
+ Requires-Dist: pytest-retry; extra == "tests"
53
55
  Requires-Dist: pytest-xdist; extra == "tests"
54
56
  Dynamic: license-file
55
57
 
@@ -1,9 +1,9 @@
1
- gammasimtools-0.16.0.dist-info/licenses/LICENSE,sha256=idBrtxX6eQcUlG0YBTx-O2RNKNKg1Gidb8OQf9q0X7s,1543
1
+ gammasimtools-0.17.0.dist-info/licenses/LICENSE,sha256=idBrtxX6eQcUlG0YBTx-O2RNKNKg1Gidb8OQf9q0X7s,1543
2
2
  simtools/__init__.py,sha256=yvx0i5ygbllmMtF2Tzy7pohvhQNH_dBdj0Bt8bKFYpc,231
3
- simtools/_version.py,sha256=DiQpBIZMVT47CbF7vAc_z27p1BtVHJkNlV2_J-6KcLU,513
3
+ simtools/_version.py,sha256=6lYqo2NiGNZ_O8QsSkzvYU60ogL4YFzN80126BkHcWw,513
4
4
  simtools/constants.py,sha256=jKPUSv8vptzr4x2JvD-wkqaXnTP60q4GniwMj6Rzztk,893
5
5
  simtools/dependencies.py,sha256=3WHH6YaBAKpQByvS5edcB5R6v7hV_BTno5LZhzBib-c,4363
6
- simtools/simulator.py,sha256=sXU_a7Id2uscgIu7cyjjs3h0yABfFlq1fWrf1Blj9mo,27755
6
+ simtools/simulator.py,sha256=cyicihvBOrxwoklzqyN7oWgmIKGPCLzqU9luE-oS73I,29384
7
7
  simtools/version.py,sha256=Fri_aFaUOmV8CIygd3DknAmJaFZ05OAeLd1AgZOcgdQ,688
8
8
  simtools/applications/calculate_trigger_rate.py,sha256=hzbf6CPrnFOB7uyjnaiqDfsO1jaVnYXfRd09L9LaewQ,6067
9
9
  simtools/applications/convert_all_model_parameters_from_simtel.py,sha256=mWevSRTsOL1SHJbw0ke09jEfrJP0m-DVvplc0iZhz6c,12136
@@ -16,7 +16,7 @@ simtools/applications/db_get_array_layouts_from_db.py,sha256=2St5ZfcohXSHnDYiP32
16
16
  simtools/applications/db_get_file_from_db.py,sha256=GvuAJmqIBhlnbmbVIKRJRF5vltUdQJqbmakFzYdOflk,2749
17
17
  simtools/applications/db_get_parameter_from_db.py,sha256=7tOO4lxEucnr7jA9L6a04o3HZx1KQUvD11dUZaj9CzE,5157
18
18
  simtools/applications/db_inspect_databases.py,sha256=fQZvbdgunGjS86i4NTAgPg9TjKTiPbsuR3al2DPzLMM,1410
19
- simtools/applications/derive_ctao_array_layouts.py,sha256=YQT_X06Dq_UFlbq9B54p1T-hZ61KlvUpCIxU6W6x1j8,4050
19
+ simtools/applications/derive_ctao_array_layouts.py,sha256=n6bCW2hRXDg1GxynwouRJKQlBYeG2GCehx61tNvRLMA,4081
20
20
  simtools/applications/derive_mirror_rnda.py,sha256=tJvGxV-znPmx-GMZDThFw7Y-Wnd6q48fVwxze7DWNa4,8721
21
21
  simtools/applications/derive_photon_electron_spectrum.py,sha256=8Dpz-XTlCmOvoKUFtq78B1of62k8ygyk5_r-ZxZYauo,3968
22
22
  simtools/applications/derive_psf_parameters.py,sha256=eCy_AjxlFH5nrW5nltnM5rZxX-I08grYvwugGyRuCFk,14181
@@ -29,18 +29,19 @@ simtools/applications/generate_corsika_histograms.py,sha256=lDTZTns4yOwcYdKgNGO0
29
29
  simtools/applications/generate_default_metadata.py,sha256=CtUq6ldprp_3mbSB2TXBHeNznUH3qCMkI381GwslWPA,2878
30
30
  simtools/applications/generate_regular_arrays.py,sha256=JZI4KfhP67K6Qvg2yAsQZgKNnRiQAfdcpDHfgP16Wkk,3846
31
31
  simtools/applications/generate_sim_telarray_histograms.py,sha256=mzCyzRMpRhfkOJU0FNBa70xwb8JgNZJ5PxFnBjPClG4,6682
32
- simtools/applications/generate_simtel_event_data.py,sha256=XTmhB7mSsi7m_Ymapb9pdBtClWJ9OYCLztigqL5ZTCs,3658
33
- simtools/applications/plot_array_layout.py,sha256=k0eJVSCcNZDCzzD7L9aCCywxxfCyApjkqmqWbZxRA2k,12302
32
+ simtools/applications/generate_simtel_event_data.py,sha256=EceSrlPfYKSAT-DMQHimGbcwr58UonuN08ZBW9fl9p8,3426
33
+ simtools/applications/merge_tables.py,sha256=3u8VlSTr2qzXEgL18Ho5liCbaSB09KtbFYKD3kNBsv8,2745
34
+ simtools/applications/plot_array_layout.py,sha256=ehcOk_zD8de7HEoLSguOOp8awigiJdobDYpX9qoffj8,9898
34
35
  simtools/applications/plot_tabular_data.py,sha256=U4OAiaWcvduP78uuCMfQDSOv1OSKB3jAOaXDMSoCCDo,2630
35
36
  simtools/applications/print_version.py,sha256=K4wyiWKg3urKgbYirNzxZ3TYogQOTpgnhpz-wdLxbyU,2318
36
- simtools/applications/production_derive_corsika_limits.py,sha256=XS5PnjFmPx4SS9y_S29xLOZYGvQjg6gpr1JRTmdmb7s,9187
37
- simtools/applications/production_derive_statistics.py,sha256=rVuG0NRY7nugOl6EiCrGTvPHDxJDxoCe1jcz8Skk4TU,3961
37
+ simtools/applications/production_derive_corsika_limits.py,sha256=s_2_xV8vZ1SQIodzNreJzEK-s8g-A7Pdkn-AE1X4RVw,3547
38
+ simtools/applications/production_derive_statistics.py,sha256=S_PLIR10Xj6Fy1bwU-fAHLueFVJjlGg-jzl55ddKGZ4,5125
38
39
  simtools/applications/production_generate_grid.py,sha256=wH3vMNUPeN8lA7IRyXZdgpCAvkbMRLcpCJhtV5QcAuw,6769
39
- simtools/applications/production_generate_simulation_config.py,sha256=qDIo1VDQzmUcP0QiqdHb-spDg6VEA_qtkkjsQ3_1UG4,5017
40
40
  simtools/applications/run_application.py,sha256=WneCRqlVBThzFFkBo3zHe_fER0oF6nIyIfIRNuxlJ2Q,6669
41
- simtools/applications/simulate_light_emission.py,sha256=XugFWglsPgyryOK8U-dGR7He-kvgTz4kvgAd8B-yR00,11174
42
- simtools/applications/simulate_prod.py,sha256=sX8i-di23MehIv7HFca4xSdIwCx5LRs7aqsCMKHduQE,7053
43
- simtools/applications/simulate_prod_htcondor_generator.py,sha256=h2xKRxFzZ5iAjQTs8imcgz44GqqPNTvs70TjoqJDysU,3193
41
+ simtools/applications/simulate_light_emission.py,sha256=HyoDADx_514GHIhTQChfRfskaMjf83TRl_3U_O1Z_-I,11206
42
+ simtools/applications/simulate_prod.py,sha256=mtxF2zzWDx0NernTT6bWLcqEK_UCvvs4JdSp9en9bbo,7335
43
+ simtools/applications/simulate_prod_htcondor_generator.py,sha256=V6l1DGAD-268NkwIy-XPzrgTLSEICWN5-dFZxQTGCFs,3163
44
+ simtools/applications/submit_array_layouts.py,sha256=G409oVhbBrJTTQGUZ37-skkBMnRsy1K3Fxu7NlSp2Fo,2708
44
45
  simtools/applications/submit_data_from_external.py,sha256=hFqsnKiH00YGOmu8hMFi6kBWGxwkabVIAYLI0ckh-6E,3259
45
46
  simtools/applications/submit_model_parameter_from_external.py,sha256=VHjfoNPiInrVdxRyT9uKC8OdEvOLfg72XW9Yw7j8FsI,3969
46
47
  simtools/applications/validate_camera_efficiency.py,sha256=6TzAMJXASwlCIG8pcmGxRk5Br6-2NYQPnIe7URZ5pVw,4029
@@ -48,56 +49,59 @@ simtools/applications/validate_camera_fov.py,sha256=BGDYKqeJOgWN2V1sNSZAMyhI4lfA
48
49
  simtools/applications/validate_cumulative_psf.py,sha256=hgEU7arg2cSwquCHEEMhvqnaH47gyQ26v6Yr-lxE0lM,6415
49
50
  simtools/applications/validate_file_using_schema.py,sha256=fH4rdWKBX0Mu2mwrM7v84Dn2vGCq-owZkKZqqNB6MJI,6903
50
51
  simtools/applications/validate_optics.py,sha256=KsAxavDuV8STnAE4h5rRneiPb785by_JUsnYldHbXgU,6388
52
+ simtools/applications/verify_simulation_model_production_tables.py,sha256=MJnwsnDrWVWP8XfHoULhhvxtI9XV3e_2oRVZu63BN7k,1576
51
53
  simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py,sha256=-3zolE6ihmXnugbytEZC7PqMMo4_EjNTcYrgO6f9lCw,5512
52
- simtools/camera/camera_efficiency.py,sha256=FW0it3JxThqQ9aJmzkOo9l5V4_-cvn0-EGuLj0VXiQI,18339
54
+ simtools/camera/camera_efficiency.py,sha256=60BePnniYtOB0_7LRpFB8rThLPYuObV-dE65AYEe2TA,18339
53
55
  simtools/camera/single_photon_electron_spectrum.py,sha256=0nTlbAE0xoLVBMDwejrMCCj93JN7p8ai9pEBvN6Q0zA,11583
54
- simtools/configuration/commandline_parser.py,sha256=7Jxck8lRCjjFTGZ282aihaRFIiVHBUxzV3YZQVNlTpg,25895
55
- simtools/configuration/configurator.py,sha256=DEMMSJHrJ_IDNqoogckg88e9YpXtFDYB8-vS4nyorNI,15196
56
- simtools/corsika/corsika_config.py,sha256=WNpjZA0b8wlqSxjc0spqR_XzdiOB-08T0vUmMA-Ovnk,28207
56
+ simtools/configuration/commandline_parser.py,sha256=KidFcfBim-3zdTAUAJ7OWNQFhkQK3uV7EOyNXpBwk5c,25778
57
+ simtools/configuration/configurator.py,sha256=qTo4gPUjeX98sbwjJVSkFbH_5BZBPv68gxNJdf1NINA,15032
58
+ simtools/corsika/corsika_config.py,sha256=FY4bEFhKIWbxHVn8oa5f8NE6l-trYN9XcPjtnUxxneE,28389
57
59
  simtools/corsika/corsika_histograms.py,sha256=Nhiq6XSGwJJ4Vk1Pu2STknE1x9HLTA4SiQXv4FGF_aA,67664
58
60
  simtools/corsika/corsika_histograms_visualize.py,sha256=HjGLcff-ILXh8VYQKWycbHocVBVQp3TTOPmxAky0guI,18169
59
- simtools/corsika/primary_particle.py,sha256=ERXhBd6aMPEG6H0XkNfKf5lK-Odqup3jsvRXIyESGIM,5817
61
+ simtools/corsika/primary_particle.py,sha256=WK0UKYtdPSefes286ZGXsoGV9r6JqH19Tk9myza_plU,6613
60
62
  simtools/data_model/data_reader.py,sha256=kA6MUmzyfEk3LApX2BSrD5jCJmqGZeJ1LEjbSj6L1zQ,4134
61
63
  simtools/data_model/format_checkers.py,sha256=bXF9dItkpZCGXAHdCH7vhgxEsIhXLLVFLOha-hKRspY,1949
62
- simtools/data_model/metadata_collector.py,sha256=lrNJOtQqLR9WoWzsy2vHh-sLjJHHFlUOu5_bQsEliPw,23431
64
+ simtools/data_model/metadata_collector.py,sha256=0rfILtqeVUK5IX7UVO51afxvr4QZI5rcbyeLFSEE8fo,23678
63
65
  simtools/data_model/metadata_model.py,sha256=tvSCfip0-ZKjMWDwPjSHz4jpLrNKPd5FAohTWnWf8xM,4386
64
66
  simtools/data_model/model_data_writer.py,sha256=hrEtjBDL5y5H67HEiqw6M4SWZvjyj0jCVFBQ86rdhps,15316
65
67
  simtools/data_model/schema.py,sha256=wM4GPqYfC-fS26yMZSu1JgrsuQ91gS7EpIcu6xbBMhw,6730
66
68
  simtools/data_model/validate_data.py,sha256=RmzYmt0N1o73ys-9z--X-CSa1z8IwQpRp20JclR4zAw,30044
67
- simtools/db/db_handler.py,sha256=qwD--dBeK0OXMQA6gurJhWbhTUHfXl1HIIKtg_lkUCg,33545
68
- simtools/db/db_model_upload.py,sha256=_7t7DcrIr1Tu8k04bnfW6XDEvJCE-SJ8CFuAGc5eCII,4836
69
+ simtools/db/db_handler.py,sha256=brTnGFrNDUEAc5rTqM67IobZT9BjUHgU-4zZkX7NPOE,33566
70
+ simtools/db/db_model_upload.py,sha256=6WToU1iLSSi0bCT7OSb2YB2LY53zgHGq75aqwAwvuew,4838
69
71
  simtools/io_operations/hdf5_handler.py,sha256=CqP76MCfxvWH8AOnkIbQM5wBHIvSDEbdZ03wn7t6XgI,4232
70
- simtools/io_operations/io_handler.py,sha256=DPj3YUjDNkmmM1EGzV-Ifp_SCW7kLlI6Vn2nzvusH4s,4428
72
+ simtools/io_operations/io_handler.py,sha256=NNRnsWx9WMzA2MfAFlijpAYp7g-PyH0gMOmm-KH4I88,4428
73
+ simtools/io_operations/io_table_handler.py,sha256=aMXUPXVBPxbh59qtbT8da3eRcdgscaEy4bF3KSCQKRQ,10714
71
74
  simtools/io_operations/legacy_data_handler.py,sha256=gSz4FLoa1IpJl2DnP6NHpzSYVC4_rolX_SfbHt3u_zk,1341
72
- simtools/job_execution/htcondor_script_generator.py,sha256=6EIqOE8o_G1Pq_8-OZ-qBcUq25hVL2x0TSThOswZPAs,3821
73
- simtools/job_execution/job_manager.py,sha256=XqQBAzYL7SBxcl-Bp4O0Pw9jtMldEfNA_O_kRIQJNf8,7160
75
+ simtools/job_execution/htcondor_script_generator.py,sha256=0SnAaxPIM2Ecg9UknS3AkStrNzIC9T3r9DEKVUEZJIA,3808
76
+ simtools/job_execution/job_manager.py,sha256=fuEJwzCp3U-1oRp0suq3VQY-afKVKMOqObpvxHETXlM,3424
74
77
  simtools/layout/array_layout.py,sha256=J6wag1ZwIjutchm_ak-2FTtXdwMUAYm6hRAnXQO6GnQ,25197
75
- simtools/layout/ctao_array_layouts.py,sha256=xS4pTf7OD-MvkqjEutDd7DH7HeQJ-_KkpLGIC4pAwoE,5275
78
+ simtools/layout/array_layout_utils.py,sha256=OFlE7TuGJhuh0Ev7Ix2fA9-7ragsvQIJkJTMPEbQ4oQ,11377
76
79
  simtools/layout/geo_coordinates.py,sha256=9kKnXFi9vrfYKG_9elzFuzzssGFEUzxMubaclITkW_g,5944
77
80
  simtools/layout/telescope_position.py,sha256=m34taJ7LML_KBW75i3EGMK2vEHK9tqFltxa9Ojrspi0,20162
78
- simtools/model/array_model.py,sha256=S3AIBUsAAin-vJxlZDEtE6nhocyLCcuEmIQynHamPPU,15576
81
+ simtools/model/array_model.py,sha256=0Mk1i5g7nK4opjkQPBvS-LD-PyYGtgHD8EpCcIANtEo,15798
79
82
  simtools/model/calibration_model.py,sha256=PqZnca86rNiKu3pExJc3fdiDwbHcB7Q9yl2pyA1orGU,1442
80
83
  simtools/model/camera.py,sha256=Gj9yWfAfM4GrrX5q6ZGSQy80WsOUqZaTnP7DoCYfOJ0,21403
81
84
  simtools/model/mirrors.py,sha256=uGCAT68WpnESv9IAgg8Xae9Z2-XgxMBL_Phnv6Ro0XQ,9151
82
85
  simtools/model/model_parameter.py,sha256=omYDU2a1NeEcMBigmVS-r2ERHLCDLi4Y8ibsX5zWh_c,19219
86
+ simtools/model/model_repository.py,sha256=68XLwOw5cG69QdFyTqBIPeLBYx1FtzPS48cMAL0BHbo,4124
83
87
  simtools/model/model_utils.py,sha256=OFMKgrHLzStAE7k5JRuj6iAI4Z1_ND13lXWzUTGfZ_M,2485
84
88
  simtools/model/site_model.py,sha256=eBkF-bMdS3AtARbDbDC8LqzNWqSDpROFhygWdH6uv4w,5263
85
89
  simtools/model/telescope_model.py,sha256=WFR4GolpOwUmRipJzoVWMovjOLeAhJcOCZTcv8yB3oE,13472
86
- simtools/production_configuration/calculate_statistical_errors_grid_point.py,sha256=vEsu8dDZnykKQsWn63Vr1W9i8AaYBaW_zjB2pyBCSis,15913
87
- simtools/production_configuration/derive_corsika_limits.py,sha256=iCBryhVO-OjVHIScozIS91olVVnJsmtfozsSq6pMPl0,11893
88
- simtools/production_configuration/derive_production_statistics.py,sha256=rRpFZuXeJ6HfL01-IUjH3g4FUUp9bMgh9gVU3vbxiS4,4276
89
- simtools/production_configuration/derive_production_statistics_handler.py,sha256=R7Qh8uxQZSaGzygvL1AonqWsAPUDDZSLGbx8PQlR-xY,5027
90
+ simtools/production_configuration/calculate_statistical_uncertainties_grid_point.py,sha256=r3g2dNMCZdl6K3fvg0mcPV7C2AIc70N2bSdyYb5hY4I,15550
91
+ simtools/production_configuration/derive_corsika_limits.py,sha256=AdDh8EnycpsS9w3RcVW8UN3tZs19hfPfYnE38Gl_fmE,16651
92
+ simtools/production_configuration/derive_corsika_limits_grid.py,sha256=SNFnAaxens6x0pfB92TbkEEO2g7asWbsMt64lx9fplE,5501
93
+ simtools/production_configuration/derive_production_statistics.py,sha256=q7uW044MVcbGzwzVYpXcSvlRD8qcif8FyYP7mqtuNWs,5761
94
+ simtools/production_configuration/derive_production_statistics_handler.py,sha256=-mZGIvXDlQk96N1V_zDu-w9Fv7VG9idjFpztZx0Nqh4,6180
90
95
  simtools/production_configuration/generate_production_grid.py,sha256=iLyBMcI6IDOe7gBZIEm1_T64eFtljX1YWfWK09cs67Y,13423
91
- simtools/production_configuration/generate_simulation_config.py,sha256=JoIgrUxvpDFMXD1OtWLwq9w3EmsWqmsVZiN0dHJDIV4,4958
92
- simtools/production_configuration/interpolation_handler.py,sha256=HhkjM9Nkzd37KRkk_WgY72XS03sByVZZCYmWYcw-zH0,7297
96
+ simtools/production_configuration/interpolation_handler.py,sha256=97zk7XR8yNMs4dEqcrfjpma6SgUDlqaXcsfAIw1rhuY,14131
93
97
  simtools/ray_tracing/mirror_panel_psf.py,sha256=3ggk1GTGodNcLlp06ku6iTP5h5oIkyx9Tdzdfec4Skg,11153
94
98
  simtools/ray_tracing/psf_analysis.py,sha256=kw431lbLNd8nm7FoOkCZwSw1iXvNIit-WKX9n-GMLJw,18164
95
- simtools/ray_tracing/ray_tracing.py,sha256=qy857OM3qr0VknGb3oKhaq79LEwpsFSzHKpCPUsV7HE,21706
99
+ simtools/ray_tracing/ray_tracing.py,sha256=jpne4oDWE4osDuaQnkUOUIXdq0rC2qRdaEaJTM3hPrM,21812
96
100
  simtools/reporting/docs_auto_report_generator.py,sha256=i4GGtpKKN0cVtGPEK4m3tpOrD8-PP5uot4kRHUujt8U,9236
97
- simtools/reporting/docs_read_parameters.py,sha256=xYX9gDaGJB6pow3VBjaYmEvz4iWvija0OGyHSJQIzyk,32133
101
+ simtools/reporting/docs_read_parameters.py,sha256=oYa75ixZNtKMh8Xy4uJAvtudaLQmNgGyhKedJ4fLTZw,33773
98
102
  simtools/runners/corsika_runner.py,sha256=_w88APEG-H7Ns0E0modqvl_FsFAA3WVbS9TZFI6b4Ug,9199
99
- simtools/runners/corsika_simtel_runner.py,sha256=xotfwhbwPOtUk0Xzlv3ZNEaqIQRecXAiprag79vkGn0,7251
100
- simtools/runners/runner_services.py,sha256=RV4ZHKOIsURsjbT4Mk6XY7nEeRXuGFIj5JHP04cOzC0,10223
103
+ simtools/runners/corsika_simtel_runner.py,sha256=pPiytx5UEa3oQPPUh1l_fAv2b6FCfPDpD4hUPME7gv8,7377
104
+ simtools/runners/runner_services.py,sha256=iFyOnABEnTpjoHhW0a2rkRCkhgH5nMwwbHb-Nk8EVuQ,10319
101
105
  simtools/runners/simtel_runner.py,sha256=0S_iqi_HewbCbqkEwNA4uBbzRXDIe5BZaZXP4h0ufBY,8362
102
106
  simtools/schemas/application_workflow.metaschema.yml,sha256=eoe08Gw0BN235bW92GwRxkTIbieMMAstLl-kHZqrf2U,4567
103
107
  simtools/schemas/array_elements.yml,sha256=7OZ5BwhX-YFJ1SnXXgW2nO0ZP6xnQK4B0Cmvd5d96dw,3552
@@ -105,7 +109,7 @@ simtools/schemas/metadata.metaschema.yml,sha256=Wf7vmNXaD1btm5yHUQ8NhxUW5k0-Jl5Q
105
109
  simtools/schemas/model_parameter.metaschema.yml,sha256=mgzsF6G2xZti_wSTfGKGJGiOBBsgs7KL6DlYKa1QOt4,6553
106
110
  simtools/schemas/model_parameter_and_data_schema.metaschema.yml,sha256=lH1FuFvU3exy-61t-5AW1ou4FkoGsXJwMTck2YnS05o,10342
107
111
  simtools/schemas/plot_configuration.metaschema.yml,sha256=b89uLn_nI9oEiBCa9uOlb5jPQCE-yApiFdWfgJlL5HI,4516
108
- simtools/schemas/production_configuration_metrics.schema.yml,sha256=cJbJYInc4kfCISV67YPfTSMw1WST6mPpIyPM6aP_xsE,1636
112
+ simtools/schemas/production_configuration_metrics.schema.yml,sha256=36azX8tg_cNArk5GmDL0-WdOLRicZRJEnlVzg2YUv20,1648
109
113
  simtools/schemas/production_tables.schema.yml,sha256=qcrY-89v1fDVpjBKpx4ZRv5BaVsayVtKOkPRArNIjVM,1301
110
114
  simtools/schemas/input/MST_mirror_2f_measurements.schema.yml,sha256=jETNirP8IYJVG5rVeqIuin7O-o7XjmFbvHSFI6SxZZg,1117
111
115
  simtools/schemas/input/single_pe_spectrum.schema.yml,sha256=1y0MNMWs20F6s1iQV8sBuN2vxI2b6dFVADj79OKgH4c,1237
@@ -181,7 +185,7 @@ simtools/schemas/model_parameters/dsum_presum_max.schema.yml,sha256=VIIgi48iSV6j
181
185
  simtools/schemas/model_parameters/dsum_presum_shift.schema.yml,sha256=8mkPIoXOZn0EBg2Ip1TnXwR2CizXk4bquUU6zsKPEWc,1278
182
186
  simtools/schemas/model_parameters/dsum_shaping.schema.yml,sha256=2n7MM64DHVD23dtlhRcw4nN4sEA4XsVY6Qx8vStjTRw,1431
183
187
  simtools/schemas/model_parameters/dsum_shaping_renormalize.schema.yml,sha256=k-XUEp5Gylff9xkwFNZe6FIKdjaKJUn6Jk0a2spuB4Q,838
184
- simtools/schemas/model_parameters/dsum_threshold.schema.yml,sha256=oN7ZRjrrOxAjQcR-_AyhL-j1DJ4BQLtTpShVFzKPWHg,1308
188
+ simtools/schemas/model_parameters/dsum_threshold.schema.yml,sha256=zQ63IqMF4JdFfNrTv_aZlSNBXGiZhxNIPtDSevw9PCk,2604
185
189
  simtools/schemas/model_parameters/dsum_zero_clip.schema.yml,sha256=BLQlvnn_9Pq88m5Bux9BKqXF1WN-tS8GKYcg-1eO5YY,1183
186
190
  simtools/schemas/model_parameters/effective_focal_length.schema.yml,sha256=KWwUsCpUXoSOoyoCh1n9uqZvoUpUtUzLmJuDy_Not0c,3183
187
191
  simtools/schemas/model_parameters/epsg_code.schema.yml,sha256=gKgJxPoS2QxC5ecMNaNDXr7d39m1TnOkIaJKOTB4hbY,912
@@ -336,33 +340,35 @@ simtools/schemas/model_parameters/trigger_current_limit.schema.yml,sha256=aE_u7Y
336
340
  simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml,sha256=zszbE1uanxYUAqL6qteQMNxDgsLxhVPTnmijhW_WnvI,1562
337
341
  simtools/schemas/model_parameters/trigger_pixels.schema.yml,sha256=4FFa-RiZ1-S8IN5K0GY_Fo0bP1zUKQl0z12lJREqsqM,1098
338
342
  simtools/simtel/simtel_config_reader.py,sha256=OqfQtLbGrpElwmhyy_z2jtqq_882ZuADgDEjM2vmMPE,15028
339
- simtools/simtel/simtel_config_writer.py,sha256=TJ99XqhBHB93YGXOhDJOaWaar6uopUwDf56x_Pr4l7A,23468
340
- simtools/simtel/simtel_io_event_reader.py,sha256=P_An6I1EgMjY0HXndklEK9DcBFAFyn30OyE7UahZTf8,10912
341
- simtools/simtel/simtel_io_event_writer.py,sha256=_x3j8sr4w5dlwN0CMHQdpAin3ptA-9CFqncyZdhZGL8,12558
342
- simtools/simtel/simtel_io_file_info.py,sha256=ms-RJgHmV-FMdd7FL8Tz5m-XnuQBTjp35_bBdXxGMrQ,1449
343
+ simtools/simtel/simtel_config_writer.py,sha256=wxc4u77KOuYSV7clwgIrAoVdNYYKVF1oiAVDtsAeMKo,24228
344
+ simtools/simtel/simtel_io_event_reader.py,sha256=t7_ZWZHYEYOjbTU1fYQN5xVr5EU4afX-vI5og-s_Zzo,13742
345
+ simtools/simtel/simtel_io_event_writer.py,sha256=wjOjogzdPCzlCE61GGu_iIHcYMDvJuHW4-5SqU_7XoI,10878
346
+ simtools/simtel/simtel_io_file_info.py,sha256=T2xtdz-0pDZFf7cJw7brBxA9OHbDuBossTzY60RHFfw,1775
343
347
  simtools/simtel/simtel_io_histogram.py,sha256=E-2ORo5i8ukDTiG1xcte7MqKLWJ3rpTdAi9o07gdjzM,23625
344
348
  simtools/simtel/simtel_io_histograms.py,sha256=JivmhlyE7buBWJ-3pRKD57nfg7DLdaNzACVfYHZjfkc,20505
345
- simtools/simtel/simtel_io_metadata.py,sha256=Rxv1VzxRyBz5e_Ctcpoy_BqabMBz8TA8WavLY3VVRxE,2665
349
+ simtools/simtel/simtel_io_metadata.py,sha256=Spk5MtKdUYkOwEICX23jNhwypZ0tXkk40Hlp4uXugUI,3252
346
350
  simtools/simtel/simtel_table_reader.py,sha256=ce8mS_8LDh18lEjFtLgT1uhWJuIeTD05JN03Qv5iNY0,12688
347
- simtools/simtel/simulator_array.py,sha256=LD8IlUlOoAJ6ye6i8B0ISr30lbIUAq-5xJjgDHkkVB4,5521
351
+ simtools/simtel/simulator_array.py,sha256=Dcu4g83yKApeZcGZVe2I514NwBXGaDVmpgNqBGK3nFs,5535
348
352
  simtools/simtel/simulator_camera_efficiency.py,sha256=87fxw2z3avqp4rGgoEHCuvbzwTOyKi5-C9AwTcGyrvA,11381
349
- simtools/simtel/simulator_light_emission.py,sha256=5YNPzQNj4z8eDuNiU4uVcQNb29gitaSy8rOeYrsximk,22417
350
- simtools/simtel/simulator_ray_tracing.py,sha256=SEJLopd7ZAKipe1xDfjuvV0SSJaePZYogzfDeQlj1K0,11578
353
+ simtools/simtel/simulator_light_emission.py,sha256=6VN-2n4lMH0ibE5Np_6e2db6h_LPGW6oqFFSHsxO2fE,24289
354
+ simtools/simtel/simulator_ray_tracing.py,sha256=CrbWqSp-J7FLgTOl8eILWfm8N0aAydm7E65dNkHx500,11595
351
355
  simtools/testing/assertions.py,sha256=cJm6FtIJTFnTr7wqQ17yqCsrm7YVaxD3vfXoTc0GCm4,4765
352
356
  simtools/testing/configuration.py,sha256=7_Yx13Uwmxb-yU7dTTDKjV5M_D1SvqBwd_8Rp6lV7-0,7865
353
357
  simtools/testing/helpers.py,sha256=Z01EUIMkfRclJzF4WYXboxTGxDvxjYjQw32RaPWaNlw,1829
354
358
  simtools/testing/sim_telarray_metadata.py,sha256=9aVEdCZSB_56Cq-XUVMX8BLtzrwbRXf3SMqeeM9GvAk,7941
355
- simtools/testing/validate_output.py,sha256=KC3imnBVWojY16-PEB_ngxPW_VqPcQBTIIdKzoj9tDE,11332
356
- simtools/utils/general.py,sha256=ZcpSIhgWfurfwJrFEgerlBBmoUvMV1TDmBIhgWdkfJA,26956
359
+ simtools/testing/validate_output.py,sha256=zHuFu8oHxnYtO-Q2WNuVf4IGNWNs8bkHMs1EgrK-Td4,11481
360
+ simtools/utils/general.py,sha256=eN_Yu9VBObIj5GRa0lzXYayd_Ay9VKFgQkd-WCkMrnc,26966
357
361
  simtools/utils/geometry.py,sha256=afMC4ryqLmieB7layMgh2f7PnZLXaqvXBMLprBmkHVI,6660
358
- simtools/utils/names.py,sha256=qkT_xOneid31jShoIEf0mUiNRhAveYRXPOkc4DF8P-Q,20076
362
+ simtools/utils/names.py,sha256=NKNv28cuaUDnZ87H4xf6cH0v-uZCwOtWulx-t7ahYJU,20076
359
363
  simtools/utils/value_conversion.py,sha256=Cl-BHOZWUhWr-W_hT4CR1iLfiphd8MSNkzYEjDe6iH8,6311
360
364
  simtools/visualization/legend_handlers.py,sha256=NKjoV4o9RTc-jajMAZz3QXkEVYzLvrpsno4HQw-rtcw,12048
365
+ simtools/visualization/plot_array_layout.py,sha256=9FQP44O5dJ_KmTWvAWtXA0ZIGtC5TiSCJ_9yPzzhRAw,6768
361
366
  simtools/visualization/plot_camera.py,sha256=dLXKHYfY_elqaKhj91HlntASoVixTrpc_Kf0jPU8RmU,11167
367
+ simtools/visualization/plot_pixels.py,sha256=3rvQFZ4D3zn6YuBMTb72J9h5kOm0eslRcu5xLns6HiI,20604
362
368
  simtools/visualization/plot_tables.py,sha256=BNg2HJ1YAL4ahrl29P1-qFFR2UpZnwAPM_5qtrita2c,3148
363
- simtools/visualization/visualize.py,sha256=33nLvfv_-yQR8cBeaZFlBRgbtRJvIXUQ5PP-HvHGOkw,29711
364
- gammasimtools-0.16.0.dist-info/METADATA,sha256=Xwkz4SH8ylSTdNp63Ow2pfJ2FHCtU6p0kFrZS99Nmvo,6782
365
- gammasimtools-0.16.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
366
- gammasimtools-0.16.0.dist-info/entry_points.txt,sha256=LodVTLUuUM99jMbZWh2GFzzMFwnT_Sl7IhCt-oLVyII,4006
367
- gammasimtools-0.16.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
368
- gammasimtools-0.16.0.dist-info/RECORD,,
369
+ simtools/visualization/visualize.py,sha256=LlmFI2N19LVD4MzQ9ZCFYPUYKmTKQdD8Q1bmEUQJFPQ,22015
370
+ gammasimtools-0.17.0.dist-info/METADATA,sha256=QCuIbDC2vH4gKOCICeREzQmgXC7HzmkR-rk9mDGcONA,6850
371
+ gammasimtools-0.17.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
372
+ gammasimtools-0.17.0.dist-info/entry_points.txt,sha256=ptwPPiFI4TOSAw0nKa2x6LTV4Z86oPQ3frf1RtQ-w7Y,4158
373
+ gammasimtools-0.17.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
374
+ gammasimtools-0.17.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -24,17 +24,18 @@ simtools-generate-default-metadata = simtools.applications.generate_default_meta
24
24
  simtools-generate-regular-arrays = simtools.applications.generate_regular_arrays:main
25
25
  simtools-generate-sim-telarray-histograms = simtools.applications.generate_sim_telarray_histograms:main
26
26
  simtools-generate-simtel-event-data = simtools.applications.generate_simtel_event_data:main
27
+ simtools-merge-tables = simtools.applications.merge_tables:main
27
28
  simtools-plot-array-layout = simtools.applications.plot_array_layout:main
28
29
  simtools-plot-tabular-data = simtools.applications.plot_tabular_data:main
29
30
  simtools-print-version = simtools.applications.print_version:main
30
31
  simtools-production-derive-corsika-limits = simtools.applications.production_derive_corsika_limits:main
31
32
  simtools-production-derive-statistics = simtools.applications.production_derive_statistics:main
32
33
  simtools-production-generate-grid = simtools.applications.production_generate_grid:main
33
- simtools-production-generate-simulation-config = simtools.applications.production_generate_simulation_config:main
34
34
  simtools-run-application = simtools.applications.run_application:main
35
35
  simtools-simulate-light-emission = simtools.applications.simulate_light_emission:main
36
36
  simtools-simulate-prod = simtools.applications.simulate_prod:main
37
37
  simtools-simulate-prod-htcondor-generator = simtools.applications.simulate_prod_htcondor_generator:main
38
+ simtools-submit-array-layouts = simtools.applications.submit_array_layouts:main
38
39
  simtools-submit-data-from-external = simtools.applications.submit_data_from_external:main
39
40
  simtools-submit-model-parameter-from-external = simtools.applications.submit_model_parameter_from_external:main
40
41
  simtools-validate-camera-efficiency = simtools.applications.validate_camera_efficiency:main
@@ -42,3 +43,4 @@ simtools-validate-camera-fov = simtools.applications.validate_camera_fov:main
42
43
  simtools-validate-cumulative-psf = simtools.applications.validate_cumulative_psf:main
43
44
  simtools-validate-file-using-schema = simtools.applications.validate_file_using_schema:main
44
45
  simtools-validate-optics = simtools.applications.validate_optics:main
46
+ simtools-verify-simulation-model-production-tables = simtools.applications.verify_simulation_model_production_tables: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.16.0'
21
- __version_tuple__ = version_tuple = (0, 16, 0)
20
+ __version__ = version = '0.17.0'
21
+ __version_tuple__ = version_tuple = (0, 17, 0)
@@ -18,7 +18,7 @@ r"""
18
18
  Model parameter version.
19
19
  repository_url (str)
20
20
  URL or path of the CTAO common identifiers repository.
21
- repository_branch (str )
21
+ repository_branch (str)
22
22
  Repository branch to use for CTAO common identifiers.
23
23
  updated_parameter_version (str)
24
24
  Updated parameter version.
@@ -48,9 +48,9 @@ from pathlib import Path
48
48
  import simtools.utils.general as gen
49
49
  from simtools.configuration import configurator
50
50
  from simtools.db import db_handler
51
- from simtools.layout.ctao_array_layouts import (
51
+ from simtools.layout.array_layout_utils import (
52
52
  merge_array_layouts,
53
- retrieve_array_layouts,
53
+ retrieve_ctao_array_layouts,
54
54
  write_array_layouts,
55
55
  )
56
56
 
@@ -91,7 +91,7 @@ def main(): # noqa: D103
91
91
  logger = logging.getLogger()
92
92
  logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
93
93
 
94
- ctao_array_layouts = retrieve_array_layouts(
94
+ ctao_array_layouts = retrieve_ctao_array_layouts(
95
95
  site=args_dict["site"],
96
96
  repository_url=args_dict["repository_url"],
97
97
  branch_name=args_dict["repository_branch"],
@@ -107,7 +107,7 @@ def main(): # noqa: D103
107
107
  )
108
108
  db_array_layouts["array_layouts"].pop("_id", None)
109
109
  db_array_layouts["array_layouts"].pop("entry_date", None)
110
- logger.info(f"Layouts from DB: {db_array_layouts}")
110
+ logger.info(f"Layouts from model parameter database: {db_array_layouts}")
111
111
 
112
112
  write_array_layouts(
113
113
  array_layouts=merge_array_layouts(db_array_layouts["array_layouts"], ctao_array_layouts),
@@ -1,17 +1,21 @@
1
1
  #!/usr/bin/python3
2
2
 
3
- """
4
- Reduces and compiles event data from multiple input files into a structured dataset with event info.
3
+ r"""
4
+ Generate a reduced dataset of event data from simulated files.
5
+
6
+ Processes sim_telarray output files (typically of type '.simtel.zst') and creates a
7
+ reduced dataset containing shower information, array-level parameters, and data about
8
+ triggered telescopes.
5
9
 
6
10
  Command line arguments
7
11
  ----------------------
8
12
  prefix (str, required)
9
13
  Path prefix for the input files.
10
14
  output_file (str, required)
11
- Path to save the output file.
15
+ Output file path.
12
16
  max_files (int, optional, default=100)
13
- Maximum number of files to process.
14
- print_dataset_information (flag)
17
+ Maximum number of input files to process.
18
+ print_dataset_information (int, optional, default=0)
15
19
  Print information about the datasets in the generated reduced event dataset.
16
20
 
17
21
  Example
@@ -20,13 +24,12 @@ Generate a reduced dataset from input files and save the result.
20
24
 
21
25
  .. code-block:: console
22
26
 
23
- simtools-production-extract-mc-event-data \
24
- simtools-generate-simtel-event-data \
25
- --prefix path/to/input_files/ \
26
- --wildcard 'gamma_*dark*.simtel.zst' \
27
- --output_file output_file.hdf5 \
28
- --max_files 50 \
29
- --print_dataset_information
27
+ simtools-production-extract-mc-event-data \\
28
+ simtools-generate-simtel-event-data \\
29
+ --input 'path/to/input_files/gamma_*dark*.simtel.zst' \\
30
+ --output_file output_file.hdf5 \\
31
+ --max_files 50 \\
32
+ --print_dataset_information 10
30
33
  """
31
34
 
32
35
  import logging
@@ -34,8 +37,8 @@ from pathlib import Path
34
37
 
35
38
  import simtools.utils.general as gen
36
39
  from simtools.configuration import configurator
37
- from simtools.io_operations import io_handler
38
- from simtools.simtel.simtel_io_event_reader import SimtelIOEventDataReader
40
+ from simtools.data_model.metadata_collector import MetadataCollector
41
+ from simtools.io_operations import io_handler, io_table_handler
39
42
  from simtools.simtel.simtel_io_event_writer import SimtelIOEventDataWriter
40
43
 
41
44
 
@@ -51,35 +54,24 @@ def _parse(label, description):
51
54
  config = configurator.Configurator(label=label, description=description)
52
55
 
53
56
  config.parser.add_argument(
54
- "--prefix", type=str, required=True, help="Prefix path for input files."
55
- )
56
- config.parser.add_argument(
57
- "--wildcard",
57
+ "--input",
58
58
  type=str,
59
59
  required=True,
60
- help="Wildcard for querying the files in the directory (e.g., 'gamma_*dark*.simtel.zst')",
60
+ help="Input file path (wildcards allowed; e.g., '/data_path/gamma_*dark*.simtel.zst')",
61
61
  )
62
- config.parser.add_argument("--output_file", type=str, required=True, help="Output filename.")
63
62
  config.parser.add_argument(
64
- "--max_files", type=int, default=100, help="Maximum number of files to process."
63
+ "--max_files", type=int, default=100, help="Maximum number of input files to process."
65
64
  )
66
-
67
65
  config.parser.add_argument(
68
66
  "--print_dataset_information",
69
67
  type=int,
70
- help="Print given number of rows of the dataset.",
68
+ help="Print data set information for the given number of events.",
71
69
  default=0,
72
70
  )
71
+ return config.initialize(db_config=False, output=True)
73
72
 
74
- return config.initialize(db_config=False)
75
73
 
76
-
77
- def main():
78
- """
79
- Process event data files and store data in reduced dataset.
80
-
81
- The reduced dataset contains shower information, array information and triggered telescopes.
82
- """
74
+ def main(): # noqa: D103
83
75
  label = Path(__file__).stem
84
76
 
85
77
  args_dict, _ = _parse(
@@ -90,27 +82,25 @@ def main():
90
82
  ),
91
83
  )
92
84
 
93
- _logger = logging.getLogger()
94
- _logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
95
- _logger.info(f"Loading input files with prefix: {args_dict['prefix']}")
85
+ logger = logging.getLogger()
86
+ logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
87
+ logger.info(f"Loading input files from: {args_dict['input']}")
96
88
 
97
- input_path = Path(args_dict["prefix"])
98
- files = list(input_path.glob(args_dict["wildcard"]))
89
+ input_pattern = Path(args_dict["input"])
90
+ files = list(input_pattern.parent.glob(input_pattern.name))
99
91
  if not files:
100
- _logger.warning("No matching input files found.")
92
+ logger.warning("No matching input files found.")
101
93
  return
102
94
 
103
- output_path = io_handler.IOHandler().get_output_directory(label)
104
- output_filepath = Path(output_path).joinpath(f"{args_dict['output_file']}")
105
-
106
- output_filepath.parent.mkdir(parents=True, exist_ok=True)
107
- generator = SimtelIOEventDataWriter(files, output_filepath, args_dict["max_files"])
108
- generator.process_files()
109
- _logger.info(f"reduced dataset saved to: {output_filepath}")
95
+ output_filepath = io_handler.IOHandler().get_output_file(args_dict["output_file"])
96
+ generator = SimtelIOEventDataWriter(files, args_dict["max_files"])
97
+ tables = generator.process_files()
98
+ io_table_handler.write_tables(tables, output_filepath, overwrite_existing=True)
99
+ MetadataCollector.dump(args_dict=args_dict, output_file=output_filepath.with_suffix(".yml"))
110
100
 
111
101
  if args_dict["print_dataset_information"] > 0:
112
- reader = SimtelIOEventDataReader(output_filepath)
113
- reader.print_dataset_information(args_dict.get("print_dataset_information"))
102
+ for table in tables:
103
+ table.pprint(max_lines=args_dict["print_dataset_information"], max_width=-1)
114
104
 
115
105
 
116
106
  if __name__ == "__main__":
@@ -0,0 +1,104 @@
1
+ r"""
2
+ Merge tables from multiple input files into single tables.
3
+
4
+ Allows to merge tables from multiple input files into a single file.
5
+ The input files can be in HDF5 or FITS format. The merged tables will be saved in the
6
+ specified output file.
7
+
8
+ Note that merging large tables in FITS are not recommended, as it may lead to
9
+ performance issues.
10
+
11
+ Command line arguments
12
+ ----------------------
13
+ input str
14
+ Input file(s) (e.g., 'file1 file2').
15
+ input_list str
16
+ File with list of input files with tables.
17
+ table_names str
18
+ Names of tables to merge from each input file.
19
+ output_file str
20
+ Output file name.
21
+ output_path str
22
+ Path to the output file for the merged tables.
23
+
24
+ Example
25
+ -------
26
+
27
+ Merge tables from two files into a single file.
28
+
29
+ .. code-block:: console
30
+
31
+ simtools-merge-tables \\
32
+ --input file1 file2' \\
33
+ --table_names 'SHOWERS TRIGGERS FILE_INFO' \\
34
+ --output_file merged_tables.hdf5
35
+
36
+
37
+ """
38
+
39
+ import logging
40
+ from pathlib import Path
41
+
42
+ import simtools.utils.general as gen
43
+ from simtools.configuration import configurator
44
+ from simtools.io_operations import io_handler, io_table_handler
45
+
46
+
47
+ def _parse(label, description):
48
+ """
49
+ Parse command line arguments.
50
+
51
+ Returns
52
+ -------
53
+ dict
54
+ Parsed command-line arguments.
55
+ """
56
+ config = configurator.Configurator(label=label, description=description)
57
+
58
+ input_group = config.parser.add_mutually_exclusive_group(required=True)
59
+ input_group.add_argument(
60
+ "--input",
61
+ type=str,
62
+ nargs="+",
63
+ help="Input file(s) (e.g., 'file1 file2')",
64
+ )
65
+ input_group.add_argument(
66
+ "--input_list",
67
+ type=str,
68
+ help="File with list of input files with tables.",
69
+ )
70
+ config.parser.add_argument(
71
+ "--table_names",
72
+ type=str,
73
+ nargs="+",
74
+ help="Names of tables to merge from each input file.",
75
+ )
76
+
77
+ return config.initialize(db_config=False, output=True)
78
+
79
+
80
+ def main(): # noqa: D103
81
+ label = Path(__file__).stem
82
+
83
+ args_dict, _ = _parse(
84
+ label=label,
85
+ description=("Merge tables from multiple input files into single tables."),
86
+ )
87
+ logger = logging.getLogger()
88
+ logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
89
+ logger.info(f"Loading input files from: {args_dict['input']}")
90
+
91
+ output_path = io_handler.IOHandler().get_output_directory(label)
92
+ output_filepath = Path(output_path).joinpath(f"{args_dict['output_file']}")
93
+
94
+ input_files = args_dict.get("input") or gen.collect_data_from_file(args_dict["input_list"])
95
+
96
+ io_table_handler.merge_tables(
97
+ input_files,
98
+ input_table_names=args_dict["table_names"],
99
+ output_file=output_filepath,
100
+ )
101
+
102
+
103
+ if __name__ == "__main__":
104
+ main()