gammasimtools 0.24.0__py3-none-any.whl → 0.25.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 (59) hide show
  1. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.0.dist-info}/METADATA +1 -1
  2. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.0.dist-info}/RECORD +58 -55
  3. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.0.dist-info}/entry_points.txt +1 -0
  4. simtools/_version.py +2 -2
  5. simtools/application_control.py +50 -0
  6. simtools/applications/derive_psf_parameters.py +5 -0
  7. simtools/applications/derive_pulse_shape_parameters.py +195 -0
  8. simtools/applications/plot_array_layout.py +63 -1
  9. simtools/applications/simulate_flasher.py +3 -2
  10. simtools/applications/simulate_pedestals.py +1 -1
  11. simtools/applications/simulate_prod.py +8 -23
  12. simtools/applications/simulate_prod_htcondor_generator.py +7 -0
  13. simtools/applications/submit_array_layouts.py +5 -3
  14. simtools/applications/validate_file_using_schema.py +49 -123
  15. simtools/configuration/commandline_parser.py +8 -6
  16. simtools/corsika/corsika_config.py +197 -87
  17. simtools/data_model/model_data_writer.py +14 -2
  18. simtools/data_model/schema.py +112 -5
  19. simtools/data_model/validate_data.py +82 -48
  20. simtools/db/db_model_upload.py +2 -1
  21. simtools/db/mongo_db.py +133 -42
  22. simtools/dependencies.py +5 -9
  23. simtools/io/eventio_handler.py +128 -0
  24. simtools/job_execution/htcondor_script_generator.py +0 -2
  25. simtools/layout/array_layout_utils.py +1 -1
  26. simtools/model/array_model.py +36 -5
  27. simtools/model/model_parameter.py +0 -1
  28. simtools/model/model_repository.py +18 -5
  29. simtools/ray_tracing/psf_analysis.py +11 -8
  30. simtools/ray_tracing/psf_parameter_optimisation.py +822 -679
  31. simtools/reporting/docs_read_parameters.py +69 -9
  32. simtools/runners/corsika_runner.py +12 -3
  33. simtools/runners/corsika_simtel_runner.py +6 -0
  34. simtools/runners/runner_services.py +17 -7
  35. simtools/runners/simtel_runner.py +12 -54
  36. simtools/schemas/model_parameters/flasher_pulse_exp_decay.schema.yml +2 -0
  37. simtools/schemas/model_parameters/flasher_pulse_shape.schema.yml +50 -0
  38. simtools/schemas/model_parameters/flasher_pulse_width.schema.yml +2 -0
  39. simtools/schemas/simulation_models_info.schema.yml +2 -0
  40. simtools/simtel/pulse_shapes.py +268 -0
  41. simtools/simtel/simtel_config_writer.py +82 -1
  42. simtools/simtel/simtel_io_event_writer.py +2 -2
  43. simtools/simtel/simulator_array.py +58 -12
  44. simtools/simtel/simulator_light_emission.py +45 -8
  45. simtools/simulator.py +361 -347
  46. simtools/testing/assertions.py +62 -6
  47. simtools/testing/configuration.py +1 -1
  48. simtools/testing/log_inspector.py +4 -1
  49. simtools/testing/sim_telarray_metadata.py +1 -1
  50. simtools/testing/validate_output.py +44 -9
  51. simtools/utils/names.py +2 -4
  52. simtools/version.py +37 -0
  53. simtools/visualization/legend_handlers.py +14 -4
  54. simtools/visualization/plot_array_layout.py +229 -33
  55. simtools/visualization/plot_mirrors.py +837 -0
  56. simtools/simtel/simtel_io_file_info.py +0 -62
  57. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.0.dist-info}/WHEEL +0 -0
  58. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.0.dist-info}/licenses/LICENSE +0 -0
  59. {gammasimtools-0.24.0.dist-info → gammasimtools-0.25.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.24.0
3
+ Version: 0.25.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
@@ -1,12 +1,12 @@
1
- gammasimtools-0.24.0.dist-info/licenses/LICENSE,sha256=a2q6KVo33OrRL_7ZSk7BYOT8KkUNV3WAMZW8CHEDkDU,1548
1
+ gammasimtools-0.25.0.dist-info/licenses/LICENSE,sha256=a2q6KVo33OrRL_7ZSk7BYOT8KkUNV3WAMZW8CHEDkDU,1548
2
2
  simtools/__init__.py,sha256=yvx0i5ygbllmMtF2Tzy7pohvhQNH_dBdj0Bt8bKFYpc,231
3
- simtools/_version.py,sha256=ADBh2JtyPiL8yFdC_JGhFEVpNOBdSJnZ0ZOVCp71Qqw,706
4
- simtools/application_control.py,sha256=q5y4-yNYaNDQgKZxyU8EujwcZPI_i-RmZsv3rRFjusM,3305
3
+ simtools/_version.py,sha256=Kl3WY3DazpC5lEIaMkcNebxoUZL2q26hCV9RsV8iNxM,706
4
+ simtools/application_control.py,sha256=8fFhUG2gbQd80mW-5C_LSM9zzr8H6TdhRf9ZJn99ZaY,5030
5
5
  simtools/constants.py,sha256=3N5bc8MlMWRzcg8EeSJweoioEo_uhStMxAzdb85Apvw,966
6
- simtools/dependencies.py,sha256=ciKwmvNwDz6WyMu72TjQe1qKPl8PsFvjzSTkQA5_Lmo,7258
7
- simtools/simulator.py,sha256=HgyaGB49TDvtvPiF7K5O2wkNefpfhfEKyXw0I1vzg9Y,28826
6
+ simtools/dependencies.py,sha256=lUB6S8Qy95ecnokcgsY_NmgNBznUtkpa9kjztxkswRY,7133
7
+ simtools/simulator.py,sha256=HNulg-jR2mh1yHcr-DzC2GunWm0JnT7bHRauvMe5nO4,30463
8
8
  simtools/telescope_trigger_rates.py,sha256=_2NUG8UnhfpMGhaEDgHUOOdnweCUcRTrTOkGGYInHqo,3984
9
- simtools/version.py,sha256=01MnfNqKGG0qpsiozYDVQKoj86RT3hVrn8ClOrm3Rgc,6164
9
+ simtools/version.py,sha256=zVXYJYK7Q9c7stKrbbeJekkIZ-KQkGrHUnnKiVxXd20,7246
10
10
  simtools/applications/calculate_incident_angles.py,sha256=utE5N6F_RjtNGxYx-HbAcQ4l6DtAmoZxYRgO7-jTM2g,6042
11
11
  simtools/applications/convert_all_model_parameters_from_simtel.py,sha256=ml3rLe9-nRdPQBARpssK9aU0StwQ27RaUa-_6H-ZlA0,11893
12
12
  simtools/applications/convert_geo_coordinates_of_array_elements.py,sha256=ALghVkw2ElrcqySz1teIeBhyzcMEoqDjDQO6bUw7cHw,5655
@@ -23,7 +23,8 @@ simtools/applications/db_upload_model_repository.py,sha256=StVJU6alEddTDWTqf_GPO
23
23
  simtools/applications/derive_ctao_array_layouts.py,sha256=MTYrHjOkyzE8aBKeluGebibV9T7ZOocRF30GbHtzsbs,4134
24
24
  simtools/applications/derive_mirror_rnda.py,sha256=S_9fUZ1TQbKltX86IWhS_10_KDF1abtxaixGh1UUGms,8964
25
25
  simtools/applications/derive_photon_electron_spectrum.py,sha256=-Drq6QPo7xXjGGmdDzGKJ6x1Byg9_jOaD-fSKG6CJQE,3988
26
- simtools/applications/derive_psf_parameters.py,sha256=DiinpJYuXmt4hQXjwN8uLVnAfq1unF2ZrmIG47Z7o3I,7882
26
+ simtools/applications/derive_psf_parameters.py,sha256=x1HVRgsQeCtyuUejfdwXYpZ73wmJQU7_ZI3mfP5RAws,8049
27
+ simtools/applications/derive_pulse_shape_parameters.py,sha256=D399tpUK2DQ_76I2GbVIf6DW-Mkh1WlcoPqFdesyddg,6243
27
28
  simtools/applications/derive_trigger_rates.py,sha256=4kdJjc7-pB2XiuEX9BHzbJ9XXBZ0vN0XITVtvQgq11k,2515
28
29
  simtools/applications/docs_produce_array_element_report.py,sha256=CW2s2JwT-LvsBNjgbJayEjR42oYx8grWs96zP_VR9LQ,2556
29
30
  simtools/applications/docs_produce_calibration_reports.py,sha256=sOmC6uNjFaawj26nqJa3GsWAnQd0F96W6WKm3gj7J0I,1575
@@ -38,7 +39,7 @@ simtools/applications/maintain_simulation_model_add_production.py,sha256=lBBm6F5
38
39
  simtools/applications/maintain_simulation_model_compare_productions.py,sha256=aD6eZq1RUMnE4J-AuNjuHCKy_vDmnFnhPCPO0wxshbA,3194
39
40
  simtools/applications/maintain_simulation_model_verify_production_tables.py,sha256=YpnP7EeaheV03KwW7ryEc4GHIqaEHOFkG-RqJOH64RE,1793
40
41
  simtools/applications/merge_tables.py,sha256=N7MGX-VD2tu72RWvSDEb1zfls6px-wqLU4t5Lbl9V6E,2656
41
- simtools/applications/plot_array_layout.py,sha256=mik3-O3AhPIGBdvUBATji4MUnVhRe5eHkHNNFa9S564,11270
42
+ simtools/applications/plot_array_layout.py,sha256=x9IIj7sJrBz_SjKXXHEhZhN1QpMrQ1D3I5_dHCWqMoY,13494
42
43
  simtools/applications/plot_simtel_events.py,sha256=aIINMATBNEs5-K72ZyWVBLyd83-70eMjERMNKvknSUE,6787
43
44
  simtools/applications/plot_tabular_data.py,sha256=jsGBWFelKSD4TOI4WZHdez-mM9l666RLctJvqCkZfus,2691
44
45
  simtools/applications/plot_tabular_data_for_model_parameter.py,sha256=zBFY5Vb6ns_gWTQN9BLTzhq-7x3pvnzS6CC6LR6y_CM,3161
@@ -48,54 +49,55 @@ simtools/applications/production_derive_statistics.py,sha256=NT_EL-jUg151QrCY1E1
48
49
  simtools/applications/production_generate_grid.py,sha256=L_LlHA3Uly6P3Rx4eaxVvPXz3Z8VAwNv_7XO6Hm2VXs,5824
49
50
  simtools/applications/production_merge_corsika_limits.py,sha256=sYOTG731ja0xW5p2Pq4dJdOuKwWi7MphASdZ-dg6osY,7588
50
51
  simtools/applications/run_application.py,sha256=XaDRG-1TptvMSXwNis1z_n43YqkEI_fVjZiTImjl6-o,3947
51
- simtools/applications/simulate_flasher.py,sha256=CR5dl-GSycEyu8_D51kHJNUAxokTvMJ-fRlEGS82gLw,4646
52
+ simtools/applications/simulate_flasher.py,sha256=dTtvdkbb3NskiAS2J4AOUuETIN1jt-j09nDdw_8qrno,4695
52
53
  simtools/applications/simulate_illuminator.py,sha256=3UcrubHk_aErIsPW0rJTtlpXPnYlEZaqWBuF1IW-0go,4220
53
- simtools/applications/simulate_pedestals.py,sha256=0fmleOnAnNfJSoNX6zEgxHwJpOQldCrt02gtMDPZ_x0,3724
54
- simtools/applications/simulate_prod.py,sha256=B4Dj9lDp8p61ZwvPTXMoiBYPLinBGf9MRDo-dHV65H0,6464
55
- simtools/applications/simulate_prod_htcondor_generator.py,sha256=lcnYGjC5KwWmE0d6FFDXgg4XIolFPC0eXppDtUsp12s,3193
56
- simtools/applications/submit_array_layouts.py,sha256=MOXYpHROJmLGbjyDXQ6L0XMXEVQNXRaZLUR-ppcMb2o,2701
54
+ simtools/applications/simulate_pedestals.py,sha256=n5zsHu4Y9wZdnmI191v-bXJdAZg1doIk9HFMS-xR66o,3724
55
+ simtools/applications/simulate_prod.py,sha256=vqGd4KPuWgvJtF0p0H0K0H4YfiPezjUNmUqRAcYqdqA,5346
56
+ simtools/applications/simulate_prod_htcondor_generator.py,sha256=MZc6BuhB5UO_b-j7x4ag_3Jf3Cii2YAvghOd17ZaQOY,3367
57
+ simtools/applications/submit_array_layouts.py,sha256=xlIG3kAJZtSOr1RHeMCfOn9Y-7fi49ppLUJS_pQgfFA,2863
57
58
  simtools/applications/submit_data_from_external.py,sha256=4uXI_JSKNpQkSbuUfEWQgtvH-on7nffIgQHbpzjN0Bc,3043
58
59
  simtools/applications/submit_model_parameter_from_external.py,sha256=UwpSclpjBXN2Vu8aQzHHRffj-Tt3M2IxqIcTnviRwuM,3754
59
60
  simtools/applications/validate_camera_efficiency.py,sha256=sPmIiQYQM9ewco2ExKI_QJ_nL1wjwmY5NOSN6Us0Wjk,4949
60
61
  simtools/applications/validate_camera_fov.py,sha256=hU_Ul_E3c_Hl-dKLIlzZPgWyDillNOJsLpQu7_L3f44,4535
61
62
  simtools/applications/validate_cumulative_psf.py,sha256=yeki5GV0vFX6P5yuMCAPkfFI2C_S8OjrfZlSpn2ol00,6430
62
- simtools/applications/validate_file_using_schema.py,sha256=j2x-wca3QsePq71FMN32OLwBLmTKOHIaa-8bYkvZEx4,7161
63
+ simtools/applications/validate_file_using_schema.py,sha256=W1om-MHJA105NAOkRMZ4q7HNjfw7E9Xh8ExZrvic17A,4455
63
64
  simtools/applications/validate_optics.py,sha256=7daD4S_9kze-MkmPUioekde3cgkmtfLVbl1CbqC6mYY,6451
64
65
  simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py,sha256=MG7F0_QTEjt2_1rryyVTDDjR9rHHWOGDHuP0fAVWolQ,5172
65
66
  simtools/camera/camera_efficiency.py,sha256=DMw438cJ6gcnZyXHuTDAohk5duCF8EWpCqnE93FXziA,18927
66
67
  simtools/camera/single_photon_electron_spectrum.py,sha256=eQTpmy8NH8v5kkrlFjYmlIQhqcDwXHy44q-59PtXZEI,11572
67
- simtools/configuration/commandline_parser.py,sha256=T0o_K3m-nPmictwCSlFQIpB8m9dYePBPuJmK1EY_Ukc,27877
68
+ simtools/configuration/commandline_parser.py,sha256=ZSrtN5FRHn-qM5s3fKEhXnVqFbXacXE3VmWX_Q9nUfM,28016
68
69
  simtools/configuration/configurator.py,sha256=sxaXZNbEb2Lli9092vmXsp6L0hbxZM9dZ6WtC25QYdw,14788
69
- simtools/corsika/corsika_config.py,sha256=h7QMedOBVBKOxmShF2VN9C0EXEXApiU70J7Qc06Ckd0,28858
70
+ simtools/corsika/corsika_config.py,sha256=P_RjtTl2AHXBHKkvM5EGIGKIiUIMkkmGz2HV2jUknuA,34207
70
71
  simtools/corsika/corsika_histograms.py,sha256=nbxSoAj_oW3KABfo46ioj9W2VpXKWKw5mOiMeb1nGjs,70524
71
72
  simtools/corsika/primary_particle.py,sha256=WK0UKYtdPSefes286ZGXsoGV9r6JqH19Tk9myza_plU,6613
72
73
  simtools/data_model/data_reader.py,sha256=abqVujfDYu1SHbMhpqRA851_WDWZr2SOoi35p0hZ_7s,4051
73
74
  simtools/data_model/format_checkers.py,sha256=bXF9dItkpZCGXAHdCH7vhgxEsIhXLLVFLOha-hKRspY,1949
74
75
  simtools/data_model/metadata_collector.py,sha256=31j1l6Kl3gzVfpWql0ft-Dl0uvsBc0nF18oN9hp849Q,23513
75
76
  simtools/data_model/metadata_model.py,sha256=wH52gC6MdwFw9A6UswZLsRlss7vbXDyxybBaI_UMt18,4642
76
- simtools/data_model/model_data_writer.py,sha256=xvlDmFJW93lCaRBg4o5ZXegAZS7kcaC6LLyocJ2KJN4,16573
77
- simtools/data_model/schema.py,sha256=BeJQTvK6OfjVxansVUKPc1PgyJarHQw6Jktlji-GDcE,10809
78
- simtools/data_model/validate_data.py,sha256=jVxiTP1YlDiGqyAjb-b6vofmpxaZQY3RAtjaVkuCuRo,31078
77
+ simtools/data_model/model_data_writer.py,sha256=MaVZVQP6YVei493DFMIkj41eIlXZCJNlaObwv-iUspY,17192
78
+ simtools/data_model/schema.py,sha256=VkmWByIY9fkRMbCJRBLlg-G33deGHYPs0AShTv23f6Q,14257
79
+ simtools/data_model/validate_data.py,sha256=7S-cxzXUvDaQCCWyvV7QTx50pt7eHmuVC9jzBM2z9kk,32566
79
80
  simtools/db/db_handler.py,sha256=ACBqi0k-4fqbq9gMmLg1wEa4LWWTXQuZQjoBg3VIjks,29418
80
- simtools/db/db_model_upload.py,sha256=0j1h-EwJgTWUS5GCIULwSdvh36Bm0Yhqn0Nm0Wd2vXE,11813
81
- simtools/db/mongo_db.py,sha256=mwtQ8l7HSXRDPZbkVO4xrMRVRsOUZpu_m0_l0-CswiU,16505
81
+ simtools/db/db_model_upload.py,sha256=zHPmvNM5QG4BTIfHFCo3qJn8f5pnuNScdKKOUGQORnc,11872
82
+ simtools/db/mongo_db.py,sha256=Efgxk_0dJMnwW6fPaPbEfvNU2tEbJcDDTlVTGwqTkxQ,19393
82
83
  simtools/io/ascii_handler.py,sha256=S2fP2x6vE4nEF5g0NRARIWKs8vKU3c9SW8XtcdrwhQU,7826
84
+ simtools/io/eventio_handler.py,sha256=_72U8n6bikGrd9rFlimHOU7-mBaDtTdozkE4Bb5hJBw,4004
83
85
  simtools/io/hdf5_handler.py,sha256=Jnya-FMhmt_jQHIMQawUZrJA6S3QFo1BGGVt2Jaj89g,4177
84
86
  simtools/io/io_handler.py,sha256=qC4-htBLvHcHgHfsZeDJllevadpMBN7KtFPnuHSXrpI,3439
85
87
  simtools/io/legacy_data_handler.py,sha256=ZJunKgO0gjCLHtBqVtYUAiD88ouJio1_w_XJHjjp_6U,1260
86
88
  simtools/io/table_handler.py,sha256=YJqbam9sBjKAhHDyzFd0X0duWT1jnYPyk0La9Gp2jeo,10713
87
- simtools/job_execution/htcondor_script_generator.py,sha256=7Wm1iR8PK0gbutbZATyBmhqQu-MZQI0HaJa7dJJVMHA,4248
89
+ simtools/job_execution/htcondor_script_generator.py,sha256=np_mPnu8HdTQdTlb_MpTsNcBa9g6K3PJfJ1mmLiL2xE,4179
88
90
  simtools/job_execution/job_manager.py,sha256=xWZlf1t6RuKvTEp1nNkNkkrUtR6smulxGfV8_WN_vG8,4716
89
91
  simtools/layout/array_layout.py,sha256=sk1yIEEBx2MlbNyISe6K7vnmQuyp-QAuoFPF0U6nDRo,25073
90
- simtools/layout/array_layout_utils.py,sha256=_oxKTPsMDT2fIjhI1nka3MAkvqDSTx4nXK4jCzVfvNA,12572
92
+ simtools/layout/array_layout_utils.py,sha256=ueieDAWw9wi4E4eMWRGR4yQ2RAfu6amFAwYrF-gXZfg,12581
91
93
  simtools/layout/geo_coordinates.py,sha256=9kKnXFi9vrfYKG_9elzFuzzssGFEUzxMubaclITkW_g,5944
92
94
  simtools/layout/telescope_position.py,sha256=tXXf2_kr6ouPrDXWx20vf6c-yEo11AjN8_gJ2EwL5-g,20097
93
- simtools/model/array_model.py,sha256=tlJn36uTD68zIbjE1QamwgdfH6lknpUro_vuBS6FOz8,18227
95
+ simtools/model/array_model.py,sha256=q_ZWTwGyxGw1x_IS2-VjbKUMnELYtzs6oVqpne-1kOg,18942
94
96
  simtools/model/calibration_model.py,sha256=omSgM2CIMh7HB2Bnm3OFjvWRMNBfkpGd6AnYayAEGiY,1563
95
97
  simtools/model/camera.py,sha256=ewqhjovhxIX8a2hEHzxqZy2Mcfp621xk2nikxGDXDO4,21381
96
98
  simtools/model/mirrors.py,sha256=g0eS4qFzUmo9UIakC4CDo7ourAGuFd3EfzL9RdrF9zg,9098
97
- simtools/model/model_parameter.py,sha256=_NJTj6aqcmLgTqC_qZeuAzgW2bmA0BoJLFm1U5gTFV8,22828
98
- simtools/model/model_repository.py,sha256=NWjj46Fd4hba4YqjTM2sUQOHUPkgj_YEGXlb5iNCZE8,17932
99
+ simtools/model/model_parameter.py,sha256=mUaNsoPTrGyzYUVtWBwbn8dQzJiaOS861Y5CoBtD6F0,22796
100
+ simtools/model/model_repository.py,sha256=32B4CaZgSZuWj9GckmfwBhKVApd3UikL_hsfjtuDs0k,18557
99
101
  simtools/model/model_utils.py,sha256=OUHsOKOhXDVCTRpSRCO4iJZncUB_6hy0uUaF2AeooI0,2963
100
102
  simtools/model/site_model.py,sha256=ueu1t_fkpTZ-OnMYVlJyKbfySkqn_tVQN90NcyzSrTw,7060
101
103
  simtools/model/telescope_model.py,sha256=No2BtJu5flgMTP6QoSwfsGd6RXfqabOobqvtftQlek0,14432
@@ -108,17 +110,17 @@ simtools/production_configuration/interpolation_handler.py,sha256=CWJa9WfBhHLTJD
108
110
  simtools/production_configuration/merge_corsika_limits.py,sha256=t9JDvrpkP33ISCRCPVLE8GunjHDF_RYlRPqXI469l0w,20838
109
111
  simtools/ray_tracing/incident_angles.py,sha256=sbrj20XAikRH_jH-tW88PQveT97w9mdAzVjvp0OsAns,25967
110
112
  simtools/ray_tracing/mirror_panel_psf.py,sha256=0TGSkeXmRSo25mIhoNqrEQJgMWK-oPk7TT-8VkuMsxc,11267
111
- simtools/ray_tracing/psf_analysis.py,sha256=vZGPThRHfV3RNPeZF97jH2zoK2PlJoqPsJhkz17F_PQ,18140
112
- simtools/ray_tracing/psf_parameter_optimisation.py,sha256=E9jy2o-U5ORSMaOjWuQndJiOM92FHC1zLLcFWISkTgg,45673
113
+ simtools/ray_tracing/psf_analysis.py,sha256=imSFCWSyRfcpqLMeSIwOoDWVwzLlHlnT7N0y6Qi2V2s,18290
114
+ simtools/ray_tracing/psf_parameter_optimisation.py,sha256=wH3IwL4TIrB9UprjXzj2YGJul_wHgrsMAXode2j-cBU,51621
113
115
  simtools/ray_tracing/ray_tracing.py,sha256=gPnhEBPlSE51jt3k3brvtuJZQT4MejPeqQm1alLaUqU,21959
114
116
  simtools/reporting/docs_auto_report_generator.py,sha256=Ee-zBf4pQahaN4RYv2aN_UEngFVMbzVqr_X3l_Q2vy8,14098
115
- simtools/reporting/docs_read_parameters.py,sha256=TGn-6Y_u_sPW3EjkMYvoVXrL3qlsxLdGMhRjFQTqLNo,39559
117
+ simtools/reporting/docs_read_parameters.py,sha256=3BQ22fs8_1-23VO6vwgf7WVuJJ0qUHz_fhl88gB3W4E,41624
116
118
  simtools/resources/array-element-ids.json,sha256=W8cijMEmHJ28RLIyixVVdHr16-iUbIuURT9QIoIzCoY,4566
117
119
  simtools/resources/array_elements.yml,sha256=MG-TyocXQCj6htA8af4nBzCxcfFZHs1XXtSfSl4kmBo,4285
118
- simtools/runners/corsika_runner.py,sha256=TB9sF2-mgzWf9wUKdw90XtkFiolW_RqKmmihMosiu7g,9115
119
- simtools/runners/corsika_simtel_runner.py,sha256=g-u1t0a2oT9kR0mvEr4uh0b1TLJwev2nAZdJ1oymqNw,7508
120
- simtools/runners/runner_services.py,sha256=nYmfgvLQQdkNo-7QKxsx80u_BD6rlpymO5NdsRe6ii4,10292
121
- simtools/runners/simtel_runner.py,sha256=HCD7upSloWJDTPtDcwbsyXKSOs-ujhMX_4zqQpJ1ZMs,8284
120
+ simtools/runners/corsika_runner.py,sha256=mDD4_YtwIm8wvQtBTGBCrqtlj9sMKR-CZZpWmS2hy_0,9667
121
+ simtools/runners/corsika_simtel_runner.py,sha256=cki9Cc0wNo6zErrWJRkV-V-_J3g3eIboljiYg5clgFc,7795
122
+ simtools/runners/runner_services.py,sha256=_UhgQOOsIFpF2fiB6C7WhQA8jPIZhafzGbuErvlLLXI,10774
123
+ simtools/runners/simtel_runner.py,sha256=BAgVGLIbPbkGxxPu1ZtFFwIlYv7o84STdVkgFdky4jY,6581
122
124
  simtools/runners/simtools_runner.py,sha256=i9E50ha1-vOy5yRSP6BbjuP5PaHKLLj2rD74Pzah2cg,8262
123
125
  simtools/schemas/application_workflow.metaschema.yml,sha256=Gd2YIXT7DgdnlP0P-08ywGlle3RMhFqdPcHdrxNw6Gk,5657
124
126
  simtools/schemas/common_definitions.schema.yml,sha256=_vzwIM-qIqi32HrjMHIH0dO0STeCZFsAIli6acFol7Y,1180
@@ -128,7 +130,7 @@ simtools/schemas/model_parameter_and_data_schema.metaschema.yml,sha256=ktpW7ym7H
128
130
  simtools/schemas/plot_configuration.metaschema.yml,sha256=ALz6d3btyr0ao50nJ0tShMlMgR4SKP6MRC_qxiPjwmc,4408
129
131
  simtools/schemas/production_configuration_metrics.schema.yml,sha256=9IOmDjtAyH-8Ti5hoxKKjZ0kl7E7iKBBDvTL8SSv_To,1935
130
132
  simtools/schemas/production_tables.schema.yml,sha256=diTGV8z8K4yx4YDv0ZEEpTGimijru0PsvZMhaMN26_A,1428
131
- simtools/schemas/simulation_models_info.schema.yml,sha256=ycu5nubgScdNteiSnHrL87AW73nR6kTV9m4_n7F63ZA,2192
133
+ simtools/schemas/simulation_models_info.schema.yml,sha256=xGNHOuouJ0HEhBDeI-u4Euvj2zl_X4ba-jLTkdy8UJg,2308
132
134
  simtools/schemas/input/MST_mirror_2f_measurements.schema.yml,sha256=2kFAIxgR36XIrTNvfvPB16OdnpkNdkXeCGnI01Tbc3Y,1124
133
135
  simtools/schemas/input/single_pe_spectrum.schema.yml,sha256=hLD8JgChI1eV2yl7E_e_uvQebsRuG18ag_4aEiLjToM,1244
134
136
  simtools/schemas/model_parameters/adjust_gain.schema.yml,sha256=n3k7JCkxDyl7LgU0y6-1BmxMO3yfy_Ab_emef4tEUTw,821
@@ -250,10 +252,10 @@ simtools/schemas/model_parameters/flasher_bunch_size.schema.yml,sha256=DMxKdnJhb
250
252
  simtools/schemas/model_parameters/flasher_external_trigger.schema.yml,sha256=_5ebPJSy1e7UzfVAvpZ2t0x4xlSqy_E4SlXilSLUQCY,1047
251
253
  simtools/schemas/model_parameters/flasher_photons.schema.yml,sha256=h8wL2osBXIb5CTiTAWr4bcyFhpwKLzEx7QYeQgG8D3M,950
252
254
  simtools/schemas/model_parameters/flasher_position.schema.yml,sha256=8R9jKFPuB0XioJGs3xUVUwirIZpl-0Ra20VISXTk274,1298
253
- simtools/schemas/model_parameters/flasher_pulse_exp_decay.schema.yml,sha256=XZlUECzvqDcccyTOlaGKI3VoBX1ePWGiF6kPYpsrLvE,729
255
+ simtools/schemas/model_parameters/flasher_pulse_exp_decay.schema.yml,sha256=CYztKDC7m_Cb4efLmLTjvB08z-pj5KjiGs5sBbLVZxw,820
254
256
  simtools/schemas/model_parameters/flasher_pulse_offset.schema.yml,sha256=7Yhw_U-TwpQvUJ2CXP87AMprSRiODOcJz9ySj-MQDvY,1104
255
- simtools/schemas/model_parameters/flasher_pulse_shape.schema.yml,sha256=ifIYREILnM1MHyxpqRG9MdQypF5L2-aJAiEWX7WDJ4M,721
256
- simtools/schemas/model_parameters/flasher_pulse_width.schema.yml,sha256=_47DNmFY7WnUtR6gu152BlLguqV-dbqX67AbpWfhwwg,825
257
+ simtools/schemas/model_parameters/flasher_pulse_shape.schema.yml,sha256=-EIevi9dyEyExDGtN5FvknNttJ9NXkkp93zsabmoUxA,2105
258
+ simtools/schemas/model_parameters/flasher_pulse_width.schema.yml,sha256=CGBf_LHhP1Qn8NPi20TF8Imx1NgUIX693-02DaFvQ9o,916
257
259
  simtools/schemas/model_parameters/flasher_type.schema.yml,sha256=YiACuxCkUn-llJ5KuiqVo_wUxQcp6X4G3YnwHA6WOW8,685
258
260
  simtools/schemas/model_parameters/flasher_var_photons.schema.yml,sha256=iMT9UfYad9EzVn0582aJltzzTXNl4H12RZO_zCi8FJY,796
259
261
  simtools/schemas/model_parameters/flasher_wavelength.schema.yml,sha256=CQ0GARblgMunkn9iRmbpdhJiYq1vcVRbUBQEJJHYdRQ,889
@@ -375,41 +377,42 @@ simtools/schemas/model_parameters/transit_time_random.schema.yml,sha256=M9VdVDXo
375
377
  simtools/schemas/model_parameters/trigger_current_limit.schema.yml,sha256=WTz-6fNrY9RSyVmAM7R7Bz-1gT0aJtl7GZ2urtDNEsk,677
376
378
  simtools/schemas/model_parameters/trigger_delay_compensation.schema.yml,sha256=U8ctXld0Ukz3JaVR0UGlxewzk-4RlsE3Gdq0hMW4qfQ,1476
377
379
  simtools/schemas/model_parameters/trigger_pixels.schema.yml,sha256=3-n2PBl9LQ4PBVOgR__XQpFYGUYYS_Jju_pvGSucTq8,1012
380
+ simtools/simtel/pulse_shapes.py,sha256=Z4Lz1EnwHZ4fwiWJrZPYOuQU1Khds0_-_pDjTpzvAyw,8224
378
381
  simtools/simtel/simtel_config_reader.py,sha256=_R1eLpZPqSu2MbiEfN1zYTdr8jJl1uameGyaxupACe0,15005
379
- simtools/simtel/simtel_config_writer.py,sha256=SUT_tw5rM1DxEhoC3phMQ_SSbvQXPh2IusvYPCwltKc,30865
382
+ simtools/simtel/simtel_config_writer.py,sha256=TFRaXXIPNLrOc2GHm8wrA2e_KeXUlyP4P6ZGSNHtl4s,34234
380
383
  simtools/simtel/simtel_io_event_histograms.py,sha256=M0EnmiS9AbzwLyZapkP2JJc3Dze40NoPTHKtWHxe1kg,17688
381
384
  simtools/simtel/simtel_io_event_reader.py,sha256=YPP4Cs4NncTIXxbu40veksnJ_3_cZ00-56kGoEuR8so,14595
382
- simtools/simtel/simtel_io_event_writer.py,sha256=8iK4qvCEjA3X8HB6QdcMWD1w0cC1UEdAm_XRuOM-sGE,12739
383
- simtools/simtel/simtel_io_file_info.py,sha256=T2xtdz-0pDZFf7cJw7brBxA9OHbDuBossTzY60RHFfw,1775
385
+ simtools/simtel/simtel_io_event_writer.py,sha256=uX_YGkH4orqQrtrowVZ-LQ96fumHMTFOHffi5EwUpLM,12749
384
386
  simtools/simtel/simtel_io_metadata.py,sha256=1BA32c-wHVD2MMfrXYdQuYPq2uPDyWBIpNGbwRMwjtc,6084
385
387
  simtools/simtel/simtel_table_reader.py,sha256=m4h74MuvnA15q1-4-esypvBKYPyeZS-1CqdvyJ4HVXc,15101
386
- simtools/simtel/simulator_array.py,sha256=wuY4Xfg7PXzN95hihXfAHosgUl1YN5FCdvfL6rvXoAU,8705
388
+ simtools/simtel/simulator_array.py,sha256=BcUuYN6fwgZnMWzu2H22LAmvAXqpHd9a2AtnajI0N2E,10545
387
389
  simtools/simtel/simulator_camera_efficiency.py,sha256=BQg1dAD7sqCJitBJiGSk7VOZCjF01OeUXk5qyh_0I18,11730
388
- simtools/simtel/simulator_light_emission.py,sha256=P3VEoxoXeIaJfIGstJ2rCNwfwJy9wGjA-eEnd-aXBNI,19967
390
+ simtools/simtel/simulator_light_emission.py,sha256=kk3MiZDANfS2b9WLvetNCg6aPQUliZ1im2Qoamjn_zQ,21944
389
391
  simtools/simtel/simulator_ray_tracing.py,sha256=ssgcFMSFZNIwzDeHuo7-fN-djNbru59a2pK-iZL33KA,11525
390
- simtools/testing/assertions.py,sha256=B8fc1x--ITmHy6aWXmZ_dg6k-bse10JbO-HUW7GcCD4,6350
391
- simtools/testing/configuration.py,sha256=kAjPzSDvgKJe-N2z5H3U2_fwjrbCZ20YDFqA1z921Mg,8291
392
+ simtools/testing/assertions.py,sha256=Edl0QaKeQENnvfWN1EVl1kAk42JQlB5Qjc9xQ_sKmnI,8031
393
+ simtools/testing/configuration.py,sha256=GjWrFqWzLRd6UG9kCEv0XzdRNcBbN3Zc7aGjoBFls3c,8273
392
394
  simtools/testing/helpers.py,sha256=LTVlkt36gQ0AtIK2mN6toI3vxwUPCjV5VMLA0nkS07U,1829
393
- simtools/testing/log_inspector.py,sha256=v5mtOz9tgBkCJuYYyDm8zV3x7yG7ctTrBNZCgox9l5w,1437
394
- simtools/testing/sim_telarray_metadata.py,sha256=VeqO_HcZ7QKBF4sghEG1TY5h2jTojUSxt8qfww-_aiw,7945
395
- simtools/testing/validate_output.py,sha256=f3LAPhdPEEZsiR5jY6C7vWK4EEfyXuWkk0Ju7DKQdL0,13300
395
+ simtools/testing/log_inspector.py,sha256=ZN-X52i1HLP7jGvw-8PYex23U64QwpvYPw8-OvVbhCc,1535
396
+ simtools/testing/sim_telarray_metadata.py,sha256=gcrmn93HPH3bLZdyjnBRZ_MZs4mA51mbQnBltKt1hhI,7937
397
+ simtools/testing/validate_output.py,sha256=ReaScg16pVXDZ7CX3AnGL7MHfA9uyE8zTe1xEjkP5Bk,14675
396
398
  simtools/utils/general.py,sha256=SNZNCzDnN2V-IbPsM5eqH6gcyuCf2lwx32vlAvuZhdQ,24000
397
399
  simtools/utils/geometry.py,sha256=VZlovI6E6p6EloqeM9kJ-YgbilZ_4dNIwoJ97evP5B0,9098
398
- simtools/utils/names.py,sha256=NBldXuTCEfiRSHaLT4gn2AH2y2bTW6QQIfyrC1GiO24,21836
400
+ simtools/utils/names.py,sha256=zujnLpGAoHQuCub1SmMv305sTNFSPSyey_QZjSHjdT0,21853
399
401
  simtools/utils/value_conversion.py,sha256=UNPNjqCeuYRscZ6UJbVK2VhbViU97TsYulc7s23Mwao,6482
400
- simtools/visualization/legend_handlers.py,sha256=QhUeZwuftA1VxfcMQ40KrwnPaD2FU95fNgZfX68YTJE,9792
401
- simtools/visualization/plot_array_layout.py,sha256=5gQa29ooajwftCuBTZ2eEKZjaqgw9RMRAiG1-D_2RpE,10613
402
+ simtools/visualization/legend_handlers.py,sha256=D-EK2WjJAkh9f0pqsfG21TofqchL6FSiiUIAzamTjuA,10573
403
+ simtools/visualization/plot_array_layout.py,sha256=8YslFtXRa5jtiuBUB3im0slifWC8T1gT6JLVnKm0B-8,16548
402
404
  simtools/visualization/plot_camera.py,sha256=dLXKHYfY_elqaKhj91HlntASoVixTrpc_Kf0jPU8RmU,11167
403
405
  simtools/visualization/plot_corsika_histograms.py,sha256=6DV0NT-b-yYZ9dbCgSU3UCUHJTTWkthBsXaYgrF7JAg,21874
404
406
  simtools/visualization/plot_incident_angles.py,sha256=kj_YcBrFRR6C9IUe4bhekfXR9UrPBmwXBtSvrFdMRf0,13424
407
+ simtools/visualization/plot_mirrors.py,sha256=nR8yDGCp2eQefMJNGyJdcaLAQl2klAAL6j3kgzcicmQ,26162
405
408
  simtools/visualization/plot_pixels.py,sha256=QsMsRbjXyP7i15zTGUZWKvkVo8RRw4Pp-47xPRerr9Y,20564
406
409
  simtools/visualization/plot_psf.py,sha256=0y3sIilriIqarFSv-yfod-1wtySTNBkq5ST79_8sFsU,25299
407
410
  simtools/visualization/plot_simtel_event_histograms.py,sha256=o9fPkKE1568MRumPVRyBs8ah5eyTN2mCLXseEwAy4RA,12751
408
411
  simtools/visualization/plot_simtel_events.py,sha256=zvfKboltaiz0yTPAv2_Is29hJlHbPMgofFhBEWNh0Ws,31450
409
412
  simtools/visualization/plot_tables.py,sha256=T3pfuj8YKeCZhef9KY2ne8dIzxnYnKiWDDN7aptjHXY,8662
410
413
  simtools/visualization/visualize.py,sha256=0vs7rt6OTCdrai7AO3bbd4sLuh1oEb_zAG_k53dgZVo,18815
411
- gammasimtools-0.24.0.dist-info/METADATA,sha256=i7KEt2rKteSU--2sgVex6Iqpzj15ByTWPjDUc03yGi4,5977
412
- gammasimtools-0.24.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
413
- gammasimtools-0.24.0.dist-info/entry_points.txt,sha256=F3seqX_FXRQhXNmk2Hcwi4YnWqTNQidJ06rw61RzcYc,5030
414
- gammasimtools-0.24.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
415
- gammasimtools-0.24.0.dist-info/RECORD,,
414
+ gammasimtools-0.25.0.dist-info/METADATA,sha256=jrVF1kyY2u2gWsEswvnWh3zKzvXy4fiXS5-KVi61MKk,5977
415
+ gammasimtools-0.25.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
416
+ gammasimtools-0.25.0.dist-info/entry_points.txt,sha256=9qlTxm47fhxhKRWChXjBEbwRi3sdCOo3RXTJAo478z4,5128
417
+ gammasimtools-0.25.0.dist-info/top_level.txt,sha256=9Yi7Q7aQX6alvpP2YGQtIYo208wdGkXUApHboEdj-ys,9
418
+ gammasimtools-0.25.0.dist-info/RECORD,,
@@ -16,6 +16,7 @@ simtools-derive-ctao-array-layouts = simtools.applications.derive_ctao_array_lay
16
16
  simtools-derive-mirror-rnda = simtools.applications.derive_mirror_rnda:main
17
17
  simtools-derive-photon-electron-spectrum = simtools.applications.derive_photon_electron_spectrum:main
18
18
  simtools-derive-psf-parameters = simtools.applications.derive_psf_parameters:main
19
+ simtools-derive-pulse-shape-parameters = simtools.applications.derive_pulse_shape_parameters:main
19
20
  simtools-derive-trigger-rates = simtools.applications.derive_trigger_rates:main
20
21
  simtools-docs-produce-array-element-report = simtools.applications.docs_produce_array_element_report:main
21
22
  simtools-docs-produce-calibration-reports = simtools.applications.docs_produce_calibration_reports: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.24.0'
32
- __version_tuple__ = version_tuple = (0, 24, 0)
31
+ __version__ = version = '0.25.0'
32
+ __version_tuple__ = version_tuple = (0, 25, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -5,6 +5,8 @@ from dataclasses import dataclass
5
5
  from pathlib import Path
6
6
 
7
7
  import simtools.utils.general as gen
8
+ from simtools import version
9
+ from simtools.db import db_handler
8
10
  from simtools.io import io_handler
9
11
 
10
12
 
@@ -83,6 +85,8 @@ def startup_application(parse_function, setup_io_handler=True, logger_name=None)
83
85
 
84
86
  io_handler_instance = io_handler.IOHandler() if setup_io_handler else None
85
87
 
88
+ _resolve_model_version_to_latest_patch(args_dict, db_config, logger)
89
+
86
90
  return ApplicationContext(
87
91
  args=args_dict,
88
92
  db_config=db_config,
@@ -116,3 +120,49 @@ def get_application_label(file_path):
116
120
  # label will be the filename without .py extension
117
121
  """
118
122
  return Path(file_path).stem
123
+
124
+
125
+ def _resolve_model_version_to_latest_patch(args_dict, db_config, logger):
126
+ """
127
+ Update model_version in args_dict to latest patch version if needed.
128
+
129
+ Updated to the latest patch version requires to setup a DB connection.
130
+
131
+ Parameters
132
+ ----------
133
+ args_dict : dict
134
+ Parsed command line arguments and configuration.
135
+ db_config : dict
136
+ Database configuration dictionary.
137
+ logger : logging.Logger
138
+ Logger instance for logging information.
139
+ """
140
+ mv = args_dict.get("model_version")
141
+ if not mv or not db_config:
142
+ return
143
+
144
+ versions = mv if isinstance(mv, list) else [mv]
145
+ kinds = [version.version_kind(v) for v in versions]
146
+ if all(k == version.MAJOR_MINOR_PATCH for k in kinds):
147
+ return
148
+
149
+ try:
150
+ db = db_handler.DatabaseHandler(db_config)
151
+ model_versions = db.get_model_versions()
152
+ except (ValueError, KeyError, OSError) as exc:
153
+ logger.warning(f"Could not connect to database, using version(s) as-is. Error: {exc}")
154
+ return
155
+
156
+ def resolve(v, k):
157
+ if k == version.MAJOR_MINOR_PATCH:
158
+ return v
159
+ try:
160
+ latest = version.resolve_version_to_latest_patch(v, model_versions)
161
+ logger.info(f"Resolved {v} to {latest}")
162
+ return latest
163
+ except (ValueError, KeyError) as exc:
164
+ logger.warning(f"Could not resolve {v}, using as-is. Error: {exc}")
165
+ return v
166
+
167
+ resolved = [resolve(v, k) for v, k in zip(versions, kinds)]
168
+ args_dict["model_version"] = resolved if isinstance(mv, list) else resolved[0]
@@ -187,6 +187,11 @@ def _parse():
187
187
  type=float,
188
188
  default=0.8,
189
189
  )
190
+ config.parser.add_argument(
191
+ "--cleanup",
192
+ help="Remove intermediate *.log and *.lis* files after optimization.",
193
+ action="store_true",
194
+ )
190
195
  return config.initialize(
191
196
  db_config=True,
192
197
  simulation_model=["telescope", "model_version", "parameter_version"],
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env python3
2
+ r"""Derive Gaussian sigma and exponential tau from specified rise/fall widths.
3
+
4
+ Solve (sigma, tau) for a Gaussian convolved with a causal exponential so the
5
+ pulse matches user-provided rise and fall widths between fractional amplitude
6
+ levels (e.g. 0.1-0.9 rise, 0.9-0.1 fall).
7
+
8
+ Command line arguments
9
+ ----------------------
10
+ site (str, required)
11
+ North or South.
12
+ telescope (str, required)
13
+ Telescope model name.
14
+ model_version (str, required)
15
+ Model version.
16
+ parameter_version (str, required)
17
+ Parameter version.
18
+ rise_width_ns (float, required)
19
+ Rising-edge width between rise_range fractions (ns).
20
+ fall_width_ns (float, required)
21
+ Falling-edge width between fall_range fractions (ns).
22
+ rise_range (float float, optional)
23
+ Fractional amplitudes (low high) for rise width (default: 0.1 0.9).
24
+ fall_range (float float, optional)
25
+ Fractional amplitudes (high low) for fall width (default: 0.9 0.1).
26
+ dt_ns (float, optional)
27
+ Time sampling step (ns). Default: 0.1.
28
+ time_margin_ns (float, optional)
29
+ Margin added at both ends of readout window. Default: 5.
30
+
31
+
32
+ Example
33
+ -------
34
+ Derive parameters for a pulse with 2.5 ns rise (10-90%) and
35
+ 5 ns fall (90-10%) for LSTN-01:
36
+
37
+ .. code-block:: console
38
+
39
+ simtools-derive-pulse-shape-parameters \
40
+ --site North \
41
+ --telescope MSTx-NectarCam \
42
+ --model_version 7.0 \
43
+ --parameter_version 1.0.0 \
44
+ --rise_width_ns 2.5 \
45
+ --fall_width_ns 5.0 \
46
+ --rise_range 0.1 0.9 \
47
+ --fall_range 0.9 0.1 \
48
+ --dt_ns 0.1 \
49
+ --time_margin_ns 10
50
+ """
51
+
52
+ import logging
53
+
54
+ import simtools.data_model.model_data_writer as writer
55
+ from simtools.application_control import get_application_label, startup_application
56
+ from simtools.configuration import configurator
57
+ from simtools.model.model_utils import initialize_simulation_models
58
+ from simtools.simtel.pulse_shapes import solve_sigma_tau_from_rise_fall
59
+
60
+
61
+ def _parse():
62
+ """Parse command line configuration for parameter derivation."""
63
+ config = configurator.Configurator(
64
+ label=get_application_label(__file__),
65
+ description=(
66
+ "Derive Gaussian sigma and exponential tau from rise/fall width specifications."
67
+ ),
68
+ )
69
+
70
+ config.parser.add_argument(
71
+ "--rise_width_ns",
72
+ help="Wdth on the rising edge in ns between rise_range fractions.",
73
+ type=float,
74
+ required=True,
75
+ )
76
+ config.parser.add_argument(
77
+ "--fall_width_ns",
78
+ help="Width on the falling edge in ns between fall_range fractions.",
79
+ type=float,
80
+ required=True,
81
+ )
82
+ config.parser.add_argument(
83
+ "--rise_range",
84
+ help="Fractional amplitudes (low high) for rise width, e.g. 0.1 0.9",
85
+ type=float,
86
+ nargs=2,
87
+ default=[0.1, 0.9],
88
+ required=False,
89
+ )
90
+ config.parser.add_argument(
91
+ "--fall_range",
92
+ help="Fractional amplitudes (high low) for fall width, e.g. 0.9 0.1",
93
+ type=float,
94
+ nargs=2,
95
+ default=[0.9, 0.1],
96
+ required=False,
97
+ )
98
+ config.parser.add_argument(
99
+ "--dt_ns",
100
+ help="Time sampling step in ns used by the solver.",
101
+ type=float,
102
+ default=0.1,
103
+ required=False,
104
+ )
105
+ config.parser.add_argument(
106
+ "--time_margin_ns",
107
+ help=(
108
+ "Margin (ns) added to both ends of the instrument readout window when deriving the "
109
+ "internal time window."
110
+ ),
111
+ type=float,
112
+ default=10.0,
113
+ required=False,
114
+ )
115
+
116
+ return config.initialize(
117
+ db_config=True,
118
+ simulation_model=["site", "telescope", "model_version", "parameter_version"],
119
+ output=True,
120
+ )
121
+
122
+
123
+ def main():
124
+ """Run parameter derivation and write results."""
125
+ app_context = startup_application(_parse)
126
+ log = logging.getLogger(__name__)
127
+
128
+ rise_width_ns = app_context.args["rise_width_ns"]
129
+ fall_width_ns = app_context.args["fall_width_ns"]
130
+ rise_range = tuple(app_context.args["rise_range"])
131
+ fall_range = tuple(app_context.args["fall_range"])
132
+ dt_ns = app_context.args["dt_ns"]
133
+ time_margin_ns = app_context.args["time_margin_ns"]
134
+ site = app_context.args["site"]
135
+ label = app_context.args.get("label") or get_application_label(__file__)
136
+ telescope_model, _, _ = initialize_simulation_models(
137
+ label=label,
138
+ db_config=app_context.db_config,
139
+ model_version=app_context.args["model_version"],
140
+ site=site,
141
+ telescope_name=app_context.args["telescope"],
142
+ )
143
+ fadc_sum_bins = telescope_model.get_parameter_value("fadc_sum_bins")
144
+
145
+ window_ns = fadc_sum_bins + time_margin_ns
146
+ t_start_ns = -window_ns
147
+ t_stop_ns = window_ns
148
+
149
+ sigma_ns, tau_ns = solve_sigma_tau_from_rise_fall(
150
+ rise_width_ns=rise_width_ns,
151
+ fall_width_ns=fall_width_ns,
152
+ dt_ns=dt_ns,
153
+ rise_range=rise_range,
154
+ t_start_ns=t_start_ns,
155
+ t_stop_ns=t_stop_ns,
156
+ )
157
+ # Apply reasonable rounding for output precision.
158
+ sigma_ns = round(sigma_ns, 4)
159
+ tau_ns = round(tau_ns, 4)
160
+
161
+ log.info(
162
+ f"Derived pulse parameters: sigma={sigma_ns:.6g} ns, tau={tau_ns:.6g} ns "
163
+ f"(rise={rise_width_ns} ns @ {rise_range}, fall={fall_width_ns} ns @ {fall_range})"
164
+ )
165
+
166
+ output_path = app_context.args.get("output_path")
167
+ instrument = app_context.args.get("telescope")
168
+ parameter_version = app_context.args.get("parameter_version")
169
+
170
+ writer.ModelDataWriter.dump_model_parameter(
171
+ parameter_name="flasher_pulse_width",
172
+ value=sigma_ns,
173
+ instrument=instrument,
174
+ parameter_version=parameter_version,
175
+ output_file="flasher_pulse_width.json",
176
+ output_path=output_path,
177
+ unit="ns",
178
+ )
179
+ writer.ModelDataWriter.dump_model_parameter(
180
+ parameter_name="flasher_pulse_exp_decay",
181
+ value=tau_ns,
182
+ instrument=instrument,
183
+ parameter_version=parameter_version,
184
+ output_file="flasher_pulse_exp_decay.json",
185
+ output_path=output_path,
186
+ unit="ns",
187
+ )
188
+ log.info(
189
+ f"Wrote model parameter files flasher_pulse_width.json and "
190
+ f"flasher_pulse_exp_decay.json (sigma={sigma_ns:.6g} ns, tau={tau_ns:.6g} ns)"
191
+ )
192
+
193
+
194
+ if __name__ == "__main__":
195
+ main()
@@ -62,6 +62,17 @@ highlighted_array_elements : list, optional
62
62
  List of array elements to plot with red circles around them.
63
63
  legend_location : str, optional
64
64
  Location of the legend (default "best").
65
+ bounds : str, optional
66
+ Axis bounds mode. Use "symmetric" for +-R with padding (default) or "exact" for
67
+ per-axis min/max bounds.
68
+ padding : float, optional
69
+ Fractional padding applied around computed extents in both modes (default 0.1).
70
+ x_lim : tuple(float, float), optional
71
+ Explicit x-axis limits [xmin, xmax] in meters. When provided, overrides derived limits
72
+ and filters plotted elements by x.
73
+ y_lim : tuple(float, float), optional
74
+ Explicit y-axis limits [ymin, ymax] in meters. When provided, overrides derived limits
75
+ and filters plotted elements by y.
65
76
 
66
77
  Examples
67
78
  --------
@@ -89,6 +100,20 @@ Plot layout from a file with a list of telescopes:
89
100
  simtools-plot-array-layout
90
101
  --array_layout_file tests/resources/telescope_positions-North-ground.ecsv
91
102
 
103
+ Use exact bounds with default padding:
104
+
105
+ .. code-block:: console
106
+
107
+ simtools-plot-array-layout --array_layout_name alpha \
108
+ --site North --model_version 6.0.0 --bounds exact
109
+
110
+ Use symmetric bounds with custom padding:
111
+
112
+ .. code-block:: console
113
+
114
+ simtools-plot-array-layout --array_layout_name alpha \
115
+ --site North --model_version 6.0.0 --bounds symmetric --padding 0.15
116
+
92
117
  Plot layout from a parameter file with a list of telescopes:
93
118
 
94
119
  .. code-block:: console
@@ -173,6 +198,24 @@ def _parse():
173
198
  required=False,
174
199
  default=None,
175
200
  )
201
+ config.parser.add_argument(
202
+ "--x_lim",
203
+ help="Explicit x-axis limits [xmin xmax] in meters.",
204
+ type=float,
205
+ nargs=2,
206
+ required=False,
207
+ default=None,
208
+ metavar=("XMIN", "XMAX"),
209
+ )
210
+ config.parser.add_argument(
211
+ "--y_lim",
212
+ help="Explicit y-axis limits [ymin ymax] in meters.",
213
+ type=float,
214
+ nargs=2,
215
+ required=False,
216
+ default=None,
217
+ metavar=("YMIN", "YMAX"),
218
+ )
176
219
  config.parser.add_argument(
177
220
  "--array_layout_name_background",
178
221
  help="Name of the background layout array (e.g., test_layout, alpha, 4mst, etc.).",
@@ -201,12 +244,27 @@ def _parse():
201
244
  help=(
202
245
  "Location of the legend (e.g., 'best', 'upper right', 'upper left', "
203
246
  "'lower left', 'lower right', 'right', 'center left', 'center right', "
204
- "'lower center', 'upper center', 'center')."
247
+ "'lower center', 'upper center', 'center', 'no_legend')."
205
248
  ),
206
249
  type=str,
207
250
  required=False,
208
251
  default="best",
209
252
  )
253
+ config.parser.add_argument(
254
+ "--bounds",
255
+ help=("Axis bounds mode: 'symmetric' uses +-R with padding, 'exact' uses per-axis min/max"),
256
+ type=str,
257
+ choices=["symmetric", "exact"],
258
+ required=False,
259
+ default="symmetric",
260
+ )
261
+ config.parser.add_argument(
262
+ "--padding",
263
+ help=("Fractional padding applied around computed extents (used for both modes)."),
264
+ type=float,
265
+ required=False,
266
+ default=0.1,
267
+ )
210
268
  return config.initialize(
211
269
  db_config=True,
212
270
  simulation_model=[
@@ -305,6 +363,10 @@ def main():
305
363
  grayed_out_elements=app_context.args["grayed_out_array_elements"],
306
364
  highlighted_elements=app_context.args["highlighted_array_elements"],
307
365
  legend_location=app_context.args["legend_location"],
366
+ bounds_mode=app_context.args["bounds"],
367
+ padding=app_context.args["padding"],
368
+ x_lim=tuple(app_context.args["x_lim"]) if app_context.args["x_lim"] else None,
369
+ y_lim=tuple(app_context.args["y_lim"]) if app_context.args["y_lim"] else None,
308
370
  )
309
371
  site_string = ""
310
372
  if layout.get("site") is not None:
@@ -29,8 +29,9 @@ Example Usage
29
29
  .. code-block:: console
30
30
 
31
31
  simtools-simulate-flasher --run_mode full_simulation \
32
- --light_source MSFx-FlashCam --model_version 6.0.0 \
33
- --telescope MSTS-04 --site South
32
+ --light_source MSFx-NectarCam --model_version 6.0 \
33
+ --telescope MSTS-04 --site South --run_number 1 \
34
+ --array_layout_name 1mst
34
35
 
35
36
  Command Line Arguments
36
37
  ----------------------