ATLAS Offline Software
Loading...
Searching...
No Matches
ActsProtoTrackCreationAndFitConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 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-03-00-00/mc21_14TeV.900498.PG_single_muonpm_Pt100_etaFlatnp0_43.recon.RDO.e8481_s4149_r14697/RDO.33675668._000016.pool.root.1"]
115
116 flags.Debug.DumpEvtStore = True
117 flags.lock()
118 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
119
120 # Main services
121 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
122 top_acc = MainServicesCfg(flags)
123
124 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
125 top_acc.merge(PoolReadCfg(flags))
126
127 #Truth
128 if flags.Input.isMC:
129 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
130 top_acc.merge(GEN_AOD2xAODCfg(flags))
131
132 # Standard reco
133 top_acc.merge(ITkTrackRecoCfg(flags))
134
135 # ProtoTrackChain Track algo
136 top_acc.merge(SetupHistSvc(flags,streamName="HmmRefits",dataFile=flags.outputNTupleFile))
137 top_acc.merge(ActsProtoTackCreationAndFitAlgCfg(flags,"ActsProtoTackCreationAndFitAlg",ACTSTracksLocation=ACTSProtoTrackChainTrackKey ))
138
139
140 from ActsConfig.ActsTruthConfig import ActsTruthAssociationAlgCfg, ActsTruthParticleHitCountAlgCfg
141 top_acc.merge(ActsTruthAssociationAlgCfg(flags))
142 top_acc.merge(ActsTruthParticleHitCountAlgCfg(flags))
143
144 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
145 acts_tracks=f"{flags.Tracking.ActiveConfig.extension}Tracks" if not flags.Acts.doAmbiguityResolution else f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"
146 top_acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
147 name=f"{acts_tracks}TrackToTruthAssociationAlg",
148 ACTSTracksLocation=ACTSProtoTrackChainTrackKey,
149 AssociationMapOut=acts_tracks+"ToTruthParticleAssociation"))
150
151 top_acc.merge(ActsTrackFindingValidationAlgCfg(flags,
152 name=f"{acts_tracks}TrackFindingValidationAlg",
153 TrackToTruthAssociationMap=acts_tracks+"ToTruthParticleAssociation"
154 ))
155
156 # Convert ActsTrk::TrackContainer to xAOD::TrackParticleContainer
157 prefix = flags.Tracking.ActiveConfig.extension
158 from ActsConfig.ActsTrackFindingConfig import ActsTrackToTrackParticleCnvAlgCfg
159 top_acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedProtoTrackToAltTrackParticleCnvAlg",
160 ACTSTracksLocation=[ACTSProtoTrackChainTrackKey,],
161 TrackParticlesOutKey=f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"))
162
163 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
164 top_acc.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
165 f"{prefix}ActsSandboxTrackParticleTruthDecorationAlg",
166 TrackToTruthAssociationMaps=[acts_tracks+"ToTruthParticleAssociation"],
167 TrackParticleContainerName=f"{FinalProtoTrackChainxAODTracksKey}TrackParticles"))
168
169 # Add the truth decorators
170 from InDetPhysValMonitoring.InDetPhysValDecorationConfig import AddDecoratorCfg
171 top_acc.merge(AddDecoratorCfg(flags))
172
173 # IDTPM running
174 from InDetTrackPerfMon.InDetTrackPerfMonConfig import InDetTrackPerfMonCfg
175 top_acc.merge( InDetTrackPerfMonCfg(flags) )
176
177 top_acc.printConfig(withDetails=True, summariseProps=True)
178 flags.dump()
179
180
181 from AthenaCommon.Constants import DEBUG
182 top_acc.foreach_component("AthEventSeq/*").OutputLevel = DEBUG
183 top_acc.printConfig(withDetails=True, summariseProps=True)
184 top_acc.store(open("ITkTrackRecoWithProtoTracks.pkl", "wb"))
185 sc = top_acc.run(flags.Exec.MaxEvents)
186
187 if sc.isFailure():
188 import sys
189 sys.exit(1)
ComponentAccumulator ActsProtoTrackReportingAlgCfg(flags, str name="ActsProtoTrackReportingAlg", **kwargs)
ComponentAccumulator ActsProtoTackCreationAndFitAlgCfg(flags, str name="ActsProtoTrackCreationAndFitAlg", **kwargs)
ComponentAccumulator ActsTruthGuidedProtoTrackCreatorToolCfg(flags, str name="ActsTruthGuidedProtoTrackCreatorTool", **kwargs)