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(
"autoReverseSearch", flags.Acts.autoReverseSearchCKF)
108 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
114 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
116 kwargs.setdefault(
"chi2CutOff", tolist(flags.Tracking.ActiveConfig.Xi2max*1))
117 kwargs.setdefault(
"chi2OutlierCutOff", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAdd*1))
118 kwargs.setdefault(
"checkCounts",
True)
119 kwargs.setdefault(
"doBranchStopper",
True)
121 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
122 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
126 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
127 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
129 kwargs.setdefault(
"numMeasurementsCutOff", [1])
133 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
135 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
136 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
138 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
139 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
140 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
141 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
142 kwargs.setdefault(
"minMeasurements", tolist([ 8, 8, 8]))
143 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
144 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
145 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
146 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
152 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts2:
153 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
154 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
156 if 'TrackingGeometryTool' not in kwargs:
157 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
159 "TrackingGeometryTool",
160 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
163 if 'ATLASConverterTool' not in kwargs:
164 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
165 kwargs.setdefault(
'ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
167 if 'TrackParamsEstimationTool' not in kwargs:
168 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
169 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
171 if 'ExtrapolationTool' not in kwargs:
172 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
175 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
178 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
184 if 'FitterTool' not in kwargs:
185 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
188 acc.popToolsAndMerge(ActsFitterCfg(flags,
189 ReverseFilteringPt=0,
190 OutlierChi2Cut=float(
'inf')))
194 if 'PixelCalibrator' not in kwargs:
195 from AthenaConfiguration.Enums
import BeamType
197 if not (flags.Beam.Type
is BeamType.Cosmics):
198 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
199 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
201 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
202 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
206 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
207 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
210 if 'StripCalibrator' not in kwargs:
211 from AthenaConfiguration.Enums
import BeamType
212 if not (flags.Beam.Type
is BeamType.Cosmics):
213 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
214 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
216 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
217 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
221 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
222 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
225 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
226 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
227 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
228 ActsTrackFindingMonitoringToolCfg(flags)))
230 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
236 **kwargs) -> ComponentAccumulator:
237 acc = ComponentAccumulator()
240 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
241 if not flags.Tracking.ActiveConfig.isSecondaryPass:
243 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
244 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
246 if flags.Acts.useCache:
247 pixelClusters +=
'_Cached'
248 stripClusters +=
'_Cached'
252 pixelSeedLabels = [
'PPP']
253 stripSeedLabels = [
'SSS']
258 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
259 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
260 pixelDetElements = [
'PixelDetectorElementCollection']
261 stripDetElements = [
'SCT_DetectorElementCollection']
262 if pixelSeedLabels
is None:
264 pixelDetElements =
None
265 if stripSeedLabels
is None:
267 stripDetElements =
None
269 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
270 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
271 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
272 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
273 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
276 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
310 if flags.Acts.EDM.PersistifyTracks:
311 trackColl = kwargs[
'ACTSTracksLocation']
312 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
313 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
314 name = f
'{trackColl}ToXAODConverterAlg',
315 InputActsTracksLocation = trackColl,
316 OutputActsTracksLocation = trackColl))
319 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
320 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
321 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
322 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
323 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
324 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
325 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
326 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
327 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
328 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
329 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
330 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
331 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
332 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
333 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
334 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
335 acc.merge(addToAOD(flags, toAOD))
387 **kwargs) -> ComponentAccumulator:
388 acc = ComponentAccumulator()
389 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
390 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
391 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
393 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
395 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
399 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
402 if flags.Acts.Tracks.doAnalysis:
403 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
404 acc.merge(ActsTrackAnalysisAlgCfg(flags,
405 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
406 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
409 if flags.Acts.EDM.PersistifyTracks:
410 trackColl = kwargs[
'ResolvedTracksLocation']
411 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
412 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
413 name = f
'{trackColl}ToXAODConverterAlg',
414 InputActsTracksLocation = trackColl,
415 OutputActsTracksLocation = trackColl))
418 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
419 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
420 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
421 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
422 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
423 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
424 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
425 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
426 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
427 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
428 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
429 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
430 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
431 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
432 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
433 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
434 acc.merge(addToAOD(flags, toAOD))