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 
27  args = parser.parse_args()
28  if help in args and args.help is not None and args.help:
29  parser.print_help()
30  sys.exit(0)
31 
32 
33  #Translation table ... with a few potential variant spellings
34  objTable={"RAMP":"Ramp",
35  "DAC2UA":"DAC2uA",
36  "DACUA":"DAC2uA",
37  "PEDESTAL":"Pedestal",
38  "PED":"Pedestal",
39  "UA2MEV":"uA2MeV",
40  "UAMEV":"uA2MeV",
41  "MPHYSOVERMCAL":"MphysOverMcal",
42  "MPHYSMCAL":"MphysOverMcal",
43  "MPMC":"MphysOverMcal",
44  "OFC":"OFC",
45  "SHAPE":"Shape",
46  "HVSCALECORR":"HVScaleCorr",
47  "HVSCALE":"HVScaleCorr",
48  "FSAMPL":"fSampl",
49  "AUTOCORR":"AutoCorr",
50  "AC":"AutoCorr",
51  "CALIWAVE":"CaliWave",
52  "PHYSWAVE":"PhysWave",
53  "OFCCALI":"OFCCali"
54  }
55 
56  objects=set()
57  objectsOnl=set()
58  for obj in args.objects.split(","):
59  objU=obj.upper()
60  if objU not in objTable:
61  print("ERROR: Unknown conditions type",obj)
62  sys.exit(0)
63 
64  objects.add(objTable[objU])
65  if "OFCCALI" not in obj.upper() and 'WAVE' not in obj.upper() and not args.offline:
66  objectsOnl.add(objTable[objU])
67 
68  flds=set()
69  for fld in args.folders.split(","):
70  flds.add(fld)
71 
72  from AthenaConfiguration.AllConfigFlags import initConfigFlags
74  from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
75  addLArCalibFlags(flags, args.isSC)
76 
77  flags.Input.RunNumbers=[args.run]
78  from AthenaConfiguration.TestDefaults import defaultGeometryTags
79  flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
80 
81  flags.Input.Files=[]
82 
83  flags.Input.isMC=args.isMC
84  flags.LArCalib.isSC=args.isSC
85 
86  flags.LAr.doAlign=False
87 
88  flags.LAr.OFCShapeFolder=args.ofcfolder
89 
90  from AthenaConfiguration.Enums import LHCPeriod
91  if flags.Input.RunNumbers[0] < 222222:
92  #Set to run1 for early run-numbers
93  flags.GeoModel.Run=LHCPeriod.Run1
94  flags.IOVDb.DatabaseInstance="OFLP200" if flags.Input.isMC else "COMP200"
95  else:
96  flags.GeoModel.Run=LHCPeriod.Run2
97  flags.IOVDb.DatabaseInstance="OFLP200" if flags.Input.isMC else "CONDBR2"
98 
99  if args.dbtag:
100  flags.IOVDb.GlobalTag=args.dbtag
101  elif flags.Input.isMC:
102  flags.IOVDb.GlobalTag="OFLCOND-MC16-SDR-20"
103  elif flags.IOVDb.DatabaseInstance == "COMP200":
104  flags.IOVDb.GlobalTag="COMCOND-BLKPA-RUN1-09"
105  else:
106  flags.IOVDb.GlobalTag="CONDBR2-ES1PA-2024-01"
107 
108  #flags.Exec.OutputLevel=1
109 
110  if (args.sqlite):
111  flags.IOVDb.SqliteInput=args.sqlite
112  flags.IOVDb.SqliteFolders=tuple(flds)
113  if len(objects)!=len(objectsOnl):
114  flags.IOVDb.DBConnection="COOLOFL_LAR/CONDBR2"
115 
116  flags.lock()
117 
118  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
119  cfg=MainServicesCfg(flags)
120 
121  #MC Event selector since we have no input data file
122  from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
123  cfg.merge(McEventSelectorCfg(flags,
124  EventsPerRun = 1,
125  FirstEvent = 1,
126  InitialTimeStamp = 0,
127  TimeStampInterval = 1))
128 
129 
130 
131  #Get LAr basic services and cond-algos
132  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
133  cfg.merge(LArGMCfg(flags))
134 
135  if flags.LArCalib.isSC:
136  #Setup SuperCell cabling
137  from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg, LArCalibIdMappingSCCfg, LArLATOMEMappingCfg
138  cfg.merge(LArOnOffIdMappingSCCfg(flags))
139  cfg.merge(LArCalibIdMappingSCCfg(flags))
140  cfg.merge(LArLATOMEMappingCfg(flags))
141  if not args.offline:
142  from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBSCCfg
143  cfg.merge(LArElecCalibDBSCCfg(flags,objectsOnl))
144  else:
145  #Setup regular cabling
146  from LArCabling.LArCablingConfig import LArOnOffIdMappingCfg, LArCalibIdMappingCfg
147  cfg.merge(LArOnOffIdMappingCfg(flags))
148  cfg.merge(LArCalibIdMappingCfg(flags))
149  if not args.offline:
150  from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
151  cfg.merge(LArElecCalibDBCfg(flags,objectsOnl))
152 
153  from LArBadChannelTool.LArBadChannelConfig import LArBadChannelCfg
154  cfg.merge(LArBadChannelCfg(flags, isSC=flags.LArCalib.isSC))
155 
156  bcKey = "LArBadChannelSC" if flags.LArCalib.isSC else "LArBadChannel"
157 
158  if "Pedestal" in objects:
159  ckey = "LArPedestalSC" if flags.LArCalib.isSC else "LArPedestal"
160  cfg.addEventAlgo(CompFactory.LArPedestals2Ntuple(ContainerKey = ckey,
161  AddFEBTempInfo = False,
162  AddCalib = True,
163  isSC = flags.LArCalib.isSC,
164  BadChanKey = bcKey
165  ))
166 
167  if "AutoCorr" in objects:
168  ckey="LArAutoCorrSC" if flags.LArCalib.isSC else "LArAutoCorr"
169  cfg.addEventAlgo(CompFactory.LArAutoCorr2Ntuple(ContainerKey = "LArAutoCorrSym" if flags.Input.isMC else ckey,
170  AddFEBTempInfo = False,
171  AddCalib = True,
172  isSC = flags.LArCalib.isSC,
173  BadChanKey = bcKey
174  ))
175  if "Ramp" in objects:
176  ckey = "LArRampSC" if flags.LArCalib.isSC else "LArRamp"
177  cfg.addEventAlgo(CompFactory.LArRamps2Ntuple(RampKey="LArRampSym" if flags.Input.isMC else ckey,
178  AddFEBTempInfo = False,
179  AddCalib = True,
180  isSC = flags.LArCalib.isSC,
181  BadChanKey = bcKey
182  ))
183 
184  if "OFC" in objects:
185  if args.offline:
186  from IOVDbSvc.IOVDbSvcConfig import addFolders
187  for fld in flds:
188  if 'OFC' in fld:
189  if args.ftag:
190  cfg.merge(addFolders(flags,fld,tag="".join(foldername.split('/')) + args.ftag))
191  else:
192  cfg.merge(addFolders(flags,fld))
193  ckey= 'LArOFC' if '1phase' in fld else 'LArLArOFCPhys4samples'
194  break
195  else:
196  ckey = "LArOFCSC" if flags.LArCalib.isSC else "LArOFC"
197  cfg.addEventAlgo(CompFactory.LArOFC2Ntuple(AddFEBTempInfo = False,
198  ContainerKey=ckey,
199  isSC = flags.LArCalib.isSC,
200  BadChanKey = bcKey
201  ))
202 
203  if "OFCCali" 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 'LArOFC'
213  break
214  else:
215  ckey = "LArOFCSCCali" if flags.LArCalib.isSC else "LArOFCCali"
216  fldr = "/LAR/ElecCalibFlatSC/OFCCali" if flags.LArCalib.isSC else "/LAR/ElecCalibFlat/OFCCali"
217  dbString = "<db>sqlite://;schema="+args.sqlite+";dbname=CONDBR2" if args.sqlite else "<db>COOLONL_LAR/CONDBR2</db>"
218  from IOVDbSvc.IOVDbSvcConfig import addFolders
219  cfg.merge(addFolders(flags,fldr,detDb=dbString,className="CondAttrListCollection"))
220  LArOFCSCCondAlg = CompFactory.getComp("LArFlatConditionsAlg<LArOFCSC>")("LArOFCSCCaliCondAlg")
221  LArOFCSCCondAlg.ReadKey=fldr
222  LArOFCSCCondAlg. WriteKey=ckey
223  cfg.addCondAlgo(LArOFCSCCondAlg)
224 
225  cfg.addEventAlgo(CompFactory.LArOFC2Ntuple("LArOFC2NtupleCali",
226  AddFEBTempInfo = False,
227  ContainerKey=ckey,
228  NtupleName="OFCCali",
229  isSC = flags.LArCalib.isSC,
230  BadChanKey = bcKey
231  ))
232 
233 
234  if "Shape" in objects:
235  ckey = "LArShapeSC" if flags.LArCalib.isSC else "LArShape"
236  if flags.Input.isMC:
237  ckey="LArShapeSym"
238  cfg.addEventAlgo(CompFactory.LArShape2Ntuple(ContainerKey=ckey,
239  AddFEBTempInfo = False,
240  AddCalib = True,
241  isSC = flags.LArCalib.isSC,
242  BadChanKey = bcKey
243 
244  ))
245  if "MphysOverMcal" in objects:
246  cfg.addEventAlgo(CompFactory.LArMphysOverMcal2Ntuple(ContainerKey = "LArMphysOverMcalSC" if flags.LArCalib.isSC else "LArMphysOverMcal",
247  AddFEBTempInfo = False,
248  AddCalib = True,
249  isSC = flags.LArCalib.isSC,
250  BadChanKey = bcKey
251  ))
252 
253  #ADC2MeV and DACuA are handled by the same ntuple dumper
254  if "DAC2uA" in objects or "uA2MeV" in objects:
255  uackey = "LAruA2MeVSC" if flags.LArCalib.isSC else "LAruA2MeV"
256  dackey = "LArDAC2uASC" if flags.LArCalib.isSC else "LArDAC2uA"
257  ua2MeVKey="LAruA2MeVSym" if flags.Input.isMC else uackey
258  dac2uAKey="LArDAC2uASym" if flags.Input.isMC else dackey
259 
260  cfg.addEventAlgo(CompFactory.LAruA2MeV2Ntuple(uA2MeVKey=ua2MeVKey if "uA2MeV" in objects else "",
261  DAC2uAKey=dac2uAKey if "DAC2uA" in objects else "",
262  isSC = flags.LArCalib.isSC,
263  BadChanKey = bcKey
264  ))
265 
266 
267  if "HVScaleCorr" in objects:
268  cfg.addEventAlgo(CompFactory.LArHVScaleCorr2Ntuple(ContainerKey= "LArHVScaleCorrSC" if flags.LArCalib.isSC else "LArHVScaleCorr",
269  AddFEBTempInfo = False,
270  isSC = flags.LArCalib.isSC,
271  BadChanKey = bcKey
272  ))
273 
274  if "fSampl" in objects:
275  cfg.addEventAlgo(CompFactory.LArfSampl2Ntuple(ContainerKey="LArfSamplSC" if flags.LArCalib.isSC else "LArfSamplSym",
276  isSC=flags.LArCalib.isSC
277  ))
278 
279  if "CaliWave" in objects:
280  if flags.Input.isMC:
281  print('No CaliWave in MC')
282  else:
283  fld = "/LAR/ElecCalibOflSC/CaliWaves/CaliWave" if flags.LArCalib.isSC else "/LAR/ElecCalibOfl/CaliWaves/CaliWave"
284  from IOVDbSvc.IOVDbSvcConfig import addFolders
285  #cfg.merge(addFolders(flags,fld,className="LArCaliWaveContainer"))
286  cfg.merge(addFolders(flags,fld))
287  cfg.addEventAlgo(CompFactory.LArCaliWaves2Ntuple(KeyList = ["LArCaliWave"],
288  NtupleName = "CALIWAVE",
289  AddFEBTempInfo = False,
290  SaveDerivedInfo = True,
291  AddCalib = True,
292  SaveJitter = True,
293  isFlat = False,
294  isSC = flags.LArCalib.isSC,
295  BadChanKey = bcKey
296  ))
297 
298  if "PhysWave" in objects:
299  if flags.Input.isMC:
300  print('No PhysWave in MC yet')
301  else:
302  fld = "/LAR/ElecCalibOflSC/PhysWaves/RTM" if flags.LArCalib.isSC else "/LAR/ElecCalibOfl/PhysWaves/RTM"
303  from IOVDbSvc.IOVDbSvcConfig import addFolders
304  #cfg.merge(addFolders(flags,fld,className="LArPhysWaveContainer"))
305  cfg.merge(addFolders(flags,fld))
306  cfg.addEventAlgo(CompFactory.LArPhysWaves2Ntuple(KeyList = ["LArPhysWave"],
307  NtupleName = "PHYSWAVE",
308  AddFEBTempInfo = False,
309  SaveDerivedInfo = True,
310  AddCalib = True,
311  isFlat = False,
312  isSC = flags.LArCalib.isSC,
313  BadChanKey = bcKey
314  ))
315 
316  rootfile=args.out
317  if os.path.exists(rootfile):
318  os.remove(rootfile)
319  cfg.addService(CompFactory.NTupleSvc(Output = [ "FILE1 DATAFILE='"+rootfile+"' OPT='NEW'" ]))
320  cfg.setAppProperty("HistogramPersistency","ROOT")
321 
322  if args.dbtag and 'CALIB' in args.dbtag:
323  cfg.getService("IOVDbSvc").DBInstance=""
324 
325  cfg.run(1)
326  sys.exit(0)
327 
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:252
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:72
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:224
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
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
python.LArCalibConfigFlags.addLArCalibFlags
def addLArCalibFlags(flags, isSC=False)
Definition: LArCalibConfigFlags.py:3
LArCablingConfig.LArCalibIdMappingCfg
def LArCalibIdMappingCfg(configFlags)
Definition: LArCablingConfig.py:83