コード例 #1
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
コード例 #2
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
コード例 #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])
コード例 #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
コード例 #5
0
    def __Dimuon__(self, conf):
        '''
        Create a new dimuon from scratch
        '''
        wsCombinations = conf['DimuonWS']
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineDiMuon = CombineParticles()
        if wsCombinations == True:
            CombineDiMuon.DecayDescriptors = [
                "J/psi(1S) -> mu- mu+", "J/psi(1S) -> mu+ mu+",
                " J/psi(1S) -> mu- mu-"
            ]
        else:
            CombineDiMuon.DecayDescriptors = ["J/psi(1S) -> mu- mu+"]
        CombineDiMuon.DaughtersCuts = {
            "mu+": self.MuonCut,
            "mu-": self.MuonCut
        }
        CombineDiMuon.CombinationCut = self.DiMuonCombCut
        CombineDiMuon.MotherCut = self.DiMuonCut

        IsMuonFlag = conf['Muon_IsMuon']
        from StandardParticles import StdAllLooseMuons, StdAllVeryLooseMuons
        Muons = StdAllLooseMuons if IsMuonFlag else StdAllVeryLooseMuons

        from PhysSelPython.Wrappers import Selection
        SelDiMuon = Selection("Sel_" + self.name + "_DiMuon",
                              Algorithm=CombineDiMuon,
                              RequiredSelections=[Muons])
        return SelDiMuon
コード例 #6
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
コード例 #7
0
    def makeB2KSLLhh( self, name, config ) :
        """
        Create and store a B -> KS(LL) h+ h- Selection object.
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

	_massCutLow     = "(AM>(5279-%s)*MeV)"               % config['B_Mlow']
	_massCutHigh    = "(AM<(5279+%s)*MeV)"               % config['B_Mhigh']
	_daugMedPtCut   = "(ANUM(PT>%s*MeV)>=2)"             % config['BDaug_MedPT_PT']
	_daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config['BDaug_MaxPT_IP']
	_hhDocaCut      = "(ADOCA(1,2)<%s)"                  % config['hh_DOCA']
	_daugPtSumCut   = "((APT1+APT2+APT3)>%s*MeV)"        % config['BDaug_LL_PTsum']

	_combCuts = _massCutLow+'&'+_massCutHigh+'&'+_daugMedPtCut+'&'+_daugMaxPtIPCut+'&'+_hhDocaCut+'&'+_daugPtSumCut

	_vtxChi2Cut = "(VFASPF(VCHI2)<%s)"             % config['B_VtxChi2']
	_diraCut    = "(BPVDIRA>%s)"                   % config['B_Dira']
	_ipCut      = "(MIPDV(PRIMARY)<%s)"            % config['B_IPwrtPV']
	_fdCut      = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV']
	_fdChi2Cut  = "(BPVVDCHI2>%s)"                 % config['B_LL_FDChi2']

	_motherCuts = _vtxChi2Cut+'&'+_diraCut+'&'+_ipCut+'&'+_fdCut+'&'+_fdChi2Cut

	_B = CombineParticles()
	_B.DecayDescriptors = [ "B0 -> pi+ pi- KS0", \
	                        "B0 -> K+ pi- KS0", "B0 -> pi+ K- KS0", \
				"B0 -> K+ K- KS0" ]
	_B.DaughtersCuts = { "K+" : "TRCHI2DOF<%s"% config['Trk_Chi2'], "pi+" : "TRCHI2DOF<%s"% config['Trk_Chi2'] }
	_B.CombinationCut = _combCuts
	_B.MotherCut = _motherCuts

        self.selB2KSLLhh = Selection (name, Algorithm = _B, RequiredSelections = [ self.selKS2LL, self.pions, self.kaons ])
コード例 #8
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])
コード例 #9
0
 def makeB2LpLL( self, name, config ) :
     """
     Create and store a B -> Lambda~0(LL) p+  Selection object.
     Arguments:
     name             : name of the Selection.
     config           : config dictionary
     """
 
     _massCutLow     = "(AM>(5279-%s)*MeV)"               % config['B_2bodyMlow']
     _massCutHigh    = "(AM<(5279+%s)*MeV)"               % config['B_2bodyMhigh']
     _aptCut         = "(APT>%s*MeV)"                     % config['B_APTmin']
     _daugMedPtCut   = "(ANUM(PT>%s*MeV)>=2)"             % config['BDaug_MedPT_PT']
     _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))"            % config['BDaug_LL_maxDocaChi2']
     _daugPtSumCut   = "(APT1>%s*MeV)"                   % config['B_LL_PTMin']
 
     _combCuts = _aptCut+'&'+_daugPtSumCut+'&'+_daugMedPtCut+'&'+_massCutLow+'&'+_massCutHigh+'&'+_maxDocaChi2Cut
     
     _ptCut      = "(PT>%s*MeV)"                    % config['B_PTmin']
     _vtxChi2Cut = "(VFASPF(VCHI2)<%s)"             % config['B_VtxChi2']
     _diraCut    = "(BPVDIRA>%s)"                   % config['B_LL_Dira']
     _ipChi2Cut  = "(MIPCHI2DV(PRIMARY)<%s)"        % config['B_LL_IPCHI2wrtPV']
     _fdCut      = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV']
     _fdChi2Cut  = "(BPVVDCHI2>%s)"                 % config['B_LL_FDChi2']
 
     _motherCuts = _ptCut+'&'+_vtxChi2Cut+'&'+_diraCut+'&'+_ipChi2Cut+'&'+_fdCut+'&'+_fdChi2Cut
 
     _B = CombineParticles()
     _B.DecayDescriptors = [ "B- -> p~- Lambda0", "B+ -> p+ Lambda~0" ]
     _B.DaughtersCuts = { "p+" : "TRCHI2DOF<%s"% config['Trk_Chi2'] }
     _B.CombinationCut = _combCuts
     _B.MotherCut = _motherCuts
     
     return Selection (name, Algorithm = _B, RequiredSelections = [self.selLambda2LL, StdLooseProtons  ])
コード例 #10
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])
コード例 #11
0
    def makeBu2KSDDh(self, name, config):
        """
        Create and store a B -> KS(DD) h+ Selection object.
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

        _massCutLow = "(AM>(5279-%s)*MeV)" % config['B_Mlow']
        _massCutHigh = "(AM<(5279+%s)*MeV)" % config['B_Mhigh']
        _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config[
            'BDaug_MaxPT_IP']
        _daugPtSumCut = "((APT1+APT2)>%s*MeV)" % config['BDaug_DD_PTsum']

        _combCuts = _daugPtSumCut + '&' + _massCutLow + '&' + _massCutHigh + '&' + _daugMaxPtIPCut

        _pCut = "(P>%s*MeV)" % config['B_Pmin']
        _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['B_DD_VtxChi2']
        _diraCut = "(BPVDIRA>%s)" % config['B_Dira']
        _ipChi2Cut = "(MIPCHI2DV(PRIMARY)<%s)" % config['B_DD_IPCHI2wrtPV']
        _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV']
        _fdChi2Cut = "(BPVVDCHI2>%s)" % config['B_DD_FDChi2']

        _motherCuts = _pCut + '&' + _vtxChi2Cut + '&' + _diraCut + '&' + _ipChi2Cut + '&' + _fdCut + '&' + _fdChi2Cut

        _B = CombineParticles()
        _B.DecayDescriptors = ["B+ -> pi+ KS0", "B- -> pi- KS0"]
        _B.DaughtersCuts = {"pi+": "TRCHI2DOF<%s" % config['Trk_Chi2']}
        _B.CombinationCut = _combCuts
        _B.MotherCut = _motherCuts

        return Selection(name,
                         Algorithm=_B,
                         RequiredSelections=[self.selKS2DD, self.selH])
コード例 #12
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])
コード例 #13
0
def makeTau2eMuMu(name):
    """
    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """
    #from Configurables import OfflineVertexFitter
    Tau2eMuMu = CombineParticles()
    Tau2eMuMu.DecayDescriptors = [
        " [ tau+ -> e+ mu+ mu- ]cc", " [ tau+ -> mu+ mu+ e- ]cc"
    ]
    Tau2eMuMu.DaughtersCuts = { "mu+" : " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3  ) & ( BPVIPCHI2 () >  9 ) & (TRGHOSTPROB<0.3) " ,
                                "e+" : " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3  ) & ( BPVIPCHI2 () >  9 ) "\
                                "& (PIDe > 2) " }
    Tau2eMuMu.CombinationCut = "(ADAMASS('tau+')<200*MeV)"

    Tau2eMuMu.MotherCut = """
            ( VFASPF(VCHI2) < 15 ) &
            ( (BPVLTIME () * c_light)   > 100 * micrometer ) &
            ( BPVIPCHI2() < 100 )
            """

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

    return Selection(name,
                     Algorithm=Tau2eMuMu,
                     RequiredSelections=[_stdLooseMuons, _stdLooseElectrons])
コード例 #14
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()
    Bs2ee.DecayDescriptors = ["B_s0 -> e+ e-", "[B_s0 -> e+ e+]cc"]

    #Bs2ee.addTool( OfflineVertexFitter )
    #Bs2ee.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    #Bs2ee.OfflineVertexFitter.useResonanceVertex = False
    Bs2ee.ReFitPVs = False
    Bs2ee.DaughtersCuts = {"e+": "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 3 )"}

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

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

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

    return Selection(name,
                     Algorithm=Bs2ee,
                     RequiredSelections=[_stdLooseElectrons])
コード例 #15
0
    def _makeKstarPlus(self, name, kshorts, pions, params):
        """
        Make a K*(892)+ -> KS0 pi+
        """

        _Decays = "[K*(892)+ -> KS0 pi+]cc"

        _CombinationCut = "(APT > %(KaonPT)s *MeV) & " \
                          "(ADAMASS('K*(892)+') < %(KstarPMassWindow)s *MeV) & " \
                          "(ADOCACHI2CUT( %(KstarPADOCACHI2)s  , ''))" % params

        _MotherCut = "(VFASPF(VCHI2) < %(KstarPVertexCHI2)s)" % params

        _KshortCut = "(PT > %(KaonPT)s *MeV) & " \
                     "(M < %(DiHadronMass)s*MeV) & " \
                     "(NDAUGHTERS == NINTREE(ISBASIC & (MIPCHI2DV(PRIMARY) > %(KaonIPCHI2)s)))" % params

        _PionCut = "(PT > %(KaonPT)s *MeV) & " \
                   "(M < %(DiHadronMass)s*MeV) & " \
                   "(ISBASIC & (MIPCHI2DV(PRIMARY) > %(KaonIPCHI2)s))" % params

        _Combine = CombineParticles(DecayDescriptor=_Decays,
                                    CombinationCut=_CombinationCut,
                                    MotherCut=_MotherCut)

        _Combine.DaughtersCuts = {"KS0": _KshortCut, "pi+": _PionCut}

        return Selection(name,
                         Algorithm=_Combine,
                         RequiredSelections=[kshorts, pions])
コード例 #16
0
    def _makeK0s2TwoProngs(self, name,decay_descriptor, combcut, masscut) :
        """
        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.
        """
        if "mu+" in decay_descriptor:
            dname = "mu+"
            daughters = self.SelMuons
        else:
            dname = "pi+"
            daughters = self.SelPions 
        K0s2MuMu = CombineParticles(DecayDescriptor = decay_descriptor)
    
        K0s2MuMu.DaughtersCuts = { dname : "(MIPCHI2DV(PRIMARY)> 100.)"}
        K0s2MuMu.CombinationCut = combcut + "& (AMAXDOCA('')<%(DiDOCA)s*mm)"% self.config

        K0s2MuMu.MotherCut = "("+ masscut + "& (BPVDIRA>0) & ((BPVVDSIGN*M/P) > %(KSlife)s) & (MIPDV(PRIMARY)<0.4*mm))" %self.config
    
        return Selection (name,
                          Algorithm = K0s2MuMu,
                          RequiredSelections = [ daughters])
コード例 #17
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
コード例 #18
0
    def _makeMuE(self,
                 name,
                 params,
                 electronid=None,
                 muonid=None,
                 samesign=False):
        """
        Makes MuE combinations 
        """
        from StandardParticles import StdLooseElectrons as Electrons
        from StandardParticles import StdLooseMuons as Muons

        _DaughtersCut = "(PT > %(LeptonPT)s) & " \
                        "(MIPCHI2DV(PRIMARY)>%(LeptonIPCHI2)s)" % params

        _MassCut = "(AM > 100*MeV)"

        _DecayDescriptor = "[J/psi(1S) -> mu+ e-]cc"
        if samesign: _DecayDescriptor = "[J/psi(1S) -> mu+ e+]cc"

        _Combine = CombineParticles(DecayDescriptor=_DecayDescriptor,
                                    CombinationCut=_MassCut,
                                    MotherCut="(VFASPF(VCHI2/VDOF) < 9)")

        _ElectronCut = _DaughtersCut
        _MuonCut = _DaughtersCut

        if electronid: _ElectronCut += ("&" + electronid)
        if muonid: _MuonCut += ("&" + muonid)

        _Combine.DaughtersCuts = {"e+": _ElectronCut, "mu+": _MuonCut}

        return Selection(name,
                         Algorithm=_Combine,
                         RequiredSelections=[Muons, Electrons])
コード例 #19
0
    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
コード例 #20
0
def make5pi_excl(name, _h_PT, _h_IPCHI2, _h_TRCHI2DOF, _h_TRGHP, _5h_DOCA,
                 _5h_DIRA, _5h_FDCHI2, _5h_CHI2, _5h_PT, _5h_PVIPCHI2sum,
                 _5h_Mmin, _5h_Mmax, _probnnpi):

    _daughtersCuts = {
        "pi+":
        " (PT > %(_h_PT)s*MeV)  \
                             & (TRCHI2DOF < %(_h_TRCHI2DOF)s) \
                             & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \
                             & (PROBNNpi > %(_probnnpi)s) \
                             & (TRGHP < %(_h_TRGHP)s) " % locals()
    }
    _combinationCut = "(AM < %(_5h_Mmax)s*MeV) \
                     & (AM > %(_5h_Mmin)s*MeV) \
		     & (AMAXDOCA('LoKi::TrgDistanceCalculator') < %(_5h_DOCA)s)" % locals()
    _motherCut = " (BPVDIRA > %(_5h_DIRA)s) \
		 & (BPVVDCHI2 > %(_5h_FDCHI2)s) \
		 & (VFASPF(VCHI2) < %(_5h_CHI2)s) \
                 & (PT > %(_5h_PT)s*MeV) \
		 & (SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='pi+') | (ABSID=='pi-')),0.0) > %(_5h_PVIPCHI2sum)s) " \
                 % locals()

    _5pi = CombineParticles()
    _5pi.DecayDescriptors = ["[B+ -> pi+ pi+ pi+ pi- pi-]cc"]
    _5pi.MotherCut = _motherCut
    _5pi.CombinationCut = _combinationCut
    _5pi.DaughtersCuts = _daughtersCuts

    return Selection(name, Algorithm=_5pi, RequiredSelections=[StdNoPIDsPions])
コード例 #21
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])
コード例 #22
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])
コード例 #23
0
    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
コード例 #24
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])
コード例 #25
0
    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
コード例 #26
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])
コード例 #27
0
def makepph_incl(name,
           _h_PT,
           _h_P,
           _h_IPCHI2,
           _h_TRCHI2DOF,
           _3h_DOCA,
           _3h_PTmax,
           _3h_DIRA,
           _3h_FDCHI2,
           _3h_PVDOCAmin,
           _3h_CHI2,
           _3h_IPCHI2,
           _3h_PT,
           _3h_PTsum,
           _3h_Psum,
           _3h_PVIPCHI2sum,
	   _3h_TRKCHIDOFmin,
           _3h_Charge,
           _3h_CORRMmax,
           _3h_CORRMmin,
           _3hpph_deltaMmax,
           _3hpph_deltaMmin) :

    _daughtersCuts = {"p+" : "(PT > %(_h_PT)s*MeV) \
                             & (P > %(_h_P)s*MeV) \
                             & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \
                             & (TRCHI2DOF < %(_h_TRCHI2DOF)s)" % locals(),
		      "K+" :  "(PT > %(_h_PT)s*MeV) \
                             & (P > %(_h_P)s*MeV) \
                             & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \
                             & (TRCHI2DOF < %(_h_TRCHI2DOF)s)" % locals()}
    _combinationCut = "(AM < (5279.15 + %(_3hpph_deltaMmax)s)*MeV) \
                     & (AM > (5279.15 - %(_3hpph_deltaMmin)s)*MeV) \
		     & (AMAXDOCA('LoKi::TrgDistanceCalculator') < %(_3h_DOCA)s)" % locals()
    _motherCut = "(MAXTREE(((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),PT) > %(_3h_PTmax)s*MeV) \
                & (BPVDIRA > %(_3h_DIRA)s) \
		& (BPVVDCHI2 > %(_3h_FDCHI2)s) \
		& (VFASPF(VMINVDDV(PRIMARY)) > %(_3h_PVDOCAmin)s) \
		& (VFASPF(VCHI2) < %(_3h_CHI2)s) \
		& (MIPCHI2DV(PRIMARY) < %(_3h_IPCHI2)s) \
		& (PT > %(_3h_PT)s*MeV) \
		& (SUMTREE(PT,((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_PTsum)s*MeV) \
		& (SUMTREE(P,((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_Psum)s*MeV) \
		& (SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_PVIPCHI2sum)s) \
		& (MINTREE(((ABSID=='p+') |(ABSID=='p~-') |('K+'==ABSID) | ('K-'==ABSID)),TRCHI2DOF) < %(_3h_TRKCHIDOFmin)s) \
		& (abs(CHILD(Q,1) + CHILD(Q,2) + CHILD(Q,3))== %(_3h_Charge)s ) \
		& (BPVCORRM < %(_3h_CORRMmax)s * MeV)& (BPVCORRM > %(_3h_CORRMmin)s*MeV)" % locals()
   
    _pph=CombineParticles()
    _pph.DecayDescriptors  = ["[B+ -> p+ p~- K+]cc"]
    _pph.MotherCut         = _motherCut
    _pph.CombinationCut    = _combinationCut
    _pph.DaughtersCuts     = _daughtersCuts

    return Selection ( name,
                       Algorithm = _pph,
                       RequiredSelections = [StdNoPIDsKaons,StdTightProtons])
コード例 #28
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
コード例 #29
0
    def makeLb2V0LDhh( self, name, config ) :
        """
        Create and store a Lb ->Lambda0(LD) p+ h- Selection object.
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

        _massCutLow     = "(AM>(5619-%s)*MeV)"               % config['Lb_Mlow']
        _massCutHigh    = "(AM<(5619+%s)*MeV)"               % config['Lb_Mhigh']
        _aptCut         = "(APT>%s*MeV)"                     % config['Lb_APTmin']
        _daugMedPtCut   = "(ANUM(PT>%s*MeV)>=2)"             % config['LbDaug_MedPT_PT']
        _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config['LbDaug_MaxPT_IP']
        _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))"            % config['LbDaug_LD_maxDocaChi2']
        _daugPtSumCut   = "((APT1+APT2+APT3)>%s*MeV)"        % config['LbDaug_LD_PTsum']

        _combCuts = _aptCut+'&'+_daugPtSumCut+'&'+_daugMedPtCut+'&'+_massCutLow+'&'+_massCutHigh+'&'+_daugMaxPtIPCut+'&'+_maxDocaChi2Cut

        _ptCut      = "(PT>%s*MeV)"                    % config['Lb_PTmin']
        _vtxChi2Cut = "(VFASPF(VCHI2)<%s)"             % config['Lb_VtxChi2']
        _diraCut    = "(BPVDIRA>%s)"                   % config['Lb_LD_Dira']
        _ipChi2Cut  = "(MIPCHI2DV(PRIMARY)<%s)"        % config['Lb_LD_IPCHI2wrtPV']
        _fdCut      = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['Lb_FDwrtPV']
        _fdChi2Cut  = "(BPVVDCHI2>%s)"                 % config['Lb_LD_FDChi2']

        _motherCuts = _ptCut+'&'+_vtxChi2Cut+'&'+_diraCut+'&'+_ipChi2Cut+'&'+_fdChi2Cut

        _Lb = CombineParticles()

        if 'SS' in name: # Same sign

            _Lb.DecayDescriptors = [ "Lambda_b0 -> pi+ pi+ Lambda0", "Lambda_b~0 -> pi+ pi+ Lambda~0",
                                     "Lambda_b0 -> pi- pi- Lambda0", "Lambda_b~0 -> pi- pi- Lambda~0"]

        else:

            _Lb.DecayDescriptors = [ "Lambda_b0 -> pi+ pi- Lambda0", "Lambda_b~0 -> pi+ pi- Lambda~0"]

        _trkGhostProbCut  = "(TRGHOSTPROB<%s)" % config['Trk_GhostProb']
        _trkChi2Cut       = "(TRCHI2DOF<%s)"   % config['Trk_Chi2']

        _daughtersCuts = _trkChi2Cut + '&' + _trkGhostProbCut

        _Lb.DaughtersCuts = { "pi+" : _daughtersCuts }
        _Lb.CombinationCut = _combCuts
        _Lb.MotherCut = _motherCuts
        _Lb.ReFitPVs = True
        
        _LbConf = _Lb.configurable(name + '_combined')

        if 'SS' in name: # Same sign
            self.selLb2V0LDhhSS = Selection (name, Algorithm = _LbConf, RequiredSelections = [self.selLambda2LD, self.pions ])
            return self.selLb2V0LDhhSS
        else:
            self.selLb2V0LDhh = Selection (name, Algorithm = _LbConf, RequiredSelections = [self.selLambda2LD, self.pions ])
            return self.selLb2V0LDhh
コード例 #30
0
def makeB2hTauMu(name):
    """
    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """

    #from Configurables import OfflineVertexFitter
    Bs2hTauMu = CombineParticles()
    Bs2hTauMu.DecayDescriptors = [
        "[B+ -> K+ tau+ mu-]cc", "[B+ -> K- tau+ mu+]cc",
        "[B+ -> K+ tau- mu+]cc", "[B+ -> pi+ tau+ mu-]cc",
        "[B+ -> pi- tau+ mu+]cc", "[B+ -> pi+ tau- mu+]cc",
        "[B+ -> p+ tau+ mu-]cc", "[B- -> p+ tau- mu-]cc",
        "[B+ -> p+ tau- mu+]cc"
    ]
    #Bs2hTauMu.addTool( OfflineVertexFitter )
    #Bs2hTauMu.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    #Bs2hTauMu.OfflineVertexFitter.useResonanceVertex = False
    #Bs2hTauMu.ReFitPVs = True
    Bs2hTauMu.DaughtersCuts = {
        "mu+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)& (TRGHOSTPROB<0.3)",
        "pi+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3) & (TRGHOSTPROB<0.3)",
        "K+":
        "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)&(PIDK>5)& (TRGHOSTPROB<0.3)",
        "p+":
        "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)&(PIDp>5)& (TRGHOSTPROB<0.3)"
    }

    Bs2hTauMu.CombinationCut = "(ADAMASS('B+')<400*MeV)"\
                            "& (AMAXDOCA('')<0.15*mm)"

    Bs2hTauMu.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\
                          "& (BPVDIRA>0.999)"\
                          "& (ADMASS('B_s0') < 400*MeV )"\
                          "& (BPVDIRA > 0) "\
                          "& (BPVVDCHI2> 225)"\
                          "& (BPVIPCHI2()< 16) "#maybe 16

    from CommonParticles import StdLooseDetachedTau, StdLooseDipion
    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")
    _stdLooseDetachedTaus = DataOnDemand(
        Location="Phys/StdLooseDetachedTau3pi/Particles")
    _stdNoPIDsPions = DataOnDemand(Location="Phys/StdNoPIDsPions/Particles")
    _stdNoPIDsKaons = DataOnDemand(Location="Phys/StdNoPIDsKaons/Particles")
    _stdNoPIDsProtons = DataOnDemand(
        Location="Phys/StdNoPIDsProtons/Particles")

    return Selection(name,
                     Algorithm=Bs2hTauMu,
                     RequiredSelections=[
                         _stdLooseMuons, _stdLooseDetachedTaus,
                         _stdNoPIDsPions, _stdNoPIDsKaons, _stdNoPIDsProtons
                     ])
コード例 #31
0
ファイル: bae-B2XMuMu.py プロジェクト: po10/BAE

bothstripping = MergedSelection("Selection_mergeddaughters",
       RequiredSelections = [LowQ2MuonsOnDemand,HighQ2MuonsOnDemand])

_filterDimuons = FilterDesktop(Code="ABSID==511") # Dimuons from B0--> mu mu stripping selection
_selDimuons= Selection( "_selDimuons", Algorithm = _filterDimuons, RequiredSelections = [bothstripping] )

from Configurables import SubstitutePID
subalg = SubstitutePID("_B2Jpsi_SubPID", Code="(DECTREE('B0 -> mu+ mu-'))",
                       Substitutions={'B0 -> mu+ mu-' : 'J/psi(1S)'}, MaxChi2PerDoF=-666)
subsel = Selection("subsel",Algorithm = subalg, RequiredSelections = [_selDimuons])

# Try and make B->J/psi K
_B = CombineParticles()
_B.DaughtersCuts = { "K+" : "PT>500*MeV" }
_B.MotherCut = "(DMASS('B+')<5000*MeV) & (VFASPF(VCHI2)<25.0)" #need to check these cuts
_B.DecayDescriptors = [ "[B+ -> J/psi(1S) K+]cc" ] 


_BdecaySelection = Selection( "TurboB", Algorithm = _B, RequiredSelections = [subsel,kaons] )
SeqB = SelectionSequence('SeqB', TopSelection = _BdecaySelection)


tupleB = DecayTreeTuple("bar-muon-tuple")

tupleB.Inputs = [SeqB.outputLocation()]
tupleB.Decay = "[B+ -> ^(J/psi(1S) -> ^mu+ ^mu-) ^K+]CC"


コード例 #32
0

bothstripping = MergedSelection("Selection_mergeddaughters",
       RequiredSelections = [LowQ2MuonsOnDemand,HighQ2MuonsOnDemand])

_filterDimuons = FilterDesktop(Code="ABSID==511") # Dimuons from B0--> mu mu stripping selection
_selDimuons= Selection( "_selDimuons", Algorithm = _filterDimuons, RequiredSelections = [bothstripping] )

from Configurables import SubstitutePID
subalg = SubstitutePID("_B2Jpsi_SubPID", Code="(DECTREE('B0 -> mu+ mu-'))",
                       Substitutions={'B0 -> mu+ mu-' : 'J/psi(1S)'}, MaxChi2PerDoF=-666)
subsel = Selection("subsel",Algorithm = subalg, RequiredSelections = [_selDimuons])

# Try and make B->J/psi K
_B = CombineParticles()
_B.DaughtersCuts = { "K+" : "(PT>500*MeV)&(MIPCHI2DV(PRIMARY) > 9)" }
_B.MotherCut = "(DMASS('B+')<5000*MeV) & (VFASPF(VCHI2)/VFASPF(VDOF)<5.0) & (BPVDIRA > 0.999)" #need to check these cuts
_B.DecayDescriptors = [ "[B+ -> J/psi(1S) K+]cc" ]


_BdecaySelection = Selection( "TurboB", Algorithm = _B, RequiredSelections = [subsel,kaons] )
SeqB = SelectionSequence('SeqB', TopSelection = _BdecaySelection)

# Here we just put the output candidates in an Tuple

tupleB = DecayTreeTuple("bae-muon-data")
tupleB.Inputs = [SeqB.outputLocation()]
tupleB.Decay = "[B+ -> ^K+ ^(J/psi(1S) -> ^mu+ ^mu-)]CC"


tupleB.ToolList =  [