5from AthenaConfiguration.ComponentFactory
import CompFactory
6from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
8if __name__==
'__main__':
13 from AthenaCommon
import Logging
14 log = Logging.logging.getLogger(
'LArSC2Ntuple' )
16 parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
18 parser.add_argument(
'-i',
'--indir', dest=
'indir', default=
"/eos/atlas/atlastier0/rucio/data_test/calibration_pulseall/00414414/data_test.00414414.calibration_pulseall.daq.RAW/", help=
'input files dir', type=str)
19 parser.add_argument(
'-p',
'--inprefix', dest=
'inpref', default=
"data_test", help=
'Input filenames prefix', type=str)
20 parser.add_argument(
'-y',
'--inppatt', dest=
'inppatt', default=
"lb3512", help=
'Input filenames pattern', type=str)
21 parser.add_argument(
'-f',
'--infile', dest=
'infile', default=
"", help=
'Input filename (if given indir and inprefix are ignored', type=str)
22 parser.add_argument(
'-r',
'--run', dest=
'run', default=0, help=
'Run number (if not given trying to judge from input file name)', type=int)
23 parser.add_argument(
'-m',
'--maxev', dest=
'maxev', default=-1, help=
'Max number of events to dump', type=int)
24 parser.add_argument(
'-x',
'--outlevel', dest=
'olevel', default=5, help=
'OuputLevel for dumping algo', type=int)
25 parser.add_argument(
'-o',
'--outfile', dest=
'outfile', default=
"Digits.root", help=
'Output root filename', type=str)
26 parser.add_argument(
'-s',
'--addSamples', dest=
'samples', default=
False, help=
'Add Samples to output ntuple', action=
"store_true")
27 parser.add_argument(
'-a',
'--addSampBas', dest=
'samplesBas', default=
False, help=
'Add ADC_BAS to output ntuple', action=
"store_true")
28 parser.add_argument(
'--addAccSamples', dest=
'accsamples', default=
False, help=
'work on accumulated samples', action=
"store_true")
29 parser.add_argument(
'--addAccCalibSamples', dest=
'acccalibsamples', default=
False, help=
'work on accumulated samples', action=
"store_true")
30 parser.add_argument(
'-z',
'--addEt', dest=
'Et', default=
False, help=
'Add ET to output ntuple', action=
"store_true")
31 parser.add_argument(
'-g',
'--addEtId', dest=
'EtId', default=
False, help=
'Add ET_ID to output ntuple', action=
"store_true")
32 parser.add_argument(
'-l',
'--noLatHeader', dest=
'lheader', default=
True, help=
'Add LATOME Header to output ntuple', action=
'store_false')
33 parser.add_argument(
'-b',
'--noBCID', dest=
'bcid', default=
True, help=
'Add BCID info to output ntuple', action=
'store_false')
34 parser.add_argument(
'-e',
'--expandId', dest=
'expid', default=
False, help=
'Expand online Id to fields', action=
'store_true')
35 parser.add_argument(
'-n',
'--nsamp', dest=
'nsamp', default=0, help=
'Number of samples to dump', type=int)
36 parser.add_argument(
'-c',
'--overEvNumber', dest=
'overEvN', default=
False, help=
'Overwrite event number', action=
'store_true')
37 parser.add_argument(
'-d',
'--addHash', dest=
'ahash', default=
False, help=
'Add hash number to output ntuple', action=
'store_true')
38 parser.add_argument(
'-j',
'--addOffline', dest=
'offline', default=
False, help=
'Add offline Id to output ntuple', action=
'store_true')
39 parser.add_argument(
'-k',
'--addCalib', dest=
'calib', default=
False, help=
'Add calib. info to output ntuple', action=
'store_true')
40 parser.add_argument(
'-t',
'--addGeom', dest=
'geom', default=
False, help=
'Add real geom info to output ntuple', action=
'store_true')
41 parser.add_argument(
'-u',
'--noBC', dest=
'bc', default=
False, help=
'Add Bad. chan info to output ntuple', action=
'store_true')
42 parser.add_argument(
'-w',
'--addROD', dest=
'rod', default=
False, help=
'Add ROD energies sum to output ntuple', action=
'store_true')
43 parser.add_argument(
'-v',
'--addEvTree', dest=
'evtree', default=
False, help=
'Add tree with per event info to output ntuple', action=
'store_true')
44 parser.add_argument(
'-q',
'--addNoisyRO', dest=
'noisyRO', default=
False, help=
'Add reco and info from LArNoisyROSummary to output ntuple', action=
'store_true')
45 parser.add_argument(
'--addTT', dest=
'TT', default=
False, help=
'Add info from LArTriggerTowers to output ntuple', action=
'store_true')
46 parser.add_argument(
'--EMF', dest=
'emf', default=
False, help=
'Is it for EMF', action=
'store_true')
47 parser.add_argument(
'--FW6', dest=
'fw6', default=
False, help=
'Is it for fw v. 6', action=
'store_true')
48 parser.add_argument(
'--FTs', dest=
'ft', default=[], nargs=
"+", type=int, help=
'list of FT which will be read out (space separated).')
49 parser.add_argument(
'--posneg', dest=
'posneg', default=[], nargs=
"+", help=
'side to read out (-1 means both), can give multiple arguments (space separated). Default %(default)s.', type=int,choices=range(-1,2))
50 parser.add_argument(
'--barrel_ec', dest=
'be', default=[], nargs=
"+", help=
'subdet to read out (-1 means both), can give multiple arguments (space separated) Default %(default)s.', type=int,choices=range(-1,2))
51 parser.add_argument(
'--ETThresh', dest=
'etthresh', default=-1., help=
'ET threshold to dump info', type=float)
52 parser.add_argument(
'--ETThreshMain', dest=
'etthreshmain', default=-1., help=
'ET threshold from Main to dump info', type=float)
53 parser.add_argument(
'--ADCThresh', dest=
'adcthresh', default=-1, help=
'ADC threshold to dump info', type=int)
54 parser.add_argument(
'--doPEBStream', dest=
'peb', default=
False, help=
'Is it for PEB stream', action=
'store_true')
56 args = parser.parse_args()
57 if help
in args
and args.help
is not None and args.help:
61 for _, value
in args._get_kwargs():
66 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
67 flags=initConfigFlags()
68 if args.accsamples
or args.acccalibsamples:
69 from LArCalibProcessing.LArCalibConfigFlags
import addLArCalibFlags
70 addLArCalibFlags(flags,
True)
71 if len(args.posneg) >= 0:
72 flags.LArCalib.Preselection.Side = args.posneg
74 flags.LArCalib.Preselection.BEC = args.be
76 flags.LArCalib.Preselection.FT = args.ft
78 from LArCafJobs.LArSCDumperFlags
import addSCDumpFlags
82 if (args.accsamples
or args.acccalibsamples)
and (args.samples
or args.samplesBas):
83 log.error(
'Could not dump both samples and accumulated calib samples')
85 if args.accsamples
and args.acccalibsamples:
86 log.error(
'Could not dump both accsamples and acc calib samples')
89 if len(args.infile) > 0:
90 flags.Input.Files = [args.infile]
91 elif len(args.inppatt) > 0:
92 from LArCalibProcessing.GetInputFiles
import GetInputFilesFromPattern
93 flags.Input.Files = GetInputFilesFromPattern(args.indir,args.inppatt)
95 from LArCalibProcessing.GetInputFiles
import GetInputFilesFromPrefix
96 flags.Input.Files = GetInputFilesFromPrefix(args.indir,args.inpref)
99 flags.Input.RunNumbers = [args.run]
102 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
103 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
106 flags.LArSCDump.accdigitsKey=
"accSC"
108 flags.LArSCDump.accdigitsKey=
""
109 if args.acccalibsamples:
110 flags.LArSCDump.acccalibdigitsKey=
"acccalibSC"
112 flags.LArSCDump.acccalibdigitsKey=
""
114 flags.LArSCDump.doBC = args.bc
115 bckey=
'LArBadChannel'
117 flags.LArSCDump.digitsKey=
""
124 runinfo=getLArDTInfoForRun(flags.Input.RunNumbers[0], connstring=
"COOLONL_LAR/CONDBR2")
126 log.warning(
"Could not get DT run info, using defaults !")
127 flags.LArSCDump.doEt=
True
129 flags.LArSCDump.nSamples=args.nsamp
131 flags.LArSCDump.nSamples=5
132 flags.LArSCDump.nEt=1
134 flags.LArSCDump.digitsKey=
"SC"
137 fwversion=runinfo.FWversion()
138 if not (args.accsamples
or args.acccalibsamples):
139 flags.LArSCDump.digitsKey=
""
141 for i
in range(0,len(runinfo.streamTypesPEB())):
142 if args.EtId
and runinfo.streamTypesPEB()[i] ==
"SelectedEnergy":
143 CKeys += [
"SC_ET_ID"]
144 flags.LArSCDump.doEt=
True
145 flags.LArSCDump.nEt=runinfo.streamLengthsPEB()[i]
146 elif args.Et
and runinfo.streamTypesPEB()[i] ==
"Energy":
148 flags.LArSCDump.doEt=
True
149 flags.LArSCDump.nEt=runinfo.streamLengthsPEB()[i]
150 elif args.samples
and runinfo.streamTypesPEB()[i] ==
"RawADC":
151 flags.LArSCDump.digitsKey=
"SC"
153 flags.LArSCDump.nSamples=args.nsamp
155 flags.LArSCDump.nSamples=runinfo.streamLengthsPEB()[i]
156 elif args.samplesBas
and runinfo.streamTypesPEB()[i] ==
"ADC":
157 CKeys += [
"SC_ADC_BAS"]
159 flags.LArSCDump.nSamples=args.nsamp
161 flags.LArSCDump.nSamples=runinfo.streamLengthsPEB()[i]
164 for i
in range(0,len(runinfo.streamTypes())):
165 if args.EtId
and runinfo.streamTypes()[i] ==
"SelectedEnergy":
166 CKeys += [
"SC_ET_ID"]
167 flags.LArSCDump.doEt=
True
168 flags.LArSCDump.nEt=runinfo.streamLengths()[i]
169 elif args.Et
and runinfo.streamTypes()[i] ==
"Energy":
171 flags.LArSCDump.doEt=
True
172 flags.LArSCDump.nEt=runinfo.streamLengths()[i]
173 elif args.samples
and runinfo.streamTypes()[i] ==
"RawADC":
174 flags.LArSCDump.digitsKey=
"SC"
176 flags.LArSCDump.nSamples=args.nsamp
178 flags.LArSCDump.nSamples=runinfo.streamLengths()[i]
179 elif args.samplesBas
and runinfo.streamTypes()[i] ==
"ADC":
180 CKeys += [
"SC_ADC_BAS"]
182 flags.LArSCDump.nSamples=args.nsamp
184 flags.LArSCDump.nSamples=runinfo.streamLengths()[i]
185 if args.nsamp > 0
and args.nsamp < flags.LArSCDump.nSamples:
186 flags.LArSCDump.nSamples=args.nsamp
189 if args.accsamples
or args.acccalibsamples:
190 flags.Input.OverrideRunNumber =
True
196 if args.samples
and not (
"SC" in flags.LArSCDump.digitsKey):
197 flags.LArSCDump.digitsKey=
"SC"
198 if args.samplesBas
and "SC_ADC_BAS" not in CKeys:
199 CKeys += [
"SC_ADC_BAS"]
200 flags.LArSCDump.doSamplesBas=
True
201 if args.Et
and "SC_ET" not in CKeys:
203 if args.EtId
and "SC_ET_ID" not in CKeys:
204 CKeys += [
"SC_ET_ID"]
205 if args.lheader
and "SC_LATOME_HEADER" not in CKeys:
206 CKeys += [
"SC_LATOME_HEADER"]
209 flags.LArSCDump.doRawChan=
True
210 CKeys += [
"LArRawChannels"]
211 log.info(
"Adding ROD energies")
213 log.info(
"Autoconfigured: ")
214 log.info(
"nSamples: %d nEt: %d digitsKey %s accdigitsKey %s acccalibdigitsKey %s",flags.LArSCDump.nSamples, flags.LArSCDump.nEt, flags.LArSCDump.digitsKey, flags.LArSCDump.accdigitsKey, flags.LArSCDump.acccalibdigitsKey)
218 flags.LAr.doAlign=
False
221 flags.Trigger.triggerConfig =
'DB'
222 flags.Trigger.L1.doCTP =
True
223 flags.Trigger.L1.doMuon =
False
224 flags.Trigger.L1.doCalo =
False
225 flags.Trigger.L1.doTopo =
False
227 flags.Trigger.enableL1CaloLegacy =
True
228 flags.Trigger.enableL1CaloPhase1 =
False
231 flags.Trigger.L1.doCalo =
True
232 flags.Trigger.triggerConfig =
'DB'
234 flags.LArSCDump.fillNoisyRO=args.noisyRO
237 flags.Exec.OutputLevel=args.olevel
244 flags.IOVDb.SqliteInput=
"/afs/cern.ch/user/p/pavol/public/EMF_otherCond.db"
245 flags.IOVDb.SqliteFolders = (
"/LAR/BadChannelsOfl/BadChannelsSC",
"/LAR/BadChannels/BadChannelsSC",
"/LAR/Identifier/OnOffIdMap",)
247 if args.etthresh > 0.:
248 flags.LArSCDump.ETThresh = args.etthresh
250 if args.etthreshmain > 0.:
251 flags.LArSCDump.ETThreshMain = args.etthreshmain
254 flags.dump(
'LArSCDump.*')
259 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
260 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
262 acc = MainServicesCfg(flags)
263 acc.merge(LArGMCfg(flags))
266 from LArCalibProcessing.LArCalibBaseConfig
import LArCalibBaseCfg
267 acc.merge(LArCalibBaseCfg(flags))
268 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
269 acc.merge(ByteStreamReadCfg(flags))
272 from LArCafJobs.LArSCDumperSkeleton
import L1CaloMenuCfg
273 acc.merge(L1CaloMenuCfg(flags))
274 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
275 tdt = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
280 if args.fw6
or fwversion==6:
282 from IOVDbSvc.IOVDbSvcConfig
import addOverride
284 acc.merge(addOverride(flags,
"/LAR/Identifier/LatomeMapping",
"LARIdentifierLatomeMapping-emf-fw6"))
286 acc.merge(addOverride(flags,
"/LAR/Identifier/LatomeMapping",
"LARIdentifierLatomeMapping-fw6"))
288 from LArBadChannelTool.LArBadChannelConfig
import LArBadFebCfg, LArBadChannelCfg
289 acc.merge(LArBadChannelCfg(flags,
None,
True))
290 acc.merge(LArBadFebCfg(flags))
294 acc.addCondAlgo(CompFactory.CaloAlignCondAlg(LArAlignmentStore=
"",CaloCellPositionShiftFolder=
""))
295 acc.addCondAlgo(CompFactory.CaloSuperCellAlignCondAlg())
298 from LArCalibTools.LArSC2NtupleConfig
import LArSC2NtupleCfg
299 acc.merge(LArSC2NtupleCfg(flags, isEmf = args.emf, AddBadChannelInfo=args.bc, AddFEBTempInfo=
False, isSC=
True, isFlat=
False,
300 OffId=args.offline, AddHash=args.ahash, AddCalib=args.calib, RealGeometry=args.geom, ExpandId=args.expid, BadChanKey=bckey,
301 NSamples=flags.LArSCDump.nSamples, FTlist=[], FillBCID=args.bcid, ContainerKey=flags.LArSCDump.digitsKey, AccContainerKey=flags.LArSCDump.accdigitsKey, AccCalibContainerKey=flags.LArSCDump.acccalibdigitsKey,
302 SCContainerKeys=CKeys, OverwriteEventNumber = args.overEvN,
303 FillRODEnergy = flags.LArSCDump.doRawChan,
304 FillLB=args.evtree, FillTriggerType = args.evtree,
305 ETThreshold = flags.LArSCDump.ETThresh, ETThresholdMain = flags.LArSCDump.ETThreshMain, ADCThreshold=args.adcthresh,
306 TrigNames=[
"L1_EM3",
"L1_EM7",
"L1_EM15",
"L1_EM22VHI",
"L1_eEM5",
"L1_eEM15",
"L1_eEM22M"],
307 TrigDecisionTool=tdt, FillTriggerTowers = args.TT,
308 OutputLevel=args.olevel
311 if os.path.exists(args.outfile):
312 os.remove(args.outfile)
313 acc.addService(CompFactory.NTupleSvc(Output = [
"FILE1 DATAFILE='"+args.outfile+
"' OPT='NEW'" ]))
314 acc.setAppProperty(
"HistogramPersistency",
"ROOT")
317 if args.accsamples
or args.acccalibsamples:
318 acc.getService(
"IOVDbSvc").forceRunNumber=int(args.run)
320 acc.getService(
"MessageSvc").defaultLimit=999999
323 acc.getService(
"MessageSvc").defaultLimit=99999999
324 log.info(
"Input files to be processed:")
325 for f
in flags.Input.Files:
327 log.info(
"Output file: ")
328 log.info(args.outfile)