ATLAS Offline Software
LArConditions2Ntuple.py
Go to the documentation of this file.
1 #!/bin/env python
2 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 
4 from AthenaConfiguration.ComponentFactory import CompFactory
5 
6 
7 if __name__=='__main__':
8 
9  import os,sys
10  import argparse
11 
12  # now process the CL options and assign defaults
13  parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
14  parser.add_argument('-r','--run', dest='run', default=0x7fffffff, help='Run number', type=int)
15  parser.add_argument('--sqlite', dest='sqlite', default=None, help='sqlite file to read from (default: oracle)', type=str)
16  parser.add_argument('-t','--tag',dest='dbtag',default=None,help="Global conditions tag", type=str)
17  parser.add_argument('-f','--ftag',dest='ftag',default=None,help="folder tag suffig", type=str)
18  parser.add_argument('-o','--out', dest='out', default="LArConditions.root", help='Output root file', type=str)
19  parser.add_argument('--ofcfolder',dest='ofcfolder',default="", help="OFC flavor",type=str)
20  parser.add_argument('-s','--isSC', dest='isSC', action='store_true', default=False, help='is SC?')
21  parser.add_argument('-m','--isMC', dest='isMC', action='store_true', default=False, help='is MC?')
22 
23  parser.add_argument("--objects",dest="objects",default="PEDESTAL,RAMP",help="List of conditions types to be dumped",type=str)
24  parser.add_argument("--folders",dest="folders",default="/LAR/ElecCalibFlat/Pedestal,/LAR/ElecCalibFlat/Ramp",help="List of folders to be taken from sqlite",type=str)
25  parser.add_argument('--offline',dest="offline", action='store_true', default=False, help='is offline folder?')
26  parser.add_argument('--poolcat',dest="poolcat", default="", type=str, help='is offline folder?')
27  parser.add_argument('-n', '--ntuple', dest='ntname', default='', help='output ntuple name (if different from default)', type=str)
28 
29  args = parser.parse_args()
30  if help in args and args.help is not None and args.help:
31  parser.print_help()
32  sys.exit(0)
33 
34 
35  #Translation table ... with a few potential variant spellings
36  objTable={"RAMP":"Ramp",
37  "DAC2UA":"DAC2uA",
38  "DACUA":"DAC2uA",
39  "PEDESTAL":"Pedestal",
40  "PED":"Pedestal",
41  "UA2MEV":"uA2MeV",
42  "UAMEV":"uA2MeV",
43  "MPHYSOVERMCAL":"MphysOverMcal",
44  "MPHYSMCAL":"MphysOverMcal",
45  "MPMC":"MphysOverMcal",
46  "OFC":"OFC",
47  "SHAPE":"Shape",
48  "HVSCALECORR":"HVScaleCorr",
49  "HVSCALE":"HVScaleCorr",
50  "FSAMPL":"fSampl",
51  "AUTOCORR":"AutoCorr",
52  "AC":"AutoCorr",
53  "CALIWAVE":"CaliWave",
54  "PHYSWAVE":"PhysWave",
55  "OFCCALI":"OFCCali",
56  "ACORR":"AutoCorr",
57  }
58 
59  objects=set()
60  objectsOnl=set()
61  for obj in args.objects.split(","):
62  objU=obj.upper()
63  if objU not in objTable:
64  print("ERROR: Unknown conditions type",obj)
65  sys.exit(0)
66 
67  objects.add(objTable[objU])
68  if "OFCCALI" not in obj.upper() and 'WAVE' not in obj.upper() and not args.offline:
69  objectsOnl.add(objTable[objU])
70 
71  flds=set()
72  for fld in args.folders.split(","):
73  flds.add(fld)
74 
75  from AthenaConfiguration.AllConfigFlags import initConfigFlags
77  from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
78  addLArCalibFlags(flags, args.isSC)
79 
80  flags.Input.RunNumbers=[args.run]
81  from AthenaConfiguration.TestDefaults import defaultGeometryTags
82  flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
83 
84  flags.Input.Files=[]
85 
86  flags.Input.isMC=args.isMC
87  flags.LArCalib.isSC=args.isSC
88 
89  flags.LAr.doAlign=False
90 
91  flags.LAr.OFCShapeFolder=args.ofcfolder
92 
93  from AthenaConfiguration.Enums import LHCPeriod
94  if flags.Input.RunNumbers[0] < 222222:
95  #Set to run1 for early run-numbers
96  flags.GeoModel.Run=LHCPeriod.Run1
97  flags.IOVDb.DatabaseInstance="OFLP200" if flags.Input.isMC else "COMP200"
98  else:
99  flags.GeoModel.Run=LHCPeriod.Run2
100  flags.IOVDb.DatabaseInstance="OFLP200" if flags.Input.isMC else "CONDBR2"
101 
102  if args.dbtag:
103  flags.IOVDb.GlobalTag=args.dbtag
104  elif flags.Input.isMC:
105  flags.IOVDb.GlobalTag="OFLCOND-MC16-SDR-20"
106  elif flags.IOVDb.DatabaseInstance == "COMP200":
107  flags.IOVDb.GlobalTag="COMCOND-BLKPA-RUN1-09"
108  else:
109  flags.IOVDb.GlobalTag="CONDBR2-ES1PA-2024-01"
110 
111  #flags.Exec.OutputLevel=1
112 
113  if (args.sqlite):
114  flags.IOVDb.SqliteInput=args.sqlite
115  flags.IOVDb.SqliteFolders=tuple(flds)
116  if len(objects)!=len(objectsOnl):
117  flags.IOVDb.DBConnection="COOLOFL_LAR/CONDBR2"
118 
119  flags.lock()
120 
121  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
122  cfg=MainServicesCfg(flags)
123 
124  #MC Event selector since we have no input data file
125  from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
126  cfg.merge(McEventSelectorCfg(flags,
127  EventsPerRun = 1,
128  FirstEvent = 1,
129  InitialTimeStamp = 0,
130  TimeStampInterval = 1))
131 
132 
133 
134  #Get LAr basic services and cond-algos
135  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
136  cfg.merge(LArGMCfg(flags))
137 
138  if flags.LArCalib.isSC:
139  #Setup SuperCell cabling
140  from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg, LArCalibIdMappingSCCfg, LArLATOMEMappingCfg
141  cfg.merge(LArOnOffIdMappingSCCfg(flags))
142  cfg.merge(LArCalibIdMappingSCCfg(flags))
143  cfg.merge(LArLATOMEMappingCfg(flags))
144  if not args.offline:
145  from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBSCCfg
146  cfg.merge(LArElecCalibDBSCCfg(flags,objectsOnl))
147  else:
148  #Setup regular cabling
149  from LArCabling.LArCablingConfig import LArOnOffIdMappingCfg, LArCalibIdMappingCfg
150  cfg.merge(LArOnOffIdMappingCfg(flags))
151  cfg.merge(LArCalibIdMappingCfg(flags))
152  if not args.offline:
153  from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
154  cfg.merge(LArElecCalibDBCfg(flags,objectsOnl))
155 
156  from LArBadChannelTool.LArBadChannelConfig import LArBadChannelCfg
157  cfg.merge(LArBadChannelCfg(flags, isSC=flags.LArCalib.isSC))
158 
159  bcKey = "LArBadChannelSC" if flags.LArCalib.isSC else "LArBadChannel"
160 
161  if "Pedestal" in objects:
162  ckey = "LArPedestalSC" if flags.LArCalib.isSC else "LArPedestal"
163  cfg.addEventAlgo(CompFactory.LArPedestals2Ntuple(ContainerKey = ckey,
164  AddFEBTempInfo = False,
165  AddCalib = True,
166  isSC = flags.LArCalib.isSC,
167  BadChanKey = bcKey
168  ))
169 
170  if "AutoCorr" in objects:
171  from IOVDbSvc.IOVDbSvcConfig import addFolders
172  if flags.LArCalib.isSC:
173  cfg.merge(addFolders(flags,'/LAR/ElecCalibOflSC/AutoCorrs/AutoCorr',modifiers='<key>LArAutoCorrSC</key>',className='LArAutoCorrComplete'))
174  else:
175  cfg.merge(addFolders(flags,'/LAR/ElecCalibOfl/AutoCorrs/AutoCorr',className='LArAutoCorrComplete'))
176  ckey="LArAutoCorrSC" if flags.LArCalib.isSC else "LArAutoCorr"
177  cfg.addEventAlgo(CompFactory.LArAutoCorr2Ntuple(ContainerKey = "LArAutoCorrSym" if flags.Input.isMC else ckey,
178  AddFEBTempInfo = False,
179  AddCalib = True,
180  isSC = flags.LArCalib.isSC,
181  ApplyCorrection = True,
182  AddCorrUndo = True,
183  BadChanKey = bcKey,
184 
185  ))
186  if "Ramp" in objects:
187  ckey = "LArRampSC" if flags.LArCalib.isSC else "LArRamp"
188  if args.offline:
189  from IOVDbSvc.IOVDbSvcConfig import addFolders
190  if flags.LArCalib.isSC:
191  cfg.merge(addFolders(flags,'/LAR/ElecCalibOflSC/Ramps/RampLinea',modifiers='<key>LArRampSC</key>',className='LArRampComplete'))
192  else:
193  cfg.merge(addFolders(flags,'/LAR/ElecCalibOfl/Ramps/RampLinea',className='LArRampComplete'))
194  cfg.addEventAlgo(CompFactory.LArRamps2Ntuple(RampKey="LArRampSym" if flags.Input.isMC else ckey,
195  AddFEBTempInfo = False,
196  AddCalib = True,
197  isSC = flags.LArCalib.isSC,
198  ApplyCorr = True,
199  AddCorrUndo = True,
200  BadChanKey = bcKey
201  ))
202 
203  if "OFC" in objects:
204  if args.offline:
205  from IOVDbSvc.IOVDbSvcConfig import addFolders
206  for fld in flds:
207  if 'OFC' in fld:
208  if args.ftag:
209  cfg.merge(addFolders(flags,fld,tag="".join(foldername.split('/')) + args.ftag))
210  else:
211  cfg.merge(addFolders(flags,fld))
212  ckey= 'LArOFC' if '1phase' in fld else 'LArLArOFCPhys4samples'
213  break
214  else:
215  ckey = "LArOFCSC" if flags.LArCalib.isSC else "LArOFC"
216  cfg.addEventAlgo(CompFactory.LArOFC2Ntuple(AddFEBTempInfo = False,
217  ContainerKey=ckey,
218  isSC = flags.LArCalib.isSC,
219  BadChanKey = bcKey
220  ))
221 
222  if "OFCCali" in objects:
223  if args.offline:
224  from IOVDbSvc.IOVDbSvcConfig import addFolders
225  for fld in flds:
226  if 'OFC' in fld:
227  if args.ftag:
228  cfg.merge(addFolders(flags,fld,tag="".join(foldername.split('/')) + args.ftag))
229  else:
230  cfg.merge(addFolders(flags,fld))
231  ckey= 'LArOFC' if '1phase' in fld else 'LArOFC'
232  break
233  else:
234  ckey = "LArOFCSCCali" if flags.LArCalib.isSC else "LArOFCCali"
235  fldr = "/LAR/ElecCalibFlatSC/OFCCali" if flags.LArCalib.isSC else "/LAR/ElecCalibFlat/OFCCali"
236  dbString = "<db>sqlite://;schema="+args.sqlite+";dbname=CONDBR2" if args.sqlite else "<db>COOLONL_LAR/CONDBR2</db>"
237  from IOVDbSvc.IOVDbSvcConfig import addFolders
238  cfg.merge(addFolders(flags,fldr,detDb=dbString,className="CondAttrListCollection"))
239  LArOFCSCCondAlg = CompFactory.getComp("LArFlatConditionsAlg<LArOFCSC>")("LArOFCSCCaliCondAlg")
240  LArOFCSCCondAlg.ReadKey=fldr
241  LArOFCSCCondAlg. WriteKey=ckey
242  cfg.addCondAlgo(LArOFCSCCondAlg)
243 
244  cfg.addEventAlgo(CompFactory.LArOFC2Ntuple("LArOFC2NtupleCali",
245  AddFEBTempInfo = False,
246  ContainerKey=ckey,
247  NtupleName="OFCCali" if args.ntname=='' else args.ntname,
248  isSC = flags.LArCalib.isSC,
249  BadChanKey = bcKey
250  ))
251 
252 
253  if "Shape" in objects:
254  ckey = "LArShapeSC" if flags.LArCalib.isSC else "LArShape"
255  if flags.Input.isMC:
256  ckey="LArShapeSym"
257  cfg.addEventAlgo(CompFactory.LArShape2Ntuple(ContainerKey=ckey,
258  AddFEBTempInfo = False,
259  AddCalib = True,
260  isSC = flags.LArCalib.isSC,
261  BadChanKey = bcKey
262 
263  ))
264  if "MphysOverMcal" in objects:
265  cfg.addEventAlgo(CompFactory.LArMphysOverMcal2Ntuple(ContainerKey = "LArMphysOverMcalSC" if flags.LArCalib.isSC else "LArMphysOverMcal",
266  AddFEBTempInfo = False,
267  AddCalib = True,
268  isSC = flags.LArCalib.isSC,
269  BadChanKey = bcKey
270  ))
271 
272  #ADC2MeV and DACuA are handled by the same ntuple dumper
273  if "DAC2uA" in objects or "uA2MeV" in objects:
274  uackey = "LAruA2MeVSC" if flags.LArCalib.isSC else "LAruA2MeV"
275  dackey = "LArDAC2uASC" if flags.LArCalib.isSC else "LArDAC2uA"
276  ua2MeVKey="LAruA2MeVSym" if flags.Input.isMC else uackey
277  dac2uAKey="LArDAC2uASym" if flags.Input.isMC else dackey
278 
279  cfg.addEventAlgo(CompFactory.LAruA2MeV2Ntuple(uA2MeVKey=ua2MeVKey if "uA2MeV" in objects else "",
280  DAC2uAKey=dac2uAKey if "DAC2uA" in objects else "",
281  isSC = flags.LArCalib.isSC,
282  BadChanKey = bcKey
283  ))
284 
285 
286  if "HVScaleCorr" in objects:
287  cfg.addEventAlgo(CompFactory.LArHVScaleCorr2Ntuple(ContainerKey= "LArHVScaleCorrSC" if flags.LArCalib.isSC else "LArHVScaleCorr",
288  AddFEBTempInfo = False,
289  isSC = flags.LArCalib.isSC,
290  BadChanKey = bcKey
291  ))
292 
293  if "fSampl" in objects:
294  cfg.addEventAlgo(CompFactory.LArfSampl2Ntuple(ContainerKey="LArfSamplSC" if flags.LArCalib.isSC else "LArfSamplSym",
295  isSC=flags.LArCalib.isSC
296  ))
297 
298  if "CaliWave" in objects:
299  if flags.Input.isMC:
300  print('No CaliWave in MC')
301  else:
302  fld = "/LAR/ElecCalibOflSC/CaliWaves/CaliWave" if flags.LArCalib.isSC else "/LAR/ElecCalibOfl/CaliWaves/CaliWave"
303  from IOVDbSvc.IOVDbSvcConfig import addFolders
304  cfg.merge(addFolders(flags,fld,modifiers='<key>LArCaliWave</key><typeName>LArCaliWaveContainer</typeName>'))
305  cfg.addEventAlgo(CompFactory.LArCaliWaves2Ntuple(KeyList = ["LArCaliWave"],
306  NtupleName = "CALIWAVE",
307  AddFEBTempInfo = False,
308  SaveDerivedInfo = True,
309  AddCalib = True,
310  SaveJitter = True,
311  isFlat = False,
312  isSC = flags.LArCalib.isSC,
313  BadChanKey = bcKey
314  ))
315 
316  if "PhysWave" in objects:
317  if flags.Input.isMC:
318  print('No PhysWave in MC yet')
319  else:
320  fld = "/LAR/ElecCalibOflSC/PhysWaves/RTM" if flags.LArCalib.isSC else "/LAR/ElecCalibOfl/PhysWaves/RTM"
321  from IOVDbSvc.IOVDbSvcConfig import addFolders
322  cfg.merge(addFolders(flags,fld))
323  cfg.addEventAlgo(CompFactory.LArPhysWaves2Ntuple(KeyList = ["LArPhysWave"],
324  NtupleName = "PHYSWAVE",
325  AddFEBTempInfo = False,
326  SaveDerivedInfo = True,
327  AddCalib = True,
328  isFlat = False,
329  isSC = flags.LArCalib.isSC,
330  BadChanKey = bcKey
331  ))
332 
333  rootfile=args.out
334  if os.path.exists(rootfile):
335  os.remove(rootfile)
336  cfg.addService(CompFactory.NTupleSvc(Output = [ "FILE1 DATAFILE='"+rootfile+"' OPT='NEW'" ]))
337  cfg.setAppProperty("HistogramPersistency","ROOT")
338 
339  if args.dbtag and 'CALIB' in args.dbtag:
340  cfg.getService("IOVDbSvc").DBInstance=""
341 
342  if args.poolcat:
343  cfg.getService("PoolSvc").ReadCatalog+=["xmlcatalog_file:%s"%args.poolcat,]
344 
345  cfg.run(1)
346  sys.exit(0)
347 
python.LArElecCalibDBConfig.LArElecCalibDBCfg
def LArElecCalibDBCfg(flags, condObjs)
Definition: LArElecCalibDBConfig.py:47
LArCablingConfig.LArOnOffIdMappingSCCfg
def LArOnOffIdMappingSCCfg(configFlags)
Definition: LArCablingConfig.py:65
python.LArBadChannelConfig.LArBadChannelCfg
def LArBadChannelCfg(configFlags, tag=None, isSC=False)
Definition: LArBadChannelConfig.py:8
LArCablingConfig.LArLATOMEMappingCfg
def LArLATOMEMappingCfg(configFlags)
Definition: LArCablingConfig.py:95
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
python.McEventSelectorConfig.McEventSelectorCfg
def McEventSelectorCfg(flags, **kwargs)
Definition: McEventSelectorConfig.py:5
python.IOVDbSvcConfig.addFolders
def addFolders(flags, folderStrings, detDb=None, className=None, extensible=False, tag=None, db=None, modifiers='')
Definition: IOVDbSvcConfig.py:81
LArCablingConfig.LArOnOffIdMappingCfg
def LArOnOffIdMappingCfg(configFlags)
Definition: LArCablingConfig.py:62
LArGMConfig.LArGMCfg
def LArGMCfg(flags)
Definition: LArGMConfig.py:8
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
LArCablingConfig.LArCalibIdMappingSCCfg
def LArCalibIdMappingSCCfg(configFlags)
Definition: LArCablingConfig.py:86
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.LArElecCalibDBConfig.LArElecCalibDBSCCfg
def LArElecCalibDBSCCfg(flags, condObjs, sqlite=None)
Definition: LArElecCalibDBConfig.py:126
python.LArCalibConfigFlags.addLArCalibFlags
def addLArCalibFlags(flags, isSC=False)
Definition: LArCalibConfigFlags.py:3
LArCablingConfig.LArCalibIdMappingCfg
def LArCalibIdMappingCfg(configFlags)
Definition: LArCablingConfig.py:83