ATLAS Offline Software
Loading...
Searching...
No Matches
MuonReconstructionConfig Namespace Reference

Functions

 StandaloneMuonOutputCfg (flags)
 MuonReconstructionCfg (flags)
 MuonReconstructionConfigTest (flags=None)
 MuonNCBTrackCfg (flags, cfg)

Function Documentation

◆ MuonNCBTrackCfg()

MuonReconstructionConfig.MuonNCBTrackCfg ( flags,
cfg )
     This config (made for r24.0 in Nov 2024) is used to:
     1] Switch setup of the segment making in the NSW to loosen constrain on the IP
     2] Adapt and switch off various criteria in TrackSteering/building to be able to reconstruct track from the non-standards (non-collision background) segments 

Definition at line 269 of file MuonReconstructionConfig.py.

269def MuonNCBTrackCfg(flags, cfg):
270 """
271 This config (made for r24.0 in Nov 2024) is used to:
272 1] Switch setup of the segment making in the NSW to loosen constrain on the IP
273 2] Adapt and switch off various criteria in TrackSteering/building to be able to reconstruct track from the non-standards (non-collision background) segments
274 """
275
276 #Adapting NCB alg setup for the standard segment maker alg
277 cfg.getEventAlgo("MuonSegmentMaker").NSWSegmentMaker.SeedMMStereos=False
278 cfg.getEventAlgo("MuonSegmentMaker").NSWSegmentMaker.IPConstraint=False
279
280
281 #Most of the setup below is to suppress background which now we want to reconstruct
282 cfg.getEventAlgo("MuonCreatorAlg").MuonCreatorTool.RequireMSOEforSA=False
283 cfg.getEventAlgo("MuonCreatorAlg").MuonCreatorTool.RequireCaloForSA=False
284
285 cfg.getEventAlgo("MuonCombinedMuonCandidateAlg").MuonCandidateTool.ExtrapolationStrategy=1
286
287 #Loosen up segment criteria
288 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.SegSeedQCut = -2
289 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.Seg2ndQCut = -2
290 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.SegOtherQCut = -2 #by default already -2
291 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.UseTightSegmentMatching = False
292
293 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = False
294 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = False
295 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = False
296 #MuPatTrackBuilder.MuonTrackSteering.MooCandidateMatchingTool
297 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.DoTrackSegmentMatching = False
298 #MuPatTrackBuilder.MuonTrackSteering.MooTrackBuilderTemplate.MooCandidateMatchingTool
299 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackRefinementTool.CandidateMatchingTool.DoTrackSegmentMatching = False
300
301 #MuPatTrackBuilder.MuonTrackSteering.MooCandidateMatchingTool.MuonSegmentMatchingTool
302 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = False
303 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = False
304 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching = False
305
306 #MuPatTrackBuilder.MuonTrackSteering.MooMuonTrackBuilder.MuSt_MooCandidateMatchingTool.MuSt_MuonSegmentMatchingTool
307 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = False
308 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = False
309 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching = False
310
311 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = False
312 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = False
313 cfg.getEventAlgo("MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching = False
314
315
316

◆ MuonReconstructionCfg()

MuonReconstructionConfig.MuonReconstructionCfg ( flags)

Definition at line 148 of file MuonReconstructionConfig.py.

148def MuonReconstructionCfg(flags):
149 # https://gitlab.cern.ch/atlas/athena/blob/master/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py
150 from MuonConfig.MuonPrepDataConvConfig import MuonPrepDataConvCfg
151 from MuonConfig.MuonRecToolsConfig import MuonTrackScoringToolCfg
152 from MuonConfig.MuonGeometryConfig import MuonIdHelperSvcCfg
153 from MuonConfig.MuonRecToolsConfig import MuonEDMHelperSvcCfg
154 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
155 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
156
157 # Many components need these services, so setup once here.
158 result = MuonIdHelperSvcCfg(flags)
159 result.merge(MuonEDMHelperSvcCfg(flags))
160
161 # Now setup reconstruction steps
162 result.merge(MuonPrepDataConvCfg(flags))
163 result.merge(MuonSegmentFindingCfg(flags))
164 result.merge(MuonTrackBuildingCfg(flags))
165 result.merge(MuonStandaloneTrackParticleCnvAlgCfg(flags))
166
167 # FIXME - this is copied from the old configuration, but I'm not sure it really belongs here.
168 # It's probably better to have as part of TrackBuilding, or Segment building...
169 from AthenaConfiguration.Enums import Format
170 if (flags.Input.isMC or flags.Overlay.DataOverlay) and flags.Input.Format!=Format.BS:
171 # filter TrackRecordCollection (true particles in muon spectrometer)
172 if "MuonEntryLayerFilter" not in flags.Input.Collections and \
173 ("MuonEntryLayer" in flags.Input.Collections):
174 result.addEventAlgo(CompFactory.TrackRecordFilter())
175 if "MuonExitLayerFilter" not in flags.Input.Collections and \
176 ("MuonExitLayer" in flags.Input.Collections):
177 result.addEventAlgo(CompFactory.TrackRecordFilter("TrackRecordFilterMuonExitLayer",
178 inputName="MuonExitLayer",
179 outputName="MuonExitLayerFilter"))
180
181 # Now tracks
182 track_cols = ["MuonSpectrometerTracks"]
183 track_colstp = ["MuonSpectrometerTrackParticles"]
184
185 from MuonConfig.MuonTruthAlgsConfig import MuonDetailedTrackTruthMakerCfg
186 result.merge(MuonDetailedTrackTruthMakerCfg(flags, name="MuonStandaloneDetailedTrackTruthMaker",
187 TrackCollectionNames=track_cols))
188
189 if not flags.Muon.scheduleActsReco:
190 for i in range(len(track_cols)):
191 from TrkConfig.TrkTruthAlgsConfig import TrackTruthSelectorCfg, TrackParticleTruthAlgCfg
192 result.merge(TrackTruthSelectorCfg(flags, tracks=track_cols[i]))
193 result.merge(TrackParticleTruthAlgCfg(flags, tracks=track_cols[i],
194 TrackParticleName=track_colstp[i]))
195
196 # Check if we're making PRDs
197 # FIXME - I think we can remove this flag if we shift this to where PRDs are being created. However, this will involve some refactoring, so temporary fix is this.
198 if flags.Muon.makePRDs:
199 if not flags.Muon.usePhaseIIGeoSetup:
200 from MuonConfig.MuonTruthAlgsConfig import MuonTruthAlgsCfg
201 result.merge(MuonTruthAlgsCfg(flags))
202 else:
203 from MuonTruthAlgsR4.MuonTruthAlgsConfig import MuonTruthAlgsCfg
204 result.merge(MuonTruthAlgsCfg(flags))
205
206 if flags.Muon.doMSVertex:
207 msvertexrecotool = CompFactory.Muon.MSVertexRecoTool(
208 MyExtrapolator=result.popToolsAndMerge(
209 AtlasExtrapolatorCfg(flags)),
210 TGCKey='TGC_MeasurementsAllBCs')
211 the_alg = CompFactory.MSVertexRecoAlg(
212 name="MSVertexRecoAlg", MSVertexRecoTool=msvertexrecotool)
213 # Not explicitly configuring MSVertexTrackletTool
214 result.addEventAlgo(the_alg)
215
216 # FIXME - work around to fix unconfigured public MuonTrackScoringTool
217 # It wuould be best to find who is using this tool, and add this configuration there
218 # But AFAICS the only parent is MuonCombinedFitTagTool, and it's private there, so I'm a bit confused.
219 result.addPublicTool(result.popToolsAndMerge(
220 MuonTrackScoringToolCfg(flags)))
221 # Ditto
222 result.addPublicTool(result.popToolsAndMerge(
223 MuonTrackSummaryToolCfg(flags)))
224
225 # Setup output
226 if flags.Output.doWriteESD or flags.Output.doWriteAOD:
227 result.merge(StandaloneMuonOutputCfg(flags))
228 if flags.Muon.scheduleActsReco:
229 from MuonConfig.ReconstructionConfigR4 import MuonReconstructionConfig
230 result.merge(MuonReconstructionConfig(flags))
231 return result
232
233# Run with python -m MuonConfig.MuonReconstructionConfig

◆ MuonReconstructionConfigTest()

MuonReconstructionConfig.MuonReconstructionConfigTest ( flags = None)

Definition at line 234 of file MuonReconstructionConfig.py.

234def MuonReconstructionConfigTest(flags=None):
235
236 if flags is None:
237 from MuonConfig.MuonConfigUtils import SetupMuonStandaloneConfigFlags
238 flags = SetupMuonStandaloneConfigFlags()
239
240 from MuonConfig.MuonConfigUtils import SetupMuonStandaloneCA
241 cfg = SetupMuonStandaloneCA(flags)
242
243 # Run the actual test.
244 acc = MuonReconstructionCfg(flags)
245 cfg.merge(acc)
246
247 from SGComps.AddressRemappingConfig import InputRenameCfg
248 cfg.merge(InputRenameCfg("TrackCollection",
249 "MuonSpectrometerTracks", "MuonSpectrometerTracks_old"))
250
251 cfg.printConfig(withDetails=True)
252 # drop faulty remapping
253 # the evaluation of MuonSegmentNameFixCfg should happen conditionally instead
254 # this is hack that is functioning only because this is top level CA
255 oldRemaps = cfg.getService("AddressRemappingSvc").TypeKeyRenameMaps
256 cfg.getService("AddressRemappingSvc").TypeKeyRenameMaps = [
257 remap for remap in oldRemaps if "Trk::SegmentCollection" not in remap]
258
259 f = open("MuonReconstruction.pkl", "wb")
260 cfg.store(f)
261 f.close()
262
263 from MuonConfig.MuonConfigUtils import executeTest
264 executeTest(cfg)
265
266
267
268

◆ StandaloneMuonOutputCfg()

MuonReconstructionConfig.StandaloneMuonOutputCfg ( flags)

Definition at line 12 of file MuonReconstructionConfig.py.

12def StandaloneMuonOutputCfg(flags):
13 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
14 result = ComponentAccumulator()
15
16 # FIXME! Fix for ATLASRECTS-5151. Remove when better solution found.
17 from TrkEventCnvTools.TrkEventCnvToolsConfig import (
18 TrkEventCnvSuperToolCfg)
19 result.merge(TrkEventCnvSuperToolCfg(flags))
20
21 aod_items = []
22 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
23 aod_items += ["xAOD::MuonSegmentContainer#xAODNSWSegments"]
24 aod_items += ["xAOD::MuonSegmentAuxContainer#xAODNSWSegmentsAux."]
25
26 aod_items += ["xAOD::MuonSegmentContainer#NCB_MuonSegments"]
27 aod_items += ["xAOD::MuonSegmentAuxContainer#NCB_MuonSegmentsAux."]
28
29 if flags.Muon.scheduleActsReco:
30 aod_items += ["xAOD::MuonSegmentContainer#MuonSegmentsFromR4"]
31 aod_items += ["xAOD::MuonSegmentAuxContainer#MuonSegmentsFromR4Aux.-localSegPars.-parentSegment.-localSegCov"]
32
33 # TrackParticles
34 aod_items += ["xAOD::TrackParticleContainer#MuonSpectrometerTrackParticles"]
35 aod_items += ["xAOD::TrackParticleAuxContainer#MuonSpectrometerTrackParticlesAux."]
36 aod_items += ["xAOD::TrackParticleContainer#MuonSpectrometerOnlyTrackParticles"]
37 aod_items += ["xAOD::TrackParticleAuxContainer#MuonSpectrometerOnlyTrackParticlesAux."]
38
39 aod_items += ["xAOD::TrackParticleContainer#MSonlyTracklets"]
40 aod_items += ["xAOD::TrackParticleAuxContainer#MSonlyTrackletsAux."]
41 aod_items += ["xAOD::VertexContainer#MSDisplacedVertex"]
42 aod_items += ["xAOD::VertexAuxContainer#MSDisplacedVertexAux."]
43
44 if flags.Input.isMC or flags.Overlay.DataOverlay:
45 # Truth Particle Container
46 aod_items += ["xAOD::TruthParticleContainer#MuonTruthParticles"]
47 aod_items += ["xAOD::TruthParticleAuxContainer#MuonTruthParticlesAux."]
48
49 # Truth Segment Container
50 aod_items += ["xAOD::MuonSegmentContainer#MuonTruthSegments"]
51 aod_items += ["xAOD::MuonSegmentAuxContainer#MuonTruthSegmentsAux.-localSegPars"]
52
53 # ESD list includes all AOD items
54 esd_items = []
55 esd_items += aod_items
56
57 # PRDs et al
58 if flags.Detector.EnableMM:
59 esd_items += ["Muon::MMPrepDataContainer#MM_Measurements"]
60 esd_items += ["xAOD::NSWMMTPRDOContainer#*", "xAOD::NSWMMTPRDOAuxContainer#*"]
61 if flags.Detector.EnablesTGC:
62 esd_items += ["Muon::sTgcPrepDataContainer#STGC_Measurements"]
63 esd_items += ["Muon::NSW_PadTriggerDataContainer#NSW_PadTrigger_RDO"]
64 esd_items += ["xAOD::NSWTPRDOContainer#*", "xAOD::NSWTPRDOAuxContainer#*"]
65
66
67 if flags.Detector.EnableCSC:
68 esd_items += ["Muon::CscPrepDataContainer#CSC_Clusters"]
69 esd_items += ["Muon::CscStripPrepDataContainer#CSC_Measurements"]
70 esd_items += ["Muon::RpcPrepDataContainer#RPC_Measurements"]
71 esd_items += ["Muon::TgcPrepDataContainer#TGC_MeasurementsAllBCs"]
72 esd_items += ["Muon::MdtPrepDataContainer#MDT_DriftCircles"]
73
74 if flags.Muon.writexAODPRD:
75 esd_items += ["xAOD::MdtDriftCircleContainer#xMdtDriftCircles", "xAOD::MdtDriftCircleAuxContainer#xMdtDriftCirclesAux." ]
76 esd_items += ["xAOD::MdtTwinDriftCircleContainer#xMdtTwinDriftCircles", "xAOD::MdtTwinDriftCircleAuxContainer#xMdtTwinDriftCirclesAux." ]
77 esd_items += ["xAOD::sTgcStripContainer#xAODsTgcStrips", "xAOD::sTgcStripAuxContainer#xAODsTgcStripsAux." ]
78 esd_items += ["xAOD::sTgcPadContainer#xAODsTgcPads", "xAOD::sTgcPadAuxContainer#xAODsTgcPadsAux." ]
79 esd_items += ["xAOD::sTgcWireContainer#xAODsTgcWires", "xAOD::sTgcWireAuxContainer#xAODsTgcWiresAux." ]
80 esd_items += ["xAOD::MMClusterContainer#xAODMMClusters", "xAOD::MMClusterAuxContainer#xAODMMClustersAux." ]
81 esd_items += ["xAOD::TgcStripContainer#xTgcStrips", "xAOD::TgcStripAuxContainer#xTgcStripsAux." ]
82 esd_items += ["xAOD::RpcStripContainer#xRpcStrips", "xAOD::RpcStripAuxContainer#xRpcStripsAux." ]
83 esd_items += ["xAOD::RpcStrip2DContainer#xRpcBILStrips", "xAOD::RpcStrip2DAuxContainer#xRpcBILStripsAux." ]
84 esd_items += ["xAOD::CombinedMuonStripContainer#CombinedMuonPrds", "xAOD::CombinedMuonStripAuxContainer#CombinedMuonPrdsAux."]
85
86
87
88 # trigger related info for offline DQA
89 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollection"]
90 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionPriorBC"]
91 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextBC"]
92 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextNextBC"]
93 esd_items += ["Muon::RpcCoinDataContainer#RPC_triggerHits"]
94 esd_items += ["RpcSectorLogicContainer#RPC_SECTORLOGIC"]
95
96 # trigger info for RPC time calibration
97 if flags.Output.doWriteRDO or flags.Muon.doWriteRpcRDO:
98 esd_items += ["RpcPadContainer#RPCPAD"]
99
100 # Segments
101 esd_items += ["Trk::SegmentCollection#NCB_TrackMuonSegments"]
102
105
106 # Tracks
107 esd_items += ["TrackCollection#MuonSpectrometerTracks"]
108 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
109 esd_items += ["Trk::SegmentCollection#TrackMuonNSWSegments"]
110
111 # Truth
112 if flags.Input.isMC:
113 esd_items += ["TrackRecordCollection#MuonEntryLayerFilter"]
114 esd_items += ["TrackRecordCollection#MuonExitLayerFilter"]
115
116 esd_items += ["PRD_MultiTruthCollection#MDT_TruthMap",
117 "PRD_MultiTruthCollection#RPC_TruthMap", "PRD_MultiTruthCollection#TGC_TruthMap"]
118 if flags.Detector.EnableCSC:
119 esd_items += ["PRD_MultiTruthCollection#CSC_TruthMap"]
120 if flags.Detector.EnablesTGC:
121 esd_items += ["PRD_MultiTruthCollection#STGC_TruthMap"]
122 if flags.Detector.EnableMM:
123 esd_items += ["PRD_MultiTruthCollection#MM_TruthMap"]
124
125 # Track truth
126 esd_items += ["DetailedTrackTruthCollection#MuonSpectrometerTracksTruth"]
127 esd_items += ["TrackTruthCollection#MuonSpectrometerTracksTruth"]
128
129 if flags.Muon.writeSDOs:
130 if flags.Detector.EnableCSC: esd_items+=["CscSimDataCollection#CSC_SDO"]
131 esd_items+=["MuonSimDataCollection#MDT_SDO"]
132 esd_items+=["MuonSimDataCollection#RPC_SDO"]
133 esd_items+=["MuonSimDataCollection#TGC_SDO"]
134 if flags.Detector.EnablesTGC: esd_items+=["MuonSimDataCollection#sTGC_SDO"]
135 if flags.Detector.EnableMM: esd_items+=["MuonSimDataCollection#MM_SDO"]
136
137 if flags.Muon.writexAODPRD:
138 for item in ["MDT_SDO","RPC_SDO","TGC_SDO","MM_SDO","sTGC_SDO"]:
139 esd_items += [f"xAOD::MuonSimHitContainer#{item}", f"xAOD::MuonSimHitAuxContainer#{item}Aux."]
140
141 if flags.Output.doWriteESD:
142 result.merge(OutputStreamCfg(flags, "ESD", esd_items))
143 if flags.Output.doWriteAOD:
144 result.merge(OutputStreamCfg(flags, "AOD", aod_items))
145 return result
146
147