ATLAS Offline Software
Loading...
Searching...
No Matches
MuonPhaseII/MuonPatternRecognition/MuonTruthAlgsR4/python/MuonTruthAlgsConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.AccumulatorCache import AccumulatorCache
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6
7def TruthSegmentMakerCfg(flags, name = "MuonTruthSegmentMaker", useSDO = True, **kwargs):
8 result = ComponentAccumulator()
9 if not flags.Input.isMC:
10 return result
11
12 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
13 result.merge(ActsGeometryContextAlgCfg(flags))
14 containerNames = []
15
16 if flags.Detector.EnableMDT: containerNames+=["MDT_SDO" if useSDO else "xMdtSimHits"]
17 if flags.Detector.EnableRPC: containerNames+=["RPC_SDO" if useSDO else "xRpcSimHits"]
18 if flags.Detector.EnableTGC: containerNames+=["TGC_SDO" if useSDO else "xTgcSimHits"]
19 if flags.Detector.EnableMM: containerNames+=["MM_SDO" if useSDO else "xMmSimHits"]
20 if flags.Detector.EnablesTGC: containerNames+=["sTGC_SDO" if useSDO else "xStgcSimHits"]
21
22 from MuonConfig.MuonCalibrationConfig import MdtCalibDbAlgCfg, NswErrorCalibDbAlgCfg
23 if flags.Detector.EnableMDT:
24 result.merge(MdtCalibDbAlgCfg(flags))
25 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
26 result.merge(NswErrorCalibDbAlgCfg(flags))
27 kwargs.setdefault("SimHitKeys", containerNames)
28 kwargs.setdefault("includePileUpHits", flags.Muon.includePileUpTruth)
29
30 the_alg = CompFactory.MuonR4.TruthSegmentMaker(name, **kwargs)
31 result.addEventAlgo(the_alg, primary = True)
32 return result
33
34def MeasToSimHitAssocAlgCfg(flags, name="MeasToSimHitConvAlg", **kwargs):
35 result = ComponentAccumulator()
36 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
37 result.merge(ActsGeometryContextAlgCfg(flags))
38 the_alg = CompFactory.MuonR4.PrepDataToSimHitAssocAlg(name, **kwargs)
39 result.addEventAlgo(the_alg, primary = True)
40 return result
41
42def TruthHitAssociationCfg(flags, suffix = ""):
43 result = ComponentAccumulator()
44 if not flags.Input.isMC:
45 return result
46 from MuonConfig.MuonDataPrepConfig import PrimaryMeasContNamesCfg
47 for cont_name in PrimaryMeasContNamesCfg(flags):
48 simHits = ""
49 if "xMdt" in cont_name:
50 simHits = "MDT_SDO"
51 elif "xRpc" in cont_name:
52 simHits = "RPC_SDO"
53 elif "xTgc" in cont_name:
54 simHits = "TGC_SDO"
55 elif "MM" in cont_name:
56 simHits = "MM_SDO"
57 else:
58 simHits = "sTGC_SDO"
59 result.merge(MeasToSimHitAssocAlgCfg(flags,
60 name=f"Muon{cont_name}ToSimHitAssoc{suffix}",
61 SimHits = simHits,
62 Measurements=cont_name))
63 result.addEventAlgo(CompFactory.MuonR4.MeasTruthAssocMapProvider(name=f"Muon{cont_name}TruthAssocMap{suffix}",
64 PrdContainer=cont_name,
65 AssociationMap=f"{cont_name}_TruthAssocMap"))
66 return result
67
68def SimHitToTruthPartAlgCfg(flags, useSDO = False):
69 result = ComponentAccumulator()
70 if flags.Detector.GeometryMDT:
71 container = "xMdtSimHits" if not useSDO else "MDT_SDO"
72 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMdtSimHitToTruthParticleAssoc",
73 SimHitContainer = container,
74 HitIdDecoration = "truthMdtHits")
75 result.addEventAlgo(the_alg)
76 if flags.Detector.GeometryRPC:
77 container = "xRpcSimHits" if not useSDO else "RPC_SDO"
78 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonRpcSimHitToTruthParticleAssoc",
79 SimHitContainer = container,
80 HitIdDecoration = "truthRpcHits")
81 result.addEventAlgo(the_alg)
82 if flags.Detector.GeometryTGC:
83 container = "xTgcSimHits" if not useSDO else "TGC_SDO"
84 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonTgcSimHitToTruthParticleAssoc",
85 SimHitContainer = container,
86 HitIdDecoration = "truthTgcHits")
87 result.addEventAlgo(the_alg)
88 if flags.Detector.GeometryMM:
89 container = "xMmSimHits" if not useSDO else "MM_SDO"
90 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMmSimHitToTruthParticleAssoc",
91 SimHitContainer = container,
92 HitIdDecoration = "truthMMHits")
93 result.addEventAlgo(the_alg)
94 if flags.Detector.GeometrysTGC:
95 container = "xStgcSimHits" if not useSDO else "sTGC_SDO"
96 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonsTGCSimHitToTruthParticleAssoc",
97 SimHitContainer = container,
98 HitIdDecoration = "truthStgcHits")
99 result.addEventAlgo(the_alg)
100
101 return result
102
103def TruthHitSummaryAlgCfg(flags, name="MuonTruthHitSummaryAlg", **kwargs):
104 result = ComponentAccumulator()
105 from MuonTrackFindingAlgs.TrackFindingConfig import TrackSummaryToolCfg, TrackSummaryLockCfg
106 kwargs.setdefault("SummaryTool", result.popToolsAndMerge(TrackSummaryToolCfg(flags,
107 fillHoles=False, fillOutliers=False,
108 recomputeSegment =False)))
109
110 kwargs.setdefault("ExtraOutputs", [('xAOD::TruthParticleContainer', 'MuonTruthParticles.truthHitSummary')])
111 result.merge(TrackSummaryLockCfg(flags, inContainer="MuonTruthParticles", fillHoles = False,
112 fillOutliers = False, ExtraInputs = kwargs["ExtraOutputs"]))
113 the_alg = CompFactory.MuonR4.TruthHitSummaryAlg(name, **kwargs)
114 result.addEventAlgo(the_alg, primary = True)
115 return result
116
117def RecoSegmentTruthAssocCfg(flags, **kwargs):
118 result = ComponentAccumulator()
119
120 kwargs.setdefault("SegmentKey", "")
121 from MuonConfig.MuonDataPrepConfig import PrimaryMeasContNamesCfg
122 kwargs.setdefault("PrdContainer", PrimaryMeasContNamesCfg(flags))
123 the_alg = CompFactory.MuonR4.RecoSegToTruthAssocAlg(**kwargs)
124 result.addEventAlgo(the_alg, primary = True)
125 return result
126
127def TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs):
128 result = ComponentAccumulator()
129 hitDecors = []
130 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
131 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
132 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
133 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
134 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
135 kwargs.setdefault("SimHitIds", hitDecors)
136 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
137 kwargs.setdefault("ExtrapolationTool", result.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=100000)))
138 kwargs.setdefault("includePileUpObjs", flags.Muon.includePileUpTruth)
139 the_alg = CompFactory.MuonR4.TruthSegToTruthPartAssocAlg(name, **kwargs)
140 result.addEventAlgo(the_alg, primary = True)
141 return result
142
143def TrackToTruthPartAssocCfg(flags, **kwargs):
144 result = ComponentAccumulator()
145 hitDecors = []
146 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
147 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
148 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
149 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
150 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
151 kwargs.setdefault("SimHitIds", hitDecors)
152 the_alg = CompFactory.MuonR4.TrackToTruthPartAssocAlg(**kwargs)
153 result.addEventAlgo(the_alg, primary = True)
154 return result
155
156
157def MuonTruthSegConnectorAlgCfg(flags, name="MuonTruthSegConnector",**kwargs):
158 result = ComponentAccumulator()
159 the_alg = CompFactory.MuonR4.TruthSegConnectionAlg(name=name, **kwargs)
160 result.addEventAlgo(the_alg, primary = True)
161 return result
162
163
164def MuonToTruthAssocAlgCfg(flags, name="MuonToTruthMatchingAlg", **kwargs):
165 result = ComponentAccumulator()
166 if not flags.Muon.setupTruthAlgorithms:
167 return result
168 the_alg = CompFactory.MuonR4.MuonToTruthAssocAlg(name, **kwargs)
169 result.addEventAlgo(the_alg, primary = True)
170 return result
171
172# Fragment for algs producing (and decorating) truth objects
173def MuonTruthObjCreatorsCfg(flags, useSDO=True):
174 result = ComponentAccumulator()
175 if not flags.Muon.setupTruthAlgorithms:
176 return result
177
178 from MuonConfig.MuonTruthAlgsConfig import TruthMuonMakerAlgCfg
179 result.merge(TruthMuonMakerAlgCfg(flags))
180 result.merge(SimHitToTruthPartAlgCfg(flags, useSDO = useSDO))
181 result.merge(TruthSegmentMakerCfg(flags, useSDO = useSDO))
182 result.merge(TruthSegmentToTruthPartAssocCfg(flags))
183 result.merge(TruthHitSummaryAlgCfg(flags))
184
185 if flags.Muon.includePileUpTruth:
186 result.merge(MuonTruthSegConnectorAlgCfg(flags))
187
188 return result
189
190@AccumulatorCache
191def MuonTruthAlgsCfg(flags, useSDO=True, recoAssoc = True):
192 result = ComponentAccumulator()
193 if not flags.Muon.setupTruthAlgorithms:
194 return result
195
196 result.merge(MuonTruthObjCreatorsCfg(flags, useSDO=useSDO))
197
198 if useSDO and recoAssoc:
199 result.merge(TruthHitAssociationCfg(flags))
200
201 return result
202
204 TrackContainer:str,
205 ParticleContainer:str,
206 isCombined: bool = False):
207 result = ComponentAccumulator()
208 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg, \
209 ActsTrackToTruthAssociationAlgCfg, \
210 ActsTruthParticleHitCountAlgCfg
211 MapSuffix="MS" if not isCombined else "CB"
212 TruthHitCountMap = f"ActsHitCountMap_{MapSuffix}"
213
214 result.merge(ActsTruthParticleHitCountAlgCfg(flags, name=f"MuonActsTruthHitsCounts_{MapSuffix}",
215 TruthParticleHitCountsOut= TruthHitCountMap,
216 doInner = isCombined, doMuon=True))
217
218 result.merge(ActsTrackToTruthAssociationAlgCfg(flags, name =f"MuonTrackTruthMatching_{TrackContainer}",
219 ACTSTracksLocation=TrackContainer,
220 AssociationMapOut=f"{TrackContainer}ToTruthParticles",
221 doInner = isCombined, doMuon = True))
222
223 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags, name=f"MuonTrackParticleToTruth_{ParticleContainer}",
224 TrackParticleContainerName=ParticleContainer,
225 TrackToTruthAssociationMaps =[f"{TrackContainer}ToTruthParticles"],
226 DerivateTruthKey="MuonTruthParticles",
227 TruthParticleHitCounts=TruthHitCountMap))
228 return result
TruthSegmentMakerCfg(flags, name="MuonTruthSegmentMaker", useSDO=True, **kwargs)
TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs)
MuonActsTruthMatchingCfg(flags, str TrackContainer, str ParticleContainer, bool isCombined=False)
TruthMuonMakerAlgCfg(flags, name="TruthMuonMakerAlg", **kwargs)