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)
104 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
110 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
112 kwargs.setdefault(
"chi2CutOffSigma", tolist(flags.Tracking.ActiveConfig.Xi2maxSigma))
113 kwargs.setdefault(
"chi2OutlierCutOffSigma", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAddSigma))
114 kwargs.setdefault(
"checkCounts",
True)
115 kwargs.setdefault(
"doBranchStopper",
True)
117 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
118 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
122 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
123 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
125 kwargs.setdefault(
"numMeasurementsCutOff", [1])
129 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
131 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
132 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
134 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
135 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
136 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
137 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
138 kwargs.setdefault(
"minMeasurements", tolist([ 8, 8, 8]))
139 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
140 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
141 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
142 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
148 if flags.Tracking.ActiveConfig.PixelSeedingStrategy
is not SeedingStrategy.Gbts:
149 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
150 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
152 from ActsConfig.ActsGeometryConfig
import ActsGeometryRealmConvToolCfg
153 kwargs.setdefault(
"GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvToolCfg(flags)))
155 if 'TrackParamsEstimationTool' not in kwargs:
156 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
157 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags))
158 kwargs.setdefault(
'TrackParamsEstimationTool',
seedOrder(flags, pixel=[tpe], strip=[tpe]))
160 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
167 if 'PixelCalibrator' not in kwargs:
168 from AthenaConfiguration.Enums
import BeamType
170 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.PixelCalibrationStrategy.usesCalibration():
171 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsPixelCalibrationToolCfg
175 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
178 if 'StripCalibrator' not in kwargs:
179 from AthenaConfiguration.Enums
import BeamType
181 if flags.Beam.Type
is not BeamType.Cosmics
and flags.Acts.StripCalibrationStrategy.usesCalibration():
182 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
186 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
189 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
190 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
191 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
192 ActsTrackFindingMonitoringToolCfg(flags)))
194 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
200 **kwargs) -> ComponentAccumulator:
201 acc = ComponentAccumulator()
204 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
205 if not flags.Tracking.ActiveConfig.isSecondaryPass:
207 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
208 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
210 if flags.Acts.useCache:
211 pixelClusters +=
'_Cached'
212 stripClusters +=
'_Cached'
216 pixelSeedLabels = [
'PPP']
217 stripSeedLabels = [
'SSS']
222 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
223 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
224 pixelDetElements = [
'PixelDetectorElementCollection']
225 stripDetElements = [
'SCT_DetectorElementCollection']
226 if pixelSeedLabels
is None:
228 pixelDetElements =
None
229 if stripSeedLabels
is None:
231 stripDetElements =
None
233 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
234 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
235 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
236 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
237 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
240 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
274 if flags.Acts.EDM.PersistifyTracks
or flags.Output.doWriteESD:
275 trackColl = kwargs[
'ACTSTracksLocation']
276 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
277 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
278 name = f
'{trackColl}ToXAODConverterAlg',
279 InputActsTracksLocation = trackColl,
280 OutputActsTracksLocation = trackColl))
283 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
284 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
285 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
286 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
287 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
288 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
289 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
290 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
291 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
292 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
293 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
294 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
295 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
296 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
297 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
298 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
299 acc.merge(addToAOD(flags, toAOD))
351 **kwargs) -> ComponentAccumulator:
352 acc = ComponentAccumulator()
353 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
354 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
355 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
357 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
359 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
363 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
366 if flags.Acts.Tracks.doAnalysis:
367 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
368 acc.merge(ActsTrackAnalysisAlgCfg(flags,
369 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
370 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
373 if flags.Acts.EDM.PersistifyTracks:
374 trackColl = kwargs[
'ResolvedTracksLocation']
375 from ActsConfig.ActsEventCnvConfig
import ActsToXAODTrackConverterAlgCfg
376 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
377 name = f
'{trackColl}ToXAODConverterAlg',
378 InputActsTracksLocation = trackColl,
379 OutputActsTracksLocation = trackColl))
382 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
383 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
384 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
385 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
386 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
387 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
388 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
389 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
390 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
391 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
392 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
393 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
394 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
395 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
396 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
397 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
398 acc.merge(addToAOD(flags, toAOD))