5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
8 if __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)
55 args = parser.parse_args()
56 if help
in args
and args.help
is not None and args.help:
60 for _, value
in args._get_kwargs():
65 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
67 if args.accsamples
or args.acccalibsamples:
68 from LArCalibProcessing.LArCalibConfigFlags
import addLArCalibFlags
70 if len(args.posneg) >= 0:
71 flags.LArCalib.Preselection.Side = args.posneg
73 flags.LArCalib.Preselection.BEC = args.be
75 flags.LArCalib.Preselection.FT = args.ft
77 from LArCafJobs.LArSCDumperFlags
import addSCDumpFlags
81 if (args.accsamples
or args.acccalibsamples)
and (args.samples
or args.samplesBas):
82 log.error(
'Could not dump both samples and accumulated calib samples')
84 if args.accsamples
and args.acccalibsamples:
85 log.error(
'Could not dump both accsamples and acc calib samples')
88 if len(args.infile) > 0:
89 flags.Input.Files = [args.infile]
90 elif len(args.inppatt) > 0:
91 from LArCalibProcessing.GetInputFiles
import GetInputFilesFromPattern
94 from LArCalibProcessing.GetInputFiles
import GetInputFilesFromPrefix
98 flags.Input.RunNumbers = [args.run]
101 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
102 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
105 flags.LArSCDump.accdigitsKey=
"accSC"
107 flags.LArSCDump.accdigitsKey=
""
108 if args.acccalibsamples:
109 flags.LArSCDump.acccalibdigitsKey=
"acccalibSC"
111 flags.LArSCDump.acccalibdigitsKey=
""
113 flags.LArSCDump.doBC = args.bc
114 bckey=
'LArBadChannel'
116 flags.LArSCDump.digitsKey=
""
125 log.warning(
"Could not get DT run info, using defaults !")
126 flags.LArSCDump.doEt=
True
128 flags.LArSCDump.nSamples=args.nsamp
130 flags.LArSCDump.nSamples=5
131 flags.LArSCDump.nEt=1
133 flags.LArSCDump.digitsKey=
"SC"
136 fwversion=runinfo.FWversion()
137 if not (args.accsamples
or args.acccalibsamples):
138 flags.LArSCDump.digitsKey=
""
139 for i
in range(0,len(runinfo.streamTypes())):
140 if args.EtId
and runinfo.streamTypes()[i] ==
"SelectedEnergy":
141 CKeys += [
"SC_ET_ID"]
142 flags.LArSCDump.doEt=
True
143 flags.LArSCDump.nEt=runinfo.streamLengths()[i]
144 elif args.Et
and runinfo.streamTypes()[i] ==
"Energy":
146 flags.LArSCDump.doEt=
True
147 flags.LArSCDump.nEt=runinfo.streamLengths()[i]
148 elif args.samples
and runinfo.streamTypes()[i] ==
"RawADC":
149 flags.LArSCDump.digitsKey=
"SC"
151 flags.LArSCDump.nSamples=args.nsamp
153 flags.LArSCDump.nSamples=runinfo.streamLengths()[i]
154 elif args.samplesBas
and runinfo.streamTypes()[i] ==
"ADC":
155 CKeys += [
"SC_ADC_BAS"]
157 flags.LArSCDump.nSamples=args.nsamp
159 flags.LArSCDump.nSamples=runinfo.streamLengths()[i]
160 if args.nsamp > 0
and args.nsamp < flags.LArSCDump.nSamples:
161 flags.LArSCDump.nSamples=args.nsamp
164 if args.accsamples
or args.acccalibsamples:
165 flags.Input.OverrideRunNumber =
True
171 if args.samples
and not (
"SC" in flags.LArSCDump.digitsKey):
172 flags.LArSCDump.digitsKey=
"SC"
173 if args.samplesBas
and "SC_ADC_BAS" not in CKeys:
174 CKeys += [
"SC_ADC_BAS"]
175 flags.LArSCDump.doSamplesBas=
True
176 if args.Et
and "SC_ET" not in CKeys:
178 if args.EtId
and "SC_ET_ID" not in CKeys:
179 CKeys += [
"SC_ET_ID"]
180 if args.lheader
and "SC_LATOME_HEADER" not in CKeys:
181 CKeys += [
"SC_LATOME_HEADER"]
184 flags.LArSCDump.doRawChan=
True
185 CKeys += [
"LArRawChannels"]
186 log.info(
"Adding ROD energies")
188 log.info(
"Autoconfigured: ")
189 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)
193 flags.LAr.doAlign=
False
196 flags.Trigger.triggerConfig =
'DB'
197 flags.Trigger.L1.doCTP =
True
198 flags.Trigger.L1.doMuon =
False
199 flags.Trigger.L1.doCalo =
False
200 flags.Trigger.L1.doTopo =
False
202 flags.Trigger.enableL1CaloLegacy =
True
203 flags.Trigger.enableL1CaloPhase1 =
False
206 flags.Trigger.L1.doCalo =
True
207 flags.Trigger.triggerConfig =
'DB'
209 flags.LArSCDump.fillNoisyRO=args.noisyRO
212 flags.Exec.OutputLevel=args.olevel
219 flags.IOVDb.SqliteInput=
"/afs/cern.ch/user/p/pavol/public/EMF_otherCond.db"
220 flags.IOVDb.SqliteFolders = (
"/LAR/BadChannelsOfl/BadChannelsSC",
"/LAR/BadChannels/BadChannelsSC",
"/LAR/Identifier/OnOffIdMap",)
222 if args.etthresh > 0.:
223 flags.LArSCDump.ETThresh = args.etthresh
225 if args.etthreshmain > 0.:
226 flags.LArSCDump.ETThreshMain = args.etthreshmain
229 flags.dump(
'LArSCDump.*')
234 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
235 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
241 from LArCalibProcessing.LArCalibBaseConfig
import LArCalibBaseCfg
243 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
247 from LArCafJobs.LArSCDumperSkeleton
import L1CaloMenuCfg
249 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
255 if args.fw6
or fwversion==6:
257 from IOVDbSvc.IOVDbSvcConfig
import addOverride
259 acc.merge(
addOverride(flags,
"/LAR/Identifier/LatomeMapping",
"LARIdentifierLatomeMapping-emf-fw6"))
261 acc.merge(
addOverride(flags,
"/LAR/Identifier/LatomeMapping",
"LARIdentifierLatomeMapping-fw6"))
263 from LArBadChannelTool.LArBadChannelConfig
import LArBadFebCfg, LArBadChannelCfg
269 acc.addCondAlgo(CompFactory.CaloAlignCondAlg(LArAlignmentStore=
"",CaloCellPositionShiftFolder=
""))
270 acc.addCondAlgo(CompFactory.CaloSuperCellAlignCondAlg())
273 from LArCalibTools.LArSC2NtupleConfig
import LArSC2NtupleCfg
274 acc.merge(
LArSC2NtupleCfg(flags, isEmf = args.emf, AddBadChannelInfo=args.bc, AddFEBTempInfo=
False, isSC=
True, isFlat=
False,
275 OffId=args.offline, AddHash=args.ahash, AddCalib=args.calib, RealGeometry=args.geom, ExpandId=args.expid, BadChanKey=bckey,
276 NSamples=flags.LArSCDump.nSamples, FTlist=[], FillBCID=args.bcid, ContainerKey=flags.LArSCDump.digitsKey, AccContainerKey=flags.LArSCDump.accdigitsKey, AccCalibContainerKey=flags.LArSCDump.acccalibdigitsKey,
277 SCContainerKeys=CKeys, OverwriteEventNumber = args.overEvN,
278 FillRODEnergy = flags.LArSCDump.doRawChan,
279 FillLB=args.evtree, FillTriggerType = args.evtree,
280 ETThreshold = flags.LArSCDump.ETThresh, ETThresholdMain = flags.LArSCDump.ETThreshMain, ADCThreshold=args.adcthresh,
281 TrigNames=[
"L1_EM3",
"L1_EM7",
"L1_EM15",
"L1_EM22VHI",
"L1_eEM5",
"L1_eEM15",
"L1_eEM22M"],
282 TrigDecisionTool=tdt, FillTriggerTowers = args.TT,
283 OutputLevel=args.olevel
286 if os.path.exists(args.outfile):
287 os.remove(args.outfile)
288 acc.addService(CompFactory.NTupleSvc(Output = [
"FILE1 DATAFILE='"+args.outfile+
"' OPT='NEW'" ]))
289 acc.setAppProperty(
"HistogramPersistency",
"ROOT")
292 if args.accsamples
or args.acccalibsamples:
293 acc.getService(
"IOVDbSvc").forceRunNumber=
int(args.run)
295 acc.getService(
"MessageSvc").defaultLimit=999999
298 acc.getService(
"MessageSvc").defaultLimit=99999999
299 log.info(
"Input files to be processed:")
300 for f
in flags.Input.Files:
302 log.info(
"Output file: ")
303 log.info(args.outfile)