gammasimtools 0.19.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 (47) hide show
  1. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/METADATA +1 -3
  2. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/RECORD +43 -41
  3. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/entry_points.txt +2 -2
  4. simtools/_version.py +2 -2
  5. simtools/applications/calculate_incident_angles.py +182 -0
  6. simtools/applications/db_add_simulation_model_from_repository_to_db.py +17 -14
  7. simtools/applications/db_add_value_from_json_to_db.py +6 -9
  8. simtools/applications/db_generate_compound_indexes.py +7 -3
  9. simtools/applications/db_get_file_from_db.py +11 -23
  10. simtools/applications/derive_trigger_rates.py +91 -0
  11. simtools/applications/plot_simtel_events.py +73 -31
  12. simtools/applications/validate_file_using_schema.py +7 -4
  13. simtools/configuration/commandline_parser.py +17 -11
  14. simtools/data_model/validate_data.py +8 -3
  15. simtools/db/db_handler.py +83 -26
  16. simtools/db/db_model_upload.py +11 -16
  17. simtools/dependencies.py +10 -5
  18. simtools/layout/array_layout_utils.py +37 -5
  19. simtools/model/array_model.py +18 -1
  20. simtools/model/site_model.py +25 -0
  21. simtools/production_configuration/derive_corsika_limits.py +9 -34
  22. simtools/ray_tracing/incident_angles.py +706 -0
  23. simtools/schemas/model_parameter_and_data_schema.metaschema.yml +2 -2
  24. simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml +1 -1
  25. simtools/schemas/model_parameters/nsb_spectrum.schema.yml +22 -29
  26. simtools/schemas/model_parameters/stars.schema.yml +1 -1
  27. simtools/schemas/production_tables.schema.yml +5 -0
  28. simtools/simtel/simtel_config_writer.py +17 -19
  29. simtools/simtel/simtel_io_event_histograms.py +253 -516
  30. simtools/simtel/simtel_io_event_reader.py +51 -2
  31. simtools/simtel/simtel_io_event_writer.py +31 -11
  32. simtools/simtel/simtel_io_metadata.py +1 -1
  33. simtools/simtel/simtel_table_reader.py +3 -3
  34. simtools/telescope_trigger_rates.py +119 -0
  35. simtools/testing/log_inspector.py +13 -11
  36. simtools/utils/geometry.py +20 -0
  37. simtools/visualization/plot_incident_angles.py +431 -0
  38. simtools/visualization/plot_simtel_event_histograms.py +376 -0
  39. simtools/visualization/visualize.py +1 -3
  40. simtools/applications/calculate_trigger_rate.py +0 -187
  41. simtools/applications/generate_sim_telarray_histograms.py +0 -196
  42. simtools/simtel/simtel_io_histogram.py +0 -623
  43. simtools/simtel/simtel_io_histograms.py +0 -556
  44. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/WHEEL +0 -0
  45. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/licenses/LICENSE +0 -0
  46. {gammasimtools-0.19.0.dist-info → gammasimtools-0.20.0.dist-info}/top_level.txt +0 -0
  47. /simtools/visualization/{simtel_event_plots.py → plot_simtel_events.py} +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gammasimtools
3
- Version: 0.19.0
3
+ Version: 0.20.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
@@ -95,8 +95,6 @@ Please cite this software if it is used for a publication, see the [Zenodo recor
95
95
  [![CI-integrationtest](https://github.com/gammasim/simtools/actions/workflows/CI-integrationtests.yml/badge.svg)](https://github.com/gammasim/simtools/actions/workflows/CI-integrationtests.yml)
96
96
  [![CI-docs](https://github.com/gammasim/simtools/actions/workflows/CI-docs.yml/badge.svg)](https://github.com/gammasim/simtools/actions/workflows/CI-docs.yml)
97
97
 
98
- -[![Quality](https://app.codacy.com/project/badge/Grade/a3f19df7454844059341edd0769e02a7)](https://app.codacy.com/gh/gammasim/simtools/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
99
- [![Coverage](https://codecov.io/gh/gammasim/simtools/graph/badge.svg?token=AYAIRPARCH)](https://codecov.io/gh/gammasim/simtools)
100
98
  [![Coverage](https://sonar-ctao.zeuthen.desy.de/api/project_badges/measure?project=gammasim_simtools_0d23837b-8b2d-4e54-9a98-2f1bde681f14&metric=coverage&token=sqb_5d1fde56fa060247eee7d5e53fa5ac0a4aabe483)](https://sonar-ctao.zeuthen.desy.de/dashboard?id=gammasim_simtools_0d23837b-8b2d-4e54-9a98-2f1bde681f14)
101
99
  [![Quality Gate Status](https://sonar-ctao.zeuthen.desy.de/api/project_badges/measure?project=gammasim_simtools_0d23837b-8b2d-4e54-9a98-2f1bde681f14&metric=alert_status&token=sqb_5d1fde56fa060247eee7d5e53fa5ac0a4aabe483)](https://sonar-ctao.zeuthen.desy.de/dashboard?id=gammasim_simtools_0d23837b-8b2d-4e54-9a98-2f1bde681f14)
102
100
 
@@ -1,26 +1,28 @@
1
- gammasimtools-0.19.0.dist-info/licenses/LICENSE,sha256=a2q6KVo33OrRL_7ZSk7BYOT8KkUNV3WAMZW8CHEDkDU,1548
1
+ gammasimtools-0.20.0.dist-info/licenses/LICENSE,sha256=a2q6KVo33OrRL_7ZSk7BYOT8KkUNV3WAMZW8CHEDkDU,1548
2
2
  simtools/__init__.py,sha256=yvx0i5ygbllmMtF2Tzy7pohvhQNH_dBdj0Bt8bKFYpc,231
3
- simtools/_version.py,sha256=4qZmq76p4A8zgTbsz2W10S-HRpsdBOEWdWpNjxJdKRM,706
3
+ simtools/_version.py,sha256=D0Phtt01o1VQl6Hc5KWgvKucsJ2Ve2ykSmH5eQWQ0zU,706
4
4
  simtools/constants.py,sha256=3N5bc8MlMWRzcg8EeSJweoioEo_uhStMxAzdb85Apvw,966
5
- simtools/dependencies.py,sha256=zjT-_MR1s678QjCQBHlkoEi75TsMBHjd01lWG3ZBZ0U,6268
5
+ simtools/dependencies.py,sha256=bDMw1Nyjya0-TnWp_K6LyV6JbO_aJDARa6KSGXhLcqc,6572
6
6
  simtools/simulator.py,sha256=O586ehWLBt4XMcYMpYYRDjzO0zoGfzDQy_32vIBPcTU,28108
7
+ simtools/telescope_trigger_rates.py,sha256=_2NUG8UnhfpMGhaEDgHUOOdnweCUcRTrTOkGGYInHqo,3984
7
8
  simtools/version.py,sha256=Fri_aFaUOmV8CIygd3DknAmJaFZ05OAeLd1AgZOcgdQ,688
8
- simtools/applications/calculate_trigger_rate.py,sha256=q8cwbbggizy-thDK2mGFyrOXazJhozu5RnUdF9vk1FM,6056
9
+ simtools/applications/calculate_incident_angles.py,sha256=cWcNf3n6S5TmG7wkC3V52HEU7mxLnUw3UD_3Wrcbwgw,5968
9
10
  simtools/applications/convert_all_model_parameters_from_simtel.py,sha256=OSA01q4Qpjv1pyR8f53gBz6Jo-k-bM0L3HKw-GDvJ54,12177
10
11
  simtools/applications/convert_geo_coordinates_of_array_elements.py,sha256=-P0tbF5T3P23_tYTp18HAmlYH7a7Gx-TTzxESf5Qfvk,5967
11
12
  simtools/applications/convert_model_parameter_from_simtel.py,sha256=sQL4m3VM2k1MGn3gfC7vWZx6p9VcpauH1GkOk9PMkn0,3856
12
13
  simtools/applications/db_add_file_to_db.py,sha256=Jvesc9NL4OSGUMGKsZs0yyX2HyQfCwGJemLvMf8JQGY,5555
13
- simtools/applications/db_add_simulation_model_from_repository_to_db.py,sha256=9o5gei7a2ObHik-aASGSMmIWHripDLzEj2ZRfs0_-To,3848
14
- simtools/applications/db_add_value_from_json_to_db.py,sha256=SIVzZAdlQh8yfxl9TJ0lLS5i4MyW5ctY-ZCP3Ufgi-M,3741
15
- simtools/applications/db_generate_compound_indexes.py,sha256=A-H-m6EUgeCXeUDyGUlCT515J-m2cPbgutvgz8B8utk,1800
14
+ simtools/applications/db_add_simulation_model_from_repository_to_db.py,sha256=02sZBCczjbBZoWb4AjKTcfq3aDn9oPjSF8IduJsqJ6o,4311
15
+ simtools/applications/db_add_value_from_json_to_db.py,sha256=IOdbgrIUa3xdrXGcblFXDoIIGnXpWkAyu-4K7n17VrQ,3585
16
+ simtools/applications/db_generate_compound_indexes.py,sha256=nf45luTOTBNQyObzJ01xMrTdRVnJ1p90VbGHYpnU6GU,1964
16
17
  simtools/applications/db_get_array_layouts_from_db.py,sha256=2St5ZfcohXSHnDYiP326D4fqlbfsgREsC4lGJ5cDUPg,5122
17
- simtools/applications/db_get_file_from_db.py,sha256=xa1TVVgth-R8Toh1W2ApFkASQTYl7nmO0w-NPfbEkQE,2738
18
+ simtools/applications/db_get_file_from_db.py,sha256=3aIRyZaHIDYwLGCMFdQFtsp84D5r2MlIC20QPOZ1rck,2394
18
19
  simtools/applications/db_get_parameter_from_db.py,sha256=L0VehfQir3lrLDPa_ezEuU7uo8gmBdfMDqOax39Nqn0,5131
19
20
  simtools/applications/db_inspect_databases.py,sha256=Po78qE7qmf97u93fSJpdZTWpDEEBFzm1CHxFi0ZL-uE,1871
20
21
  simtools/applications/derive_ctao_array_layouts.py,sha256=n6bCW2hRXDg1GxynwouRJKQlBYeG2GCehx61tNvRLMA,4081
21
22
  simtools/applications/derive_mirror_rnda.py,sha256=yYCfdN-KNr_R_mmiVrn3L3QJRinvO5z3o0HIRLzPO3w,8955
22
23
  simtools/applications/derive_photon_electron_spectrum.py,sha256=8Dpz-XTlCmOvoKUFtq78B1of62k8ygyk5_r-ZxZYauo,3968
23
24
  simtools/applications/derive_psf_parameters.py,sha256=TrP6AqiKc6Te3N1lfl63eSIsL_tcEKZZSBl1aN9NYTo,6900
25
+ simtools/applications/derive_trigger_rates.py,sha256=3JqdnjNJJNyWF6HyzUSQfldrbvXGRoNUpCqTET3qtEw,2460
24
26
  simtools/applications/docs_produce_array_element_report.py,sha256=N_vnKRV3r32PF_99QeD1-6BfEBOaVzpedC5pvHsDwDU,2488
25
27
  simtools/applications/docs_produce_calibration_reports.py,sha256=lMddZEZa_BXYifRCXS_XMceP9lLjeDDVGtlJZBJhn4o,1382
26
28
  simtools/applications/docs_produce_model_parameter_reports.py,sha256=tSZJJ7CDha-qU3mfqRXLjiOWgdvd1lPjZYJSM-TEAl0,1973
@@ -29,14 +31,13 @@ simtools/applications/generate_array_config.py,sha256=bzuQsEp2wUBLGxVkF_1bpw0iFc
29
31
  simtools/applications/generate_corsika_histograms.py,sha256=XU1kTlWADXU4-rqTE2PLqtpQ0b7WbTMid13Vqn1olMk,18243
30
32
  simtools/applications/generate_default_metadata.py,sha256=t-4qWX1EyCoUaUs4Pg_ec_MiT9bEFH5jN7KHWzZ8fP8,2370
31
33
  simtools/applications/generate_regular_arrays.py,sha256=JZI4KfhP67K6Qvg2yAsQZgKNnRiQAfdcpDHfgP16Wkk,3846
32
- simtools/applications/generate_sim_telarray_histograms.py,sha256=OLP1NE1SLhescr4OmmVdSi2fQ1Xnm6LdzIzCWXGFwV0,6671
33
34
  simtools/applications/generate_simtel_event_data.py,sha256=qd25UVoR0qR2B1YNf9UYceYkJR0K9dAWQRqWrdkPmUs,9072
34
35
  simtools/applications/maintain_simulation_model_add_production_table.py,sha256=2Kp5K3ukMTebReQzO4HTZa59kkJXZ_eeOS7Dy5zqZA0,2048
35
36
  simtools/applications/maintain_simulation_model_compare_productions.py,sha256=ld3t1AOBYYFDP21XY4LaANsz20XsgT5qe5oAibCLnRo,3172
36
37
  simtools/applications/maintain_simulation_model_verify_production_tables.py,sha256=fFa6QdA7uzRmxCvtdEDxDfGIs88UR7z-NRENHpZKxsk,1758
37
38
  simtools/applications/merge_tables.py,sha256=HtV8imZx4fOPnZnM6Rqm4Eestx3w-ZcmQkEVXNhM0Y4,2730
38
39
  simtools/applications/plot_array_layout.py,sha256=WvgaSdYrSfnNyi7Q1-xGyv7AsT9AiZUJRtHnIRVh5J4,9887
39
- simtools/applications/plot_simtel_events.py,sha256=cP3n5rRk_pU5l7rPF1JzxPlQ371TbLcJC_ZTf81frP0,13252
40
+ simtools/applications/plot_simtel_events.py,sha256=JV6bHprGilgNgjYnM2XzuYRN7VhtLE5HnfTOlhOeCfE,14053
40
41
  simtools/applications/plot_tabular_data.py,sha256=qHDU75GgmXTFoxIbRlewLpbnsYMjNgMdVnc8bUqAszo,3135
41
42
  simtools/applications/plot_tabular_data_for_model_parameter.py,sha256=4N1QmS60OR02Vm9UJRqMr7IURIHi3C5dU1Fx0hzasi4,3320
42
43
  simtools/applications/print_version.py,sha256=QfyraIi_32ygaKcXFiiyI2OYPy745quEanE8ePDHGGU,2336
@@ -56,12 +57,12 @@ simtools/applications/submit_model_parameter_from_external.py,sha256=moaiYtqhMmb
56
57
  simtools/applications/validate_camera_efficiency.py,sha256=xFnGBZ7uF4x4w3lnep7MZiBVhdumy_B1vYQngMKyjT0,4920
57
58
  simtools/applications/validate_camera_fov.py,sha256=gx5EX58ZlHdduO8VNaUqUwRmubg6LoeYqpakVOSzXos,4573
58
59
  simtools/applications/validate_cumulative_psf.py,sha256=3ddMQVODelAgG6uUueODbPqmRc2okhdMnWw7A_UJkPw,6404
59
- simtools/applications/validate_file_using_schema.py,sha256=3naNJFCun36S82xh8UK6YuTb5tks7WGb-apyWu1nYyM,6951
60
+ simtools/applications/validate_file_using_schema.py,sha256=zFWHZEeERtlryb6D3bKnxCVVr8jvi9vN__m8RK97YpM,7093
60
61
  simtools/applications/validate_optics.py,sha256=OCeqjcMIAwRcrc-4rm5jAcPZSHrSXJT6q4PAJYZO540,6377
61
62
  simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py,sha256=skCdGFyZyWfleg2GvlB3FVM7w8TK0rgrdSe_xsAV_qw,5399
62
63
  simtools/camera/camera_efficiency.py,sha256=9KBVEuK32X2YfBMJCP6g-A1DplchPWKGKtw9-JIKB4U,19025
63
64
  simtools/camera/single_photon_electron_spectrum.py,sha256=eQTpmy8NH8v5kkrlFjYmlIQhqcDwXHy44q-59PtXZEI,11572
64
- simtools/configuration/commandline_parser.py,sha256=7Xo8qjSsaZHhxw0lk-mQ6TpVZ3vFuOl09-DiR86JdYA,27177
65
+ simtools/configuration/commandline_parser.py,sha256=qVcBDG4jxZaK7i4bKb0eejhoGkLhR7KN1MbGzr8q6WQ,27344
65
66
  simtools/configuration/configurator.py,sha256=fVze9No1nebT2xTg7hPHU1Y9tkI7kwuMM9ew6i_9SZg,15008
66
67
  simtools/corsika/corsika_config.py,sha256=hw2myjSEkYgw5cbjm00tLNdlKQx52YDuHnQjPYsR2E4,29067
67
68
  simtools/corsika/corsika_histograms.py,sha256=lA0BiscQwhPSQSLYw-aICTtjKVCbyMjfXTCcfrXemGc,67691
@@ -73,9 +74,9 @@ simtools/data_model/metadata_collector.py,sha256=s1aa8iaPyc8rk2KmRBdIjbMNTcLxCT1
73
74
  simtools/data_model/metadata_model.py,sha256=wH52gC6MdwFw9A6UswZLsRlss7vbXDyxybBaI_UMt18,4642
74
75
  simtools/data_model/model_data_writer.py,sha256=w2lbFLBPS6ViPF0xDiXXUlrfqZYYR7nJwmmB6PLhxfI,14648
75
76
  simtools/data_model/schema.py,sha256=wrPKmY073wGfKHp7NAO5FLjjS2Z9N0oGMpRUwK-mRWA,8680
76
- simtools/data_model/validate_data.py,sha256=kwIhjirHA2u7_P8zDwTfwRMaQLp5nUIvgQrbu_A4Bpo,30877
77
- simtools/db/db_handler.py,sha256=Ru8vAZXFuZ1ChO1e-RPg8QIki22FFJK4gRiAS4boq3M,34221
78
- simtools/db/db_model_upload.py,sha256=7xXoA43ICs4Oo1YN2_SrY7Dbkcfo6cXdMed-cEzBi4Q,4859
77
+ simtools/data_model/validate_data.py,sha256=laKI4LCIkKhYkrQgPUHFoIwVCx-moBtuosgVMbOJU98,31082
78
+ simtools/db/db_handler.py,sha256=41PEd3pNp0bfEpJsAvHOxzZswY8reDTlRfryaUBcp-s,35912
79
+ simtools/db/db_model_upload.py,sha256=SRWq6dzY4AXwL9mfLXaQmcDnIHoCR0Xd3oZ_2na9DDY,4731
79
80
  simtools/io/ascii_handler.py,sha256=S2fP2x6vE4nEF5g0NRARIWKs8vKU3c9SW8XtcdrwhQU,7826
80
81
  simtools/io/hdf5_handler.py,sha256=CqP76MCfxvWH8AOnkIbQM5wBHIvSDEbdZ03wn7t6XgI,4232
81
82
  simtools/io/io_handler.py,sha256=k-A91MYdOD64XRdiyEJtgu7fFtJYyfe0xjmx63u2daM,5081
@@ -84,10 +85,10 @@ simtools/io/table_handler.py,sha256=YJqbam9sBjKAhHDyzFd0X0duWT1jnYPyk0La9Gp2jeo,
84
85
  simtools/job_execution/htcondor_script_generator.py,sha256=7Wm1iR8PK0gbutbZATyBmhqQu-MZQI0HaJa7dJJVMHA,4248
85
86
  simtools/job_execution/job_manager.py,sha256=fuEJwzCp3U-1oRp0suq3VQY-afKVKMOqObpvxHETXlM,3424
86
87
  simtools/layout/array_layout.py,sha256=_wOQ0fefbaleLPQcIyhH8rlYqzBokVi0VeTyi98XOLo,25186
87
- simtools/layout/array_layout_utils.py,sha256=1RNl_ZrkQjpqCaDUyhKb-qIaQYLu3uFIo-kcyoXA92A,11677
88
+ simtools/layout/array_layout_utils.py,sha256=y1JAFR19IwOqrgW0k-tpi8BlpbI4Wcz9uO93sCs7Jbw,12737
88
89
  simtools/layout/geo_coordinates.py,sha256=9kKnXFi9vrfYKG_9elzFuzzssGFEUzxMubaclITkW_g,5944
89
90
  simtools/layout/telescope_position.py,sha256=m34taJ7LML_KBW75i3EGMK2vEHK9tqFltxa9Ojrspi0,20162
90
- simtools/model/array_model.py,sha256=ty88I-__QP3O3VhwXznvJvCkjdP536eN3LrMIS2JhdQ,16552
91
+ simtools/model/array_model.py,sha256=Sg9gw5HgS4bIyN5iwvaT0MaSGD7Vr1G3Hm3NTZGOsI4,17043
91
92
  simtools/model/calibration_model.py,sha256=PqZnca86rNiKu3pExJc3fdiDwbHcB7Q9yl2pyA1orGU,1442
92
93
  simtools/model/camera.py,sha256=Gj9yWfAfM4GrrX5q6ZGSQy80WsOUqZaTnP7DoCYfOJ0,21403
93
94
  simtools/model/flasher_model.py,sha256=SXSWJu9QWjMdrEHefhIXz_NuPsODTnb5HfY4Nhc5_oA,3948
@@ -95,15 +96,16 @@ simtools/model/mirrors.py,sha256=uGCAT68WpnESv9IAgg8Xae9Z2-XgxMBL_Phnv6Ro0XQ,915
95
96
  simtools/model/model_parameter.py,sha256=ZquhZCTonqbuC5wRJejUzvuAFWd7EHRua8hWSVxRN0g,19241
96
97
  simtools/model/model_repository.py,sha256=zli7zeZU-zdKX3nuAcK3D7RsBXlu607fvErk0NVPoQU,11124
97
98
  simtools/model/model_utils.py,sha256=OFMKgrHLzStAE7k5JRuj6iAI4Z1_ND13lXWzUTGfZ_M,2485
98
- simtools/model/site_model.py,sha256=eBkF-bMdS3AtARbDbDC8LqzNWqSDpROFhygWdH6uv4w,5263
99
+ simtools/model/site_model.py,sha256=0oHrVWq9YPtuQKO6gg9LdPirEfqqaFtBT0dAxUlLR_8,6181
99
100
  simtools/model/telescope_model.py,sha256=bsHctXxwo1k5Xno9wVNAVhFyDPRFk4CNoCNpHYkB-jE,13504
100
101
  simtools/production_configuration/calculate_statistical_uncertainties_grid_point.py,sha256=r3g2dNMCZdl6K3fvg0mcPV7C2AIc70N2bSdyYb5hY4I,15550
101
- simtools/production_configuration/derive_corsika_limits.py,sha256=CgsCGQB7W0cJJrvxUresbUMfy0D_jJoukYI3uMjyRJE,11242
102
+ simtools/production_configuration/derive_corsika_limits.py,sha256=0psxcfBPut5iDbhazF50dK_GpDQZz51h4Ap2MUW0khQ,10562
102
103
  simtools/production_configuration/derive_production_statistics.py,sha256=q7uW044MVcbGzwzVYpXcSvlRD8qcif8FyYP7mqtuNWs,5761
103
104
  simtools/production_configuration/derive_production_statistics_handler.py,sha256=WPo29fUMjHFgQKu4AL01XrzIx4d846ddezdtLpH4USU,6187
104
105
  simtools/production_configuration/generate_production_grid.py,sha256=DlR2hqyG0jU1yU21QU38ucAdmHZWPa7snFW26vmGEuI,13323
105
106
  simtools/production_configuration/interpolation_handler.py,sha256=97zk7XR8yNMs4dEqcrfjpma6SgUDlqaXcsfAIw1rhuY,14131
106
107
  simtools/production_configuration/merge_corsika_limits.py,sha256=t9JDvrpkP33ISCRCPVLE8GunjHDF_RYlRPqXI469l0w,20838
108
+ simtools/ray_tracing/incident_angles.py,sha256=uSMa1bGeqt5bhjUY3AT9WGJfV5YoudUC6ZlnCwVGLo8,25913
107
109
  simtools/ray_tracing/mirror_panel_psf.py,sha256=xE_io65fGjv5GnH035xC84iSqC3Ltz1sxnybSqD6T20,11238
108
110
  simtools/ray_tracing/psf_analysis.py,sha256=kw431lbLNd8nm7FoOkCZwSw1iXvNIit-WKX9n-GMLJw,18164
109
111
  simtools/ray_tracing/psf_parameter_optimisation.py,sha256=no0dYe-dlk0XceSlfd9jpslB1kS8Ulo6ZsWGlHm8oek,26214
@@ -120,10 +122,10 @@ simtools/runners/simtools_runner.py,sha256=jFlDZ_t6KKprzVZrPRQtmd0kRMIwSiVNMx3B8
120
122
  simtools/schemas/application_workflow.metaschema.yml,sha256=4AkbPKW4pbeAn5ewhe0I0jWZPw2USugkuXAF4QpyREk,5650
121
123
  simtools/schemas/metadata.metaschema.yml,sha256=bgsIFwBlaC9HGNN8hlMSy2vMwwnG2DEfprXZuxfU2Kk,33556
122
124
  simtools/schemas/model_parameter.metaschema.yml,sha256=tXKB0H_bn-UiHALtN0OppA-xKp5OVUICjXG8tYI7VEw,6595
123
- simtools/schemas/model_parameter_and_data_schema.metaschema.yml,sha256=o_Q83CGGg0pbVax5qtF7lw6RjMQ8PYJrGji1KKsFaoM,10514
125
+ simtools/schemas/model_parameter_and_data_schema.metaschema.yml,sha256=ugCjy7K-0HQ8arxqpuCJlz4Sn9vaPdKRLfmOvZiGFwE,10528
124
126
  simtools/schemas/plot_configuration.metaschema.yml,sha256=ALz6d3btyr0ao50nJ0tShMlMgR4SKP6MRC_qxiPjwmc,4408
125
127
  simtools/schemas/production_configuration_metrics.schema.yml,sha256=9IOmDjtAyH-8Ti5hoxKKjZ0kl7E7iKBBDvTL8SSv_To,1935
126
- simtools/schemas/production_tables.schema.yml,sha256=6fKfuOZT2XgG8dCOTPieV7xre2IDjRN0KcEKIYppvxI,1315
128
+ simtools/schemas/production_tables.schema.yml,sha256=lz266H7nogsIgGBpHYGrZDx4KWm26lbdoreH9b32Sh0,1478
127
129
  simtools/schemas/input/MST_mirror_2f_measurements.schema.yml,sha256=2kFAIxgR36XIrTNvfvPB16OdnpkNdkXeCGnI01Tbc3Y,1124
128
130
  simtools/schemas/input/single_pe_spectrum.schema.yml,sha256=hLD8JgChI1eV2yl7E_e_uvQebsRuG18ag_4aEiLjToM,1244
129
131
  simtools/schemas/model_parameters/adjust_gain.schema.yml,sha256=TwLjYM-xBY41qbVvMe-s_qcacvcI_YTvLJ5lSNdEh3k,892
@@ -285,11 +287,11 @@ simtools/schemas/model_parameters/nsb_autoscale_airmass.schema.yml,sha256=QJTEXS
285
287
  simtools/schemas/model_parameters/nsb_gain_drop_scale.schema.yml,sha256=cvNCJicoVrOehNARlMA5_3f8VUf-suniPlVbTwAvAvI,1110
286
288
  simtools/schemas/model_parameters/nsb_offaxis.schema.yml,sha256=nEtlMnHFrnoph4zuPJAWfa-R59_egnOHzvR5Z7y_gJE,2177
287
289
  simtools/schemas/model_parameters/nsb_pixel_rate.schema.yml,sha256=aYo8qQekz5fs8kIkSZrd-bQaikS8QVkm-OpPcufj-yM,1396
288
- simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml,sha256=S3ADT2SjsA9Waghj9kb3umhjePiVijnf0maf3pOCYDg,1374
290
+ simtools/schemas/model_parameters/nsb_reference_spectrum.schema.yml,sha256=VvEcNvbPL_bUWuBPO7meB3-jGAodhpCNkmP3_3ZVHQ4,1364
289
291
  simtools/schemas/model_parameters/nsb_reference_value.schema.yml,sha256=-Pirm9uOaCxXz5YPnXMnp_eV5b7lTnbFZ3a3XoBKkWw,907
290
292
  simtools/schemas/model_parameters/nsb_scaling_factor.schema.yml,sha256=2QUOG5HAJgEH20S6A57sLYFAR7tGyKa6fKziVTW_n-k,828
291
293
  simtools/schemas/model_parameters/nsb_sky_map.schema.yml,sha256=Ra8yw8htoYPVRFAH0q8Ds2BZXrH9VIoxLBDDVyA8qIk,1253
292
- simtools/schemas/model_parameters/nsb_spectrum.schema.yml,sha256=9tzosBfgHHKQOX_7Wd4fKMC69qHIptTPu07p5MA3vw0,1333
294
+ simtools/schemas/model_parameters/nsb_spectrum.schema.yml,sha256=Ez2g17smdNfdIsFG2XYL9EYJ7TDXqSUroII0uEa9nK0,1081
293
295
  simtools/schemas/model_parameters/num_gains.schema.yml,sha256=smAZS3z4qTJO6xqysPcyuZ2MgI99QhsZxKON2xmqsY4,771
294
296
  simtools/schemas/model_parameters/only_triggered_telescopes.schema.yml,sha256=UBWz-l0C-GGWpqvywWmdB8lI4uKjhTwNBZtxq3rRCxY,855
295
297
  simtools/schemas/model_parameters/optics_properties.schema.yml,sha256=dTFrayKCqFuhuxa3wkbTkvt36Lo2LCkHvehwynsp7f8,745
@@ -337,7 +339,7 @@ simtools/schemas/model_parameters/secondary_mirror_reflectivity.schema.yml,sha25
337
339
  simtools/schemas/model_parameters/secondary_mirror_segmentation.schema.yml,sha256=NMx_aPzgiBWRkgc24y_Zm_7-dI8MoAogAQ2Rc_weL-g,1179
338
340
  simtools/schemas/model_parameters/secondary_mirror_shadow_diameter.schema.yml,sha256=cA-OxA9yIGCmQyq3YQb-MxfMO4t3z0qK5-LnuhIqeqk,1261
339
341
  simtools/schemas/model_parameters/secondary_mirror_shadow_offset.schema.yml,sha256=odq7Zmhred9H39d4PHsOfYtuoXfHw0vpARnPwFUsrxo,1261
340
- simtools/schemas/model_parameters/stars.schema.yml,sha256=ec9x5FzybMTgXoAMWpcG2ydsoRHZgTbiNQ2tbOSqYrY,1105
342
+ simtools/schemas/model_parameters/stars.schema.yml,sha256=oOGShhKVxB4DiXtrPWLF4Hz0ba7oT6Gcga11Bv8QQQI,1107
341
343
  simtools/schemas/model_parameters/store_photoelectrons.schema.yml,sha256=gAWERR58elcJSYUH7sjj0jjKFswQ3bMefWKV2QgBpmM,1379
342
344
  simtools/schemas/model_parameters/tailcut_scale.schema.yml,sha256=ApeGU59_byQT7TpHySqWVVkmNTcqBgV4jLRAdLHZ5yY,1190
343
345
  simtools/schemas/model_parameters/telescope_axis_height.schema.yml,sha256=VpLF4Lj_hLWS1JRpYvY4DMawTJHsUGCzCIQqfocJTwA,751
@@ -356,15 +358,13 @@ simtools/schemas/model_parameters/trigger_current_limit.schema.yml,sha256=rCeU2q
356
358
  simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml,sha256=7PMB5RY4S8zZZFjc8a33FZZmpfVKbP7qATsKHAvrf2w,1569
357
359
  simtools/schemas/model_parameters/trigger_pixels.schema.yml,sha256=Yvpp3FP7IVS2OMMdwayKKS3W1lNGKg4EZH4WHHY-Qe4,1105
358
360
  simtools/simtel/simtel_config_reader.py,sha256=_rDPaD2Fleqx8XlPVy97KnWYvZQBZdrDjZr9QNKM5PU,15039
359
- simtools/simtel/simtel_config_writer.py,sha256=uWQQ59WwYN-HAcBSin_7ejf_Oh9hQOL0wLsBUlLqcrQ,24586
360
- simtools/simtel/simtel_io_event_histograms.py,sha256=6MDOR716J9K06lh2FFI4W64tEHfxHPJMv9o6hYY55Mw,29280
361
- simtools/simtel/simtel_io_event_reader.py,sha256=jf3v6mu_33Lwup5s5y8lZ-d8ZP1bMtafTNisQocmLrc,12752
362
- simtools/simtel/simtel_io_event_writer.py,sha256=W_skWhB3mKgKsWQlDwYnx1QTT7Keow-rRWfWI0Ez5yo,12196
361
+ simtools/simtel/simtel_config_writer.py,sha256=4r5KxodabcA7Si7UllIaH8Gpt2s3MCuCityeErVBgEM,24367
362
+ simtools/simtel/simtel_io_event_histograms.py,sha256=M0EnmiS9AbzwLyZapkP2JJc3Dze40NoPTHKtWHxe1kg,17688
363
+ simtools/simtel/simtel_io_event_reader.py,sha256=YPP4Cs4NncTIXxbu40veksnJ_3_cZ00-56kGoEuR8so,14595
364
+ simtools/simtel/simtel_io_event_writer.py,sha256=8iK4qvCEjA3X8HB6QdcMWD1w0cC1UEdAm_XRuOM-sGE,12739
363
365
  simtools/simtel/simtel_io_file_info.py,sha256=T2xtdz-0pDZFf7cJw7brBxA9OHbDuBossTzY60RHFfw,1775
364
- simtools/simtel/simtel_io_histogram.py,sha256=P1VJwCt74jQx-avxJkMsSjo9-ID4LpYvt1O6pQigPJI,23681
365
- simtools/simtel/simtel_io_histograms.py,sha256=yzcBnG1I4xa9jg1LONWQ5j0W43B4xOcEsaW9yc2Y36s,20684
366
- simtools/simtel/simtel_io_metadata.py,sha256=pyuCNaTPpeNKssWsdk1yTdDfXmPU3qOTWmF4f6tr_HE,6075
367
- simtools/simtel/simtel_table_reader.py,sha256=jNaYyILK2gYMZ5g9ZWrcuUH1ppjSBsQcXcZNjNywzIY,15115
366
+ simtools/simtel/simtel_io_metadata.py,sha256=PoWIfA4QLDDjcMomteSxzgjnfvlEz7JGZU-UW2xR2TI,6075
367
+ simtools/simtel/simtel_table_reader.py,sha256=m4h74MuvnA15q1-4-esypvBKYPyeZS-1CqdvyJ4HVXc,15101
368
368
  simtools/simtel/simulator_array.py,sha256=nebA2DcVXUd7yWVHmWlWs4xaC_Jgc9yWKYxLh3f6YQA,10091
369
369
  simtools/simtel/simulator_camera_efficiency.py,sha256=j3r6b5tG0-dUdkrKOBb-_R4V9Dv-bvnhaJyGHScwF30,11771
370
370
  simtools/simtel/simulator_light_emission.py,sha256=gC52PLYBzqFfxQhOqup0ArJama_XRlgAUAr4NEdahMI,30242
@@ -372,22 +372,24 @@ simtools/simtel/simulator_ray_tracing.py,sha256=9B-qBC6XsRu9QKPq4b6ZBmpmtiJ4A6qb
372
372
  simtools/testing/assertions.py,sha256=cJm6FtIJTFnTr7wqQ17yqCsrm7YVaxD3vfXoTc0GCm4,4765
373
373
  simtools/testing/configuration.py,sha256=VaL7mpxi9Thu6img4lo02KD-LB0OlMAPw1IemnLPtWw,7856
374
374
  simtools/testing/helpers.py,sha256=LTVlkt36gQ0AtIK2mN6toI3vxwUPCjV5VMLA0nkS07U,1829
375
- simtools/testing/log_inspector.py,sha256=rzkYEK1M6HoEYNShg84rnLtfrsYqyYo-IuDZ_IFsBJs,1429
375
+ simtools/testing/log_inspector.py,sha256=v5mtOz9tgBkCJuYYyDm8zV3x7yG7ctTrBNZCgox9l5w,1437
376
376
  simtools/testing/sim_telarray_metadata.py,sha256=9aVEdCZSB_56Cq-XUVMX8BLtzrwbRXf3SMqeeM9GvAk,7941
377
377
  simtools/testing/validate_output.py,sha256=9MGJE_U3VZicnDimR7lbr4PpYZgLdLnPisJttMBc8GM,13399
378
378
  simtools/utils/general.py,sha256=cOJmyljEzvGkjxj0azh-1tRtZdqvEjDa2DknDsqcJ7g,24089
379
- simtools/utils/geometry.py,sha256=hxosDQcjNNQ62ZVrRrLii_qUafuZ6OopnEZGB7SG1rU,7630
379
+ simtools/utils/geometry.py,sha256=CziDxqVlokcbUPVRIhnoOX8CIB7XbEq_yl_TlYqEmqM,8297
380
380
  simtools/utils/names.py,sha256=42SfLFpuasa9n8D0QjcPgATqmU4TTTXXxUsudLCipA4,22150
381
381
  simtools/utils/value_conversion.py,sha256=Cl-BHOZWUhWr-W_hT4CR1iLfiphd8MSNkzYEjDe6iH8,6311
382
382
  simtools/visualization/legend_handlers.py,sha256=QhUeZwuftA1VxfcMQ40KrwnPaD2FU95fNgZfX68YTJE,9792
383
383
  simtools/visualization/plot_array_layout.py,sha256=1SMiZwNuYCQu7Uf5p8Extie1pQBSKtxyYRsG_J3mG0I,7305
384
384
  simtools/visualization/plot_camera.py,sha256=dLXKHYfY_elqaKhj91HlntASoVixTrpc_Kf0jPU8RmU,11167
385
+ simtools/visualization/plot_incident_angles.py,sha256=aAlLNHoTOoVF9uKSvwbZrPjsSPNkJVU-sKjiD-5ArXY,13460
385
386
  simtools/visualization/plot_pixels.py,sha256=CrgO_sJNYfmiRwUSKL9dpQvzkGw73Jd-4sZW_1KUfTI,20570
387
+ simtools/visualization/plot_simtel_event_histograms.py,sha256=o9fPkKE1568MRumPVRyBs8ah5eyTN2mCLXseEwAy4RA,12751
388
+ simtools/visualization/plot_simtel_events.py,sha256=x7XFOWY2bRMUZsC0884FugyW-J76kxjxG1s5cH7b28Q,25795
386
389
  simtools/visualization/plot_tables.py,sha256=YfGrT1rj7wijKUgrFROrQ057SE0MbvSzxbkCdMLMEjw,8668
387
- simtools/visualization/simtel_event_plots.py,sha256=x7XFOWY2bRMUZsC0884FugyW-J76kxjxG1s5cH7b28Q,25795
388
- simtools/visualization/visualize.py,sha256=iqFaLHpYUn88OhjIxdmFPWFMyg09gZzejSX-rDR6BD4,19025
389
- gammasimtools-0.19.0.dist-info/METADATA,sha256=pge6WUbEENVmwH2MoMSFcXWSxvIcFCHg1ca9pbi6Qv8,6324
390
- gammasimtools-0.19.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
391
- gammasimtools-0.19.0.dist-info/entry_points.txt,sha256=0MKJDeSFyp_9k1nH8ROudJ3dQuVtsKUkHpxn60jHj3A,4986
392
- gammasimtools-0.19.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
393
- gammasimtools-0.19.0.dist-info/RECORD,,
390
+ simtools/visualization/visualize.py,sha256=5NkEf-ZHkyA4eUR0YK64s3Sugzj2sizSmRAKJQBpSso,18974
391
+ gammasimtools-0.20.0.dist-info/METADATA,sha256=c_teBXKuL1RVa57tbodSgW3LkLCDToteTbxm-NvkidY,5977
392
+ gammasimtools-0.20.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
393
+ gammasimtools-0.20.0.dist-info/entry_points.txt,sha256=RSap2jP3H4R5s98pU3nsF0Wv1op1iSrsPr9Zie3O1ow,4968
394
+ gammasimtools-0.20.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
395
+ gammasimtools-0.20.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  [console_scripts]
2
- simtools-calculate-trigger-rate = simtools.applications.calculate_trigger_rate:main
2
+ simtools-calculate-incident-angles = simtools.applications.calculate_incident_angles:main
3
3
  simtools-convert-all-model-parameters-from-simtel = simtools.applications.convert_all_model_parameters_from_simtel:main
4
4
  simtools-convert-geo-coordinates-of-array-elements = simtools.applications.convert_geo_coordinates_of_array_elements:main
5
5
  simtools-convert-model-parameter-from-simtel = simtools.applications.convert_model_parameter_from_simtel:main
@@ -15,6 +15,7 @@ simtools-derive-ctao-array-layouts = simtools.applications.derive_ctao_array_lay
15
15
  simtools-derive-mirror-rnda = simtools.applications.derive_mirror_rnda:main
16
16
  simtools-derive-photon-electron-spectrum = simtools.applications.derive_photon_electron_spectrum:main
17
17
  simtools-derive-psf-parameters = simtools.applications.derive_psf_parameters:main
18
+ simtools-derive-trigger-rates = simtools.applications.derive_trigger_rates:main
18
19
  simtools-docs-produce-array-element-report = simtools.applications.docs_produce_array_element_report:main
19
20
  simtools-docs-produce-calibration-reports = simtools.applications.docs_produce_calibration_reports:main
20
21
  simtools-docs-produce-model-parameter-reports = simtools.applications.docs_produce_model_parameter_reports:main
@@ -23,7 +24,6 @@ simtools-generate-array-config = simtools.applications.generate_array_config:mai
23
24
  simtools-generate-corsika-histograms = simtools.applications.generate_corsika_histograms:main
24
25
  simtools-generate-default-metadata = simtools.applications.generate_default_metadata:main
25
26
  simtools-generate-regular-arrays = simtools.applications.generate_regular_arrays:main
26
- simtools-generate-sim-telarray-histograms = simtools.applications.generate_sim_telarray_histograms:main
27
27
  simtools-generate-simtel-event-data = simtools.applications.generate_simtel_event_data:main
28
28
  simtools-maintain-simulation-model-add-production-table = simtools.applications.maintain_simulation_model_add_production_table:main
29
29
  simtools-maintain-simulation-model-compare-productions = simtools.applications.maintain_simulation_model_compare_productions:main
simtools/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.19.0'
32
- __version_tuple__ = version_tuple = (0, 19, 0)
31
+ __version__ = version = '0.20.0'
32
+ __version_tuple__ = version_tuple = (0, 20, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env python
2
+ r"""
3
+ Calculate photon incident angles on focal plane and primary/secondary mirrors.
4
+
5
+ Creates photon files with additional columns for incident angles calculation.
6
+ Outputs files and histograms of the incidence angles at
7
+ the focal plane, primary mirror, and if available, secondary mirror.
8
+ Optional debug plots can be also generated.
9
+ Note that this application does not include a full raytracing of telescope structures,
10
+ and their non symmetric shadowing at off-axis angles.
11
+
12
+ Example usage
13
+ -------------
14
+
15
+ .. code-block:: console
16
+
17
+ simtools-calculate-incident-angles \
18
+ --off_axis_angles 0 1 2 3 4 \
19
+ --source_distance 10 \
20
+ --number_of_photons 1000000 \
21
+ --model_version 6.0.0 \
22
+ --telescope MSTN-04 \
23
+ --site North
24
+
25
+ Command line arguments
26
+ ----------------------
27
+
28
+ - off_axis_angles (float, optional)
29
+ One or more off-axis angles in degrees (space-separated). Default: [0.0].
30
+ - source_distance (float, optional)
31
+ Source distance in kilometers. Default: 10.0.
32
+ - number_of_photons (int, optional)
33
+ Number of photons of the light source to trace per run. Default: 10000.
34
+ - perfect_mirror (flag, optional)
35
+ Assume perfect mirror shape/alignment/reflection.
36
+ - debug_plots (flag, optional)
37
+ Generate additional debug plots (radius histograms, XY heatmaps, radius vs angle).
38
+ - calculate_primary_secondary_angles / no-calculate_primary_secondary_angles
39
+ Include or skip angles on primary/secondary mirrors. Default: include.
40
+
41
+ The application writes:
42
+
43
+ - imaging list (photons) file
44
+ - stars list file
45
+ - a histogram of incident angles (PNG)
46
+ - a results table in ECSV format
47
+
48
+ Example of a focal-plane incident angle plot for a SST:
49
+
50
+ .. _plot_calculate_incident_angles_plot:
51
+ .. image:: images/incident_angles_multi_calculate_incident_angles_SSTS-04.png
52
+ :width: 49 %
53
+
54
+ Example of a primary mirror incident angle plot for a SST:
55
+
56
+ .. _plot_calculate_incident_angles_plot_primary:
57
+ .. image:: images/incident_angles_primary_multi_calculate_incident_angles_SSTS-04.png
58
+ :width: 49 %
59
+
60
+ Note also the relation between radius and primary mirror incident angles, and how this relates to
61
+ the peak seen in the primary mirror incident angle distribution:
62
+
63
+ .. _plot_calculate_incident_angles_plot_angle_vs_radius:
64
+ .. image:: images/primary_angle_vs_radius.png
65
+ :width: 49 %
66
+
67
+ Example of a secondary mirror incident angle plot for a SST:
68
+
69
+ .. _plot_calculate_incident_angles_plot_secondary:
70
+ .. image:: images/incident_angles_secondary_multi_calculate_incident_angles_SSTS-04.png
71
+ :width: 49 %
72
+ """
73
+
74
+ import logging
75
+ from pathlib import Path
76
+
77
+ from simtools.configuration import configurator
78
+ from simtools.ray_tracing.incident_angles import IncidentAnglesCalculator
79
+ from simtools.visualization.plot_incident_angles import plot_incident_angles
80
+
81
+
82
+ def _parse(label):
83
+ """Parse command line configuration."""
84
+ config = configurator.Configurator(
85
+ label=label,
86
+ description=(
87
+ "Calculate photon incident angles on focal plane and primary/secondary mirrors."
88
+ ),
89
+ )
90
+ config.parser.add_argument(
91
+ "--off_axis_angles",
92
+ help="One or more off-axis angles in degrees (space-separated)",
93
+ type=float,
94
+ nargs="+",
95
+ required=False,
96
+ )
97
+ config.parser.add_argument(
98
+ "--source_distance",
99
+ help="Source distance in kilometers",
100
+ type=float,
101
+ default=10.0,
102
+ required=False,
103
+ )
104
+ config.parser.add_argument(
105
+ "--number_of_photons",
106
+ help="Number of star photons to trace (per run)",
107
+ type=int,
108
+ default=10000,
109
+ required=False,
110
+ )
111
+ config.parser.add_argument(
112
+ "--perfect_mirror",
113
+ help="Assume perfect mirror shape/alignment/reflection",
114
+ action="store_true",
115
+ required=False,
116
+ )
117
+ config.parser.add_argument(
118
+ "--debug_plots",
119
+ dest="debug_plots",
120
+ help="Generate additional debug plots (radius histograms, XY heatmaps, radius vs angle)",
121
+ action="store_true",
122
+ required=False,
123
+ )
124
+ config.parser.add_argument(
125
+ "--calculate_primary_secondary_angles",
126
+ dest="calculate_primary_secondary_angles",
127
+ help="Also compute angles of incidence on primary and secondary mirrors",
128
+ required=False,
129
+ action="store_true",
130
+ )
131
+ return config.initialize(
132
+ db_config=True,
133
+ simulation_model=["telescope", "site", "model_version"],
134
+ )
135
+
136
+
137
+ def main():
138
+ """Application to calculate incident angles using ray tracing."""
139
+ label = Path(__file__).stem
140
+ args_dict, db_config = _parse(label)
141
+
142
+ logger = logging.getLogger()
143
+ logger.setLevel(logging.INFO)
144
+
145
+ logger.info("Starting calculation of incident angles")
146
+
147
+ output_base = Path(args_dict.get("output_path", "./"))
148
+ output_dir = (
149
+ output_base / label if not args_dict.get("use_plain_output_path", False) else output_base
150
+ )
151
+ base_label = args_dict.get("label", label)
152
+ telescope_name = args_dict["telescope"]
153
+ label_with_telescope = f"{base_label}_{telescope_name}"
154
+
155
+ calculator = IncidentAnglesCalculator(
156
+ simtel_path=args_dict["simtel_path"],
157
+ db_config=db_config,
158
+ config_data=args_dict,
159
+ output_dir=output_dir,
160
+ label=base_label,
161
+ )
162
+ offsets = [float(v) for v in args_dict.get("off_axis_angles", [0.0])]
163
+
164
+ results_by_offset = calculator.run_for_offsets(offsets)
165
+ plot_incident_angles(
166
+ results_by_offset,
167
+ output_dir,
168
+ label_with_telescope,
169
+ debug_plots=args_dict.get("debug_plots", False),
170
+ )
171
+ total = sum(len(t) for t in results_by_offset.values())
172
+ summary_msg = (
173
+ f"Calculated incident angles for {len(results_by_offset)} offsets,\n"
174
+ f"total photon statistics {total}"
175
+ )
176
+ if total < 1_000_000:
177
+ summary_msg += " (below 1e6; results may be statistically unstable)"
178
+ logger.info(summary_msg)
179
+
180
+
181
+ if __name__ == "__main__":
182
+ main()
@@ -5,14 +5,16 @@ r"""
5
5
  Generates a new database with all required collections.
6
6
  Follows the structure of the CTAO gitlab simulation model repository.
7
7
 
8
- This is an application for experts and should not be used by the general user.
8
+ This is an application for DB maintainers and should not be used by the general user.
9
9
 
10
10
  Command line arguments
11
11
 
12
12
  input_path (str, required)
13
13
  Path of local copy of model parameter repository.
14
- db_name (str, required)
14
+ db_simulation_model (str, required)
15
15
  Name of new DB to be created.
16
+ db_simulation_model_version (str, required)
17
+ Version of the new DB to be created.
16
18
  type (str, optional)
17
19
  Type of data to be uploaded to the DB. Options are: model_parameters, production_tables.
18
20
 
@@ -20,7 +22,7 @@ r"""
20
22
  --------
21
23
  Upload model data repository to the DB
22
24
  Loops over all subdirectories in 'input_path' and uploads all json files to the
23
- database 'new_db_name' (or updates an existing database with the same name):
25
+ database (or updates an existing database with the same name):
24
26
 
25
27
  * subdirectories starting with 'OBS' are uploaded to the 'sites' collection
26
28
  * json files from the subdirectory 'configuration_sim_telarray/configuration_corsika'
@@ -33,7 +35,8 @@ r"""
33
35
 
34
36
  simtools-db-simulation-model-from-repository-to-db \
35
37
  --input_path /path/to/repository \
36
- --db_name new_db_name \
38
+ --db_simulation_model database name \
39
+ --db_simulation_model_version new database version \
37
40
  --type model_parameters
38
41
 
39
42
  Upload production tables to the DB:
@@ -42,7 +45,8 @@ r"""
42
45
 
43
46
  simtools-db-simulation-model-from-repository-to-db \
44
47
  --input_path /path/to/repository \
45
- --db_name new_db_name \
48
+ --db_simulation_model database name \
49
+ --db_simulation_model_version new database version \
46
50
  --type production_tables
47
51
 
48
52
  """
@@ -78,12 +82,6 @@ def _parse(label=None, description=None):
78
82
  type=Path,
79
83
  required=True,
80
84
  )
81
- config.parser.add_argument(
82
- "--db_name",
83
- help="Name of the new simulation model database to be created.",
84
- type=str.strip,
85
- required=True,
86
- )
87
85
  config.parser.add_argument(
88
86
  "--type",
89
87
  help="Type of data to be uploaded to the database.",
@@ -94,7 +92,12 @@ def _parse(label=None, description=None):
94
92
  )
95
93
 
96
94
  args_dict, db_config = config.initialize(output=True, require_command_line=True, db_config=True)
97
- db_config["db_simulation_model"] = args_dict["db_name"] # overwrite explicitly DB configuration
95
+ if args_dict.get("db_simulation_model") and args_dict.get("db_simulation_model_version"):
96
+ # overwrite explicitly DB configuration
97
+ db_config["db_simulation_model"] = args_dict["db_simulation_model"]
98
+ db_config["db_simulation_model_version"] = args_dict["db_simulation_model_version"]
99
+ else:
100
+ raise ValueError("Both db_simulation_model and db_simulation_model_version are required.")
98
101
  return args_dict, db_config
99
102
 
100
103
 
@@ -110,9 +113,9 @@ def main():
110
113
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
111
114
 
112
115
  if args_dict.get("type") == "model_parameters":
113
- db_model_upload.add_model_parameters_to_db(args_dict, db)
116
+ db_model_upload.add_model_parameters_to_db(input_path=Path(args_dict["input_path"]), db=db)
114
117
  elif args_dict.get("type") == "production_tables":
115
- db_model_upload.add_production_tables_to_db(args_dict, db)
118
+ db_model_upload.add_production_tables_to_db(input_path=Path(args_dict["input_path"]), db=db)
116
119
 
117
120
 
118
121
  if __name__ == "__main__":
@@ -62,8 +62,8 @@ def main(): # noqa: D103
62
62
  logger.setLevel(gen.get_log_level_from_user(args_dict["log_level"]))
63
63
 
64
64
  if args_dict.get("test_db", False):
65
- db_config["db_simulation_model"] = db_config["db_simulation_model"] + str(uuid.uuid4())
66
- logger.info(f"Using test database: {db_config['db_simulation_model']}")
65
+ db_config["db_simulation_model_version"] = str(uuid.uuid4())
66
+ logger.info(f"Using test database version {db_config['db_simulation_model_version']}")
67
67
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
68
68
 
69
69
  files_to_insert = []
@@ -83,14 +83,13 @@ def main(): # noqa: D103
83
83
  print(*files_to_insert, sep="\n")
84
84
  print()
85
85
 
86
- logger.info(f"DB {args_dict['db_simulation_model']} selected.")
86
+ logger.info(f"DB {db.get_db_name()} selected.")
87
87
 
88
88
  if gen.user_confirm():
89
89
  for file_to_insert_now in files_to_insert:
90
90
  par_dict = ascii_handler.collect_data_from_file(file_name=file_to_insert_now)
91
91
  logger.info(f"Adding the following parameter to the DB: {par_dict['parameter']}")
92
92
  db.add_new_parameter(
93
- db_name=db_config["db_simulation_model"],
94
93
  par_dict=par_dict,
95
94
  collection_name=args_dict["db_collection"],
96
95
  file_prefix="./",
@@ -103,11 +102,9 @@ def main(): # noqa: D103
103
102
  logger.info("Aborted, no change applied to the database")
104
103
 
105
104
  # drop test database; be safe and required DB name is sandbox
106
- if args_dict.get("test_db", False) and "sandbox" in args_dict["db_simulation_model"]:
107
- logger.info(
108
- f"Test database used. Dropping all data from {db_config['db_simulation_model']}"
109
- )
110
- db.db_client.drop_database(db_config["db_simulation_model"])
105
+ if args_dict.get("test_db", False) and "sandbox" in db.get_db_name():
106
+ logger.info(f"Test database used. Dropping all data from {db.get_db_name()}")
107
+ db.db_client.drop_database(db.get_db_name())
111
108
 
112
109
 
113
110
  if __name__ == "__main__":
@@ -27,8 +27,8 @@ def _parse():
27
27
  config.parser.add_argument(
28
28
  "--db_name",
29
29
  help="Database name",
30
- default="all",
31
- required=True,
30
+ default=None,
31
+ required=False,
32
32
  )
33
33
  return config.initialize(db_config=True)
34
34
 
@@ -44,7 +44,11 @@ def main(): # noqa: D103
44
44
  databases = [
45
45
  d for d in db.db_client.list_database_names() if d not in ("config", "admin", "local")
46
46
  ]
47
- requested = args_dict["db_name"]
47
+ requested = db.get_db_name(
48
+ db_name=args_dict["db_name"],
49
+ model_version=args_dict.get("db_simulation_model_version"),
50
+ model_name=args_dict.get("db_simulation_model"),
51
+ )
48
52
  if requested != "all" and requested not in databases:
49
53
  raise ValueError(
50
54
  f"Requested database '{requested}' not found. "
@@ -65,29 +65,17 @@ def main(): # noqa: D103
65
65
  _io_handler = io_handler.IOHandler()
66
66
 
67
67
  db = db_handler.DatabaseHandler(mongo_db_config=db_config)
68
- available_dbs = [
69
- db_config["db_simulation_model"],
70
- ]
71
- file_id = {}
72
- for db_name in available_dbs:
73
- try:
74
- file_id = db.export_model_files(
75
- db_name=db_name,
76
- dest=_io_handler.get_output_directory(),
77
- file_names=args_dict["file_name"],
78
- )
79
- logger.info(
80
- f"Got file {args_dict['file_name']} from DB {db_name} "
81
- f"and saved into {_io_handler.get_output_directory()}"
82
- )
83
- break
84
- except FileNotFoundError:
85
- continue
86
-
87
- for key, value in file_id.items():
88
- if value is None:
89
- logger.error(f"The file {key} was not found in any of the available DBs.")
90
- raise FileNotFoundError
68
+ file_id = db.export_model_files(
69
+ dest=_io_handler.get_output_directory(),
70
+ file_names=args_dict["file_name"],
71
+ )
72
+ if file_id is None:
73
+ logger.error(f"The file {args_dict['file_name']} was not found in {db.db_name}.")
74
+ raise FileNotFoundError
75
+ logger.info(
76
+ f"Got file {args_dict['file_name']} from DB {db.db_name} "
77
+ f"and saved into {_io_handler.get_output_directory()}"
78
+ )
91
79
 
92
80
 
93
81
  if __name__ == "__main__":