54 name: str =
"ActsTrackFindingAlg",
55 **kwargs) -> ComponentAccumulator:
57 return c
if isinstance(c, list)
else [c]
59 acc = ComponentAccumulator()
61 from ActsConfig.ActsGeometryConfig
import ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg
63 acc.merge( ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
64 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
66 if flags.Detector.EnablePixel:
67 from PixelConditionsAlgorithms.PixelConditionsConfig
import PixelDetectorElementStatusAlgCfg
68 acc.merge(PixelDetectorElementStatusAlgCfg(flags))
69 if flags.Detector.EnableSCT:
70 from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConfig
import SCT_DetectorElementStatusAlgCfg
71 acc.merge(SCT_DetectorElementStatusAlgCfg(flags))
72 kwargs.setdefault(
"DetElStatus",
seedOrder(flags, pixel=[
"PixelDetectorElementStatus"], strip=[
"SCTDetectorElementStatus"]))
77 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
78 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsSCT_Seeds"]))
79 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=[
'PixelDetectorElementCollection'], strip=[
'SCT_DetectorElementCollection']))
80 if flags.Acts.Tracks.doAnalysis:
81 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
83 kwargs.setdefault(
"UncalibratedMeasurementContainerKeys",
isdet(flags, pixel=[
"PixelClusters"], strip=[
"SCT_Clusters"]))
85 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
87 kwargs.setdefault(
"maxPropagationStep", 10000)
88 kwargs.setdefault(
"skipDuplicateSeeds",
True)
89 kwargs.setdefault(
"seedMeasOffset", 1)
92 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
94 if (
not flags.Acts.doAmbiguityResolution) :
95 kwargs.setdefault(
"MaximumSharedHits", 3)
96 kwargs.setdefault(
"MaximumIterations", 10000)
97 kwargs.setdefault(
"NMeasurementsMin", 7)
99 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
100 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
101 kwargs.setdefault(
"inflateCovarianceTwoWay",
True)
102 kwargs.setdefault(
"twoWayinflateCovarianceFactor", 100.0)
103 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
107 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
113 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
115 kwargs.setdefault(
"chi2CutOff", tolist(flags.Tracking.ActiveConfig.Xi2max*1))
116 kwargs.setdefault(
"chi2OutlierCutOff", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAdd*1))
117 kwargs.setdefault(
"checkCounts",
True)
118 kwargs.setdefault(
"doBranchStopper",
True)
120 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
121 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
125 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
126 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
128 kwargs.setdefault(
"numMeasurementsCutOff", [1])
132 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
134 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
135 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
137 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
138 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
139 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
140 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
141 kwargs.setdefault(
"minMeasurements", tolist([ 8, 8, 8]))
142 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
143 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
144 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
145 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
151 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts:
152 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
153 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
155 from ActsConfig.ActsGeometryConfig
import ActsGeometryRealmConvToolCfg
156 kwargs.setdefault(
"GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvToolCfg(flags)))
158 if 'TrackParamsEstimationTool' not in kwargs:
159 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
160 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
162 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
168 if 'FitterTool' not in kwargs:
169 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
172 acc.popToolsAndMerge(ActsFitterCfg(flags,
173 ReverseFilteringPt=0,
174 OutlierChi2Cut=float(
'inf')))
178 if 'PixelCalibrator' not in kwargs:
179 from AthenaConfiguration.Enums
import BeamType
181 if flags.Beam.Type
is not BeamType.Cosmics:
182 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
183 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
185 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
186 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
187 PixelCalibrationStrategy.NNClustering):
191 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
192 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
195 if 'StripCalibrator' not in kwargs:
196 from AthenaConfiguration.Enums
import BeamType
197 if flags.Beam.Type
is not BeamType.Cosmics:
198 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
199 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
201 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
202 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
206 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
207 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
210 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
211 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
212 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
213 ActsTrackFindingMonitoringToolCfg(flags)))
215 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
221 **kwargs) -> ComponentAccumulator:
222 acc = ComponentAccumulator()
225 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
226 if not flags.Tracking.ActiveConfig.isSecondaryPass:
228 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
229 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
231 if flags.Acts.useCache:
232 pixelClusters +=
'_Cached'
233 stripClusters +=
'_Cached'
237 pixelSeedLabels = [
'PPP']
238 stripSeedLabels = [
'SSS']
243 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
244 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
245 pixelDetElements = [
'PixelDetectorElementCollection']
246 stripDetElements = [
'SCT_DetectorElementCollection']
247 if pixelSeedLabels
is None:
249 pixelDetElements =
None
250 if stripSeedLabels
is None:
252 stripDetElements =
None
254 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
255 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
256 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
257 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
258 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
261 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
295 if flags.Acts.EDM.PersistifyTracks:
296 trackColl = kwargs[
'ACTSTracksLocation']
297 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
298 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
299 name = f
'{trackColl}ToXAODConverterAlg',
300 InputActsTracksLocation = trackColl,
301 OutputActsTracksLocation = trackColl))
304 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
305 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
306 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
307 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
308 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
309 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
310 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
311 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
312 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
313 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
314 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
315 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
316 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
317 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
318 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
319 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
320 acc.merge(addToAOD(flags, toAOD))
372 **kwargs) -> ComponentAccumulator:
373 acc = ComponentAccumulator()
374 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
375 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
376 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
378 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
380 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
384 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
387 if flags.Acts.Tracks.doAnalysis:
388 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
389 acc.merge(ActsTrackAnalysisAlgCfg(flags,
390 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
391 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
394 if flags.Acts.EDM.PersistifyTracks:
395 trackColl = kwargs[
'ResolvedTracksLocation']
396 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
397 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
398 name = f
'{trackColl}ToXAODConverterAlg',
399 InputActsTracksLocation = trackColl,
400 OutputActsTracksLocation = trackColl))
403 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
404 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
405 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
406 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
407 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
408 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
409 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
410 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
411 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
412 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
413 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
414 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
415 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
416 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
417 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
418 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
419 acc.merge(addToAOD(flags, toAOD))