ATLAS Offline Software
Loading...
Searching...
No Matches
python.CaloCondTools Namespace Reference

Classes

class  CaloBlobReader
class  CaloBlobWriter

Functions

 getCaloPrefix ()
 getAthenaFolderDescr ()
 getAthenaFolderType (folderDescr)
 openDb (db, instance, mode="READONLY", schema="COOLOFL_CALO", sqlfn="caloSqlite.db")
 openDbConn (connStr, mode="READONLY")
 iovFromRunLumi (runNum, lbkNum)
 runLumiFromIov (iov)
 decodeTimeString (timeString)
 getCoolValidityKey (pointInTime, isSince=True)
 getCellHash (detectorId, part, module, sample, tower)

Variables

 g = cppyy.gbl
 log = getLogger("CaloCondTools")
int MINRUN = 0
int MINLBK = 0
 MAXRUN = cool.Int32Max
 MAXLBK = cool.UInt32Max
int UNIX2COOL = 1000000000
 UNIXTMAX = cool.Int32Max

Detailed Description

Python helper module for managing COOL DB connections and CaloCondBlobs. 

Function Documentation

◆ decodeTimeString()

python.CaloCondTools.decodeTimeString ( timeString)
Returns UNIX time stamp given an input time string

Definition at line 195 of file CaloCondTools.py.

195def decodeTimeString(timeString):
196 """
197 Returns UNIX time stamp given an input time string
198 """
199 return int(time.mktime(time.strptime(timeString,"%Y-%m-%d %H:%M:%S")))
200
201#
202#______________________________________________________________________

◆ getAthenaFolderDescr()

python.CaloCondTools.getAthenaFolderDescr ( )
Returns the run-lumi type folder description needed to read back the folder content
as a CondAttrListCollection in Athena.

Definition at line 40 of file CaloCondTools.py.

40def getAthenaFolderDescr():
41 """
42 Returns the run-lumi type folder description needed to read back the folder content
43 as a CondAttrListCollection in Athena.
44 """
45 desc ='<timeStamp>run-lumi</timeStamp>'
46 desc+='<addrHeader><address_header service_type="71" clid="1238547719" /></addrHeader>'
47 desc+='<typeName>CondAttrListCollection</typeName>'
48 return desc
49
50#
51#______________________________________________________________________

◆ getAthenaFolderType()

python.CaloCondTools.getAthenaFolderType ( folderDescr)

Definition at line 52 of file CaloCondTools.py.

52def getAthenaFolderType(folderDescr):
53 type = re.compile(".*<timeStamp>(.*)</timeStamp>.*").search(folderDescr)
54 if not type:
55 raise Exception("No folder type info found in \'%s\'" % folderDescr)
56 return type.groups()[0]
57
58#
59#______________________________________________________________________
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles
Definition hcg.cxx:739

◆ getCaloPrefix()

python.CaloCondTools.getCaloPrefix ( )
Returns the common Calo prefix used for all COOL folders

Definition at line 32 of file CaloCondTools.py.

32def getCaloPrefix():
33 """
34 Returns the common Calo prefix used for all COOL folders
35 """
36 return "/CALO/"
37
38#
39#______________________________________________________________________

◆ getCellHash()

python.CaloCondTools.getCellHash ( detectorId,
part,
module,
sample,
tower )
Returns cell subHash given partition,module,sample, and tower (TILE only)

Definition at line 236 of file CaloCondTools.py.

236def getCellHash(detectorId,part,module,sample,tower):
237 """
238 Returns cell subHash given partition,module,sample, and tower (TILE only)
239 """
240 if detectorId != 48:
241 raise Exception('getCellHash only available for TileCells.')
242 section = 0 # 1=LB* 2=EB* 3=ITC
243 side = 0 # 1=A-side -1=C-side
244 if part == 1 or part == 2:
245 section = 1
246 elif part == 3 or part == 4:
247 if sample == 3 or (sample==1 and tower==9) or (sample==2 and tower==8): # Gap and ITC
248 section = 3
249 else:
250 section = 2
251 if part%2 ==0:
252 side = -1
253 else:
254 side = 1
255 if section==0 or side==0 or module>63 or sample>3 or tower>15:
256 raise Exception('Non-physical cell specification')
257
258 # hash array for mod0 of entire TileCal. Use to determine cell hash for any cell
259 hash = [0, 1, -1, -1, 2, 3, -1, -1, 4, 5, 6, -1, 7, 8, -1, -1, 9, 10, 11, -1, 12, 13, -1, -1, 14, 15, 16, -1, 17, 18, -1, -1, 19, 20, 4416, -1, 21, 4417, -1, -1, -1, 2880, 2881, 4418, 2882, 2883, -1, 4419, 2884, 2885, 2886, -1, 2887, 2888, -1, 4420, 2889, 2890, -1, -1, 2891, -1, -1, 4421, 1408, 1409, 1410, -1, 1411, 1412, -1, -1, 1413, 1414, 1415, -1, 1416, 1417, -1, -1, 1418, 1419, 1420, -1, 1421, 1422, -1, -1, 1423, 1424, 1425, -1, 1426, 1427, -1, -1, 1428, 1429, 4800, -1, 1430, 4801, -1, -1, -1, 3648, 3649, 4802, 3650, 3651, -1, 4803, 3652, 3653, 3654, -1, 3655, 3656, -1, 4804, 3657, 3658, -1, -1, 3659, -1, -1, 4805]
260
261 # Section specific offset to be added to cell hash for module different from 0
262 # [LBC,LBA,EBC,EBA,ITC-C,ITC-A]
263 modOffset = [22,23,12,12,6,6]
264 if side==1:
265 sideOffset=1
266 else:
267 sideOffset=0
268
269 return hash[sideOffset*16*4+tower*4+sample]+modOffset[sideOffset+2*(section-1)]*module
270
271#======================================================================
272#===
273#=== CaloBlobReader
274#===
275#======================================================================
276
277#
278#______________________________________________________________________

◆ getCoolValidityKey()

python.CaloCondTools.getCoolValidityKey ( pointInTime,
isSince = True )
The interpretation of pointInTime depends on their type:
- tuple(int,int) : run and lbk number 
- integer        : Values are interpreted as unix time stamps
- string         : time stamp of format 'yyyy-mm-dd hh:mm:ss'

Definition at line 203 of file CaloCondTools.py.

203def getCoolValidityKey(pointInTime, isSince=True):
204 """
205 The interpretation of pointInTime depends on their type:
206 - tuple(int,int) : run and lbk number
207 - integer : Values are interpreted as unix time stamps
208 - string : time stamp of format 'yyyy-mm-dd hh:mm:ss'
209 """
210
211 validityKey = None
212
213 #=== string: convert to unix time and treat as latter
214 if isinstance(pointInTime, str):
215 pointInTime = decodeTimeString(pointInTime)
216
217 #=== integer: unix time stamp
218 if isinstance(pointInTime, int):
219 if pointInTime >=0:
220 validityKey = pointInTime * UNIX2COOL
221 else:
222 if isSince:
223 validityKey = int(time.time()) * UNIX2COOL
224 else :
225 validityKey = cool.ValidityKeyMax
226 #=== run-lumi tuple
227 elif isinstance(pointInTime, tuple):
228 validityKey = iovFromRunLumi(pointInTime[0],pointInTime[1])
229 #=== catch other types
230 else:
231 raise Exception("Unrecognized pointInTime type=%s" % type(pointInTime))
232 return cool.ValidityKey(validityKey)
233
234#
235#______________________________________________________________________

◆ iovFromRunLumi()

python.CaloCondTools.iovFromRunLumi ( runNum,
lbkNum )
Returns COOL timeStamp build from run and lumi block numbers

Definition at line 179 of file CaloCondTools.py.

179def iovFromRunLumi(runNum, lbkNum):
180 """
181 Returns COOL timeStamp build from run and lumi block numbers
182 """
183 return (int(runNum)<<32) + int(lbkNum)
184
185#
186#____________________________________________________________________

◆ openDb()

python.CaloCondTools.openDb ( db,
instance,
mode = "READONLY",
schema = "COOLOFL_CALO",
sqlfn = "caloSqlite.db" )
Opens a COOL db connection.
- db:       The DB type. The following names are recognized:
                * SQLITE: Opens file mentioned in sqlfn parameter
                * ORACLE or FRONTIER: Opens ORACLE DB, forces READONLY
- instance: One of valid instances - CONDBR2 OFLP200 COMP200 CMCP200
- mode:     Can be READONLY (default), RECREATE or UPDATE
- schema:   One of valid schemas - COOLONL_CALO COOLOFL_CALO COOLONL_LAR COOLOFL_LAR COOLONL_TILE COOLOFL_TILE
- sqlfn:    Name of sqlite file if db is SQLITE

Definition at line 60 of file CaloCondTools.py.

60def openDb(db, instance, mode="READONLY", schema="COOLOFL_CALO", sqlfn="caloSqlite.db"):
61 """
62 Opens a COOL db connection.
63 - db: The DB type. The following names are recognized:
64 * SQLITE: Opens file mentioned in sqlfn parameter
65 * ORACLE or FRONTIER: Opens ORACLE DB, forces READONLY
66 - instance: One of valid instances - CONDBR2 OFLP200 COMP200 CMCP200
67 - mode: Can be READONLY (default), RECREATE or UPDATE
68 - schema: One of valid schemas - COOLONL_CALO COOLOFL_CALO COOLONL_LAR COOLOFL_LAR COOLONL_TILE COOLOFL_TILE
69 - sqlfn: Name of sqlite file if db is SQLITE
70 """
71 #=== check for valid db names
72 if db is not None:
73 validDb = ["SQLITE", "ORACLE", "FRONTIER"]
74 if db not in validDb:
75 raise Exception( "DB not valid: %s, valid DBs are: %s" % (db,validDb) )
76 elif db == "ORACLE" or db == "FRONTIER":
77 mode = "READONLY"
78
79 #=== check for valid instance names
80 validInstance = ["COMP200", "CONDBR2", "CMCP200", "OFLP200"]
81 if instance not in validInstance:
82 raise Exception( "Instance not valid: %s, valid instance are: %s" % (instance,validInstance) )
83
84 #=== check for valid schema names
85 validSchema = ["COOLONL_CALO","COOLOFL_CALO","COOLONL_LAR","COOLOFL_LAR","COOLONL_TILE","COOLOFL_TILE"]
86 if schema not in validSchema:
87 raise Exception( "Schema not valid: %s, valid schemas are: %s" % (schema,validSchema) )
88
89 #=== construct connection string
90 connStr = ""
91 if db=='SQLITE':
92 if mode=="READONLY" and not os.path.exists(sqlfn):
93 raise Exception( "Sqlite file %s does not exist" % (sqlfn) )
94 if (mode=="RECREATE" or mode=="UPDATE") and not os.path.exists(os.path.dirname(sqlfn)):
95 dirn=os.path.dirname(sqlfn)
96 if dirn:
97 os.makedirs(dirn)
98 connStr="sqlite://X;schema=%s;dbname=%s" % (sqlfn,instance)
99 elif db=='FRONTIER':
100 connStr='frontier://ATLF/()/;schema=ATLAS_%s;dbname=%s' % (schema,instance)
101 elif db=='ORACLE':
102 connStr='oracle://%s;schema=ATLAS_%s;dbname=%s' % ('ATLAS_COOLPROD',schema,instance)
103 else:
104 connStr=schema+'/'+instance
105
106 return openDbConn(connStr, mode)
107
108#
109#______________________________________________________________________

◆ openDbConn()

python.CaloCondTools.openDbConn ( connStr,
mode = "READONLY" )
Opens a COOL db connection.
- connStr: The DB connection string
- mode:    Can be READONLY (default), RECREATE or UPDATE
           or ORACLE or FRONTIER if connStr is only short name of the database

Definition at line 110 of file CaloCondTools.py.

110def openDbConn(connStr, mode="READONLY"):
111 """
112 Opens a COOL db connection.
113 - connStr: The DB connection string
114 - mode: Can be READONLY (default), RECREATE or UPDATE
115 or ORACLE or FRONTIER if connStr is only short name of the database
116 """
117
118 #=== split the name into schema and dbinstance
119 splitname=connStr.split('/')
120 if (len(splitname)!=2): # string connection ready to be used as it is
121 connStr_new=connStr
122 else: # construct connection string
123 schema=splitname[0]
124 instance=splitname[1]
125 if mode=="ORACLE":
126 connStr_new='oracle://%s;schema=ATLAS_%s;dbname=%s' % ('ATLAS_COOLPROD',schema,instance)
127 else:
128 connStr_new='frontier://ATLF/()/;schema=ATLAS_%s;dbname=%s' % (schema,instance)
129
130 #=== get dbSvc and print header info
131 dbSvc = cool.DatabaseSvcFactory.databaseService()
132 log.info( "---------------------------------------------------------------------------------" )
133 log.info( "-------------------------- CaloCondTools.openDbConn -----------------------------" )
134 log.info( "- using COOL version %s", dbSvc.serviceVersion() )
135 log.info( "- opening CaloDb: %s",connStr_new )
136 log.info( "- mode: %s", mode )
137 log.info( "---------------------------------------------------------------------------------" )
138
139 #=== action depends on mode
140 if mode in ["READONLY","ORACLE","FRONTIER","",None]:
141 #=== open read only
142 try:
143 db=dbSvc.openDatabase(connStr_new,True)
144 except Exception as e:
145 log.debug( e )
146 log.critical("Could not connect to %s" % connStr_new )
147 return None
148 return db
149 elif mode=="RECREATE":
150 #=== recreating database
151 dbSvc.dropDatabase(connStr_new)
152 try:
153 db = dbSvc.createDatabase(connStr_new)
154 except Exception as e:
155 log.debug( e )
156 log.critical( "Could not create database, giving up..." )
157 return None
158 return db
159 elif mode=="UPDATE":
160 #=== update database
161 try:
162 db=dbSvc.openDatabase(connStr_new,False)
163 except Exception as e:
164 log.debug( e )
165 log.warning( "Could not connect to \'%s\', trying to create it....", connStr_new )
166 try:
167 db=dbSvc.createDatabase(connStr_new)
168 except Exception as e:
169 log.debug( e )
170 log.critical( "Could not create database, giving up..." )
171 return None
172 return db
173 else:
174 log.error("Mode \"%s\" not recognized", mode )
175 return None
176
177#
178#______________________________________________________________________

◆ runLumiFromIov()

python.CaloCondTools.runLumiFromIov ( iov)
Returns run and lumi block numbers from COOL timeStamp

Definition at line 187 of file CaloCondTools.py.

187def runLumiFromIov(iov):
188 """
189 Returns run and lumi block numbers from COOL timeStamp
190 """
191 return (int(iov >> 32), int(iov & 0xFFFFFFFF))
192
193#
194#______________________________________________________________________

Variable Documentation

◆ g

python.CaloCondTools.g = cppyy.gbl

Definition at line 15 of file CaloCondTools.py.

◆ log

python.CaloCondTools.log = getLogger("CaloCondTools")

Definition at line 20 of file CaloCondTools.py.

◆ MAXLBK

python.CaloCondTools.MAXLBK = cool.UInt32Max

Definition at line 26 of file CaloCondTools.py.

◆ MAXRUN

python.CaloCondTools.MAXRUN = cool.Int32Max

Definition at line 25 of file CaloCondTools.py.

◆ MINLBK

int python.CaloCondTools.MINLBK = 0

Definition at line 24 of file CaloCondTools.py.

◆ MINRUN

int python.CaloCondTools.MINRUN = 0

Definition at line 23 of file CaloCondTools.py.

◆ UNIX2COOL

int python.CaloCondTools.UNIX2COOL = 1000000000

Definition at line 27 of file CaloCondTools.py.

◆ UNIXTMAX

python.CaloCondTools.UNIXTMAX = cool.Int32Max

Definition at line 28 of file CaloCondTools.py.