ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCombinedRecToolsConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3# Defines the shared tools used in muon identification
4# Based on :
5# https://gitlab.cern.ch/atlas/athena/blob/release/22.0.8/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedTools.py
6from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7from AthenaConfiguration.ComponentFactory import CompFactory
8from AthenaConfiguration.Enums import BeamType
9from AthenaConfiguration.AccumulatorCache import AccumulatorCache
10from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
11from MuonConfig.MuonRecToolsConfig import MuonEDMPrinterToolCfg
12from MuonConfig.MuonTrackBuildingConfig import MuonSegmentRegionRecoveryToolCfg
13
14from TrkConfig.AtlasExtrapolatorToolsConfig import AtlasEnergyLossUpdatorCfg
15from AthenaCommon.SystemOfUnits import GeV, mm
16
17
18def InDetCandidateToolCfg(flags, name="InDetCandidateTool", **kwargs):
19 from InDetConfig.InDetTrackSelectorToolConfig import MuonCombinedInDetDetailedTrackSelectorToolCfg
20 result = MuonCombinedInDetDetailedTrackSelectorToolCfg(flags)
21 kwargs.setdefault("TrackSelector", result.popPrivateTools())
22 result.setPrivateTools(
23 CompFactory.MuonCombined.InDetCandidateTool(name, **kwargs))
24 return result
25
26
27def MuonInDetForwardCandidateToolCfg(flags, name='InDetForwardCandidateTool', **kwargs):
28 from InDetConfig.InDetTrackSelectorToolConfig import MuonCombinedInDetDetailedForwardTrackSelectorToolCfg
29 result = MuonCombinedInDetDetailedForwardTrackSelectorToolCfg(flags)
30 kwargs.setdefault("TrackSelector", result.popPrivateTools())
31 kwargs.setdefault("FlagCandidatesAsSiAssociated", True)
32 result.setPrivateTools(result.popToolsAndMerge(
33 InDetCandidateToolCfg(flags, name, **kwargs)))
34 return result # FIXME - is this and the above, actually used?
35
36
37def MuonCaloEnergyToolCfg(flags, name="MuonCaloEnergyTool", **kwargs):
38 from TrackToCalo.TrackToCaloConfig import ParticleCaloCellAssociationToolCfg, ParticleCaloExtensionToolCfg
39
40 result = ParticleCaloExtensionToolCfg(
41 flags, name='MuonParticleCaloExtensionTool')
42 particle_calo_extension_tool = result.getPrimary()
43
44 particle_calo_cell_association_tool = result.popToolsAndMerge(
45 ParticleCaloCellAssociationToolCfg(flags, name='MuonCaloCellAssociationTool', ParticleCaloExtensionTool=particle_calo_extension_tool))
46
47 from TrkConfig.TrkParticleCreatorConfig import MuonCaloParticleCreatorCfg
48 track_particle_creator = result.popToolsAndMerge(
49 MuonCaloParticleCreatorCfg(flags))
50
51 muonCaloEnergyTool = CompFactory.Rec.MuonCaloEnergyTool(name, ParticleCaloExtensionTool=particle_calo_extension_tool,
52 ParticleCaloCellAssociationTool=particle_calo_cell_association_tool,
53 TrackParticleCreator=track_particle_creator)
54 result.setPrivateTools(muonCaloEnergyTool)
55 return result
56
57
58def MuonMaterialProviderToolCfg(flags, name="MuonTrkMaterialProviderTool", **kwargs):
59 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
60 from TrkConfig.AtlasExtrapolatorToolsConfig import AtlasMultipleScatteringUpdatorCfg
61
62 result = AtlasExtrapolatorCfg(flags)
63 atlas_extrapolator = result.popPrivateTools()
64 kwargs.setdefault("Extrapolator", atlas_extrapolator)
65 result.addPublicTool(atlas_extrapolator)
66 kwargs.setdefault("MuonCaloEnergyTool", result.popToolsAndMerge(
67 MuonCaloEnergyToolCfg(flags, name="MuonCaloEnergyTool")))
68
69 # MuonCaloEnergyTool is actually a private tool
70 calo_meas_tool = result.popToolsAndMerge(MuidCaloEnergyMeasCfg(flags))
71 kwargs.setdefault("CaloMeasTool", calo_meas_tool)
72 result.addPublicTool(calo_meas_tool)
73
74 calo_param_tool = MuidCaloEnergyParam(flags)
75 kwargs.setdefault("CaloParamTool", calo_param_tool)
76 result.addPublicTool(calo_param_tool)
77
78 multiple_scattering_tool = result.popToolsAndMerge(
79 AtlasMultipleScatteringUpdatorCfg(flags))
80 kwargs.setdefault("MultipleScatteringTool", multiple_scattering_tool)
81 result.addPublicTool(multiple_scattering_tool)
82
83 useCaloEnergyMeas = True
84 if flags.Muon.MuonTrigger:
85 useCaloEnergyMeas = False
86 kwargs.setdefault("UseCaloEnergyMeasurement", useCaloEnergyMeas)
87 acc = TrackingGeometryCondAlgCfg(flags)
88 kwargs.setdefault("TrackingGeometryReadKey",
89 acc.getPrimary().TrackingGeometryWriteKey)
90 result.merge(acc)
91
92 energy_loss_updator = result.popToolsAndMerge(
93 AtlasEnergyLossUpdatorCfg(flags))
94 kwargs.setdefault("EnergyLossUpdator",
95 energy_loss_updator) # PublicToolHandle
96 result.addPublicTool(energy_loss_updator)
97
98 track_isolation_tool = result.popToolsAndMerge(
100 kwargs.setdefault("TrackIsolationTool", track_isolation_tool)
101 result.addPublicTool(track_isolation_tool)
102
103 tool = CompFactory.Trk.TrkMaterialProviderTool(name=name, **kwargs)
104 result.setPrivateTools(tool)
105 return result
106
107
108def MuonSegmentHitSummaryToolCfg(flags, name="MuonSegmentHitSummaryTool", **kwargs):
109 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
110 result = ComponentAccumulator()
111 kwargs.setdefault("Printer", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
112 result.merge(MuonGeoModelCfg(flags))
113 kwargs.setdefault("DetectorManagerKey", "MuonDetectorManager")
114 tool = CompFactory.Muon.MuonSegmentHitSummaryTool(name, **kwargs)
115 result.setPrivateTools(tool)
116 return result
117
118
119def MuonSegmentConverterToolCfg(flags, name="MuonSegmentConverterTool", **kwargs):
120 result = MuonSegmentHitSummaryToolCfg(flags)
121 kwargs.setdefault("MuonSegmentHitSummaryTool", result.popPrivateTools())
122 # HitTimingTool does not need specific configuration
123 tool = CompFactory.Muon.MuonSegmentConverterTool(name, **kwargs)
124 result.setPrivateTools(tool)
125 return result
126
127
128def MuonDressingToolCfg(flags, name="MuonDressingTool", **kwargs):
129 from MuonConfig.MuonRecToolsConfig import MuonHitSummaryToolCfg
130 result = MuonHitSummaryToolCfg(flags)
131 kwargs.setdefault("MuonHitSummaryTool", result.popPrivateTools())
132 # HitTimingTool does not need specific configuration
133 tool = CompFactory.MuonCombined.MuonDressingTool(name, **kwargs)
134 result.setPrivateTools(tool)
135 return result
136
137
138def MuonCreatorToolCfg(flags, name="MuonCreatorTool", **kwargs):
139 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
140 result = ComponentAccumulator()
141 # Not explicitly setting up MuonIdHelperSvc, nor MuonEDMHelperSvc (configured in top level reco Cfg)
142 muon_edm_printer = result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags))
143 kwargs.setdefault("Printer", muon_edm_printer)
144
145 kwargs.setdefault("MuonPrinter", CompFactory.Rec.MuonPrintingTool(name='MuonPrintingTool',
146 MuonStationPrinter=muon_edm_printer))
147
148 kwargs.setdefault("ParticleCaloExtensionTool",
149 result.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags,
150 name='MuonParticleCaloExtensionTool',
151 StartFromPerigee=True)))
152
153 from TrkConfig.TrkParticleCreatorConfig import MuonCombinedParticleCreatorCfg
154 kwargs.setdefault("TrackParticleCreator", result.popToolsAndMerge(
155 MuonCombinedParticleCreatorCfg(flags)))
156
157 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg
158 kwargs.setdefault("AmbiguityProcessor", result.popToolsAndMerge(
159 MuonAmbiProcessorCfg(flags)))
160
161 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
162 kwargs.setdefault("Propagator", result.popToolsAndMerge(
163 RungeKuttaPropagatorCfg(flags)))
164 kwargs.setdefault("MuonDressingTool", result.popToolsAndMerge(
165 MuonDressingToolCfg(flags)))
166 kwargs.setdefault("AddMDTExtrasMuGirlLowBeta", flags.MuonCombined.addMDTExtrasMuGirlLowBeta)
167 # Not explicitly setting up MomentumBalanceTool nor ScatteringAngleTool
168 # Not explicitly setting up MeanMDTdADCTool (but probably should FIXME)
169
170 kwargs.setdefault("CaloMaterialProvider", result.popToolsAndMerge(
172
173 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
174 MuonTrackQueryCfg(flags)))
175 # runCommissioningChain
176 if flags.Muon.SAMuonTrigger:
177 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
178 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
179 MuonTrackSummaryToolCfg(flags)))
180 else:
181 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
182 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
183 MuonCombinedTrackSummaryToolCfg(flags)))
184
185 if flags.Muon.MuonTrigger:
186 kwargs.setdefault("MuonSelectionTool", "")
187 kwargs.setdefault("UseCaloCells", False)
188 kwargs.setdefault("CopyUInt8SummaryKeys", [])
189 else:
190 from MuonSelectorTools.MuonSelectorToolsConfig import MuonLoosenedNonCalibratedSelectionToolCfg
191 kwargs.setdefault("MuonSelectionTool", result.popToolsAndMerge(
192 MuonLoosenedNonCalibratedSelectionToolCfg(flags, name='MuonRecoSelTool')))
193 kwargs.setdefault("RequireMSOEforSA", flags.Beam.Type is BeamType.Collisions)
194 kwargs.setdefault("RequireCaloForSA", flags.Beam.Type is BeamType.Collisions)
195
196 tool = CompFactory.MuonCombined.MuonCreatorTool(name, **kwargs)
197 result.setPrivateTools(tool)
198 return result
199
200
201def ExtrapolateMuonToIPToolCfg(flags, name="ExtrapolateMuonToIPTool", **kwargs):
202 result = AtlasExtrapolatorCfg(flags)
203 kwargs.setdefault("Extrapolator", result.popPrivateTools())
204 from TrkConfig.AtlasExtrapolatorConfig import MuonExtrapolatorCfg
205 kwargs.setdefault("MuonExtrapolator", result.popToolsAndMerge(
206 MuonExtrapolatorCfg(flags)))
207
208 if flags.Muon.MuonTrigger:
209 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
210 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
211 MuonTrackSummaryToolCfg(flags)))
212 else:
213 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
214 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
215 MuonCombinedTrackSummaryToolCfg(flags)))
216 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
217 MuonEDMPrinterToolCfg(flags)))
218 result.setPrivateTools(CompFactory.ExtrapolateMuonToIPTool(name, **kwargs))
219 return result
220
221
222def MuonCombinedFitTagToolCfg(flags, name="MuonCombinedFitTagTool", **kwargs):
223 if flags.Muon.MuonTrigger:
224 kwargs.setdefault("VertexContainer", "")
225
226 result = ComponentAccumulator()
227 kwargs.setdefault("TrackBuilder", result.popToolsAndMerge(
229
230 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
231 MuonEDMPrinterToolCfg(flags)))
232
233 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
234 MuonTrackQueryCfg(flags)))
235 kwargs.setdefault("MatchQuality", result.popToolsAndMerge(
236 MuonMatchQualityCfg(flags)))
237
238 from MuonConfig.MuonRecToolsConfig import MuonTrackScoringToolCfg
239 kwargs.setdefault("TrackScoringTool", result.popToolsAndMerge(
240 MuonTrackScoringToolCfg(flags)))
241
242
243 #When both solenoid and toriod are off (e.g. cosmic runs) this cut is likely to kill the combined muon -> loosen up for cosmics
244 if flags.Beam.Type is BeamType.Cosmics and (not flags.BField.endcapToroidOn and not flags.BField.solenoidOn):
245 kwargs.setdefault("MomentumBalanceCut", 1e6)
246
247 tool = CompFactory.MuonCombined.MuonCombinedFitTagTool(name, **kwargs)
248 result.setPrivateTools(tool)
249 return result
250
251def MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool", **kwargs):
252
253 result = ComponentAccumulator()
254 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
255 MuonEDMPrinterToolCfg(flags)))
256 kwargs.setdefault("TagTool", result.popToolsAndMerge(
258 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(
259 AtlasExtrapolatorCfg(flags)))
260
261 tool = CompFactory.MuonCombined.MuonCombinedStacoTagTool(name, **kwargs)
262 result.setPrivateTools(tool)
263 return result
264
265# From Combined fit tools.py
266
267
268def MuidMaterialAllocatorCfg(flags, name='MuidMaterialAllocator', **kwargs):
269 from TrkConfig.TrkExSTEP_PropagatorConfig import AtlasSTEP_PropagatorCfg
270 kwargs.setdefault("AggregateMaterial", True)
271 kwargs.setdefault("AllowReordering", False)
272
273 result = AtlasExtrapolatorCfg(flags)
274 kwargs.setdefault("Extrapolator", result.popPrivateTools())
275 # Intersector (a RungeKuttaIntersector) does not require explicit configuration
276 kwargs.setdefault("STEP_Propagator", result.popToolsAndMerge(
277 AtlasSTEP_PropagatorCfg(flags, name="AtlasSTEP_Propagator")))
278 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
279 result.merge(TrackingGeometryCondAlgCfg(flags))
280 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
281
282 tool = CompFactory.Trk.MaterialAllocator(name, **kwargs)
283 result.setPrivateTools(tool)
284 return result
285
286# and the fitter
287
288
289def iPatFitterCfg(flags, name='iPatFitter', **kwargs):
290 from TrkConfig.SolenoidalIntersectorConfig import SolenoidalIntersectorCfg
291 from TrkConfig.TrkExSTEP_PropagatorConfig import AtlasSTEP_PropagatorCfg
292
293 kwargs.setdefault("AggregateMaterial", True)
294 kwargs.setdefault("FullCombinedFit", True)
295 result = MuidMaterialAllocatorCfg(flags)
296 kwargs.setdefault("MaterialAllocator", result.popPrivateTools())
297 # RungeKuttaIntersector needs a AtlasFieldCacheCondObj, but it's impossible to get here without that being configured already so let's be lazy
298 # It does not otherwise require explicit configuration
299 kwargs.setdefault('SolenoidalIntersector', result.popToolsAndMerge(
300 SolenoidalIntersectorCfg(flags)))
301 kwargs.setdefault('Propagator', result.popToolsAndMerge(
302 AtlasSTEP_PropagatorCfg(flags)))
303 # StraightLineIntersector does not need explicit configuration
304 if flags.Muon.MuonTrigger:
305 kwargs.setdefault("MaxIterations", 15)
306 if flags.Muon.SAMuonTrigger:
307 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
308 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
309 MuonTrackSummaryToolCfg(flags)))
310 else:
311 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
312 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
313 MuonCombinedTrackSummaryToolCfg(flags)))
314
315 tool = CompFactory.Trk.iPatFitter(name, **kwargs)
316 result.setPrivateTools(tool)
317 return result
318
319
320def iPatSLFitterCfg(flags, name='iPatSLFitter', **kwargs):
321 kwargs.setdefault("LineFit", True)
322 kwargs.setdefault("LineMomentum", flags.Muon.straightLineFitMomentum)
323 return iPatFitterCfg(flags, name, **kwargs)
324
325# track cleaner configured to use the same fitter
326
327
328def MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs):
329 from MuonConfig.MuonRecToolsConfig import MuonTrackCleanerCfg
330 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
331 if flags.Beam.Type is BeamType.Cosmics:
332 kwargs.setdefault("PullCut", 5.0)
333 kwargs.setdefault("PullCutPhi", 10.0)
334 else:
335 kwargs.setdefault("PullCut", 4.0)
336 kwargs.setdefault("PullCutPhi", 4.0)
337 result = ComponentAccumulator()
338 if flags.Muon.MuonTrigger:
339 kwargs.setdefault("Iterate", False)
340 kwargs.setdefault("RecoverOutliers", False)
341 kwargs.setdefault("Fitter", result.popToolsAndMerge(
342 iPatFitterCfg(flags, 'iPatFitterClean', MaxIterations=4)))
343 else:
344 kwargs.setdefault(
345 "Fitter", result.popToolsAndMerge(iPatFitterCfg(flags)))
346 kwargs.setdefault(
347 "SLFitter", result.popToolsAndMerge(iPatSLFitterCfg(flags)))
348
349 # For these following items, set back to default, because overridden in MuonTrackCleaner and we don't want overrides.
350 # ALL properties that are set in old-style are: PullCut, PullCutPhi, Iterate, RecoverOutliers, Fitter and iPatSLFitter
351 # However since there are defaults we still DO need to explicitly set, it's still probably easier to use MuonTrackCleanerCfg
352 kwargs.setdefault("MaxAvePullSumPerChamber", 3.5)
353 kwargs.setdefault("Chi2Cut", 100.0)
354 kwargs.setdefault("Extrapolator", result.getPrimaryAndMerge(
355 AtlasExtrapolatorCfg(flags)))
356 result.setPrivateTools(result.popToolsAndMerge(
357 MuonTrackCleanerCfg(flags, name, **kwargs)))
358 return result
359
360
361def MuidCaloEnergyParam(flags, name='MuidCaloEnergyParam', **kwargs):
362 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
363 return CompFactory.Rec.MuidCaloEnergyParam(name, **kwargs)
364
365
366def MuidCaloEnergyMeasCfg(flags, name='MuidCaloEnergyMeas', **kwargs):
367 result = ComponentAccumulator()
368 muidcaloenergyparam = MuidCaloEnergyParam(flags)
369 kwargs.setdefault("CaloParamTool", muidcaloenergyparam)
370 # FIXME! Need to setup the folders for CaloNoiseKey (which is why this needs a CA)
371 # Not sure how to do : if flags.haveRIO.Calo_on() but TBH, if the cells aren't there it will abort anyway
372 kwargs.setdefault("CellContainerLocation", "AllCalo")
373 kwargs.setdefault("NoiseThresInSigmas", 4.)
374 tool = CompFactory.Rec.MuidCaloEnergyMeas(name, **kwargs)
375 result.setPrivateTools(tool)
376 return result
377
378
379def MuidCaloEnergyToolParamCfg(flags, name='MuidCaloEnergyToolParam', **kwargs):
380 # Some duplication with MuidCaloEnergyToolCfg but probably safer like this, since
381 # we don't want to set e.g. MinFinalEnergy here
382 result = MuidCaloEnergyMeasCfg(flags)
383 kwargs.setdefault("CaloMeasTool", result.popPrivateTools())
384 kwargs.setdefault("EnergyLossMeasurement", False)
385
386 kwargs.setdefault("CaloParamTool", MuidCaloEnergyParam(flags))
387 if flags.Beam.Type is BeamType.Cosmics:
388 kwargs.setdefault("Cosmics", True)
389 kwargs.setdefault("TrackIsolationTool", result.popToolsAndMerge(
390 MuidTrackIsolationCfg(flags)))
391
392 result.setPrivateTools(CompFactory.Rec.MuidCaloEnergyTool(name, **kwargs))
393 return result
394
395
396def MuidTrackIsolationCfg(flags, name='MuidTrackIsolation', **kwargs):
397 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
398 # RungeKuttaIntersector requires the magnetic field conditions
399 result = AtlasFieldCacheCondAlgCfg(flags)
400 tool = CompFactory.Rec.MuidTrackIsolation(name, **kwargs)
401 result.setPrivateTools(tool)
402 return result
403
404
405def MuidCaloEnergyToolCfg(flags, name='MuidCaloEnergyTool', **kwargs):
406 result = MuidCaloEnergyMeasCfg(flags)
407 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
408 result.merge(LArGMCfg(flags))
409 kwargs.setdefault("CaloMeasTool", result.popPrivateTools())
410 kwargs.setdefault("CaloParamTool", MuidCaloEnergyParam(flags))
411 kwargs.setdefault("MinFinalEnergy", 1.0*GeV)
412 kwargs.setdefault("MinMuonPt", 10.0*GeV)
413 kwargs.setdefault("MopParametrization", True)
414 if flags.Muon.MuonTrigger:
415 kwargs.setdefault("EnergyLossMeasurement", False)
416 kwargs.setdefault("TrackIsolation", False)
417 else:
418 kwargs.setdefault("EnergyLossMeasurement", True)
419 kwargs.setdefault("TrackIsolation", True)
420
421 kwargs.setdefault("TrackIsolationTool", result.popToolsAndMerge(
422 MuidTrackIsolationCfg(flags)))
423 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
424 result.setPrivateTools(CompFactory.Rec.MuidCaloEnergyTool(name, **kwargs))
425 return result
426
427
428def MuidCaloTrackStateOnSurfaceCfg(flags, name='MuidCaloTrackStateOnSurface', **kwargs):
429 result = ComponentAccumulator()
430 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
431 kwargs.setdefault("Propagator", result.popToolsAndMerge(
432 RungeKuttaPropagatorCfg(flags)))
433 kwargs.setdefault("MinRemainingEnergy", 0.2*GeV)
434 kwargs.setdefault("ParamPtCut", 3.0*GeV)
435 kwargs.setdefault("CaloEnergyDeposit", result.popToolsAndMerge(
436 MuidCaloEnergyToolCfg(flags)))
437 kwargs.setdefault("CaloEnergyParam", result.popToolsAndMerge(
439 # I don't think CaloMaterialParam i.e. MuidCaloMaterialParam needs explicit configuration
440 # Ditto for IntersectorWrapper, since it just uses RKIntersector which doesn't
441 tool = CompFactory.Rec.MuidCaloTrackStateOnSurface(name, **kwargs)
442 result.setPrivateTools(tool)
443 return result
444
445
446def MuidCaloTrackStateOnSurfaceParamCfg(flags, name='MuidCaloTrackStateOnSurfaceParam', **kwargs):
447 result = ComponentAccumulator()
448 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
449 kwargs.setdefault("Propagator", result.popToolsAndMerge(
450 RungeKuttaPropagatorCfg(flags)))
451 kwargs.setdefault("MinRemainingEnergy", 0.2*GeV)
452 kwargs.setdefault("ParamPtCut", 3.0*GeV)
453 kwargs.setdefault("CaloEnergyDeposit", MuidCaloEnergyParam(flags))
454 kwargs.setdefault("CaloEnergyParam", MuidCaloEnergyParam(flags))
455 tool = CompFactory.Rec.MuidCaloTrackStateOnSurface(name, **kwargs)
456 result.setPrivateTools(tool)
457 return result
458
459
460def MuidMaterialEffectsOnTrackProviderCfg(flags, name='MuidMaterialEffectsOnTrackProvider', **kwargs):
461 result = MuidCaloTrackStateOnSurfaceCfg(flags)
462 kwargs.setdefault("TSOSTool", result.popPrivateTools())
464 kwargs.setdefault("TSOSToolParam", acc.popPrivateTools())
465 result.merge(acc)
466 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
467 tool = CompFactory.Rec.MuidMaterialEffectsOnTrackProvider(name, **kwargs)
468 result.setPrivateTools(tool)
469 return result
470
471
472def MuidMaterialEffectsOnTrackProviderParamCfg(flags, name='MuidMaterialEffectsOnTrackProviderParam', **kwargs):
474 muidtsosparam = result.popPrivateTools()
475 kwargs.setdefault("TSOSTool", muidtsosparam)
476 kwargs.setdefault("TSOSToolParam", muidtsosparam)
477 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
478 tool = CompFactory.Rec.MuidMaterialEffectsOnTrackProvider(name, **kwargs)
479 result.setPrivateTools(tool)
480 return result
481
482
483def MuonTrackQueryCfg(flags, name="MuonTrackQuery", **kwargs):
484 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg
485 result = MdtDriftCircleOnTrackCreatorCfg(flags)
486 kwargs.setdefault("MdtRotCreator", result.popPrivateTools())
487 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
488 result.merge(TrackingGeometryCondAlgCfg(flags))
489 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
490
491 acc = iPatFitterCfg(flags)
492 kwargs.setdefault("Fitter", acc.popPrivateTools())
493 result.merge(acc)
494
495 tool = CompFactory.Rec.MuonTrackQuery(name, **kwargs)
496 result.setPrivateTools(tool)
497 return result
498
499def MuidErrorOptimisationToolCfg(flags, name='MuidErrorOptimisationTool', **kwargs):
500 from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryHelperToolCfg, MuonRefitToolCfg
501 result = ComponentAccumulator()
502 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
503 MuonTrackSummaryHelperToolCfg(flags)))
504 useAlignErrs = True
505 if flags.IOVDb.DatabaseInstance == 'COMP200' or \
506 'HLT' in flags.IOVDb.GlobalTag or flags.Common.isOnline or flags.Muon.MuonTrigger:
507 useAlignErrs = False
508 kwargs.setdefault("RefitTool", result.popToolsAndMerge(MuonRefitToolCfg(
509 flags, name="MuidRefitTool", AlignmentErrors=useAlignErrs,
510 Fitter=result.popToolsAndMerge(iPatFitterCfg(flags)))))
511 tool = CompFactory.Muon.MuonErrorOptimisationTool(name, **kwargs)
512 result.setPrivateTools(tool)
513 return result
514
515
516def MuonAlignmentUncertToolThetaCfg(flags, name="MuonAlignmentUncertToolTheta", **kwargs):
517 result = ComponentAccumulator()
518 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
519 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
520 kwargs.setdefault("HistoName", "ThetaScattering")
521 kwargs.setdefault(
522 "InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root")
523 tool = CompFactory.Muon.MuonAlignmentUncertTool(name, **kwargs)
524 result.addPublicTool(tool, primary = True)
525 return result
526
527
528def MuonAlignmentUncertToolPhiCfg(flags, name="MuonAlignmentUncertToolPhi", **kwargs):
529 result = ComponentAccumulator()
530 kwargs.setdefault("HistoName", "PhiScattering")
531 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
532 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
533 kwargs.setdefault(
534 "InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root")
535 tool = CompFactory.Muon.MuonAlignmentUncertTool(name, **kwargs)
536 result.addPublicTool(tool, primary=True)
537 return result
538
539
540@AccumulatorCache
541def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs):
542 from AthenaCommon.SystemOfUnits import meter
543 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import CscClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg, MuonClusterOnTrackCreatorCfg
544 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
545
546 result = ComponentAccumulator()
547
548 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
549 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
550
551 kwargs.setdefault("CaloEnergyParam", result.popToolsAndMerge(
553 kwargs.setdefault("CaloTSOS", result.popToolsAndMerge(
555 kwargs.setdefault("Cleaner", result.popToolsAndMerge(
556 MuidTrackCleanerCfg(flags)))
557 result.merge(MuonAlignmentUncertToolPhiCfg(flags))
558 kwargs.setdefault("AlignmentUncertToolPhi",
559 result.getPublicTool('MuonAlignmentUncertToolPhi'))
560 result.merge(MuonAlignmentUncertToolThetaCfg(flags))
561 kwargs.setdefault("AlignmentUncertToolTheta",
562 result.getPublicTool('MuonAlignmentUncertToolTheta'))
563
564 if flags.Detector.GeometryCSC and not flags.Muon.MuonTrigger:
565 kwargs.setdefault("CscRotCreator", result.popToolsAndMerge(
566 CscClusterOnTrackCreatorCfg(flags)))
567 else:
568 kwargs.setdefault("CscRotCreator", "")
569
570 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(
571 AtlasExtrapolatorCfg(flags)))
572 kwargs.setdefault(
573 "Fitter", result.popToolsAndMerge(iPatFitterCfg(flags)))
574 kwargs.setdefault(
575 "SLFitter", result.popToolsAndMerge(iPatSLFitterCfg(flags)))
576 kwargs.setdefault("MaterialAllocator", result.popToolsAndMerge(
578 kwargs.setdefault("MdtRotCreator", result.popToolsAndMerge(
579 MdtDriftCircleOnTrackCreatorCfg(flags)))
580 kwargs.setdefault("MuonRotCreator", result.popToolsAndMerge(
581 MuonClusterOnTrackCreatorCfg(flags)))
582
583 # Tracking Geometry
584 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import (
585 TrackingGeometryCondAlgCfg)
586
587 geom_cond_key = result.getPrimaryAndMerge(
588 TrackingGeometryCondAlgCfg(flags)).TrackingGeometryWriteKey
589 kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)
590
591 kwargs.setdefault("CleanCombined", True)
592 kwargs.setdefault("CleanStandalone", True)
593 kwargs.setdefault("BadFitChi2", 2.5)
594 kwargs.setdefault("LargeMomentumError", 0.5)
595 kwargs.setdefault("LineMomentum", flags.Muon.straightLineFitMomentum)
596 kwargs.setdefault("LowMomentum", 10.*GeV)
597 kwargs.setdefault("MinEnergy", 0.3*GeV)
598 kwargs.setdefault("PerigeeAtSpectrometerEntrance", False)
599 kwargs.setdefault("ReallocateMaterial", False)
600 kwargs.setdefault("Vertex2DSigmaRPhi", 100.*mm)
601 kwargs.setdefault("Vertex3DSigmaRPhi", 6.*mm)
602 kwargs.setdefault("Vertex3DSigmaZ", 60.*mm)
603 kwargs.setdefault("UseCaloTG", True)
604
605 kwargs.setdefault("CaloMaterialProvider", result.popToolsAndMerge(
607 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
608 MuonTrackQueryCfg(flags)))
609
610 if flags.Muon.SAMuonTrigger:
611 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
612 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
613 MuonTrackSummaryToolCfg(flags)))
614 else:
615 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
616 MuonCombinedTrackSummaryToolCfg(flags)))
617
618 from TrkConfig.TrkExRungeKuttaPropagatorConfig import MuonCombinedPropagatorCfg, RungeKuttaPropagatorCfg
619 propagator = None
620 if flags.Muon.MuonTrigger:
621 propagator = result.popToolsAndMerge(RungeKuttaPropagatorCfg(flags))
622 else:
623 propagator = result.popToolsAndMerge(MuonCombinedPropagatorCfg(flags))
624 kwargs.setdefault("Propagator", propagator)
625 kwargs.setdefault("SLPropagator", propagator)
626 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
627 MuonEDMPrinterToolCfg(flags)))
628
629 if flags.Beam.Type is BeamType.Cosmics:
630 kwargs.setdefault("MdtRotCreator", "")
631 kwargs.setdefault("MuonRotCreator", "")
632 kwargs.setdefault("LowMomentum", 1.5*GeV)
633 kwargs.setdefault("ReallocateMaterial", False)
634 kwargs.setdefault("Vertex2DSigmaRPhi", 100.*mm)
635 kwargs.setdefault("Vertex3DSigmaRPhi", 100.*mm)
636 kwargs.setdefault("Vertex3DSigmaZ", 1.*meter)
637
638 # configure tools for data reprocessing
639 if flags.Muon.enableErrorTuning and 'MuonErrorOptimizer' not in kwargs:
640 erroropt = result.popToolsAndMerge(MuidErrorOptimisationToolCfg(
641 flags, name="MuidErrorOptimisationTool", PrepareForFit=False, RecreateStartingParameters=False))
642 kwargs.setdefault("MuonErrorOptimizer", erroropt)
643 else:
644 kwargs.setdefault("MuonErrorOptimizer", "")
645
646 if flags.Muon.MuonTrigger:
647 kwargs.setdefault("MuonHoleRecovery", "")
648 else:
649 if "MuonHoleRecovery" not in kwargs:
650 # Meeded to resolve circular dependency since MuonSegmentRegionRecoveryToolCfg calls CombinedMuonTrackBuilderCfg (i.e. this)!
651 muon_combined_track_summary = result.popToolsAndMerge(
652 MuonCombinedTrackSummaryToolCfg(flags))
653 acc = MuonSegmentRegionRecoveryToolCfg(
654 flags, name="MuidSegmentRegionRecoveryTool", TrackSummaryTool=muon_combined_track_summary)
655 kwargs.setdefault("MuonHoleRecovery", acc.popPrivateTools())
656 result.merge(acc)
657
658 if flags.Muon.doSegmentT0Fit:
659 kwargs.setdefault("MdtRotCreator", "")
660 tool = CompFactory.Rec.CombinedMuonTrackBuilder(name, **kwargs)
661 result.setPrivateTools(tool)
662 return result
663
664
665def CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', **kwargs):
666 # In the old configuration we had duplication between CombinedMuonTrackBuilder and CombinedMuonTrackBuilderFit
667 # Here we just call the Combined
668 from MuonConfig.MuonTrackBuildingConfig import MuonChamberHoleRecoveryToolCfg
669 result = ComponentAccumulator()
670 kwargs.setdefault("PerigeeAtSpectrometerEntrance", True)
671 kwargs.setdefault("UseCaloTG", False)
672 if flags.Muon.MuonTrigger:
673 kwargs.setdefault("MuonErrorOptimizer", "")
674 else:
675 kwargs.setdefault("MuonErrorOptimizer", result.popToolsAndMerge(
676 MuidErrorOptimisationToolCfg(flags, PrepareForFit=False, RecreateStartingParameters=False)))
677 kwargs.setdefault("MuonHoleRecovery", result.popToolsAndMerge(
678 MuonChamberHoleRecoveryToolCfg(flags)))
679
680 tool = result.popToolsAndMerge(CombinedMuonTrackBuilderCfg(
681 flags, name, **kwargs)) # Need to reset this to be the primary tool
682 result.setPrivateTools(tool)
683 return result
684
685def MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs):
686 result = CombinedMuonTagTestToolCfg(flags)
687 kwargs.setdefault("TagTool", result.popPrivateTools())
688 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
689 MuonTrackQueryCfg(flags)))
690
691 tool = CompFactory.Rec.MuonMatchQuality(name, **kwargs)
692 result.setPrivateTools(tool)
693 return result
694
695
696def MuidMuonRecoveryCfg(flags, name='MuidMuonRecovery', **kwargs):
697 result = AtlasExtrapolatorCfg(flags)
698 kwargs.setdefault("Extrapolator", result.popPrivateTools())
699 kwargs.setdefault("TrackBuilder", result.popToolsAndMerge(
701
702 if "ResidualPullCalculator" not in kwargs:
703 from TrkConfig.TrkResidualPullCalculatorConfig import (
704 ResidualPullCalculatorCfg)
705 kwargs.setdefault("ResidualPullCalculator", result.popToolsAndMerge(
706 ResidualPullCalculatorCfg(flags)))
707
708 tool = CompFactory.Rec.MuidMuonRecovery(name, **kwargs)
709 result.setPrivateTools(tool)
710 return result
711
712
713def CombinedMuonTagTestToolCfg(flags, name='CombinedMuonTagTestTool', **kwargs):
714 result = AtlasExtrapolatorCfg(flags)
715 kwargs.setdefault("ExtrapolatorTool", result.popPrivateTools())
716 kwargs.setdefault("Chi2Cut", 50000.)
717 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
718 result.merge(TrackingGeometryCondAlgCfg(flags))
719 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
720 tool = CompFactory.MuonCombined.MuonTrackTagTestTool(name, **kwargs)
721 result.setPrivateTools(tool)
722 return result
723
724# From MuonCaloTagTool.py
725
726
727def TrackDepositInCaloToolCfg(flags, name='TrackDepositInCaloTool', **kwargs):
728 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg, ParticleCaloCellAssociationToolCfg
729 result = ComponentAccumulator()
730 kwargs.setdefault("ParticleCaloExtensionTool",
731 result.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags)))
732 kwargs.setdefault("ExtrapolatorHandle", result.popToolsAndMerge(
733 AtlasExtrapolatorCfg(flags)))
734 kwargs.setdefault("ParticleCaloCellAssociationTool",
735 result.popToolsAndMerge(ParticleCaloCellAssociationToolCfg(flags, name="Rec::ParticleCaloCellAssociationTool")))
736 tool = CompFactory.TrackDepositInCaloTool(name, **kwargs)
737 result.setPrivateTools(tool)
738 return result
739
740
741
742def CaloMuonScoreToolCfg(flags, name='CaloMuonScoreTool', **kwargs):
743 from TrackToCalo.TrackToCaloConfig import ParticleCaloCellAssociationToolCfg
744 result = ComponentAccumulator()
745 kwargs.setdefault("ParticleCaloCellAssociationTool",
746 result.popToolsAndMerge(ParticleCaloCellAssociationToolCfg(flags)))
747 tool = CompFactory.CaloMuonScoreTool(name, **kwargs)
748 result.setPrivateTools(tool)
749 return result
750
751
752def CaloMuonTagCfg(flags, name="CaloMuonTag", **kwargs):
753 result = ComponentAccumulator()
754 the_tool = CompFactory.CaloMuonTag(name, **kwargs)
755 result.setPrivateTools(the_tool)
756 return result
757
758
759def MuonCaloTagToolCfg(flags, name='MuonCaloTagTool', **kwargs):
760 result = ComponentAccumulator()
761 kwargs.setdefault("CaloMuonTagLoose",
762 result.popToolsAndMerge(CaloMuonTagCfg(flags, name="CaloMuonTagLoose", TagMode="Loose")))
763 kwargs.setdefault("CaloMuonTagTight",
764 result.popToolsAndMerge(CaloMuonTagCfg(flags)))
765 kwargs.setdefault("CaloMuonScoreTool",
766 result.popToolsAndMerge(CaloMuonScoreToolCfg(flags)))
767 kwargs.setdefault("TrackDepositInCaloTool",
768 result.popToolsAndMerge(TrackDepositInCaloToolCfg(flags)))
769 from InDetConfig.InDetTrackSelectorToolConfig import CaloTrkMuIdAlgTrackSelectorToolCfg
770 kwargs.setdefault("TrackSelectorTool",
771 result.popToolsAndMerge(CaloTrkMuIdAlgTrackSelectorToolCfg(flags)))
772 the_tool = CompFactory.MuonCombined.MuonCaloTagTool(name, **kwargs)
773 result.setPrivateTools(the_tool)
774 return result
775
776# Misc
777
778
779def MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kwargs):
780 from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonNSWSegmentFinderToolCfg, MuonPRDSelectionToolCfg
781 result = ComponentAccumulator()
782
783 from MuonConfig.MuonSegmentFindingConfig import Csc2dSegmentMakerCfg, Csc4dSegmentMakerCfg
784 kwargs.setdefault("Csc2DSegmentMaker", result.popToolsAndMerge(
785 Csc2dSegmentMakerCfg(flags)) if flags.Detector.GeometryCSC else "")
786 kwargs.setdefault("Csc4DSegmentMaker", result.popToolsAndMerge(
787 Csc4dSegmentMakerCfg(flags)) if flags.Detector.GeometryCSC else "")
788
789 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(
790 MuonPRDSelectionToolCfg(flags)))
791 kwargs.setdefault("SegmentMaker", result.popToolsAndMerge(
792 DCMathSegmentMakerCfg(flags, name="DCMathSegmentMaker")))
793 kwargs.setdefault("NSWMuonClusterSegmentFinderTool",
794 result.popToolsAndMerge(MuonNSWSegmentFinderToolCfg(flags, name="MuonNSWSegmentFinderTool")))
795
796
797 from AthenaConfiguration.Enums import LHCPeriod
798 if flags.GeoModel.Run < LHCPeriod.Run3 or flags.Muon.MuonTrigger:
799 kwargs.setdefault("InSegmentContainer", "")
800 kwargs.setdefault("MuonLayerSegmentMatchingTool", "")
801 else:
802 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
804 tool = CompFactory.Muon.MuonLayerSegmentFinderTool(name, **kwargs)
805 result.setPrivateTools(tool)
806 return result
807
808
809def MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", **kwargs):
810 result = AtlasExtrapolatorCfg(flags)
811 kwargs.setdefault("Extrapolator", result.popPrivateTools())
812 MuTagTool = result.getPrimaryAndMerge(MuTagMatchingToolCfg(flags))
813 kwargs.setdefault("MatchTool", MuTagTool)
814
815 tool = CompFactory.Muon.MuonLayerSegmentMatchingTool(name, **kwargs)
816 result.setPrivateTools(tool)
817 return result
818
819
820def MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs):
821 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg
822 if flags.Muon.MuonTrigger:
823 kwargs.setdefault("VertexContainer", "")
824 result = ComponentAccumulator()
825 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
826 layersegmentfindertool = result.popToolsAndMerge(
827 MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool"))
828 kwargs.setdefault("MuonLayerSegmentFinderTool", layersegmentfindertool)
829 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
831 kwargs.setdefault("MuonLayerAmbiguitySolverTool", result.popToolsAndMerge(
833 kwargs.setdefault("MuonCandidateTrackBuilderTool", result.popToolsAndMerge(
835 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
836 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
837 MuonCombinedTrackSummaryToolCfg(flags)))
838 kwargs.setdefault("MuonTrackBuilder", result.popToolsAndMerge(
840 kwargs.setdefault("TrackAmbiguityProcessor",
841 result.popToolsAndMerge(MuonAmbiProcessorCfg(flags)))
842
843 tool = CompFactory.MuonCombined.MuonInsideOutRecoTool(name, **kwargs)
844 result.setPrivateTools(tool)
845 return result
846
847
848def MuonCandidateTrackBuilderToolCfg(flags, name="MuonCandidateTrackBuilderTool", **kwargs):
849 result = CombinedMuonTrackBuilderCfg(flags)
850 kwargs.setdefault("MuonTrackBuilder", result.popPrivateTools())
851 muoncandidatetrackbuilder = CompFactory.Muon.MuonCandidateTrackBuilderTool(
852 name, **kwargs)
853 result.setPrivateTools(muoncandidatetrackbuilder)
854 return result
855
856
857def MuonSegmentSelectionToolCfg(flags, name="MuonSegmentSelectionTool", **kwargs):
858 if flags.Input.isMC is False:
859 kwargs.setdefault("GoodADCFractionCut", 0.5)
860 kwargs.setdefault("MinADCPerSegmentCut", 100)
861 result = ComponentAccumulator()
862 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
863 MuonEDMPrinterToolCfg(flags)))
864 muon_segment_hit_summary_tool = result.popToolsAndMerge(
866 kwargs.setdefault("MuonSegmentHitSummaryTool",
867 muon_segment_hit_summary_tool)
868 result.addPublicTool(muon_segment_hit_summary_tool)
869
870 result.setPrivateTools(
871 CompFactory.Muon.MuonSegmentSelectionTool(name, **kwargs))
872 return result
873
874
875def MuonLayerAmbiguitySolverToolCfg(flags, name="MuonLayerAmbiguitySolverTool", **kwargs):
876 from MuonConfig.MuonTrackBuildingConfig import MuonSegmentMatchingToolCfg, MooTrackBuilderCfg
877 result = MuonSegmentSelectionToolCfg(flags)
878 kwargs.setdefault("MuonSegmentSelectionTool", result.popPrivateTools())
879 kwargs.setdefault("MuonSegmentMatchingTool", result.popToolsAndMerge(
880 MuonSegmentMatchingToolCfg(flags, name='MuonSegmentMatchingToolTight', TightSegmentMatching=True)))
881
882 kwargs.setdefault("MuonSegmentTrackBuilder",
883 result.popToolsAndMerge(MooTrackBuilderCfg(flags, name='MooMuonTrackBuilder', prefix='MuSt_')))
884 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(
885 MuonEDMPrinterToolCfg(flags)))
886
887 result.setPrivateTools(
888 CompFactory.Muon.MuonLayerAmbiguitySolverTool(name, **kwargs))
889 return result
890
891
892def MdtDriftCircleOnTrackCreatorStauCfg(flags, name="MdtDriftCircleOnTrackCreatorStau", **kwargs):
893 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg, MdtCalibWindowNumber, MdtCalibToolForRotsCfg
894 result = ComponentAccumulator()
895 kwargs.setdefault("TimingMode", 3)
896 kwargs.setdefault("CalibrationTool", result.popToolsAndMerge(MdtCalibToolForRotsCfg(flags, TimeWindowSetting = MdtCalibWindowNumber('Collision_t0fit') )) )
897 the_tool = result.popToolsAndMerge(MdtDriftCircleOnTrackCreatorCfg(flags, name, **kwargs))
898 result.setPrivateTools(the_tool)
899 return result
900
901
902def MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs):
903 # In the old configuration this was split over several functions. But since these Stau tools are only used here,
904 # trying a new approach. We can always refactorise later if necessary.
905 from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonPRDSelectionToolCfg
906 from MuonConfig.MuonTrackBuildingConfig import MuonChamberHoleRecoveryToolCfg
907 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg, MuonSeededSegmentFinderCfg
908 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg
909 from MuonConfig.MuonSegmentFindingConfig import MuonLayerHoughAlgCfg
910 kwargs.setdefault("DoSummary", flags.Muon.printSummary)
911 kwargs.setdefault("ConsideredPDGs", [13, -13, 1000015, -1000015])
912 kwargs.setdefault("DoTruth", flags.Input.isMC)
913 kwargs.setdefault("AddMDTExtrasMuGirlLowBeta", flags.MuonCombined.addMDTExtrasMuGirlLowBeta)
914
915 result = ComponentAccumulator()
916 result.merge(MuonLayerHoughAlgCfg(flags))
917 # Not setting up MuonIdHelperSvc nor MuonEDMHelperSvc
918 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
919 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(MuonPRDSelectionToolCfg(flags)))
920
921 # This is going to be used in a few tools below
922 staurotcreator = result.popToolsAndMerge(MdtDriftCircleOnTrackCreatorStauCfg(flags))
923 kwargs.setdefault("MuonPRDSelectionToolStau",
924 result.popToolsAndMerge(MuonPRDSelectionToolCfg(flags,
925 "MuonPRDSelectionToolStau",
926 MdtDriftCircleOnTrackCreator=staurotcreator)))
927
928 segmentmaker = result.popToolsAndMerge(DCMathSegmentMakerCfg(
929 flags, name="DCMathStauSegmentMaker", MdtCreator=staurotcreator))
930 # segmentmaker also used by MuonSeededSegmentFinder below
931 kwargs.setdefault("MuonSegmentMaker", segmentmaker)
932 kwargs.setdefault("MuonSegmentMakerT0Fit", result.popToolsAndMerge(DCMathSegmentMakerCfg(
933 flags, name="DCMathT0FitSegmentMaker", doSegmentT0Fit=True)))
934 # ^ doSegmentT0Fit overrides several defaults, including MdtCreatorT0 and MdtSegmentFinder
935
936 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
938
939 # Not configuring MuonRecoValidationTool as it is off by default, but it would need configuring if used
940 kwargs.setdefault("TrackAmbiguityProcessor",
941 result.popToolsAndMerge(MuonAmbiProcessorCfg(flags)))
942 # I don't believe MuonHitTimingTool needs configuration.
943 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(
944 MuonPRDSelectionToolCfg(flags)))
945 kwargs.setdefault("MuonPRDSelectionToolStau", result.popToolsAndMerge(
946 MuonPRDSelectionToolCfg(flags, MdtDriftCircleOnTrackCreator=staurotcreator)))
947 kwargs.setdefault("MdtDriftCircleOnTrackCreator", result.popToolsAndMerge(
948 MdtDriftCircleOnTrackCreatorCfg(flags)))
949 kwargs.setdefault("MdtDriftCircleOnTrackCreatorStau", staurotcreator)
950 # Now setup MuonInsideOutRecoTool property of MuonStauRecoTool. Long chain here! Could split for clarity. Another option would be to have a Stau flag on
951 # shared tool functions.
952 chamberholerecoverytool = result.popToolsAndMerge(MuonChamberHoleRecoveryToolCfg(flags,
953 sTgcPrepDataContainer="",
954 MMPrepDataContainer=""))
955 seededsegmentfinder = result.popToolsAndMerge(MuonSeededSegmentFinderCfg(flags, name="MuonStauSeededSegmentFinder", MdtRotCreator=staurotcreator,
956 SegmentMaker=segmentmaker, SegmentMakerNoHoles=segmentmaker))
957 fitter = result.popToolsAndMerge(CombinedMuonTrackBuilderFitCfg(
958 flags, name="CombinedStauTrackBuilderFit", MdtRotCreator=staurotcreator))
959 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
960 muon_combined_track_summary = result.popToolsAndMerge(
961 MuonCombinedTrackSummaryToolCfg(flags))
962 muidsegmentregionrecovery = result.popToolsAndMerge(MuonSegmentRegionRecoveryToolCfg(flags, name="MuonStauSegmentRegionRecoveryTool", SeededSegmentFinder=seededsegmentfinder,
963 RecoverMM=False, RecoverSTGC=False, MMRegionSelector="", STGCRegionSelector="",
964 ChamberHoleRecoveryTool=chamberholerecoverytool, Fitter=fitter, TrackSummaryTool=muon_combined_track_summary))
965 trackbuilder = result.popToolsAndMerge(CombinedMuonTrackBuilderCfg(
966 flags, name="CombinedStauTrackBuilder", MdtRotCreator=staurotcreator, MuonHoleRecovery=muidsegmentregionrecovery))
967 muoncandidatetrackbuilder = CompFactory.Muon.MuonCandidateTrackBuilderTool(
968 name="MuonStauCandidateTrackBuilderTool", MuonTrackBuilder=trackbuilder)
969 kwargs.setdefault("MuonInsideOutRecoTool", result.popToolsAndMerge(
970 MuonInsideOutRecoToolCfg(flags, name='MuonStauInsideOutRecoTool', MuonCandidateTrackBuilderTool=muoncandidatetrackbuilder)))
971 # Rest
972
973 tool = CompFactory.MuonCombined.MuonStauRecoTool(name, **kwargs)
974 result.setPrivateTools(tool)
975 return result
976
977
978def MuonSystemExtensionToolCfg(flags, **kwargs):
979 result = ComponentAccumulator()
980
981 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
982 from MuonConfig.MuonRecToolsConfig import MuonEDMPrinterToolCfg
983
984 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(AtlasExtrapolatorCfg(flags)))
985 kwargs.setdefault("Printer", result.addPublicTool(result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags))) )
986 kwargs.setdefault("ParticleCaloExtensionTool",
987 result.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags,
988 name='MuonParticleCaloExtensionTool')))
989
990
991 muon_ext_tool = CompFactory.Muon.MuonSystemExtensionTool("MuonSystemExtensionTool", **kwargs)
992 result.setPrivateTools(muon_ext_tool)
993 return result
994
995
996def MuTagMatchingToolCfg(flags, name='MuTagMatchingTool', **kwargs):
997 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
998 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
999
1000 #TODO: defaults in cxx
1001 kwargs.setdefault("AssumeLocalErrors", True)
1002 kwargs.setdefault("PhiCut", 30.)
1003 kwargs.setdefault("GlobalPhiCut", 1.)
1004 kwargs.setdefault("ThetaCut", 5.)
1005 kwargs.setdefault("GlobalThetaCut", 0.5)
1006 kwargs.setdefault("ThetaAngleCut", 5.)
1007 kwargs.setdefault("DoDistanceCut", True)
1008 kwargs.setdefault("CombinedPullCut", 3.0)
1009
1010 result = AtlasExtrapolatorCfg(flags)
1011 kwargs.setdefault("IExtrapolator", result.popPrivateTools())
1012 kwargs.setdefault("Propagator", result.popToolsAndMerge(
1013 RungeKuttaPropagatorCfg(flags)))
1014 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
1015 MuonEDMPrinterToolCfg(flags)))
1016 kwargs.setdefault("MuonSegmentHitSummary", result.popToolsAndMerge(
1018 kwargs.setdefault("MuonSegmentSelection", result.popToolsAndMerge(
1020
1021 if "ResidualPullCalculator" not in kwargs:
1022 from TrkConfig.TrkResidualPullCalculatorConfig import (
1023 ResidualPullCalculatorCfg)
1024 kwargs.setdefault("ResidualPullCalculator", result.popToolsAndMerge(
1025 ResidualPullCalculatorCfg(flags)))
1026
1027 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import (
1028 TrackingGeometryCondAlgCfg)
1029 acc = TrackingGeometryCondAlgCfg(flags)
1030 geom_cond_key = acc.getPrimary().TrackingGeometryWriteKey
1031 result.merge(acc)
1032 kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)
1033
1034 tool = CompFactory.MuTagMatchingTool(name, **kwargs)
1035
1036 result.addPublicTool(tool, primary=True)
1037 return result
1038
1039
1040def MuTagAmbiguitySolverToolCfg(flags, name='MuTagAmbiguitySolverTool', **kwargs):
1041 from MuonConfig.MuonTrackBuildingConfig import MuonSegmentMatchingToolCfg
1042 #TODO: defaults in cxx
1043 kwargs.setdefault("RejectOuterEndcap", True)
1044 kwargs.setdefault("RejectMatchPhi", True)
1045 result = ComponentAccumulator()
1046 kwargs.setdefault("Printer", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
1047 kwargs.setdefault("MuonSegmentMatchingTool", result.popToolsAndMerge(
1048 MuonSegmentMatchingToolCfg(flags, name='MuonSegmentMatchingTool', doPhiMatching=False)))
1049 # EJWM. Not sure where doPhiMatching is set to False in old, but this is what I see in configuration diffs
1050
1051 tool = CompFactory.MuTagAmbiguitySolverTool(name, **kwargs)
1052 result.addPublicTool(tool, primary=True)
1053 return result
1054
1055
1056def MuonSegmentTagToolCfg(flags, name="MuonSegmentTagTool", **kwargs):
1057 result = ComponentAccumulator()
1058 mu_tag_matching = result.getPrimaryAndMerge(MuTagMatchingToolCfg(flags))
1059 kwargs.setdefault("MuTagMatchingTool", mu_tag_matching)
1060
1061 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
1062 MuonEDMPrinterToolCfg(flags)))
1063 kwargs.setdefault("MuTagAmbiguitySolverTool", result.getPrimaryAndMerge(
1065 kwargs.setdefault("MuonSegmentSelectionTool", result.getPrimaryAndMerge(
1067 kwargs.setdefault("MuonSegmentHitSummaryTool", result.getPrimaryAndMerge(
1069
1070 result.setPrivateTools(
1071 CompFactory.MuonCombined.MuonSegmentTagTool(name, **kwargs))
1072 return result
AlgTool returning the parametrized value for the calorimeter energy deposited by a traversing muon.
MuonCaloEnergyToolCfg(flags, name="MuonCaloEnergyTool", **kwargs)
MuonCandidateTrackBuilderToolCfg(flags, name="MuonCandidateTrackBuilderTool", **kwargs)
MuonDressingToolCfg(flags, name="MuonDressingTool", **kwargs)
CombinedMuonTagTestToolCfg(flags, name='CombinedMuonTagTestTool', **kwargs)
MdtDriftCircleOnTrackCreatorStauCfg(flags, name="MdtDriftCircleOnTrackCreatorStau", **kwargs)
MuidCaloEnergyToolCfg(flags, name='MuidCaloEnergyTool', **kwargs)
MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs)
MuonSegmentSelectionToolCfg(flags, name="MuonSegmentSelectionTool", **kwargs)
MuidMaterialEffectsOnTrackProviderCfg(flags, name='MuidMaterialEffectsOnTrackProvider', **kwargs)
MuonInDetForwardCandidateToolCfg(flags, name='InDetForwardCandidateTool', **kwargs)
MuidCaloTrackStateOnSurfaceParamCfg(flags, name='MuidCaloTrackStateOnSurfaceParam', **kwargs)
MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kwargs)
MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", **kwargs)
MuidErrorOptimisationToolCfg(flags, name='MuidErrorOptimisationTool', **kwargs)
CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', **kwargs)
MuidMuonRecoveryCfg(flags, name='MuidMuonRecovery', **kwargs)
MuonCaloTagToolCfg(flags, name='MuonCaloTagTool', **kwargs)
MuidCaloEnergyMeasCfg(flags, name='MuidCaloEnergyMeas', **kwargs)
MuTagMatchingToolCfg(flags, name='MuTagMatchingTool', **kwargs)
MuonSegmentHitSummaryToolCfg(flags, name="MuonSegmentHitSummaryTool", **kwargs)
MuonCombinedFitTagToolCfg(flags, name="MuonCombinedFitTagTool", **kwargs)
MuidCaloEnergyParam(flags, name='MuidCaloEnergyParam', **kwargs)
MuonCreatorToolCfg(flags, name="MuonCreatorTool", **kwargs)
MuonSegmentTagToolCfg(flags, name="MuonSegmentTagTool", **kwargs)
CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs)
MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs)
iPatSLFitterCfg(flags, name='iPatSLFitter', **kwargs)
MuidCaloTrackStateOnSurfaceCfg(flags, name='MuidCaloTrackStateOnSurface', **kwargs)
MuonLayerAmbiguitySolverToolCfg(flags, name="MuonLayerAmbiguitySolverTool", **kwargs)
MuonAlignmentUncertToolPhiCfg(flags, name="MuonAlignmentUncertToolPhi", **kwargs)
MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs)
MuonMaterialProviderToolCfg(flags, name="MuonTrkMaterialProviderTool", **kwargs)
MuidCaloEnergyToolParamCfg(flags, name='MuidCaloEnergyToolParam', **kwargs)
ExtrapolateMuonToIPToolCfg(flags, name="ExtrapolateMuonToIPTool", **kwargs)
CaloMuonTagCfg(flags, name="CaloMuonTag", **kwargs)
MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs)
MuidTrackIsolationCfg(flags, name='MuidTrackIsolation', **kwargs)
MuonSegmentConverterToolCfg(flags, name="MuonSegmentConverterTool", **kwargs)
CaloMuonScoreToolCfg(flags, name='CaloMuonScoreTool', **kwargs)
MuTagAmbiguitySolverToolCfg(flags, name='MuTagAmbiguitySolverTool', **kwargs)
TrackDepositInCaloToolCfg(flags, name='TrackDepositInCaloTool', **kwargs)
iPatFitterCfg(flags, name='iPatFitter', **kwargs)
InDetCandidateToolCfg(flags, name="InDetCandidateTool", **kwargs)
MuidMaterialEffectsOnTrackProviderParamCfg(flags, name='MuidMaterialEffectsOnTrackProviderParam', **kwargs)
MuonAlignmentUncertToolThetaCfg(flags, name="MuonAlignmentUncertToolTheta", **kwargs)
MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool", **kwargs)
MuonTrackQueryCfg(flags, name="MuonTrackQuery", **kwargs)
MuidMaterialAllocatorCfg(flags, name='MuidMaterialAllocator', **kwargs)