56 name: str =
"ActsTrackFindingAlg",
57 **kwargs) -> ComponentAccumulator:
59 return c
if isinstance(c, list)
else [c]
61 acc = ComponentAccumulator()
63 from ActsConfig.ActsGeometryConfig
import ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg
65 acc.merge( ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
66 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
68 if flags.Detector.EnablePixel:
69 from PixelConditionsAlgorithms.PixelConditionsConfig
import PixelDetectorElementStatusAlgCfg
70 acc.merge(PixelDetectorElementStatusAlgCfg(flags))
71 if flags.Detector.EnableSCT:
72 from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConfig
import SCT_DetectorElementStatusAlgCfg
73 acc.merge(SCT_DetectorElementStatusAlgCfg(flags))
74 kwargs.setdefault(
"DetElStatus",
seedOrder(flags, pixel=[
"PixelDetectorElementStatus"], strip=[
"SCTDetectorElementStatus"]))
79 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
80 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsSCT_Seeds"]))
81 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=[
'PixelDetectorElementCollection'], strip=[
'SCT_DetectorElementCollection']))
82 if flags.Acts.Tracks.doAnalysis:
83 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
85 kwargs.setdefault(
"UncalibratedMeasurementContainerKeys",
isdet(flags, pixel=[
"PixelClusters"], strip=[
"SCT_Clusters"]))
87 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
89 kwargs.setdefault(
"maxPropagationStep", 10000)
90 kwargs.setdefault(
"skipDuplicateSeeds",
True)
91 kwargs.setdefault(
"seedMeasOffset", 1)
94 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
96 if (
not flags.Acts.doAmbiguityResolution) :
97 kwargs.setdefault(
"MaximumSharedHits", 3)
98 kwargs.setdefault(
"MaximumIterations", 10000)
99 kwargs.setdefault(
"NMeasurementsMin", 7)
101 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
102 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
103 kwargs.setdefault(
"inflateCovarianceTwoWay",
True)
104 kwargs.setdefault(
"twoWayinflateCovarianceFactor", 100.0)
105 kwargs.setdefault(
"autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
109 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
115 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
117 kwargs.setdefault(
"chi2CutOff", tolist(flags.Tracking.ActiveConfig.Xi2max*1))
118 kwargs.setdefault(
"chi2OutlierCutOff", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAdd*1))
119 kwargs.setdefault(
"checkCounts",
True)
120 kwargs.setdefault(
"doBranchStopper",
True)
122 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
123 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
127 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
128 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
130 kwargs.setdefault(
"numMeasurementsCutOff", [1])
134 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
136 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
137 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
139 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
140 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
141 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
142 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
143 kwargs.setdefault(
"minMeasurements", tolist([ 8, 8, 8]))
144 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
145 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
146 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
147 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
153 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts:
154 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
155 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
157 if 'TrackingGeometryTool' not in kwargs:
158 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
160 "TrackingGeometryTool",
161 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
164 if 'ATLASConverterTool' not in kwargs:
165 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
166 kwargs.setdefault(
'ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
168 if 'TrackParamsEstimationTool' not in kwargs:
169 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
170 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
172 if 'ExtrapolationTool' not in kwargs:
173 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
176 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
179 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
185 if 'FitterTool' not in kwargs:
186 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
189 acc.popToolsAndMerge(ActsFitterCfg(flags,
190 ReverseFilteringPt=0,
191 OutlierChi2Cut=float(
'inf')))
195 if 'PixelCalibrator' not in kwargs:
196 from AthenaConfiguration.Enums
import BeamType
198 if not (flags.Beam.Type
is BeamType.Cosmics):
199 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
200 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
202 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
203 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
207 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
208 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
211 if 'StripCalibrator' not in kwargs:
212 from AthenaConfiguration.Enums
import BeamType
213 if not (flags.Beam.Type
is BeamType.Cosmics):
214 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
215 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
217 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
218 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
222 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
223 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
226 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
227 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
228 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
229 ActsTrackFindingMonitoringToolCfg(flags)))
231 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
237 **kwargs) -> ComponentAccumulator:
238 acc = ComponentAccumulator()
241 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
242 if not flags.Tracking.ActiveConfig.isSecondaryPass:
244 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
245 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
247 if flags.Acts.useCache:
248 pixelClusters +=
'_Cached'
249 stripClusters +=
'_Cached'
253 pixelSeedLabels = [
'PPP']
254 stripSeedLabels = [
'SSS']
259 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
260 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
261 pixelDetElements = [
'PixelDetectorElementCollection']
262 stripDetElements = [
'SCT_DetectorElementCollection']
263 if pixelSeedLabels
is None:
265 pixelDetElements =
None
266 if stripSeedLabels
is None:
268 stripDetElements =
None
270 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
271 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
272 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
273 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
274 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
277 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
311 if flags.Acts.EDM.PersistifyTracks:
312 trackColl = kwargs[
'ACTSTracksLocation']
313 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
314 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
315 name = f
'{trackColl}ToXAODConverterAlg',
316 InputActsTracksLocation = trackColl,
317 OutputActsTracksLocation = trackColl))
320 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
321 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
322 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
323 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
324 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
325 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
326 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
327 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
328 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
329 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
330 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
331 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
332 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
333 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
334 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
335 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
336 acc.merge(addToAOD(flags, toAOD))
388 **kwargs) -> ComponentAccumulator:
389 acc = ComponentAccumulator()
390 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
391 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
392 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
394 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
396 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
400 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
403 if flags.Acts.Tracks.doAnalysis:
404 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
405 acc.merge(ActsTrackAnalysisAlgCfg(flags,
406 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
407 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
410 if flags.Acts.EDM.PersistifyTracks:
411 trackColl = kwargs[
'ResolvedTracksLocation']
412 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
413 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
414 name = f
'{trackColl}ToXAODConverterAlg',
415 InputActsTracksLocation = trackColl,
416 OutputActsTracksLocation = trackColl))
419 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
420 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
421 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
422 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
423 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
424 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
425 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
426 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
427 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
428 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
429 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
430 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
431 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
432 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
433 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
434 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
435 acc.merge(addToAOD(flags, toAOD))