ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrackFittingConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from ActsConfig.ActsConfigFlags import TrackFitterType
6from ActsInterop import UnitConstants
7from typing import Optional
8def ActsFitterCfg(flags,
9 name: str = "ActsFitterTool",
10 fitterKind: Optional[TrackFitterType] = None,
11 **kwargs) -> ComponentAccumulator:
12 acc = ComponentAccumulator()
13
14 fitterKind = flags.Acts.trackFitterType if fitterKind is None else fitterKind
15
16 if flags.Acts.fitFromPRD:
17 if flags.Detector.GeometryITk:
18 from TrkConfig.TrkRIO_OnTrackCreatorConfig import ITkRotCreatorCfg
19 kwargs.setdefault('RotCreatorTool', acc.popToolsAndMerge(ITkRotCreatorCfg(flags)))
20 elif flags.Detector.GeometryID:
21 from TrkConfig.TrkRIO_OnTrackCreatorConfig import InDetRotCreatorCfg
22 kwargs.setdefault('RotCreatorTool', acc.popToolsAndMerge(InDetRotCreatorCfg(flags)))
23
24
25 # Make sure this is set correctly!
26 # /eos/project-a/acts/public/MaterialMaps/ATLAS/material-maps-Pixel-SCT.json
27 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg, ActsGeometryRealmConvTool
28 kwargs.setdefault("TrackingGeometryTool", acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
29 kwargs.setdefault("GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvTool(flags)))
30
31 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
32 kwargs.setdefault("ExtrapolationTool", acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)))
33
34 if "ATLASConverterTool" not in kwargs:
35 from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
36 kwargs.setdefault('ATLASConverterTool', acc.getPrimaryAndMerge(ActsToTrkConverterToolCfg(flags)))
37
38
39 if fitterKind is TrackFitterType.KalmanFitter:
40 kwargs.setdefault("ReverseFilteringPt", 1.0 * UnitConstants.GeV)
41
42 if fitterKind is TrackFitterType.KalmanFitter: # This flag is by default set to KalmanFitter
43 acc.setPrivateTools(CompFactory.ActsTrk.KalmanFitterTool(name, **kwargs))
44 elif fitterKind is TrackFitterType.GaussianSumFitter:
45 if "SummaryTool" not in kwargs:
46 from TrkConfig.TrkTrackSummaryToolConfig import InDetTrackSummaryToolCfg
47 kwargs.setdefault('SummaryTool', acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags)))
48
49 if 'BoundaryCheckTool' not in kwargs:
50 if flags.Detector.GeometryITk:
51 from InDetConfig.InDetBoundaryCheckToolConfig import ITkBoundaryCheckToolCfg
52 kwargs.setdefault("BoundaryCheckTool", acc.popToolsAndMerge(ITkBoundaryCheckToolCfg(flags)))
53 else:
54 from InDetConfig.InDetBoundaryCheckToolConfig import InDetBoundaryCheckToolCfg
55 kwargs.setdefault("BoundaryCheckTool",acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags)))
56 name = name.replace("KalmanFitter", "GaussianSumFitter")
57 acc.setPrivateTools(CompFactory.ActsTrk.GaussianSumFitterTool(name, **kwargs))
58 elif fitterKind is TrackFitterType.GlobalChiSquareFitter:
59 name = name.replace("KalmanFitter", "GlobalChiSquareFitter")
60 acc.setPrivateTools(CompFactory.ActsTrk.GlobalChiSquareFitterTool(name, **kwargs))
61
62 return acc
63
64
65
67 name : str = "ActsReFitterAlg",
68 **kwargs) -> ComponentAccumulator:
69 acc = ComponentAccumulator()
70 kwargs.setdefault("ActsFitter", acc.popToolsAndMerge(ActsFitterCfg(flags)))
71 kwargs.setdefault("TrackName", "ResolvedTracks")
72 kwargs.setdefault("NewTrackName", "Refitted_Tracks")
73 kwargs.setdefault("DoReFitFromPRD", flags.Acts.fitFromPRD)
74 acc.addEventAlgo(CompFactory.ActsTrk.ReFitterAlg(name, **kwargs))
75
76 if flags.Acts.writeTrackCollection:
77 acc.merge(writeAdditionalTracks(flags))
78
79 return acc
80
81def forceITkActsReFitterAlgCfg(flags) -> ComponentAccumulator:
82 #Use this flag in the --postInclude of ActsKfRefiting.sh to fit from the PRD (uncalibrated); Else to fit from the ROT (calibrated), use `(...).ActsReFitterAlgCfg` flag directly
83 flags = flags.cloneAndReplace("Tracking.ActiveConfig",
84 flags.Tracking.ITkPrimaryPassConfig.value)
85 return ActsReFitterAlgCfg(flags)
86
87
89 trackName: str = 'ResolvedTracks',
90 newTrackName: str ='ReFitted_Tracks') -> ComponentAccumulator:
91 acc = ComponentAccumulator()
92
93 from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg
94
95 if flags.Tracking.doTruth:
96 from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
97 acc.merge(ITkTrackTruthCfg(flags,
98 Tracks = trackName,
99 DetailedTruth = f"{trackName}DetailedTruth",
100 TracksTruth = f"{trackName}TruthCollection"))
101 acc.merge(ITkTrackTruthCfg(flags,
102 Tracks = newTrackName,
103 DetailedTruth = f"{newTrackName}DetailedTruth",
104 TracksTruth = f"{newTrackName}TruthCollection"))
105
106 acc.merge(ITkTrackParticleCnvAlgCfg(flags,
107 name = f"{trackName}TrackParticleCnvAlg",
108 TrackContainerName = trackName,
109 xAODTrackParticlesFromTracksContainerName = f"{trackName}TrackParticles",
110 TrackTruthContainerName = f"{trackName}TruthCollection"))
111 acc.merge(ITkTrackParticleCnvAlgCfg(flags,
112 name = f"{newTrackName}TrackParticleCnvAlg",
113 TrackContainerName = newTrackName,
114 xAODTrackParticlesFromTracksContainerName = f"{newTrackName}TrackParticles",
115 TrackTruthContainerName = f"{newTrackName}TruthCollection"))
116
117 from OutputStreamAthenaPool.OutputStreamConfig import addToESD, addToAOD
118 itemList = [f"xAOD::TrackParticleContainer#{trackName}TrackParticles",
119 f"xAOD::TrackParticleAuxContainer#{trackName}TrackParticlesAux.",
120 f"xAOD::TrackParticleContainer#{newTrackName}TrackParticles",
121 f"xAOD::TrackParticleAuxContainer#{newTrackName}TrackParticlesAux."]
122
123 acc.merge(addToESD(flags, itemList))
124 acc.merge(addToAOD(flags, itemList))
125 return acc
126
ComponentAccumulator forceITkActsReFitterAlgCfg(flags)
ComponentAccumulator writeAdditionalTracks(flags, str trackName='ResolvedTracks', str newTrackName='ReFitted_Tracks')
ComponentAccumulator ActsFitterCfg(flags, str name="ActsFitterTool", Optional[TrackFitterType] fitterKind=None, **kwargs)
ComponentAccumulator ActsReFitterAlgCfg(flags, str name="ActsReFitterAlg", **kwargs)