ATLAS Offline Software
Loading...
Searching...
No Matches
vertexingJO_ITK_init.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3import sys
4import argparse
5
6from AthenaCommon.Logging import logging
7from AthenaConfiguration.ComponentAccumulator import printProperties
8from AthenaConfiguration.MainServicesConfig import MainServicesCfg
9from AthenaConfiguration.AllConfigFlags import initConfigFlags
10from TrkConfig.VertexFindingFlags import VertexSetup
11
12from AthenaCommon.Constants import VERBOSE
13from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
14
15if __name__ == "__main__":
16
17 parser = argparse.ArgumentParser(
18 description="Primary vertex finding configuration for ITk"
19 )
20 parser.add_argument(
21 "--seeder",
22 type=str,
23 default="Gaussian",
24 choices=["Grid", "Gaussian"],
25 help="Choose between Grid or Gaussian seeder."
26 )
27 parser.add_argument(
28 "--output",
29 type=str,
30 default="AOD",
31 help="Name of the output file"
32 )
33 parser.add_argument(
34 "--maxEvents",
35 type=int,
36 default=-1,
37 help="Number of events to process. Default: -1 (all)."
38 )
39 args = parser.parse_args()
40
41 mlog = logging.getLogger("vertexingJO_ITK_init")
42 mlog.setLevel(logging.INFO)
43
44 flags = initConfigFlags()
45
46 flags.Exec.MaxEvents = args.maxEvents
47 flags.Input.Files = args.input
48
49 flags.Output.AODFileName = args.output
50 flags.Exec.OutputLevel = VERBOSE
51
52 if args.seeder == "Gaussian":
53 flags.Tracking.PriVertex.setup = VertexSetup.ActsGaussAMVF
54 mlog.info("Using Gaussian seeder for primary vertex finding.")
55 vxContainerName = "PrimaryVertices_Gauss"
56 elif args.seeder == "Grid":
57 flags.Tracking.PriVertex.setup = VertexSetup.ActsGridDensity
58 mlog.info("Using Grid seeder for primary vertex finding.")
59 vxContainerName = "PrimaryVertices_Grid"
60
61 mlog.info("Grid parameters:")
62 mlog.info(" gridMainGridSize = %s", flags.Tracking.PriVertex.gridMainGridSize)
63 mlog.info(" gridTrkGridSize = %s", flags.Tracking.PriVertex.gridTrkGridSize)
64 mlog.info(" gridUseHighestSumZPosition = %s", flags.Tracking.PriVertex.gridUseHighestSumZPosition)
65 mlog.info(" gridMaxD0Significance = %s", flags.Tracking.PriVertex.gridMaxD0Significance)
66 mlog.info(" gridMaxZ0Significance = %s", flags.Tracking.PriVertex.gridMaxZ0Significance)
67 else:
68 raise ValueError(f"Invalid seeder '{args.seeder}'; choose 'Grid' or 'Gaussian'.")
69
70 flags.dump()
71 flags.lock()
72
73 cfg = MainServicesCfg(flags)
74
75 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
76 cfg.merge(PoolReadCfg(flags))
77
78 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
79 cfg.merge(SetupMetaDataForStreamCfg(flags, "AOD"))
80
81 from InDetConfig.InDetPriVxFinderConfig import primaryVertexFindingCfg
82 cfg.merge(primaryVertexFindingCfg(flags, vxCandidatesOutputName=vxContainerName))
83
84 mlog.info("Configuring primary vertex finding...")
85 mlog.setLevel(VERBOSE)
86
87 printProperties(
88 mlog,
89 cfg.getEventAlgo("InDetPriVxFinder"),
90 nestLevel=2,
91 printDefaults=True
92 )
93 cfg.printConfig(withDetails=True, summariseProps=True)
94
95 itemList = [
96 "xAOD::ElectronContainer#Electrons",
97 "xAOD::ElectronAuxContainer#*",
98 "xAOD::PhotonContainer#Photons",
99 "xAOD::PhotonAuxContainer#*",
100 "xAOD::MuonContainer#Muons",
101 "xAOD::MuonAuxContainer#*",
102 "xAOD::TauJetContainer#*",
103 "xAOD::TauJetAuxContainer#*",
104 "xAOD::TruthVertexContainer#*",
105 "xAOD::TruthVertexAuxContainer#*",
106 "xAOD::VertexContainer#*",
107 "xAOD::VertexAuxContainer#*",
108 "xAOD::TrackParticleContainer#*",
109 "xAOD::TrackParticleAuxContainer#*",
110 "xAOD::TruthParticleContainer#*",
111 "xAOD::TruthParticleAuxContainer#*",
112 "xAOD::TruthEventContainer#*",
113 "xAOD::TruthEventAuxContainer#*",
114 "xAOD::EventInfo#EventInfo",
115 "xAOD::EventAuxInfo#EventInfoAux",
116 "xAOD::TruthPileupEventContainer#*",
117 "xAOD::TruthPileupEventAuxContainer#*"
118 ]
119
120 cfg.merge(OutputStreamCfg(flags, "AOD", ItemList=itemList))
121
122 status = cfg.run()
123 sys.exit(not status.isSuccess())