60 name: str =
"ActsTrackFindingAlg",
61 **kwargs) -> ComponentAccumulator:
63 return c
if isinstance(c, list)
else [c]
65 acc = ComponentAccumulator()
67 from ActsConfig.ActsGeometryConfig
import ActsVolumeIdToDetectorCollectionMappingAlgCfg
69 if not flags.Acts.useHGTDClusterInTrackFinding:
73 kwargs.setdefault(
'EndOfTheWorldVolumeIds', [2, 25])
75 acc.merge( ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
76 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
78 if flags.Detector.EnableITkPixel:
79 from PixelConditionsAlgorithms.ITkPixelConditionsConfig
import ITkPixelDetectorElementStatusAlgCfg
80 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
81 if flags.Detector.EnableITkStrip:
82 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig
import ITkStripDetectorElementStatusAlgCfg
83 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
84 kwargs.setdefault(
"DetElStatus",
seedOrder(flags, pixel=[
"ITkPixelDetectorElementStatus"], strip=[
"ITkStripDetectorElementStatus"]))
89 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
90 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsStripSeeds"]))
91 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=[
'ITkPixelDetectorElementCollection'], strip=[
'ITkStripDetectorElementCollection']))
92 if flags.Acts.Tracks.doAnalysis:
93 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
95 kwargs.setdefault(
"UncalibratedMeasurementContainerKeys",
isdet(flags, pixel=[
"ITkPixelClusters_Cached" if flags.Acts.useCache
else "ITkPixelClusters"], strip=[
"ITkStripClusters_Cached" if flags.Acts.useCache
else "ITkStripClusters"], hgtd=[
"HGTD_Clusters"]))
97 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
99 kwargs.setdefault(
"maxPropagationStep", 10000)
100 kwargs.setdefault(
"skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
101 kwargs.setdefault(
"seedMeasOffset", 1)
104 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
106 if (
not flags.Acts.doAmbiguityResolution) :
107 kwargs.setdefault(
"MaximumSharedHits", 3)
108 kwargs.setdefault(
"MaximumIterations", 10000)
109 kwargs.setdefault(
"NMeasurementsMin", 7)
111 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
112 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
113 kwargs.setdefault(
"autoReverseSearch", flags.Acts.autoReverseSearchCKF)
115 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
121 if flags.Detector.GeometryITk:
122 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
124 kwargs.setdefault(
"chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
125 kwargs.setdefault(
"chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
127 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
128 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
132 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
133 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
135 kwargs.setdefault(
"numMeasurementsCutOff", [1])
139 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
141 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
142 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
144 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
145 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
146 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
147 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
148 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
149 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
150 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
151 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
152 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
158 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts2:
159 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
160 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
162 if 'TrackingGeometryTool' not in kwargs:
163 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
165 "TrackingGeometryTool",
166 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
169 if 'ATLASConverterTool' not in kwargs:
170 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
171 kwargs.setdefault(
'ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
173 if 'TrackParamsEstimationTool' not in kwargs:
174 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
177 if flags.Tracking.ActiveConfig.extension
in [
'ActsLargeRadius',
'ActsValidateLargeRadiusStandalone']:
178 tpe_tool_kwargs[
"allowPropagatorFailure"] =
True
180 kwargs.setdefault(
'TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs)))
182 if 'ExtrapolationTool' not in kwargs:
183 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
186 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
189 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
195 if 'FitterTool' not in kwargs:
196 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
199 acc.popToolsAndMerge(ActsFitterCfg(flags,
200 ReverseFilteringPt=0,
201 OutlierChi2Cut=float(
'inf')))
204 if 'PixelCalibrator' not in kwargs:
205 from AthenaConfiguration.Enums
import BeamType
207 if not (flags.Beam.Type
is BeamType.Cosmics):
208 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
209 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
211 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
212 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
216 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
217 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
220 if 'StripCalibrator' not in kwargs:
221 from AthenaConfiguration.Enums
import BeamType
222 if not (flags.Beam.Type
is BeamType.Cosmics):
223 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
224 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
226 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
227 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
231 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
232 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
236 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
237 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
238 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
239 ActsTrackFindingMonitoringToolCfg(flags)))
241 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
247 **kwargs) -> ComponentAccumulator:
248 acc = ComponentAccumulator()
251 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
252 if not flags.Tracking.ActiveConfig.isSecondaryPass:
254 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
255 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
256 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
258 if flags.Acts.useCache:
259 pixelClusters +=
'_Cached'
260 stripClusters +=
'_Cached'
264 pixelSeedLabels = [
'PPP']
265 stripSeedLabels = [
'SSS']
267 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
268 if flags.Tracking.ActiveConfig.extension
in [
'ActsConversion',
'ActsLargeRadius',
'ActsValidateLargeRadiusStandalone']:
269 pixelSeedLabels =
None
271 elif isFastPrimaryPass(flags):
272 stripSeedLabels =
None
275 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
276 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
277 pixelDetElements = [
'ITkPixelDetectorElementCollection']
278 stripDetElements = [
'ITkStripDetectorElementCollection']
282 if flags.Tracking.ActiveConfig.extension
in [
'ActsLargeRadius',
'ActsValidateLargeRadiusStandalone']:
285 if pixelSeedLabels
is None:
287 pixelDetElements =
None
289 if stripSeedLabels
is None:
291 stripDetElements =
None
294 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
295 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
296 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
297 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
298 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
299 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=pixelRefit, strip=stripRefit))
302 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
306 if flags.Acts.Tracks.doAnalysis:
307 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
308 acc.merge(ActsTrackAnalysisAlgCfg(flags,
309 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
310 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
313 if len(kwargs[
"SeedContainerKeys"]) != len(kwargs[
"DetectorElementsKeys"]):
314 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
316 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
317 seedKey = kwargs[
"SeedContainerKeys"][i]
318 detElKey = kwargs[
"DetectorElementsKeys"][i]
321 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
322 acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
323 name = f
'{seedKey}SeedsToTrackParamsAlg',
324 InputSeedContainerKey = seedKey,
325 DetectorElementsKey = detElKey,
326 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
328 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
329 acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
330 name = f
'{seedKey}ToTrackAnalysisAlg',
331 InputSeedCollection = seedKey,
332 InputTrackParamsCollection = f
'{seedKey}Params',
333 InputDestinyCollection = f
'{seedKey}Destiny'))
336 if flags.Acts.EDM.PersistifyTracks:
337 trackColl = kwargs[
'ACTSTracksLocation']
338 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
340 name = f
'{trackColl}ToXAODConverterAlg',
341 InputActsTracksLocation = trackColl,
342 OutputActsTracksLocation = trackColl))
345 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
346 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
347 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
348 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
349 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
350 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
351 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
352 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
353 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
354 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
355 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
356 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
357 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
358 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
359 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
360 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
361 acc.merge(addToAOD(flags, toAOD))