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(
"doTwoWay", flags.Acts.doTwoWayCKF)
110 kwargs.setdefault(
"recordMaterialStates",
False)
111 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
113 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
119 if flags.Detector.GeometryITk:
120 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
122 kwargs.setdefault(
"chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
123 kwargs.setdefault(
"chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
125 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
126 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
127 if not flags.Tracking.ActiveConfig.isLargeD0:
128 kwargs.setdefault(
"seedRefitPtMinFactor", 0.9)
132 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
133 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
135 kwargs.setdefault(
"numMeasurementsCutOff", [1])
139 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
141 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
142 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
144 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
145 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
146 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
147 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
148 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
149 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
150 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
151 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
152 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
158 if flags.Tracking.ActiveConfig.SeedingStrategy
not in [
159 SeedingStrategy.GbtsFtf, SeedingStrategy.Gbts]:
160 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
161 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
163 if 'TrackParamsEstimationTool' not in kwargs:
164 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
168 if flags.Tracking.ActiveConfig.isLargeD0:
169 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
170 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
171 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs))
173 kwargs.setdefault(
'TrackParamsEstimationTool',
seedOrder(flags, pixel=[tpe], strip=[tpe]))
175 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
181 if 'PixelCalibrator' not in kwargs:
182 from AthenaConfiguration.Enums
import BeamType
184 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.PixelCalibrationStrategy.usesCalibration():
185 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsPixelCalibrationToolCfg
189 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
192 if 'StripCalibrator' not in kwargs:
193 from AthenaConfiguration.Enums
import BeamType
195 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.StripCalibrationStrategy.usesCalibration():
196 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
200 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
204 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
205 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
206 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
207 ActsTrackFindingMonitoringToolCfg(flags)))
209 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
215 **kwargs) -> ComponentAccumulator:
216 acc = ComponentAccumulator()
219 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
220 if not flags.Tracking.ActiveConfig.isSecondaryPass:
222 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
223 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
224 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
226 if flags.Acts.useCache:
227 pixelClusters +=
'_Cached'
228 stripClusters +=
'_Cached'
232 pixelSeedLabels = [
'PPP']
233 stripSeedLabels = [
'SSS']
235 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
236 if flags.Tracking.ActiveConfig.extension ==
'ActsConversion' or flags.Tracking.ActiveConfig.isLargeD0:
237 pixelSeedLabels =
None
239 elif isFastPrimaryPass(flags):
240 stripSeedLabels =
None
243 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
244 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
245 pixelDetElements = [
'ITkPixelDetectorElementCollection']
246 stripDetElements = [
'ITkStripDetectorElementCollection']
249 if flags.Tracking.ActiveConfig.isLargeD0:
250 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
251 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
253 if pixelSeedLabels
is None:
255 pixelDetElements =
None
257 elif 'TrackParamsEstimationTool' not in kwargs:
258 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
259 pixelTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"PixelTrackParamsEstimationTool", **tpe_tool_kwargs))]
261 if stripSeedLabels
is None:
263 stripDetElements =
None
265 elif 'TrackParamsEstimationTool' not in kwargs:
266 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
267 if flags.Tracking.ActiveConfig.isLargeD0
and flags.Acts.LrtStripSeedRefit:
268 tpe_tool_kwargs[
"refitSeeds"] =
True
269 stripTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"StripTrackParamsEstimationTool", **tpe_tool_kwargs))]
271 kwargs.setdefault(
"TrackParamsEstimationTool",
seedOrder(flags, pixel=pixelTpe, strip=stripTpe))
272 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
273 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
274 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
275 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
278 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
282 if flags.Acts.Tracks.doAnalysis:
283 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
284 acc.merge(ActsTrackAnalysisAlgCfg(flags,
285 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
286 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
289 DetectorElementsKeys=
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements)
290 if len(kwargs[
"SeedContainerKeys"]) != len(DetectorElementsKeys):
291 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
293 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
294 seedKey = kwargs[
"SeedContainerKeys"][i]
295 detElKey = DetectorElementsKeys[i]
298 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
299 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
300 name = f
'{seedKey}SeedsToTrackParamsAlg',
301 InputSeedContainerKey = seedKey,
302 DetectorElementsKey = detElKey,
303 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
305 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
306 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
307 name = f
'{seedKey}ToTrackAnalysisAlg',
308 InputSeedCollection = seedKey,
309 InputTrackParamsCollection = f
'{seedKey}Params',
310 InputDestinyCollection = f
'{seedKey}Destiny'))
313 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
314 trackColl = kwargs[
'ACTSTracksLocation']
315 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
316 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
317 name = f
'{trackColl}ToXAODConverterAlg',
318 InputActsTracksLocation = trackColl,
319 OutputActsTracksLocation = trackColl))
321 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
322 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
323 acc.merge(PersistifyTracks(flags,
324 extensions=[prefix]))
330 acc = ComponentAccumulator()
333 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
334 acc.merge(BeamSpotCondAlgCfg(flags))
337 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
340 if 'GnnPipelineTool' not in kwargs:
341 kwargs.setdefault(
'GnnPipelineTool', CompFactory.ActsTrk.GnnPipelineTool(
343 moduleMapPath=flags.Acts.GNN.ModuleMapPath,
344 gnnPath=flags.Acts.GNN.ModelPath,
345 numTrtContexts=flags.Acts.GNN.NumTrtContexts,
346 maxGpuInstances=flags.Acts.GNN.MaxGpuInstances,
347 edgeCut=flags.Acts.GNN.EdgeCut,
348 minCandidateMeasurements=flags.Acts.GNN.MinCandidateMeasurements,
351 kwargs.setdefault(
"varianceInflation", flags.Acts.GNN.VarianceInflation)
352 kwargs.setdefault(
"tightSeeds", flags.Acts.GNN.TightSeeds)
353 kwargs.setdefault(
"minDeltaR", flags.Acts.GNN.MinDeltaR)
354 kwargs.setdefault(
"relaxCentralHoleSel", flags.Acts.GNN.RelaxCentralHoleSel)
355 kwargs.setdefault(
"relaxMeasurementSel", flags.Acts.GNN.RelaxMeasurementSel)
356 kwargs.setdefault(
"offlineZ0Sel", flags.Acts.GNN.OfflineZ0Sel)
359 if 'TrackParamsEstimationTool' not in kwargs:
360 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
361 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
364 if 'FitterTool' not in kwargs:
365 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
366 kwargs.setdefault(
'FitterTool', acc.popToolsAndMerge(ActsFitterCfg(flags,
367 ReverseFilteringPt=0,
368 OutlierChi2Cut=float(
'inf'))))
370 from ActsAlignmentAlgs.AlignmentAlgsConfig
import ActsGeometryContextAlgCfg
371 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometrySvcCfg
372 acc.merge(ActsGeometryContextAlgCfg(flags))
373 acc.merge(ActsTrackingGeometrySvcCfg(flags))
376 CompFactory.ActsTrk.TrackFindingGNNAlg(
"TrackFindingGNNAlg", **kwargs)
431 **kwargs) -> ComponentAccumulator:
432 acc = ComponentAccumulator()
433 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
434 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
435 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
437 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
439 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
443 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
446 if flags.Acts.Tracks.doAnalysis:
447 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
448 acc.merge(ActsTrackAnalysisAlgCfg(flags,
449 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
450 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
453 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
454 trackColl = kwargs[
'ResolvedTracksLocation']
455 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
456 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
457 name = f
'{trackColl}ToXAODConverterAlg',
458 InputActsTracksLocation = trackColl,
459 OutputActsTracksLocation = trackColl))
461 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
462 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
463 acc.merge(PersistifyTracks(flags,
464 extensions=[prefix]))