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 MuonSelectionToolCfg
191 kwargs.setdefault("MuonSelectionTool", result.popToolsAndMerge(
192 MuonSelectionToolCfg(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 MuonCandidateToolCfg(flags, name="MuonCandidateTool", **kwargs):
223 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg
224 result = ComponentAccumulator()
225 muon_edm_printer = result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags))
226 kwargs.setdefault("Printer", muon_edm_printer)
227 if "TrackBuilder" not in kwargs:
228 kwargs.setdefault("TrackBuilder", result.popToolsAndMerge(
229 CombinedMuonTrackBuilderCfg(flags, name="CombinedMuonTrackBuilder")))
230 # Why was this dependent on cosmics? will now always create this
231 # if flags.Beam.Type is BeamType.Cosmics:
232 if flags.Muon.MuonTrigger and flags.Beam.Type is not BeamType.Cosmics:
233 # trigger definitely only uses the ExtrapolateToIPtool in cosmics mode
234 kwargs.setdefault("TrackExtrapolationTool", "")
235 else:
236 kwargs.setdefault("TrackExtrapolationTool", result.popToolsAndMerge(
238 kwargs.setdefault("SegmentContainer", "TrackMuonSegments")
239 kwargs.setdefault("AmbiguityProcessor", result.popToolsAndMerge(
240 MuonAmbiProcessorCfg(flags)))
241
242 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
243 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
244 MuonTrackSummaryToolCfg(flags)))
245
246 # MuonIDHelperSvc already configured
247
248 if flags.Beam.Type is BeamType.Cosmics:
249 kwargs.setdefault("ExtrapolationStrategy", 1)
250
251 track_segment_association_tool = CompFactory.MuonCombined.TrackSegmentAssociationTool(
252 MuonEDMPrinterTool=muon_edm_printer)
253 kwargs.setdefault("TrackSegmentAssociationTool",
254 track_segment_association_tool)
255 result.addPublicTool(track_segment_association_tool)
256
257 tool = CompFactory.MuonCombined.MuonCandidateTool(name, **kwargs)
258 result.setPrivateTools(tool)
259 return result
260
261
262def MuonCombinedDebuggerToolCfg(flags, name="MuonCombinedDebuggerTool", **kwargs):
263 result = ComponentAccumulator()
264 match_quality = CompFactory.Rec.MuonMatchQuality(
265 TrackQuery=result.popToolsAndMerge(MuonTrackQueryCfg(flags)))
266 kwargs.setdefault("MuonMatchQuality", match_quality)
267 tool = CompFactory.MuonCombined.MuonCombinedDebuggerTool(name, **kwargs)
268 result.setPrivateTools(tool)
269 return result
270
271
272def MuonCombinedToolCfg(flags, name="MuonCombinedTool", **kwargs):
273 tools = []
274 result = ComponentAccumulator()
275 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
276 MuonEDMPrinterToolCfg(flags)))
277
278 if flags.MuonCombined.doCombinedFit:
279 tool = result.popToolsAndMerge(MuonCombinedFitTagToolCfg(flags))
280 tools.append(tool)
281 if flags.MuonCombined.doStatisticalCombination and flags.Beam.Type is not BeamType.Cosmics:
282 tool = result.popToolsAndMerge(MuonCombinedStacoTagToolCfg(flags))
283 tools.append(tool)
284
285 kwargs.setdefault("MuonCombinedTagTools", tools)
286 kwargs.setdefault("MuonCombinedDebuggerTool", result.popToolsAndMerge(
288
290 result.merge(acc)
291 kwargs.setdefault("AlignmentUncertTool", result.getPublicTool(
292 'MuonAlignmentUncertToolTheta'))
293
294 kwargs.setdefault("DeltaEtaPreSelection", 0.2)
295 kwargs.setdefault("DeltaPhiPreSelection", 0.2)
296 tool = CompFactory.MuonCombined.MuonCombinedTool(name, **kwargs)
297 result.setPrivateTools(tool)
298 return result
299
300
301def MuonCombinedFitTagToolCfg(flags, name="MuonCombinedFitTagTool", **kwargs):
302 if flags.Muon.MuonTrigger:
303 kwargs.setdefault("VertexContainer", "")
304
305 result = ComponentAccumulator()
306 kwargs.setdefault("TrackBuilder", result.popToolsAndMerge(
308
309 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
310 MuonEDMPrinterToolCfg(flags)))
311
312 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
313 MuonTrackQueryCfg(flags)))
314 kwargs.setdefault("MatchQuality", result.popToolsAndMerge(
315 MuonMatchQualityCfg(flags)))
316
317 from MuonConfig.MuonRecToolsConfig import MuonTrackScoringToolCfg
318 kwargs.setdefault("TrackScoringTool", result.popToolsAndMerge(
319 MuonTrackScoringToolCfg(flags)))
320
321
322 #When both solenoid and toriod are off (e.g. cosmic runs) this cut is likely to kill the combined muon -> loosen up for cosmics
323 if flags.Beam.Type is BeamType.Cosmics and (not flags.BField.endcapToroidOn and not flags.BField.solenoidOn):
324 kwargs.setdefault("MomentumBalanceCut", 1e6)
325
326 tool = CompFactory.MuonCombined.MuonCombinedFitTagTool(name, **kwargs)
327 result.setPrivateTools(tool)
328 return result
329
330def MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool", **kwargs):
331
332 result = ComponentAccumulator()
333 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
334 MuonEDMPrinterToolCfg(flags)))
335 kwargs.setdefault("TagTool", result.popToolsAndMerge(
337 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(
338 AtlasExtrapolatorCfg(flags)))
339
340 tool = CompFactory.MuonCombined.MuonCombinedStacoTagTool(name, **kwargs)
341 result.setPrivateTools(tool)
342 return result
343
344# From Combined fit tools.py
345
346
347def MuidMaterialAllocatorCfg(flags, name='MuidMaterialAllocator', **kwargs):
348 from TrkConfig.TrkExSTEP_PropagatorConfig import AtlasSTEP_PropagatorCfg
349 kwargs.setdefault("AggregateMaterial", True)
350 kwargs.setdefault("AllowReordering", False)
351
352 result = AtlasExtrapolatorCfg(flags)
353 kwargs.setdefault("Extrapolator", result.popPrivateTools())
354 # Intersector (a RungeKuttaIntersector) does not require explicit configuration
355 kwargs.setdefault("STEP_Propagator", result.popToolsAndMerge(
356 AtlasSTEP_PropagatorCfg(flags, name="AtlasSTEP_Propagator")))
357 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
358 result.merge(TrackingGeometryCondAlgCfg(flags))
359 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
360
361 tool = CompFactory.Trk.MaterialAllocator(name, **kwargs)
362 result.setPrivateTools(tool)
363 return result
364
365# and the fitter
366
367
368def iPatFitterCfg(flags, name='iPatFitter', **kwargs):
369 from TrkConfig.SolenoidalIntersectorConfig import SolenoidalIntersectorCfg
370 from TrkConfig.TrkExSTEP_PropagatorConfig import AtlasSTEP_PropagatorCfg
371
372 kwargs.setdefault("AggregateMaterial", True)
373 kwargs.setdefault("FullCombinedFit", True)
374 result = MuidMaterialAllocatorCfg(flags)
375 kwargs.setdefault("MaterialAllocator", result.popPrivateTools())
376 # RungeKuttaIntersector needs a AtlasFieldCacheCondObj, but it's impossible to get here without that being configured already so let's be lazy
377 # It does not otherwise require explicit configuration
378 kwargs.setdefault('SolenoidalIntersector', result.popToolsAndMerge(
379 SolenoidalIntersectorCfg(flags)))
380 kwargs.setdefault('Propagator', result.popToolsAndMerge(
381 AtlasSTEP_PropagatorCfg(flags)))
382 # StraightLineIntersector does not need explicit configuration
383 if flags.Muon.MuonTrigger:
384 kwargs.setdefault("MaxIterations", 15)
385 if flags.Muon.SAMuonTrigger:
386 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
387 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
388 MuonTrackSummaryToolCfg(flags)))
389 else:
390 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
391 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
392 MuonCombinedTrackSummaryToolCfg(flags)))
393
394 tool = CompFactory.Trk.iPatFitter(name, **kwargs)
395 result.setPrivateTools(tool)
396 return result
397
398
399def iPatSLFitterCfg(flags, name='iPatSLFitter', **kwargs):
400 kwargs.setdefault("LineFit", True)
401 kwargs.setdefault("LineMomentum", flags.Muon.straightLineFitMomentum)
402 return iPatFitterCfg(flags, name, **kwargs)
403
404# track cleaner configured to use the same fitter
405
406
407def MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs):
408 from MuonConfig.MuonRecToolsConfig import MuonTrackCleanerCfg
409 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
410 if flags.Beam.Type is BeamType.Cosmics:
411 kwargs.setdefault("PullCut", 5.0)
412 kwargs.setdefault("PullCutPhi", 10.0)
413 else:
414 kwargs.setdefault("PullCut", 4.0)
415 kwargs.setdefault("PullCutPhi", 4.0)
416 result = ComponentAccumulator()
417 if flags.Muon.MuonTrigger:
418 kwargs.setdefault("Iterate", False)
419 kwargs.setdefault("RecoverOutliers", False)
420 kwargs.setdefault("Fitter", result.popToolsAndMerge(
421 iPatFitterCfg(flags, 'iPatFitterClean', MaxIterations=4)))
422 else:
423 kwargs.setdefault(
424 "Fitter", result.popToolsAndMerge(iPatFitterCfg(flags)))
425 kwargs.setdefault(
426 "SLFitter", result.popToolsAndMerge(iPatSLFitterCfg(flags)))
427
428 # For these following items, set back to default, because overridden in MuonTrackCleaner and we don't want overrides.
429 # ALL properties that are set in old-style are: PullCut, PullCutPhi, Iterate, RecoverOutliers, Fitter and iPatSLFitter
430 # However since there are defaults we still DO need to explicitly set, it's still probably easier to use MuonTrackCleanerCfg
431 kwargs.setdefault("MaxAvePullSumPerChamber", 3.5)
432 kwargs.setdefault("Chi2Cut", 100.0)
433 kwargs.setdefault("Extrapolator", result.getPrimaryAndMerge(
434 AtlasExtrapolatorCfg(flags)))
435 result.setPrivateTools(result.popToolsAndMerge(
436 MuonTrackCleanerCfg(flags, name, **kwargs)))
437 return result
438
439
440def MuidCaloEnergyParam(flags, name='MuidCaloEnergyParam', **kwargs):
441 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
442 return CompFactory.Rec.MuidCaloEnergyParam(name, **kwargs)
443
444
445def MuidCaloEnergyMeasCfg(flags, name='MuidCaloEnergyMeas', **kwargs):
446 result = ComponentAccumulator()
447 muidcaloenergyparam = MuidCaloEnergyParam(flags)
448 kwargs.setdefault("CaloParamTool", muidcaloenergyparam)
449 # FIXME! Need to setup the folders for CaloNoiseKey (which is why this needs a CA)
450 # Not sure how to do : if flags.haveRIO.Calo_on() but TBH, if the cells aren't there it will abort anyway
451 kwargs.setdefault("CellContainerLocation", "AllCalo")
452 kwargs.setdefault("NoiseThresInSigmas", 4.)
453 tool = CompFactory.Rec.MuidCaloEnergyMeas(name, **kwargs)
454 result.setPrivateTools(tool)
455 return result
456
457
458def MuidCaloEnergyToolParamCfg(flags, name='MuidCaloEnergyToolParam', **kwargs):
459 # Some duplication with MuidCaloEnergyToolCfg but probably safer like this, since
460 # we don't want to set e.g. MinFinalEnergy here
461 result = MuidCaloEnergyMeasCfg(flags)
462 kwargs.setdefault("CaloMeasTool", result.popPrivateTools())
463 kwargs.setdefault("EnergyLossMeasurement", False)
464
465 kwargs.setdefault("CaloParamTool", MuidCaloEnergyParam(flags))
466 if flags.Beam.Type is BeamType.Cosmics:
467 kwargs.setdefault("Cosmics", True)
468 kwargs.setdefault("TrackIsolationTool", result.popToolsAndMerge(
469 MuidTrackIsolationCfg(flags)))
470
471 result.setPrivateTools(CompFactory.Rec.MuidCaloEnergyTool(name, **kwargs))
472 return result
473
474
475def MuidTrackIsolationCfg(flags, name='MuidTrackIsolation', **kwargs):
476 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
477 kwargs.setdefault("InDetTracksLocation",
478 "CombinedInDetTracks" if flags.Detector.GeometryID else "CombinedITkTracks")
479 # RungeKuttaIntersector requires the magnetic field conditions
480 result = AtlasFieldCacheCondAlgCfg(flags)
481 tool = CompFactory.Rec.MuidTrackIsolation(name, **kwargs)
482 result.setPrivateTools(tool)
483 return result
484
485
486def MuidCaloEnergyToolCfg(flags, name='MuidCaloEnergyTool', **kwargs):
487 result = MuidCaloEnergyMeasCfg(flags)
488 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
489 result.merge(LArGMCfg(flags))
490 kwargs.setdefault("CaloMeasTool", result.popPrivateTools())
491 kwargs.setdefault("CaloParamTool", MuidCaloEnergyParam(flags))
492 kwargs.setdefault("MinFinalEnergy", 1.0*GeV)
493 kwargs.setdefault("MinMuonPt", 10.0*GeV)
494 kwargs.setdefault("MopParametrization", True)
495 if flags.Muon.MuonTrigger:
496 kwargs.setdefault("EnergyLossMeasurement", False)
497 kwargs.setdefault("TrackIsolation", False)
498 else:
499 kwargs.setdefault("EnergyLossMeasurement", True)
500 kwargs.setdefault("TrackIsolation", True)
501
502 kwargs.setdefault("TrackIsolationTool", result.popToolsAndMerge(
503 MuidTrackIsolationCfg(flags)))
504 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
505 result.setPrivateTools(CompFactory.Rec.MuidCaloEnergyTool(name, **kwargs))
506 return result
507
508
509def MuidCaloTrackStateOnSurfaceCfg(flags, name='MuidCaloTrackStateOnSurface', **kwargs):
510 result = ComponentAccumulator()
511 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
512 kwargs.setdefault("Propagator", result.popToolsAndMerge(
513 RungeKuttaPropagatorCfg(flags)))
514 kwargs.setdefault("MinRemainingEnergy", 0.2*GeV)
515 kwargs.setdefault("ParamPtCut", 3.0*GeV)
516 kwargs.setdefault("CaloEnergyDeposit", result.popToolsAndMerge(
517 MuidCaloEnergyToolCfg(flags)))
518 kwargs.setdefault("CaloEnergyParam", result.popToolsAndMerge(
520 # I don't think CaloMaterialParam i.e. MuidCaloMaterialParam needs explicit configuration
521 # Ditto for IntersectorWrapper, since it just uses RKIntersector which doesn't
522 tool = CompFactory.Rec.MuidCaloTrackStateOnSurface(name, **kwargs)
523 result.setPrivateTools(tool)
524 return result
525
526
527def MuidCaloTrackStateOnSurfaceParamCfg(flags, name='MuidCaloTrackStateOnSurfaceParam', **kwargs):
528 result = ComponentAccumulator()
529 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
530 kwargs.setdefault("Propagator", result.popToolsAndMerge(
531 RungeKuttaPropagatorCfg(flags)))
532 kwargs.setdefault("MinRemainingEnergy", 0.2*GeV)
533 kwargs.setdefault("ParamPtCut", 3.0*GeV)
534 kwargs.setdefault("CaloEnergyDeposit", MuidCaloEnergyParam(flags))
535 kwargs.setdefault("CaloEnergyParam", MuidCaloEnergyParam(flags))
536 tool = CompFactory.Rec.MuidCaloTrackStateOnSurface(name, **kwargs)
537 result.setPrivateTools(tool)
538 return result
539
540
541def MuidMaterialEffectsOnTrackProviderCfg(flags, name='MuidMaterialEffectsOnTrackProvider', **kwargs):
542 result = MuidCaloTrackStateOnSurfaceCfg(flags)
543 kwargs.setdefault("TSOSTool", result.popPrivateTools())
545 kwargs.setdefault("TSOSToolParam", acc.popPrivateTools())
546 result.merge(acc)
547 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
548 tool = CompFactory.Rec.MuidMaterialEffectsOnTrackProvider(name, **kwargs)
549 result.setPrivateTools(tool)
550 return result
551
552
553def MuidMaterialEffectsOnTrackProviderParamCfg(flags, name='MuidMaterialEffectsOnTrackProviderParam', **kwargs):
555 muidtsosparam = result.popPrivateTools()
556 kwargs.setdefault("TSOSTool", muidtsosparam)
557 kwargs.setdefault("TSOSToolParam", muidtsosparam)
558 kwargs.setdefault("Cosmics", flags.Beam.Type is BeamType.Cosmics)
559 tool = CompFactory.Rec.MuidMaterialEffectsOnTrackProvider(name, **kwargs)
560 result.setPrivateTools(tool)
561 return result
562
563
564def MuonTrackQueryCfg(flags, name="MuonTrackQuery", **kwargs):
565 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg
566 result = MdtDriftCircleOnTrackCreatorCfg(flags)
567 kwargs.setdefault("MdtRotCreator", result.popPrivateTools())
568 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
569 result.merge(TrackingGeometryCondAlgCfg(flags))
570 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
571
572 acc = iPatFitterCfg(flags)
573 kwargs.setdefault("Fitter", acc.popPrivateTools())
574 result.merge(acc)
575
576 tool = CompFactory.Rec.MuonTrackQuery(name, **kwargs)
577 result.setPrivateTools(tool)
578 return result
579
580def MuidErrorOptimisationToolCfg(flags, name='MuidErrorOptimisationTool', **kwargs):
581 from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryHelperToolCfg, MuonRefitToolCfg
582 result = ComponentAccumulator()
583 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
584 MuonTrackSummaryHelperToolCfg(flags)))
585 useAlignErrs = True
586 if flags.IOVDb.DatabaseInstance == 'COMP200' or \
587 'HLT' in flags.IOVDb.GlobalTag or flags.Common.isOnline or flags.Muon.MuonTrigger:
588 useAlignErrs = False
589 kwargs.setdefault("RefitTool", result.popToolsAndMerge(MuonRefitToolCfg(
590 flags, name="MuidRefitTool", AlignmentErrors=useAlignErrs,
591 Fitter=result.popToolsAndMerge(iPatFitterCfg(flags)))))
592 tool = CompFactory.Muon.MuonErrorOptimisationTool(name, **kwargs)
593 result.setPrivateTools(tool)
594 return result
595
596
597def MuonAlignmentUncertToolThetaCfg(flags, name="MuonAlignmentUncertToolTheta", **kwargs):
598 result = ComponentAccumulator()
599 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
600 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
601 kwargs.setdefault("HistoName", "ThetaScattering")
602 kwargs.setdefault(
603 "InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root")
604 tool = CompFactory.Muon.MuonAlignmentUncertTool(name, **kwargs)
605 result.addPublicTool(tool)
606 return result
607
608
609def MuonAlignmentUncertToolPhiCfg(flags, name="MuonAlignmentUncertToolPhi", **kwargs):
610 result = ComponentAccumulator()
611 kwargs.setdefault("HistoName", "PhiScattering")
612 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
613 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
614 kwargs.setdefault(
615 "InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root")
616 tool = CompFactory.Muon.MuonAlignmentUncertTool(name, **kwargs)
617 result.addPublicTool(tool)
618 return result
619
620
621@AccumulatorCache
622def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs):
623 from AthenaCommon.SystemOfUnits import meter
624 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import CscClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg, MuonClusterOnTrackCreatorCfg
625 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
626
627 result = ComponentAccumulator()
628
629 from MuonConfig.MuonGeometryConfig import TrackingVolumesSvcCfg
630 kwargs.setdefault("TrackingVolumesSvc", result.getPrimaryAndMerge(TrackingVolumesSvcCfg(flags)))
631
632 kwargs.setdefault("CaloEnergyParam", result.popToolsAndMerge(
634 kwargs.setdefault("CaloTSOS", result.popToolsAndMerge(
636 kwargs.setdefault("Cleaner", result.popToolsAndMerge(
637 MuidTrackCleanerCfg(flags)))
638 result.merge(MuonAlignmentUncertToolPhiCfg(flags))
639 kwargs.setdefault("AlignmentUncertToolPhi",
640 result.getPublicTool('MuonAlignmentUncertToolPhi'))
641 result.merge(MuonAlignmentUncertToolThetaCfg(flags))
642 kwargs.setdefault("AlignmentUncertToolTheta",
643 result.getPublicTool('MuonAlignmentUncertToolTheta'))
644
645 if flags.Detector.GeometryCSC and not flags.Muon.MuonTrigger:
646 kwargs.setdefault("CscRotCreator", result.popToolsAndMerge(
647 CscClusterOnTrackCreatorCfg(flags)))
648 else:
649 kwargs.setdefault("CscRotCreator", "")
650
651 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(
652 AtlasExtrapolatorCfg(flags)))
653 kwargs.setdefault(
654 "Fitter", result.popToolsAndMerge(iPatFitterCfg(flags)))
655 kwargs.setdefault(
656 "SLFitter", result.popToolsAndMerge(iPatSLFitterCfg(flags)))
657 kwargs.setdefault("MaterialAllocator", result.popToolsAndMerge(
659 kwargs.setdefault("MdtRotCreator", result.popToolsAndMerge(
660 MdtDriftCircleOnTrackCreatorCfg(flags)))
661 kwargs.setdefault("MuonRotCreator", result.popToolsAndMerge(
662 MuonClusterOnTrackCreatorCfg(flags)))
663
664 # Tracking Geometry
665 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import (
666 TrackingGeometryCondAlgCfg)
667
668 geom_cond_key = result.getPrimaryAndMerge(
669 TrackingGeometryCondAlgCfg(flags)).TrackingGeometryWriteKey
670 kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)
671
672 kwargs.setdefault("CleanCombined", True)
673 kwargs.setdefault("CleanStandalone", True)
674 kwargs.setdefault("BadFitChi2", 2.5)
675 kwargs.setdefault("LargeMomentumError", 0.5)
676 kwargs.setdefault("LineMomentum", flags.Muon.straightLineFitMomentum)
677 kwargs.setdefault("LowMomentum", 10.*GeV)
678 kwargs.setdefault("MinEnergy", 0.3*GeV)
679 kwargs.setdefault("PerigeeAtSpectrometerEntrance", False)
680 kwargs.setdefault("ReallocateMaterial", False)
681 kwargs.setdefault("Vertex2DSigmaRPhi", 100.*mm)
682 kwargs.setdefault("Vertex3DSigmaRPhi", 6.*mm)
683 kwargs.setdefault("Vertex3DSigmaZ", 60.*mm)
684 kwargs.setdefault("UseCaloTG", True)
685
686 kwargs.setdefault("CaloMaterialProvider", result.popToolsAndMerge(
688 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
689 MuonTrackQueryCfg(flags)))
690
691 if flags.Muon.SAMuonTrigger:
692 from TrkConfig.TrkTrackSummaryToolConfig import MuonTrackSummaryToolCfg
693 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
694 MuonTrackSummaryToolCfg(flags)))
695 else:
696 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
697 MuonCombinedTrackSummaryToolCfg(flags)))
698
699 from TrkConfig.TrkExRungeKuttaPropagatorConfig import MuonCombinedPropagatorCfg, RungeKuttaPropagatorCfg
700 propagator = None
701 if flags.Muon.MuonTrigger:
702 propagator = result.popToolsAndMerge(RungeKuttaPropagatorCfg(flags))
703 else:
704 propagator = result.popToolsAndMerge(MuonCombinedPropagatorCfg(flags))
705 kwargs.setdefault("Propagator", propagator)
706 kwargs.setdefault("SLPropagator", propagator)
707 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
708 MuonEDMPrinterToolCfg(flags)))
709
710 if flags.Beam.Type is BeamType.Cosmics:
711 kwargs.setdefault("MdtRotCreator", "")
712 kwargs.setdefault("MuonRotCreator", "")
713 kwargs.setdefault("LowMomentum", 1.5*GeV)
714 kwargs.setdefault("ReallocateMaterial", False)
715 kwargs.setdefault("Vertex2DSigmaRPhi", 100.*mm)
716 kwargs.setdefault("Vertex3DSigmaRPhi", 100.*mm)
717 kwargs.setdefault("Vertex3DSigmaZ", 1.*meter)
718
719 # configure tools for data reprocessing
720 if flags.Muon.enableErrorTuning and 'MuonErrorOptimizer' not in kwargs:
721 erroropt = result.popToolsAndMerge(MuidErrorOptimisationToolCfg(
722 flags, name="MuidErrorOptimisationTool", PrepareForFit=False, RecreateStartingParameters=False))
723 kwargs.setdefault("MuonErrorOptimizer", erroropt)
724 else:
725 kwargs.setdefault("MuonErrorOptimizer", "")
726
727 if flags.Muon.MuonTrigger:
728 kwargs.setdefault("MuonHoleRecovery", "")
729 else:
730 if "MuonHoleRecovery" not in kwargs:
731 # Meeded to resolve circular dependency since MuonSegmentRegionRecoveryToolCfg calls CombinedMuonTrackBuilderCfg (i.e. this)!
732 muon_combined_track_summary = result.popToolsAndMerge(
733 MuonCombinedTrackSummaryToolCfg(flags))
734 acc = MuonSegmentRegionRecoveryToolCfg(
735 flags, name="MuidSegmentRegionRecoveryTool", TrackSummaryTool=muon_combined_track_summary)
736 kwargs.setdefault("MuonHoleRecovery", acc.popPrivateTools())
737 result.merge(acc)
738
739 if flags.Muon.doSegmentT0Fit:
740 kwargs.setdefault("MdtRotCreator", "")
741 tool = CompFactory.Rec.CombinedMuonTrackBuilder(name, **kwargs)
742 result.setPrivateTools(tool)
743 return result
744
745
746def CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', **kwargs):
747 # In the old configuration we had duplication between CombinedMuonTrackBuilder and CombinedMuonTrackBuilderFit
748 # Here we just call the Combined
749 from MuonConfig.MuonTrackBuildingConfig import MuonChamberHoleRecoveryToolCfg
750 result = ComponentAccumulator()
751 kwargs.setdefault("PerigeeAtSpectrometerEntrance", True)
752 kwargs.setdefault("UseCaloTG", False)
753 if flags.Muon.MuonTrigger:
754 kwargs.setdefault("MuonErrorOptimizer", "")
755 else:
756 kwargs.setdefault("MuonErrorOptimizer", result.popToolsAndMerge(
757 MuidErrorOptimisationToolCfg(flags, PrepareForFit=False, RecreateStartingParameters=False)))
758 kwargs.setdefault("MuonHoleRecovery", result.popToolsAndMerge(
759 MuonChamberHoleRecoveryToolCfg(flags)))
760
761 tool = result.popToolsAndMerge(CombinedMuonTrackBuilderCfg(
762 flags, name, **kwargs)) # Need to reset this to be the primary tool
763 result.setPrivateTools(tool)
764 return result
765
766def MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs):
767 result = CombinedMuonTagTestToolCfg(flags)
768 kwargs.setdefault("TagTool", result.popPrivateTools())
769 kwargs.setdefault("TrackQuery", result.popToolsAndMerge(
770 MuonTrackQueryCfg(flags)))
771
772 tool = CompFactory.Rec.MuonMatchQuality(name, **kwargs)
773 result.setPrivateTools(tool)
774 return result
775
776
777def MuidMuonRecoveryCfg(flags, name='MuidMuonRecovery', **kwargs):
778 result = AtlasExtrapolatorCfg(flags)
779 kwargs.setdefault("Extrapolator", result.popPrivateTools())
780 kwargs.setdefault("TrackBuilder", result.popToolsAndMerge(
782
783 if "ResidualPullCalculator" not in kwargs:
784 from TrkConfig.TrkResidualPullCalculatorConfig import (
785 ResidualPullCalculatorCfg)
786 kwargs.setdefault("ResidualPullCalculator", result.popToolsAndMerge(
787 ResidualPullCalculatorCfg(flags)))
788
789 tool = CompFactory.Rec.MuidMuonRecovery(name, **kwargs)
790 result.setPrivateTools(tool)
791 return result
792
793
794def CombinedMuonTagTestToolCfg(flags, name='CombinedMuonTagTestTool', **kwargs):
795 result = AtlasExtrapolatorCfg(flags)
796 kwargs.setdefault("ExtrapolatorTool", result.popPrivateTools())
797 kwargs.setdefault("Chi2Cut", 50000.)
798 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
799 result.merge(TrackingGeometryCondAlgCfg(flags))
800 kwargs.setdefault("TrackingGeometryReadKey", "AtlasTrackingGeometry")
801 tool = CompFactory.MuonCombined.MuonTrackTagTestTool(name, **kwargs)
802 result.setPrivateTools(tool)
803 return result
804
805# From MuonCaloTagTool.py
806
807
808def TrackDepositInCaloToolCfg(flags, name='TrackDepositInCaloTool', **kwargs):
809 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg, ParticleCaloCellAssociationToolCfg
810 result = ComponentAccumulator()
811 kwargs.setdefault("ParticleCaloExtensionTool",
812 result.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags)))
813 kwargs.setdefault("ExtrapolatorHandle", result.popToolsAndMerge(
814 AtlasExtrapolatorCfg(flags)))
815 kwargs.setdefault("ParticleCaloCellAssociationTool",
816 result.popToolsAndMerge(ParticleCaloCellAssociationToolCfg(flags, name="Rec::ParticleCaloCellAssociationTool")))
817 tool = CompFactory.TrackDepositInCaloTool(name, **kwargs)
818 result.setPrivateTools(tool)
819 return result
820
821
822
823def CaloMuonScoreToolCfg(flags, name='CaloMuonScoreTool', **kwargs):
824 from TrackToCalo.TrackToCaloConfig import ParticleCaloCellAssociationToolCfg
825 result = ComponentAccumulator()
826 kwargs.setdefault("ParticleCaloCellAssociationTool",
827 result.popToolsAndMerge(ParticleCaloCellAssociationToolCfg(flags)))
828 tool = CompFactory.CaloMuonScoreTool(name, **kwargs)
829 result.setPrivateTools(tool)
830 return result
831
832
833def CaloMuonTagCfg(flags, name="CaloMuonTag", **kwargs):
834 result = ComponentAccumulator()
835 the_tool = CompFactory.CaloMuonTag(name, **kwargs)
836 result.setPrivateTools(the_tool)
837 return result
838
839
840def MuonCaloTagToolCfg(flags, name='MuonCaloTagTool', **kwargs):
841 result = ComponentAccumulator()
842 kwargs.setdefault("CaloMuonTagLoose",
843 result.popToolsAndMerge(CaloMuonTagCfg(flags, name="CaloMuonTagLoose", TagMode="Loose")))
844 kwargs.setdefault("CaloMuonTagTight",
845 result.popToolsAndMerge(CaloMuonTagCfg(flags)))
846 kwargs.setdefault("CaloMuonScoreTool",
847 result.popToolsAndMerge(CaloMuonScoreToolCfg(flags)))
848 kwargs.setdefault("TrackDepositInCaloTool",
849 result.popToolsAndMerge(TrackDepositInCaloToolCfg(flags)))
850 from InDetConfig.InDetTrackSelectorToolConfig import CaloTrkMuIdAlgTrackSelectorToolCfg
851 kwargs.setdefault("TrackSelectorTool",
852 result.popToolsAndMerge(CaloTrkMuIdAlgTrackSelectorToolCfg(flags)))
853 the_tool = CompFactory.MuonCombined.MuonCaloTagTool(name, **kwargs)
854 result.setPrivateTools(the_tool)
855 return result
856
857# Misc
858
859
860def MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kwargs):
861 from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonNSWSegmentFinderToolCfg, MuonPRDSelectionToolCfg
862 result = ComponentAccumulator()
863
864 from MuonConfig.MuonSegmentFindingConfig import Csc2dSegmentMakerCfg, Csc4dSegmentMakerCfg
865 kwargs.setdefault("Csc2DSegmentMaker", result.popToolsAndMerge(
866 Csc2dSegmentMakerCfg(flags)) if flags.Detector.GeometryCSC else "")
867 kwargs.setdefault("Csc4DSegmentMaker", result.popToolsAndMerge(
868 Csc4dSegmentMakerCfg(flags)) if flags.Detector.GeometryCSC else "")
869
870 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(
871 MuonPRDSelectionToolCfg(flags)))
872 kwargs.setdefault("SegmentMaker", result.popToolsAndMerge(
873 DCMathSegmentMakerCfg(flags, name="DCMathSegmentMaker")))
874 kwargs.setdefault("NSWMuonClusterSegmentFinderTool",
875 result.popToolsAndMerge(MuonNSWSegmentFinderToolCfg(flags, name="MuonNSWSegmentFinderTool")))
876
877
878 from AthenaConfiguration.Enums import LHCPeriod
879 if flags.GeoModel.Run < LHCPeriod.Run3 or flags.Muon.MuonTrigger:
880 kwargs.setdefault("InSegmentContainer", "")
881 kwargs.setdefault("MuonLayerSegmentMatchingTool", "")
882 else:
883 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
885 tool = CompFactory.Muon.MuonLayerSegmentFinderTool(name, **kwargs)
886 result.setPrivateTools(tool)
887 return result
888
889
890def MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", **kwargs):
891 result = AtlasExtrapolatorCfg(flags)
892 kwargs.setdefault("Extrapolator", result.popPrivateTools())
893 MuTagTool = result.getPrimaryAndMerge(MuTagMatchingToolCfg(flags))
894 kwargs.setdefault("MatchTool", MuTagTool)
895
896 tool = CompFactory.Muon.MuonLayerSegmentMatchingTool(name, **kwargs)
897 result.setPrivateTools(tool)
898 return result
899
900
901def MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs):
902 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg
903 if flags.Muon.MuonTrigger:
904 kwargs.setdefault("VertexContainer", "")
905 result = ComponentAccumulator()
906 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
907 layersegmentfindertool = result.popToolsAndMerge(
908 MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool"))
909 kwargs.setdefault("MuonLayerSegmentFinderTool", layersegmentfindertool)
910 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
912 kwargs.setdefault("MuonLayerAmbiguitySolverTool", result.popToolsAndMerge(
914 kwargs.setdefault("MuonCandidateTrackBuilderTool", result.popToolsAndMerge(
916 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
917 kwargs.setdefault("TrackSummaryTool", result.popToolsAndMerge(
918 MuonCombinedTrackSummaryToolCfg(flags)))
919 kwargs.setdefault("MuonTrackBuilder", result.popToolsAndMerge(
921 kwargs.setdefault("TrackAmbiguityProcessor",
922 result.popToolsAndMerge(MuonAmbiProcessorCfg(flags)))
923
924 tool = CompFactory.MuonCombined.MuonInsideOutRecoTool(name, **kwargs)
925 result.setPrivateTools(tool)
926 return result
927
928
929def MuonCandidateTrackBuilderToolCfg(flags, name="MuonCandidateTrackBuilderTool", **kwargs):
930 result = CombinedMuonTrackBuilderCfg(flags)
931 kwargs.setdefault("MuonTrackBuilder", result.popPrivateTools())
932 muoncandidatetrackbuilder = CompFactory.Muon.MuonCandidateTrackBuilderTool(
933 name, **kwargs)
934 result.setPrivateTools(muoncandidatetrackbuilder)
935 return result
936
937
938def MuonSegmentSelectionToolCfg(flags, name="MuonSegmentSelectionTool", **kwargs):
939 if flags.Input.isMC is False:
940 kwargs.setdefault("GoodADCFractionCut", 0.5)
941 kwargs.setdefault("MinADCPerSegmentCut", 100)
942 result = ComponentAccumulator()
943 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
944 MuonEDMPrinterToolCfg(flags)))
945 muon_segment_hit_summary_tool = result.popToolsAndMerge(
947 kwargs.setdefault("MuonSegmentHitSummaryTool",
948 muon_segment_hit_summary_tool)
949 result.addPublicTool(muon_segment_hit_summary_tool)
950
951 result.setPrivateTools(
952 CompFactory.Muon.MuonSegmentSelectionTool(name, **kwargs))
953 return result
954
955
956def MuonLayerAmbiguitySolverToolCfg(flags, name="MuonLayerAmbiguitySolverTool", **kwargs):
957 from MuonConfig.MuonTrackBuildingConfig import MuonSegmentMatchingToolCfg, MooTrackBuilderCfg
958 result = MuonSegmentSelectionToolCfg(flags)
959 kwargs.setdefault("MuonSegmentSelectionTool", result.popPrivateTools())
960 kwargs.setdefault("MuonSegmentMatchingTool", result.popToolsAndMerge(
961 MuonSegmentMatchingToolCfg(flags, name='MuonSegmentMatchingToolTight', TightSegmentMatching=True)))
962
963 kwargs.setdefault("MuonSegmentTrackBuilder",
964 result.popToolsAndMerge(MooTrackBuilderCfg(flags, name='MooMuonTrackBuilder', prefix='MuSt_')))
965 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(
966 MuonEDMPrinterToolCfg(flags)))
967
968 result.setPrivateTools(
969 CompFactory.Muon.MuonLayerAmbiguitySolverTool(name, **kwargs))
970 return result
971
972
973def MdtDriftCircleOnTrackCreatorStauCfg(flags, name="MdtDriftCircleOnTrackCreatorStau", **kwargs):
974 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg, MdtCalibWindowNumber, MdtCalibToolForRotsCfg
975 result = ComponentAccumulator()
976 kwargs.setdefault("TimingMode", 3)
977 kwargs.setdefault("CalibrationTool", result.popToolsAndMerge(MdtCalibToolForRotsCfg(flags, TimeWindowSetting = MdtCalibWindowNumber('Collision_t0fit') )) )
978 the_tool = result.popToolsAndMerge(MdtDriftCircleOnTrackCreatorCfg(flags, name, **kwargs))
979 result.setPrivateTools(the_tool)
980 return result
981
982
983def MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs):
984 # In the old configuration this was split over several functions. But since these Stau tools are only used here,
985 # trying a new approach. We can always refactorise later if necessary.
986 from MuonConfig.MuonSegmentFindingConfig import DCMathSegmentMakerCfg, MuonPRDSelectionToolCfg
987 from MuonConfig.MuonTrackBuildingConfig import MuonChamberHoleRecoveryToolCfg
988 from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg, MuonSeededSegmentFinderCfg
989 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig import MdtDriftCircleOnTrackCreatorCfg
990 from MuonConfig.MuonSegmentFindingConfig import MuonLayerHoughAlgCfg
991 kwargs.setdefault("DoSummary", flags.Muon.printSummary)
992 kwargs.setdefault("ConsideredPDGs", [13, -13, 1000015, -1000015])
993 kwargs.setdefault("DoTruth", flags.Input.isMC)
994 kwargs.setdefault("AddMDTExtrasMuGirlLowBeta", flags.MuonCombined.addMDTExtrasMuGirlLowBeta)
995
996 result = ComponentAccumulator()
997 result.merge(MuonLayerHoughAlgCfg(flags))
998 # Not setting up MuonIdHelperSvc nor MuonEDMHelperSvc
999 kwargs.setdefault("MuonEDMPrinterTool", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
1000 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(MuonPRDSelectionToolCfg(flags)))
1001
1002 # This is going to be used in a few tools below
1003 staurotcreator = result.popToolsAndMerge(MdtDriftCircleOnTrackCreatorStauCfg(flags))
1004 kwargs.setdefault("MuonPRDSelectionToolStau",
1005 result.popToolsAndMerge(MuonPRDSelectionToolCfg(flags,
1006 "MuonPRDSelectionToolStau",
1007 MdtDriftCircleOnTrackCreator=staurotcreator)))
1008
1009 segmentmaker = result.popToolsAndMerge(DCMathSegmentMakerCfg(
1010 flags, name="DCMathStauSegmentMaker", MdtCreator=staurotcreator))
1011 # segmentmaker also used by MuonSeededSegmentFinder below
1012 kwargs.setdefault("MuonSegmentMaker", segmentmaker)
1013 kwargs.setdefault("MuonSegmentMakerT0Fit", result.popToolsAndMerge(DCMathSegmentMakerCfg(
1014 flags, name="DCMathT0FitSegmentMaker", doSegmentT0Fit=True)))
1015 # ^ doSegmentT0Fit overrides several defaults, including MdtCreatorT0 and MdtSegmentFinder
1016
1017 kwargs.setdefault("MuonLayerSegmentMatchingTool", result.popToolsAndMerge(
1019
1020 # Not configuring MuonRecoValidationTool as it is off by default, but it would need configuring if used
1021 kwargs.setdefault("TrackAmbiguityProcessor",
1022 result.popToolsAndMerge(MuonAmbiProcessorCfg(flags)))
1023 # I don't believe MuonHitTimingTool needs configuration.
1024 kwargs.setdefault("MuonPRDSelectionTool", result.popToolsAndMerge(
1025 MuonPRDSelectionToolCfg(flags)))
1026 kwargs.setdefault("MuonPRDSelectionToolStau", result.popToolsAndMerge(
1027 MuonPRDSelectionToolCfg(flags, MdtDriftCircleOnTrackCreator=staurotcreator)))
1028 kwargs.setdefault("MdtDriftCircleOnTrackCreator", result.popToolsAndMerge(
1029 MdtDriftCircleOnTrackCreatorCfg(flags)))
1030 kwargs.setdefault("MdtDriftCircleOnTrackCreatorStau", staurotcreator)
1031 # Now setup MuonInsideOutRecoTool property of MuonStauRecoTool. Long chain here! Could split for clarity. Another option would be to have a Stau flag on
1032 # shared tool functions.
1033 chamberholerecoverytool = result.popToolsAndMerge(MuonChamberHoleRecoveryToolCfg(flags,
1034 sTgcPrepDataContainer="",
1035 MMPrepDataContainer=""))
1036 seededsegmentfinder = result.popToolsAndMerge(MuonSeededSegmentFinderCfg(flags, name="MuonStauSeededSegmentFinder", MdtRotCreator=staurotcreator,
1037 SegmentMaker=segmentmaker, SegmentMakerNoHoles=segmentmaker))
1038 fitter = result.popToolsAndMerge(CombinedMuonTrackBuilderFitCfg(
1039 flags, name="CombinedStauTrackBuilderFit", MdtRotCreator=staurotcreator))
1040 from TrkConfig.TrkTrackSummaryToolConfig import MuonCombinedTrackSummaryToolCfg
1041 muon_combined_track_summary = result.popToolsAndMerge(
1042 MuonCombinedTrackSummaryToolCfg(flags))
1043 muidsegmentregionrecovery = result.popToolsAndMerge(MuonSegmentRegionRecoveryToolCfg(flags, name="MuonStauSegmentRegionRecoveryTool", SeededSegmentFinder=seededsegmentfinder,
1044 RecoverMM=False, RecoverSTGC=False, MMRegionSelector="", STGCRegionSelector="",
1045 ChamberHoleRecoveryTool=chamberholerecoverytool, Fitter=fitter, TrackSummaryTool=muon_combined_track_summary))
1046 trackbuilder = result.popToolsAndMerge(CombinedMuonTrackBuilderCfg(
1047 flags, name="CombinedStauTrackBuilder", MdtRotCreator=staurotcreator, MuonHoleRecovery=muidsegmentregionrecovery))
1048 muoncandidatetrackbuilder = CompFactory.Muon.MuonCandidateTrackBuilderTool(
1049 name="MuonStauCandidateTrackBuilderTool", MuonTrackBuilder=trackbuilder)
1050 kwargs.setdefault("MuonInsideOutRecoTool", result.popToolsAndMerge(
1051 MuonInsideOutRecoToolCfg(flags, name='MuonStauInsideOutRecoTool', MuonCandidateTrackBuilderTool=muoncandidatetrackbuilder)))
1052 # Rest
1053
1054 tool = CompFactory.MuonCombined.MuonStauRecoTool(name, **kwargs)
1055 result.setPrivateTools(tool)
1056 return result
1057
1058
1059def MuonSystemExtensionToolCfg(flags, **kwargs):
1060 result = ComponentAccumulator()
1061
1062 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
1063 from MuonConfig.MuonRecToolsConfig import MuonEDMPrinterToolCfg
1064
1065 kwargs.setdefault("Extrapolator", result.popToolsAndMerge(AtlasExtrapolatorCfg(flags)))
1066 kwargs.setdefault("Printer", result.addPublicTool(result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags))) )
1067 kwargs.setdefault("ParticleCaloExtensionTool",
1068 result.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags,
1069 name='MuonParticleCaloExtensionTool')))
1070
1071
1072 muon_ext_tool = CompFactory.Muon.MuonSystemExtensionTool("MuonSystemExtensionTool", **kwargs)
1073 result.setPrivateTools(muon_ext_tool)
1074 return result
1075
1076
1077def MuTagMatchingToolCfg(flags, name='MuTagMatchingTool', **kwargs):
1078 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
1079 from TrkConfig.TrkExRungeKuttaPropagatorConfig import RungeKuttaPropagatorCfg
1080
1081 #TODO: defaults in cxx
1082 kwargs.setdefault("AssumeLocalErrors", True)
1083 kwargs.setdefault("PhiCut", 30.)
1084 kwargs.setdefault("GlobalPhiCut", 1.)
1085 kwargs.setdefault("ThetaCut", 5.)
1086 kwargs.setdefault("GlobalThetaCut", 0.5)
1087 kwargs.setdefault("ThetaAngleCut", 5.)
1088 kwargs.setdefault("DoDistanceCut", True)
1089 kwargs.setdefault("CombinedPullCut", 3.0)
1090
1091 result = AtlasExtrapolatorCfg(flags)
1092 kwargs.setdefault("IExtrapolator", result.popPrivateTools())
1093 kwargs.setdefault("Propagator", result.popToolsAndMerge(
1094 RungeKuttaPropagatorCfg(flags)))
1095 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
1096 MuonEDMPrinterToolCfg(flags)))
1097 kwargs.setdefault("MuonSegmentHitSummary", result.popToolsAndMerge(
1099 kwargs.setdefault("MuonSegmentSelection", result.popToolsAndMerge(
1101
1102 if "ResidualPullCalculator" not in kwargs:
1103 from TrkConfig.TrkResidualPullCalculatorConfig import (
1104 ResidualPullCalculatorCfg)
1105 kwargs.setdefault("ResidualPullCalculator", result.popToolsAndMerge(
1106 ResidualPullCalculatorCfg(flags)))
1107
1108 from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import (
1109 TrackingGeometryCondAlgCfg)
1110 acc = TrackingGeometryCondAlgCfg(flags)
1111 geom_cond_key = acc.getPrimary().TrackingGeometryWriteKey
1112 result.merge(acc)
1113 kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)
1114
1115 tool = CompFactory.MuTagMatchingTool(name, **kwargs)
1116
1117 result.addPublicTool(tool, primary=True)
1118 return result
1119
1120
1121def MuTagAmbiguitySolverToolCfg(flags, name='MuTagAmbiguitySolverTool', **kwargs):
1122 from MuonConfig.MuonTrackBuildingConfig import MuonSegmentMatchingToolCfg
1123 #TODO: defaults in cxx
1124 kwargs.setdefault("RejectOuterEndcap", True)
1125 kwargs.setdefault("RejectMatchPhi", True)
1126 result = ComponentAccumulator()
1127 kwargs.setdefault("Printer", result.getPrimaryAndMerge(MuonEDMPrinterToolCfg(flags)))
1128 kwargs.setdefault("MuonSegmentMatchingTool", result.popToolsAndMerge(
1129 MuonSegmentMatchingToolCfg(flags, name='MuonSegmentMatchingTool', doPhiMatching=False)))
1130 # EJWM. Not sure where doPhiMatching is set to False in old, but this is what I see in configuration diffs
1131
1132 tool = CompFactory.MuTagAmbiguitySolverTool(name, **kwargs)
1133 result.addPublicTool(tool, primary=True)
1134 return result
1135
1136
1137def MuonSegmentTagToolCfg(flags, name="MuonSegmentTagTool", **kwargs):
1138 result = ComponentAccumulator()
1139 mu_tag_matching = result.getPrimaryAndMerge(MuTagMatchingToolCfg(flags))
1140 kwargs.setdefault("MuTagMatchingTool", mu_tag_matching)
1141
1142 kwargs.setdefault("Printer", result.getPrimaryAndMerge(
1143 MuonEDMPrinterToolCfg(flags)))
1144 kwargs.setdefault("MuTagAmbiguitySolverTool", result.getPrimaryAndMerge(
1146 kwargs.setdefault("MuonSegmentSelectionTool", result.getPrimaryAndMerge(
1148 kwargs.setdefault("MuonSegmentHitSummaryTool", result.getPrimaryAndMerge(
1150
1151 result.setPrivateTools(
1152 CompFactory.MuonCombined.MuonSegmentTagTool(name, **kwargs))
1153 return result
AlgTool returning the parametrized value for the calorimeter energy deposited by a traversing muon.
MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs)
MuTagMatchingToolCfg(flags, name='MuTagMatchingTool', **kwargs)
MuonInDetForwardCandidateToolCfg(flags, name='InDetForwardCandidateTool', **kwargs)
MuidCaloTrackStateOnSurfaceParamCfg(flags, name='MuidCaloTrackStateOnSurfaceParam', **kwargs)
MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs)
MuonCombinedFitTagToolCfg(flags, name="MuonCombinedFitTagTool", **kwargs)
MuonMaterialProviderToolCfg(flags, name="MuonTrkMaterialProviderTool", **kwargs)
MuidMuonRecoveryCfg(flags, name='MuidMuonRecovery', **kwargs)
MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kwargs)
MuonSegmentConverterToolCfg(flags, name="MuonSegmentConverterTool", **kwargs)
MuidTrackIsolationCfg(flags, name='MuidTrackIsolation', **kwargs)
MuidCaloTrackStateOnSurfaceCfg(flags, name='MuidCaloTrackStateOnSurface', **kwargs)
MuidMaterialAllocatorCfg(flags, name='MuidMaterialAllocator', **kwargs)
MuidCaloEnergyParam(flags, name='MuidCaloEnergyParam', **kwargs)
MuonCombinedToolCfg(flags, name="MuonCombinedTool", **kwargs)
MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", **kwargs)
MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool", **kwargs)
MuonCreatorToolCfg(flags, name="MuonCreatorTool", **kwargs)
MuidMaterialEffectsOnTrackProviderCfg(flags, name='MuidMaterialEffectsOnTrackProvider', **kwargs)
MuonTrackQueryCfg(flags, name="MuonTrackQuery", **kwargs)
MuonCandidateTrackBuilderToolCfg(flags, name="MuonCandidateTrackBuilderTool", **kwargs)
MuidCaloEnergyMeasCfg(flags, name='MuidCaloEnergyMeas', **kwargs)
MuonCaloTagToolCfg(flags, name='MuonCaloTagTool', **kwargs)
MuonSegmentSelectionToolCfg(flags, name="MuonSegmentSelectionTool", **kwargs)
MdtDriftCircleOnTrackCreatorStauCfg(flags, name="MdtDriftCircleOnTrackCreatorStau", **kwargs)
iPatSLFitterCfg(flags, name='iPatSLFitter', **kwargs)
MuonSegmentHitSummaryToolCfg(flags, name="MuonSegmentHitSummaryTool", **kwargs)
InDetCandidateToolCfg(flags, name="InDetCandidateTool", **kwargs)
TrackDepositInCaloToolCfg(flags, name='TrackDepositInCaloTool', **kwargs)
MuonCandidateToolCfg(flags, name="MuonCandidateTool", **kwargs)
MuidErrorOptimisationToolCfg(flags, name='MuidErrorOptimisationTool', **kwargs)
MuidCaloEnergyToolCfg(flags, name='MuidCaloEnergyTool', **kwargs)
MuidMaterialEffectsOnTrackProviderParamCfg(flags, name='MuidMaterialEffectsOnTrackProviderParam', **kwargs)
MuonSegmentTagToolCfg(flags, name="MuonSegmentTagTool", **kwargs)
ExtrapolateMuonToIPToolCfg(flags, name="ExtrapolateMuonToIPTool", **kwargs)
MuonAlignmentUncertToolThetaCfg(flags, name="MuonAlignmentUncertToolTheta", **kwargs)
CaloMuonScoreToolCfg(flags, name='CaloMuonScoreTool', **kwargs)
MuonLayerAmbiguitySolverToolCfg(flags, name="MuonLayerAmbiguitySolverTool", **kwargs)
CaloMuonTagCfg(flags, name="CaloMuonTag", **kwargs)
CombinedMuonTagTestToolCfg(flags, name='CombinedMuonTagTestTool', **kwargs)
MuonDressingToolCfg(flags, name="MuonDressingTool", **kwargs)
MuidCaloEnergyToolParamCfg(flags, name='MuidCaloEnergyToolParam', **kwargs)
MuTagAmbiguitySolverToolCfg(flags, name='MuTagAmbiguitySolverTool', **kwargs)
CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', **kwargs)
MuonCaloEnergyToolCfg(flags, name="MuonCaloEnergyTool", **kwargs)
CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs)
MuonInsideOutRecoToolCfg(flags, name="MuonInsideOutRecoTool", **kwargs)
MuonCombinedDebuggerToolCfg(flags, name="MuonCombinedDebuggerTool", **kwargs)
iPatFitterCfg(flags, name='iPatFitter', **kwargs)
MuonAlignmentUncertToolPhiCfg(flags, name="MuonAlignmentUncertToolPhi", **kwargs)
MuonStauRecoToolCfg(flags, name="MuonStauRecoTool", **kwargs)