ATLAS Offline Software
dumpTruth.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 #
5 
6 '''@file dumpTruth.py
7 @author RD Schaffer
8 @date 2023-08-04
9 @brief Script to print out truth events for HepMC (HITS, RDO) or TruthEvent (AOD)
10 '''
11 
12 if __name__=='__main__':
13  # from AthenaCommon.Constants import INFO
14  from argparse import RawTextHelpFormatter
15  from AthenaConfiguration.AllConfigFlags import initConfigFlags
16  flags = initConfigFlags()
17  parser = flags.getArgumentParser(description='Run ASCII dumper of Truth on files with either HepMC or TruthEvent format.\
18  User MUST provide file(s) to read (--filesInput).\
19  If file name has EVNT, HITS, RDO or AOD, then working with the different formats is automatic. Otherwise, use --doHepMC to select HepMC.\
20  Also, use --doPtEtaPhi for pt/eta/phi printout, and --skipEvents, --evtMax to select events.')
21  parser.add_argument('--doHepMC', action='store_true',
22  help='Run HepMCReader, otherwise run xAODTruthReader (default)')
23  parser.add_argument('--doPUEventPrintout', action='store_true',
24  help='Print out PU event for xAODTruthReader')
25  parser.add_argument('--doPtEtaPhi', action='store_true',
26  help='Print out particle 4-mom as pt,eta,phi. Default is px,py,pz.')
27  parser.add_argument('--HepMCContainerKey', default="",
28  help='HepMC container key. If not given, set to GEN_EVENT for EVNT file. Should be TruthEvent for HITS or RDO file, which is set automatically if HITS or RDO is in file name.')
29  parser.set_defaults(threads=1)
30  args, _ = parser.parse_known_args()
31 
32  # Setup logs
33  from AthenaCommon.Logging import log
34 
35  # Default file type is for AOD with xAOD::TruthEventContainer,
36  # check for HITS or RDO in file name and if found switch on HepMC flag
37  if len(args.filesInput):
38  if ("EVNT" in args.filesInput[0] or "RDO" in args.filesInput[0] or "HITS" in args.filesInput[0]) and "AOD" not in args.filesInput[0]:
39  args.doHepMC = True
40  log.info('Found EVNT, HITS or RDO in file: ' + args.filesInput[0] + '. So turning on HepMC dumping')
41 
42  # set up defaults for either HepMCReader or xAODTruthReader
43  if args.doHepMC:
44  if len(args.HepMCContainerKey):
45  flags.addFlag("HepMCContainerKey", args.HepMCContainerKey)
46  else:
47  # test for RDO or HITS file, and set HepMC container key to TruthEvent
48  if len(args.filesInput):
49  if "RDO" in args.filesInput[0] or "HITS" in args.filesInput[0]:
50  flags.addFlag("HepMCContainerKey", "TruthEvent")
51  elif "EVNT" in args.filesInput[0]:
52  flags.addFlag("HepMCContainerKey", "GEN_EVENT")
53  # default file name
54  flags.Input.Files = ['evnt.pool.root']
55  else:
56  flags.addFlag("xAODTruthEventContainerKey", "TruthEvents")
57  flags.addFlag("xAODTruthPileupEventContainerKey", "TruthPileupEvents")
58  if args.doPUEventPrintout:
59  flags.addFlag("DoPUEventPrintout", True)
60  else:
61  flags.addFlag("DoPUEventPrintout", False)
62 
63  # default file name
64  flags.Input.Files = ['truth.pool.root']
65  if args.doPtEtaPhi:
66  flags.addFlag("Do4momPtEtaPhi", True)
67  else:
68  flags.addFlag("Do4momPtEtaPhi", False)
69 
70  flags.fillFromArgs(parser=parser)
71  flags.lock()
72 
73  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
74  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
75  acc=MainServicesCfg(flags)
76  acc.merge(PoolReadCfg(flags))
77  if args.doHepMC:
78  from xAODTruthCnv.xAODTruthCnvConfig import HepMCTruthReaderCfg
79  acc.merge(HepMCTruthReaderCfg(flags))
80  else:
81  from xAODTruthCnv.xAODTruthCnvConfig import xAODTruthReaderCfg
82  acc.merge(xAODTruthReaderCfg(flags))
83 
84  acc.store(open("HepMCTruthReader.pkl","wb"))
85 
86  from AthenaConfiguration.Utils import setupLoggingLevels
87  setupLoggingLevels(flags, acc)
88 
89  statusCode = acc.run()
90  assert statusCode.isSuccess() is True, "Application execution did not succeed"
xAODTruthCnvConfig.HepMCTruthReaderCfg
def HepMCTruthReaderCfg(flags, name="HepMCTruthReader")
Definition: xAODTruthCnvConfig.py:54
python.Utils.setupLoggingLevels
def setupLoggingLevels(flags, ca)
Definition: Control/AthenaConfiguration/python/Utils.py:46
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:252
Trk::open
@ open
Definition: BinningType.h:40
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
xAODTruthCnvConfig.xAODTruthReaderCfg
def xAODTruthReaderCfg(flags, name="xAODTruthReader")
Definition: xAODTruthCnvConfig.py:64