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(
552 MuidCaloEnergyToolParamCfg(flags)))
553 kwargs.setdefault("CaloTSOS", result.popToolsAndMerge(
554 MuidCaloTrackStateOnSurfaceCfg(flags)))
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(
577 MuidMaterialAllocatorCfg(flags)))
578 kwargs.setdefault("MdtRotCreator", result.popToolsAndMerge(
579 MdtDriftCircleOnTrackCreatorCfg(flags)))
580 kwargs.setdefault("MuonRotCreator", result.popToolsAndMerge(
581 MuonClusterOnTrackCreatorCfg(flags)))
582
583
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(
606 MuonMaterialProviderToolCfg(flags)))
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
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
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