ATLAS Offline Software
AtlRunQueryIOV.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 
3 
4 from functools import total_ordering
5 from PyCool import cool
6 import time
7 
8 @total_ordering
9 class 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 
67 class IOVRange:
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 
python.utils.AtlRunQueryIOV.IOVRange.isInRange
def isInRange(self, iovtime)
Definition: AtlRunQueryIOV.py:111
python.utils.AtlRunQueryIOV.IOVTime.__lt__
def __lt__(self, other)
Definition: AtlRunQueryIOV.py:38
python.utils.AtlRunQueryIOV.IOVRange
Definition: AtlRunQueryIOV.py:67
python.utils.AtlRunQueryIOV.IOVRange.__eq__
def __eq__(self, other)
Definition: AtlRunQueryIOV.py:102
python.utils.AtlRunQueryIOV.IOVRange.overlaps
def overlaps(self, o)
Definition: AtlRunQueryIOV.py:114
python.utils.AtlRunQueryIOV.IOVTime.timerunlb
def timerunlb(self)
Definition: AtlRunQueryIOV.py:57
python.utils.AtlRunQueryIOV.IOVTime.__init__
def __init__(self, run=None, lb=None, timerunlb=None, timebased=False)
Definition: AtlRunQueryIOV.py:10
python.utils.AtlRunQueryIOV.IOVTime.inRange
def inRange(self, iovrange)
Definition: AtlRunQueryIOV.py:64
python.utils.AtlRunQueryIOV.IOVTime
Definition: AtlRunQueryIOV.py:9
python.utils.AtlRunQueryIOV.IOVTime.time
time
Definition: AtlRunQueryIOV.py:15
python.utils.AtlRunQueryIOV.IOVRange.__init__
def __init__(self, obj=None, starttime=None, endtime=None, runStart=None, lbStart=None, runEnd=None, lbEnd=None, timebased=False)
Definition: AtlRunQueryIOV.py:68
python.utils.AtlRunQueryIOV.IOVRange.__repr__
def __repr__(self)
Definition: AtlRunQueryIOV.py:99
python.utils.AtlRunQueryIOV.IOVRange.length
def length(self)
Definition: AtlRunQueryIOV.py:108
python.utils.AtlRunQueryIOV.IOVTime.timebased
timebased
Definition: AtlRunQueryIOV.py:12
python.utils.AtlRunQueryIOV.IOVRange.startTime
startTime
Definition: AtlRunQueryIOV.py:70
python.utils.AtlRunQueryIOV.IOVTime.lb
lb
Definition: AtlRunQueryIOV.py:14
python.utils.AtlRunQueryIOV.IOVTime.__eq__
def __eq__(self, other)
Definition: AtlRunQueryIOV.py:44
python.utils.AtlRunQueryIOV.IOVRange.__lt__
def __lt__(self, other)
Definition: AtlRunQueryIOV.py:105
python.utils.AtlRunQueryIOV.IOVTime.__sub__
def __sub__(self, other)
Definition: AtlRunQueryIOV.py:50
python.utils.AtlRunQueryIOV.IOVTime.__str__
def __str__(self)
Definition: AtlRunQueryIOV.py:29
python.utils.AtlRunQueryIOV.IOVTime.run
run
Definition: AtlRunQueryIOV.py:13
str
Definition: BTagTrackIpAccessor.cxx:11
python.utils.AtlRunQueryIOV.IOVRange.truncateToSingleRun
def truncateToSingleRun(self, runnr)
Definition: AtlRunQueryIOV.py:88
python.utils.AtlRunQueryIOV.IOVRange.endTime
endTime
Definition: AtlRunQueryIOV.py:71
python.utils.AtlRunQueryIOV.IOVRange.__str__
def __str__(self)
Definition: AtlRunQueryIOV.py:96