示例#1
0
def MuonLayerAmbiguitySolverToolCfg(flags, name="MuonLayerAmbiguitySolverTool", **kwargs):
    result = MuonSegmentSelectionToolCfg(flags)
    segment_selection_tool = result.popPrivateTools()
    kwargs.setdefault("MuonSegmentSelectionTool",segment_selection_tool)
    result.addPublicTool(segment_selection_tool)

    from MuonConfig.MuonTrackBuildingConfig import MuonSegmentMatchingToolCfg
    acc = MuonSegmentMatchingToolCfg(flags)
    muon_segment_matching = acc.popPrivateTools()
    kwargs.setdefault("MuonSegmentMatchingTool", muon_segment_matching)
    acc.addPublicTool(muon_segment_matching)
    result.merge(acc)

    from MuonConfig.MuonTrackBuildingConfig import MooTrackBuilderCfg
    acc = MooTrackBuilderCfg(flags)
    muon_segment_track_builder = acc.popPrivateTools()
    kwargs.setdefault("MuonSegmentTrackBuilder", muon_segment_track_builder)
    acc.addPublicTool(muon_segment_track_builder)
    result.merge(acc)

    kwargs.setdefault("MuonEDMPrinterTool", MuonEDMPrinterTool(flags) ) 

    result.setPrivateTools(CompFactory.Muon.MuonLayerAmbiguitySolverTool(name, **kwargs))
    
    return result
示例#2
0
def MooCandidateMatchingToolCfg(flags,
                                name="MooCandidateMatchingTool",
                                doSegmentPhiMatching=True,
                                **kwargs):
    Muon__MooCandidateMatchingTool = CompFactory.Muon.MooCandidateMatchingTool
    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
    from MuonConfig.MuonRecToolsConfig import MuonExtrapolatorCfg

    result = ComponentAccumulator()

    # Won't explicitly configure MuonEDMHelperSvc
    kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags))

    acc = MuonExtrapolatorCfg(flags, name="MuonStraightLineExtrapolator")
    slextrap = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("SLExtrapolator", slextrap)

    acc = AtlasExtrapolatorCfg(flags)
    extrap = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("Extrapolator", extrap)

    acc = MuonSegmentMatchingToolCfg(flags, doPhiMatching=doSegmentPhiMatching)
    muon_seg_matching = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("SegmentMatchingTool", muon_seg_matching)

    acc = MuonSegmentMatchingToolCfg(flags,
                                     name="MuonSegmentMatchingToolTight",
                                     TightSegmentMatching=True,
                                     doPhiMatching=doSegmentPhiMatching)
    muon_seg_matching_tight = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("SegmentMatchingToolTight", muon_seg_matching_tight)

    kwargs.setdefault("DoTrackSegmentMatching",
                      flags.Muon.useTrackSegmentMatching)
    kwargs.setdefault("RequireSameSide", flags.Beam.Type != 'collisions')
    if flags.Muon.useAlignmentCorrections:
        kwargs.setdefault("AlignmentErrorPosX", 5.0)
        kwargs.setdefault("AlignmentErrorPosY", 0.2)
        kwargs.setdefault("AlignmentErrorAngleX", 0.002)
        kwargs.setdefault("AlignmentErrorAngleY", 0.001)

    else:  # no alignment corrections
        kwargs.setdefault("AlignmentErrorPosX", 10.0)
        kwargs.setdefault("AlignmentErrorPosY", 5.0)
        kwargs.setdefault("AlignmentErrorAngleX", 0.004)
        kwargs.setdefault("AlignmentErrorAngleY", 0.002)

    acc = MuPatCandidateToolCfg(flags)
    cand_tool = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("MuPatCandidateTool", cand_tool)

    moo_cand_matching_tool = Muon__MooCandidateMatchingTool(name, **kwargs)
    result.setPrivateTools(moo_cand_matching_tool)
    return result
示例#3
0
def MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool",**kwargs):
    from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
    result = ParticleCaloExtensionToolCfg(flags)
    kwargs.setdefault("ParticleCaloExtensionTool", result.getPrimary() )  
    kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) )
    tool = CompFactory.MuonCombined.MuonCombinedStacoTagTool(name,**kwargs)
    result.setPrivateTools(tool)
    return result 
示例#4
0
def Csc2dSegmentMakerCfg(flags, name="Csc2dSegmentMaker", **kwargs):
    Csc2dSegmentMaker = CompFactory.Csc2dSegmentMaker
    result = ComponentAccumulator()
    if 'segmentTool' not in kwargs:
        acc = CscSegmentUtilToolCfg(flags)
        csc_segment_util_tool = acc.getPrimary()
        result.addPublicTool(csc_segment_util_tool)
        kwargs.setdefault('segmentTool', csc_segment_util_tool)
        result.merge(acc)

    kwargs.setdefault("printerTool", MuonEDMPrinterTool(flags))

    csc_segment_maker = Csc2dSegmentMaker(name=name, **kwargs)
    result.setPrivateTools(csc_segment_maker)

    return result
示例#5
0
def MuPatCandidateToolCfg(flags, name="MuPatCandidateTool", **kwargs):
    Muon__MuPatCandidateTool = CompFactory.Muon.MuPatCandidateTool
    # https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuPatTools.py#L32
    from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg
    result = MdtDriftCircleOnTrackCreatorCfg(flags)
    mdt_dcot_creator = result.getPrimary()
    kwargs.setdefault("MdtRotCreator", mdt_dcot_creator)

    acc = CscClusterOnTrackCreatorCfg(flags)
    csc_cluster_creator = acc.popPrivateTools()
    result.merge(acc)
    kwargs.setdefault("CscRotCreator", csc_cluster_creator)

    kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags))

    mu_pat_cand_tool = Muon__MuPatCandidateTool(name, **kwargs)
    result.setPrivateTools(mu_pat_cand_tool)
    return result
示例#6
0
def MuidTrackCleanerCfg(flags, name='MuidTrackCleaner', **kwargs ):
    if flags.Beam.Type == 'cosmics':
        kwargs.setdefault("PullCut"     , 5.0)
        kwargs.setdefault("PullCutPhi"  , 10.0)
    else:
        kwargs.setdefault("PullCut"     , 4.0)
        kwargs.setdefault("PullCutPhi"  , 4.0)

    if flags.Muon.MuonTrigger:
        kwargs.setdefault("Iterate", False)
        kwargs.setdefault("RecoverOutliers", False)
    result = iPatFitterCfg(flags)
    kwargs.setdefault("Fitter"      , result.popPrivateTools() )
    acc= iPatSLFitterCfg(flags)
    kwargs.setdefault("SLFitter"    , acc.popPrivateTools() )
    result.merge(acc)
  
    kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) )

    tool = CompFactory.Muon.MuonTrackCleaner(name,**kwargs) #FIXME this is also in MuonConfig - check to see whether we can just use this.
    result.setPrivateTools(tool)
    return result
示例#7
0
def MuonCandidateToolCfg(flags, name="MuonCandidateTool",**kwargs):
    from MuonConfig.MuonRecToolsConfig import MuonAmbiProcessorCfg

    kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) )

    result = CombinedMuonTrackBuilderCfg(flags, name="CombinedMuonTrackBuilder")
    kwargs.setdefault("TrackBuilder", result.popPrivateTools() )
    #   Why was this dependent on cosmics? will now always create this 
    #   if flags.Beam.Type=="cosmics":
    if flags.Muon.MuonTrigger and flags.Beam.Type!="cosmics":
        #trigger definitely only uses the ExtrapolateToIPtool in cosmics mode
        kwargs.setdefault("TrackExtrapolationTool", "")
    else:
        acc = ExtrapolateMuonToIPToolCfg(flags)
        extrapolator = acc.popPrivateTools()
        result.addPublicTool(extrapolator)
        kwargs.setdefault("TrackExtrapolationTool", extrapolator )
        result.merge(acc)
#   if cosmics was until here

    acc = MuonAmbiProcessorCfg(flags)
    ambiguityprocessor = acc.popPrivateTools()
    result.addPublicTool(ambiguityprocessor)

    kwargs.setdefault("AmbiguityProcessor", ambiguityprocessor )
    result.merge(acc)

    from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryToolCfg
    acc = MuonTrackSummaryToolCfg(flags)
    track_summary = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("TrackSummaryTool",  track_summary)


    if flags.Beam.Type=="cosmics":
        kwargs.setdefault("ExtrapolationStrategy", 1 )
    tool = CompFactory.MuonCombined.MuonCandidateTool(name,**kwargs)
    result.setPrivateTools(tool)
    return result 
示例#8
0
def MooTrackBuilderCfg(flags, name="MooTrackBuilderTemplate", **kwargs):
    Muon__MooTrackBuilder = CompFactory.Muon.MooTrackBuilder
    Trk__STEP_Propagator = CompFactory.Trk.STEP_Propagator
    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg, TriggerChamberClusterOnTrackCreatorCfg
    from MuonConfig.MuonRecToolsConfig import MuonTrackToSegmentToolCfg
    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg

    # Based on this: https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MooreTools.py#L221
    # ignoring all the name_prefix stuff for the moment, since I'm not sure it's necessary any more.
    result = MooTrackFitterCfg(flags)
    moo_track_fitter = result.getPrimary()
    result.addPublicTool(moo_track_fitter)
    kwargs.setdefault("Fitter", moo_track_fitter)

    # Now setup SL fitter (MooSLTrackFitter as defined here:
    # https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecExampleConfigDb.py#L203)
    acc = MCTBFitterCfg(flags, name='MCTBSLFitter', StraightLine=True)
    mctbslfitter = acc.getPrimary()
    result.addPublicTool(mctbslfitter)
    result.merge(acc)

    # Just take the default configuration, as per https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecExampleConfigDb.py#L56
    # FIXME - this should be updated once there is a proper CA implementation for the STEP_Propagator
    prop = Trk__STEP_Propagator(name='MuonStraightLinePropagator')
    result.addPublicTool(prop)

    # TODO - check why Fitter and FitterPreFit are identical
    acc = MooTrackFitterCfg(flags,
                            name="MooSLTrackFitter",
                            Fitter=mctbslfitter,
                            FitterPreFit=mctbslfitter,
                            Propagator=prop,
                            ReducedChi2Cut=10.0,
                            SLFit=True)
    moo_sl_track_fitter = acc.getPrimary()
    result.addPublicTool(moo_sl_track_fitter)
    result.merge(acc)

    kwargs.setdefault("SLFitter", moo_sl_track_fitter)
    kwargs.setdefault(
        "RecalibrateMDTHitsOnTrack",
        ((not flags.Muon.doSegmentT0Fit) and flags.Beam.Type == 'collisions'))

    acc = MuonSeededSegmentFinderCfg(flags)
    muon_seeded_segment_finder = acc.getPrimary()
    result.addPublicTool(muon_seeded_segment_finder)
    result.merge(acc)
    kwargs.setdefault("SeededSegmentFinder", muon_seeded_segment_finder)

    acc = MdtDriftCircleOnTrackCreatorCfg(flags)
    mdt_dcot_creator = acc.getPrimary()
    kwargs.setdefault("MdtRotCreator", mdt_dcot_creator)
    result.merge(acc)

    acc = TriggerChamberClusterOnTrackCreatorCfg(flags)
    muon_comp_cluster_creator = acc.getPrimary()
    kwargs.setdefault("CompetingClustersCreator", muon_comp_cluster_creator)
    result.merge(acc)

    acc = MuonSTEP_PropagatorCfg(flags)
    muon_prop = acc.getPrimary()
    kwargs.setdefault("Propagator", muon_prop)
    result.merge(acc)

    acc = MuonChamberHoleRecoveryToolCfg(flags)
    hole_recovery_tool = acc.getPrimary()
    result.addPublicTool(hole_recovery_tool)
    result.merge(acc)
    kwargs.setdefault("HitRecoveryTool", hole_recovery_tool)
    kwargs.setdefault("ChamberHoleRecoveryTool",
                      hole_recovery_tool)  # FIXME? Remove duplicate from cxx?

    acc = MagneticFieldSvcCfg(flags)
    result.merge(acc)

    acc = MuonTrackToSegmentToolCfg(flags)
    track_to_segment_tool = acc.getPrimary()
    kwargs.setdefault("TrackToSegmentTool", track_to_segment_tool)
    result.merge(acc)

    kwargs.setdefault("Printer", MuonEDMPrinterTool(flags))

    # FIXME - remove ErrorOptimisationTool from cxx?
    # declareProperty("ErrorOptimisationTool","" );

    acc = MuPatCandidateToolCfg(flags)
    cand_tool = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("CandidateTool", cand_tool)

    acc = MooCandidateMatchingToolCfg(flags)
    track_segment_matching_tool = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("CandidateMatchingTool", track_segment_matching_tool)

    from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryToolCfg
    acc = MuonTrackSummaryToolCfg(flags)
    track_summary = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("TrackSummaryTool", track_summary)

    builder = Muon__MooTrackBuilder(name, **kwargs)
    result.setPrivateTools(builder)
    return result
示例#9
0
def MooTrackFitterCfg(flags, name='MooTrackFitter', **kwargs):
    # Based on https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MooreTools.py#L179
    # (Tons of explicit configuration missing from there though)
    Muon__MooTrackFitter = CompFactory.Muon.MooTrackFitter
    MuonSegmentMomentum = CompFactory.MuonSegmentMomentum
    from MuonConfig.MuonRecToolsConfig import MuonPhiHitSelector, MuonTrackToSegmentToolCfg, MuonTrackSummaryHelperToolCfg, MuPatHitToolCfg
    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg

    result = MCTBFitterCfg(flags)
    mctb_fitter = result.getPrimary()
    result.addPublicTool(mctb_fitter)
    kwargs.setdefault("Fitter", mctb_fitter)
    kwargs.setdefault("FitterPreFit", mctb_fitter)

    # FIXME MuPatHitTool currently isn't configured, but should be.
    MuPatHitToolCfg
    acc = MuPatHitToolCfg(flags)
    mu_pat_hit_tool = acc.getPrimary()
    result.addPublicTool(mu_pat_hit_tool)
    result.merge(acc)
    kwargs.setdefault("HitTool", mu_pat_hit_tool)

    acc = MuonSTEP_PropagatorCfg(flags)
    muon_prop = acc.getPrimary()
    result.addPublicTool(muon_prop)
    result.merge(acc)

    kwargs.setdefault("Propagator", muon_prop)
    # kwargs.setdefault("SLFit" ,          ) # Was "not jobproperties.BField.allToroidOn()" but do not have access to Field here.
    kwargs.setdefault("ReducedChi2Cut", flags.Muon.Chi2NDofCut)

    momentum_estimator = ""
    if flags.Beam.Type == 'cosmics':
        momentum_estimator = MuonSegmentMomentum(DoCosmics=True)
    else:
        acc = MuonSegmentMomentumFromFieldCfg(flags)
        momentum_estimator = acc.getPrimary()
        result.merge(acc)

    result.addPublicTool(momentum_estimator)
    kwargs.setdefault("SegmentMomentum", momentum_estimator)

    kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags))

    acc = MuonTrackToSegmentToolCfg(flags)
    track_to_segment_tool = acc.getPrimary()
    kwargs.setdefault("TrackToSegmentTool", track_to_segment_tool)
    result.merge(acc)

    acc = MdtDriftCircleOnTrackCreatorCfg(flags)
    mdt_dcot_creator = acc.getPrimary()
    kwargs.setdefault("MdtRotCreator", mdt_dcot_creator)
    result.merge(acc)

    kwargs.setdefault("PhiHitSelector", MuonPhiHitSelector(flags))

    acc = MuonTrackCleanerCfg(flags)
    track_cleaner = acc.getPrimary()
    result.merge(acc)
    result.addPublicTool(track_cleaner)
    kwargs.setdefault("TrackCleaner", track_cleaner)
    # Leaving "SegmentInOverlapTool" as default, which is what happens in the current configuration.

    acc = MuonTrackSummaryHelperToolCfg(flags)
    track_summary_helper = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("TrackSummaryTool", track_summary_helper)

    kwargs.setdefault("CleanPhiHits", True)
    kwargs.setdefault("UsePreciseHits", True)
    kwargs.setdefault("UsePrefit", False)
    kwargs.setdefault("SeedAtStartOfTrack", False)

    fitter = Muon__MooTrackFitter(name, **kwargs)
    result.setPrivateTools(fitter)
    return result
示例#10
0
def DCMathSegmentMakerCfg(flags, **kwargs):
    TrkDriftCircleMath__MdtSegmentT0Fitter = CompFactory.TrkDriftCircleMath.MdtSegmentT0Fitter
    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg, MuonClusterOnTrackCreatorCfg, TriggerChamberClusterOnTrackCreatorCfg
    from MuonConfig.MuonCondAlgConfig import MdtCondDbAlgCfg

    # This in general is a pretty problematic piece of code. It seems to have a lot of potential issues, because it has loads of mutables / subtools etc
    # https://gitlab.cern.ch/atlas/athena/blob/master/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/DCMathSegmentMaker/src/DCMathSegmentMaker.h
    # ToolHandle<IMdtDriftCircleOnTrackCreator> m_mdtCreator;         //<! mdt rio ontrack creator
    # ToolHandle<IMdtDriftCircleOnTrackCreator> m_mdtCreatorT0;       //<! mdt rio ontrack creator
    # ToolHandle<IMuonClusterOnTrackCreator>    m_clusterCreator;     //<! cluster rio ontrack creator
    # ToolHandle<IMuonCompetingClustersOnTrackCreator> m_compClusterCreator;   //<! competing clusters rio ontrack creator
    # ToolHandle<MuonEDMPrinterTool>            m_printer;         //<! printer helper tool
    # ServiceHandle<IMuonEDMHelperSvc>          m_edmHelperSvc;          //<! printer helper tool
    # ToolHandle<IMdtSegmentFinder>             m_segmentFinder;   //<! segment finder tool MdtSegmentFinder
    # ToolHandle<IMuonSegmentFittingTool>       m_segmentFitter;   //<! segment fitting tool
    # ToolHandle<IMuonSegmentSelectionTool>     m_segmentSelectionTool; //<! segment selection tool
    # ToolHandle<IDCSLFitProvider>              m_dcslFitProvider;

    result = ComponentAccumulator()

    beamType = flags.Beam.Type
    doSegmentT0Fit = flags.Muon.doSegmentT0Fit
    updateSegmentSecondCoordinate = flags.Muon.updateSegmentSecondCoordinate
    enableCurvedSegmentFinding = flags.Muon.enableCurvedSegmentFinding

    kwargs.setdefault("RefitSegment", True)
    kwargs.setdefault("AssumePointingPhi", beamType != 'cosmics')
    kwargs.setdefault("OutputFittedT0", True)

    acc = MdtCalibDbAlgCfg(flags)  # Needed by MdtSegmentT0Fitter
    result.merge(acc)

    mdt_segment_t0_fitter = TrkDriftCircleMath__MdtSegmentT0Fitter()
    result.addPublicTool(mdt_segment_t0_fitter)
    kwargs.setdefault("DCFitProvider", mdt_segment_t0_fitter)
    #kwargs.setdefault("CurvedErrorScaling", False)
    kwargs.setdefault("UsePreciseError", True)
    kwargs.setdefault("SinAngleCut", 0.4)

    if (beamType == 'singlebeam' or beamType == 'cosmics'):
        kwargs.setdefault("SinAngleCut", 0.9)
        kwargs.setdefault("AddUnassociatedPhiHits", True)
        kwargs.setdefault("RecoverBadRpcCabling", True)
        kwargs.setdefault("CurvedErrorScaling", False)
    elif not flags.Input.isMC:  # collisions real data
        kwargs.setdefault("AddUnassociatedPhiHits", True)
        kwargs.setdefault("RecoverBadRpcCabling", True)

    if doSegmentT0Fit:
        mdt_dcot_CA = MdtDriftCircleOnTrackCreatorCfg(flags, name="MdtDriftCircleOnTrackCreatorAdjustableT0", TimingMode=3, \
                   DoTofCorrection=True, TimeWindowSetting=MdtCalibWindowNumber('Collision_data'))
        result.merge(mdt_dcot_CA)
        mdt_creator = acc.getPrimary()
        kwargs.setdefault("MdtCreatorT0",
                          mdt_creator)  # TODO - is this correct?
        mdt_math_segment_finder = MdtMathSegmentFinder(flags,
                                                       doSegmentT0Fit=True)
    else:
        mdt_math_segment_finder = MdtMathSegmentFinder(flags)

    result.addPublicTool(mdt_math_segment_finder)
    kwargs.setdefault("MdtSegmentFinder", mdt_math_segment_finder)

    if updateSegmentSecondCoordinate:
        kwargs.setdefault("UpdatePhiUsingPhiHits", True)

    if enableCurvedSegmentFinding:
        kwargs.setdefault("CurvedErrorScaling", False)
        kwargs.setdefault("PreciseErrorScale", 1)
        kwargs.setdefault("UsePreciseError", True)

    # Now stuff that wasn't explicitly configured before.

    acc = MuonStationIntersectSvcCfg(flags)
    muon_station_intersect_svc = acc.getPrimary()
    result.merge(acc)
    kwargs.setdefault("MuonStationIntersectSvc", muon_station_intersect_svc)

    acc = MdtDriftCircleOnTrackCreatorCfg(flags)
    kwargs.setdefault("MdtCreator", acc.getPrimary())
    result.merge(acc)

    acc = MuonClusterOnTrackCreatorCfg(flags)
    muon_cluster_creator = acc.getPrimary()
    result.addPublicTool(muon_cluster_creator)
    # FIXME - declare property  for muon_cluster_creator is missing from the tool.
    result.merge(acc)

    acc = TriggerChamberClusterOnTrackCreatorCfg(flags)
    muon_comp_cluster_creator = acc.getPrimary()
    result.addPublicTool(muon_comp_cluster_creator)
    result.merge(acc)

    kwargs.setdefault("MuonCompetingClustersCreator",
                      muon_comp_cluster_creator)
    acc = MuonSegmentFittingToolCfg(flags, name="MuonSegmentFittingTool")
    segment_fitter = acc.getPrimary()
    result.addPublicTool(segment_fitter)

    kwargs.setdefault("EDMPrinter", MuonEDMPrinterTool(flags))

    result.merge(acc)
    kwargs.setdefault("SegmentFitter", segment_fitter)

    segment_selector = Muon__MuonSegmentSelectionTool()
    result.addPublicTool(segment_selector)
    kwargs.setdefault("SegmentSelector", segment_selector)

    # Needs MdtCondDbData
    acc = MdtCondDbAlgCfg(flags)
    result.merge(acc)

    kwargs.setdefault(
        'TgcPrepDataContainer',
        'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC
        and not flags.Muon.useTGCPriorNextBC else 'TGC_Measurements')

    dc_segment_maker = Muon__DCMathSegmentMaker(**kwargs)
    result.setPrivateTools(dc_segment_maker)
    return result