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(
"doTwoWay", flags.Acts.doTwoWayCKF)
100 kwargs.setdefault(
"inflateCovarianceTwoWay",
True)
101 kwargs.setdefault(
"twoWayinflateCovarianceFactor", 100.0)
102 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
106 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
112 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
114 kwargs.setdefault(
"chi2CutOff", tolist(flags.Tracking.ActiveConfig.Xi2max*1))
115 kwargs.setdefault(
"chi2OutlierCutOff", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAdd*1))
116 kwargs.setdefault(
"checkCounts",
True)
117 kwargs.setdefault(
"doBranchStopper",
True)
119 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
120 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
124 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
125 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
127 kwargs.setdefault(
"numMeasurementsCutOff", [1])
131 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
133 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
134 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
136 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
137 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
138 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
139 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
140 kwargs.setdefault(
"minMeasurements", tolist([ 8, 8, 8]))
141 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
142 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
143 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
144 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
150 if flags.Tracking.ActiveConfig.SeedingStrategy
is not SeedingStrategy.Gbts:
151 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
152 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
154 from ActsConfig.ActsGeometryConfig
import ActsGeometryRealmConvToolCfg
155 kwargs.setdefault(
"GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvToolCfg(flags)))
157 if 'TrackParamsEstimationTool' not in kwargs:
158 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
159 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags))
160 kwargs.setdefault(
'TrackParamsEstimationTool',
seedOrder(flags, pixel=[tpe], strip=[tpe]))
162 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
169 if 'PixelCalibrator' not in kwargs:
170 from AthenaConfiguration.Enums
import BeamType
172 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.PixelCalibrationStrategy.usesCalibration():
173 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsPixelCalibrationToolCfg
177 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
180 if 'StripCalibrator' not in kwargs:
181 from AthenaConfiguration.Enums
import BeamType
183 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.StripCalibrationStrategy.usesCalibration():
184 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
188 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
191 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
192 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
193 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
194 ActsTrackFindingMonitoringToolCfg(flags)))
196 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
202 **kwargs) -> ComponentAccumulator:
203 acc = ComponentAccumulator()
206 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
207 if not flags.Tracking.ActiveConfig.isSecondaryPass:
209 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
210 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
212 if flags.Acts.useCache:
213 pixelClusters +=
'_Cached'
214 stripClusters +=
'_Cached'
218 pixelSeedLabels = [
'PPP']
219 stripSeedLabels = [
'SSS']
224 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
225 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
226 pixelDetElements = [
'PixelDetectorElementCollection']
227 stripDetElements = [
'SCT_DetectorElementCollection']
228 if pixelSeedLabels
is None:
230 pixelDetElements =
None
231 if stripSeedLabels
is None:
233 stripDetElements =
None
235 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
236 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
237 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
238 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
239 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
242 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
276 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
277 trackColl = kwargs[
'ACTSTracksLocation']
278 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
279 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
280 name = f
'{trackColl}ToXAODConverterAlg',
281 InputActsTracksLocation = trackColl,
282 OutputActsTracksLocation = trackColl))
285 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
286 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
287 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
288 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
289 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
290 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
291 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
292 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
293 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
294 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
295 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
296 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
297 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
298 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
299 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
300 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
301 acc.merge(addToAOD(flags, toAOD))
353 **kwargs) -> ComponentAccumulator:
354 acc = ComponentAccumulator()
355 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
356 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
357 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
359 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
361 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
365 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
368 if flags.Acts.Tracks.doAnalysis:
369 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
370 acc.merge(ActsTrackAnalysisAlgCfg(flags,
371 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
372 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
375 if flags.Acts.EDM.PersistifyTracks:
376 trackColl = kwargs[
'ResolvedTracksLocation']
377 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
378 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
379 name = f
'{trackColl}ToXAODConverterAlg',
380 InputActsTracksLocation = trackColl,
381 OutputActsTracksLocation = trackColl))
384 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
385 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
386 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
387 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
388 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
389 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
390 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
391 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
392 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
393 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
394 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
395 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
396 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
397 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
398 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
399 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
400 acc.merge(addToAOD(flags, toAOD))