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

Functions

 CondInputLoaderCfg (flags, **kwargs)
 DBReplicaSvcCfg (flags, vetoDBRelease=False, **kwargs)
 IOVDbSvcCfg (flags, **kwargs)
 addFolders (flags, folderStrings, detDb=None, className=None, extensible=False, tag=None, db=None, modifiers='')
 addFolderList (flags, listOfFolderInfoTuple, extensible=False, db=None, modifiers='')
 addFoldersSplitOnline (flags, detDb, onlineFolders, offlineFolders, className=None, extensible=False, addMCString='_OFL', splitMC=False, tag=None, forceDb=None, modifiers='')
 addOverride (flags, folder, tag, tagType="tag", db=None)
 _extractFolder (folderString)
 getSqliteContent (sqliteInput, takeFolders, databaseInstance)
 blockFolder (ca, folder)

Variables

 msg = logging.getLogger('IOVDbSvcCfg')
dict _dblist
 flags = initConfigFlags()
 Files
 acc = IOVDbSvcCfg(flags)

Function Documentation

◆ _extractFolder()

python.IOVDbSvcConfig._extractFolder ( folderString)
protected
Extract the folder name (non-XML text) from a IOVDbSvc.Folders entry

Definition at line 246 of file IOVDbSvcConfig.py.

246def _extractFolder(folderString):
247 """Extract the folder name (non-XML text) from a IOVDbSvc.Folders entry"""
248 folderName = ''
249 xmlTag = ''
250 ix = 0
251 while ix < len(folderString):
252 if (folderString[ix] == '<' and xmlTag == ''):
253 ix2 = folderString.find('>', ix)
254 if ix2 != -1:
255 xmlTag = folderString[ix + 1 : ix2].strip()
256 ix = ix2 + 1
257 elif folderString[ix:ix+2] == '</' and xmlTag != '':
258 ix2 = folderString.find('>', ix)
259 if ix2 != -1:
260 xmlTag = ''
261 ix = ix2 + 1
262 else:
263 ix2 = folderString.find('<', ix)
264 if ix2 == -1:
265 ix2 = len(folderString)
266 if xmlTag == '':
267 folderName = folderName + folderString[ix : ix2]
268 ix = ix2
269 return folderName.strip()
270
271
272@cache #Fill only once

◆ addFolderList()

python.IOVDbSvcConfig.addFolderList ( flags,
listOfFolderInfoTuple,
extensible = False,
db = None,
modifiers = '' )
Add access to the given set of folders, in the identified subdetector schema.
FolerInfoTuple consists of (foldername,detDB,classname)

If EXTENSIBLE is set, then if we access an open-ended IOV at the end of the list,
the end time for this range will be set to just past the current event.
Subsequent accesses will update this end time for subsequent events.
This allows the possibility of later adding a new IOV using IOVSvc::setRange.

Definition at line 104 of file IOVDbSvcConfig.py.

104def addFolderList(flags, listOfFolderInfoTuple, extensible=False, db=None, modifiers=''):
105 """Add access to the given set of folders, in the identified subdetector schema.
106 FolerInfoTuple consists of (foldername,detDB,classname)
107
108 If EXTENSIBLE is set, then if we access an open-ended IOV at the end of the list,
109 the end time for this range will be set to just past the current event.
110 Subsequent accesses will update this end time for subsequent events.
111 This allows the possibility of later adding a new IOV using IOVSvc::setRange."""
112 loadFolders = set()
113 folders = []
114 sqliteFolders=getSqliteContent(flags.IOVDb.SqliteInput,
115 flags.IOVDb.SqliteFolders,
116 flags.IOVDb.DatabaseInstance)
117
118 for (fs, detDb, className) in listOfFolderInfoTuple:
119 fse= _extractFolder(fs)
120 # Add class-name to CondInputLoader (if reqired)
121 if className is not None:
122 loadFolders.add((className, fse))
123
124 if fse in sqliteFolders:
125 msg.warning(f'Reading folder {fs} from sqlite, bypassing production database')
126 fs+=sqliteFolders[fse]
127 elif detDb is not None and fs.find('<db>') == -1:
128
129 if db: # override database name if provided
130 dbName=db
131 else:
132 dbName = flags.IOVDb.DatabaseInstance
133 if detDb in _dblist.keys():
134 fs = f'<db>{_dblist[detDb]}/{dbName}</db> {fs}'
135 elif os.access(detDb, os.R_OK):
136 # Assume slqite file
137 fs = f'<db>sqlite://;schema={detDb};dbname={dbName}</db> {fs}'
138 else:
139 raise ConfigurationError(f'Error, db shorthand {detDb} not known, nor found as sqlite file')
140 # Append database string to folder-name
141
142 if extensible:
143 fs = fs + '<extensible/>'
144
145 # Add explicitly given xml-modifiers (like channel-selection)
146 fs += modifiers
147
148 # Append (modified) folder-name string to IOVDbSvc Folders property
149 folders.append(fs)
150
151
152 result = IOVDbSvcCfg(flags)
153 result.getPrimary().Folders+=folders
154 if loadFolders:
155 result.getCondAlgo('CondInputLoader').Load |= loadFolders
156
157 if flags.IOVDb.CleanerRingSize > 0:
158 #HLT-jobs set IOVDb.CleanerRingSize to 0 to run without the cleaning-service,
159 cleanerSvc = CompFactory.Athena.DelayedConditionsCleanerSvc(RingSize=flags.IOVDb.CleanerRingSize)
160 result.addService(cleanerSvc)
161 result.addService(CompFactory.Athena.ConditionsCleanerSvc(CleanerSvc=cleanerSvc))
162
163
164 return result
165
166
STL class.

◆ addFolders()

python.IOVDbSvcConfig.addFolders ( flags,
folderStrings,
detDb = None,
className = None,
extensible = False,
tag = None,
db = None,
modifiers = '' )

Definition at line 86 of file IOVDbSvcConfig.py.

86def addFolders(flags, folderStrings, detDb=None, className=None, extensible=False, tag=None, db=None, modifiers=''):
87 tagString = ''
88 if tag is not None:
89 tagString = '<tag>%s</tag>' % tag
90
91 # Convenience hack: Allow a single string as parameter:
92 if isinstance(folderStrings, str):
93 return addFolderList(flags, ((folderStrings + tagString, detDb, className),), extensible, db, modifiers)
94
95 else: # Got a list of folders
96 folderDefinitions = []
97
98 for folderString in folderStrings:
99 folderDefinitions.append((folderString + tagString, detDb, className))
100
101 return addFolderList(flags, folderDefinitions, extensible, db, modifiers)
102
103

◆ addFoldersSplitOnline()

python.IOVDbSvcConfig.addFoldersSplitOnline ( flags,
detDb,
onlineFolders,
offlineFolders,
className = None,
extensible = False,
addMCString = '_OFL',
splitMC = False,
tag = None,
forceDb = None,
modifiers = '' )
Add access to given folder, using either online_folder  or offline_folder. For MC, add addMCString as a postfix (default is _OFL)

Definition at line 167 of file IOVDbSvcConfig.py.

167def addFoldersSplitOnline(flags, detDb, onlineFolders, offlineFolders, className=None, extensible=False, addMCString='_OFL', splitMC=False, tag=None, forceDb=None, modifiers=''):
168 """Add access to given folder, using either online_folder or offline_folder. For MC, add addMCString as a postfix (default is _OFL)"""
169
170 if flags.Common.isOnline and not flags.Input.isMC:
171 folders = onlineFolders
172 elif splitMC and not flags.Input.isMC:
173 folders = onlineFolders
174 else:
175 # MC, so add addMCString
176 detDb = detDb + addMCString
177 folders = offlineFolders
178
179 return addFolders(flags, folders, detDb, className, extensible, tag=tag, db=forceDb, modifiers=modifiers)
180
181

◆ addOverride()

python.IOVDbSvcConfig.addOverride ( flags,
folder,
tag,
tagType = "tag",
db = None )
Add xml override for the specified folder (folder-level tag, forceRunNumber, ...)

Definition at line 238 of file IOVDbSvcConfig.py.

238def addOverride(flags, folder, tag, tagType="tag", db=None):
239 """Add xml override for the specified folder (folder-level tag, forceRunNumber, ...)"""
240 suffix = ''
241 if db:
242 suffix = f' <db>{db}</db>'
243 return IOVDbSvcCfg(flags, overrideTags=(f'<prefix>{folder}</prefix> <{tagType}>{tag}</{tagType}>{suffix}',))
244
245

◆ blockFolder()

python.IOVDbSvcConfig.blockFolder ( ca,
folder )

Definition at line 310 of file IOVDbSvcConfig.py.

310def blockFolder(ca,folder):
311 "Block use of specified conditions DB folder so data can be read from elsewhere"
312 msg.info("Trying to remove folder [%s] from IOVDbSvc.Folders",folder)
313 iovdbsvc=ca.getService("IOVDbSvc")
314 oldLen=len(iovdbsvc.Folders)
315 iovdbsvc.Folders=[x for x in iovdbsvc.Folders if x.find(folder)==-1]
316 newLen=len(iovdbsvc.Folders)
317 if (oldLen==newLen):
318 msg.warning("Folder [%s] not found in IOVDbSvc.Folder",folder)
319 return
320 elif (oldLen-newLen>1):
321 msg.warning("Folder string [%s] matched more than one folder, removed %i folders",folder,oldLen-newLen)
322
323
324 condInputLoader=ca.getCondAlgo("CondInputLoader")
325 condInputLoader.Load=set([x for x in condInputLoader.Load if x[1].find(folder)==-1])
326 return
327
328
329
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138

◆ CondInputLoaderCfg()

python.IOVDbSvcConfig.CondInputLoaderCfg ( flags,
** kwargs )

Definition at line 12 of file IOVDbSvcConfig.py.

12def CondInputLoaderCfg(flags, **kwargs):
13 result = ComponentAccumulator()
14 result.addCondAlgo(CompFactory.CondInputLoader(**kwargs))
15 return result
16
17

◆ DBReplicaSvcCfg()

python.IOVDbSvcConfig.DBReplicaSvcCfg ( flags,
vetoDBRelease = False,
** kwargs )

Definition at line 18 of file IOVDbSvcConfig.py.

18def DBReplicaSvcCfg(flags, vetoDBRelease=False, **kwargs):
19 if vetoDBRelease:
20 kwargs.setdefault('COOLSQLiteVetoPattern', '/DBRelease/')
21
22 result = ComponentAccumulator()
23 result.addService(CompFactory.DBReplicaSvc(**kwargs))
24 return result
25
26
27@AccumulatorCache

◆ getSqliteContent()

python.IOVDbSvcConfig.getSqliteContent ( sqliteInput,
takeFolders,
databaseInstance )

Definition at line 273 of file IOVDbSvcConfig.py.

273def getSqliteContent(sqliteInput,takeFolders,databaseInstance):
274 if sqliteInput == "": return []
275 sqliteFolders=dict()
276 if isinstance(takeFolders, str):
277 takeFolders=[takeFolders,]
278 dbStr="sqlite://;schema="+ sqliteInput+";dbname="+databaseInstance
279 from PyCool import cool
280 dbSvc = cool.DatabaseSvcFactory.databaseService()
281 db = dbSvc.openDatabase(dbStr)
282 nodelist=db.listAllNodes()
283 for node in nodelist:
284 if db.existsFolder(node):
285 if (len(takeFolders)>0 and str(node) not in takeFolders): continue
286 connStr="<db>"+dbStr+"</db>"
287 f=db.getFolder(node)
288 if f.versioningMode is not cool.FolderVersioning.SINGLE_VERSION:
289 tags=f.listTags()
290 if len(tags)==1:
291 connStr+="<tag>"+tags[0]+"</tag>"
292 sqliteFolders[str(node)]=connStr
293 db.closeDatabase()
294
295 if len(takeFolders)>0:
296 missedFolders=set(takeFolders)-set(sqliteFolders.keys())
297 if len(missedFolders):
298 msg.error("The following folders were requested via the flag IOVSvc.sqliteFolder but not found in the sqlite file %s",(sqliteInput))
299 for f in missedFolders:
300 msg.error(f)
301
302 msg.info("The following folders/tags are read from sqlite:")
303 for v in sqliteFolders.items():
304 msg.info("\t"+str(v))
305 return sqliteFolders
306
307
308#post-exec-style helper method to remove a folder from IOVDbSvc.Folders and CondInputLoader.Load
309#To be used in calibration-processing jobs that read the condions from anohter source or produce it in the same job

◆ IOVDbSvcCfg()

python.IOVDbSvcConfig.IOVDbSvcCfg ( flags,
** kwargs )

Definition at line 28 of file IOVDbSvcConfig.py.

28def IOVDbSvcCfg(flags, **kwargs):
29 # Add the conditions loader, must be the first in the sequence
30 result = CondInputLoaderCfg(flags)
31
32 kwargs.setdefault('OnlineMode', flags.Common.isOnline)
33 kwargs.setdefault('dbConnection', flags.IOVDb.DBConnection)
34 kwargs.setdefault('crestServer', flags.IOVDb.CrestServer)
35 # setup knowledge of dbinstance in IOVDbSvc, for global tag x-check
36 kwargs.setdefault('DBInstance', flags.IOVDb.DatabaseInstance)
37
38 if 'FRONTIER_SERVER' in os.environ.keys() and os.environ['FRONTIER_SERVER'] != '':
39 kwargs.setdefault('CacheAlign', 3)
40
41 # Very important cache settings for use of CoralProxy at P1 (ATR-4646)
42 if flags.Common.isOnline and flags.Trigger.Online.isPartition:
43 kwargs['CacheAlign'] = 0
44 kwargs['CacheRun'] = 0
45 kwargs['CacheTime'] = 0
46
47 kwargs.setdefault('GlobalTag', flags.IOVDb.GlobalTag)
48 if 'Folders' in kwargs:
49 kwargs['Folders'] = ['/TagInfo<metaOnly/>'] + kwargs['Folders']
50 else:
51 kwargs.setdefault('Folders', ['/TagInfo<metaOnly/>'])
52
53 # Select CREST backend if needed
54 if flags.IOVDb.UseCREST:
55 kwargs.setdefault('Source', 'CREST')
56
57 result.addService(CompFactory.IOVDbSvc(**kwargs), primary=True)
58
59 # Set up POOLSvc with appropriate catalogs
60 from AthenaPoolCnvSvc.PoolCommonConfig import PoolSvcCfg
61 result.merge(PoolSvcCfg(flags, withCatalogs=True))
62 if flags.MP.UseSharedReader or flags.MP.UseSharedWriter:
63 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolSharedIOCnvSvcCfg
64 result.merge(AthenaPoolSharedIOCnvSvcCfg(flags))
65 else:
66 from AthenaPoolCnvSvc.PoolCommonConfig import AthenaPoolCnvSvcCfg
67 result.merge(AthenaPoolCnvSvcCfg(flags))
68 result.addService(CompFactory.CondSvc())
69 result.addService(CompFactory.ProxyProviderSvc(ProviderNames=['IOVDbSvc']))
70
71 if not flags.Input.isMC:
72 result.merge(DBReplicaSvcCfg(flags, vetoDBRelease=True))
73
74 # Get TagInfoMgr
75 from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
76 result.merge(TagInfoMgrCfg(flags))
77
78 # Set up MetaDataSvc
79 from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
80 result.merge(MetaDataSvcCfg(flags, ['IOVDbMetaDataTool']))
81
82 return result
83
84
85# Convenience method to add folders:

Variable Documentation

◆ _dblist

dict python.IOVDbSvcConfig._dblist
protected

Definition at line 182 of file IOVDbSvcConfig.py.

◆ acc

python.IOVDbSvcConfig.acc = IOVDbSvcCfg(flags)

Definition at line 337 of file IOVDbSvcConfig.py.

◆ Files

python.IOVDbSvcConfig.Files

Definition at line 334 of file IOVDbSvcConfig.py.

◆ flags

python.IOVDbSvcConfig.flags = initConfigFlags()

Definition at line 333 of file IOVDbSvcConfig.py.

◆ msg

python.IOVDbSvcConfig.msg = logging.getLogger('IOVDbSvcCfg')

Definition at line 10 of file IOVDbSvcConfig.py.