ATLAS Offline Software
Loading...
Searching...
No Matches
COOLRates.RateQueryWorker Class Reference
Inheritance diagram for COOLRates.RateQueryWorker:
Collaboration diagram for COOLRates.RateQueryWorker:

Public Member Functions

 __init__ (self)
 processQuery (self, rateBundle)
 getdb (self, dbName)
 getFolder (self, folderName)
 getdbName (self, folderName)
 convertTime (self, timeStart, timeEnd, timeConverter)
 close (self)
 __call__ (self, queueIn, queueOut)

Public Attributes

 db_svc = cool.DatabaseSvcFactory.databaseService()
 timeConverter = timeConverter
dict db = {}
dict folder = {}

Detailed Description

Definition at line 423 of file COOLRates.py.

Constructor & Destructor Documentation

◆ __init__()

COOLRates.RateQueryWorker.__init__ ( self)

Definition at line 424 of file COOLRates.py.

424 def __init__(self):
425 COOLQueryWorker.__init__(self)
426

Member Function Documentation

◆ __call__()

COOLRates.COOLQueryWorker.__call__ ( self,
queueIn,
queueOut )
inherited

Definition at line 133 of file COOLRates.py.

133 def __call__(self,queueIn,queueOut):
134 signal.signal(signal.SIGINT, signal.SIG_IGN)
135 try:
136 while True:
137 try:
138 queryBundle = queueIn.get(False,.001)
139 except Empty:
140 sleep(.001)
141 continue
142 if queryBundle is True:
143 break
144 resultBundle = self.processQuery(queryBundle)
145 queueOut.put(resultBundle)
146 except Exception as exception:
147 logger.critical(exception)
148
149 self.close()
150 queueOut.put(True)
151 return
152
153#====================================================================================================================
154

◆ close()

COOLRates.COOLQueryWorker.close ( self)
inherited

Definition at line 130 of file COOLRates.py.

130 def close(self):
131 for db in self.db.values(): db.closeDatabase()
132

◆ convertTime()

COOLRates.COOLQueryWorker.convertTime ( self,
timeStart,
timeEnd,
timeConverter )
inherited

Definition at line 98 of file COOLRates.py.

98 def convertTime(self,timeStart,timeEnd,timeConverter):
99 validRunLbs = [runLb for runLb,time in timeConverter.items() if timeStart<=time<=timeEnd]
100 return validRunLbs
101

◆ getdb()

COOLRates.COOLQueryWorker.getdb ( self,
dbName )
inherited

Definition at line 78 of file COOLRates.py.

78 def getdb(self,dbName):
79 if dbName not in self.db:
80 self.db[dbName] = self.db_svc.openDatabase(dbName,True)
81 return self.db.get(dbName)
82
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ getdbName()

COOLRates.COOLQueryWorker.getdbName ( self,
folderName )
inherited

Definition at line 90 of file COOLRates.py.

90 def getdbName(self,folderName):
91 if folderName.startswith('/LHC/DCS/'):
92 return 'oracle://ATLAS_COOLPROD;schema=ATLAS_COOLOFL_DCS;dbname=COMP200;'
93 if folderName.startswith('/TRIGGER/HLT/') and 'Rates' in folderName:
94 return "oracle://ATLAS_COOLPROD;schema=ATLAS_COOLONL_TRIGGER;dbname=MONP200;"
95 if not folderName.startswith('/'): folderName = '/'+folderName
96 return "oracle://ATLAS_COOLPROD;schema=ATLAS_COOLONL_{0};dbname=COMP200;".format(folderName.split("/")[1])
97

◆ getFolder()

COOLRates.COOLQueryWorker.getFolder ( self,
folderName )
inherited

Definition at line 83 of file COOLRates.py.

83 def getFolder(self,folderName):
84 if folderName not in self.folder:
85 dbName = self.getdbName(folderName)
86 db = self.getdb(dbName)
87 self.folder[folderName] = db.getFolder(folderName)
88 return self.folder.get(folderName)
89

◆ processQuery()

COOLRates.RateQueryWorker.processQuery ( self,
rateBundle )

Reimplemented from COOLRates.COOLQueryWorker.

Definition at line 427 of file COOLRates.py.

427 def processQuery(self,rateBundle):
428 result = {}
429 result[rateBundle.alias] = {}
430
431 #Get first result
432 firstResult = {}
433 folder = self.getFolder(rateBundle.folderName)
434 folder.setPrefetchAll(False)
435 folderIterator = folder.browseObjects(rateBundle.IoVStart,rateBundle.IoVEnd,rateBundle.channelSelection)
436 while folderIterator.goToNext():
437 currentSlice = folderIterator.currentRef()
438 firstResult[currentSlice.since()]=float(currentSlice.payloadValue(rateBundle.payloadName))
439 folderIterator.close()
440
441 #Get second result (if counts based)
442 if rateBundle.turnCountFolderName is not None:
443 secondResult = {}
444 folder = self.getFolder(rateBundle.turnCountFolderName)
445 folder.setPrefetchAll(False)
446 folderIterator = folder.browseObjects(rateBundle.IoVStart,rateBundle.IoVEnd,cool.ChannelSelection())
447 while folderIterator.goToNext():
448 currentSlice = folderIterator.currentRef()
449 secondResult[currentSlice.since()]=float(currentSlice.payloadValue(rateBundle.turnCountPayloadName))
450 folderIterator.close()
451 result[rateBundle.alias].update(dict((key,11246.0*firstResult.get(key)/secondResult.get(key)) for key in commonKeys([firstResult,secondResult])))
452 else:
453 result[rateBundle.alias].update(firstResult)
454 return result
455
456#====================================================================================================================
457

Member Data Documentation

◆ db

dict COOLRates.COOLQueryWorker.db = {}
inherited

Definition at line 75 of file COOLRates.py.

◆ db_svc

COOLRates.COOLQueryWorker.db_svc = cool.DatabaseSvcFactory.databaseService()
inherited

Definition at line 73 of file COOLRates.py.

◆ folder

dict COOLRates.COOLQueryWorker.folder = {}
inherited

Definition at line 76 of file COOLRates.py.

◆ timeConverter

COOLRates.COOLQueryWorker.timeConverter = timeConverter
inherited

Definition at line 74 of file COOLRates.py.


The documentation for this class was generated from the following file: