60 name: str =
"ActsTrackFindingAlg",
61 **kwargs) -> ComponentAccumulator:
63 return c
if isinstance(c, list)
else [c]
65 acc = ComponentAccumulator()
67 from ActsConfig.ActsGeometryConfig
import ActsVolumeIdToDetectorCollectionMappingAlgCfg
69 if not flags.Acts.useHGTDClusterInTrackFinding:
73 kwargs.setdefault(
'EndOfTheWorldVolumeIds', [2, 25])
75 acc.merge( ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
76 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
78 if flags.Detector.EnableITkPixel:
79 from PixelConditionsAlgorithms.ITkPixelConditionsConfig
import ITkPixelDetectorElementStatusAlgCfg
80 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
81 if flags.Detector.EnableITkStrip:
82 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig
import ITkStripDetectorElementStatusAlgCfg
83 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
84 kwargs.setdefault(
"DetElStatus",
seedOrder(flags, pixel=[
"ITkPixelDetectorElementStatus"], strip=[
"ITkStripDetectorElementStatus"]))
89 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
90 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsStripSeeds"]))
91 if flags.Acts.Tracks.doAnalysis:
92 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
94 kwargs.setdefault(
"UncalibratedMeasurementContainerKeys",
isdet(flags, pixel=[
"ITkPixelClusters_Cached" if flags.Acts.useCache
else "ITkPixelClusters"], strip=[
"ITkStripClusters_Cached" if flags.Acts.useCache
else "ITkStripClusters"], hgtd=[
"HGTD_Clusters"]))
96 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
98 kwargs.setdefault(
"maxPropagationStep", 10000)
99 kwargs.setdefault(
"skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
100 kwargs.setdefault(
"seedMeasOffset", 1)
103 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
105 if (
not flags.Acts.doAmbiguityResolution) :
106 kwargs.setdefault(
"MaximumSharedHits", 3)
107 kwargs.setdefault(
"MaximumIterations", 10000)
108 kwargs.setdefault(
"NMeasurementsMin", 7)
110 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
111 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
112 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
114 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
120 if flags.Detector.GeometryITk:
121 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
123 kwargs.setdefault(
"chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
124 kwargs.setdefault(
"chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
126 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
127 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
131 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
132 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
134 kwargs.setdefault(
"numMeasurementsCutOff", [1])
138 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
140 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
141 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
143 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
144 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
145 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
146 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
147 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
148 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
149 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
150 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
151 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
157 if flags.Acts.SeedingStrategy
not in (SeedingStrategy.GbtsFtf, SeedingStrategy.Gbts):
158 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
159 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
161 if 'TrackingGeometryTool' not in kwargs:
162 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
164 "TrackingGeometryTool",
165 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
168 if 'TrackParamsEstimationTool' not in kwargs:
169 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
172 if flags.Tracking.ActiveConfig.isLargeD0:
173 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
175 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs)))
177 if 'ExtrapolationTool' not in kwargs:
178 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
181 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
184 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
190 if 'FitterTool' not in kwargs:
191 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
194 acc.popToolsAndMerge(ActsFitterCfg(flags,
195 ReverseFilteringPt=0,
196 OutlierChi2Cut=float(
'inf')))
199 if 'PixelCalibrator' not in kwargs:
200 from AthenaConfiguration.Enums
import BeamType
202 if flags.Beam.Type
is not BeamType.Cosmics:
203 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
204 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
206 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
207 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
208 PixelCalibrationStrategy.NNClustering):
212 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
213 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
216 if 'StripCalibrator' not in kwargs:
217 from AthenaConfiguration.Enums
import BeamType
218 if flags.Beam.Type
is not BeamType.Cosmics:
219 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
220 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
222 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
223 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
227 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
228 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
232 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
233 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
234 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
235 ActsTrackFindingMonitoringToolCfg(flags)))
237 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
243 **kwargs) -> ComponentAccumulator:
244 acc = ComponentAccumulator()
247 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
248 if not flags.Tracking.ActiveConfig.isSecondaryPass:
250 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
251 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
252 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
254 if flags.Acts.useCache:
255 pixelClusters +=
'_Cached'
256 stripClusters +=
'_Cached'
260 pixelSeedLabels = [
'PPP']
261 stripSeedLabels = [
'SSS']
263 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
264 if flags.Tracking.ActiveConfig.extension ==
'ActsConversion' or flags.Tracking.ActiveConfig.isLargeD0:
265 pixelSeedLabels =
None
267 elif isFastPrimaryPass(flags):
268 stripSeedLabels =
None
271 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
272 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
273 pixelDetElements = [
'ITkPixelDetectorElementCollection']
274 stripDetElements = [
'ITkStripDetectorElementCollection']
278 if flags.Tracking.ActiveConfig.isLargeD0:
281 if pixelSeedLabels
is None:
283 pixelDetElements =
None
285 if stripSeedLabels
is None:
287 stripDetElements =
None
290 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
291 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
292 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
293 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
294 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=pixelRefit, strip=stripRefit))
297 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
301 if flags.Acts.Tracks.doAnalysis:
302 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
303 acc.merge(ActsTrackAnalysisAlgCfg(flags,
304 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
305 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
308 DetectorElementsKeys=
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements)
309 if len(kwargs[
"SeedContainerKeys"]) != len(DetectorElementsKeys):
310 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
312 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
313 seedKey = kwargs[
"SeedContainerKeys"][i]
314 detElKey = DetectorElementsKeys[i]
317 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
318 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
319 name = f
'{seedKey}SeedsToTrackParamsAlg',
320 InputSeedContainerKey = seedKey,
321 DetectorElementsKey = detElKey,
322 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
324 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
325 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
326 name = f
'{seedKey}ToTrackAnalysisAlg',
327 InputSeedCollection = seedKey,
328 InputTrackParamsCollection = f
'{seedKey}Params',
329 InputDestinyCollection = f
'{seedKey}Destiny'))
332 if flags.Acts.EDM.PersistifyTracks:
333 trackColl = kwargs[
'ACTSTracksLocation']
334 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
336 name = f
'{trackColl}ToXAODConverterAlg',
337 InputActsTracksLocation = trackColl,
338 OutputActsTracksLocation = trackColl))
340 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
341 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
342 acc.merge(PersistifyTracks(flags,
343 extensions=[prefix]))
349 acc = ComponentAccumulator()
352 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
353 acc.merge(BeamSpotCondAlgCfg(flags))
356 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
358 kwargs.setdefault(
"moduleMapPath", flags.Acts.GNN.ModuleMapPath)
359 kwargs.setdefault(
"gnnPath", flags.Acts.GNN.ModelPath)
360 kwargs.setdefault(
"numTrtContexts", flags.Acts.GNN.NumTrtContexts)
361 kwargs.setdefault(
"maxGpuInstances", flags.Acts.GNN.MaxGpuInstances)
362 kwargs.setdefault(
"varianceInflation", flags.Acts.GNN.VarianceInflation)
363 kwargs.setdefault(
"tightSeeds", flags.Acts.GNN.TightSeeds)
364 kwargs.setdefault(
"edgeCut", flags.Acts.GNN.EdgeCut)
365 kwargs.setdefault(
"minCandidateMeasurements", flags.Acts.GNN.MinCandidateMeasurements)
366 kwargs.setdefault(
"minDeltaR", flags.Acts.GNN.MinDeltaR)
367 kwargs.setdefault(
"relaxCentralHoleSel", flags.Acts.GNN.RelaxCentralHoleSel)
368 kwargs.setdefault(
"relaxMeasurementSel", flags.Acts.GNN.RelaxMeasurementSel)
369 kwargs.setdefault(
"offlineZ0Sel", flags.Acts.GNN.OfflineZ0Sel)
372 if 'TrackParamsEstimationTool' not in kwargs:
373 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
374 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
376 if 'FitterTool' not in kwargs:
377 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
378 kwargs.setdefault(
'FitterTool', acc.popToolsAndMerge(ActsFitterCfg(flags, ReverseFilteringPt=0, OutlierChi2Cut=float(
'inf'))))
380 if 'TrackingGeometryTool' not in kwargs:
381 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
383 "TrackingGeometryTool",
384 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
387 if 'ExtrapolationTool' not in kwargs:
388 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
391 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
395 CompFactory.ActsTrk.TrackFindingGNNAlg(
"TrackFindingGNNAlg", **kwargs)