53 name: str =
"ActsTrackFindingAlg",
54 **kwargs) -> ComponentAccumulator:
56 return c
if isinstance(c, list)
else [c]
58 acc = ComponentAccumulator()
60 from ActsAlignmentAlgs.AlignmentAlgsConfig
import ActsGeometryContextAlgCfg
61 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometrySvcCfg
62 acc.merge(ActsGeometryContextAlgCfg(flags))
63 acc.merge(ActsTrackingGeometrySvcCfg(flags))
65 from ActsConfig.ActsGeometryConfig
import ActsVolumeIdToDetectorCollectionMappingAlgCfg
67 if not flags.Acts.useHGTDClusterInTrackFinding:
71 kwargs.setdefault(
'EndOfTheWorldVolumeIds', [2, 25])
73 acc.merge( ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
74 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
76 if flags.Detector.EnableITkPixel:
77 from PixelConditionsAlgorithms.ITkPixelConditionsConfig
import ITkPixelDetectorElementStatusAlgCfg
78 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
79 if flags.Detector.EnableITkStrip:
80 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig
import ITkStripDetectorElementStatusAlgCfg
81 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
82 kwargs.setdefault(
"DetElStatus",
seedOrder(flags, pixel=[
"ITkPixelDetectorElementStatus"], strip=[
"ITkStripDetectorElementStatus"]))
87 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
88 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsStripSeeds"]))
89 if flags.Acts.Tracks.doAnalysis:
90 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
92 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"]))
94 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
96 kwargs.setdefault(
"maxPropagationStep", 10000)
97 kwargs.setdefault(
"skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
98 kwargs.setdefault(
"seedMeasOffset", 1)
101 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
103 if (
not flags.Acts.doAmbiguityResolution) :
104 kwargs.setdefault(
"MaximumSharedHits", 3)
105 kwargs.setdefault(
"MaximumIterations", 10000)
106 kwargs.setdefault(
"NMeasurementsMin", 7)
108 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
109 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
110 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
112 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
118 if flags.Detector.GeometryITk:
119 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
121 kwargs.setdefault(
"chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
122 kwargs.setdefault(
"chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
124 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
125 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
126 if not flags.Tracking.ActiveConfig.isLargeD0:
127 kwargs.setdefault(
"seedRefitPtMinFactor", 0.9)
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]))
162 if 'TrackParamsEstimationTool' not in kwargs:
163 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
166 if flags.Tracking.ActiveConfig.isLargeD0:
167 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
168 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
170 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs)))
173 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
179 if 'FitterTool' not in kwargs:
180 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
186 if any(kwargs[
"refitSeeds"]):
187 seedRefitOutlierChi2Cut = flags.Acts.SeedRefitOutlierChi2Cut
189 seedRefitOutlierChi2Cut = float(
'inf')
192 acc.popToolsAndMerge(ActsFitterCfg(flags,
193 ReverseFilteringPt=0,
194 OutlierChi2Cut=seedRefitOutlierChi2Cut))
197 if 'PixelCalibrator' not in kwargs:
198 from AthenaConfiguration.Enums
import BeamType
200 if flags.Beam.Type
is not BeamType.Cosmics:
201 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
202 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
204 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
205 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
206 PixelCalibrationStrategy.NNClustering):
210 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
211 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
214 if 'StripCalibrator' not in kwargs:
215 from AthenaConfiguration.Enums
import BeamType
216 if flags.Beam.Type
is not BeamType.Cosmics:
217 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
218 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
220 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
221 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
225 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
226 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
230 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
231 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
232 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
233 ActsTrackFindingMonitoringToolCfg(flags)))
235 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
241 **kwargs) -> ComponentAccumulator:
242 acc = ComponentAccumulator()
245 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
246 if not flags.Tracking.ActiveConfig.isSecondaryPass:
248 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
249 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
250 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
252 if flags.Acts.useCache:
253 pixelClusters +=
'_Cached'
254 stripClusters +=
'_Cached'
258 pixelSeedLabels = [
'PPP']
259 stripSeedLabels = [
'SSS']
261 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
262 if flags.Tracking.ActiveConfig.extension ==
'ActsConversion' or flags.Tracking.ActiveConfig.isLargeD0:
263 pixelSeedLabels =
None
265 elif isFastPrimaryPass(flags):
266 stripSeedLabels =
None
269 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
270 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
271 pixelDetElements = [
'ITkPixelDetectorElementCollection']
272 stripDetElements = [
'ITkStripDetectorElementCollection']
276 if flags.Tracking.ActiveConfig.isLargeD0:
278 stripRefit = [flags.Acts.LrtStripSeedRefit]
280 if pixelSeedLabels
is None:
282 pixelDetElements =
None
284 if stripSeedLabels
is None:
286 stripDetElements =
None
289 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
290 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
291 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
292 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
293 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=pixelRefit, strip=stripRefit))
296 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
300 if flags.Acts.Tracks.doAnalysis:
301 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
302 acc.merge(ActsTrackAnalysisAlgCfg(flags,
303 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
304 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
307 DetectorElementsKeys=
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements)
308 if len(kwargs[
"SeedContainerKeys"]) != len(DetectorElementsKeys):
309 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
311 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
312 seedKey = kwargs[
"SeedContainerKeys"][i]
313 detElKey = DetectorElementsKeys[i]
316 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
317 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
318 name = f
'{seedKey}SeedsToTrackParamsAlg',
319 InputSeedContainerKey = seedKey,
320 DetectorElementsKey = detElKey,
321 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
323 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
324 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
325 name = f
'{seedKey}ToTrackAnalysisAlg',
326 InputSeedCollection = seedKey,
327 InputTrackParamsCollection = f
'{seedKey}Params',
328 InputDestinyCollection = f
'{seedKey}Destiny'))
331 if flags.Acts.EDM.PersistifyTracks:
332 trackColl = kwargs[
'ACTSTracksLocation']
333 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
334 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
335 name = f
'{trackColl}ToXAODConverterAlg',
336 InputActsTracksLocation = trackColl,
337 OutputActsTracksLocation = trackColl))
339 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
340 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
341 acc.merge(PersistifyTracks(flags,
342 extensions=[prefix]))
348 acc = ComponentAccumulator()
351 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
352 acc.merge(BeamSpotCondAlgCfg(flags))
355 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
357 kwargs.setdefault(
"moduleMapPath", flags.Acts.GNN.ModuleMapPath)
358 kwargs.setdefault(
"gnnPath", flags.Acts.GNN.ModelPath)
359 kwargs.setdefault(
"numTrtContexts", flags.Acts.GNN.NumTrtContexts)
360 kwargs.setdefault(
"maxGpuInstances", flags.Acts.GNN.MaxGpuInstances)
361 kwargs.setdefault(
"varianceInflation", flags.Acts.GNN.VarianceInflation)
362 kwargs.setdefault(
"tightSeeds", flags.Acts.GNN.TightSeeds)
363 kwargs.setdefault(
"edgeCut", flags.Acts.GNN.EdgeCut)
364 kwargs.setdefault(
"minCandidateMeasurements", flags.Acts.GNN.MinCandidateMeasurements)
365 kwargs.setdefault(
"minDeltaR", flags.Acts.GNN.MinDeltaR)
366 kwargs.setdefault(
"relaxCentralHoleSel", flags.Acts.GNN.RelaxCentralHoleSel)
367 kwargs.setdefault(
"relaxMeasurementSel", flags.Acts.GNN.RelaxMeasurementSel)
368 kwargs.setdefault(
"offlineZ0Sel", flags.Acts.GNN.OfflineZ0Sel)
371 if 'TrackParamsEstimationTool' not in kwargs:
372 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
373 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
375 if 'FitterTool' not in kwargs:
376 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
377 kwargs.setdefault(
'FitterTool', acc.popToolsAndMerge(ActsFitterCfg(flags, ReverseFilteringPt=0, OutlierChi2Cut=float(
'inf'))))
379 from ActsAlignmentAlgs.AlignmentAlgsConfig
import ActsGeometryContextAlgCfg
380 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometrySvcCfg
381 acc.merge(ActsGeometryContextAlgCfg(flags))
382 acc.merge(ActsTrackingGeometrySvcCfg(flags))
385 CompFactory.ActsTrk.TrackFindingGNNAlg(
"TrackFindingGNNAlg", **kwargs)