コード例 #1
0
def selMuonPParts(name, DataType, downstreamSeq):
   """
       Make ProtoParticles out of Downstream tracks
   """
   unpacker = UnpackTrack(name+"UnpackTrack")  # do we need this or is it here for historical reason ?
   unpacker.InputName="pRec/Downstream/FittedTracks"
   unpacker.OutputName="Rec/Downstream/FittedTracks"

   idalg = MuonIDAlg(name+"IDalg")
   cm=ConfiguredMuonIDs.ConfiguredMuonIDs( DataType ) #data=DaVinci().getProp("DataType"))
   cm.configureMuonIDAlg(idalg)
   idalg.TrackLocation = "Rec/Downstream/FittedTracks"
   idalg.MuonIDLocation = "Rec/Muon/MuonPID/Downstream"
   idalg.MuonTrackLocation = "Rec/Track/MuonForDownstream" # I would call it FromDownstream …but just to be »Klugscheißer«

   downprotoseq = GaudiSequencer(name+"ProtoPSeq")
   downprotos = ChargedProtoParticleMaker(name+"ProtoPMaker")
   downprotos.Inputs = ["Rec/Downstream/FittedTracks"]
   downprotos.Output = "Rec/ProtoP/"+name+"ProtoPMaker/ProtoParticles"
   downprotos.addTool( DelegatingTrackSelector, name="TrackSelector" )
   #tracktypes = [ "Long","Upstream","Downstream","Ttrack","Velo","VeloR" ] # only downstream needed …
   tracktypes = ["Downstream"]
   #if (trackcont == "Best") :
   #	tracktypes = [ "Long" ]
   downprotos.TrackSelector.TrackTypes = tracktypes
   selector = downprotos.TrackSelector
   for tsname in tracktypes:
   	selector.addTool(TrackSelector,name=tsname)
   	ts = getattr(selector,tsname)
   	# Set Cuts
   	ts.TrackTypes = [tsname]
#	ts.MinNDoF = 1 
	ts.MaxChi2Cut = 10

   addmuonpid = ChargedProtoParticleAddMuonInfo(name+"addmuoninfo")
   addmuonpid.InputMuonPIDLocation = "Rec/Muon/MuonPID/Downstream"
   addmuonpid.ProtoParticleLocation = "Rec/ProtoP/"+name+"ProtoPMaker/ProtoParticles"
   #addmuonpid.OutputLevel = 0
   combinedll = ChargedProtoCombineDLLsAlg(name+"CombineDLL")
   combinedll.ProtoParticleLocation = "Rec/ProtoP/"+name+"ProtoPMaker/ProtoParticles"
   #combinedll.OutputLevel = 0
   # DST post treatment
   #TrackToDST(name+"TrackToDST").TracksInContainer = "Rec/Downstream/Tracks"
   #downprotoseq.Members += [ TrackToDST(name+"TrackToDST"), downprotos, addmuonpid, combinedll ]
   downprotoseq.Members += [ downprotos, addmuonpid, combinedll ]
#        
   DataOnDemandSvc().AlgMap.update( {
                "/Event/Rec/Downstream/Tracks" : unpacker.getFullName(),
                "/Event/Rec/Muon/MuonPID/Downstream" : idalg.getFullName(),
#                "/Event/Rec/ProtoP/"+name+"ProtoPMaker" : downprotoseq.getFullName()
		} )

   return GSWrapper(name="WrappedDownMuonProtoPSeqFor"+name,
                    sequencer=downprotoseq,
                    output='Rec/ProtoP/' + name +'ProtoPMaker/ProtoParticles',
                    requiredSelections = [ downstreamSeq])
コード例 #2
0
    def getMuonIDSeq(self):
        """
    general method for MuonIDAlg configuration.
    Creates MuonIDAlg instance and configures it.
    Finally puts it in gaudi sequencer.
    """

        if self.debug: print "# APPLYING GENERAL MUONID CONFIGURATION"
        ## create output gaudi sequencer
        myg = GaudiSequencer("MuonIDSeq")

        ## for the new algorithm
        ## create and configure MuonIDAlgLite instance
        if (self.newAlgo
                and self.data not in ['2008', '2009', 'MC09', 'Upgrade']):
            muid = MuonIDAlgLite()
            self.configureMuonIDAlgLite(muid)
            ismutool = CommonMuonTool()
            self.configureIsMuonTool(ismutool)
            dlltool = DLLMuonTool()
            self.configureDLLMuonTool(dlltool)
            mmtool = MakeMuonTool()
            self.configureMakeMuonTool(mmtool)

            muid.addTool(ismutool)
            muid.addTool(dlltool)
            muid.addTool(mmtool)

        ## for the new algorithm
        ## create and configure MuonIDAlgLite instance
        else:
            muid = MuonIDAlg()
            self.configureMuonIDAlg(muid)

            ## if kalman_foi: add the algorithm that looks for muon hits
            if self.kalman_foi:
                mmm = MakeMuonMeasurements()
                self.configureMakeMuonMeasurements(mmm)
                myg.Members.append(mmm)

        ## add to gaudi sequencer and return
        myg.Members.append(muid)
        return myg
コード例 #3
0
    def configureMuonIDAlg(self, muonid):
        """
    general configuration of MuonIDAlg. Equivalent to old MuonID.py
    Also configures muonIDtool used as extra_info. This can either be chi2 or dist.
    Default chi2.
    """

        if self.debug: print "# CONFIGURING MUONIDALG"

        ## check if input is already an instance or this must be created
        if isinstance(muonid, MuonIDAlg): mymuid = muonid
        else: mymuid = MuonIDAlg(str(muonid))

        ## general MuonIDAlg properties
        mymuid.OverrideDB = self.info.OverrideDB

        if "UseUncrossed" in dir(self.info):
            mymuid.UseUncrossed = self.info.UseUncrossed

        mymuid.MomentumCuts = self.info.MomentumCuts
        mymuid.AllMuonTracks = self.info.AllMuonTracks
        mymuid.FindQuality = self.info.FindQuality
        mymuid.KalmanFoI = self.kalman_foi
        if "cosmics" in self.specialData:
            print "# MuonID WARNING: MuonTrack Fit disabled for SpecialData = cosmics"
            mymuid.FindQuality = False

        mymuid.XFOIParameter1 = self.info.XFOIParameter1
        mymuid.XFOIParameter2 = self.info.XFOIParameter2
        mymuid.XFOIParameter3 = self.info.XFOIParameter3
        mymuid.YFOIParameter1 = self.info.YFOIParameter1
        mymuid.YFOIParameter2 = self.info.YFOIParameter2
        mymuid.YFOIParameter3 = self.info.YFOIParameter3

        mymuid.FOIfactor = self.info.FOIfactor

        mymuid.PreSelMomentum = self.info.PreSelMomentum

        mymuid.distMuon = self.info.distMuon
        mymuid.distPion = self.info.distPion

        ## GL & SF & XCV:
        if "DLL_flag" in dir(self.info):
            mymuid.DLL_flag = self.info.DLL_flag
            if self.kalman_foi and self.info.DLL_flag == 0:
                print "# MuonID WARNING: KalmanFoi incompatible DLL_flag 0. Setting DLL_flag to 1"
                mymuid.DLL_flag = 1

        if "step" in dir(self.info): mymuid.step = self.info.step
        if "nMax_bin" in dir(self.info): mymuid.nMax_bin = self.info.nMax_bin

        #Landau's paramateres:
        #Muons - Region1:
        if "MuLandauParameterR1_1" in dir(self.info):
            mymuid.MuLandauParameterR1_1 = self.info.MuLandauParameterR1_1
        if "MuLandauParameterR1_2" in dir(self.info):
            mymuid.MuLandauParameterR1_2 = self.info.MuLandauParameterR1_2
        if "MuLandauParameterR1_3" in dir(self.info):
            mymuid.MuLandauParameterR1_3 = self.info.MuLandauParameterR1_3
        if "MuLandauParameterR1_4" in dir(self.info):
            mymuid.MuLandauParameterR1_4 = self.info.MuLandauParameterR1_4
        if "MuLandauParameterR1_5" in dir(self.info):
            mymuid.MuLandauParameterR1_5 = self.info.MuLandauParameterR1_5
        if "MuLandauParameterR1_6" in dir(self.info):
            mymuid.MuLandauParameterR1_6 = self.info.MuLandauParameterR1_6
        if "MuLandauParameterR1_7" in dir(self.info):
            mymuid.MuLandauParameterR1_7 = self.info.MuLandauParameterR1_7
        #Muons - Region2:
        if "MuLandauParameterR2_1" in dir(self.info):
            mymuid.MuLandauParameterR2_1 = self.info.MuLandauParameterR2_1
        if "MuLandauParameterR2_2" in dir(self.info):
            mymuid.MuLandauParameterR2_2 = self.info.MuLandauParameterR2_2
        if "MuLandauParameterR2_3" in dir(self.info):
            mymuid.MuLandauParameterR2_3 = self.info.MuLandauParameterR2_3
        if "MuLandauParameterR2_4" in dir(self.info):
            mymuid.MuLandauParameterR2_4 = self.info.MuLandauParameterR2_4
        if "MuLandauParameterR2_5" in dir(self.info):
            mymuid.MuLandauParameterR2_5 = self.info.MuLandauParameterR2_5
        #Muons - Region3:
        if "MuLandauParameterR3_1" in dir(self.info):
            mymuid.MuLandauParameterR3_1 = self.info.MuLandauParameterR3_1
        if "MuLandauParameterR3_2" in dir(self.info):
            mymuid.MuLandauParameterR3_2 = self.info.MuLandauParameterR3_2
        if "MuLandauParameterR3_3" in dir(self.info):
            mymuid.MuLandauParameterR3_3 = self.info.MuLandauParameterR3_3
        if "MuLandauParameterR3_4" in dir(self.info):
            mymuid.MuLandauParameterR3_4 = self.info.MuLandauParameterR3_4
        if "MuLandauParameterR3_5" in dir(self.info):
            mymuid.MuLandauParameterR3_5 = self.info.MuLandauParameterR3_5
        #Muons - Region4:
        if "MuLandauParameterR4_1" in dir(self.info):
            mymuid.MuLandauParameterR4_1 = self.info.MuLandauParameterR4_1
        if "MuLandauParameterR4_2" in dir(self.info):
            mymuid.MuLandauParameterR4_2 = self.info.MuLandauParameterR4_2
        if "MuLandauParameterR4_3" in dir(self.info):
            mymuid.MuLandauParameterR4_3 = self.info.MuLandauParameterR4_3
        if "MuLandauParameterR4_4" in dir(self.info):
            mymuid.MuLandauParameterR4_4 = self.info.MuLandauParameterR4_4
        if "MuLandauParameterR4_5" in dir(self.info):
            mymuid.MuLandauParameterR4_5 = self.info.MuLandauParameterR4_5

        #Non-Muons - Region1-2-3-4:
        if "NonMuLandauParameterR1" in dir(self.info):
            mymuid.NonMuLandauParameterR1 = self.info.NonMuLandauParameterR1
        if "NonMuLandauParameterR2" in dir(self.info):
            mymuid.NonMuLandauParameterR2 = self.info.NonMuLandauParameterR2
        if "NonMuLandauParameterR3" in dir(self.info):
            mymuid.NonMuLandauParameterR3 = self.info.NonMuLandauParameterR3
        if "NonMuLandauParameterR4" in dir(self.info):
            mymuid.NonMuLandauParameterR4 = self.info.NonMuLandauParameterR4

        # Binning for the Distance for muons:
        if "nMupBinsR1" in dir(self.info):
            mymuid.nMupBinsR1 = self.info.nMupBinsR1
        if "nMupBinsR2" in dir(self.info):
            mymuid.nMupBinsR2 = self.info.nMupBinsR2
        if "nMupBinsR3" in dir(self.info):
            mymuid.nMupBinsR3 = self.info.nMupBinsR3
        if "nMupBinsR4" in dir(self.info):
            mymuid.nMupBinsR4 = self.info.nMupBinsR4

        if "MupBinsR1" in dir(self.info):
            mymuid.MupBinsR1 = self.info.MupBinsR1
        if "MupBinsR2" in dir(self.info):
            mymuid.MupBinsR2 = self.info.MupBinsR2
        if "MupBinsR3" in dir(self.info):
            mymuid.MupBinsR3 = self.info.MupBinsR3
        if "MupBinsR4" in dir(self.info):
            mymuid.MupBinsR4 = self.info.MupBinsR4

        ## Configure hyperbolic tangent tanh(dist2) parameters
        if "tanhScaleFactorsR1" in dir(self.info):
            mymuid.tanhScaleFactorsR1 = self.info.tanhScaleFactorsR1
        if "tanhScaleFactorsR2" in dir(self.info):
            mymuid.tanhScaleFactorsR2 = self.info.tanhScaleFactorsR2
        if "tanhScaleFactorsR3" in dir(self.info):
            mymuid.tanhScaleFactorsR3 = self.info.tanhScaleFactorsR3
        if "tanhScaleFactorsR4" in dir(self.info):
            mymuid.tanhScaleFactorsR4 = self.info.tanhScaleFactorsR4

        ## Signal muons
        if "tanhCumulHistoMuonR1_1" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_1 = self.info.tanhCumulHistoMuonR1_1
        if "tanhCumulHistoMuonR1_2" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_2 = self.info.tanhCumulHistoMuonR1_2
        if "tanhCumulHistoMuonR1_3" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_3 = self.info.tanhCumulHistoMuonR1_3
        if "tanhCumulHistoMuonR1_4" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_4 = self.info.tanhCumulHistoMuonR1_4
        if "tanhCumulHistoMuonR1_5" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_5 = self.info.tanhCumulHistoMuonR1_5
        if "tanhCumulHistoMuonR1_6" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_6 = self.info.tanhCumulHistoMuonR1_6
        if "tanhCumulHistoMuonR1_7" in dir(self.info):
            mymuid.tanhCumulHistoMuonR1_7 = self.info.tanhCumulHistoMuonR1_7

        if "tanhCumulHistoMuonR2_1" in dir(self.info):
            mymuid.tanhCumulHistoMuonR2_1 = self.info.tanhCumulHistoMuonR2_1
        if "tanhCumulHistoMuonR2_2" in dir(self.info):
            mymuid.tanhCumulHistoMuonR2_2 = self.info.tanhCumulHistoMuonR2_2
        if "tanhCumulHistoMuonR2_3" in dir(self.info):
            mymuid.tanhCumulHistoMuonR2_3 = self.info.tanhCumulHistoMuonR2_3
        if "tanhCumulHistoMuonR2_4" in dir(self.info):
            mymuid.tanhCumulHistoMuonR2_4 = self.info.tanhCumulHistoMuonR2_4
        if "tanhCumulHistoMuonR2_5" in dir(self.info):
            mymuid.tanhCumulHistoMuonR2_5 = self.info.tanhCumulHistoMuonR2_5

        if "tanhCumulHistoMuonR3_1" in dir(self.info):
            mymuid.tanhCumulHistoMuonR3_1 = self.info.tanhCumulHistoMuonR3_1
        if "tanhCumulHistoMuonR3_2" in dir(self.info):
            mymuid.tanhCumulHistoMuonR3_2 = self.info.tanhCumulHistoMuonR3_2
        if "tanhCumulHistoMuonR3_3" in dir(self.info):
            mymuid.tanhCumulHistoMuonR3_3 = self.info.tanhCumulHistoMuonR3_3
        if "tanhCumulHistoMuonR3_4" in dir(self.info):
            mymuid.tanhCumulHistoMuonR3_4 = self.info.tanhCumulHistoMuonR3_4
        if "tanhCumulHistoMuonR3_5" in dir(self.info):
            mymuid.tanhCumulHistoMuonR3_5 = self.info.tanhCumulHistoMuonR3_5

        if "tanhCumulHistoMuonR4_1" in dir(self.info):
            mymuid.tanhCumulHistoMuonR4_1 = self.info.tanhCumulHistoMuonR4_1
        if "tanhCumulHistoMuonR4_2" in dir(self.info):
            mymuid.tanhCumulHistoMuonR4_2 = self.info.tanhCumulHistoMuonR4_2
        if "tanhCumulHistoMuonR4_3" in dir(self.info):
            mymuid.tanhCumulHistoMuonR4_3 = self.info.tanhCumulHistoMuonR4_3
        if "tanhCumulHistoMuonR4_4" in dir(self.info):
            mymuid.tanhCumulHistoMuonR4_4 = self.info.tanhCumulHistoMuonR4_4
        if "tanhCumulHistoMuonR4_5" in dir(self.info):
            mymuid.tanhCumulHistoMuonR4_5 = self.info.tanhCumulHistoMuonR4_5

        ## Bakground Comb muons: Also per regions AND momentum bins. Not suitable for low statistics
        if "tanhCumulHistoNonMuonR1_1" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_1 = self.info.tanhCumulHistoNonMuonR1_1
        if "tanhCumulHistoNonMuonR1_2" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_2 = self.info.tanhCumulHistoNonMuonR1_2
        if "tanhCumulHistoNonMuonR1_3" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_3 = self.info.tanhCumulHistoNonMuonR1_3
        if "tanhCumulHistoNonMuonR1_4" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_4 = self.info.tanhCumulHistoNonMuonR1_4
        if "tanhCumulHistoNonMuonR1_5" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_5 = self.info.tanhCumulHistoNonMuonR1_5
        if "tanhCumulHistoNonMuonR1_6" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_6 = self.info.tanhCumulHistoNonMuonR1_6
        if "tanhCumulHistoNonMuonR1_7" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR1_7 = self.info.tanhCumulHistoNonMuonR1_7

        if "tanhCumulHistoNonMuonR2_1" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR2_1 = self.info.tanhCumulHistoNonMuonR2_1
        if "tanhCumulHistoNonMuonR2_2" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR2_2 = self.info.tanhCumulHistoNonMuonR2_2
        if "tanhCumulHistoNonMuonR2_3" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR2_3 = self.info.tanhCumulHistoNonMuonR2_3
        if "tanhCumulHistoNonMuonR2_4" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR2_4 = self.info.tanhCumulHistoNonMuonR2_4
        if "tanhCumulHistoNonMuonR2_5" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR2_5 = self.info.tanhCumulHistoNonMuonR2_5

        if "tanhCumulHistoNonMuonR3_1" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR3_1 = self.info.tanhCumulHistoNonMuonR3_1
        if "tanhCumulHistoNonMuonR3_2" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR3_2 = self.info.tanhCumulHistoNonMuonR3_2
        if "tanhCumulHistoNonMuonR3_3" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR3_3 = self.info.tanhCumulHistoNonMuonR3_3
        if "tanhCumulHistoNonMuonR3_4" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR3_4 = self.info.tanhCumulHistoNonMuonR3_4
        if "tanhCumulHistoNonMuonR3_5" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR3_5 = self.info.tanhCumulHistoNonMuonR3_5

        if "tanhCumulHistoNonMuonR4_1" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR4_1 = self.info.tanhCumulHistoNonMuonR4_1
        if "tanhCumulHistoNonMuonR4_2" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR4_2 = self.info.tanhCumulHistoNonMuonR4_2
        if "tanhCumulHistoNonMuonR4_3" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR4_3 = self.info.tanhCumulHistoNonMuonR4_3
        if "tanhCumulHistoNonMuonR4_4" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR4_4 = self.info.tanhCumulHistoNonMuonR4_4
        if "tanhCumulHistoNonMuonR4_5" in dir(self.info):
            mymuid.tanhCumulHistoNonMuonR4_5 = self.info.tanhCumulHistoNonMuonR4_5

        ## add and configure either DistMuIDTool or Chi2MuIDTool.
        ## no need to initialize all sub tools there
        prev = self.initializeAll
        self.initializeAll = False
        if self.use_dist: mymuid.addTool(DistMuIDTool(), name='myMuIDTool')
        else: mymuid.addTool(Chi2MuIDTool(), name='myMuIDTool')

        out = self.configureMuIDTool(mymuid.myMuIDTool)
        self.initializeAll = prev

        if self.kalman_foi:

            mom_cuts = copy.copy(self.info.MomentumCuts)
            mom_cuts.insert(0, self.info.PreSelMomentum)

            mymuid.addTool(IsMuonCandidateC(), name='IsMuonTool')
            out = self.configureIsMuonCandidateC(mymuid.IsMuonTool)
            mymuid.IsMuonTool.IsMuonOpt = 3
            mymuid.IsMuonTool.MomRangeIsMuon = mom_cuts

            mymuid.addTool(IsMuonCandidateC(), name='IsMuonLooseTool')
            out = self.configureIsMuonCandidateC(mymuid.IsMuonLooseTool)
            mymuid.IsMuonLooseTool.IsMuonOpt = 2
            mymuid.IsMuonLooseTool.MomRangeIsMuon = mom_cuts

            mymuid.addTool(DistMuIDTool(), name='DistMuIDTool')
            prev = self.initializeAll
            self.initializeAll = False
            out = self.configureMuIDTool(mymuid.DistMuIDTool)
            self.initializeAll = prev

            mymuid.addTool(NShared(), name='NSharedTool')

        return mymuid
コード例 #4
0
def makeMyProtoP(trackcont):
    unpacker = UnpackTrack(trackcont + "UnpackTrack")
    unpacker.InputName = "pRec/Track/" + trackcont
    unpacker.OutputName = "Rec/Track/" + trackcont
    smeartracks = TrackSmeared(trackcont + "TrackSmeared")
    smeartracks.InputLocation = "Rec/Track/" + trackcont
    outputLocation = "Smeared"
    smeartracks.OutputLocation = outputLocation
    smeartracks.smearCopied = True
    smeartracks.smear = 1
    #smeartracks.makePlots = 1
    #smeartracks.OutputLevel = 2
    protoseq = GaudiSequencer(trackcont + "ProtoPSeq")
    protos = ChargedProtoParticleMaker(trackcont + "ProtoPMaker")
    protos.InputTrackLocation = ["Rec/Track/" + outputLocation]
    protos.OutputProtoParticleLocation = "Rec/ProtoP/" + trackcont + "ProtoPMaker"
    protos.addTool(DelegatingTrackSelector, name="TrackSelector")
    #protos.OutputLevel = 0
    tracktypes = ["Long", "Upstream", "Downstream", "Ttrack", "Velo", "VeloR"]
    protos.TrackSelector.TrackTypes = tracktypes
    selector = protos.TrackSelector
    for tsname in tracktypes:
        selector.addTool(TrackSelector, name=tsname)
        ts = getattr(selector, tsname)
        # Set Cuts
        ts.TrackTypes = [tsname]

# Add PID information
    idalg = MuonIDAlg("BestIDalg")
    #idalg.OutputLevel = 5
    cm = ConfiguredMuonIDs.ConfiguredMuonIDs(
        data=DaVinci().getProp("DataType"))
    cm.configureMuonIDAlg(idalg)
    idalg.TrackLocation = "Rec/Track/" + outputLocation
    idalg.MuonIDLocation = "Rec/Muon/MuonPID/" + outputLocation

    from Configurables import (
        ChargedProtoParticleAddRichInfo, ChargedProtoParticleAddMuonInfo,
        ChargedProtoParticleAddEcalInfo, ChargedProtoParticleAddBremInfo,
        ChargedProtoParticleAddHcalInfo, ChargedProtoParticleAddPrsInfo,
        ChargedProtoParticleAddSpdInfo, ChargedProtoParticleAddVeloInfo,
        ChargedProtoCombineDLLsAlg)
    addmuonpid = ChargedProtoParticleAddMuonInfo("Bestaddmuoninfo")
    addmuonpid.InputMuonPIDLocation = "Rec/Muon/MuonPID/" + outputLocation
    addmuonpid.ProtoParticleLocation = "Rec/ProtoP/" + trackcont + "ProtoPMaker"
    addrichpid = ChargedProtoParticleAddRichInfo("Bestaddrichinfo")
    addrichpid.ProtoParticleLocation = "Rec/ProtoP/" + trackcont + "ProtoPMaker"
    # The rich pid is added to the track in TrackSmeared, thus only kaon pion pid is consistent
    # the others are not implemented. The modes smearBest and smearProto don't have the problems
    #addcalopid = ChargedProtoParticleAddCaloInfo("Bestaddcaloinfo")
    #addcalopid.InputRichCALOLocation = "Rec/Rich/"+outputLocation
    #addcalopid.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #ecal = ChargedProtoParticleAddEcalInfo("ChargedProtoPAddEcal")
    #ecal.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #brem = ChargedProtoParticleAddBremInfo("ChargedProtoPAddBrem")
    #brem.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #hcal = ChargedProtoParticleAddHcalInfo("ChargedProtoPAddHcal")
    #hcal.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #prs  = ChargedProtoParticleAddPrsInfo("ChargedProtoPAddPrs")
    #prs.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #spd  = ChargedProtoParticleAddSpdInfo("ChargedProtoPAddSpd")
    #spd.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    #velo = ChargedProtoParticleAddVeloInfo("ChargedProtoPAddVeloDEDX")
    #velo.ProtoParticleLocation = "Rec/ProtoP/"+trackcont+"ProtoPMaker"
    combinedll = ChargedProtoCombineDLLsAlg("BestCombineDLL")
    combinedll.ProtoParticleLocation = "Rec/ProtoP/" + trackcont + "ProtoPMaker"

    #set up associators
    assoctr = TrackAssociator(trackcont + "AssocTr")
    assoctr.TracksInContainer = "Rec/Track/" + outputLocation
    assocpp = ChargedPP2MC(trackcont + "AssocPP")
    assocpp.TrackLocations = ["Rec/Track/" + outputLocation]
    assocpp.InputData = ["Rec/ProtoP/" + trackcont + "ProtoPMaker"]
    assocpp.OutputTable = "Relations/Rec/ProtoP/" + trackcont + "ProtoPMaker"
    # DST post treatment
    TrackToDST(trackcont +
               "TrackToDST").TracksInContainer = "Rec/Track/" + trackcont
    if not DaVinci().Simulation:
        protoseq.Members += [TrackToDST(trackcont + "TrackToDST"), protos]
        protoseq.Members += [
            ecal, brem, hcal, prs, spd, velo, addrichpid, addmuonpid,
            combinedll
        ]
        DataOnDemandSvc().AlgMap.update({
            "/Event/Rec/Track/" + trackcont:
            unpacker.getFullName(),
            "/Event/Rec/Track/" + outputLocation:
            smeartracks.getFullName(),
            "/Event/Rec/Rich/" + outputLocation:
            protoseq.getFullName(),
            "/Event/Rec/Muon/MuonPID/" + outputLocation:
            idalg.getFullName(),
            "/Event/Rec/ProtoP/" + trackcont + "ProtoPMaker":
            protoseq.getFullName(),
            "/Event/Relations/Rec/ProtoP/" + trackcont + "ProtoPMaker":
            protoseq.getFullName()
        })
    else:
        if (DaVinci().Simulation):
            protoseq.Members += [
                TrackToDST(trackcont + "TrackToDST"), assoctr, protos
            ]
            #protoseq.Members += [ ecal,brem,hcal,prs,spd,velo,addrichpid,addmuonpid,combinedll,assocpp ]
            protoseq.Members += [
                idalg, addmuonpid, addrichpid, combinedll, assocpp
            ]
            DataOnDemandSvc().AlgMap.update({
                "/Event/Rec/Track/" + trackcont:
                unpacker.getFullName(),
                "/Event/Rec/Track/" + outputLocation:
                smeartracks.getFullName(),
                "/Event/Rec/Rich/" + outputLocation:
                protoseq.getFullName(),
                "/Event/Rec/Muon/MuonPID/" + outputLocation:
                idalg.getFullName(),
                "/Event/Rec/ProtoP/" + trackcont + "ProtoPMaker":
                protoseq.getFullName(),
                "/Event/Relations/Rec/ProtoP/" + trackcont + "ProtoPMaker":
                protoseq.getFullName()
            })