3 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
4 from AthenaConfiguration.ComponentFactory
import CompFactory
5 from ActsConfig.ActsConfigFlags
import TrackFitterType
6 from ActsInterop
import UnitConstants
7 from typing
import Optional
9 name: str =
"ActsFitterTool",
10 fitterKind: Optional[TrackFitterType] =
None,
11 **kwargs) -> ComponentAccumulator:
14 fitterKind = flags.Acts.trackFitterType
if fitterKind
is None else fitterKind
16 if flags.Acts.fitFromPRD:
17 from TrkConfig.TrkRIO_OnTrackCreatorConfig
import ITkRotCreatorCfg
18 kwargs.setdefault(
'RotCreatorTool', acc.popToolsAndMerge(
ITkRotCreatorCfg(flags)))
23 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
26 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
29 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
33 if fitterKind
is TrackFitterType.KalmanFitter:
34 kwargs.setdefault(
"ReverseFilteringPt", 1.0 * UnitConstants.GeV)
36 if fitterKind
is TrackFitterType.KalmanFitter:
37 acc.setPrivateTools(CompFactory.ActsTrk.KalmanFitterTool(name, **kwargs))
38 elif fitterKind
is TrackFitterType.GaussianSumFitter:
39 if "SummaryTool" not in kwargs:
40 from TrkConfig.TrkTrackSummaryToolConfig
import InDetTrackSummaryToolCfg
43 if 'BoundaryCheckTool' not in kwargs:
44 if flags.Detector.GeometryITk:
45 from InDetConfig.InDetBoundaryCheckToolConfig
import ITkBoundaryCheckToolCfg
48 from InDetConfig.InDetBoundaryCheckToolConfig
import InDetBoundaryCheckToolCfg
50 name = name.replace(
"KalmanFitter",
"GaussianSumFitter")
51 acc.setPrivateTools(CompFactory.ActsTrk.GaussianSumFitterTool(name, **kwargs))
52 elif fitterKind
is TrackFitterType.GlobalChiSquareFitter:
53 name = name.replace(
"KalmanFitter",
"GlobalChiSquareFitter")
54 acc.setPrivateTools(CompFactory.ActsTrk.GlobalChiSquareFitterTool(name, **kwargs))
61 name : str =
"ActsReFitterAlg",
62 **kwargs) -> ComponentAccumulator:
64 kwargs.setdefault(
"ActsFitter", acc.popToolsAndMerge(
ActsFitterCfg(flags)))
65 kwargs.setdefault(
"TrackName",
"ResolvedTracks")
66 kwargs.setdefault(
"NewTrackName",
"Refitted_Tracks")
67 kwargs.setdefault(
"DoReFitFromPRD", flags.Acts.fitFromPRD)
68 acc.addEventAlgo(CompFactory.ActsTrk.ReFitterAlg(name, **kwargs))
70 if flags.Acts.writeTrackCollection:
77 flags = flags.cloneAndReplace(
"Tracking.ActiveConfig",
78 flags.Tracking.ITkPrimaryPassConfig.value)
83 trackName: str =
'ResolvedTracks',
84 newTrackName: str =
'ReFitted_Tracks') -> ComponentAccumulator:
87 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
89 if flags.Tracking.doTruth:
90 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
93 DetailedTruth = f
"{trackName}DetailedTruth",
94 TracksTruth = f
"{trackName}TruthCollection"))
96 Tracks = newTrackName,
97 DetailedTruth = f
"{newTrackName}DetailedTruth",
98 TracksTruth = f
"{newTrackName}TruthCollection"))
101 name = f
"{trackName}TrackParticleCnvAlg",
102 TrackContainerName = trackName,
103 xAODTrackParticlesFromTracksContainerName = f
"{trackName}TrackParticles",
104 TrackTruthContainerName = f
"{trackName}TruthCollection"))
106 name = f
"{newTrackName}TrackParticleCnvAlg",
107 TrackContainerName = newTrackName,
108 xAODTrackParticlesFromTracksContainerName = f
"{newTrackName}TrackParticles",
109 TrackTruthContainerName = f
"{newTrackName}TruthCollection"))
111 from OutputStreamAthenaPool.OutputStreamConfig
import addToESD, addToAOD
112 itemList = [f
"xAOD::TrackParticleContainer#{trackName}TrackParticles",
113 f
"xAOD::TrackParticleAuxContainer#{trackName}TrackParticlesAux.",
114 f
"xAOD::TrackParticleContainer#{newTrackName}TrackParticles",
115 f
"xAOD::TrackParticleAuxContainer#{newTrackName}TrackParticlesAux."]
117 acc.merge(
addToESD(flags, itemList))
118 acc.merge(
addToAOD(flags, itemList))