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 276 of file MuonReconstructionConfig.py.

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

◆ MuonReconstructionCfg()

MuonReconstructionConfig.MuonReconstructionCfg ( flags)

Definition at line 151 of file MuonReconstructionConfig.py.

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

◆ MuonReconstructionConfigTest()

MuonReconstructionConfig.MuonReconstructionConfigTest ( flags = None)

Definition at line 241 of file MuonReconstructionConfig.py.

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

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