Exemple #1
0
    def buildPIDLineWithJpsi(self, configRowId):
        ## Resolves possible clone statements
        _config = self._resolveCloning(configRowId)

        ## Prepares the tag&probe cut if needed
        _combinationCutJpsi = _config['JpsiCombinationCut']
        _combinationCut = _config['CombinationCut']

        if 'TagAndProbeCut' in _config:
            _id = ["1", "2"]
            _combinationCutJpsi += ' & '
            _combinationCutJpsi += self._buildTagProbeCut(
                _config['TagAndProbeCut'], _id)

            ###print _combinationCut

        _algorithmJpsi = CombineParticles()
        #_algorithmJpsi = CombineParticles(self.name + configRowId + 'JpsiAlgorithm')

        _algorithmJpsi.CombinationCut = _combinationCutJpsi
        _algorithmJpsi.DaughtersCuts = _config['DaughtersCuts']
        _algorithmJpsi.MotherCut = _config['JpsiMotherCut']
        _algorithmJpsi.DecayDescriptor = _config['DecayDescriptorJpsi']

        _requiredSelections = [
            DataOnDemand(x) for x in _config['InputTESJpsi']
        ]
        _selectionJpsi = Selection(self.name + configRowId + 'SelectionJpsi',
                                   Algorithm=_algorithmJpsi,
                                   RequiredSelections=_requiredSelections)

        _algorithm = CombineParticles()
        #_algorithm = CombineParticles(self.name + configRowId + 'Algorithm')

        _algorithm.CombinationCut = _combinationCut
        _algorithm.DaughtersCuts = _config['DaughtersCuts']
        _algorithm.MotherCut = _config['MotherCut']
        _algorithm.DecayDescriptor = _config['DecayDescriptor']

        _requiredSelections = [_selectionJpsi] + [
            DataOnDemand(x) for x in _config['InputTES']
        ]
        _selection = Selection(self.name + configRowId + 'Selection',
                               Algorithm=_algorithm,
                               RequiredSelections=_requiredSelections)

        _line = StrippingLine(
            self.name + configRowId + 'Line',
            prescale=_config['Prescale'],
            checkPV=_config['CheckPV'],
            EnableFlavourTagging=False,
            RequiredRawEvents=_config['RawEvent']
            #, MDSTFlag             = _config['MDST.DST']
            ,
            HLT1=_config['Hlt1Filter'],
            HLT2=_config['Hlt2Filter'],
            algos=[_selection],
            ODIN=self.odin)

        return _line
Exemple #2
0
def makeTau2PhiMu(name):
    """
    Please contact Giulio Dujany if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    #from Configurables import OfflineVertexFitter
    Tau2PhiMu = CombineParticles()
    Tau2PhiMu.DecayDescriptor = " [ tau+ -> phi(1020) mu+ ]cc"

    makePhi = CombineParticles()
    makePhi.DecayDescriptor = "phi(1020) -> K+ K-"
    makePhi.DaughtersCuts = {
        "K+":
        "(ISLONG) & (TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & (PT>300*MeV) & (PIDK > 0) & ( BPVIPCHI2 () >  9 )",
        "K-":
        "(ISLONG) & (TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & (PT>300*MeV) & (PIDK > 0) & ( BPVIPCHI2 () >  9 )"
    }

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

    makePhi.CombinationCut = "(ADAMASS('phi(1020)')<30*MeV)"
    makePhi.MotherCut = " ( VFASPF(VCHI2) < 25 ) & (MIPCHI2DV(PRIMARY)> 9)"

    SelPhi = Selection(name + "SelPhi",
                       Algorithm=makePhi,
                       RequiredSelections=[_kaons])

    Tau2PhiMu.DaughtersCuts = {
        "mu-":
        " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & ( BPVIPCHI2 () >  9 )"
    }
    Tau2PhiMu.CombinationCut = "(ADAMASS('tau-')<150*MeV)"

    Tau2PhiMu.MotherCut = "( VFASPF(VCHI2) < 25 ) &  ( (BPVLTIME () * c_light)   > 50 * micrometer ) &  ( BPVIPCHI2() < 100 ) "

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

    SelTau = Selection(name + "makeTau",
                       Algorithm=Tau2PhiMu,
                       RequiredSelections=[SelPhi, _stdLooseMuons])

    # Trigger selection
    from Configurables import TisTosParticleTagger
    _tisTosFilter = TisTosParticleTagger(name + "Triggered")
    _tisTosFilter.TisTosSpecs = {
        'L0Global%TIS': 0,
        'L0MuonDecision%TOS': 0,
        'Hlt1TrackAllL0Decision%TOS': 0,
        'Hlt1TrackMuonDecision%TOS': 0
    }

    SelTau_triggered = Selection(
        name,
        Algorithm=_tisTosFilter,
        RequiredSelections=[SelTau],
    )

    return SelTau_triggered
Exemple #3
0
def makePhi2KK(name, KaonPT, KaonIPCHI2, KaonPIDK, PhiMassWin, PhiPT,
               PhiVCHI2):
    """
    Create and return a Phi -> KK Selection object.
    Starts from DataOnDemand 'Phys/StdLoosePhi2KK'.
    Arguments:
    name             : name of the Selection.
    KaonPT           : Minimum transverse momentum of K (MeV).
    KaonIPCHI2       : Minimum impact parameter chi2 of K.
    KaonPIDK         : Minimum PID_{K-pi} of K.
    PhiPT            : Minimum transverse momentum of Phi (MeV).
    PhiMassWin       : Phi invariant mass window around PDG mass value (MeV).
    PhiVCHI2         : Maximum Phi vertex chi2 (per degree of freedom?)
    """

    _stdKaons = DataOnDemand(Location="Phys/StdLooseKaons/Particles")

    _Phi2KK = CombineParticles()
    _Phi2KK.DecayDescriptor = "phi(1020) -> K+ K-"

    _Phi2KK.DaughtersCuts = {
        "K+":
        "(PT>%(KaonPT)s*MeV)&(MIPCHI2DV(PRIMARY)>%(KaonIPCHI2)s)&(PIDK > %(KaonPIDK)s)"
        % locals()
    }

    _Phi2KK.CombinationCut = "(ADAMASS('phi(1020)') < %(PhiMassWin)s *MeV)" % locals(
    )
    _Phi2KK.MotherCut = "(VFASPF(VCHI2/VDOF)< %(PhiVCHI2)s) & (PT > %(PhiPT)s *MeV)" % locals(
    )

    return Selection(name, Algorithm=_Phi2KK, RequiredSelections=[_stdKaons])
Exemple #4
0
def Dstar(name, D0Sel, config):
    """
    Selection for D*
    """

    _DSt = CombineParticles()
    _DSt.DecayDescriptor = "[D*(2010)+ -> D0 pi+]cc"
    slowPiCuts = "(PT>%(SlowPiPt)s) & (TRCHI2DOF < %(SlowPiTrkChi2)s)" % locals(
    )['config']
    d0Cuts = "ALL"
    _DSt.DaughtersCuts = {'pi+': slowPiCuts, 'D0': d0Cuts}
    combcut = """
    (APT>%(DstarPt)s)
    & (ADAMASS('D*(2010)+')<75)
    & (AM - AM1 < 165 * MeV) 
    """
    _DSt.CombinationCut = combcut % locals()['config']
    mothercut = """
    (VFASPF(VCHI2PDOF)<%(DstarVtxChi2Ndof)s)
    & (M-MAXTREE('D0'==ABSID,M)<%(DeltaM_Max)s)
    & (M-MAXTREE('D0'==ABSID,M)>%(DeltaM_Min)s)
    """
    _DSt.MotherCut = mothercut % locals()['config']

    DSt = Selection("SelDSt2D0PiFor" + name,
                    Algorithm=_DSt,
                    RequiredSelections=[StdAllNoPIDsPions, D0Sel])

    return DSt
Exemple #5
0
def D0(name, config):
    """
    Selection for D0
    """

    _D0 = CombineParticles()
    _D0.DecayDescriptor = "[D0 -> K- pi+]cc"
    dauCutStr = "(PT > %(DaugPt)s) & (P > %(DaugP)s) & (TRCHI2DOF < %(DaugTrkChi2)s) & (MIPCHI2DV(PRIMARY) > %(DaugIPChi2)s)" % locals(
    )['config']
    _D0.DaughtersCuts = {"K+": dauCutStr, "pi+": dauCutStr}
    _D0.CombinationCut = "(AMINDOCA('')<0.5)&(ADAMASS('D0')<85 * MeV)" % locals(
    )['config']
    mothercut = """
    (PT>%(D0Pt)s)
    & (VFASPF(VCHI2PDOF)<%(D0VtxChi2Ndof)s)
    & (BPVVDCHI2>%(D0FDChi2)s)
    & (BPVDIRA>%(D0BPVDira)s)
    & (BPVIPCHI2()<%(D0IPChi2)s)
    & (ADMASS('D0') < %(D0MassWin)s )
    & ( ADWM( 'D0' , WM( 'pi-' , 'K+') ) > %(DCS_WrongMass)s)
    """
    # take these out as they shape the sidebands
    # & ( ADWM( 'D0' , WM( 'K-' , 'K+') ) > %(KK_WrongMass)s)
    # & ( ADWM( 'D0' , WM( 'pi-' , 'pi+') ) > %(PiPi_WrongMass)s)
    # """
    _D0.MotherCut = mothercut % locals()['config']

    D0 = Selection("SelD02RSKPiFor" + name,
                   Algorithm=_D0,
                   RequiredSelections=[StdAllNoPIDsKaons, StdAllNoPIDsPions])
    return D0
Exemple #6
0
def makeBs2Kst_0Kst_0(name, Kst_0sel, BMassWin, BVCHI2, BDOCA, BIPCHI2,
                      BFDistanceCHI2, SumPT, BDIRA):
    """
       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) & (BPVDIRA > %(BDIRA)s)" % locals(
    )
    _combinationCut = "(ADAMASS('B_s0') < %(BMassWin)s *MeV) & (AMAXDOCA('',False)< %(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()
    _Bs.DecayDescriptor = "B_s0 -> K*_0(1430)0 K*_0(1430)~0"
    _Bs.CombinationCut = _combinationCut
    _Bs.MotherCut = _motherCuts

    _Bs.ReFitPVs = True

    return Selection(name, Algorithm=_Bs, RequiredSelections=[Kst_0sel])
Exemple #7
0
def makeD02kpipi0(name):

    pi0sel = MergedSelection(
        "Pi0For" + name,
        RequiredSelections=[StdLooseMergedPi0, StdLooseResolvedPi0])

    str_D0_ChargedDau = "(PT>500*MeV) & (P>5*GeV) & (MIPCHI2DV(PRIMARY)>4) & (TRCHI2DOF<5)"
    str_D0_Pi0 = "(PT>800*MeV) & (P>5*GeV)"
    str_D0_CombCuts = "(ADAMASS('D0')<200*MeV) & (ADOCA(1,2) < 1.5) & (AHASCHILD(((ABSID == 'K+') | (ABSID == 'pi+')) & (MIPCHI2DV(PRIMARY)>40)))"
    str_D0_MotherCuts = "(BPVDIRA>0.9) & (PT>2.5*GeV) & (VFASPF(VCHI2/VDOF)<10) & (BPVVDCHI2>36)"
    str_D0_DecayDescriptor_RS = "[D0 -> K- pi+ pi0]cc"
    str_D0_Sidebands = "200*MeV"

    d0 = CombineParticles()
    d0.DecayDescriptor = str_D0_DecayDescriptor_RS
    d0.DaughtersCuts = {
        "K-": str_D0_ChargedDau +
        ' & ((PPINFO(LHCb.ProtoParticle.RichDLLk,-1000))>0)',
        "pi+": str_D0_ChargedDau +
        ' & ((PPINFO(LHCb.ProtoParticle.RichDLLk,-1000))<0)',
        "pi0": str_D0_Pi0
    }
    d0.CombinationCut = str_D0_CombCuts
    d0.MotherCut = str_D0_MotherCuts

    return Selection(
        "D02Kpipi0For" + name,
        Algorithm=d0,
        RequiredSelections=[pi0sel, StdNoPIDsPions, StdNoPIDsKaons])
Exemple #8
0
def makeBs2PhiKst(name, Phisel, Kstsel, BMassWin, BVCHI2, BDOCA, BDIRA):
    """
       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) & (BPVDIRA > %(BDIRA)s)" % locals(
    )
    _combinationCut = "(ADAMASS('B_s0') < %(BMassWin)s *MeV) & (AMAXDOCA('',False)< %(BDOCA)s *mm)" % locals(
    )

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

    _Bs.ReFitPVs = True

    return Selection(name, Algorithm=_Bs, RequiredSelections=[Phisel, Kstsel])
Exemple #9
0
def makeEtaPrime2pipipi(name, config):
    """
        eta' selection for tau -> mu eta'
        Please contact Guido Andreassi if you think of prescaling this line!
        
        Arguments:
        name        : name of the Selection , configuration dictionary.
        """
    EtaPrime2pipipi = CombineParticles()
    EtaPrime2pipipi.DecayDescriptor = "eta_prime -> pi+ pi- pi0"
    EtaPrime2pipipi.ReFitPVs = True

    EtaPrime2pipipi.DaughtersCuts = {
        "pi+": "{piplus_cuts}".format(**config),
        "pi-": "{piminus_cuts}".format(**config),
        "pi0": "{pi0_cuts}".format(**config)
    }

    EtaPrime2pipipi.CombinationCut = "{etap_mass_window}".format(**config)
    EtaPrime2pipipi.MotherCut = "{etap_cuts}".format(**config)

    _stdLoosePions = DataOnDemand(Location="Phys/StdLoosePions/Particles")
    _stdLooseResolvedPi0 = DataOnDemand(
        Location="Phys/StdLooseResolvedPi0/Particles")
    _stdLooseMergedPi0 = DataOnDemand(
        Location="Phys/StdLooseMergedPi0/Particles")
    _stdPi0 = MergedSelection(
        "Pi0For" + name,
        RequiredSelections=[_stdLooseResolvedPi0, _stdLooseMergedPi0])

    return Selection(name,
                     Algorithm=EtaPrime2pipipi,
                     RequiredSelections=[_stdLoosePions, _stdPi0])
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.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    _Bs.OfflineVertexFitter.useResonanceVertex = False
    return Selection(name, 
                     Algorithm = _Bs,
                     RequiredSelections = DaughterLists)
Exemple #11
0
def makeEtaPrime2pipigamma(name, config):
    """
        eta' selection for tau -> mu eta'
        Please contact Guido Andreassi if you think of prescaling this line!
        
        Arguments:
        name        : name of the Selection , configuration dictionary.
        """
    EtaPrime2pipigamma = CombineParticles()
    EtaPrime2pipigamma.DecayDescriptor = "eta_prime -> pi+ pi- gamma"
    EtaPrime2pipigamma.ReFitPVs = True

    EtaPrime2pipigamma.DaughtersCuts = {
        "pi+": "{piplus_cuts}".format(**config),
        "pi-": "{piminus_cuts}".format(**config),
        "gamma": "{gamma_cuts}".format(**config)
    }

    EtaPrime2pipigamma.CombinationCut = "{etap_mass_window}".format(**config)
    EtaPrime2pipigamma.MotherCut = "{etap_cuts}".format(**config)

    _stdLoosePions = DataOnDemand(Location="Phys/StdLoosePions/Particles")
    _stdLooseAllPhotons = DataOnDemand(
        Location="Phys/StdLooseAllPhotons/Particles")

    return Selection(name,
                     Algorithm=EtaPrime2pipigamma,
                     RequiredSelections=[_stdLoosePions, _stdLooseAllPhotons])
Exemple #12
0
def makeTau2MuEtaPrime(self, name, config, setEtaPrime):
    """
    tau -> mu eta' selection
        
    Please contact Guido Andreassi if you think of prescaling this line!
        
    Arguments:
    name        : name of the Selection, configuration dictionary.
    """

    if setEtaPrime == 'gamma':
        self.SelEtaPrime = makeEtaPrime2pipigamma(
            "selEtap_gamma", config['config_EtaPrime2pipigamma'])

    if setEtaPrime == 'pi0':
        self.SelEtaPrime = makeEtaPrime2pipipi(
            "selEtap_pi0", config['config_EtaPrime2pipipi'])

    Tau2MuEtaPrime = CombineParticles()
    Tau2MuEtaPrime.DecayDescriptor = "[tau+ -> mu+ eta_prime]cc "
    Tau2MuEtaPrime.ReFitPVs = True
    Tau2MuEtaPrime.DaughtersCuts = {"mu+": "{muplus_cuts}".format(**config)}
    Tau2MuEtaPrime.CombinationCut = "{tau_mass_window}".format(**config)
    Tau2MuEtaPrime.MotherCut = "{tau_cuts}".format(**config)

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

    return Selection(name,
                     Algorithm=Tau2MuEtaPrime,
                     RequiredSelections=[self.SelEtaPrime, _muons])
    def __CreateSelectionRho__(self, lName, RhoCombCut, RhoCut, PionCut):
        '''
        rho(770)0 -> pi+ pi- selection (from StdAllLoosePions)
        '''

        from StandardParticles import StdAllLoosePions

        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineRho = CombineParticles()
        CombineRho.InputPrimaryVertices = self.__PVOutputLocation__

        CombineRho.DecayDescriptor = "rho(770)0 -> pi+ pi-"

        if (len(RhoCombCut) > 0):
            CombineRho.CombinationCut = RhoCombCut

        CombineRho.MotherCut = RhoCut
        CombineRho.DaughtersCuts = {"pi+": PionCut}

        from PhysSelPython.Wrappers import Selection
        SelRho = Selection("SelBuild_" + lName + "_Rho",
                           Algorithm=CombineRho,
                           RequiredSelections=[StdAllLoosePions])

        return SelRho
    def __Selection_CreateDiMuonSSLowP__(self, lName, DiMuonCuts, MuonCuts, IsMuonFlag, MuonPIDmu):
        '''
        Clone the StdVeryLooseDiMuon to build same sign candidates
        '''
        from StandardParticles import StdNoPIDsMuons, StdVeryLooseMuons
        _requires =  [StdNoPIDsMuons] 
        from  GaudiConfUtils.ConfigurableGenerators import CombineParticles
        muhigh = '(0.5<PPINFO(LHCb.ProtoParticle.InAccMuon,-1)) '
        mulow = '(0.5>PPINFO(LHCb.ProtoParticle.InAccMuon,-1)) &  ( PIDmu > 3.0 )' 
        CombineDiMuonSSLowP = CombineParticles()
        CombineDiMuonSSLowP.DecayDescriptor = "[J/psi(1S) -> mu+ mu+]cc"
        CombineDiMuonSSLowP.DaughtersCuts = { "mu+" : MuonCuts,  "mu-": MuonCuts  }
        
        if IsMuonFlag:
            CombineDiMuonSSLowP.CombinationCut =  "( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,1) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,2) &  ACHILDCUT(ISMUON, 1) & ACHILDCUT(PIDmu > "+str(MuonPIDmu) +",2) ) | ( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,2) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,1) &  ACHILDCUT(ISMUON, 2) & ACHILDCUT(PIDmu > "+str(MuonPIDmu) + " ,1) )"
        else:
            CombineDiMuonSSLowP.CombinationCut =  "( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,1) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,2) &  ACHILDCUT(ISMUONLOOSE, 1) & ACHILDCUT(PIDmu > 0.0 ,2) ) | ( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,2) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,1) &  ACHILDCUT(ISMUONLOOSE, 2) & ACHILDCUT(PIDmu > 0.0 ,1) )"
       
        CombineDiMuonSSLowP.MotherCut     = DiMuonCuts

        from StandardParticles import StdLooseMuons, StdVeryLooseMuons
        Muons = StdLooseMuons if IsMuonFlag else StdVeryLooseMuons
        
        from PhysSelPython.Wrappers import Selection
        SelDiMuonSSLowP = Selection("Sel_" + lName + "_DiMuonSSLowP", Algorithm = CombineDiMuonSSLowP, RequiredSelections = _requires )
        return SelDiMuonSSLowP
Exemple #15
0
    def __Selection_CreateKstar__(self, lName, KstarCombCut, KstarCut, KaonCut,
                                  PionCut, UseNoPIDsParticles):
        '''
        Make K* using StdNoPID common particles
        '''

        from StandardParticles import StdNoPIDsPions, StdNoPIDsKaons, StdLooseKaons, StdLoosePions

        _requires = [
            StdNoPIDsKaons, StdNoPIDsPions
        ] if UseNoPIDsParticles else [StdLooseKaons, StdLoosePions]

        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineKstar = CombineParticles()

        CombineKstar.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc"

        CombineKstar.CombinationCut = KstarCombCut
        CombineKstar.MotherCut = KstarCut
        CombineKstar.DaughtersCuts = {"K+": KaonCut, "pi-": PionCut}

        from PhysSelPython.Wrappers import Selection
        SelKstar = Selection(
            "Sel_" + lName + "_Kstar",
            Algorithm=CombineKstar,
            RequiredSelections=_requires)  #[StdNoPIDsPions, StdNoPIDsKaons])

        return SelKstar
    def __Selection_CreateK1__(self, lName, K1CombCut, K1Cut, KaonCut, PionCut,
                               UseNoPIDsParticles):
        '''
        Make K1 using StdNoPID common particles
        '''

        from StandardParticles import StdAllNoPIDsPions, StdAllNoPIDsKaons, StdAllLooseKaons, StdAllLoosePions

        #just a test!!!!!
        _requires = [
            StdAllNoPIDsKaons, StdAllNoPIDsPions
        ] if UseNoPIDsParticles else [StdAllLooseKaons, StdAllLoosePions]
        #_requires = [StdAllLooseKaons, StdAllLoosePions]
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineK1 = CombineParticles()

        CombineK1.DecayDescriptor = "[K_1(1270)+ -> K+ pi- pi+]cc"

        CombineK1.CombinationCut = K1CombCut
        CombineK1.MotherCut = K1Cut
        CombineK1.DaughtersCuts = {"K+": KaonCut, "pi-": PionCut}

        from PhysSelPython.Wrappers import Selection
        SelK1 = Selection(
            "Sel_" + lName + "_K1",
            Algorithm=CombineK1,
            RequiredSelections=_requires)  #[StdNoPIDsPions, StdNoPIDsKaons])

        return SelK1
Exemple #17
0
def makeBu(name):
    """
    detached Bu-->JPsiK selection.

    Please contact Flavio Archilli if you think of prescaling this line!

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

    #from Configurables import OfflineVertexFitter

    SelDJPsi = makeDetachedJPsi(name)

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

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

    return Selection("SelBu2KJPsiee",
                     Algorithm=PreselBu2JPsiKCommon,
                     RequiredSelections=[SelDJPsi, _kaons])
Exemple #18
0
def makeDetachedJPsi(name):
    """
    detached JPsi selection for B--> JPsi X calibration and
    normalization channels. 

    Please contact Flavio Archilli if you think of prescaling this line!

    Arguments:
    name        : name of the Selection.
    """
    #from Configurables import OfflineVertexFitter
    DetachedJPsi = CombineParticles()
    DetachedJPsi.DecayDescriptor = "J/psi(1S) -> e+ e-"
    #DetachedJPsi.addTool( OfflineVertexFitter )
    #DetachedJPsi.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    #DetachedJPsi.OfflineVertexFitter.useResonanceVertex = False
    DetachedJPsi.ReFitPVs = True
    DetachedJPsi.DaughtersCuts = { "e+" : "(TRCHI2DOF < 3 ) "\
                                   "& (MIPCHI2DV(PRIMARY)> 25.) "\
                                   "& (PIDe > 2) "}

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

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

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

    return Selection(name,
                     Algorithm=DetachedJPsi,
                     RequiredSelections=[_stdLooseElectrons])
Exemple #19
0
 def _makeTrigLikeDiMuons(self,name) :
     """
     Make PseudoJpsi (combination of two detached muons, inspired in Hlt2Soft)
     Arguments:
     name : name of the selection
     """
     
     PseudoJPsi = CombineParticles(DecayDescriptor = "J/psi(1S) -> mu+ mu-")
     PseudoJPsi.DecayDescriptor = "J/psi(1S) -> mu+ mu-"
     PseudoJPsi.CombinationCut = "(AMAXDOCA('')<%(DiDOCA)s*mm)" %self.config
     PseudoJPsi.MotherCut = ("(MINTREE('mu-' == ABSID, MIPDV(PRIMARY)) > %(IP)s)"
     + " & (CHILDCUT((TRGHOSTPROB < %(TRACK_TRGHOSTPROB_MAX)s),1))"
     + " & (CHILDCUT((TRGHOSTPROB < %(TRACK_TRGHOSTPROB_MAX)s),2))"
     + " & (MINTREE('mu-' == ABSID, MIPCHI2DV(PRIMARY)) > %(IPChi2Min)s)"
     + " & (MAXTREE('mu-' == ABSID, MIPCHI2DV(PRIMARY)) < %(IPChi2Max)s)"
     + " & ( VFASPF (sqrt(VX*VX+VY*VY)) > %(Rho)s) "
     + " & ( VFASPF ( VZ ) < %(SVZ)s) "
     + " & ((MIPDV(PRIMARY)/BPVVDZ)< %(MaxIpDistRatio)s)"
     + " & (MM < %(MaxMass)s)"
     + " & (VFASPF(VCHI2PDOF)<%(VertexChi2)s )"
     + " & (DOCAMAX < %(DiDOCA)s)"
     + " & (BPVVDZ > %(MinVDZ)s) "
     + " &  (BPVDIRA > %(MinBPVDira)s) " 
     #+ " & (PCUTA (ALV (1,2) < %(cosAngle)s))"
                             ) % self.config
     return Selection (name,
                       Algorithm = PseudoJPsi,
                       RequiredSelections = [self.SelMuons])
Exemple #20
0
def makeD2HHHInc(name,
              DaughterPT,
              DaughterP,
              DaughterIPChi2,
              Daughter2IPChi2,
              DaughterDOCA,
              DaughterDOCAChi2,
              PTSum,
              DDIRA,
              DIPChi2,
              DdcaFDChi2,
              DPt,
              DVXChi2NDOF,
              MinMassPosFit,
              MaxMassPosFit
              ):
    """
    Create and return a D -> HHHInclusive selection 
    Arguments:
    name           : name of the Selection.
    pionSel        : Pion Selection (from CommonParticles) 
    DaughterPT     : Minimum PT among daughters
    DaughterP      : Minimum P among daughters
    DaughterIPChi2 : Minimum IPChi2 among daughters
    Daughter2IPChi2: Minimum IPChi2 required to at least 2 daughters 
    DaughterDOCA   : Maximum distance of closest approach between 2 daughters 
    DaughterDOCAChi2:Maximum distance of closest approach between 2 daughters in error units 
    PTSum          : Minimum sum of daughters momenta
    DDIRA          : Minimum opening angle between sum_p and FD-direction
    DIPChi2        : Maximum IPChi2 of the D
    DdcaFDChi2     : Minimum distance from SV to any PV
    DPt            : Minimum D Momentum
    DVXChi2NDOF    : Maximum Chi2 of the D Vertex
    MinMassPosFit  : Minimum value of HHH invariant mass (MeV)
    MaxMassPosFit  : Maximum value of HHH invariant mass (MeV).
    """

    _DaughterCuts = "((MIPCHI2DV(PRIMARY)) > %(DaughterIPChi2)s ) & (P > %(DaughterP)s *MeV) & (PT > %(DaughterPT)s *MeV) " % locals() 
                      
    _Combcuts_HHH = "(ADOCACHI2CUT(%(DaughterDOCAChi2)s,'')) & (ADOCACUT(%(DaughterDOCA)s*mm,'')) & (ACHILD(PT,1)+ACHILD(PT,2)+ACHILD(PT,3) > %(PTSum)s*MeV) & (ANUM(MIPCHI2DV(PRIMARY) > %(Daughter2IPChi2)s ) >= 2) " % locals()
                   
    _Mothercuts_HHH = """ 
                      (PT > %(DPt)s) & (VFASPF(VCHI2/VDOF) < %(DVXChi2NDOF)s) & 
                      (BPVDIRA > %(DDIRA)s) & (BPVIPCHI2() < %(DIPChi2)s) & 
                      (VFASPF(VMINVDCHI2DV(PRIMARY)) > %(DdcaFDChi2)s)
                      """ % locals()
    _cutsMassPosFit = " (in_range ( %(MinMassPosFit)s ,  M  , %(MaxMassPosFit)s )) " % locals()
                   
    _combHHH = CombineParticles()
    _combHHH.DecayDescriptor = '[D+ -> pi- pi+ pi+]cc' 
    _combHHH.DaughtersCuts = { "pi+" : '(' + _DaughterCuts + ')' } 
    _combHHH.CombinationCut = '(' + _Combcuts_HHH + ')' 
    _combHHH.MotherCut = '(' + _Mothercuts_HHH + ' & ' + _cutsMassPosFit  + ')' 


    return Selection ( name,
                       Algorithm = _combHHH,
                       RequiredSelections = [StdNoPIDsPions])
Exemple #21
0
 def _4jets( self, name, ptcut ):
     HighPT4Jets = CombineParticles()
     HighPT4Jets.ParticleCombiners = { "" : "LoKi::VertexFitter" }
     HighPT4Jets.IgnoreP2PVFromInputLocations = True
     HighPT4Jets.DecayDescriptor = "H_10 -> CELLjet CELLjet CELLjet CELLjet"
     HighPT4Jets.DaughtersCuts = { "CELLjet" : "PT > "+ptcut+"*MeV" }
     HighPT4Jets.CombinationCut = "(ADOCACHI2CUT(50, ''))"
     HighPT4Jets.MotherCut = "VFASPF(VCHI2PDOF) < 20"
     return HighPT4Jets
Exemple #22
0
 def _psi2s2jpsihh(self, name, jpsi, pions):
     """
     Combine J/Psi and 2 pions to make psi(2S)
     """
     _psi2S = CombineParticles()
     _psi2S.DecayDescriptor = "psi(2S) -> J/psi(1S) pi+ pi-"
     _psi2S.CombinationCut = "(ADAMASS('psi(2S)')<200*MeV)"
     _psi2S.MotherCut = "(ADMASS('psi(2S)')<200*MeV)"
     return Selection(name,
                      Algorithm=_psi2S,
                      RequiredSelections=[jpsi, pions, pions])
Exemple #23
0
 def _dSPlus(self, name, Pion, Kaons):
     """
     Make Ds -> K K Pi
     """
     _dsPlus = CombineParticles()
     _dsPlus.DecayDescriptor = "[D_s+ -> K+ K- pi+]cc"
     _dsPlus.MotherCut = "(ADMASS('D_s+') < 300 *MeV)"
     _dsPlusConf = _dsPlus.configurable("Combine_" + name + "_Dsplus")
     _selDsPlus = Selection("Selection_" + name + "_DsPlus",
                            Algorithm=_dsPlusConf,
                            RequiredSelections=[Pion, Kaons])
     return _selDsPlus
    def __Kstar__(self, Kaons, Pions, conf):
        """
        Make a kstar
        """
        _kstar2kpi = CombineParticles()
        _kstar2kpi.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc"
        _kstar2kpi.MotherCut = self.__KpiCuts__(conf)

        _selKSTAR2KPI = Selection("Selection_" + self.name + "_Kstar",
                                  Algorithm=_kstar2kpi,
                                  RequiredSelections=[Kaons, Pions])
        return _selKSTAR2KPI
    def __Rho__(self, Pions, conf):
        """
        Make a rho
        """
        _rho2pipi = CombineParticles()
        _rho2pipi.DecayDescriptor = "rho(770)0 -> pi+ pi-"
        _rho2pipi.MotherCut = self.__KpiCuts__(conf)

        _selRHO2PIPI = Selection("Selection_" + self.name + "_Rho",
                                 Algorithm=_rho2pipi,
                                 RequiredSelections=[Pions])
        return _selRHO2PIPI
    def __Phi__(self, Kaons, conf):
        """
        Make a phi
        """
        _phi2kk = CombineParticles()
        _phi2kk.DecayDescriptor = "phi(1020) -> K+ K-"
        _phi2kk.MotherCut = self.__KpiCuts__(conf)

        _selPHI2KK = Selection("Selection_" + self.name + "_Phi",
                               Algorithm=_phi2kk,
                               RequiredSelections=[Kaons])
        return _selPHI2KK
    def __Kstar2KsPi__(self, Kshort, Pions, conf):
        """
        Make a kstarplus
        """
        _kstar2kspi = CombineParticles()
        _kstar2kspi.DecayDescriptor = "[K*(892)+ -> KS0 pi+]cc"
        _kstar2kspi.MotherCut = self.__KpiCuts__(conf)

        _selKSTAR2KSPI = Selection("Selection_" + self.name + "_Kstar2kspi",
                                   Algorithm=_kstar2kspi,
                                   RequiredSelections=[Kshort, Pions])
        return _selKSTAR2KSPI
Exemple #28
0
 def __Bs__(self, Muons, Kaons, conf):
     """
     Make and return a Bs selection
     """      
     _bs2KKmumu = CombineParticles()
     _bs2KKmumu.DecayDescriptor = "B_s0 -> K+ K- mu+ mu-"
     _bs2KKmumu.CombinationCut = "(ADAMASS('B_s0') < 1000.0 *MeV) & (AM12 < 1070.0 *MeV)"
     _bs2KKmumu.MotherCut = self.__BsCuts__(conf)
     
     SelBS2KKMUMU = Selection( "Selection_"+self.name,
                               Algorithm = _bs2KKmumu,
                               RequiredSelections = [ Muons, Kaons ] )
     return SelBS2KKMUMU
Exemple #29
0
 def _dSStarPlus(self, name, DPlus, Gamma):
     """
     Make Ds* -> Ds (=D_s+ for us) Gamma
     """
     _dsstar = CombineParticles()
     _dsstar.DecayDescriptor = "[D*_s+ -> D_s+ gamma]cc"
     _dsstar.MotherCut = "(ADMASS('D*_s+') < 300 *MeV)"
     _dsstar.DaughtersCuts = {'gamma': '(CL > 0.25)'}
     _dsstarConf = _dsstar.configurable("Combine_" + name + "_Dsstar")
     _selDsSTAR = Selection("Selection_" + name + "_DsStar",
                            Algorithm=_dsstarConf,
                            RequiredSelections=[DPlus, Gamma])
     return _selDsSTAR
Exemple #30
0
 def _myf0(self, name, pions):
     """
     Copy of the stuff which makes the StdLooseDetachedDipion
     """
     _f0 = CombineParticles()
     _f0.DecayDescriptor = "f_0(980) -> pi+ pi-"
     _f0.CombinationCut = "(AM<2700.0*MeV)"
     _f0.MotherCut = "(M<2700.0*MeV)"
     _f0Conf = _f0.configurable("Combine_" + name)
     _self0 = Selection("SelectionOff0For" + name,
                        RequiredSelections=[pions],
                        Algorithm=_f0Conf)
     return _self0