lstosa 0.10.19__tar.gz → 0.11.0__tar.gz

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 (133) hide show
  1. {lstosa-0.10.19 → lstosa-0.11.0}/PKG-INFO +4 -5
  2. lstosa-0.11.0/environment-lstcam.yml +8 -0
  3. {lstosa-0.10.19 → lstosa-0.11.0}/environment.yml +7 -8
  4. lstosa-0.11.0/extra/history_files/sequence_LST1_04183.history +2 -0
  5. {lstosa-0.10.19 → lstosa-0.11.0}/pyproject.toml +3 -4
  6. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/PKG-INFO +4 -5
  7. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/SOURCES.txt +1 -0
  8. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/requires.txt +3 -4
  9. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/_version.py +2 -2
  10. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/configs/sequencer.cfg +9 -3
  11. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/conftest.py +19 -3
  12. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/high_level/significance.py +2 -0
  13. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/job.py +4 -1
  14. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/extract.py +1 -1
  15. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/tests/test_extract.py +2 -0
  16. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/paths.py +9 -5
  17. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/calibration_pipeline.py +5 -2
  18. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/closer.py +4 -2
  19. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/gain_selection.py +14 -15
  20. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/sequencer.py +17 -10
  21. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/sequencer_catB_tailcuts.py +23 -7
  22. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/show_run_summary.py +2 -2
  23. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/tests/test_osa_scripts.py +7 -6
  24. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/update_source_catalog.py +44 -24
  25. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_raw.py +4 -4
  26. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/utils.py +13 -0
  27. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/veto.py +1 -1
  28. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/workflow/tests/test_stages.py +0 -1
  29. lstosa-0.10.19/extra/history_files/sequence_LST1_04183.history +0 -2
  30. {lstosa-0.10.19 → lstosa-0.11.0}/.coveragerc +0 -0
  31. {lstosa-0.10.19 → lstosa-0.11.0}/.gitignore +0 -0
  32. {lstosa-0.10.19 → lstosa-0.11.0}/.mailmap +0 -0
  33. {lstosa-0.10.19 → lstosa-0.11.0}/.pre-commit-config.yaml +0 -0
  34. {lstosa-0.10.19 → lstosa-0.11.0}/.readthedocs.yml +0 -0
  35. {lstosa-0.10.19 → lstosa-0.11.0}/LICENSE +0 -0
  36. {lstosa-0.10.19 → lstosa-0.11.0}/MANIFEST.in +0 -0
  37. {lstosa-0.10.19 → lstosa-0.11.0}/README.md +0 -0
  38. {lstosa-0.10.19 → lstosa-0.11.0}/codemeta.json +0 -0
  39. {lstosa-0.10.19 → lstosa-0.11.0}/crontab/crontab.txt +0 -0
  40. {lstosa-0.10.19 → lstosa-0.11.0}/dev/mysql.py +0 -0
  41. {lstosa-0.10.19 → lstosa-0.11.0}/docs/Makefile +0 -0
  42. {lstosa-0.10.19 → lstosa-0.11.0}/docs/_static/logo_lstosa.png +0 -0
  43. {lstosa-0.10.19 → lstosa-0.11.0}/docs/authors.rst +0 -0
  44. {lstosa-0.10.19 → lstosa-0.11.0}/docs/components/index.rst +0 -0
  45. {lstosa-0.10.19 → lstosa-0.11.0}/docs/conf.py +0 -0
  46. {lstosa-0.10.19 → lstosa-0.11.0}/docs/configuration.rst +0 -0
  47. {lstosa-0.10.19 → lstosa-0.11.0}/docs/contribute.rst +0 -0
  48. {lstosa-0.10.19 → lstosa-0.11.0}/docs/documents/index.rst +0 -0
  49. {lstosa-0.10.19 → lstosa-0.11.0}/docs/howto/index.rst +0 -0
  50. {lstosa-0.10.19 → lstosa-0.11.0}/docs/index.rst +0 -0
  51. {lstosa-0.10.19 → lstosa-0.11.0}/docs/introduction/index.rst +0 -0
  52. {lstosa-0.10.19 → lstosa-0.11.0}/docs/introduction/reduction_steps_lstchain.png +0 -0
  53. {lstosa-0.10.19 → lstosa-0.11.0}/docs/jobs.rst +0 -0
  54. {lstosa-0.10.19 → lstosa-0.11.0}/docs/make.bat +0 -0
  55. {lstosa-0.10.19 → lstosa-0.11.0}/docs/nightsummary.rst +0 -0
  56. {lstosa-0.10.19 → lstosa-0.11.0}/docs/provenance.rst +0 -0
  57. {lstosa-0.10.19 → lstosa-0.11.0}/docs/references.rst +0 -0
  58. {lstosa-0.10.19 → lstosa-0.11.0}/docs/reports.rst +0 -0
  59. {lstosa-0.10.19 → lstosa-0.11.0}/docs/scripts/index.rst +0 -0
  60. {lstosa-0.10.19 → lstosa-0.11.0}/docs/troubleshooting/index.rst +0 -0
  61. {lstosa-0.10.19 → lstosa-0.11.0}/docs/utils.rst +0 -0
  62. {lstosa-0.10.19 → lstosa-0.11.0}/docs/veto.rst +0 -0
  63. {lstosa-0.10.19 → lstosa-0.11.0}/docs/workflow/LSTOSA_flow.png +0 -0
  64. {lstosa-0.10.19 → lstosa-0.11.0}/docs/workflow/index.rst +0 -0
  65. {lstosa-0.10.19 → lstosa-0.11.0}/extra/example_sequencer.txt +0 -0
  66. {lstosa-0.10.19 → lstosa-0.11.0}/extra/history_files/sequence_LST1_04183_failed.history +0 -0
  67. {lstosa-0.10.19 → lstosa-0.11.0}/extra/history_files/sequence_LST1_04183_oneline.history +0 -0
  68. {lstosa-0.10.19 → lstosa-0.11.0}/extra/history_files/sequence_LST1_04185.0001.history +0 -0
  69. {lstosa-0.10.19 → lstosa-0.11.0}/extra/history_files/sequence_LST1_04185.0010.history +0 -0
  70. {lstosa-0.10.19 → lstosa-0.11.0}/extra/sacct_output.csv +0 -0
  71. {lstosa-0.10.19 → lstosa-0.11.0}/extra/squeue_output.csv +0 -0
  72. {lstosa-0.10.19 → lstosa-0.11.0}/setup.cfg +0 -0
  73. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/dependency_links.txt +0 -0
  74. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/entry_points.txt +0 -0
  75. {lstosa-0.10.19 → lstosa-0.11.0}/src/lstosa.egg-info/top_level.txt +0 -0
  76. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/__init__.py +0 -0
  77. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/configs/__init__.py +0 -0
  78. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/configs/config.py +0 -0
  79. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/configs/datamodel.py +0 -0
  80. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/configs/options.py +0 -0
  81. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/high_level/__init__.py +0 -0
  82. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/high_level/selection_cuts.toml +0 -0
  83. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/high_level/tests/test_significance.py +0 -0
  84. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/__init__.py +0 -0
  85. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/database.py +0 -0
  86. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/nightsummary.py +0 -0
  87. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/set_source_coordinates.py +0 -0
  88. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/tests/test_database.py +0 -0
  89. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/tests/test_nightsummary.py +0 -0
  90. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/nightsummary/tests/test_source_coordinates.py +0 -0
  91. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/osadb.py +0 -0
  92. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/__init__.py +0 -0
  93. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/capture.py +0 -0
  94. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/config/definition.yaml +0 -0
  95. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/config/environment.yaml +0 -0
  96. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/config/logger.yaml +0 -0
  97. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/io.py +0 -0
  98. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/provenance/utils.py +0 -0
  99. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/raw.py +0 -0
  100. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/report.py +0 -0
  101. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/__init__.py +0 -0
  102. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/autocloser.py +0 -0
  103. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/copy_datacheck.py +0 -0
  104. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/datasequence.py +0 -0
  105. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/gainsel_webmaker.py +0 -0
  106. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/provprocess.py +0 -0
  107. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/reprocess_longterm.py +0 -0
  108. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/reprocessing.py +0 -0
  109. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/sequencer_webmaker.py +0 -0
  110. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/simulate_processing.py +0 -0
  111. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/scripts/tests/__init__.py +0 -0
  112. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/__init__.py +0 -0
  113. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_jobs.py +0 -0
  114. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_osa.py +0 -0
  115. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_osadb.py +0 -0
  116. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_paths.py +0 -0
  117. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_report.py +0 -0
  118. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/tests/test_veto.py +0 -0
  119. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/__init__.py +0 -0
  120. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/cliopts.py +0 -0
  121. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/iofile.py +0 -0
  122. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/logging.py +0 -0
  123. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/mail.py +0 -0
  124. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/register.py +0 -0
  125. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/tests/test_iofile.py +0 -0
  126. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/utils/tests/test_utils.py +0 -0
  127. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/version.py +0 -0
  128. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/webserver/__init__.py +0 -0
  129. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/webserver/utils.py +0 -0
  130. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/workflow/__init__.py +0 -0
  131. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/workflow/dl3.py +0 -0
  132. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/workflow/stages.py +0 -0
  133. {lstosa-0.10.19 → lstosa-0.11.0}/src/osa/workflow/tests/test_dl3.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lstosa
3
- Version: 0.10.19
3
+ Version: 0.11.0
4
4
  Summary: Onsite analysis pipeline for the CTA LST-1
5
5
  Author: María Láinez, José Enrique Ruiz, Lab Saha, Andrés Baquero, José Luis Contreras, Maximilian Linhoff
6
6
  Author-email: Daniel Morcuende <dmorcuen@ucm.es>
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Requires-Python: >=3.10
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
- Requires-Dist: astropy~=5.0
22
- Requires-Dist: lstchain>=0.10.15
21
+ Requires-Dist: astropy<8,>=6.1
22
+ Requires-Dist: lstchain>=0.11.0
23
23
  Requires-Dist: matplotlib
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: pandas
@@ -31,9 +31,8 @@ Requires-Dist: psutil
31
31
  Requires-Dist: click
32
32
  Requires-Dist: toml
33
33
  Requires-Dist: pymongo
34
- Requires-Dist: gammapy~=1.1
34
+ Requires-Dist: gammapy~=1.3
35
35
  Requires-Dist: tenacity
36
- Requires-Dist: lstcam_calib
37
36
  Provides-Extra: test
38
37
  Requires-Dist: pytest; extra == "test"
39
38
  Requires-Dist: pytest-cov; extra == "test"
@@ -0,0 +1,8 @@
1
+ name: lstcam-env
2
+ channels:
3
+ - conda-forge
4
+ dependencies:
5
+ - python=3.11
6
+ - pip
7
+ - pip:
8
+ - lstcam_calib
@@ -6,8 +6,8 @@ dependencies:
6
6
  - python=3.11
7
7
  - numpy
8
8
  - pip
9
- - astropy~=5.0
10
- - ctapipe~=0.19.2
9
+ - astropy>=6.1,<8
10
+ - ctapipe>=0.25.0
11
11
  - matplotlib
12
12
  - pyparsing
13
13
  - prov
@@ -15,19 +15,18 @@ dependencies:
15
15
  - pydot
16
16
  - pydotplus
17
17
  - psutil
18
- - gammapy=1.1
18
+ - gammapy=1.3
19
19
  - h5py
20
20
  - joblib~=1.2.0
21
21
  - click
22
22
  - pymongo
23
- - scikit-learn=1.2
24
- - ctapipe_io_lst >=0.25.1,<0.26a0
23
+ - scikit-learn=1.6
24
+ - ctapipe_io_lst>=0.26.0,<0.28.0a0
25
25
  - ctaplot~=0.6.4
26
- - pyirf~=0.10
27
- - lstchain>=0.10.15
26
+ - pyirf~=0.12.0
28
27
  - tenacity
29
28
  - pip:
30
- - lstcam_calib
29
+ - lstchain>=0.11.0
31
30
  # dev dependencies
32
31
  - pytest
33
32
  - pytest-cov
@@ -0,0 +1,2 @@
1
+ 04179 onsite_create_drs4_pedestal_file v0.7.0 2021-12-19 22:11 None None 0
2
+ 04183 onsite_create_calibration_file v0.7.0 2021-12-19 22:11 None None 0
@@ -32,8 +32,8 @@ classifiers = [
32
32
 
33
33
  requires-python = ">=3.10"
34
34
  dependencies = [
35
- "astropy~=5.0",
36
- "lstchain>=0.10.15",
35
+ "astropy>=6.1,<8",
36
+ "lstchain>=0.11.0",
37
37
  "matplotlib",
38
38
  "numpy",
39
39
  "pandas",
@@ -45,9 +45,8 @@ dependencies = [
45
45
  "click",
46
46
  "toml",
47
47
  "pymongo",
48
- "gammapy~=1.1",
48
+ "gammapy~=1.3",
49
49
  "tenacity",
50
- "lstcam_calib",
51
50
  ]
52
51
 
53
52
  dynamic = ["version"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lstosa
3
- Version: 0.10.19
3
+ Version: 0.11.0
4
4
  Summary: Onsite analysis pipeline for the CTA LST-1
5
5
  Author: María Láinez, José Enrique Ruiz, Lab Saha, Andrés Baquero, José Luis Contreras, Maximilian Linhoff
6
6
  Author-email: Daniel Morcuende <dmorcuen@ucm.es>
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Requires-Python: >=3.10
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
- Requires-Dist: astropy~=5.0
22
- Requires-Dist: lstchain>=0.10.15
21
+ Requires-Dist: astropy<8,>=6.1
22
+ Requires-Dist: lstchain>=0.11.0
23
23
  Requires-Dist: matplotlib
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: pandas
@@ -31,9 +31,8 @@ Requires-Dist: psutil
31
31
  Requires-Dist: click
32
32
  Requires-Dist: toml
33
33
  Requires-Dist: pymongo
34
- Requires-Dist: gammapy~=1.1
34
+ Requires-Dist: gammapy~=1.3
35
35
  Requires-Dist: tenacity
36
- Requires-Dist: lstcam_calib
37
36
  Provides-Extra: test
38
37
  Requires-Dist: pytest; extra == "test"
39
38
  Requires-Dist: pytest-cov; extra == "test"
@@ -7,6 +7,7 @@ LICENSE
7
7
  MANIFEST.in
8
8
  README.md
9
9
  codemeta.json
10
+ environment-lstcam.yml
10
11
  environment.yml
11
12
  pyproject.toml
12
13
  crontab/crontab.txt
@@ -1,5 +1,5 @@
1
- astropy~=5.0
2
- lstchain>=0.10.15
1
+ astropy<8,>=6.1
2
+ lstchain>=0.11.0
3
3
  matplotlib
4
4
  numpy
5
5
  pandas
@@ -11,9 +11,8 @@ psutil
11
11
  click
12
12
  toml
13
13
  pymongo
14
- gammapy~=1.1
14
+ gammapy~=1.3
15
15
  tenacity
16
- lstcam_calib
17
16
 
18
17
  [all]
19
18
  lstosa[dev,doc,test]
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.10.19'
21
- __version_tuple__ = version_tuple = (0, 10, 19)
20
+ __version__ = version = '0.11.0'
21
+ __version_tuple__ = version_tuple = (0, 11, 0)
@@ -9,7 +9,8 @@
9
9
  BASE: test_osa/test_files0
10
10
  # The directories below can be left untouched.
11
11
  MONITORING: %(BASE)s/monitoring
12
- R0_DIR: %(BASE)s/R0
12
+ R0_DIR: %(BASE)s/R0G
13
+ RAW_R0_DIR: %(BASE)s/R0
13
14
  DRIVE_DIR: %(MONITORING)s/DrivePositioning
14
15
  RUN_SUMMARY_DIR: %(MONITORING)s/RunSummary
15
16
  RUN_CATALOG: %(MONITORING)s/RunCatalog
@@ -31,9 +32,11 @@ CLOSER_DIR: %(OSA_DIR)s/Closer
31
32
  HIGH_LEVEL_DIR: %(OSA_DIR)s/HighLevel
32
33
  LONGTERM_DIR: %(OSA_DIR)s/DL1DataCheck_LongTerm
33
34
  MERGED_SUMMARY: %(OSA_DIR)s/Catalog/merged_RunSummary.ecsv
35
+ SOURCE_CATALOG: %(OSA_DIR)s/Catalog
34
36
  SEQUENCER_WEB_DIR: %(OSA_DIR)s/SequencerWeb
35
37
  GAIN_SELECTION_FLAG_DIR: %(OSA_DIR)s/GainSel
36
38
  GAIN_SELECTION_WEB_DIR: %(OSA_DIR)s/GainSelWeb
39
+ CALIB_ENV: /fefs/aswg/software/conda/envs/lstcam-env
37
40
 
38
41
  # To be set by the user. Using PROD-ID will overcome the automatic
39
42
  # fetching of lstchain version. Otherwise leave it empty (and without the colon symbol).
@@ -47,8 +50,8 @@ DL2_PROD_ID: model2
47
50
  # Calibration steps in calibration pipeline script
48
51
  #drs4_baseline: onsite_create_drs4_pedestal_file
49
52
  #charge_calibration: onsite_create_calibration_file
50
- drs4_baseline: lstcam_calib_onsite_create_drs4_pedestal_file
51
- charge_calibration: lstcam_calib_onsite_create_calibration_file
53
+ drs4_baseline: onsite_create_drs4_pedestal_file
54
+ charge_calibration: onsite_create_calibration_file
52
55
  catB_calibration: onsite_create_cat_B_calibration_file
53
56
  use_ff_heuristic_id: False
54
57
 
@@ -66,11 +69,14 @@ merge_dl1_datacheck: True
66
69
  apply_catB_calibration: False
67
70
  apply_standard_dl1b_config: False
68
71
  use_ff_heuristic_gain_selection: False
72
+ create_longterm_symlink: True
69
73
  dl1b_config: /software/lstchain/data/lstchain_standard_config.json
70
74
  dl2_config: /software/lstchain/data/lstchain_standard_config.json
71
75
  mc_prod: 20240918_v0.10.12_allsky_
72
76
  dl3_config: /software/lstchain/data/dl3_std_config.json
73
77
  max_tries: 3
78
+ use_lstcam_env_for_CatA_calib: False
79
+ use_lstcam_env_for_CatB_calib: False
74
80
 
75
81
  [MC]
76
82
  IRF_file: /path/to/irf.fits
@@ -26,7 +26,6 @@ from osa.nightsummary.nightsummary import run_summary_table
26
26
  from osa.scripts.tests.test_osa_scripts import run_program
27
27
  from osa.utils.utils import date_to_dir
28
28
  from datetime import datetime
29
- import lstchain
30
29
 
31
30
  date = datetime.fromisoformat("2020-01-17")
32
31
  nightdir = date_to_dir(date)
@@ -87,14 +86,14 @@ def drive_log(monitoring_dir):
87
86
 
88
87
  @pytest.fixture(scope="session")
89
88
  def calibration_dir(calibration_base_dir):
90
- directory = calibration_base_dir / "calibration" / nightdir / f"v{lstchain.__version__}"
89
+ directory = calibration_base_dir / "calibration" / nightdir / "v0.1.1"
91
90
  directory.mkdir(parents=True, exist_ok=True)
92
91
  return directory
93
92
 
94
93
 
95
94
  @pytest.fixture(scope="session")
96
95
  def drs4_baseline_dir(calibration_base_dir):
97
- directory = calibration_base_dir / "drs4_baseline" / nightdir / f"v{lstchain.__version__}"
96
+ directory = calibration_base_dir / "drs4_baseline" / nightdir / "v0.1.1"
98
97
  directory.mkdir(parents=True, exist_ok=True)
99
98
  return directory
100
99
 
@@ -146,6 +145,13 @@ def r0_dir(base_test_dir):
146
145
  return r0_directory
147
146
 
148
147
 
148
+ @pytest.fixture(scope="session")
149
+ def r0g_dir(base_test_dir):
150
+ r0_directory = base_test_dir / "R0G" / nightdir
151
+ r0_directory.mkdir(parents=True, exist_ok=True)
152
+ return r0_directory
153
+
154
+
149
155
  @pytest.fixture(scope="session")
150
156
  def r0_data(r0_dir):
151
157
  r0_files = []
@@ -156,6 +162,16 @@ def r0_data(r0_dir):
156
162
  return r0_files
157
163
 
158
164
 
165
+ @pytest.fixture(scope="session")
166
+ def r0g_data(r0g_dir):
167
+ r0g_files = []
168
+ for i in range(4, 8):
169
+ r0g_file = r0g_dir / f"LST-1.1.Run0180{i}.0000.fits.fz"
170
+ r0g_file.touch()
171
+ r0g_files.append(r0g_file)
172
+ return r0g_files
173
+
174
+
159
175
  @pytest.fixture(scope="session")
160
176
  def dl1b_subdir(running_analysis_dir):
161
177
  dl1ab_directory = running_analysis_dir / dl1_prod_id
@@ -206,6 +206,8 @@ def main(
206
206
  log.debug(f"Config: {config.resolve()}")
207
207
 
208
208
  # Initial setup of global parameters
209
+ if simulate:
210
+ options.simulate = True
209
211
  options.date = date
210
212
  flat_date = date_to_dir(date)
211
213
  options.tel_id = telescope
@@ -515,7 +515,10 @@ def calibration_sequence_job_template(sequence):
515
515
  # Get the job header template.
516
516
  job_header = job_header_template(sequence)
517
517
 
518
- commandargs = ["calibration_pipeline"]
518
+ if cfg.getboolean("lstchain", "use_lstcam_env_for_CatA_calib"):
519
+ commandargs = ["conda", "run", "-n", "lstcam-env", "calibration_pipeline"]
520
+ else:
521
+ commandargs = ["calibration_pipeline"]
519
522
 
520
523
  if options.verbose:
521
524
  commandargs.append("-v")
@@ -309,7 +309,7 @@ def get_source_list(date: datetime) -> dict:
309
309
 
310
310
  # Create a dictionary of sources and their corresponding sequences
311
311
  source_dict = {
312
- sequence.run: sequence.source_name
312
+ int(sequence.run): sequence.source_name
313
313
  for sequence in sequence_list
314
314
  if sequence.source_name is not None
315
315
  }
@@ -1,5 +1,7 @@
1
1
  from datetime import datetime
2
+ from osa.configs import options
2
3
 
4
+ options.test = True
3
5
  obs_date = datetime.fromisoformat("2020-01-17")
4
6
 
5
7
 
@@ -9,7 +9,6 @@ from typing import List
9
9
  import subprocess
10
10
  import time
11
11
  import json
12
- import lstchain
13
12
  from astropy.table import Table
14
13
  from lstchain.onsite import (find_systematics_correction_file,
15
14
  find_time_calibration_file)
@@ -103,10 +102,12 @@ def get_drs4_pedestal_filename(run_id: int, prod_id: str) -> Path:
103
102
  return files[-1] # Get the latest production among the major lstchain version
104
103
 
105
104
  date = utils.date_to_dir(get_run_date(run_id))
105
+ lstcam_env = Path(cfg.get("LST1", "CALIB_ENV"))
106
+ lstcam_calib_version = utils.get_lstcam_calib_version(lstcam_env)
106
107
  return (
107
108
  DRS4_PEDESTAL_BASEDIR
108
109
  / date
109
- / f"v{lstchain.__version__}/drs4_pedestal.Run{run_id:05d}.0000.h5"
110
+ / f"v{lstcam_calib_version}/drs4_pedestal.Run{run_id:05d}.0000.h5"
110
111
  ).resolve()
111
112
 
112
113
 
@@ -138,10 +139,12 @@ def get_calibration_filename(run_id: int, prod_id: str) -> Path:
138
139
  date = utils.date_to_dir(get_run_date(run_id))
139
140
  options.filters = utils.get_calib_filters(run_id)
140
141
 
142
+ lstcam_env = Path(cfg.get("LST1", "CALIB_ENV"))
143
+ lstcam_calib_version = utils.get_lstcam_calib_version(lstcam_env)
141
144
  return (
142
145
  CALIB_BASEDIR
143
146
  / date
144
- / f"v{lstchain.__version__}/calibration_filters_{options.filters}.Run{run_id:05d}.0000.h5"
147
+ / f"v{lstcam_calib_version}/calibration_filters_{options.filters}.Run{run_id:05d}.0000.h5"
145
148
  ).resolve()
146
149
 
147
150
 
@@ -263,7 +266,7 @@ def get_datacheck_files(pattern: str, directory: Path) -> list:
263
266
  def datacheck_directory(data_type: str, date: str) -> Path:
264
267
  """Returns the path to the datacheck directory given the data type."""
265
268
  if data_type in {"PEDESTAL", "CALIB"}:
266
- directory = Path(cfg.get("LST1", f"{data_type}_DIR")) / date / "pro/log"
269
+ directory = Path(cfg.get("LST1", f"CAT_A_{data_type}_DIR")) / date / "pro/log"
267
270
  elif data_type == "DL1AB":
268
271
  directory = Path(cfg.get("LST1", f"{data_type}_DIR")) / date / options.prod_id
269
272
  elif data_type == "LONGTERM":
@@ -358,7 +361,8 @@ def get_latest_version_file(longterm_files: List[str]) -> Path:
358
361
  return max(
359
362
  longterm_files,
360
363
  key=lambda path: int(path.parents[1].name.split(".")[1])
361
- if path.parents[1].name.startswith("v")
364
+ if path.parents[1].name.startswith("v") and
365
+ re.match(r'^\d+\.\d+(\.\d+)?$', path.parents[1].name[1:])
362
366
  else "",
363
367
  )
364
368
 
@@ -19,6 +19,7 @@ from osa.paths import drs4_pedestal_exists, calibration_file_exists
19
19
  from osa.provenance.capture import trace
20
20
  from osa.utils.cliopts import calibration_pipeline_cliparsing
21
21
  from osa.utils.logging import myLogger
22
+ from osa.utils import utils
22
23
  from osa.workflow.stages import DRS4PedestalStage, ChargeCalibrationStage
23
24
 
24
25
  __all__ = [
@@ -37,8 +38,10 @@ def is_calibration_produced(drs4_pedestal_run_id: int, pedcal_run_id: int) -> bo
37
38
  Check if both daily calibration (DRS4 baseline and
38
39
  charge calibration) files are already produced.
39
40
  """
40
- return drs4_pedestal_exists(drs4_pedestal_run_id, options.prod_id) \
41
- and calibration_file_exists(pedcal_run_id, options.prod_id)
41
+ lstcam_env = Path(cfg.get("LST1", "CALIB_ENV"))
42
+ lstcam_calib_version = utils.get_lstcam_calib_version(lstcam_env)
43
+ return drs4_pedestal_exists(drs4_pedestal_run_id, f"v{lstcam_calib_version}") \
44
+ and calibration_file_exists(pedcal_run_id, f"v{lstcam_calib_version}")
42
45
 
43
46
 
44
47
  def drs4_pedestal_command(drs4_pedestal_run_id: int) -> list:
@@ -160,7 +160,8 @@ def post_process(seq_tuple):
160
160
  seq_list = seq_tuple[1]
161
161
 
162
162
  if dl1_datacheck_longterm_file_exits() and not options.test:
163
- create_longterm_symlink()
163
+ if cfg.getboolean("lstchain", "create_longterm_symlink"):
164
+ create_longterm_symlink()
164
165
 
165
166
  else:
166
167
  # Close the sequences
@@ -185,7 +186,8 @@ def post_process(seq_tuple):
185
186
  list_job_id = merge_dl1_datacheck(seq_list)
186
187
  longterm_job_id = daily_datacheck(daily_longterm_cmd(list_job_id))
187
188
  cherenkov_job_id = cherenkov_transparency(cherenkov_transparency_cmd(longterm_job_id))
188
- create_longterm_symlink(cherenkov_job_id)
189
+ if cfg.getboolean("lstchain", "create_longterm_symlink"):
190
+ create_longterm_symlink(cherenkov_job_id)
189
191
 
190
192
  time.sleep(600)
191
193
 
@@ -276,11 +276,10 @@ def apply_gain_selection(date: datetime, start: int, end: int, tool: str = None,
276
276
  data_runs = summary_table[summary_table["run_type"] == "DATA"]
277
277
  log.info(f"Found {len(data_runs)} DATA runs to which apply the gain selection")
278
278
 
279
- base_dir = Path(cfg.get("LST1", "BASE"))
280
279
  date_str = date_to_dir(date)
281
- r0_dir = base_dir / "R0" / date_str
282
- output_dir = base_dir / f"R0G/{date_str}"
283
- log_dir = base_dir / f"R0G/log/{date_str}"
280
+ r0_dir = Path(cfg.get("LST1", "RAW_R0_DIR")) / date_str
281
+ output_dir = Path(cfg.get("LST1", "R0_DIR")) / date_str
282
+ log_dir = Path(cfg.get("LST1", "R0_DIR")) / f"log/{date_str}"
284
283
  if not simulate:
285
284
  output_dir.mkdir(parents=True, exist_ok=True)
286
285
  log_dir.mkdir(parents=True, exist_ok=True)
@@ -356,9 +355,10 @@ def update_history_file(run_id: str, subrun: str, log_dir: Path, history_file: P
356
355
 
357
356
  def is_run_already_copied(date: datetime, run_id: int) -> bool:
358
357
  """Check if the R0 files of a given run have already been copied to the R0G directory."""
359
- base_dir = Path(cfg.get("LST1", "BASE"))
360
- r0_files = glob.glob(f"{base_dir}/R0/{date_to_dir(date)}/LST-1.?.Run{run_id:05d}.????.fits.fz")
361
- r0g_files = glob.glob(f"{base_dir}/R0G/{date_to_dir(date)}/LST-1.?.Run{run_id:05d}.????.fits.fz")
358
+ r0_dir = Path(cfg.get("LST1", "RAW_R0_DIR"))
359
+ r0g_dir = Path(cfg.get("LST1", "R0_DIR"))
360
+ r0_files = glob.glob(f"{r0_dir}/{date_to_dir(date)}/LST-1.?.Run{run_id:05d}.????.fits.fz")
361
+ r0g_files = glob.glob(f"{r0g_dir}/{date_to_dir(date)}/LST-1.?.Run{run_id:05d}.????.fits.fz")
362
362
  return len(r0_files)==len(r0g_files)
363
363
 
364
364
 
@@ -465,9 +465,10 @@ def check_failed_jobs(date: datetime):
465
465
  missing_runs = []
466
466
 
467
467
  date_str = date_to_dir(date)
468
- base_dir = Path(cfg.get("LST1", "BASE"))
469
- r0_files = glob.glob(f"{base_dir}/R0/{date_str}/LST-1.?.Run?????.????.fits.fz")
470
- r0g_files = glob.glob(f"{base_dir}/R0G/{date_str}/LST-1.?.Run?????.????.fits.fz")
468
+ r0_dir = Path(cfg.get("LST1", "RAW_R0_DIR")) / date_str
469
+ r0g_dir = Path(cfg.get("LST1", "R0_DIR")) / date_str
470
+ r0_files = glob.glob(f"{r0_dir}/LST-1.?.Run?????.????.fits.fz")
471
+ r0g_files = glob.glob(f"{r0g_dir}/LST-1.?.Run?????.????.fits.fz")
471
472
  all_r0_runs = [parse_r0_filename(i).run for i in r0_files]
472
473
  all_r0g_runs = [parse_r0_filename(i).run for i in r0g_files]
473
474
 
@@ -478,17 +479,15 @@ def check_failed_jobs(date: datetime):
478
479
 
479
480
  missing_runs.sort()
480
481
  if missing_runs:
481
- output_dir = base_dir / f"R0G/{date_str}/"
482
482
  log.info(
483
483
  f"Some runs are missing. Copying R0 files of runs {pd.Series(missing_runs).unique()} "
484
- f"directly to {output_dir}"
484
+ f"directly to {r0g_dir}"
485
485
  )
486
486
 
487
487
  for run in missing_runs:
488
-
489
- files = base_dir.glob(f"R0/{date_str}/LST-1.?.Run{run:05d}.????.fits.fz")
488
+ files = r0_dir.glob(f"LST-1.?.Run{run:05d}.????.fits.fz")
490
489
  for file in files:
491
- sp.run(["cp", file, output_dir])
490
+ sp.run(["cp", file, r0g_dir])
492
491
 
493
492
  GainSel_dir = Path(cfg.get("LST1", "GAIN_SELECTION_FLAG_DIR"))
494
493
  flagfile_dir = GainSel_dir / date_str
@@ -5,6 +5,7 @@ Orchestrator script that creates and execute the calibration sequence and
5
5
  prepares a SLURM job array which launches the data sequences for every subrun.
6
6
  """
7
7
 
8
+ import warnings
8
9
  import logging
9
10
  import os
10
11
  import sys
@@ -14,7 +15,15 @@ import datetime
14
15
  from osa import osadb
15
16
  from osa.configs import options
16
17
  from osa.configs.config import cfg
17
- from osa.job import (
18
+ from osa.veto import get_closed_list, get_veto_list
19
+ from osa.utils.logging import myLogger
20
+
21
+ warnings.filterwarnings(
22
+ "ignore",
23
+ message="pkg_resources is deprecated as an API.*",
24
+ category=UserWarning
25
+ )
26
+ from osa.job import ( # noqa: E402
18
27
  set_queue_values,
19
28
  prepare_jobs,
20
29
  submit_jobs,
@@ -24,19 +33,17 @@ from osa.job import (
24
33
  run_squeue,
25
34
  are_all_jobs_correctly_finished,
26
35
  )
27
- from osa.nightsummary.extract import (
36
+ from osa.nightsummary.extract import ( # noqa: E402
28
37
  build_sequences,
29
38
  extract_runs,
30
39
  extract_sequences
31
40
  )
32
- from osa.nightsummary.nightsummary import run_summary_table
33
- from osa.paths import analysis_path, destination_dir
34
- from osa.report import start
35
- from osa.utils.cliopts import sequencer_cli_parsing
36
- from osa.utils.logging import myLogger
37
- from osa.utils.utils import is_day_closed, gettag, date_to_iso
38
- from osa.veto import get_closed_list, get_veto_list
39
- from osa.scripts.gain_selection import GainSel_finished
41
+ from osa.nightsummary.nightsummary import run_summary_table # noqa: E402
42
+ from osa.paths import analysis_path, destination_dir # noqa: E402
43
+ from osa.report import start # noqa: E402
44
+ from osa.utils.cliopts import sequencer_cli_parsing # noqa: E402
45
+ from osa.utils.utils import is_day_closed, gettag, date_to_iso # noqa: E402
46
+ from osa.scripts.gain_selection import GainSel_finished # noqa: E402
40
47
 
41
48
  __all__ = [
42
49
  "single_process",
@@ -12,8 +12,13 @@ from osa.nightsummary.extract import get_last_pedcalib
12
12
  from osa.utils.cliopts import valid_date, set_default_date_if_needed
13
13
  from osa.utils.logging import myLogger
14
14
  from osa.job import run_sacct, get_sacct_output
15
- from osa.utils.utils import date_to_dir, get_calib_filters
16
- from osa.paths import catB_closed_file_exists, catB_calibration_file_exists, analysis_path
15
+ from osa.utils.utils import date_to_dir, get_calib_filters, get_lstchain_version
16
+ from osa.paths import (
17
+ catB_closed_file_exists,
18
+ catB_calibration_file_exists,
19
+ analysis_path,
20
+ get_major_version
21
+ )
17
22
 
18
23
  log = myLogger(logging.getLogger())
19
24
 
@@ -122,24 +127,35 @@ def launch_catB_calibration(run_id: int):
122
127
  return
123
128
 
124
129
  command = cfg.get("lstchain", "catB_calibration")
130
+ if cfg.getboolean("lstchain", "use_lstcam_env_for_CatB_calib"):
131
+ env_command = f"conda run -n lstcam-env {command}"
132
+ else:
133
+ env_command = command
125
134
  options.filters = get_calib_filters(run_id)
126
135
  base_dir = Path(cfg.get(options.tel_id, "BASE")).resolve()
127
136
  r0_dir = Path(cfg.get(options.tel_id, "R0_DIR")).resolve()
128
- interleaved_dir = Path(options.directory) / "interleaved"
129
137
  log_dir = Path(options.directory) / "log"
130
138
  catA_calib_run = get_last_pedcalib(options.date)
131
139
  slurm_account = cfg.get("SLURM", "ACCOUNT")
140
+ lstchain_version = get_major_version(get_lstchain_version())
141
+ analysis_dir = cfg.get("LST1", "ANALYSIS_DIR")
132
142
  cmd = ["sbatch", f"--account={slurm_account}", "--parsable",
133
143
  "-o", f"{log_dir}/catB_calibration_{run_id:05d}_%j.out",
134
144
  "-e", f"{log_dir}/catB_calibration_{run_id:05d}_%j.err",
135
- command,
136
- f"--run_number={run_id}",
145
+ env_command,
146
+ f"-r {run_id:05d}",
137
147
  f"--catA_calibration_run={catA_calib_run}",
138
- f"--base_dir={base_dir}",
148
+ "-b", base_dir,
139
149
  f"--r0-dir={r0_dir}",
140
- f"--interleaved-dir={interleaved_dir}",
141
150
  f"--filters={options.filters}",
142
151
  ]
152
+
153
+ if command=="onsite_create_cat_B_calibration_file":
154
+ cmd.append(f"--interleaved-dir={analysis_dir}")
155
+ elif command=="lstcam_calib_onsite_create_cat_B_calibration_file":
156
+ cmd.append(f"--dl1-dir={analysis_dir}")
157
+ cmd.append(f"--lstchain-version={lstchain_version[1:]}")
158
+
143
159
  if not options.simulate:
144
160
  job = sp.run(cmd, encoding="utf-8", capture_output=True, text=True, check=True)
145
161
  job_id = job.stdout.strip()
@@ -26,8 +26,8 @@ parser.add_argument(
26
26
  parser.add_argument(
27
27
  "--r0-path",
28
28
  type=Path,
29
- help="Path to the R0 files. Default is /fefs/aswg/data/real/R0",
30
- default=Path("/fefs/aswg/data/real/R0"),
29
+ help="Path to the R0 files. Default is /fefs/onsite/data/R0/LSTN-01/lst-arraydaq/events",
30
+ default=Path("/fefs/onsite/data/R0/LSTN-01/lst-arraydaq/events"),
31
31
  )
32
32
 
33
33
  parser.add_argument(
@@ -107,14 +107,14 @@ def test_simulate_processing(
107
107
 
108
108
  with open(json_file_dl1) as file:
109
109
  dl1 = yaml.safe_load(file)
110
- assert len(dl1["entity"]) == 42
110
+ assert len(dl1["entity"]) == 44
111
111
  assert len(dl1["activity"]) == 5
112
112
  assert len(dl1["used"]) == 15
113
113
  assert len(dl1["wasGeneratedBy"]) == 10
114
114
 
115
115
  with open(json_file_dl2) as file:
116
116
  dl2 = yaml.safe_load(file)
117
- assert len(dl2["entity"]) == 42
117
+ assert len(dl2["entity"]) == 44
118
118
  assert len(dl2["activity"]) == 5
119
119
  assert len(dl2["used"]) == 15
120
120
  assert len(dl2["wasGeneratedBy"]) == 10
@@ -189,7 +189,8 @@ def test_autocloser(running_analysis_dir):
189
189
 
190
190
 
191
191
  def test_closer(
192
- r0_data,
192
+ r0g_data,
193
+ run_catalog,
193
194
  running_analysis_dir,
194
195
  test_observed_data,
195
196
  run_summary_file,
@@ -210,7 +211,7 @@ def test_closer(
210
211
  if night_finished_flag.exists():
211
212
  night_finished_flag.unlink()
212
213
 
213
- for r0_file in r0_data:
214
+ for r0_file in r0g_data:
214
215
  assert r0_file.exists()
215
216
  for file in drs4_time_calibration_files:
216
217
  assert file.exists()
@@ -340,7 +341,7 @@ def test_drs4_pedestal_cmd(base_test_dir):
340
341
  from osa.scripts.calibration_pipeline import drs4_pedestal_command
341
342
 
342
343
  cmd = drs4_pedestal_command(drs4_pedestal_run_id="01804")
343
- r0_dir = base_test_dir / "R0"
344
+ r0_dir = base_test_dir / "R0G"
344
345
  expected_command = [
345
346
  cfg.get("lstchain", "drs4_baseline"),
346
347
  "-r",
@@ -357,7 +358,7 @@ def test_calibration_file_cmd(base_test_dir):
357
358
  from osa.scripts.calibration_pipeline import calibration_file_command
358
359
 
359
360
  cmd = calibration_file_command(drs4_pedestal_run_id="01804", pedcal_run_id="01809")
360
- r0_dir = base_test_dir / "R0"
361
+ r0_dir = base_test_dir / "R0G"
361
362
  expected_command = [
362
363
  cfg.get("lstchain", "charge_calibration"),
363
364
  "-p",