ATLAS Offline Software
Loading...
Searching...
No Matches
ActsProtoTrackCreationAndFitConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
7 name: str = "ActsTruthGuidedProtoTrackCreatorTool",
8 **kwargs) -> ComponentAccumulator:
9 acc = ComponentAccumulator()
10 kwargs.setdefault('PRD_MultiTruthCollections', ["PRD_MultiTruthITkPixel","PRD_MultiTruthITkStrip"])
11 acc.setPrivateTools(CompFactory.ActsTrk.TruthGuidedProtoTrackCreatorTool(name, **kwargs))
12 return acc
13
15 name: str = "ActsProtoTrackCreationAndFitAlg",
16 **kwargs) -> ComponentAccumulator:
17 acc = ComponentAccumulator()
18
19 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
20 acc.merge(ITkPixelReadoutGeometryCfg(flags))
21
22 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
23 acc.merge(ITkStripReadoutGeometryCfg(flags))
24
25 kwargs.setdefault('PixelClusterContainer', 'ITkPixelClusters')
26 kwargs.setdefault('StripClusterContainer', 'ITkStripClusters')
27 kwargs.setdefault('ACTSTracksLocation', 'EFTestTracks')
28
29 if "TrackingGeometryTool" not in kwargs:
30 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
31 kwargs.setdefault(
32 "TrackingGeometryTool",
33 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
34 ) # PrivateToolHandle
35
36 if 'ExtrapolationTool' not in kwargs:
37 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
38 kwargs.setdefault(
39 "ExtrapolationTool",
40 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
41 ) # PrivateToolHandle
42
43 if 'ActsFitter' not in kwargs:
44 from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
45 kwargs.setdefault("ActsFitter", acc.popToolsAndMerge(ActsFitterCfg(flags,
46 ReverseFilteringPt=0,
47 OutlierChi2Cut=30)))
48
49 if 'PatternBuilder' not in kwargs:
50 kwargs.setdefault('PatternBuilder', acc.popToolsAndMerge(ActsTruthGuidedProtoTrackCreatorToolCfg(flags)))
51
52 acc.addEventAlgo(CompFactory.ActsTrk.ProtoTrackCreationAndFitAlg(name,**kwargs),
53 primary=True)
54 return acc
55
57 name: str = "ActsProtoTrackReportingAlg",
58 **kwargs) -> ComponentAccumulator:
59 acc = ComponentAccumulator()
60 kwargs.setdefault("ProtoTracksLocation", "ProtoTracksCollection")
61 kwargs.setdefault("copyParametersFromFit", True)
62 acc.addEventAlgo(CompFactory.ActsTrk.ProtoTrackReportingAlg(name,**kwargs),
63 primary=True)
64 return acc
65
66if __name__ == "__main__":
67 from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
68
69 def SetupHistSvc(flags, streamName, dataFile):
70 acc = ComponentAccumulator()
71 histSvc = CompFactory.THistSvc(Output= ["{streamName} DATAFILE='{data_file}', OPT='RECREATE'".format(streamName=streamName, data_file = dataFile )])
72 acc.addService(histSvc, primary=True)
73 return acc
74
75 # Key names for the different track containers
76 ACTSProtoTrackChainTrackKey = "ACTSProtoTrackChainTestTracks"
77 FinalProtoTrackChainTracksKey="TrkProtoTrackChainTestTracks"
78 FinalProtoTrackChainxAODTracksKey="xAODProtoTrackChainTestTracks"
79
80 from AthenaConfiguration.AllConfigFlags import initConfigFlags
81 flags = initConfigFlags()
82
83 # this job specific flags
84 flags.addFlag("outputNTupleFile", "refits.root")
85
86 # Disable calo for this test
87 flags.Detector.EnableCalo = False
88
89
90 # ensure that the xAOD SP and cluster containers are available
91 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=True
92 flags.Tracking.ITkMainPass.doAthenaToActsCluster=True
93
94 flags.Acts.doRotCorrection = False
95
96 # IDTPM flags
97 from InDetTrackPerfMon.InDetTrackPerfMonFlags import initializeIDTPMConfigFlags, initializeIDTPMTrkAnaConfigFlags
98 flags = initializeIDTPMConfigFlags(flags)
99
100 flags.PhysVal.IDTPM.plotsDefFileList = "InDetTrackPerfMon/PlotsDefFileList_default.txt" # default value - not needed
101 flags.PhysVal.IDTPM.plotsCommonValuesFile = "InDetTrackPerfMon/PlotsDefCommonValues.json" # default value - not needed
102 flags.PhysVal.OutputFileName = flags.PhysVal.IDTPM.outputFilePrefix + '.HIST.root' # automatically set in IDTPM config - not needed
103 flags.Output.doWriteAOD_IDTPM = True
104 flags.PhysVal.IDTPM.trkAnaCfgFile = "InDetTrackPerfMon/EFTrkAnaConfig_example.json"
105 flags = initializeIDTPMTrkAnaConfigFlags(flags)
106
107 flags.PhysVal.IDTPM.TrkAnaEF.TrigTrkKey = f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"
108 flags.PhysVal.IDTPM.TrkAnaDoubleRatio.TrigTrkKey = f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"
109
110 flags.PhysVal.doExample = False
111
112 flags.fillFromArgs()
113 if flags.Input.Files == ['_ATHENA_GENERIC_INPUTFILE_NAME_']:
114 flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-04-00-00/mc21_14TeV.900498.PG_single_muonpm_Pt100_etaFlatnp0_43.recon.RDO.e8481_s4494_r16632/RDO.45451592._000021.pool.root.1"]
115
116 from AthenaConfiguration.TestDefaults import defaultConditionsTags
117 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN4_MC
118
119 flags.Debug.DumpEvtStore = True
120 flags.lock()
121 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
122
123 # Main services
124 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
125 top_acc = MainServicesCfg(flags)
126
127 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
128 top_acc.merge(PoolReadCfg(flags))
129
130 #Truth
131 if flags.Input.isMC:
132 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
133 top_acc.merge(GEN_AOD2xAODCfg(flags))
134
135 # Standard reco
136 top_acc.merge(ITkTrackRecoCfg(flags))
137
138 # ProtoTrackChain Track algo
139 top_acc.merge(SetupHistSvc(flags,streamName="HmmRefits",dataFile=flags.outputNTupleFile))
140 top_acc.merge(ActsProtoTackCreationAndFitAlgCfg(flags,"ActsProtoTackCreationAndFitAlg",ACTSTracksLocation=ACTSProtoTrackChainTrackKey ))
141
142
143 from ActsConfig.ActsTruthConfig import ActsTruthAssociationAlgCfg, ActsTruthParticleHitCountAlgCfg
144 top_acc.merge(ActsTruthAssociationAlgCfg(flags))
145 top_acc.merge(ActsTruthParticleHitCountAlgCfg(flags))
146
147 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
148 acts_tracks=f"{flags.Tracking.ActiveConfig.extension}Tracks" if not flags.Acts.doAmbiguityResolution else f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"
149 top_acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
150 name=f"{acts_tracks}TrackToTruthAssociationAlg",
151 ACTSTracksLocation=ACTSProtoTrackChainTrackKey,
152 AssociationMapOut=acts_tracks+"ToTruthParticleAssociation"))
153
154 top_acc.merge(ActsTrackFindingValidationAlgCfg(flags,
155 name=f"{acts_tracks}TrackFindingValidationAlg",
156 TrackToTruthAssociationMap=acts_tracks+"ToTruthParticleAssociation"
157 ))
158
159 # Convert ActsTrk::TrackContainer to xAOD::TrackParticleContainer
160 prefix = flags.Tracking.ActiveConfig.extension
161 from ActsConfig.ActsTrackFindingConfig import ActsTrackToTrackParticleCnvAlgCfg
162 top_acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedProtoTrackToAltTrackParticleCnvAlg",
163 ACTSTracksLocation=[ACTSProtoTrackChainTrackKey,],
164 TrackParticlesOutKey=f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"))
165
166 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
167 top_acc.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
168 f"{prefix}ActsSandboxTrackParticleTruthDecorationAlg",
169 TrackToTruthAssociationMaps=[acts_tracks+"ToTruthParticleAssociation"],
170 TrackParticleContainerName=f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"))
171
172 # Add the truth decorators
173 from InDetPhysValMonitoring.InDetPhysValDecorationConfig import AddDecoratorCfg
174 top_acc.merge(AddDecoratorCfg(flags))
175
176 # IDTPM running
177 from InDetTrackPerfMon.InDetTrackPerfMonConfig import InDetTrackPerfMonCfg
178 top_acc.merge( InDetTrackPerfMonCfg(flags) )
179
180 top_acc.printConfig(withDetails=True, summariseProps=True)
181 flags.dump()
182
183
184 from AthenaCommon.Constants import DEBUG
185 top_acc.foreach_component("AthEventSeq/*").OutputLevel = DEBUG
186 top_acc.printConfig(withDetails=True, summariseProps=True)
187 top_acc.store(open("ITkTrackRecoWithProtoTracks.pkl", "wb"))
188 sc = top_acc.run(flags.Exec.MaxEvents)
189
190 if sc.isFailure():
191 import sys
192 sys.exit(1)
ComponentAccumulator ActsProtoTrackReportingAlgCfg(flags, str name="ActsProtoTrackReportingAlg", **kwargs)
ComponentAccumulator ActsProtoTackCreationAndFitAlgCfg(flags, str name="ActsProtoTrackCreationAndFitAlg", **kwargs)
ComponentAccumulator ActsTruthGuidedProtoTrackCreatorToolCfg(flags, str name="ActsTruthGuidedProtoTrackCreatorTool", **kwargs)