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 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg, ActsGeometryRealmConvTool
158 kwargs.setdefault(
"TrackingGeometryTool", acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
159 kwargs.setdefault(
"GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvTool(flags)))
161 if 'TrackParamsEstimationTool' not in kwargs:
162 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
163 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
165 if 'ExtrapolationTool' not in kwargs:
166 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
169 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
172 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
178 if 'FitterTool' not in kwargs:
179 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
182 acc.popToolsAndMerge(ActsFitterCfg(flags,
183 ReverseFilteringPt=0,
184 OutlierChi2Cut=float(
'inf')))
188 if 'PixelCalibrator' not in kwargs:
189 from AthenaConfiguration.Enums
import BeamType
191 if flags.Beam.Type
is not BeamType.Cosmics:
192 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
193 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
195 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
196 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
197 PixelCalibrationStrategy.NNClustering):
201 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
202 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
205 if 'StripCalibrator' not in kwargs:
206 from AthenaConfiguration.Enums
import BeamType
207 if flags.Beam.Type
is not BeamType.Cosmics:
208 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
209 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
211 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
212 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
216 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
217 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
220 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
221 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
222 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
223 ActsTrackFindingMonitoringToolCfg(flags)))
225 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
231 **kwargs) -> ComponentAccumulator:
232 acc = ComponentAccumulator()
235 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
236 if not flags.Tracking.ActiveConfig.isSecondaryPass:
238 pixelClusters = f
'{dataPrepPrefix}PixelClusters'
239 stripClusters = f
'{dataPrepPrefix}SCT_Clusters'
241 if flags.Acts.useCache:
242 pixelClusters +=
'_Cached'
243 stripClusters +=
'_Cached'
247 pixelSeedLabels = [
'PPP']
248 stripSeedLabels = [
'SSS']
253 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
254 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}SCT_Seeds']
255 pixelDetElements = [
'PixelDetectorElementCollection']
256 stripDetElements = [
'SCT_DetectorElementCollection']
257 if pixelSeedLabels
is None:
259 pixelDetElements =
None
260 if stripSeedLabels
is None:
262 stripDetElements =
None
264 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
265 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters]))
266 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
267 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
268 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
271 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
305 if flags.Acts.EDM.PersistifyTracks:
306 trackColl = kwargs[
'ACTSTracksLocation']
307 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
308 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
309 name = f
'{trackColl}ToXAODConverterAlg',
310 InputActsTracksLocation = trackColl,
311 OutputActsTracksLocation = trackColl))
314 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
315 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
316 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
317 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
318 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
319 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
320 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
321 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
322 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
323 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
324 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
325 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
326 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
327 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
328 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
329 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
330 acc.merge(addToAOD(flags, toAOD))
382 **kwargs) -> ComponentAccumulator:
383 acc = ComponentAccumulator()
384 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
385 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
386 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
388 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
390 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
394 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
397 if flags.Acts.Tracks.doAnalysis:
398 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
399 acc.merge(ActsTrackAnalysisAlgCfg(flags,
400 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
401 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
404 if flags.Acts.EDM.PersistifyTracks:
405 trackColl = kwargs[
'ResolvedTracksLocation']
406 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
407 acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
408 name = f
'{trackColl}ToXAODConverterAlg',
409 InputActsTracksLocation = trackColl,
410 OutputActsTracksLocation = trackColl))
413 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
414 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
415 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
416 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
417 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
418 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
419 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
420 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
421 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
422 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
423 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
424 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
425 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
426 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
427 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
428 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
429 acc.merge(addToAOD(flags, toAOD))