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)
111 kwargs.setdefault(
"doSecondPassBranchStopper", flags.Tracking.ActiveConfig.isLargeD0)
113 kwargs.setdefault(
"recordMaterialStates",
False)
115 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
121 if flags.Detector.GeometryITk:
122 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
124 kwargs.setdefault(
"chi2CutOffSigma", flags.Tracking.ActiveConfig.Xi2maxSigma)
125 kwargs.setdefault(
"chi2OutlierCutOffSigma", flags.Tracking.ActiveConfig.Xi2maxNoAddSigma)
127 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
128 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
129 if flags.Tracking.ActiveConfig.isLargeD0:
131 kwargs.setdefault(
"seedPtMinFactor", 0.9)
133 doBremRecovery = kwargs.setdefault(
135 flags.Acts.doBremRecovery
136 and flags.Tracking.ActiveConfig.doBremRecoverySi
137 and flags.Tracking.doCaloSeededBrem)
139 from InDetConfig.InDetCaloClusterROISelectorConfig
import (
140 ITkCaloClusterROIPhiRZContainerMakerCfg,
142 acc.merge(ITkCaloClusterROIPhiRZContainerMakerCfg(flags))
143 kwargs.setdefault(
"phiWidthROI", flags.Acts.phiWidthROI)
144 kwargs.setdefault(
"etaWidthROI", flags.Acts.etaWidthROI)
145 kwargs.setdefault(
"bremMaxComponents", flags.Acts.GsfMaxComponents)
146 kwargs.setdefault(
"bremWeightCutoff", flags.Acts.GsfWeightCutoff)
147 kwargs.setdefault(
"bremMergeMethod", flags.Acts.GsfComponentMergeMethod)
150 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
151 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
153 kwargs.setdefault(
"numMeasurementsCutOff", [1])
157 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
159 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
160 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
162 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
163 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
164 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
165 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
166 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
167 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
168 kwargs.setdefault(
"maxOutliers", tolist(flags.Tracking.ActiveConfig.maxOutliers))
169 if flags.Tracking.ActiveConfig.maxHolesAndOutliers:
170 kwargs.setdefault(
"maxHolesAndOutliers", tolist(flags.Tracking.ActiveConfig.maxHolesAndOutliers))
171 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
172 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
173 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
179 if flags.Tracking.ActiveConfig.PixelSeedingStrategy
is not SeedingStrategy.Gbts:
180 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
181 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
183 if 'TrackParamsEstimationTool' not in kwargs:
184 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
188 if flags.Tracking.ActiveConfig.isLargeD0:
189 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
190 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
191 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs))
193 kwargs.setdefault(
'TrackParamsEstimationTool',
seedOrder(flags, pixel=[tpe], strip=[tpe]))
195 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
201 if 'PixelCalibrator' not in kwargs:
202 from AthenaConfiguration.Enums
import BeamType
204 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.PixelCalibrationStrategy.usesCalibration():
205 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsPixelCalibrationToolCfg
209 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
212 if 'StripCalibrator' not in kwargs:
213 from AthenaConfiguration.Enums
import BeamType
215 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.StripCalibrationStrategy.usesCalibration():
216 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
220 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
224 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
225 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
226 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
227 ActsTrackFindingMonitoringToolCfg(flags)))
229 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
235 **kwargs) -> ComponentAccumulator:
236 acc = ComponentAccumulator()
239 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
240 if not flags.Tracking.ActiveConfig.isSecondaryPass:
242 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
243 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
244 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
246 if flags.Acts.useCache:
247 pixelClusters +=
'_Cached'
248 stripClusters +=
'_Cached'
252 pixelSeedLabels = [
'PPP']
253 stripSeedLabels = [
'SSS']
254 if not flags.Tracking.ActiveConfig.useITkPixelSeeding:
255 pixelSeedLabels =
None
256 if not flags.Tracking.ActiveConfig.useITkStripSeeding:
257 stripSeedLabels =
None
260 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
261 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
262 pixelDetElements = [
'ITkPixelDetectorElementCollection']
263 stripDetElements = [
'ITkStripDetectorElementCollection']
266 if flags.Tracking.ActiveConfig.isLargeD0:
267 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
268 tpe_tool_kwargs[
"stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
270 if pixelSeedLabels
is None:
272 pixelDetElements =
None
274 elif 'TrackParamsEstimationTool' not in kwargs:
275 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
276 pixelTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"PixelTrackParamsEstimationTool", **tpe_tool_kwargs))]
278 if stripSeedLabels
is None:
280 stripDetElements =
None
282 elif 'TrackParamsEstimationTool' not in kwargs:
283 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
284 if flags.Tracking.ActiveConfig.isLargeD0
and flags.Acts.LrtStripSeedRefit:
285 tpe_tool_kwargs[
"refitSeeds"] =
True
286 stripTpe = [acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags,
"StripTrackParamsEstimationTool", **tpe_tool_kwargs))]
288 kwargs.setdefault(
"TrackParamsEstimationTool",
seedOrder(flags, pixel=pixelTpe, strip=stripTpe))
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))
295 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
299 if flags.Acts.Tracks.doAnalysis:
300 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
301 acc.merge(ActsTrackAnalysisAlgCfg(flags,
302 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
303 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
306 DetectorElementsKeys=
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements)
307 if len(kwargs[
"SeedContainerKeys"]) != len(DetectorElementsKeys):
308 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
310 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
311 seedKey = kwargs[
"SeedContainerKeys"][i]
312 detElKey = DetectorElementsKeys[i]
315 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
316 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
317 name = f
'{seedKey}SeedsToTrackParamsAlg',
318 InputSeedContainerKey = seedKey,
319 DetectorElementsKey = detElKey,
320 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
322 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
323 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
324 name = f
'{seedKey}ToTrackAnalysisAlg',
325 InputSeedCollection = seedKey,
326 InputTrackParamsCollection = f
'{seedKey}Params',
327 InputDestinyCollection = f
'{seedKey}Destiny'))
330 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
331 trackColl = kwargs[
'ACTSTracksLocation']
332 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
333 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
334 name = f
'{trackColl}ToXAODConverterAlg',
335 InputActsTracksLocation = trackColl,
336 OutputActsTracksLocation = trackColl))
338 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
339 from ActsConfig.ActsPersistificationConfig
import PersistifyTracks
340 acc.merge(PersistifyTracks(flags,
341 extensions=[prefix]))
363 acc = ComponentAccumulator()
366 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
367 acc.merge(BeamSpotCondAlgCfg(flags))
370 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
373 if 'GnnPipelineTool' not in kwargs:
374 kwargs.setdefault(
'GnnPipelineTool', acc.popToolsAndMerge(
377 kwargs.setdefault(
"varianceInflation", flags.Acts.GNN.VarianceInflation)
378 kwargs.setdefault(
"tightSeeds", flags.Acts.GNN.TightSeeds)
379 kwargs.setdefault(
"relaxCentralHoleSel", flags.Acts.GNN.RelaxCentralHoleSel)
380 kwargs.setdefault(
"relaxMeasurementSel", flags.Acts.GNN.RelaxMeasurementSel)
381 kwargs.setdefault(
"offlineZ0Sel", flags.Acts.GNN.OfflineZ0Sel)
384 if 'TrackParamsEstimationTool' not in kwargs:
385 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
386 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(
387 flags, parameterEstimationMode=flags.Acts.GNN.ParameterEstimationMode.value)))
390 if 'FitterTool' not in kwargs:
391 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
392 kwargs.setdefault(
'FitterTool', acc.popToolsAndMerge(ActsFitterCfg(flags,
393 ReverseFilteringPt=0,
394 OutlierChi2Cut=float(
'inf'))))
396 from ActsAlignmentAlgs.AlignmentAlgsConfig
import ActsGeometryContextAlgCfg
397 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometrySvcCfg
398 acc.merge(ActsGeometryContextAlgCfg(flags))
399 acc.merge(ActsTrackingGeometrySvcCfg(flags))
402 CompFactory.ActsTrk.TrackFindingGNNAlg(
"TrackFindingGNNAlg", **kwargs)