Coverage for src/km3dq_common/detector_status_library.py: 0%
46 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-25 11:58 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-25 11:58 +0000
1#!/usr/bin/env python3
2import sys
3import re
4import datetime
6det_last_run_time = {"D0ARCA001": {"run": 9115,
7 "time": "2021-03-24 09:00"},
8 "D0ARCA006": {"run": 10287,
9 "time": "2021-09-10 09:00"},
10 "D0ARCA009": {"run": 12269,
11 "time": "2022-06-01 09:00"},
12 "D0ARCA020": {"run": 13194,
13 "time": "2022-09-07 15:00"},
14 "D0ARCA021": {"run": 17664,
15 "time": "2023-09-11 15:00"},
16 "D0ARCA028": {"run": 1e5,
17 "time": "2030-01-01 09:00"},
18 "D_ORCA006": {"run": 11295,
19 "time": "2021-11-18 15:38"},
20 "D0ORCA010": {"run": 13210,
21 "time": "2022-05-10 12:00"},
22 "D0ORCA007": {"run": 13702,
23 "time": "2022-06-29 18:00"},
24 "D1ORCA013": {"run": 13960,
25 "time": "2022-07-26 09:00"},
26 "D0ORCA011": {"run": 14318,
27 "time": "2022-09-05 21:00"},
28 "D1ORCA011": {"run": 15146,
29 "time": "2022-12-06 03:00"},
30 "D0ORCA015": {"run": 16338,
31 "time": "2023-04-05 08:00"},
32 "D1ORCA015": {"run": 16514,
33 "time": "2023-04-26 21:00"},
34 "D0ORCA018": {"run": 19944,
35 "time": "2024-01-09 06:00"},
36 "D1ORCA019": {"run": 20473,
37 "time": "2024-06-15 15:45"},
38 "D0ORCA023": {"run": 1e5,
39 "time": "2030-01-01 09:00"}
40 }
42from km3dq_common.common_library import get_run_properties_from_db
44###############################################################################
45def date_to_datetime(d):
46 """
47 Convert a date-string "yyyy-mm-dd hh:mm" into a datetime
48 """
49 re_time = re.compile(r"(\d\d\d\d)-(\d\d)-(\d\d)\s(\d\d):(\d\d)")
51 spl_time = re_time.match(d)
52 if spl_time:
53 output = datetime.datetime(int(spl_time.group(1)),
54 int(spl_time.group(2)),
55 int(spl_time.group(3)),
56 int(spl_time.group(4)),
57 int(spl_time.group(5)))
58 else:
59 print(f"Wrong datetime format {d}")
60 sys.exit()
62 return output
65###############################################################################
66def get_det_run_timerange(site):
67 # Return all the start/end of time/run for all detectors of a site
68 tr = {}
69 if site == "ARCA":
70 start_date_time = "2019-01-16 06:00"
71 start_run = 6473
72 else:
73 start_date_time = "2020-01-26 15:38"
74 start_run = 7223
75 tr["Any"] = {"start": start_date_time,
76 "start_run": start_run}
78 for i_det in det_last_run_time.keys():
79 if site not in i_det:
80 continue
81 # NB: det_last_run_time keys are chronologically ordered
82 tr[i_det] = {"start": start_date_time,
83 "end": det_last_run_time[i_det]["time"],
84 "start_run": start_run,
85 "end_run": det_last_run_time[i_det]["run"]}
87 tr["Any"]["end"] = det_last_run_time[i_det]["time"]
88 tr["Any"]["end_run"] = det_last_run_time[i_det]["run"]
90 start_date_time = tr[i_det]["end"]
91 start_run = tr[i_det]["end_run"]
93 return tr
95###############################################################################
96def get_det_run_from_date(site, date_str):
97 out = {"detector": "",
98 "run": 1e5}
99 tr = get_det_run_timerange(site)
101 date_time = date_to_datetime(date_str)
102 date_time_epoch = date_time.replace(tzinfo=datetime.timezone.utc).timestamp()
104 for i_det in tr.keys():
105 d_t_0 = date_to_datetime(tr[i_det]["start"])
106 d_t_1 = date_to_datetime(tr[i_det]["end"])
108 if d_t_0 <= date_time < d_t_1:
109 out["detector"] = i_det
110 continue
111 run_prop = get_run_properties_from_db(out["detector"], "PHYS")
113 for i_run in run_prop.keys():
114 if all((date_time_epoch < float(run_prop[i_run]['UNIXSTARTTIME'])/1000.,
115 i_run < out["run"])):
116 out["run"] = i_run
118 return out