ATLAS Offline Software
Loading...
Searching...
No Matches
AtlRunQueryIOV.py
Go to the documentation of this file.
1# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2
3
4from functools import total_ordering
5from PyCool import cool
6import time
7
8@total_ordering
9class IOVTime:
10 def __init__(self, run=None, lb=None, timerunlb=None,timebased=False):
11 if isinstance(run,IOVTime):
12 self.timebased = run.timebased
13 self.run = run.run
14 self.lb = run.lb
15 self.time = run.time
16 else:
17 self.timebased=timebased
18 self.run = self.lb = self.time = None
19 if timebased:
20 self.time=timerunlb
21 else:
22 if timerunlb is not None:
23 self.run = timerunlb>>32
24 self.lb = timerunlb&0xFFFFFFFF
25 else:
26 self.run = run
27 self.lb = lb
28
29 def __str__(self):
30 if self.timebased:
31 try:
32 return "%s" % time.strftime("%a %b %d %Y %X",time.gmtime(self.time/1E9))
33 except ValueError:
34 return "infinity"
35 else:
36 return "%i/%i" % (self.run,self.lb)
37
38 def __lt__(self, other):
39 if self.timebased:
40 return self.time<other.time
41 else:
42 return self.run<other.run or self.run==other.run and self.lb<other.lb
43
44 def __eq__(self, other):
45 if self.timebased:
46 return self.time==other.time
47 else:
48 return self.run==other.run and self.lb==other.lb
49
50 def __sub__(self, other):
51 if isinstance(other, int):
52 return IOVTime(timerunlb=self.timerunlb()-1)
53 elif isinstance(other, IOVTime):
54 return self.timerunlb()-other.timerunlb()
55
56
57 def timerunlb(self):
58 if self.timebased:
59 return self.time
60 res = self.run<<32
61 res += self.lb
62 return res
63
64 def inRange(self,iovrange):
65 return iovrange.isInRange(self)
66
68 def __init__(self, obj=None, starttime=None, endtime=None, runStart=None, lbStart=None, runEnd=None, lbEnd=None, timebased=False):
69 if isinstance(obj, cool.IObject):
70 self.startTime = IOVTime(timerunlb=obj.since(), timebased=timebased)
71 self.endTime = IOVTime(timerunlb=obj.until(), timebased=timebased)
72 elif isinstance(obj, IOVRange):
73 self.startTime = obj.startTime
74 self.endTime = obj.endTime
75 elif isinstance(starttime, IOVTime) and isinstance(endtime, IOVTime):
76 self.startTime = starttime
77 self.endTime = endtime
78 elif isinstance(starttime,int) and isinstance(endtime,int):
79 self.startTime = IOVTime(timerunlb=starttime,timebased=timebased)
80 self.endTime = IOVTime(timerunlb=endtime,timebased=timebased)
81 elif runStart is not None and lbStart is not None and runEnd is not None and lbEnd is not None:
82 self.startTime = IOVTime(runStart, lbStart, timebased=False)
83 self.endTime = IOVTime(runEnd, lbEnd, timebased=False)
84 else:
85 print ("IOVRange.__init__: Can't interpret arguments")
86
87 @total_ordering
88 def truncateToSingleRun(self,runnr):
89 if self.startTime.run<runnr:
90 self.startTime.run=runnr
91 self.startTime.lb=1
92 if self.endTime.run>runnr:
93 self.endTime.run=runnr+1
94 self.endTime.lb=0
95
96 def __str__(self):
97 return "[%s, %s)" % (self.startTime,self.endTime)
98
99 def __repr__(self):
100 return str(self)
101
102 def __eq__(self, other):
103 return (self.startTime == other.startTime)
104
105 def __lt__(self, other):
106 return (self.startTime < other.startTime)
107
108 def length(self):
109 return "%2.1f" % ((self.endTime-self.startTime)/1.E9)
110
111 def isInRange(self, iovtime):
112 return self.startTime<=iovtime and iovtime<self.endTime
113
114 def overlaps(self, o):
115 if o.startTime>=self.endTime or o.endTime<=self.startTime:
116 return False
117 return True
118
119
__init__(self, obj=None, starttime=None, endtime=None, runStart=None, lbStart=None, runEnd=None, lbEnd=None, timebased=False)
__init__(self, run=None, lb=None, timerunlb=None, timebased=False)