lstosa 0.11.3__py3-none-any.whl → 0.11.5__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lstosa
3
- Version: 0.11.3
3
+ Version: 0.11.5
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>
@@ -1,9 +1,9 @@
1
1
  osa/__init__.py,sha256=crotf1NMTfNdZuCua_5T_jk3kvZrAAwVw4FPrfxv994,193
2
- osa/_version.py,sha256=3HI3wVakaLT6OqNDadrX8IIIRO-nmIN4eu3bFgy5iM8,513
2
+ osa/_version.py,sha256=ZyFxcHP5D9gYt6tCf5RRnkEsC8isbt9wg2nFTag5BOE,706
3
3
  osa/conftest.py,sha256=AdSHdWqjeMTgIeZEF8fdw6eSliySouivMWCPIqUV2os,24667
4
- osa/job.py,sha256=-W3t4_aP5dKRVy2BtyPE1eL4RRBfxIWYT_Ue88GrKXk,27866
4
+ osa/job.py,sha256=CunwW7xA4mWEocS6KkDZ1K6h_LYh_ePZMyGHyCa6CKg,27863
5
5
  osa/osadb.py,sha256=pkCuYbEG-moHG0uQHxwB7giQAv2XTld4HJ5gdn1F1hA,2422
6
- osa/paths.py,sha256=_3-avNABr7I2koiOo4MMDymi98l7JdIj1zUVbTjHdYg,18011
6
+ osa/paths.py,sha256=B8-HA39YmThl2Dd9p3OFuYSYJf9MWg4Qdc0zmAhWjOE,18100
7
7
  osa/raw.py,sha256=ZNIsuqfx5ljoz_hwhSuafdKf-wr8-cxRJmel-A2endg,1337
8
8
  osa/report.py,sha256=sL2V7n8Y_UUaSDbWJY2o4UxDb4FU5AaFIRR8R25DB8o,4634
9
9
  osa/version.py,sha256=9T2TtuGBQeOy5PJDxMCeGlqx5baxLaq47VmFTDc09z8,796
@@ -12,7 +12,7 @@ osa/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  osa/configs/config.py,sha256=cX0Vr4sorBVQ2KRqPIRSEGENKH_uC5lrgVHx1hp6YTk,1148
13
13
  osa/configs/datamodel.py,sha256=L_WRM91PBlMrtuE30akh7YR-56P0g9D994qzKSfhNJc,1950
14
14
  osa/configs/options.py,sha256=WbsyKhOs1Ud4Yt21O8KcISUvJYmhipa8vl_pxD_TZf4,558
15
- osa/configs/sequencer.cfg,sha256=VALe3KDii6UPOkEjI2ZsjV4nhswR8h_t4UUu85jWU4s,5624
15
+ osa/configs/sequencer.cfg,sha256=49m-umbLo9w4gCv1oEdvFqukCh1py2nJDduOu28b_Qc,5652
16
16
  osa/high_level/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  osa/high_level/selection_cuts.toml,sha256=ReSmcKtOPZY5JsZ9ExnxYdz7OrJEB8gghCbzHmeOyFg,128
18
18
  osa/high_level/significance.py,sha256=mMeG_y2wDnt0O2lSosYkSjaGZQl0V4GnuFrqKwSKSbE,9066
@@ -39,19 +39,19 @@ osa/scripts/calibration_pipeline.py,sha256=oWX2L9WIofVHp5qYsX3YMfwoslfiUgnXtWA2E
39
39
  osa/scripts/closer.py,sha256=vhoe9wkvPvMc5O_kXqAiBuWeqm_KrBpYzgb9zs9ZORw,21718
40
40
  osa/scripts/copy_datacheck.py,sha256=rAJu5-5oJxspynjYqVWLDKnXTF7Ib9xtzSf3_DiIHsk,3212
41
41
  osa/scripts/datasequence.py,sha256=0EZYlkX7ouaD66Ia2a5SWKbL0Fhlk8p4knKh0TG-2Gw,8592
42
- osa/scripts/gain_selection.py,sha256=PUG1J2V2SIboVKXJ-u4-h_XJyOGzfurazPu37M7lmhA,23238
42
+ osa/scripts/gain_selection.py,sha256=1-wUCKuwI0W7yjja951sTXTKsGBl5YunLYcT1TwhCMQ,23240
43
43
  osa/scripts/gainsel_webmaker.py,sha256=40_DX7RUmImX-31iqRTFPEUvdVXXPSKp0xMEJWuAu80,5006
44
44
  osa/scripts/provprocess.py,sha256=Zv8sHTOgGNuEzu1QPUF142VQbHyfOsrxO073-xA6KG8,19107
45
45
  osa/scripts/reprocess_longterm.py,sha256=wMfc3UVwickkGFiviIhOlB9ebMIqQPWoUrgg8hQ78Lg,2138
46
46
  osa/scripts/reprocessing.py,sha256=IL30e2McFA0EGbzvkTXdzmKJGBTbafYlCA-PsafyzyY,4571
47
- osa/scripts/sequencer.py,sha256=2t-fcD1pTvYV54vFSxxKID-L7pkRg7geXo-E43cnL6M,11927
47
+ osa/scripts/sequencer.py,sha256=hqkTXuYKvHHD6-s_wbzBulb2qpMF-pTLif0UOcIXu70,13150
48
48
  osa/scripts/sequencer_catB_tailcuts.py,sha256=zVBuCBiiIoO3HKHbJ0zqaDtuwxkxcziR4T5i-2WyDX8,10476
49
- osa/scripts/sequencer_webmaker.py,sha256=a9okC-l9UMJHELTLLM2Q933-JELFOhXEbbH1Kbp1E8g,4936
49
+ osa/scripts/sequencer_webmaker.py,sha256=NpH5MrX2pgbVdi1ntp2xX5Yka7Gwp5PuoykkH5-UQq4,4936
50
50
  osa/scripts/show_run_summary.py,sha256=ofznLdoFHKQB-TELD6g5zMqD_TE9M9BuJR12zHvNdXE,2518
51
51
  osa/scripts/simulate_processing.py,sha256=D3b0kjyUS6Lm7pkQNJ-tJzQMveTwoPabfBBW80RMqN0,6828
52
52
  osa/scripts/update_source_catalog.py,sha256=Po4KSBOQCAT2Do1DUu5wnKV48Dq_pONfvtD47hh8fYI,8277
53
53
  osa/scripts/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- osa/scripts/tests/test_osa_scripts.py,sha256=gyijYBzLQ19J1Az1mOdLm9bMxMwCkZryd78SfxCNtwg,15088
54
+ osa/scripts/tests/test_osa_scripts.py,sha256=HaKVW-E2Gs6vvJoozIeCAg8-sxyu9k5zwNLFDPpCVrs,15116
55
55
  osa/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  osa/tests/test_jobs.py,sha256=ozrMBjHujDhEMzEvJE7WynChqjbBTcORHsHmFXozeWk,16112
57
57
  osa/tests/test_osa.py,sha256=QCOsjUgPuNMHoef3Ym2sDXVjun2LaBrfKyroAIH-os8,415
@@ -76,9 +76,9 @@ osa/workflow/dl3.py,sha256=ZMXPrdJA0WOxDiHEW9sdM2vmYix8R3eSMTGc6o42yxg,9860
76
76
  osa/workflow/stages.py,sha256=ILg91VyNXcy--si7CpDa1UFRiugqIH6nKl10Ru2zZVc,7422
77
77
  osa/workflow/tests/test_dl3.py,sha256=81Vt4lNxNjdKi_ehzymqfFWFjncw7GuQcix9S0Yigaw,384
78
78
  osa/workflow/tests/test_stages.py,sha256=aslfOIjf-rvf3r9N7NtimaOKkVB6K1M3bidgHOzRkMs,3985
79
- lstosa-0.11.3.dist-info/LICENSE,sha256=h6iWot11EtMvaDaS_AvCHKLTNByO5wEbMyNj1c90y1c,1519
80
- lstosa-0.11.3.dist-info/METADATA,sha256=8E9rqpM04-dAuH_l9y14_F_n3FojBSeIwQ8oJLk3xTA,7302
81
- lstosa-0.11.3.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
82
- lstosa-0.11.3.dist-info/entry_points.txt,sha256=CzDKpLjZZQm8jJBxOVpMR8Czpgg_Yh-k6IPETp30VZE,1048
83
- lstosa-0.11.3.dist-info/top_level.txt,sha256=_Tj8zVHdrOoWZuuWTHbDpNofxW0imUmKdlXhnxsXJek,4
84
- lstosa-0.11.3.dist-info/RECORD,,
79
+ lstosa-0.11.5.dist-info/LICENSE,sha256=h6iWot11EtMvaDaS_AvCHKLTNByO5wEbMyNj1c90y1c,1519
80
+ lstosa-0.11.5.dist-info/METADATA,sha256=w662afh4R8FFG9Ln0iYtMWvvE8pCYXYcVj1rDezy_dA,7302
81
+ lstosa-0.11.5.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
82
+ lstosa-0.11.5.dist-info/entry_points.txt,sha256=CzDKpLjZZQm8jJBxOVpMR8Czpgg_Yh-k6IPETp30VZE,1048
83
+ lstosa-0.11.5.dist-info/top_level.txt,sha256=_Tj8zVHdrOoWZuuWTHbDpNofxW0imUmKdlXhnxsXJek,4
84
+ lstosa-0.11.5.dist-info/RECORD,,
osa/_version.py CHANGED
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '0.11.3'
21
- __version_tuple__ = version_tuple = (0, 11, 3)
31
+ __version__ = version = '0.11.5'
32
+ __version_tuple__ = version_tuple = (0, 11, 5)
33
+
34
+ __commit_id__ = commit_id = None
osa/configs/sequencer.cfg CHANGED
@@ -44,6 +44,7 @@ PROD_ID: v0.1.0
44
44
  # Change this to produce a different DL1b or DL2 sub-productions.
45
45
  # Otherwise, keep it empty to use the common PROD-ID
46
46
  DL1_PROD_ID: tailcut84
47
+ DL1_PROD_ID_PREFIX: tailcut
47
48
  DL2_PROD_ID: model2
48
49
 
49
50
  [lstchain]
osa/job.py CHANGED
@@ -722,7 +722,7 @@ def get_sacct_output(sacct_output: StringIO) -> pd.DataFrame:
722
722
 
723
723
  # Keep only the jobs corresponding to OSA sequences
724
724
  sacct_output = sacct_output[
725
- (sacct_output["JobName"].str.contains("batch"))
725
+ (~sacct_output["JobID"].str.contains(r"\."))
726
726
  | (sacct_output["JobName"].str.contains("LST1"))
727
727
  ]
728
728
 
osa/paths.py CHANGED
@@ -433,11 +433,12 @@ def get_dl1_prod_id(config_filename):
433
433
 
434
434
  picture_thresh = data["tailcuts_clean_with_pedestal_threshold"]["picture_thresh"]
435
435
  boundary_thresh = data["tailcuts_clean_with_pedestal_threshold"]["boundary_thresh"]
436
+ dl1_prod_id_prefix = cfg.get("LST1", "DL1_PROD_ID_PREFIX")
436
437
 
437
438
  if boundary_thresh == 4:
438
- return f"tailcut{picture_thresh}{boundary_thresh}"
439
+ return f"{dl1_prod_id_prefix}{picture_thresh}{boundary_thresh}"
439
440
  else:
440
- return f"tailcut{picture_thresh}{boundary_thresh:02d}"
441
+ return f"{dl1_prod_id_prefix}{picture_thresh}{boundary_thresh:02d}"
441
442
 
442
443
 
443
444
  def get_dl2_nsb_prod_id(rf_model: Path) -> str:
@@ -224,10 +224,10 @@ def launch_gainsel_for_data_run(
224
224
  else:
225
225
  log.warning(f"Gain selection failed for run {run_id:05d}.{subrun:04d}")
226
226
  elif gainsel_rc == "0":
227
- log.debug(f"Gain selection finished successfully for run {run_id:05d}.{subrun:04d},"
227
+ log.debug(f"Gain selection finished successfully for run {run_id:05d}.{subrun:04d}, "
228
228
  "no additional jobs will be submitted for this subrun.")
229
229
  else:
230
- log.debug("Creating and launching the gain selection sbatch script for subrun {run_id:05d}.{subrun:04d}")
230
+ log.debug(f"Creating and launching the gain selection sbatch script for subrun {run_id:05d}.{subrun:04d}")
231
231
  if not simulate:
232
232
  log_file = log_dir / f"r0_to_r0g_{run_id:05d}.{subrun:04d}.log"
233
233
  job_file = log_dir / f"gain_selection_{run_id:05d}.{subrun:04d}.sh"
osa/scripts/sequencer.py CHANGED
@@ -11,7 +11,7 @@ import os
11
11
  import sys
12
12
  from decimal import Decimal
13
13
  import datetime
14
-
14
+ import re
15
15
  from osa import osadb
16
16
  from osa.configs import options
17
17
  from osa.configs.config import cfg
@@ -50,6 +50,7 @@ __all__ = [
50
50
  "update_sequence_status",
51
51
  "get_status_for_sequence",
52
52
  "output_matrix",
53
+ "check_catB_status",
53
54
  "report_sequences",
54
55
  "update_job_info",
55
56
  ]
@@ -205,6 +206,34 @@ def update_sequence_status(seq_list):
205
206
  )
206
207
  seq.muonstatus = int(Decimal(get_status_for_sequence(seq, "MUON") * 100) / seq.subruns)
207
208
  seq.dl2status = int(Decimal(get_status_for_sequence(seq, "DL2") * 100))
209
+ seq.catbstatus = check_catB_status(seq)
210
+
211
+
212
+ def check_catB_status(seq):
213
+ catbstatus = "None"
214
+
215
+ if seq.type == "DATA":
216
+ directory = options.directory
217
+
218
+ closed_files = list(directory.glob(f"catB*{seq.run}*.closed"))
219
+ if closed_files:
220
+ catbstatus = "CLOSED"
221
+ else:
222
+ log_files = list(options.log_directory.glob(f"catB_calibration_{seq.run}_*.err"))
223
+ if log_files:
224
+ filename = sorted(log_files)[-1].name
225
+ match = re.search(f"catB_calibration_{seq.run}_(\d+).err", filename)
226
+ if match:
227
+ job_id = match.group(1)
228
+
229
+ sacct_output = run_sacct(job_id)
230
+ sacct_info = get_sacct_output(sacct_output)
231
+
232
+ if not sacct_info.empty:
233
+ catbstatus = sacct_info.iloc[0]["State"]
234
+
235
+ return catbstatus
236
+
208
237
 
209
238
 
210
239
  def get_status_for_sequence(sequence, data_level) -> int:
@@ -238,7 +267,10 @@ def get_status_for_sequence(sequence, data_level) -> int:
238
267
  elif data_level == "DATACHECK":
239
268
  try:
240
269
  directory = options.directory / sequence.dl1_prod_id
270
+ alternative_directory = destination_dir(concept="DATACHECK", create_dir=False, dl1_prod_id=sequence.dl1_prod_id)
241
271
  files = list(directory.glob(f"datacheck_dl1_LST-1*{sequence.run}*.h5"))
272
+ files += list(alternative_directory.glob(f"datacheck_dl1_LST-1*{sequence.run}*.h5"))
273
+
242
274
  except AttributeError:
243
275
  return 0
244
276
 
@@ -275,7 +307,7 @@ def report_sequences(sequence_list):
275
307
  "Exit",
276
308
  ]
277
309
  if options.tel_id in ["LST1", "LST2"]:
278
- header.extend(("DL1%", "MUONS%", "DL1AB%", "DATACHECK%", "DL2%"))
310
+ header.extend(("DL1%", "MUONS%", "CAT-B","DL1AB%", "DATACHECK%", "DL2%"))
279
311
  matrix = [header]
280
312
  for sequence in sequence_list:
281
313
  row_list = [
@@ -294,12 +326,13 @@ def report_sequences(sequence_list):
294
326
  sequence.exit,
295
327
  ]
296
328
  if sequence.type in ["DRS4", "PEDCALIB"]:
297
- row_list.extend((None, None, None, None, None))
329
+ row_list.extend((None, None, None, None, None, None))
298
330
  elif sequence.type == "DATA":
299
331
  row_list.extend(
300
332
  (
301
333
  sequence.dl1status,
302
334
  sequence.muonstatus,
335
+ sequence.catbstatus,
303
336
  sequence.dl1abstatus,
304
337
  sequence.datacheckstatus,
305
338
  sequence.dl2status,
@@ -107,7 +107,7 @@ def lines_to_matrix(lines: Iterable) -> list:
107
107
  matrix = []
108
108
  for line in lines:
109
109
  l_fields = line.split()
110
- if len(l_fields) == 18:
110
+ if len(l_fields) == 19:
111
111
  matrix.append(l_fields)
112
112
  return matrix
113
113
 
@@ -163,10 +163,10 @@ def test_simulated_sequencer(
163
163
  assert rc.stdout == dedent(
164
164
  f"""\
165
165
  =================================== Starting sequencer.py at {now} UTC for LST, Telescope: LST1, Date: 2020-01-17 ===================================
166
- Tel Seq Parent Type Run Subruns Source Action Tries JobID State CPU_time Exit DL1% MUONS% DL1AB% DATACHECK% DL2%
167
- LST1 1 None PEDCALIB 1809 5 None None None None None None None None None None None None
168
- LST1 2 1 DATA 1807 11 Crab None None None None None None 0 0 0 0 100
169
- LST1 3 1 DATA 1808 9 MadeUpSource None None None None None None 0 0 0 0 100
166
+ Tel Seq Parent Type Run Subruns Source Action Tries JobID State CPU_time Exit DL1% MUONS% CAT-B DL1AB% DATACHECK% DL2%
167
+ LST1 1 None PEDCALIB 1809 5 None None None None None None None None None None None None None
168
+ LST1 2 1 DATA 1807 11 Crab None None None None None None 0 0 None 0 0 100
169
+ LST1 3 1 DATA 1808 9 MadeUpSource None None None None None None 0 0 None 0 0 100
170
170
  """ # noqa: E501
171
171
  )
172
172