Beispiel #1
0
def makeDefault(name):
    """
    very detached JPSi selection
    """
    from Configurables import OfflineVertexFitter
    Detached2mu = CombineParticles("Combine" + name)
    Detached2mu.DecayDescriptor = "J/psi(1S) -> mu+ mu-"
    Detached2mu.addTool(OfflineVertexFitter())
    Detached2mu.VertexFitters.update({"": "OfflineVertexFitter"})
    Detached2mu.OfflineVertexFitter.useResonanceVertex = False
    Detached2mu.ReFitPVs = True
    Detached2mu.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 4 ) "\
                                  " & (MIPCHI2DV(PRIMARY)> 100)"\
                                  "& (PT > 0.7) "}

    Detached2mu.CombinationCut = " (AMAXDOCA('')<0.1*mm)"
    #"(ADAMASS('B_s0')<1000*MeV) "\
    Detached2mu.MotherCut = "(VFASPF(VCHI2/VDOF)<15) "\
                            "& (M>1500)"\
                            "& (BPVDIRA > 0) "\
                            "& (BPVVDCHI2>625)"\
                            "& (BPVVD>50)"

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=Detached2mu,
                     RequiredSelections=[_stdLooseMuons])
def makeBs2Kst_0Kst_0(name, Kst_0sel, BMassWin, BVCHI2, BDOCA, BIPCHI2,
                      BFDistanceCHI2, SumPT):
    """
       Create and return a Bs -> Kstar_0(1430)(Kpi) anti-Kstar_0(1430)(Kpi) Selection object.
       Arguments:
       name           : name of the Selection.
       Kst_0sel       : Kst_0(1430) -> K+pi- Selection object.
       BMassWin       : Bs invariant mass window around PDG mass value (MeV).
       BVCHI2         : Maximum Bs vertex chi2 per degree of freedom.
       BDOCA          : Maximum Bs DOCA.
       BFDistanceCHI2 : Minimum Bs Flight Distance chi2.
       SumPT          : Sum|pT| of the daughters.
       """

    _motherCuts = " (VFASPF(VCHI2/VDOF) < %(BVCHI2)s) & (MIPCHI2DV(PRIMARY)< %(BIPCHI2)s) & (BPVVDCHI2 > %(BFDistanceCHI2)s)" % locals(
    )
    _combinationCut = "(ADAMASS('B_s0') < %(BMassWin)s *MeV) & (AMAXDOCA('')< %(BDOCA)s *mm) "\
                      "& ( (AMINCHILD(PT,ID=='K+') + AMINCHILD(PT,ID=='K-') + AMINCHILD(PT,ID=='pi-') + AMINCHILD(PT,ID=='pi+'))> %(SumPT)s *MeV)" % locals()

    _Bs = CombineParticles('_' + name)
    _Bs.DecayDescriptor = "B_s0 -> K*_0(1430)0 K*_0(1430)~0"
    _Bs.CombinationCut = _combinationCut
    _Bs.MotherCut = _motherCuts

    _Bs.ReFitPVs = True

    _Bs.addTool(OfflineVertexFitter())
    _Bs.VertexFitters.update({"": "OfflineVertexFitter"})
    _Bs.OfflineVertexFitter.useResonanceVertex = False

    return Selection(name, Algorithm=_Bs, RequiredSelections=[Kst_0sel])
def makeNoMuID(name):
    """
    default K0s2mumu selection object
    starts from Phys/StdNoPIDsMuons

    Please contact Diego Martinez Santos if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    K0s2MuMuNoMuID = CombineParticles("Comine" + name)
    K0s2MuMuNoMuID.DecayDescriptor = "KS0 -> pi+ pi-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    K0s2MuMuNoMuID.addTool(OfflineVertexFitter())
    K0s2MuMuNoMuID.VertexFitters.update({"": "OfflineVertexFitter"})
    K0s2MuMuNoMuID.OfflineVertexFitter.useResonanceVertex = False
    K0s2MuMuNoMuID.ReFitPVs = True
    K0s2MuMuNoMuID.DaughtersCuts = {
        "pi+": "(MIPCHI2DV(PRIMARY)> 100.)&(TRCHI2DOF < 5 )"
    }
    K0s2MuMuNoMuID.CombinationCut = "(ADAMASS('KS0')<100*MeV)"\
                                   "& (AMAXDOCA('')<0.3*mm)"

    K0s2MuMuNoMuID.MotherCut = "((BPVDIRA>0) & ((BPVVDSIGN*M/P) > 0.1*89.53*2.9979e-01) & (MIPDV(PRIMARY)<0.4*mm) & (M>400) & (M<600))"

    _stdNoPIDsPions = DataOnDemand(Location="Phys/StdNoPIDsPions/Particles")

    return Selection(name,
                     Algorithm=K0s2MuMuNoMuID,
                     RequiredSelections=[_stdNoPIDsPions])
def makeBs2mmWide(name):
    """
    Bs2mumu selection object (tighter selection a la roadmap)
    with muon Id and wide mass window (1.2GeV)
    starts from Phys/StdLooseMuons

    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    Bs2MuMuWideMass = CombineParticles("Combine" + name)
    Bs2MuMuWideMass.DecayDescriptor = "B_s0 -> mu+ mu-"
    Bs2MuMuWideMass.addTool(OfflineVertexFitter())
    Bs2MuMuWideMass.VertexFitters.update({"": "OfflineVertexFitter"})
    Bs2MuMuWideMass.OfflineVertexFitter.useResonanceVertex = False
    Bs2MuMuWideMass.ReFitPVs = True
    Bs2MuMuWideMass.DaughtersCuts = {
        "mu+": "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 4 )"
    }
    Bs2MuMuWideMass.CombinationCut = "(ADAMASS('B_s0')<1200*MeV)"\
                                     "& (AMAXDOCA('')<0.3*mm)"

    Bs2MuMuWideMass.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                                "& (ADMASS('B_s0') < 1200*MeV )"\
                                "& (BPVDIRA > 0) "\
                                "& (BPVVDCHI2> 225)"\
                                "& (BPVIPCHI2()< 25) "

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=Bs2MuMuWideMass,
                     RequiredSelections=[_stdLooseMuons])
def makeK0s2mm(name):
    """
    K0s2mumu selection object
    with muon Id and wide mass window
    starts from Phys/StdLooseMuons

    Please contact Diego Martinez Santos if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    K0s2MuMu = CombineParticles("Combine" + name)
    K0s2MuMu.DecayDescriptor = "KS0 -> mu+ mu-"
    K0s2MuMu.addTool(OfflineVertexFitter())
    K0s2MuMu.VertexFitters.update({"": "OfflineVertexFitter"})
    K0s2MuMu.OfflineVertexFitter.useResonanceVertex = False
    K0s2MuMu.ReFitPVs = True
    K0s2MuMu.DaughtersCuts = {
        "mu+": "(MIPCHI2DV(PRIMARY)> 100.)&(TRCHI2DOF < 5 )"
    }
    K0s2MuMu.CombinationCut ="(ADAMASS('KS0')<1000*MeV)"\
                                   "& (AMAXDOCA('')<0.3*mm)"

    K0s2MuMu.MotherCut = "((BPVDIRA>0) & ((BPVVDSIGN*M/P) > 0.1*89.53*2.9979e-01) & (MIPDV(PRIMARY)<0.4*mm) & (M>450))"

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=K0s2MuMu,
                     RequiredSelections=[_stdLooseMuons])
def makeDetachedJPsi(name):
    """
    detached JPsi selection for B--> JPsi X calibration and
    normalization channels. Selection is aligned to the Bs2MuMu
    selection.

    Please contact Johannes Albrecht if you think of prescaling this line!

    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    DetachedJPsi = CombineParticles("Combine" + name)
    DetachedJPsi.DecayDescriptor = "J/psi(1S) -> mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    DetachedJPsi.addTool(OfflineVertexFitter())
    DetachedJPsi.VertexFitters.update({"": "OfflineVertexFitter"})
    DetachedJPsi.OfflineVertexFitter.useResonanceVertex = False
    DetachedJPsi.ReFitPVs = True
    DetachedJPsi.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 4 ) "\
                                    "& (MIPCHI2DV(PRIMARY)> 25.)"}

    DetachedJPsi.CombinationCut = "(ADAMASS('J/psi(1S)')<100*MeV) "\
                                   "& (AMAXDOCA('')<0.3*mm)"

    DetachedJPsi.MotherCut = "(VFASPF(VCHI2)<9) "\
                             "& (ADMASS('J/psi(1S)') < 100*MeV )"\
                             "& (BPVDIRA > 0) "\
                             "& (BPVVDCHI2>169)"

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=DetachedJPsi,
                     RequiredSelections=[_stdLooseMuons])
def makeBs2XMuMu(name,
                 DecayDescriptor,
                 DaughterLists,
                 BsMassWin,
                 BsVCHI2DOF,
                 BsDIRA,
                 BsIPCHI2,
                 BsFDCHI2):
    from Configurables import CombineParticles, OfflineVertexFitter
    combinerName = "Combine" + name
    _Bs = CombineParticles(combinerName)
    _Bs.DecayDescriptor = DecayDescriptor 
    _Bs.CombinationCut = "ADAMASS('B_s0') < %(BsMassWin)s *MeV" % locals()
    _Bs.MotherCut = "  (VFASPF(VCHI2/VDOF) < %(BsVCHI2DOF)s)" \
                    "& (BPVDIRA > %(BsDIRA)s)" \
                    "& (BPVIPCHI2() < %(BsIPCHI2)s)" \
                    "& (BPVVDCHI2 > %(BsFDCHI2)s)" % locals()
    #        _Bs.ReFitPVs = True
    # Set the OfflineVertexFitter to keep the 4 tracks
    _Bs.addTool( OfflineVertexFitter() )
    _Bs.VertexFitters.update( { "" : "OfflineVertexFitter"} )
    _Bs.OfflineVertexFitter.useResonanceVertex = False
    return Selection(name, 
                     Algorithm = _Bs,
                     RequiredSelections = DaughterLists)
def makeBd2InflatonKst(name, SelInflatonLong):
    """
    detached Bd -> Inflaton K* selection.

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    _kstar = DataOnDemand(Location='Phys/StdLooseDetachedKst2Kpi/Particles')

    Bd2InflatonKst = CombineParticles("Combine" + name)
    Bd2InflatonKst.DecayDescriptor = "[B0 -> KS0 K*(892)0]cc"
    Bd2InflatonKst.addTool(OfflineVertexFitter())
    Bd2InflatonKst.VertexFitters.update({"": "OfflineVertexFitter"})
    Bd2InflatonKst.OfflineVertexFitter.useResonanceVertex = False
    Bd2InflatonKst.ReFitPVs = True
    Bd2InflatonKst.DaughtersCuts = {"K*(892)0": "MIPCHI2DV(PRIMARY)> 25."}
    Bd2InflatonKst.CombinationCut = "(ADAMASS('B0') < 500*MeV)"
    Bd2InflatonKst.MotherCut = "(BPVIPCHI2()< 50) & (VFASPF(VCHI2)<100)& (D2DVVDDOT(1) > 0.3*mm)"

    return Selection("Sel" + name,
                     Algorithm=Bd2InflatonKst,
                     RequiredSelections=[SelInflatonLong, _kstar])
Beispiel #9
0
def makeB2ee(name):
    """
    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter
    Bs2ee = CombineParticles("Combine" + name)
    Bs2ee.DecayDescriptor = "B_s0 -> e+ e-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    Bs2ee.addTool(OfflineVertexFitter())
    Bs2ee.VertexFitters.update({"": "OfflineVertexFitter"})
    Bs2ee.OfflineVertexFitter.useResonanceVertex = False
    #Bs2ee.ReFitPVs = True
    Bs2ee.DaughtersCuts = {"e+": "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 4 )"}

    Bs2ee.CombinationCut = "(ADAMASS('B_s0')<600*MeV)"\
                            "& (AMAXDOCA('')<0.3*mm)"

    Bs2ee.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                              "& (ADMASS('B_s0') < 600*MeV )"\
                              "& (BPVDIRA > 0) "\
                              "& (BPVVDCHI2> 225)"\
                              "& (BPVIPCHI2()< 25) "

    _stdLooseElectrons = DataOnDemand(
        Location="Phys/StdLooseElectrons/Particles")

    return Selection(name,
                     Algorithm=Bs2ee,
                     RequiredSelections=[_stdLooseElectrons])
def makeBs2InflatonPhi(name, SelInflatonLong):
    """
    detached Bs -> Inflaton Phi selection. 

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    _phi = DataOnDemand(Location='Phys/StdLooseDetachedPhi2KK/Particles')

    Bs2InflatonPhi = CombineParticles("Combine" + name)
    Bs2InflatonPhi.DecayDescriptor = "B_s0 -> KS0 phi(1020)"
    Bs2InflatonPhi.addTool(OfflineVertexFitter())
    Bs2InflatonPhi.VertexFitters.update({"": "OfflineVertexFitter"})
    Bs2InflatonPhi.OfflineVertexFitter.useResonanceVertex = False
    Bs2InflatonPhi.ReFitPVs = True
    Bs2InflatonPhi.DaughtersCuts = {"phi(1020)": "MIPCHI2DV(PRIMARY)> 25."}
    Bs2InflatonPhi.CombinationCut = "(ADAMASS('B_s0') < 500*MeV)"
    Bs2InflatonPhi.MotherCut = "(BPVIPCHI2()< 50)& (VFASPF(VCHI2)<100)& (D2DVVDDOT(1) > 0.3*mm)"

    return Selection("Sel" + name,
                     Algorithm=Bs2InflatonPhi,
                     RequiredSelections=[SelInflatonLong, _phi])
def makeBu2InflatonK(name, SelInflatonLong):
    """
    detached Bu -> Inflaton K selection.

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    Bu2InflatonK = CombineParticles("Combine" + name)
    Bu2InflatonK.DecayDescriptor = " [B+ -> KS0 K+]cc "
    Bu2InflatonK.addTool(OfflineVertexFitter())
    Bu2InflatonK.VertexFitters.update({"": "OfflineVertexFitter"})
    Bu2InflatonK.OfflineVertexFitter.useResonanceVertex = False
    Bu2InflatonK.ReFitPVs = True
    Bu2InflatonK.DaughtersCuts = {
        "K+":
        "(ISLONG) & (TRCHI2DOF < 5 ) &(MIPCHI2DV(PRIMARY)>25)& (PT>250*MeV) "
    }
    Bu2InflatonK.CombinationCut = "(ADAMASS('B+') < 500*MeV)"
    Bu2InflatonK.MotherCut = "(BPVIPCHI2()< 50)& (VFASPF(VCHI2)<100)& (D2DVVDDOT(1) > 0.3*mm)"

    _kaons = DataOnDemand(Location='Phys/StdLooseKaons/Particles')

    return Selection("Sel" + name,
                     Algorithm=Bu2InflatonK,
                     RequiredSelections=[SelInflatonLong, _kaons])
def makeLong(name, vertexDistChi2, vertexDist):
    """
    very very detached dimuon selection with long tracks
    """
    from Configurables import OfflineVertexFitter
    Detached2mu = CombineParticles("Combine" + name)
    Detached2mu.DecayDescriptor = "KS0 -> mu+ mu-"
    Detached2mu.addTool(OfflineVertexFitter())
    Detached2mu.VertexFitters.update({"": "OfflineVertexFitter"})
    Detached2mu.OfflineVertexFitter.useResonanceVertex = False
    Detached2mu.ReFitPVs = True
    Detached2mu.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 4 ) "\
                                  " & (MIPCHI2DV(PRIMARY)> 100)"\
                                  " & (PIDmu > -4)" \
                                  "& (PT > 125*MeV) "}

    Detached2mu.CombinationCut = " (AMAXDOCA('')<0.1*mm)"
    #"(ADAMASS('B_s0')<1000*MeV) "\
    Detached2mu.MotherCut = "(VFASPF(VCHI2/VDOF)<10) "\
                            "& (M>250)"\
                            "& (BPVDIRA > 0) "\
                            "& (BPVVDCHI2>  %(vertexDistChi2)s)"\
                            "& (BPVVD> %(vertexDist)s)" % locals()

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=Detached2mu,
                     RequiredSelections=[_stdLooseMuons])
def makeDimuon(name,inputSel) :
    """
    dimuon selection
    """
    from Configurables import OfflineVertexFitter
    Dimuon = CombineParticles("Combine"+name)
    Dimuon.DecayDescriptor = "[J/psi(1S) -> mu+ mu-]cc"
    Dimuon.addTool( OfflineVertexFitter() )
    Dimuon.VertexFitters.update( { "" : "OfflineVertexFitter"} )

    Dimuon.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 2.0 ) "\
                                  " & (MIPCHI2DV(PRIMARY)> 4.)"\
                                  " & (P> 3000.*MeV)"}

    Dimuon.CombinationCut =   " (AMAXDOCA('')<0.3*mm) "


 
    Dimuon.MotherCut = "(VFASPF(VCHI2/VDOF)<12.) "\
			"& (BPVVDZ > 0.) " \
                         "& (M < 2500.)"


    return Selection (name,
                      Algorithm = Dimuon,
                      RequiredSelections = inputSel)
def makeBd2JPsiKst(name, JPsisel, Kstsel, BMassWin, BVCHI2, BDOCA, BIPCHI2):
    """
       Create and return a Bd -> JPsi(mumu) Kstar (Kpi) Selection object.
       Arguments:
       name        : name of the Selection.
       JPsisel     : JPsi -> mu+ mu- Selection object.
       Kstsel      : Kst -> K+pi- Selection object.
       BMassWin    : Bd invariant mass window around PDG mass value (MeV).
       BVCHI2      : Maximum Bd vertex chi2 per degree of freedom.
       BDOCA       : Maximum Bd DOCA.
       """

    _motherCuts = " (VFASPF(VCHI2/VDOF) < %(BVCHI2)s) & (MIPCHI2DV(PRIMARY)< %(BIPCHI2)s)" % locals(
    )
    _combinationCut = "(ADAMASS('B_s0') < %(BMassWin)s *MeV) & (AMAXDOCA('')< %(BDOCA)s *mm)" % locals(
    )

    _Bd = CombineParticles('_' + name)
    _Bd.DecayDescriptor = "[B0 -> J/psi(1S) K*(892)0]cc"
    _Bd.CombinationCut = _combinationCut
    _Bd.MotherCut = _motherCuts

    _Bd.ReFitPVs = True

    _Bd.addTool(OfflineVertexFitter())
    _Bd.VertexFitters.update({"": "OfflineVertexFitter"})
    _Bd.OfflineVertexFitter.useResonanceVertex = False

    return Selection(name, Algorithm=_Bd, RequiredSelections=[JPsisel, Kstsel])
def makeDefault(name) :
    """
    default Bs2mumu selection object (tighter selection a la roadmap)
    starts from Phys/StdNoPIDsMuons

    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    Bs2MuMuNoMuID = CombineParticles("Comine"+name)
    Bs2MuMuNoMuID.DecayDescriptor = "B_s0 -> mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    Bs2MuMuNoMuID.addTool( OfflineVertexFitter() )
    Bs2MuMuNoMuID.VertexFitters.update( { "" : "OfflineVertexFitter"} )
    Bs2MuMuNoMuID.OfflineVertexFitter.useResonanceVertex = False
    Bs2MuMuNoMuID.ReFitPVs = True
    Bs2MuMuNoMuID.DaughtersCuts = { "mu+" : "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 4 )" }
    Bs2MuMuNoMuID.CombinationCut = "(ADAMASS('B_s0')<600*MeV)"\
                                   "& (AMAXDOCA('')<0.3*mm)"

    Bs2MuMuNoMuID.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                              "& (ADMASS('B_s0') < 600*MeV )"\
                              "& (BPVDIRA > 0) "\
                              "& (BPVVDCHI2> 225)"\
                              "& (BPVIPCHI2()< 25) "
                             
    _stdNoPIDsMuons = DataOnDemand(Location = "Phys/StdNoPIDsMuons/Particles")

    return Selection (name,
                      Algorithm = Bs2MuMuNoMuID,
                      RequiredSelections = [ _stdNoPIDsMuons])
Beispiel #16
0
def makeDefault(name):
    """
    B --> 4 mu selection
    should become     inclusive bb-->4 mu selection  ??
    """
    from Configurables import OfflineVertexFitter
    Detached4mu = CombineParticles("Combine" + name)
    Detached4mu.DecayDescriptor = "B_s0 -> mu+ mu- mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    Detached4mu.addTool(OfflineVertexFitter())
    Detached4mu.VertexFitters.update({"": "OfflineVertexFitter"})
    Detached4mu.OfflineVertexFitter.useResonanceVertex = False
    Detached4mu.ReFitPVs = True
    Detached4mu.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 5 ) "\
                                  " & (MIPCHI2DV(PRIMARY)> 9.)"}

    Detached4mu.CombinationCut = "(ADAMASS('B_s0')<1000*MeV) "\
                                   "& (AMAXDOCA('')<0.3*mm)"
    Detached4mu.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                              "& (BPVDIRA > 0) "\
                              "& (BPVVDCHI2>100)"\
                              " & (M>4366.3) & (M<6366.3)"\
                              "& (BPVIPCHI2()< 25) "

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=Detached4mu,
                     RequiredSelections=[_stdLooseMuons])
def makeBu(name):
    """
    detached Bu-->JPsiK selection. Selection is aligned to the Bs2MuMu
    selection.

    Please contact Johannes Albrecht if you think of prescaling this line!

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    SelDJPsi = makeDetachedJPsi(name)

    PreselBu2JPsiKCommon = CombineParticles("PreselBu2JPsiKCommon")
    PreselBu2JPsiKCommon.DecayDescriptor = " [B+ -> J/psi(1S) K+]cc "
    PreselBu2JPsiKCommon.addTool(OfflineVertexFitter())
    PreselBu2JPsiKCommon.VertexFitters.update({"": "OfflineVertexFitter"})
    PreselBu2JPsiKCommon.OfflineVertexFitter.useResonanceVertex = False
    PreselBu2JPsiKCommon.ReFitPVs = True
    PreselBu2JPsiKCommon.DaughtersCuts = {
        "K+":
        "(ISLONG) & (TRCHI2DOF < 5 ) &(MIPCHI2DV(PRIMARY)>25)& (PT>250*MeV) "
    }
    PreselBu2JPsiKCommon.CombinationCut = "(ADAMASS('B+') < 500*MeV)"
    PreselBu2JPsiKCommon.MotherCut = "(BPVIPCHI2()< 25)& (VFASPF(VCHI2)<45) "

    _kaons = DataOnDemand(Location='Phys/StdNoPIDsKaons/Particles')

    return Selection("SelBu2JPsiK",
                     Algorithm=PreselBu2JPsiKCommon,
                     RequiredSelections=[SelDJPsi, _kaons])
def makeBs2PhiKst(name, Phisel, Kstsel, BMassWin, BVCHI2, BDOCA):
    """
       Create and return a Bs -> Phi (KK) Kstar (Kpi) Selection object.
       Arguments:
       name        : name of the Selection.
       Phisel      : Phi -> K+K- Selection object.
       Kstsel      : Kst -> K+pi- Selection object.
       BMassWin    : Bs invariant mass window around PDG mass value (MeV).
       BVCHI2      : Maximum Bs vertex chi2 per degree of freedom.
       BDOCA       : Maximum Bs DOCA.
       """

    _motherCuts = "(VFASPF(VCHI2/VDOF) < %(BVCHI2)s)" % locals()
    _combinationCut = "(ADAMASS('B_s0') < %(BMassWin)s *MeV) & (AMAXDOCA('')< %(BDOCA)s *mm)" % locals(
    )

    _Bs = CombineParticles('_' + name)
    _Bs.DecayDescriptor = "[B_s0 -> phi(1020) K*(892)~0]cc"
    _Bs.CombinationCut = _combinationCut
    _Bs.MotherCut = _motherCuts

    _Bs.ReFitPVs = True

    _Bs.addTool(OfflineVertexFitter())
    _Bs.VertexFitters.update({"": "OfflineVertexFitter"})
    _Bs.OfflineVertexFitter.useResonanceVertex = False

    return Selection(name, Algorithm=_Bs, RequiredSelections=[Phisel, Kstsel])
Beispiel #19
0
def makePromptJPsi(name):
    """
    Prompt variant of the detached JPsi selection for
    B--> JPsi X calibration and normalization channels.
    Selection is aligned to the Bs2MuMu selection.
    heavily prescaled
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    PromptJPsi = CombineParticles("Combine" + name)
    PromptJPsi.DecayDescriptor = "J/psi(1S) -> mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    PromptJPsi.addTool(OfflineVertexFitter())
    PromptJPsi.VertexFitters.update({"": "OfflineVertexFitter"})
    PromptJPsi.OfflineVertexFitter.useResonanceVertex = False
    PromptJPsi.ReFitPVs = True
    PromptJPsi.DaughtersCuts = {"mu+": "(TRCHI2DOF < 4 ) "}

    PromptJPsi.CombinationCut = "(ADAMASS('J/psi(1S)')<100*MeV) "\
                                "& (AMAXDOCA('')<0.3*mm)"

    PromptJPsi.MotherCut = "(VFASPF(VCHI2)<15) "\
                           "& (ADMASS('J/psi(1S)') < 100*MeV )"

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=PromptJPsi,
                     RequiredSelections=[_stdLooseMuons])
Beispiel #20
0
def makeDetachedJPsiLoose(name):
    """
    loose detached JPsi selection to monitor selection,
    systematics from cuts, etc.
    
    prescaled
    
    Arguments:
    name        : name of the Selection.
    """
    from Configurables import OfflineVertexFitter
    DetachedJPsiLoose = CombineParticles("Combine" + name)
    DetachedJPsiLoose.DecayDescriptor = "J/psi(1S) -> mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    DetachedJPsiLoose.addTool(OfflineVertexFitter())
    DetachedJPsiLoose.VertexFitters.update({"": "OfflineVertexFitter"})
    DetachedJPsiLoose.OfflineVertexFitter.useResonanceVertex = False
    DetachedJPsiLoose.ReFitPVs = True
    DetachedJPsiLoose.DaughtersCuts = { "mu+" : "(TRCHI2DOF < 10 ) "\
                                    "& (MIPCHI2DV(PRIMARY)> 9.)"}

    DetachedJPsiLoose.CombinationCut = "(ADAMASS('J/psi(1S)')<120*MeV) "\
                                   "& (AMAXDOCA('')<0.5*mm)"

    DetachedJPsiLoose.MotherCut = "(VFASPF(VCHI2)<25) "\
                                  "& (ADMASS('J/psi(1S)') < 120*MeV )"\
                                  "& (BPVDIRA > 0) "\
                                  "& (BPVVDCHI2>100)"

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")

    return Selection(name,
                     Algorithm=DetachedJPsiLoose,
                     RequiredSelections=[_stdLooseMuons])
def makeBd(name):
    """
    detached Bd-->JPsiK* selection. Selection is aligned to the Bs2MuMu
    selection.

    Please contact Johannes Albrecht if you think of prescaling this line!

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    SelDJPsi = makeDetachedJPsi(name)

    ## make Kstar

    makeKstar = CombineParticles("makeKstar")

    makeKstar.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc"
    makeKstar.DaughtersCuts = {
        "K+":
        "(ISLONG) & (TRCHI2DOF < 5 ) & (MIPCHI2DV(PRIMARY)> 4.)& (PT>250*MeV)",
        "pi-":
        "(ISLONG) & (TRCHI2DOF < 5 ) & (MIPCHI2DV(PRIMARY)> 4.)& (PT>250*MeV)"
    }
    makeKstar.CombinationCut = "(ADAMASS('K*(892)0')<2000*MeV)"  #huge, to allow to study JPsi K1 etc
    makeKstar.MotherCut = " (MIPCHI2DV(PRIMARY)> 25.)"

    _pions = DataOnDemand(Location='Phys/StdNoPIDsPions/Particles')
    _kaons = DataOnDemand(Location='Phys/StdNoPIDsKaons/Particles')

    SelKst = Selection("SelKst",
                       Algorithm=makeKstar,
                       RequiredSelections=[_pions, _kaons])

    ## make BtoJPsiKstar
    PreselBd2JPsiKstCommon = CombineParticles("PreselBd2JPsiKstCommon")
    PreselBd2JPsiKstCommon.DecayDescriptor = "[B0 -> J/psi(1S) K*(892)0]cc"
    PreselBd2JPsiKstCommon.addTool(OfflineVertexFitter())
    PreselBd2JPsiKstCommon.VertexFitters.update({"": "OfflineVertexFitter"})
    PreselBd2JPsiKstCommon.OfflineVertexFitter.useResonanceVertex = False
    PreselBd2JPsiKstCommon.ReFitPVs = True
    PreselBd2JPsiKstCommon.DaughtersCuts = {}
    PreselBd2JPsiKstCommon.CombinationCut = "(ADAMASS('B0') < 500*MeV)"
    PreselBd2JPsiKstCommon.MotherCut = "(BPVIPCHI2()< 25) & (VFASPF(VCHI2)<75)"

    return Selection("SelBd2JPsiKstar",
                     Algorithm=PreselBd2JPsiKstCommon,
                     RequiredSelections=[SelDJPsi, SelKst])
Beispiel #22
0
def makeB2heMu(name):
    """
    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter
    Bs2heMu = CombineParticles("Combine" + name)
    Bs2heMu.DecayDescriptors = [
        "[B+ -> K+ e+ mu-]cc", "[B+ -> K+ e- mu+]cc", "[B+ -> pi+ e+ mu-]cc",
        "[B+ -> pi+ e- mu+]cc"
    ]
    Bs2heMu.addTool(OfflineVertexFitter())
    Bs2heMu.VertexFitters.update({"": "OfflineVertexFitter"})
    Bs2heMu.OfflineVertexFitter.useResonanceVertex = False
    #Bs2heMu.ReFitPVs = True
    Bs2heMu.DaughtersCuts = {
        "mu+": "(MIPCHI2DV(PRIMARY)>25.)&(TRCHI2DOF<4)",
        "e+": "(MIPCHI2DV(PRIMARY)>25.)&(TRCHI2DOF<4)",
        "pi+": "(MIPCHI2DV(PRIMARY)>25.)&(TRCHI2DOF<4)",
        "K+": "(MIPCHI2DV(PRIMARY)>25.)&(TRCHI2DOF<4)"
    }

    Bs2heMu.CombinationCut = "(ADAMASS('B+')<600*MeV)"\
                            "& (AMAXDOCA('')<0.3*mm)"

    Bs2heMu.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                              "& (ADMASS('B_s0') < 600*MeV )"\
                              "& (BPVDIRA > 0) "\
                              "& (BPVVDCHI2> 225)"\
                              "& (BPVIPCHI2()< 25) "

    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")
    _stdLooseElectrons = DataOnDemand(
        Location="Phys/StdLooseElectrons/Particles")
    _stdLoosePions = DataOnDemand(Location="Phys/StdLoosePions/Particles")
    _stdLooseKaons = DataOnDemand(Location="Phys/StdLooseKaons/Particles")

    return Selection(name,
                     Algorithm=Bs2heMu,
                     RequiredSelections=[
                         _stdLooseMuons, _stdLooseElectrons, _stdLoosePions,
                         _stdLooseKaons
                     ])
def makeBs(name):
    """
    detached Bs-->JPsiPhi selection. Selection is aligned to the Bs2MuMu
    selection.

    Please contact Johannes Albrecht if you think of prescaling this line!

    Arguments:
    name        : name of the Selection.
    """

    from Configurables import OfflineVertexFitter

    SelDJPsi = makeDetachedJPsi(name)

    makePhi = CombineParticles("makePhi")
    makePhi.DecayDescriptor = "phi(1020) -> K+ K-"
    makePhi.DaughtersCuts = {
        "K+":
        "(ISLONG) & (TRCHI2DOF < 5 ) & (MIPCHI2DV(PRIMARY)> 4.) & (PT>250*MeV)"
    }

    _kaons = DataOnDemand(Location='Phys/StdNoPIDsKaons/Particles')

    makePhi.CombinationCut = "(ADAMASS('phi(1020)')<10*MeV)"
    makePhi.MotherCut = " (MIPCHI2DV(PRIMARY)> 25.)"
    SelPhi = Selection("SelPhi",
                       Algorithm=makePhi,
                       RequiredSelections=[_kaons])

    PreselBs2JPsiPhiCommon = CombineParticles("PreselBs2JPsiPhiCommon")
    PreselBs2JPsiPhiCommon.DecayDescriptor = "B_s0 -> J/psi(1S) phi(1020)"
    PreselBs2JPsiPhiCommon.addTool(OfflineVertexFitter())
    PreselBs2JPsiPhiCommon.VertexFitters.update({"": "OfflineVertexFitter"})
    PreselBs2JPsiPhiCommon.OfflineVertexFitter.useResonanceVertex = False
    PreselBs2JPsiPhiCommon.ReFitPVs = True
    PreselBs2JPsiPhiCommon.DaughtersCuts = {}
    PreselBs2JPsiPhiCommon.CombinationCut = "(ADAMASS('B_s0') < 500*MeV)"
    PreselBs2JPsiPhiCommon.MotherCut = "(BPVIPCHI2()< 25)& (VFASPF(VCHI2)<75)"

    return Selection("SelBs2JPsiPhi",
                     Algorithm=PreselBs2JPsiPhiCommon,
                     RequiredSelections=[SelDJPsi, SelPhi])
def makeD2MuMuMuMu(name,inputSel) :
    """
    D --> 4 mu selection
    """
    from Configurables import OfflineVertexFitter
    D2MuMuMuMu = CombineParticles("Combine"+name)
    D2MuMuMuMu.DecayDescriptor = "[D0 -> J/psi(1S) J/psi(1S)]cc"
    D2MuMuMuMu.addTool( OfflineVertexFitter() )
    D2MuMuMuMu.VertexFitters.update( { "" : "OfflineVertexFitter"} )


    D2MuMuMuMu.CombinationCut =  "(ADAMASS('D0')<500*MeV) "\
                                 "& (AMAXDOCA('')<0.3*mm) "

 
    D2MuMuMuMu.MotherCut = "(VFASPF(VCHI2/VDOF)<12.) "\
			      "& (MIPCHI2DV(PRIMARY) < 25. )"

    return Selection (name,
                      Algorithm = D2MuMuMuMu,
                      RequiredSelections = inputSel)
def makeDstar2D2MuMuMuMu(name,inputSel) :
    from Configurables import OfflineVertexFitter
    """
    D* --> pi (D0 --> 4 mu) selection
    """

    Dstar2Dpi = CombineParticles("CombineDstar"+name)
    Dstar2Dpi.DecayDescriptor = "[D*(2010)+ -> D0 pi+]cc"
    Dstar2Dpi.addTool( OfflineVertexFitter() )
    Dstar2Dpi.VertexFitters.update( { "" : "OfflineVertexFitter"} )
    Dstar2Dpi.DaughtersCuts = { "pi+" : "(TRCHI2DOF < 2.0 ) "\
				" & (MIPCHI2DV(PRIMARY) < 25.)"}
    Dstar2Dpi.CombinationCut =  "(ADAMASS('D*(2010)+')<500.*MeV) "\
				" & ( AMAXDOCA('')< 0.3*mm)"
    Dstar2Dpi.MotherCut   =     "(VFASPF(VCHI2/VDOF) < 12.)"\
				" & (MM - CHILD(MM,1) > 120.*MeV) & (MM - CHILD(MM,1) < 174.*MeV)"


    return Selection (name,
                      Algorithm = Dstar2Dpi,
                      RequiredSelections = inputSel)
def makeLoose(name, MuIPChi2, MuTrChi2, BIPChi2, BFDChi2):
    """      
    loose Bs2mumu selection object to monitor selection,
    systematics from cuts, etc.
    starts from Phys/StdNoPIDsMuons

    prescaled

    Arguments:
    name        : name of the Selection.
    MuIPChi2    : muon MIPCHI2DV(PRIMARY)
    MuTrChi2    : muon TRCHI2
    BIPChi2     : Bs MIPCHI2DV(PRIMARY)
    BFDChi2     : Bs BPVVDCHI2> %(BFDChi2)
    """
    from Configurables import OfflineVertexFitter
    Bs2MuMuNoMuIDLoose = CombineParticles("Combine" + name)
    Bs2MuMuNoMuIDLoose.DecayDescriptor = "B_s0 -> mu+ mu-"
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    Bs2MuMuNoMuIDLoose.addTool(OfflineVertexFitter())
    Bs2MuMuNoMuIDLoose.VertexFitters.update({"": "OfflineVertexFitter"})
    Bs2MuMuNoMuIDLoose.OfflineVertexFitter.useResonanceVertex = False
    Bs2MuMuNoMuIDLoose.ReFitPVs = True
    Bs2MuMuNoMuIDLoose.DaughtersCuts = { "mu+" : "(TRCHI2DOF < %(MuTrChi2)s ) "\
                                         "& (MIPCHI2DV(PRIMARY)> %(MuIPChi2)s ) "% locals() }

    Bs2MuMuNoMuIDLoose.CombinationCut = "(ADAMASS('B_s0')<600*MeV)"\
                                        "& (AMAXDOCA('')<0.5*mm)"

    Bs2MuMuNoMuIDLoose.MotherCut = "(VFASPF(VCHI2/VDOF)<25) "\
                                   "& (ADMASS('B_s0') < 600*MeV )"\
                                   "& (BPVDIRA > 0) "\
                                   "& (BPVVDCHI2> %(BFDChi2)s)"\
                                   "& (BPVIPCHI2()< %(BIPChi2)s) "% locals()

    _stdNoPIDsMuons = DataOnDemand(Location="Phys/StdNoPIDsMuons/Particles")

    return Selection(name,
                     Algorithm=Bs2MuMuNoMuIDLoose,
                     RequiredSelections=[_stdNoPIDsMuons])
Beispiel #27
0
'''

from Gaudi.Configuration import *
from StrippingConf.StrippingLine import StrippingLine, StrippingMember
from Configurables import FilterDesktop, CombineParticles, OfflineVertexFitter
import GaudiKernel.SystemOfUnits as Units

######
# Bu #
######
Bu2JpsiK = CombineParticles("StripBu2JpsiK")
Bu2JpsiK.DecayDescriptor = "[ B+ -> J/psi(1S) K+ ]cc"
Bu2JpsiK.InputLocations = ["StdLTUnbiasedJpsi2MuMu",
                           "StdLooseKaons"]

Bu2JpsiK.addTool( OfflineVertexFitter() )
Bu2JpsiK.VertexFitters.update( { "" : "OfflineVertexFitter"} )
Bu2JpsiK.OfflineVertexFitter.useResonanceVertex = False
Bu2JpsiK.ReFitPVs = True

Bu2JpsiK.DaughtersCuts = {"K+" :
                          "  ((PIDK - PIDp)>-6.)"\
                          "& (PIDK > -5.)"\
                          "& (TRCHI2DOF<4.)"\
                          "& (PT>1300.*MeV)"\
                          "& (P>10000.*MeV)"
                          }

Bu2JpsiK.CombinationCut = "ADAMASS('B+') < 300.*MeV"
Bu2JpsiK.MotherCut = "(VFASPF(VCHI2/VDOF)<5.)"
Beispiel #28
0
StdUnbiasedPhi2KK = FilterDesktop("StripStdUnbiasedPhi2KK")
StdUnbiasedPhi2KK.InputLocations = ["StdLooseUnbiasedPhi2KK"]
StdUnbiasedPhi2KK.Code = "  (MINTREE('K+'==ABSID, PIDK) > -5.0)" \
                         "& (ADMASS('phi(1020)') < 15.*MeV)" \
                         "& (PT > 1000.*MeV)" \
                         "& (VFASPF(VCHI2/VDOF) < 20.0)"
######
# Bs #
######
Bs2JpsiPhi = CombineParticles("StripBs2JpsiPhi")
Bs2JpsiPhi.DecayDescriptor = "B_s0 -> J/psi(1S) phi(1020)"
Bs2JpsiPhi.InputLocations = [
    "StdLTUnbiasedJpsi2MuMu", "StripStdUnbiasedPhi2KK"
]
# Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Phi
Bs2JpsiPhi.addTool(OfflineVertexFitter())
Bs2JpsiPhi.VertexFitters.update({"": "OfflineVertexFitter"})
Bs2JpsiPhi.OfflineVertexFitter.useResonanceVertex = False
Bs2JpsiPhi.ReFitPVs = True

# Basic + loose offline PID
Bs2JpsiPhi.CombinationCut = "ADAMASS('B_s0') < 300.*MeV"
Bs2JpsiPhi.MotherCut = "(VFASPF(VCHI2/VDOF)<5) & (MIPCHI2DV(PRIMARY) < 25.0)"

############################################
# Create StrippingLine with this selection #
############################################
Bs2JpsiPhiLine = StrippingLine('Bs2JpsiPhiLine',
                               prescale=1,
                               algos=[StdUnbiasedPhi2KK, Bs2JpsiPhi],
                               stream='BExclusive')
Beispiel #29
0
                             "& (MINTREE( ('pi+'==ABSID), MIPCHI2DV(PRIMARY)) >4.)"\
                             "& (MAXTREE( ('pi+'==ABSID), TRCHI2DOF) <20.)"\
                             "& (VFASPF(VCHI2/VDOF)<20.)"\
                             "& (ADMASS('KS0') < 100.0*MeV)"

################
# Bd -> JpsiKS #
################
Bd2JpsiKS = CombineParticles("StripBd2JpsiKS")
Bd2JpsiKS.DecayDescriptor = "[B0 -> J/psi(1S) KS0]cc"
Bd2JpsiKS.InputLocations = [
    "StripKSLLForBd2Jpsi2MuMuKS", "StripKSDDForBd2Jpsi2MuMuKS",
    "StdLTUnbiasedJpsi2MuMu"
]

Bd2JpsiKS.addTool(OfflineVertexFitter())
Bd2JpsiKS.VertexFitters.update({"": "OfflineVertexFitter"})
Bd2JpsiKS.OfflineVertexFitter.useResonanceVertex = False
Bd2JpsiKS.ReFitPVs = True

Bd2JpsiKS.DaughtersCuts = {'KS0': 'PT>1.*GeV', 'J/psi(1S)': 'PT>1.*GeV'}
Bd2JpsiKS.CombinationCut = "ADAMASS('B0') < 300.*MeV"
Bd2JpsiKS.MotherCut = "(VFASPF(VCHI2/VDOF)<15)"

############################################
# Create StrippingLine with this selection #
############################################
Bd2JpsiKSLine = StrippingLine(
    'Bd2JpsiKSLine',
    prescale=1,
    algos=[KSLLForBd2Jpsi2MuMuKS, KSDDForBd2Jpsi2MuMuKS, Bd2JpsiKS],