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

Functions

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

Function Documentation

◆ MuonNCBTrackCfg()

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

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

◆ MuonReconstructionCfg()

MuonReconstructionCfg ( flags)

Definition at line 128 of file MuonReconstructionConfig.py.

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

◆ MuonReconstructionConfigTest()

MuonReconstructionConfigTest ( flags = None)

Definition at line 218 of file MuonReconstructionConfig.py.

218def MuonReconstructionConfigTest(flags=None):
219
220 if flags is None:
221 from MuonConfig.MuonConfigUtils import SetupMuonStandaloneConfigFlags
222 flags = SetupMuonStandaloneConfigFlags()
223
224 from MuonConfig.MuonConfigUtils import SetupMuonStandaloneCA
225 cfg = SetupMuonStandaloneCA(flags)
226
227 # Run the actual test.
228 acc = MuonReconstructionCfg(flags)
229 cfg.merge(acc)
230
231 from SGComps.AddressRemappingConfig import InputRenameCfg
232 cfg.merge(InputRenameCfg("TrackCollection",
233 "MuonSpectrometerTracks", "MuonSpectrometerTracks_old"))
234
235 cfg.printConfig(withDetails=True)
236 # drop faulty remapping
237 # the evaluation of MuonSegmentNameFixCfg should happen conditionally instead
238 # this is hack that is functioning only because this is top level CA
239 oldRemaps = cfg.getService("AddressRemappingSvc").TypeKeyRenameMaps
240 cfg.getService("AddressRemappingSvc").TypeKeyRenameMaps = [
241 remap for remap in oldRemaps if "Trk::SegmentCollection" not in remap]
242
243 f = open("MuonReconstruction.pkl", "wb")
244 cfg.store(f)
245 f.close()
246
247 from MuonConfig.MuonConfigUtils import executeTest
248 executeTest(cfg)
249
250
251
252

◆ StandaloneMuonOutputCfg()

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 # TrackParticles
30 aod_items += ["xAOD::TrackParticleContainer#MuonSpectrometerTrackParticles"]
31 aod_items += ["xAOD::TrackParticleAuxContainer#MuonSpectrometerTrackParticlesAux."]
32 aod_items += ["xAOD::TrackParticleContainer#MuonSpectrometerOnlyTrackParticles"]
33 aod_items += ["xAOD::TrackParticleAuxContainer#MuonSpectrometerOnlyTrackParticlesAux."]
34
35 aod_items += ["xAOD::TrackParticleContainer#MSonlyTracklets"]
36 aod_items += ["xAOD::TrackParticleAuxContainer#MSonlyTrackletsAux."]
37 aod_items += ["xAOD::VertexContainer#MSDisplacedVertex"]
38 aod_items += ["xAOD::VertexAuxContainer#MSDisplacedVertexAux."]
39
40 if flags.Input.isMC or flags.Overlay.DataOverlay:
41 # Truth Particle Container
42 aod_items += ["xAOD::TruthParticleContainer#MuonTruthParticles"]
43 aod_items += ["xAOD::TruthParticleAuxContainer#MuonTruthParticlesAux."]
44
45 # Truth Segment Container
46 aod_items += ["xAOD::MuonSegmentContainer#MuonTruthSegments"]
47 aod_items += ["xAOD::MuonSegmentAuxContainer#MuonTruthSegmentsAux.-localSegPars"]
48
49 # ESD list includes all AOD items
50 esd_items = []
51 esd_items += aod_items
52
53 # PRDs et al
54 if flags.Detector.EnableMM:
55 esd_items += ["Muon::MMPrepDataContainer#MM_Measurements"]
56 esd_items += ["xAOD::NSWMMTPRDOContainer#*", "xAOD::NSWMMTPRDOAuxContainer#*"]
57 if flags.Detector.EnablesTGC:
58 esd_items += ["Muon::sTgcPrepDataContainer#STGC_Measurements"]
59 esd_items += ["Muon::NSW_PadTriggerDataContainer#NSW_PadTrigger_RDO"]
60 esd_items += ["xAOD::NSWTPRDOContainer#*", "xAOD::NSWTPRDOAuxContainer#*"]
61
62
63 if flags.Detector.EnableCSC:
64 esd_items += ["Muon::CscPrepDataContainer#CSC_Clusters"]
65 esd_items += ["Muon::CscStripPrepDataContainer#CSC_Measurements"]
66 esd_items += ["Muon::RpcPrepDataContainer#RPC_Measurements"]
67 esd_items += ["Muon::TgcPrepDataContainer#TGC_MeasurementsAllBCs"]
68 esd_items += ["Muon::MdtPrepDataContainer#MDT_DriftCircles"]
69
70
71 # trigger related info for offline DQA
72 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollection"]
73 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionPriorBC"]
74 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextBC"]
75 esd_items += ["Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextNextBC"]
76 esd_items += ["Muon::RpcCoinDataContainer#RPC_triggerHits"]
77 esd_items += ["RpcSectorLogicContainer#RPC_SECTORLOGIC"]
78
79 # trigger info for RPC time calibration
80 if flags.Output.doWriteRDO or flags.Muon.doWriteRpcRDO:
81 esd_items += ["RpcPadContainer#RPCPAD"]
82
83 # Segments
84 esd_items += ["Trk::SegmentCollection#NCB_TrackMuonSegments"]
85
88
89 # Tracks
90 esd_items += ["TrackCollection#MuonSpectrometerTracks"]
91 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
92 esd_items += ["Trk::SegmentCollection#TrackMuonNSWSegments"]
93
94 # Truth
95 if flags.Input.isMC:
96 esd_items += ["TrackRecordCollection#MuonEntryLayerFilter"]
97 esd_items += ["TrackRecordCollection#MuonExitLayerFilter"]
98
99 esd_items += ["PRD_MultiTruthCollection#MDT_TruthMap",
100 "PRD_MultiTruthCollection#RPC_TruthMap", "PRD_MultiTruthCollection#TGC_TruthMap"]
101 if flags.Detector.EnableCSC:
102 esd_items += ["PRD_MultiTruthCollection#CSC_TruthMap"]
103 if flags.Detector.EnablesTGC:
104 esd_items += ["PRD_MultiTruthCollection#STGC_TruthMap"]
105 if flags.Detector.EnableMM:
106 esd_items += ["PRD_MultiTruthCollection#MM_TruthMap"]
107
108 # Track truth
109 esd_items += ["DetailedTrackTruthCollection#MuonSpectrometerTracksTruth"]
110 esd_items += ["TrackTruthCollection#MuonSpectrometerTracksTruth"]
111
112 if flags.Muon.writeSDOs:
113 if flags.Detector.EnableCSC: esd_items+=["CscSimDataCollection#CSC_SDO"]
114 esd_items+=["MuonSimDataCollection#MDT_SDO"]
115 esd_items+=["MuonSimDataCollection#RPC_SDO"]
116 esd_items+=["MuonSimDataCollection#TGC_SDO"]
117 if flags.Detector.EnablesTGC: esd_items+=["MuonSimDataCollection#sTGC_SDO"]
118 if flags.Detector.EnableMM: esd_items+=["MuonSimDataCollection#MM_SDO"]
119
120
121 if flags.Output.doWriteESD:
122 result.merge(OutputStreamCfg(flags, "ESD", esd_items))
123 if flags.Output.doWriteAOD:
124 result.merge(OutputStreamCfg(flags, "AOD", aod_items))
125 return result
126
127