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

1#!/usr/bin/env python3 

2import sys 

3import re 

4import datetime 

5 

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 } 

41 

42from km3dq_common.common_library import get_run_properties_from_db 

43 

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)") 

50 

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() 

61 

62 return output 

63 

64 

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} 

77 

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"]} 

86 

87 tr["Any"]["end"] = det_last_run_time[i_det]["time"] 

88 tr["Any"]["end_run"] = det_last_run_time[i_det]["run"] 

89 

90 start_date_time = tr[i_det]["end"] 

91 start_run = tr[i_det]["end_run"] 

92 

93 return tr 

94 

95############################################################################### 

96def get_det_run_from_date(site, date_str): 

97 out = {"detector": "", 

98 "run": 1e5} 

99 tr = get_det_run_timerange(site) 

100 

101 date_time = date_to_datetime(date_str) 

102 date_time_epoch = date_time.replace(tzinfo=datetime.timezone.utc).timestamp() 

103 

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"]) 

107 

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") 

112 

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 

117 

118 return out