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 return result
64
65def SimHitToTruthPartAlgCfg(flags, useSDO = False):
66 result = ComponentAccumulator()
67 if flags.Detector.GeometryMDT:
68 container = "xMdtSimHits" if not useSDO else "MDT_SDO"
69 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMdtSimHitToTruthParticleAssoc",
70 SimHitContainer = container,
71 HitIdDecoration = "truthMdtHits")
72 result.addEventAlgo(the_alg)
73 if flags.Detector.GeometryRPC:
74 container = "xRpcSimHits" if not useSDO else "RPC_SDO"
75 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonRpcSimHitToTruthParticleAssoc",
76 SimHitContainer = container,
77 HitIdDecoration = "truthRpcHits")
78 result.addEventAlgo(the_alg)
79 if flags.Detector.GeometryTGC:
80 container = "xTgcSimHits" if not useSDO else "TGC_SDO"
81 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonTgcSimHitToTruthParticleAssoc",
82 SimHitContainer = container,
83 HitIdDecoration = "truthTgcHits")
84 result.addEventAlgo(the_alg)
85 if flags.Detector.GeometryMM:
86 container = "xMmSimHits" if not useSDO else "MM_SDO"
87 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMmSimHitToTruthParticleAssoc",
88 SimHitContainer = container,
89 HitIdDecoration = "truthMMHits")
90 result.addEventAlgo(the_alg)
91 if flags.Detector.GeometrysTGC:
92 container = "xStgcSimHits" if not useSDO else "sTGC_SDO"
93 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonsTGCSimHitToTruthParticleAssoc",
94 SimHitContainer = container,
95 HitIdDecoration = "truthStgcHits")
96 result.addEventAlgo(the_alg)
97
98 return result
99
100def TruthHitSummaryAlgCfg(flags, name="MuonTruthHitSummaryAlg", **kwargs):
101 result = ComponentAccumulator()
102 from MuonTrackFindingAlgs.TrackFindingConfig import TrackSummaryToolCfg, TrackSummaryLockCfg
103 kwargs.setdefault("SummaryTool", result.popToolsAndMerge(TrackSummaryToolCfg(flags,
104 fillHoles=False, fillOutliers=False,
105 recomputeSegment =False)))
106
107 kwargs.setdefault("ExtraOutputs", [('xAOD::TruthParticleContainer', 'MuonTruthParticles.truthHitSummary')])
108 result.merge(TrackSummaryLockCfg(flags, inContainer="MuonTruthParticles", fillHoles = False,
109 fillOutliers = False, ExtraInputs = kwargs["ExtraOutputs"]))
110 the_alg = CompFactory.MuonR4.TruthHitSummaryAlg(name, **kwargs)
111 result.addEventAlgo(the_alg, primary = True)
112 return result
113
114def RecoSegmentTruthAssocCfg(flags, **kwargs):
115 result = ComponentAccumulator()
116
117 kwargs.setdefault("SegmentKey", "")
118 from MuonConfig.MuonDataPrepConfig import PrimaryMeasContNamesCfg
119 kwargs.setdefault("PrdContainer", PrimaryMeasContNamesCfg(flags))
120 the_alg = CompFactory.MuonR4.RecoSegToTruthAssocAlg(**kwargs)
121 result.addEventAlgo(the_alg, primary = True)
122 return result
123
124def TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs):
125 result = ComponentAccumulator()
126 hitDecors = []
127 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
128 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
129 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
130 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
131 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
132 kwargs.setdefault("SimHitIds", hitDecors)
133 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
134 kwargs.setdefault("ExtrapolationTool", result.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=100000)))
135 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
136 kwargs.setdefault("TrackingGeometryTool", result.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
137 kwargs.setdefault("includePileUpObjs", flags.Muon.includePileUpTruth)
138 the_alg = CompFactory.MuonR4.TruthSegToTruthPartAssocAlg(name, **kwargs)
139 result.addEventAlgo(the_alg, primary = True)
140 return result
141
142def TrackToTruthPartAssocCfg(flags, **kwargs):
143 result = ComponentAccumulator()
144 hitDecors = []
145 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
146 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
147 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
148 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
149 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
150 kwargs.setdefault("SimHitIds", hitDecors)
151 the_alg = CompFactory.MuonR4.TrackToTruthPartAssocAlg(**kwargs)
152 result.addEventAlgo(the_alg, primary = True)
153 return result
154
155
156def MuonTruthSegConnectorAlgCfg(flags, name="MuonTruthSegConnector",**kwargs):
157 result = ComponentAccumulator()
158 the_alg = CompFactory.MuonR4.TruthSegConnectionAlg(name=name, **kwargs)
159 result.addEventAlgo(the_alg, primary = True)
160 return result
161
162
163def MuonToTruthAssocAlgCfg(flags, name="MuonToTruthMatchingAlg", **kwargs):
164 result = ComponentAccumulator()
165 if not flags.Muon.setupTruthAlgorithms:
166 return result
167 tracks = []
168 if flags.Reco.EnableTracking: tracks +=["InDetTrackParticles"]
169 kwargs.setdefault("TrackKeys", tracks)
170 the_alg = CompFactory.MuonR4.MuonToTruthAssocAlg(name, **kwargs)
171 result.addEventAlgo(the_alg, primary = True)
172 return result
173
174# Fragment for algs producing (and decorating) truth objects
175def MuonTruthObjCreatorsCfg(flags, useSDO=True):
176 result = ComponentAccumulator()
177 if not flags.Muon.setupTruthAlgorithms:
178 return result
179
180 from MuonConfig.MuonTruthAlgsConfig import TruthMuonMakerAlgCfg
181 result.merge(TruthMuonMakerAlgCfg(flags))
182 result.merge(SimHitToTruthPartAlgCfg(flags, useSDO = useSDO))
183 result.merge(TruthSegmentMakerCfg(flags, useSDO = useSDO))
184 result.merge(TruthSegmentToTruthPartAssocCfg(flags))
185 result.merge(TruthHitSummaryAlgCfg(flags))
186
187 if flags.Muon.includePileUpTruth:
188 result.merge(MuonTruthSegConnectorAlgCfg(flags))
189
190 return result
191
192@AccumulatorCache
193def MuonTruthAlgsCfg(flags, useSDO=True, recoAssoc = True):
194 result = ComponentAccumulator()
195 if not flags.Muon.setupTruthAlgorithms:
196 return result
197
198 result.merge(MuonTruthObjCreatorsCfg(flags, useSDO=useSDO))
199
200 if useSDO and recoAssoc:
201 result.merge(TruthHitAssociationCfg(flags))
202
203 # result.merge(MuonTruthHitCountsAlgCfg(flags))
204
207 return result
TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs)
TruthMuonMakerAlgCfg(flags, name="TruthMuonMakerAlg", **kwargs)
TruthSegmentMakerCfg(flags, name="MuonTruthSegmentMaker", useSDO=True, **kwargs)