ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrigSequence.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from TrigInDetConfig.InnerTrackerTrigSequence import InnerTrackerTrigSequence
4from AthenaConfiguration.AthConfigFlags import AthConfigFlags
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7
8from AthenaCommon.Logging import logging
9
10class ActsTrigSequence(InnerTrackerTrigSequence):
11 def __init__(self, flags : AthConfigFlags, signature : str, rois : str, inView : str):
12 super().__init__(flags, signature,rois,inView)
13 self.log = logging.getLogger("ActsTrigSequence")
14 self.log.info(f"signature: {self.signature} rois: {self.rois} inview: {self.inView}")
15
16 # Check fast tracking flag
17 if not self.flags.Tracking.doITkFastTracking:
18 raise ValueError(f"Acts Trig Sequence needs to run in fast tracking mode but 'Tracking.doITkFastTracking' flag is set to {self.flags.Tracking.doITkFastTracking}")
19
20 def viewDataVerifier(self, viewVerifier='IDViewDataVerifier') -> ComponentAccumulator:
21
22 acc = ComponentAccumulator()
23
24 ViewDataVerifier = CompFactory.AthViews.ViewDataVerifier(
25 name = viewVerifier + "_" + self.signature,
26 DataObjects= {('xAOD::EventInfo', 'StoreGateSvc+EventInfo'),
27 ('PixelRDO_Cache', 'PixRDOCache'),
28 ('SCT_RDO_Cache', 'SctRDOCache'),
29 #enable later when BS ready
30 #( 'IDCInDetBSErrContainer_Cache' , self.flags.Trigger.ITkTracking.PixBSErrCacheKey ),
31 #( 'IDCInDetBSErrContainer_Cache' , self.flags.Trigger.ITkTracking.SCTBSErrCacheKey ),
32 #( 'IDCInDetBSErrContainer_Cache' , self.flags.Trigger.ITkTracking.SCTFlaggedCondCacheKey ),
33 ('xAOD::EventInfo', 'EventInfo'),
34 ('ActsTrk::GeometryContext' , 'StoreGateSvc+ActsAlignment' ),
35 ('TrigRoiDescriptorCollection', str(self.rois)),
36 ( 'TagInfo' , 'DetectorStore+ProcessingTags' )} )
37
38 if self.flags.Input.isMC:
39 ViewDataVerifier.DataObjects |= {( 'PixelRDO_Container' , 'StoreGateSvc+ITkPixelRDOs' ),
40 ( 'SCT_RDO_Container' , 'StoreGateSvc+ITkStripRDOs' ),
41 ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map'),
42 ('ActsTrk::GeometryContext' , 'StoreGateSvc+ActsAlignment' )}
43 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
44 sgil_load = [( 'PixelRDO_Container' , 'StoreGateSvc+ITkPixelRDOs' ),
45 ( 'SCT_RDO_Container' , 'StoreGateSvc+ITkStripRDOs' ),
46 ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map'),]
47 acc.merge(SGInputLoaderCfg(self.flags, Load=sgil_load))
48
49 if self.flags.Acts.useCache:
50 ViewDataVerifier.DataObjects |= {( 'ActsTrk::Cache::Handles<xAOD::SpacePoint>::IDCBackend' , 'StoreGateSvc+ActsPixelSpacePointCache_Back' ),
51 ( 'ActsTrk::Cache::Handles<xAOD::PixelCluster>::IDCBackend' , 'StoreGateSvc+ActsPixelClusterCache_Back' ),
52 ( 'ActsTrk::Cache::Handles<xAOD::StripCluster>::IDCBackend' , 'StoreGateSvc+ActsStripClusterCache_Back' ),
53 }
54
55 if self.flags.Tracking.ActiveConfig.isLRT:
56 ViewDataVerifier.DataObjects |= {
57 ( 'ActsTrk::Cache::Handles<xAOD::SpacePoint>::IDCBackend' , 'StoreGateSvc+ActsStripSpacePointCache_Back' ),
58 ( 'ActsTrk::Cache::Handles<xAOD::SpacePoint>::IDCBackend' , 'StoreGateSvc+ActsStripOverlapSpacePointCache_Back' ),
59 }
60
61 ViewDataVerifier.DataObjects |= {
62 ('InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkPixelDetectorElementStatus' ),
63 ('InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkStripDetectorElementStatus' ),
64 }
65
66 acc.addEventAlgo(ViewDataVerifier)
67 return acc
68
69 def dataPreparation(self) -> ComponentAccumulator:
70 acc = ComponentAccumulator()
71
72 self.log.info(f"DataPrep signature: {self.signature} rois: {self.rois} inview: {self.inView}")
73
74 if not self.inView:
75 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
76 loadRDOs = [( 'PixelRDO_Container' , 'StoreGateSvc+ITkPixelRDOs' ),
77 ( 'SCT_RDO_Container' , 'StoreGateSvc+ITkStripRDOs' ),
78 ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map') ]
79 acc.merge(SGInputLoaderCfg(self.flags, Load=loadRDOs))
80
81 #Clusterisation
82 from ActsConfig.ActsClusterizationConfig import ActsPixelClusterizationAlgCfg,ActsStripClusterizationAlgCfg,ActsPixelClusterPreparationAlgCfg,ActsStripClusterPreparationAlgCfg
83
84 acc.merge(ActsPixelClusterizationAlgCfg(self.flags,
85 name="ActsPixelClusterizationAlg_"+self.signature,
86 useCache=self.flags.Acts.useCache,
87 RoIs=self.rois,
88 ClustersKey="ITkPixelClusters_"+self.signature))
89 acc.merge(ActsStripClusterizationAlgCfg(self.flags,
90 name="ActsStripClusterizationAlg_"+self.signature,
91 useCache=self.flags.Acts.useCache,
92 RoIs=self.rois,
93 ClustersKey="ITkStripClusters_"+self.signature))
94
95
96 if self.flags.Acts.useCache:
97 acc.merge(ActsPixelClusterPreparationAlgCfg(self.flags,
98 "ActsPixelClusterViewFiller_"+self.signature,
99 True,
100 OutputCollection="ITkPixelClusters_Cached",
101 InputIDC="ActsPixelClustersCache",
102 RoIs=self.rois))
103 acc.merge(ActsStripClusterPreparationAlgCfg(self.flags,
104 "ActsStripClusterViewFiller_"+self.signature,
105 True,
106 OutputCollection="ITkStripClusters_Cached",
107 InputIDC="ActsStripClustersCache",
108 RoIs=self.rois))
109
110 return acc
111
112 def viewDataVerifierAfterPattern(self, viewVerifier='ActsViewDataVerifierForAmbi') -> ComponentAccumulator:
113
114 acc = ComponentAccumulator()
115
116 ViewDataVerifier = \
117 CompFactory.AthViews.ViewDataVerifier(
118 name = viewVerifier + "_" + self.signature,
119 DataObjects = {
120 ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map'),
121 ('ActsTrk::GeometryContext' , 'StoreGateSvc+ActsAlignment' ),
122 ( 'InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkPixelDetectorElementStatus' ),
123 ( 'InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkStripDetectorElementStatus' ),
124 }
125 )
126
127 acc.addEventAlgo(ViewDataVerifier)
128 return acc
129
130
131 def spacePointFormation(self) -> ComponentAccumulator:
132 acc = ComponentAccumulator()
133 isLRT = self.flags.Tracking.ActiveConfig.isLRT
134 from ActsConfig.ActsSpacePointFormationConfig import (
135 ActsPixelSpacePointFormationAlgCfg,ActsPixelSpacePointPreparationAlgCfg,
136 ActsStripSpacePointFormationAlgCfg,ActsStripSpacePointPreparationAlgCfg,
137 ActsStripOverlapSpacePointPreparationAlgCfg
138 )
139 acc.merge(ActsPixelSpacePointFormationAlgCfg(self.flags,
140 name="PixelSPFormation_"+self.signature,
141 useCache=self.flags.Acts.useCache,
142 PixelClusters = "ITkPixelClusters_Cached" if self.flags.Acts.useCache else "ITkPixelClusters_"+self.signature,
143 PixelSpacePoints = "ITkPixelSpacepoints_"+self.signature))
144 if isLRT:
145 acc.merge(ActsStripSpacePointFormationAlgCfg(self.flags,
146 name="StripSPFormation_"+self.signature,
147 useCache=self.flags.Acts.useCache,
148 StripClusters = "ITkStripClusters_Cached" if self.flags.Acts.useCache else "ITkStripClusters_"+self.signature,
149 StripSpacePoints = "ITkStripSpacepoints_"+self.signature,
150 StripOverlapSpacePoints="ITkStripOverlapSpacepoints_"+self.signature))
151
152 if self.flags.Acts.useCache:
153 acc.merge(ActsPixelSpacePointPreparationAlgCfg(self.flags,
154 name="PixelSPVF_"+self.signature,
155 useCache=True,
156 RoIs=self.rois,
157 OutputCollection="ITkPixelSpacePoints_Cached",
158 InputIDC="ActsPixelSpacePointCache"))
159 if isLRT:
160 acc.merge(ActsStripSpacePointPreparationAlgCfg(self.flags,
161 name="StripSPVF_"+self.signature,
162 useCache=True,
163 RoIs=self.rois,
164 OutputCollection="ITkStripSpacePoints_Cached",
165 InputIDC="ActsStripSpacePointCache"))
166 acc.merge(ActsStripOverlapSpacePointPreparationAlgCfg(self.flags,
167 name="StripOverlapSPVF_"+self.signature,
168 useCache=True,
169 RoIs=self.rois,
170 OutputCollection="ITkStripOverlapSpacePoints_Cached",
171 InputIDC="ActsStripOverlapSpacePointCache"))
172
173 return acc
174
176 extraFlags : AthConfigFlags = None,
177 inputTracksName : str = None) -> ComponentAccumulator:
178 acc = ComponentAccumulator()
179
180 from ActsConfig.ActsSeedingConfig import (
181 ActsLargeRadiusStripSeedingToolCfg,
182 ActsPixelSeedingAlgCfg,
183 ActsStripSeedingAlgCfg,
184 )
185
186 isLRT = self.flags.Tracking.ActiveConfig.isLRT
187
188 seed_labels = []
189 seed_keys = []
190
191 if isLRT:
192 stripSpacePoints = ['ITkStripSpacePoints_Cached',
193 'ITkStripOverlapSpacePoints_Cached'] if self.flags.Acts.useCache else ['ITkStripSpacepoints_'+self.signature, 'ITkStripOverlapSpacepoints_'+self.signature]
194 seeding_args = {
195 "name": "ActsStripSeedingAlg_"+self.signature,
196 "InputSpacePoints": stripSpacePoints,
197 "SeedTool": acc.popToolsAndMerge(ActsLargeRadiusStripSeedingToolCfg(
198 self.flags,
199 name="ActsLargeRadiusStripSeedingTool_"+self.signature)),
200 "useFastTracking": True,
201 }
202 acc.merge(ActsStripSeedingAlgCfg(self.flags, **seeding_args))
203 seed_labels.append("SSS")
204 seed_keys.append("ActsStripSeeds")
205
206 else:
207 acc.merge(ActsPixelSeedingAlgCfg(self.flags,
208 name="ActsPixelSeedingAlg_"+self.signature,
209 InputSpacePoints=['ITkPixelSpacePoints_Cached'] if self.flags.Acts.useCache else ['ITkPixelSpacepoints_'+self.signature],
210 useFastTracking=True))
211 seed_labels.append("PPP")
212 seed_keys.append("ActsPixelSeeds")
213
214 from ActsConfig.ActsTrackFindingConfig import ActsMainTrackFindingAlgCfg
215 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
216 measurements = ["ITkPixelClusters_Cached" if self.flags.Acts.useCache else "ITkPixelClusters_"+self.signature,
217 "ITkStripClusters_Cached" if self.flags.Acts.useCache else "ITkStripClusters_"+self.signature]
218
219 # LRT uses seed refit (for now)
220 extra_tf_kwargs = {}
221 if isLRT:
222 extra_tf_kwargs["refitSeeds"] = True
223
224 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
225 trackfinding = ActsMainTrackFindingAlgCfg(self.flags,
226 name="ActsTrackFindingAlg_"+self.signature,
227 ACTSTracksLocation=self.flags.Tracking.ActiveConfig.trkTracks_FTF,
228 SeedLabels=seed_labels,
229 SeedContainerKeys=seed_keys,
230 UncalibratedMeasurementContainerKeys=measurements,
231 TrackParamsEstimationTool=[acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(self.flags, **extra_tf_kwargs))])
232 acc.merge(trackfinding)
233 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(self.flags,
234 name="ActsTrackParticleCreator_"+self.signature,
235 ACTSTracksLocation=[self.flags.Tracking.ActiveConfig.trkTracks_FTF],
236 TrackParticlesOutKey=self.flags.Tracking.ActiveConfig.tracks_FTF))
237
238 return acc
239
240 def ambiguitySolver(self) -> ComponentAccumulator:
241 acc = ComponentAccumulator()
242 if self.inView:
243 acc.merge(self.viewDataVerifierAfterPattern())
244
245 from ActsConfig.ActsTrackFindingConfig import ActsMainAmbiguityResolutionAlgCfg
246 acc.merge(ActsMainAmbiguityResolutionAlgCfg(self.flags,
247 "ActsAmbiguityResolutionAlg_"+self.signature,
248 TracksLocation=self.flags.Tracking.ActiveConfig.trkTracks_FTF,
249 ResolvedTracksLocation=self.flags.Tracking.ActiveConfig.trkTracks_IDTrig))
250
251
252 return acc
253
254 def xAODParticleCreation(self) -> ComponentAccumulator:
255 acc = ComponentAccumulator()
256
257 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
258 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(self.flags,
259 "ActsTrackParticleCreator_Ambi_"+self.signature,
260 ACTSTracksLocation=[self.flags.Tracking.ActiveConfig.trkTracks_IDTrig],
261 TrackParticlesOutKey=self.flags.Tracking.ActiveConfig.tracks_IDTrig))
262
263 return acc
264
265
266
__init__(self, AthConfigFlags flags, str signature, str rois, str inView)
ComponentAccumulator spacePointFormation(self)
ComponentAccumulator xAODParticleCreation(self)
ComponentAccumulator dataPreparation(self)
ComponentAccumulator viewDataVerifierAfterPattern(self, viewVerifier='ActsViewDataVerifierForAmbi')
ComponentAccumulator ambiguitySolver(self)
ComponentAccumulator fastTrackFinder(self, AthConfigFlags extraFlags=None, str inputTracksName=None)
ComponentAccumulator viewDataVerifier(self, viewVerifier='IDViewDataVerifier')