ATLAS Offline Software
Loading...
Searching...
No Matches
LArNewCalib_MergeDB.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
4import os,sys
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from IOVDbSvc.IOVDbSvcConfig import addFolders
8
9def DBConnectionFile(sqlitefile):
10 return "sqlite://;schema="+sqlitefile+";dbname=CONDBR2"
11
12def mergeDBCfg(flags, InputKeys=[], InputSQLiteFiles=[]):
13 result=ComponentAccumulator()
14
15 print("mergeDBCfg",len(InputSQLiteFiles)," SQLite files: ",InputSQLiteFiles)
16 print(len(InputKeys)," InputKeys: ",InputKeys)
17
18
19 if not flags.LArCalib.isSC: GroupingType = "ExtendedSubDetector"
20 else: GroupingType = "SuperCells"
21
22 if ( flags.LArCalib.Output.POOLFile ):
23 if os.path.exists(flags.LArCalib.Output.POOLFile):
24 os.remove(flags.LArCalib.Output.POOLFile)
25
26 for key in InputKeys:
27
28 print("Working for: ",key)
29 KeyOutput = key
30 FlagInput = key
31
32 if 'Pedestal' == key or 'PhysWave' == key or 'MphysOverMcal' == key or 'Ramp' == key or 'Params' in key:
33 KeyInput="LAr"+key
34 if 'Pedestal' == key or 'PhysWave' == key or 'CaliWave' or 'MphysOverMcal' == key or 'Ramp' == key or 'Params' in key:
35 KeyInput="LAr"+key
36 KeyOutput="LAr"+key
37
38 if 'AutoCorr' in key:
39 KeyInput='LArAutoCorr'
40
41 ofcphyskey=None
42 if "OFC" in key:
43 KeyInput = "LArOFC"
44 if "Cali" in key:
45 FlagInput = "OFCCali"
46
47 if "Phys" in key:
48 ofcphyskeytmp = key.split("OFCPhys")[1]
49 if 'Mu' in ofcphyskeytmp:
50 ofcphyskey=ofcphyskeytmp.replace("Mu","")
51 else:
52 ofcphyskey=ofcphyskeytmp
53 FlagInput = "OFCPhys"
54
55 shapekey=None
56 if "Shape" in key:
57 shapekey = key.split("Shape")[1]
58 FlagInput = "Shape"
59 KeyInput = "LArShape"
60
61
62 #if FlagInput in flags._flagdict.keys():
63 if [i for i in flags._flagdict.keys() if FlagInput in i]:
64 try:
65 Folder = flags._get('LArCalib.'+FlagInput+'.Folder')
66 except Exception as e:
67 print(e)
68 print(flags._flagdict)
69 sys.exit(-1)
70 else:
71 print('No folder in flags for '+FlagInput)
72 print(flags._flagdict.keys())
73 sys.exit(-2)
74
75 if shapekey is not None:
76 if Folder.endswith("/"):
77 Folder+=shapekey
78 else:
79 Folder+="/"+shapekey
80
81 if ofcphyskey is not None and ofcphyskey != "":
82 print("Folder: ",Folder," ofcphyskey: ",ofcphyskey)
83 if "4samples" in Folder:
84 Folder = Folder.replace("4samples", ofcphyskey)
85 elif Folder.endswith("/"):
86 Folder+=ofcphyskey
87 else:
88 Folder+="/"+ofcphyskey
89
90 if "OFCPhys" in FlagInput:
91 print("Folder: ",Folder)
92 # Get the available tags
93 from PyCool import cool
94 dbSvc=cool.DatabaseSvcFactory.databaseService()
95 db_string=DBConnectionFile(InputSQLiteFiles[0])
96 try:
97 db=dbSvc.openDatabase(db_string)
98 except Exception as e:
99 print ('Problem opening database',e)
100 print(db_string)
101 sys.exit(-3)
102 cool_folder=db.getFolder(Folder)
103 tags = [ x for x in cool_folder.listTags() ]
104 if len(tags) == 1:
105 TagSpec = str(tags[0])
106 else:
107 if flags.LArCalib.OFC.Ncoll > 0 or 'Mu' in key:
108 TagSpec = [ str(tag) for tag in tags if "-mu-" in str(tag)][0]
109 else:
110 TagSpec = [ str(tag) for tag in tags if "-mu-" not in str(tag)][0]
111 else:
112 from LArCalibProcessing.utils import FolderTagResolver as FolderTagResover
113 FolderTagResover._globalTag=flags.IOVDb.GlobalTag
114 #rs=FolderTagResover(flags.LArCalib.Input.Database2)
115 # until not all folders in COOL:
116 rs=FolderTagResover(DBConnectionFile(InputSQLiteFiles[0]))
117 FolderTag = rs.getFolderTagSuffix(Folder)
118 del rs
119
120 from LArCalibProcessing.LArCalibConfigFlags import LArCalibFolderTag
121 TagSpec = LArCalibFolderTag(Folder,FolderTag)
122
123
124 if 'Wave' in KeyInput:
125 OutputObjectSpec = KeyInput+"Container#"+KeyOutput+"#"+Folder
126 else:
127 OutputObjectSpec = KeyInput+"Complete#"+KeyOutput+"#"+Folder
128 OutputObjectSpecTag = TagSpec
129
130 print("**",KeyInput,FlagInput,"folder **",Folder)
131 print("** TagSpec: ",TagSpec)
132 print("** keyOutput: ",KeyOutput)
133
134
135 inkeys=[]
136 inobjs=[]
137
138 for sqf in InputSQLiteFiles:
139 thiskey = KeyInput+str(InputSQLiteFiles.index(sqf))
140
141 if 'PhysAutoCorr' in key: thiskey='Phys'+thiskey
142
143 if 'OFC' in key and 'Mu' in key:
144 thiskey+="Mu"
145 if 'OFC' in key and 'Cali' in key:
146 thiskey+="Cali"
147
148 inkeys.append(thiskey)
149 if 'Wave' in KeyInput:
150 inobjs.append(KeyInput+"Container#"+thiskey)
151 else:
152 inobjs.append(KeyInput+"Complete#"+thiskey)
153
154 if 'Wave' in KeyInput or 'Params' in KeyInput:
155 result.merge(addFolders(flags,Folder,tag=TagSpec,detDb=sqf,modifiers="<key>"+thiskey+"</key>"))
156 else:
157 result.merge(addFolders(flags,Folder,tag=TagSpec,detDb=sqf,modifiers="<key>"+thiskey+"</key>", className=KeyInput+"Complete"))
158 pass
159
160 pass
161
162 if 'Wave' in KeyInput:
163 result.addCondAlgo(CompFactory.getComp('ForceLoadCondObj')(KeyOutput,ObjectList=inobjs))
164 result.addCondAlgo(CompFactory.getComp('LArConditionsMergerAlg<LArDAC2uAComplete,'+KeyInput+'Container>')(key+"Merger",
165 GroupingType = GroupingType, WriteKey = KeyOutput, DetStoreReadKeys = inkeys))
166 elif 'Params' in KeyInput:
167 result.addCondAlgo(CompFactory.getComp('ForceLoadCondObj')(KeyOutput,ObjectList=inobjs))
168 result.addCondAlgo(CompFactory.getComp('LArConditionsMergerAlg<LArDAC2uAComplete,'+KeyInput+'Complete>')(key+"Merger",
169 GroupingType = GroupingType, WriteKey = KeyOutput, DetStoreReadKeys = inkeys))
170 else:
171 result.addCondAlgo(CompFactory.getComp('LArConditionsMergerAlg<'+KeyInput+'Complete, LArPhysWaveContainer>')(key+"Merger",
172 GroupingType = GroupingType, WriteKey = KeyOutput, ReadKeys = inkeys))
173
174 if ( flags.LArCalib.Output.POOLFile ):
175
176 from RegistrationServices.OutputConditionsAlgConfig import OutputConditionsAlgCfg
177 result.merge(OutputConditionsAlgCfg(flags,name="OutputConditionsAlg"+KeyInput, outputFile=flags.LArCalib.Output.POOLFile,
178 ObjectList=[OutputObjectSpec], IOVTagList=[OutputObjectSpecTag],
179 Run1 = flags.LArCalib.IOVStart, Run2= flags.LArCalib.IOVEnd, WriteIOV=True))
180 pass
181
182 result.addService(CompFactory.IOVRegistrationSvc(RecreateFolders = False))
183
184 #MC Event selector since we have no input data file
185 from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
186 result.merge(McEventSelectorCfg(flags,
187 RunNumber = flags.LArCalib.Input.RunNumbers[0],
188 EventsPerRun = 1,
189 FirstEvent = 1,
190 InitialTimeStamp = 0,
191 TimeStampInterval = 1))
192
193 result.printConfig(withDetails=True, printDefaults=True)
194 return result
195
196
197if __name__=="__main__":
198 import argparse
199
201 return arg.split(',')
202
203 # now process the CL options and assign defaults
204 parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
205 parser.add_argument('-r','--run', dest='run', default=str(0x7FFFFFFF), help='Run number to query input DB', type=str)
206 parser.add_argument('-i','--insqlite', dest='insql', default="", help='List of input sqlite files, comma separated, if empty all *.db files in current dir.', type=list_of_strings)
207 parser.add_argument('-k','--inkeys', dest='inkeys', default=["LArPedestal"], help='List of input keys to process', type=list_of_strings)
208 parser.add_argument('-o','--outsqlite', dest='outsql', default="freshConstants_merged.db", help='Output sqlite file', type=str)
209 parser.add_argument('-p','--poolfile', dest='poolfile', default="freshConstants_pp.pool.root", help='Output pool file', type=str)
210 parser.add_argument('-d','--dbname', dest='dbname', default="COOLOFL_LAR/CONDBR2", help='DB to query for tags', type=str)
211 parser.add_argument('--iovstart',dest="iovstart", default=0, help="IOV start (run-number)", type=int)
212 parser.add_argument('--isSC', dest='supercells', default=False, help='is SC data ?', action='store_true')
213 parser.add_argument('-c','--poolcat', dest='poolcat', default="freshConstants.xml", help='Catalog of POOL files', type=str)
214 parser.add_argument('--Ncoll',dest='Ncoll', default=60, help='Number of MinBias collision assumed for OFCs folder', type=int)
215 args = parser.parse_args()
216 if help in args and args.help is not None and args.help:
217 parser.print_help()
218 sys.exit(0)
219
220 if len(args.insql)==0:
221 InputSQLiteFiles = [ db for db in os.listdir(".") if db.endswith(".db") ]
222 else:
223 InputSQLiteFiles = args.insql
224
225 if len(InputSQLiteFiles) == 1: #Main readout case, copy first input to output
226 import shutil, os
227 shutil.copyfile(InputSQLiteFiles[0],args.outsql)
228
229 #Import the flag-container that is the arguemnt to the configuration methods
230 from AthenaConfiguration.AllConfigFlags import initConfigFlags
231 from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
232 flags=initConfigFlags()
233 addLArCalibFlags(flags, args.supercells)
234
235 #Now we set the flags as required for this particular job:
236 flags.LArCalib.Input.RunNumbers = [int(args.run),]
237 flags.LArCalib.Input.Database = args.insql
238 flags.LArCalib.Input.Database2 = args.dbname
239
240 flags.LArCalib.Output.POOLFile = args.poolfile
241 #flags.LArCalib.Output.ROOTFile2 ="freshConstants2_pp.pool.root"
242 flags.IOVDb.DBConnection=DBConnectionFile(args.outsql)
243
244 #The global tag we are working with
245 flags.IOVDb.GlobalTag = "LARCALIB-RUN2-00"
246
247 flags.Input.Files=[]
248 flags.LArCalib.Input.Files = [ ]
249 flags.LArCalib.OFC.Ncoll = args.Ncoll
250 flags.LArCalib.IOVStart = args.iovstart
251
252 flags.LAr.doAlign=False
253 flags.Input.RunNumbers=flags.LArCalib.Input.RunNumbers
254
255 from AthenaConfiguration.TestDefaults import defaultGeometryTags
256 flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
257
258 flags.Debug.DumpDetStore=True
259 flags.Debug.DumpCondStore=True
260
261 flags.lock()
262
263 #Import the MainServices (boilerplate)
264 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
265 cfg=MainServicesCfg(flags)
266 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
267 cfg.merge(LArGMCfg(flags))
268 #from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
269 #cfg.merge(PoolReadCfg(flags))
270 from AthenaPoolCnvSvc.PoolCommonConfig import PoolSvcCfg
271 cfg.merge(PoolSvcCfg(flags))
272
273 cfg.merge(mergeDBCfg(flags,args.inkeys, InputSQLiteFiles))
274
275 cfg.getService("PoolSvc").ReadCatalog+=["xmlcatalog_file:%s"%args.poolcat,]
276 cfg.getService("PoolSvc").WriteCatalog="xmlcatalog_file:%s"%args.poolcat
277 cfg.getService("IOVDbSvc").DBInstance=""
278
279 cfg.printConfig(withDetails=True, summariseProps=True, printDefaults=True)
280 #cfg.getService("StoreGateSvc").Dump=True
281 #cfg.getService("StoreGateSvc").OutputLevel=2
282
283 cfg.run(1)
void print(char *figname, TCanvas *c1)
mergeDBCfg(flags, InputKeys=[], InputSQLiteFiles=[])