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

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

◆ MuonReconstructionCfg()

MuonReconstructionConfig.MuonReconstructionCfg ( flags)

Definition at line 152 of file MuonReconstructionConfig.py.

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

◆ MuonReconstructionConfigTest()

MuonReconstructionConfig.MuonReconstructionConfigTest ( flags = None)

Definition at line 243 of file MuonReconstructionConfig.py.

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

◆ 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 esd_items += ["xAOD::CombinedMuonStripContainer#CombinedMuonPrds", "xAOD::CombinedMuonStripAuxContainer#CombinedMuonPrdsAux."]
87
88
89
90 # trigger related info for offline DQA
91 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollection"]
92 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionPriorBC"]
93 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextBC"]
94 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextNextBC"]
95 esd_items += ["Muon::RpcCoinDataContainer#RPC_triggerHits"]
96 esd_items += ["RpcSectorLogicContainer#RPC_SECTORLOGIC"]
97
98 # trigger info for RPC time calibration
99 if flags.Output.doWriteRDO or flags.Muon.doWriteRpcRDO:
100 esd_items += ["RpcPadContainer#RPCPAD"]
101
102 # Segments
103 esd_items += ["Trk::SegmentCollection#NCB_TrackMuonSegments"]
104
107
108 # Tracks
109 esd_items += ["TrackCollection#MuonSpectrometerTracks"]
110 if flags.Muon.runCommissioningChain:
111 esd_items += ["TrackCollection#EMEO_MuonSpectrometerTracks"]
112 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
113 esd_items += ["Trk::SegmentCollection#TrackMuonNSWSegments"]
114
115 # Truth
116 if flags.Input.isMC:
117 esd_items += ["TrackRecordCollection#MuonEntryLayerFilter"]
118 esd_items += ["TrackRecordCollection#MuonExitLayerFilter"]
119
120 esd_items += ["PRD_MultiTruthCollection#MDT_TruthMap",
121 "PRD_MultiTruthCollection#RPC_TruthMap", "PRD_MultiTruthCollection#TGC_TruthMap"]
122 if flags.Detector.EnableCSC:
123 esd_items += ["PRD_MultiTruthCollection#CSC_TruthMap"]
124 if flags.Detector.EnablesTGC:
125 esd_items += ["PRD_MultiTruthCollection#STGC_TruthMap"]
126 if flags.Detector.EnableMM:
127 esd_items += ["PRD_MultiTruthCollection#MM_TruthMap"]
128
129 # Track truth
130 esd_items += ["DetailedTrackTruthCollection#MuonSpectrometerTracksTruth"]
131 esd_items += ["TrackTruthCollection#MuonSpectrometerTracksTruth"]
132
133 if flags.Muon.writeSDOs:
134 if flags.Detector.EnableCSC: esd_items+=["CscSimDataCollection#CSC_SDO"]
135 esd_items+=["MuonSimDataCollection#MDT_SDO"]
136 esd_items+=["MuonSimDataCollection#RPC_SDO"]
137 esd_items+=["MuonSimDataCollection#TGC_SDO"]
138 if flags.Detector.EnablesTGC: esd_items+=["MuonSimDataCollection#sTGC_SDO"]
139 if flags.Detector.EnableMM: esd_items+=["MuonSimDataCollection#MM_SDO"]
140
141 if flags.Muon.writexAODPRD:
142 for item in ["MDT_SDO","RPC_SDO","TGC_SDO","MM_SDO","sTGC_SDO"]:
143 esd_items += [f"xAOD::MuonSimHitContainer#{item}", f"xAOD::MuonSimHitAuxContainer#{item}Aux."]
144
145 if flags.Output.doWriteESD:
146 result.merge(OutputStreamCfg(flags, "ESD", esd_items))
147 if flags.Output.doWriteAOD:
148 result.merge(OutputStreamCfg(flags, "AOD", aod_items))
149 return result
150
151