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.PixelSeedingStrategy
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']
234 if not flags.Tracking.ActiveConfig.useITkPixelSeeding:
235 pixelSeedLabels =
None
236 if not flags.Tracking.ActiveConfig.useITkStripSeeding:
237 stripSeedLabels =
None
240 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
241 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
242 pixelDetElements = [
'ITkPixelDetectorElementCollection']
243 stripDetElements = [
'ITkStripDetectorElementCollection']
246 if flags.Tracking.ActiveConfig.isLargeD0:
247 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
248 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
250 if pixelSeedLabels
is None:
252 pixelDetElements =
None
254 elif 'TrackParamsEstimationTool' not in kwargs:
255 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
256 pixelTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"PixelTrackParamsEstimationTool", **tpe_tool_kwargs))]
258 if stripSeedLabels
is None:
260 stripDetElements =
None
262 elif 'TrackParamsEstimationTool' not in kwargs:
263 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
264 if flags.Tracking.ActiveConfig.isLargeD0
and flags.Acts.LrtStripSeedRefit:
265 tpe_tool_kwargs[
"refitSeeds"] =
True
266 stripTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"StripTrackParamsEstimationTool", **tpe_tool_kwargs))]
268 kwargs.setdefault(
"TrackParamsEstimationTool",
seedOrder(flags, pixel=pixelTpe, strip=stripTpe))
269 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
270 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
271 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
272 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
275 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
279 if flags.Acts.Tracks.doAnalysis:
280 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
281 acc.merge(ActsTrackAnalysisAlgCfg(flags,
282 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
283 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
286 DetectorElementsKeys=
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements)
287 if len(kwargs[
"SeedContainerKeys"]) != len(DetectorElementsKeys):
288 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
290 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
291 seedKey = kwargs[
"SeedContainerKeys"][i]
292 detElKey = DetectorElementsKeys[i]
295 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
296 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
297 name = f
'{seedKey}SeedsToTrackParamsAlg',
298 InputSeedContainerKey = seedKey,
299 DetectorElementsKey = detElKey,
300 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
302 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
303 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
304 name = f
'{seedKey}ToTrackAnalysisAlg',
305 InputSeedCollection = seedKey,
306 InputTrackParamsCollection = f
'{seedKey}Params',
307 InputDestinyCollection = f
'{seedKey}Destiny'))
310 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
311 trackColl = kwargs[
'ACTSTracksLocation']
312 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
313 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
314 name = f
'{trackColl}ToXAODConverterAlg',
315 InputActsTracksLocation = trackColl,
316 OutputActsTracksLocation = trackColl))
318 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
319 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
320 acc.merge(PersistifyTracks(flags,
321 extensions=[prefix]))
343 acc = ComponentAccumulator()
346 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
347 acc.merge(BeamSpotCondAlgCfg(flags))
350 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
353 if 'GnnPipelineTool' not in kwargs:
354 kwargs.setdefault(
'GnnPipelineTool', acc.popToolsAndMerge(
357 kwargs.setdefault(
"varianceInflation", flags.Acts.GNN.VarianceInflation)
358 kwargs.setdefault(
"tightSeeds", flags.Acts.GNN.TightSeeds)
359 kwargs.setdefault(
"relaxCentralHoleSel", flags.Acts.GNN.RelaxCentralHoleSel)
360 kwargs.setdefault(
"relaxMeasurementSel", flags.Acts.GNN.RelaxMeasurementSel)
361 kwargs.setdefault(
"offlineZ0Sel", flags.Acts.GNN.OfflineZ0Sel)
364 if 'TrackParamsEstimationTool' not in kwargs:
365 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
366 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
369 if 'FitterTool' not in kwargs:
370 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
371 kwargs.setdefault(
'FitterTool', acc.popToolsAndMerge(ActsFitterCfg(flags,
372 ReverseFilteringPt=0,
373 OutlierChi2Cut=float(
'inf'))))
375 from ActsAlignmentAlgs.AlignmentAlgsConfig
import ActsGeometryContextAlgCfg
376 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometrySvcCfg
377 acc.merge(ActsGeometryContextAlgCfg(flags))
378 acc.merge(ActsTrackingGeometrySvcCfg(flags))
381 CompFactory.ActsTrk.TrackFindingGNNAlg(
"TrackFindingGNNAlg", **kwargs)
436 **kwargs) -> ComponentAccumulator:
437 acc = ComponentAccumulator()
438 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
439 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
440 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
442 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
444 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
448 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
451 if flags.Acts.Tracks.doAnalysis:
452 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
453 acc.merge(ActsTrackAnalysisAlgCfg(flags,
454 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
455 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
458 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
459 trackColl = kwargs[
'ResolvedTracksLocation']
460 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
461 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
462 name = f
'{trackColl}ToXAODConverterAlg',
463 InputActsTracksLocation = trackColl,
464 OutputActsTracksLocation = trackColl))
466 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
467 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
468 acc.merge(PersistifyTracks(flags,
469 extensions=[prefix]))