4 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from ActsConfig.ActsConfigFlags
import SeedingStrategy
8 from ActsInterop
import UnitConstants
18 noStrip: bool =
False) -> list:
20 if flags.Detector.EnableITkPixel
and pixel
is not None:
22 if flags.Detector.EnableITkStrip
and strip
is not None and not noStrip:
24 if flags.Acts.useHGTDClusterInTrackFinding
and hgtd
is not None:
31 strip: list =
None) -> list:
32 keys =
isdet(flags, pixel=pixel, strip=strip)
33 if flags.Acts.useStripSeedsFirst:
38 name: str =
"ActsTrackStatePrinterTool",
39 **kwargs) -> ComponentAccumulator:
42 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
44 pixel=[
'ITkPixelSpacePoints_Cached']
if flags.Acts.useCache
else [
'ITkPixelSpacePoints'],
45 strip=[
'ITkStripSpacePoints_Cached',
'ITkStripOverlapSpacePoints_Cached']
if flags.Acts.useCache
else [
'ITkStripSpacePoints',
'ITkStripOverlapSpacePoints']))
47 if 'TrackingGeometryTool' not in kwargs:
48 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
50 "TrackingGeometryTool",
54 acc.setPrivateTools(CompFactory.ActsTrk.TrackStatePrinterTool(name, **kwargs))
60 name: str =
"ActsTrackFindingAlg",
61 **kwargs) -> ComponentAccumulator:
63 return c
if isinstance(c, list)
else [c]
67 from ActsConfig.ActsGeometryConfig
import ActsVolumeIdToDetectorCollectionMappingAlgCfg
69 if not flags.Acts.useHGTDClusterInTrackFinding:
73 kwargs.setdefault(
'EndOfTheWorldVolumeIds', [2, 25])
76 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
77 def filterCollections(flags, pixel_col, strip_col) :
79 if flags.Detector.GeometryITkPixel:
81 if flags.Detector.GeometryITkStrip:
85 if flags.Detector.EnableITkPixel:
86 from PixelConditionsAlgorithms.ITkPixelConditionsConfig
import ITkPixelDetectorElementStatusAlgCfg
88 if flags.Detector.EnableITkStrip:
89 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig
import ITkStripDetectorElementStatusAlgCfg
91 kwargs.setdefault(
"DetElStatus",filterCollections(flags,
'ITkStripDetectorElementStatus',
'ITkPixelDetectorElementStatus'))
96 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
97 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsStripSeeds"]))
98 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=[
'ITkPixelDetectorElementCollection'], strip=[
'ITkStripDetectorElementCollection']))
99 if flags.Acts.Tracks.doAnalysis:
100 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
102 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"]))
104 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
106 kwargs.setdefault(
"maxPropagationStep", 10000)
107 kwargs.setdefault(
"skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
108 kwargs.setdefault(
"seedMeasOffset", 1)
111 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
113 if (
not flags.Acts.doAmbiguityResolution) :
114 kwargs.setdefault(
"MaximumSharedHits", 3)
115 kwargs.setdefault(
"MaximumIterations", 10000)
116 kwargs.setdefault(
"NMeasurementsMin", 7)
118 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
119 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
120 kwargs.setdefault(
"autoReverseSearch", flags.Acts.autoReverseSearchCKF)
122 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
128 if flags.Detector.GeometryITk:
129 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
131 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
133 kwargs.setdefault(
"chi2CutOff", [50])
134 kwargs.setdefault(
"chi2OutlierCutOff", [100])
136 kwargs.setdefault(
"chi2CutOff", [25])
137 kwargs.setdefault(
"chi2OutlierCutOff", [25])
138 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
139 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
143 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
144 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
146 kwargs.setdefault(
"numMeasurementsCutOff", [1])
150 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
152 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
153 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
155 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
156 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
157 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
158 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
159 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
160 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
161 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
162 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
163 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
169 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts2:
170 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
171 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
173 if 'TrackingGeometryTool' not in kwargs:
174 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
176 "TrackingGeometryTool",
180 if 'ATLASConverterTool' not in kwargs:
181 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
184 if 'TrackParamsEstimationTool' not in kwargs:
185 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
188 if 'ExtrapolationTool' not in kwargs:
189 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
195 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
201 if 'FitterTool' not in kwargs:
202 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
206 ReverseFilteringPt=0,
207 OutlierChi2Cut=
float(
'inf')))
210 if 'PixelCalibrator' not in kwargs:
211 from AthenaConfiguration.Enums
import BeamType
213 if not (flags.Beam.Type
is BeamType.Cosmics):
214 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
215 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
217 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
218 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
223 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
226 if 'StripCalibrator' not in kwargs:
227 from AthenaConfiguration.Enums
import BeamType
228 if not (flags.Beam.Type
is BeamType.Cosmics):
229 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsStripCalibrationToolCfg
230 from ActsConfig.ActsConfigFlags
import StripCalibrationStrategy
232 if flags.Acts.StripCalibrationStrategy
in (StripCalibrationStrategy.DigitalCalibration,
233 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
238 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy
is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
242 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
243 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
244 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
247 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
253 **kwargs) -> ComponentAccumulator:
257 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
258 if not flags.Tracking.ActiveConfig.isSecondaryPass:
260 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
261 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
262 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
264 if flags.Acts.useCache:
265 pixelClusters +=
'_Cached'
266 stripClusters +=
'_Cached'
270 pixelSeedLabels = [
'PPP']
271 stripSeedLabels = [
'SSS']
273 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
274 if flags.Tracking.ActiveConfig.extension
in [
'ActsConversion',
'ActsLargeRadius',
'ActsValidateLargeRadiusStandalone']:
275 pixelSeedLabels =
None
278 stripSeedLabels =
None
281 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
282 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
283 pixelDetElements = [
'ITkPixelDetectorElementCollection']
284 stripDetElements = [
'ITkStripDetectorElementCollection']
285 if pixelSeedLabels
is None:
287 pixelDetElements =
None
288 if stripSeedLabels
is None:
290 stripDetElements =
None
292 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
293 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
294 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
295 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
296 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
299 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
303 if flags.Acts.Tracks.doAnalysis:
304 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
306 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
307 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
310 if len(kwargs[
"SeedContainerKeys"]) != len(kwargs[
"DetectorElementsKeys"]):
311 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
313 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
314 seedKey = kwargs[
"SeedContainerKeys"][i]
315 detElKey = kwargs[
"DetectorElementsKeys"][i]
318 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
320 name = f
'{seedKey}SeedsToTrackParamsAlg',
321 InputSeedContainerKey = seedKey,
322 DetectorElementsKey = detElKey,
323 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
325 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
327 name = f
'{seedKey}ToTrackAnalysisAlg',
328 InputSeedCollection = seedKey,
329 InputTrackParamsCollection = f
'{seedKey}Params',
330 InputDestinyCollection = f
'{seedKey}Destiny'))
333 if flags.Acts.EDM.PersistifyTracks:
334 trackColl = kwargs[
'ACTSTracksLocation']
335 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
337 name = f
'{trackColl}ToXAODConverterAlg',
338 InputActsTracksLocation = trackColl,
339 OutputActsTracksLocation = trackColl))
342 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
343 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
344 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
345 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
346 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
347 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
348 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
349 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
350 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
351 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
352 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
353 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
354 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
355 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
356 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
357 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
364 name: str =
"ActsScoreBasedAmbiguityResolutionAlg",
365 **kwargs) -> ComponentAccumulator:
368 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
369 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
370 kwargs.setdefault(
'MinScore',1.0)
371 kwargs.setdefault(
'MinScoreSharedTracks', 1.0)
372 kwargs.setdefault(
'MaxSharedTracksPerMeasurement', 20)
373 kwargs.setdefault(
'MaxShared', 5)
374 kwargs.setdefault(
'MinUnshared', 5)
375 kwargs.setdefault(
'UseAmbiguityScoring',
True)
376 kwargs.setdefault(
'jsonFileName',
'ActsAmbiguityConfig.json')
378 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
379 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
380 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
384 CompFactory.ActsTrk.ScoreBasedAmbiguityResolutionAlg(name, **kwargs))
389 name: str =
"ActsAmbiguityResolutionAlg",
390 **kwargs) -> ComponentAccumulator:
393 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
394 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
395 kwargs.setdefault(
'MaximumSharedHits', 3)
396 kwargs.setdefault(
'MaximumIterations', 10000)
397 kwargs.setdefault(
'NMeasurementsMin', 7)
399 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
400 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
401 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
405 CompFactory.ActsTrk.AmbiguityResolutionAlg(name, **kwargs))
410 **kwargs) -> ComponentAccumulator:
412 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
413 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
414 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
416 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
418 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
422 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
425 if flags.Acts.Tracks.doAnalysis:
426 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
428 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
429 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
432 if flags.Acts.EDM.PersistifyTracks:
433 trackColl = kwargs[
'ResolvedTracksLocation']
434 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
436 name = f
'{trackColl}ToXAODConverterAlg',
437 InputActsTracksLocation = trackColl,
438 OutputActsTracksLocation = trackColl))
441 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
442 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
443 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
444 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
445 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
446 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
447 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
448 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
449 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
450 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
451 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
452 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
453 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
454 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
455 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
456 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
462 name: str =
"ActsTrackToTrackParticleCnvAlg",
463 **kwargs) -> ComponentAccumulator:
467 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
470 if 'ExtrapolationTool' not in kwargs:
471 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
474 kwargs.setdefault(
'BeamSpotKey',
'BeamSpotData')
475 kwargs.setdefault(
'FirstAndLastParameterOnly',
True)
476 kwargs.setdefault(
'ComputeExpectedLayerPattern',
True)
480 if flags.Detector.EnableITkPixel:
481 det_elements += [
'ITkPixelDetectorElementCollection']
483 if flags.Detector.EnableITkStrip:
484 det_elements += [
'ITkStripDetectorElementCollection']
487 kwargs.setdefault(
'SiDetectorElementCollections',det_elements)
488 kwargs.setdefault(
'SiDetEleCollToMeasurementType',element_types)
489 kwargs.setdefault(
"PerigeeExpression", flags.Tracking.perigeeExpression)
490 kwargs.setdefault(
'VertexContainerKey',
'PrimaryVertices')
492 CompFactory.ActsTrk.TrackToTrackParticleCnvAlg(name, **kwargs))
497 name: str =
"ActsToXAODTrackConverterAlg",
498 **kwargs) -> ComponentAccumulator:
501 kwargs.setdefault(
'InputActsTracksLocation',
'')
502 kwargs.setdefault(
'OutputActsTracksLocation',
'')
504 if 'TrackingGeometryTool' not in kwargs:
505 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
508 acc.addEventAlgo(CompFactory.ActsTrk.ActsToXAODTrackConverterAlg(name, **kwargs))