Exemple #1
0
    def makeLb2V0DDhh(self, name, config):
        """
        Create and store a Lb -> KS(DD) p+ h- Selection object.
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

        _massCutLow = "(AM>(5620-%s)*MeV)" % config['Lb_Mlow']
        _massCutHigh = "(AM<(5620+%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_DD_maxDocaChi2']
        _daugPtSumCut = "((APT1+APT2+APT3)>%s*MeV)" % config['LbDaug_DD_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_Dira']
        _ipChi2Cut = "(MIPCHI2DV(PRIMARY)<%s)" % config['Lb_DD_IPCHI2wrtPV']
        _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['Lb_FDwrtPV']
        _fdChi2Cut = "(BPVVDCHI2>%s)" % config['Lb_DD_FDChi2']

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

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

        self.selLb2V0DDhh = Selection(
            name,
            Algorithm=_Lb,
            RequiredSelections=[self.selKS2DD, self.hadrons])
    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']
        _aptCut = "(APT>%s*MeV)" % config['B_APTmin']
        _daugMedPtCut = "(ANUM(PT>%s*MeV)>=2)" % config['BDaug_MedPT_PT']
        _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config[
            'BDaug_MaxPT_IP']
        _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))" % config[
            'BDaug_LL_maxDocaChi2']
        _daugPtSumCut = "((APT1+APT2+APT3)>%s*MeV)" % config['BDaug_LL_PTsum']

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

        _ptCut = "(PT>%s*MeV)" % config['B_PTmin']
        _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['B_VtxChi2']
        _diraCut = "(BPVDIRA>%s)" % config['B_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 = [ "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.hadrons])
Exemple #3
0
def makeD2hhh(moduleName, config):

    __configuration_keys__ = ("DauChi2Max", "DauPtMin", "DauPMin",
                              "DauMIPChi2Min", "PtMin", "CombDMass", "DMass",
                              "VtxChi2Max", "VDChi2Min", "MaxDauMIPChi2",
                              "DIRAMin", "DOCAMax", "IPChi2Min")

    checkConfig(__configuration_keys__, config)

    StdPi = StdNoPIDsPions
    StdK = StdNoPIDsKaons

    Daughtercut = "((TRCHI2DOF<%(DauChi2Max)s) & " \
    "(PT > %(DauPtMin)s*MeV) & (P > %(DauPMin)s*MeV) & " \
    "(MIPCHI2DV(PRIMARY) > %(DauMIPChi2Min)s))" % config

    D2Kpipi = CombineParticles()
    D2Kpipi.DecayDescriptors = ["[D+ -> K- pi+ pi+]cc"]
    D2Kpipi.DaughtersCuts = {"pi+": Daughtercut, "K+": Daughtercut}

    D2Kpipi.CombinationCut = \
    "((ADAMASS('D+') < %(CombDMass)s*MeV) | (ADAMASS('D_s+') < %(CombDMass)s*MeV)) & " \
    "(APT>%(PtMin)s*MeV) & " \
    "(AMAXDOCA('LoKi::TrgDistanceCalculator') < %(DOCAMax)s) & " \
    "AHASCHILD(((ABSID == 'K+') | (ABSID == 'pi+')) & (MIPCHI2DV(PRIMARY) > %(MaxDauMIPChi2)s))" \
    % config

    D2Kpipi.MotherCut = "((ADMASS('D+') < %(DMass)s*MeV) | (ADMASS('D_s+') < %(DMass)s*MeV))" \
    "& (VFASPF(VCHI2/VDOF)<%(VtxChi2Max)s) & (BPVVDCHI2 > %(VDChi2Min)s) & (BPVDIRA > %(DIRAMin)s) & (BPVIPCHI2() > %(IPChi2Min)s)" % config

    D2KpipiSel = Selection("D2KpipiFor" + moduleName,
                           Algorithm=D2Kpipi,
                           RequiredSelections=[StdPi, StdK])

    D2KKpi = copy(D2Kpipi)
    D2KKpi.DecayDescriptors = ["[D+ -> K- K+ pi+]cc"]
    D2KKpiSel = Selection("D2KKpiFor" + moduleName,
                          Algorithm=D2KKpi,
                          RequiredSelections=[StdPi, StdK])

    DSel = MergedSelection("D2hhhFor" + moduleName,
                           RequiredSelections=[D2KpipiSel, D2KKpiSel])

    return DSel
Exemple #4
0
    def _makeMultibody(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.
        """
        daughters = []
        if "mu" in decay_descriptor: daughters += [self.SelMuons]
        if "pi" in decay_descriptor: daughters += [self.SelPions]
        if "e+" or "e-" in decay_descriptor: daughters += [self.SelElectrons]
        if "K*(892)0" in decay_descriptor:
            if not "SelEMu" in dir(self):
                self.SelEMu = self._makePseudoKstar("SelEMuFor" + self._name)
            daughters += [self.SelEMu]
        if "phi(1020)" in decay_descriptor:
            if not "SelDiElectrons" in dir(self):
                self.SelDiElectrons = self._makePseudoPhi("SelDiElectronsFor" +
                                                          self._name)
            daughters += [self.SelDiElectrons]

        if "J/psi(1S)" in decay_descriptor:
            if not "SelDiMuons" in dir(self):
                self.SelDiMuons = self._makePseudoJpsi("SelDiMuonsFor" +
                                                       self._name)
            daughters += [self.SelDiMuons]

        if "KS0" in decay_descriptor: lifecut = "%(KSlife)s" % self.config
        elif "Lambda0" in decay_descriptor:
            lifecut = "%(L0life)s" % self.config

        Multibody = CombineParticles(DecayDescriptor=decay_descriptor)

        Multibody.CombinationCut = combcut  #+ "& (AMAXDOCA('')<%(DiDOCA)s*mm)"% self.config

        Multibody.MotherCut = "(" + masscut + "& (BPVDIRA>0) & ((BPVVDSIGN*M/P) >" + lifecut + ") & (MIPCHI2DV(PRIMARY)< %(MultibodyIPChi2)s) & (VFASPF(VCHI2/VDOF)<%(MultibodyChi2dof)s))" % self.config

        return Selection(name,
                         Algorithm=Multibody,
                         RequiredSelections=daughters)
    def __Selection_CreateDiMuon__(self, lName, DiMuonCuts, MuonCuts,
                                   IsMuonFlag):
        '''
        Create a new dimuon from scratch
        '''
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineDiMuon = CombineParticles()
        CombineDiMuon.DecayDescriptor = "J/psi(1S) -> mu- mu+"
        CombineDiMuon.DaughtersCuts = {"mu+": MuonCuts, "mu-": MuonCuts}
        CombineDiMuon.MotherCut = DiMuonCuts

        from StandardParticles import StdLooseMuons, StdVeryLooseMuons
        Muons = StdLooseMuons if IsMuonFlag else StdVeryLooseMuons

        from PhysSelPython.Wrappers import Selection
        SelDiMuon = Selection("Sel_" + lName + "_DiMuon",
                              Algorithm=CombineDiMuon,
                              RequiredSelections=[Muons])
        return SelDiMuon
Exemple #6
0
    def _bhad2PMuX_fakemu_Lb(self):
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        from PhysSelPython.Wrappers import Selection

        _pMu = CombineParticles(DecayDescriptors=self._config["DECAYS"],
                                ReFitPVs=True)
        _pMu.Preambulo = self._Definitions()
        _pMu.CombinationCut = "(AM>%(pMuMassLower)s*MeV)" % self._config
        _pMu.MotherCut = self._LbMotherSelection() % self._config
        _pMu.ReFitPVs = True

        _pMuSel = Selection(
            "pMu_fakemu_Lb_for" + self._name,
            Algorithm=_pMu,
            RequiredSelections=[self._fakemuonFilter(),
                                self._daughters()])

        _LbSel = tosSelection(_pMuSel, {'Hlt2.*Topo2Body.*Decision%TOS': 0})
        return _LbSel
Exemple #7
0
    def __Selection_CreateDiMuonSS__(self, lName, DiMuonCuts, MuonCuts,
                                     IsMuonFlag):
        '''
        Clone the StdVeryLooseDiMuon to build same sign candidates
        '''
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineDiMuonSS = CombineParticles()
        CombineDiMuonSS.DecayDescriptor = "[J/psi(1S) -> mu+ mu+]cc"
        CombineDiMuonSS.DaughtersCuts = {"mu+": MuonCuts, "mu-": MuonCuts}
        CombineDiMuonSS.MotherCut = DiMuonCuts

        from StandardParticles import StdLooseMuons, StdVeryLooseMuons
        Muons = StdLooseMuons if IsMuonFlag else StdVeryLooseMuons

        from PhysSelPython.Wrappers import Selection
        SelDiMuonSS = Selection("Sel_" + lName + "_DiMuonSS",
                                Algorithm=CombineDiMuonSS,
                                RequiredSelections=[Muons])
        return SelDiMuonSS
Exemple #8
0
    def __Bs__(self, Dimuon, daughters, conf):
        """
        Make and return a Bs selection
        """

        _b2xmumu = CombineParticles()
        _b2xmumu.DecayDescriptors = conf['DECAYS']

        _b2xmumu.CombinationCut = self.BdCombCut
        _b2xmumu.MotherCut = self.BdCut

        _sel_Daughters = MergedSelection("Selection_" + self.name +
                                         "_daughters",
                                         RequiredSelections=daughters)

        sel = Selection("Selection_" + self.name + "_B2XMuMu",
                        Algorithm=_b2xmumu,
                        RequiredSelections=[Dimuon, _sel_Daughters])
        return sel
Exemple #9
0
    def __Trimu__(self, conf):
        '''
        Create trimuon
        '''
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineTriMuon = CombineParticles()
        CombineTriMuon.DecayDescriptors = [
            "[B+ -> mu+ mu+ mu-]cc", "[B+ -> mu+ mu+ mu+]cc"
        ]
        sel_name = "TriMu"
        #CombineTriMuon.CombinationCut = self.TriMuLowQ2CombCut
        CombineTriMuon.MotherCut = self.TriMuCut + "&" + self.TriMuCut
        # choose

        from PhysSelPython.Wrappers import Selection
        SelTriMuon = Selection("Sel_" + self.name + "_" + sel_name,
                               Algorithm=CombineTriMuon,
                               RequiredSelections=[self.Muons])
        return SelTriMuon
Exemple #10
0
    def __K10__(self,Kshort,Pions,conf):
        """
        K_1 0 -> Ks pi+ pi-
        """

        _k102kspipi = CombineParticles()
        _k102kspipi.DecayDescriptors = [ "K_1(1270)0 -> KS0 pi+ pi-" ]
        _k102kspipi.CombinationCut = self.__A1CombCut__(conf)
        _k102kspipi.MotherCut = self.__A1Cut__(conf)

        _sel_k10 = Selection( "Selection_"+self.name+"_k10",
                              Algorithm=_k102kspipi,
                              RequiredSelections=[Kshort,Pions] )
        
        pick = Selection(self.name+"_K10_PickDecay",
                     Algorithm = FilterDesktop( Code = "(DECTREE('K_1(1270)0 -> KS0 pi+ pi-'))" ),
                     RequiredSelections = [_sel_k10])

        return pick
Exemple #11
0
    def __CreateSelectionX3872__(self, lName, CombCut, MotherCut, InputSelections):
        '''
        X3872 -> J/psi(1S) rho(770)0: note this can be used for the psi(2S) as well - just use different cuts!
        '''

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

        CombineX3872.DecayDescriptor = "X_1(3872) -> J/psi(1S) rho(770)0"

        CombineX3872.CombinationCut = CombCut
        CombineX3872.MotherCut = MotherCut

        from PhysSelPython.Wrappers import Selection
        SelX3872 = Selection("Sel_" + lName + "_X3872", Algorithm = CombineX3872,
                             RequiredSelections = InputSelections)
        
        return SelX3872
Exemple #12
0
    def __HadronicB__(self, daughters, conf):
        """
        Make and return a Bs selection
        """

        _b2xmumu = CombineParticles()
        _b2xmumu.DecayDescriptors = conf['HADRONICDECAYS']

        _b2xmumu.CombinationCut = self.BdCombCut
        _b2xmumu.MotherCut = self.BdCut + ' & ' + conf['Hadronic_Selection']

        _sel_Daughters = MergedSelection("Selection_" + self.name +
                                         "_Hadronic_daughters",
                                         RequiredSelections=daughters)

        sel = Selection("Selection_" + self.name + "_Hadronic_B2XMuMu",
                        Algorithm=_b2xmumu,
                        RequiredSelections=[_sel_Daughters])
        return sel
Exemple #13
0
    def __CreateSelectionBu__(self, lName, CombCut, MotherCut, InputSelections):
        '''
        B+ -> K+ X3872 Selection
        '''

        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineBu = CombineParticles()
        #CombineBu.InputPrimaryVertices = self.__PVOutputLocation__
        
        CombineBu.DecayDescriptors = ["B+ -> X_1(3872) K+", "B- -> X_1(3872) K-"]

        CombineBu.CombinationCut = CombCut
        CombineBu.MotherCut = MotherCut

        from PhysSelPython.Wrappers import Selection
        SelBu = Selection("Sel_" + lName + "_Bu", Algorithm = CombineBu,
                          RequiredSelections = InputSelections)
        
        return SelBu
Exemple #14
0
def makeB(name, decays, inputs, config):
    comboCuts = LoKiCuts(['AM', 'SUMPT'], config).code()
    momCuts = LoKiCuts(
        ['HASVERTEX', 'PT', 'VCHI2DOF', 'BPVLTIME', 'BPVIPCHI2'],
        config).code()
    cuts = '(BPVDIRA > 0) & '
    cuts += '(NINGENERATION(ISBASIC & (MIPCHI2DV(PRIMARY) < %s),1)==0)' \
            % config['HAD_MINIPCHI2_MIN']
    momCuts = LoKiCuts.combine([cuts, momCuts])
    momCuts += ' & (MM > %s) & (MM < %s)' % (config['AM_MIN'],
                                             config['AM_MAX'])
    alg = CombineParticles(DecayDescriptors=decays)
    alg.ReFitPVs = True
    alg.CombinationCut = comboCuts
    alg.MotherCut = momCuts
    #print 'makeB:',name,comboCuts,momCuts,decays
    return Selection(name + "DarkBosonSel",
                     Algorithm=alg,
                     RequiredSelections=inputs)
Exemple #15
0
    def __Rho__(self, Pions, conf):
        """
        Make a rho
        """
        wsCombinations = conf['HadronWS']
        _rho2pipi = CombineParticles()
        if wsCombinations == True:
            _rho2pipi.DecayDescriptors = [
                "rho(770)0 -> pi+ pi-", "rho(770)0 -> pi+ pi+",
                "rho(770)0 -> pi- pi-"
            ]
        else:
            _rho2pipi.DecayDescriptors = ["rho(770)0 -> pi+ pi-"]
        _rho2pipi.CombinationCut = self.KstarCombCut
        _rho2pipi.MotherCut = self.KstarCut

        _selRHO2PIPI = Selection("Selection_" + self.name + "_Rho",
                                 Algorithm=_rho2pipi,
                                 RequiredSelections=[Pions])
        return _selRHO2PIPI
    def __A1__(self, Pions, conf): 
        """
        Make A1 objects:
            a_1 - > pi pi pi 
        """      
        # First make an a_1(1260)+ selection
        _a12pipipi = CombineParticles()
        _a12pipipi.DecayDescriptors = [ "[a_1(1260)+ -> pi+ pi+ pi-]cc" ]
        _a12pipipi.CombinationCut = self.__A1CombCut__(conf)
        _a12pipipi.MotherCut = self.__A1Cut__(conf)

        _sel_a1 = Selection( "Selection_"+self.name+"_a1",
                                     Algorithm=_a12pipipi,
                                     RequiredSelections=[Pions] )
        
        pick = Selection(self.name+"_A1_PickDecay",
                     Algorithm = FilterDesktop( Code = "(DECTREE('a_1(1260)+ -> pi+ pi+ pi-')) | (DECTREE('a_1(1260)- -> pi+ pi- pi-'))" ),
                     RequiredSelections = [_sel_a1])

        return pick
Exemple #17
0
    def __Selection_CreateBdToKstarMuMu__(self, lName, InputSelections,
                                          CombCut, MotherCut):
        '''
        Bd -> K* mu mu Selection
        '''

        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineBd = CombineParticles()

        CombineBd.DecayDescriptor = "[B0 -> K*(892)0 J/psi(1S)]cc"

        CombineBd.CombinationCut = CombCut
        CombineBd.MotherCut = MotherCut

        from PhysSelPython.Wrappers import Selection
        SelBd = Selection("Sel_" + lName + "_Bd",
                          Algorithm=CombineBd,
                          RequiredSelections=InputSelections)

        return SelBd
Exemple #18
0
    def __Selection_CreateBuToKMuMu__(self, lName, InputSelections, CombCut,
                                      MotherCut):
        '''
        Bu -> K mu mu Selection
        '''

        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineBu = CombineParticles()

        CombineBu.DecayDescriptor = "[B+ -> K+ J/psi(1S)]cc"

        CombineBu.CombinationCut = CombCut
        CombineBu.MotherCut = MotherCut

        from PhysSelPython.Wrappers import Selection
        SelBu = Selection("Sel_" + lName + "_Bu",
                          Algorithm=CombineBu,
                          RequiredSelections=InputSelections)

        return SelBu
Exemple #19
0
def makeKst2Kpi(name, KaonPT, KaonIPCHI2, PionPT, PionIPCHI2, PionPIDK,
                KstarPT, KaonPIDK, KstarVCHI2, KstarMassWin):
    """
    Create and return a Kstar -> K+pi- Selection object.
    Starts from DataOnDemand 'Phys/StdVeryLooseKaons'.
    Arguments:
    name             : name of the Selection.
    KaonPT           : Minimum transverse momentum of K (MeV).
    KaonIPCHI2       : Minimum impact parameter chi2 of K.
    PionPT           : Minimum transverse momentum of pi (MeV).
    PionIPCHI2       : Minimum impact parameter chi2 of pi.
    PionPIDK         : Maximum PID_{K-pi} of pi.
    KstarPT          : Minimum transverse momentum of Kstar (MeV).
    KaonPIDK         : Minimum PID_{K-pi} of K.
    KstarVCHI2       : Maximum Kstar vertex chi2 per degree of freedom.
    KstarMassWin     : Kstar invariant mass window around PDG mass value (MeV).
    """

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

    _Kstar2Kpi = CombineParticles()

    _Kstar2Kpi.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc"
    _Kstar2Kpi.DaughtersCuts = {
        "K+":
        "(PT > %(KaonPT)s *MeV) & (PIDK > %(KaonPIDK)s) & (MIPCHI2DV(PRIMARY)> %(KaonIPCHI2)s)"
        % locals(),
        "pi-":
        "(PT > %(PionPT)s *MeV) & (PIDK < %(PionPIDK)s) & (MIPCHI2DV(PRIMARY)> %(PionIPCHI2)s)"
        % locals()
    }

    _Kstar2Kpi.CombinationCut = "(ADAMASS('K*(892)0') < %(KstarMassWin)s *MeV)" % locals(
    )
    _Kstar2Kpi.MotherCut = "(VFASPF(VCHI2/VDOF)< %(KstarVCHI2)s) & (PT > %(KstarPT)s *MeV)" % locals(
    )

    return Selection(name,
                     Algorithm=_Kstar2Kpi,
                     RequiredSelections=[_stdKaons, _stdPions])
Exemple #20
0
    def makeBu2KstDDhh( self, name, config ) :
        """
        Create and store either a B+ -> Kst(DD)+ h+ h- Selection object
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

        _trkChi2Cut      = "(TRCHI2DOF<%s)"   % config['Trk_Long_Chi2']
        _trkGhostProbCut = "(TRGHOSTPROB<%s)" % config['Trk_Long_GhostProb']

        _daughtersCuts = _trkChi2Cut+'&'+_trkGhostProbCut

        _massCutLow       = "(AM>(5279-%s)*MeV)"                                                        % config['B_Mlow']
        _massCutHigh      = "(AM<(5279+%s)*MeV)"                                                        % config['B_Mhigh']
        _aptCut           = "(APT>%s*MeV)"                                                              % config['B_APTmin']
        _daugMedPtCut     = "(ANUM(PT>%s*MeV)>=2)"                                                      % config['BDaug_MedPT_PT']
        _daugMaxPtIPCut   = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)"                                          % config['BDaug_MaxPT_IP']
        _maxDocaChi2Cut   = "(ACUTDOCACHI2(%s,''))"                                                     % config['BDaug_DD_maxDocaChi2']
        _daugPtSumCut     = "((APT1+APT2+APT3)>%s*MeV)"                                                 % config['BDaug_DD_PTsum']

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

        _ptCut            = "(PT>%s*MeV)"                                                               % config['B_PTmin']
        _vtxChi2Cut       = "(VFASPF(VCHI2)<%s)"                                                        % config['B_VtxChi2']
        _diraCut          = "(BPVDIRA>%s)"                                                              % config['B_DD_Dira']
        _ipChi2Cut        = "(MIPCHI2DV(PRIMARY)<%s)"                                                   % config['B_DD_IPCHI2wrtPV']
        _fdCut            = "(VFASPF(VMINVDDV(PRIMARY))>%s)"                                            % config['B_DD_FDwrtPV']
        _fdChi2Cut        = "(BPVVDCHI2>%s)"                                                            % config['B_DD_FDChi2']
        _ipChi2SumCut     = "(SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='pi+') | (ABSID=='pi-')),0.0) > %s)"  % config['B_DD_IPCHI2sum']

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

        _B = CombineParticles()
        _B.DaughtersCuts = { "pi+" : _daughtersCuts }
        _B.CombinationCut = _combCuts
        _B.MotherCut = _motherCuts

        _B.DecayDescriptors = [ "[B+ -> pi+ pi- K*(892)+]cc" ]

        self.selBu2KstDDhh = Selection (name, Algorithm = _B, RequiredSelections = [ self.selKst2KSDDpi, self.pions ])
Exemple #21
0
    def makeB2KSLDhh( self, name, config ) :
        """
        Create and store either a B -> KS(LD) h+ h- Selection object, or a B -> KS(LD) h+(-) h+(-) Same Sign Selection Object
        Arguments:
        name             : name of the Selection.
        config           : config dictionary
        """

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

        _daughtersCuts = _trkChi2Cut+'&'+_trkGhostProbCut

        _massCutLow     = "(AM>(5279-%s)*MeV)"               % config['B_Mlow']
        _massCutHigh    = "(AM<(5279+%s)*MeV)"               % config['B_Mhigh']
        _aptCut         = "(APT>%s*MeV)"                     % config['B_APTmin']
        _daugMedPtCut   = "(ANUM(PT>%s*MeV)>=2)"             % config['BDaug_MedPT_PT']
        _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config['BDaug_MaxPT_IP']
        _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))"            % config['BDaug_LD_maxDocaChi2']
        _daugPtSumCut   = "((APT1+APT2+APT3)>%s*MeV)"        % config['BDaug_LD_PTsum']

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

        _diraCut    = "(BPVDIRA>%s)"                   % config['B_LD_Dira']

        _motherCuts = _diraCut

        _B = CombineParticles()
        _B.DaughtersCuts = { "pi+" : _daughtersCuts }
        _B.CombinationCut = _combCuts
        _B.MotherCut = _motherCuts

        if "SameSign" in name:
            _B.DecayDescriptors = [ "B_s0 -> K+ pi+ KS0", "B_s0 -> K- pi- KS0"]

            self.selB2KSLDhh_SameSign = Selection (name, Algorithm = _B, RequiredSelections = [ self.selKS2LD, self.pions, self.kaons ])

        else:
            _B.DecayDescriptors = [ "B_s0 -> K+ pi- KS0", "B_s0 -> pi+ K- KS0"]

            self.selB2KSLDhh = Selection (name, Algorithm = _B, RequiredSelections = [ self.selKS2LD, self.pions, self.kaons ])
Exemple #22
0
def makeUnbiasedB2DPi(moduleName, DName, DSel, config):

    StdPi = StdAllNoPIDsPions  # Because of no IPchi2 cut

    Bachelorcut = "((TRCHI2DOF<%(BachelorChi2Max)s) & " \
    "(PT > %(BachelorPtMin)s*MeV) & (P > %(BachelorPMin)s*MeV) & " \
    "(MIPCHI2DV(PRIMARY) > %(BachelorMIPChi2Min)s))" % config

    Dcut = "((MINTREE(ABSID=='K+',PIDK)>0) & (MAXTREE(ABSID=='pi+',PIDK)<5))"

    B2DPi = CombineParticles()
    B2DPi.DecayDescriptors = ["[B_s0 -> D- pi+]cc"]
    B2DPi.DaughtersCuts = {"pi+": Bachelorcut, "D-": Dcut}
    B2DPi.CombinationCut = "((ADAMASS('B0') < %(CombDMass)s *MeV) | (ADAMASS('B_s0') < %(CombDMass)s *MeV))" % config

    B2DPi.MotherCut = "((VFASPF(VCHI2/VDOF)<%(VtxChi2Max)s) & " \
    "(BPVDIRA > %(DIRAMin)s))" % config

    return Selection("Bs2DsPiWith" + DName + "For" + moduleName,
                     Algorithm=B2DPi,
                     RequiredSelections=[DSel, StdPi])
Exemple #23
0
    def _Lb2pMuNuVub_fakemu_Lb(self):
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        from PhysSelPython.Wrappers import Selection

        _pMu = CombineParticles(DecayDescriptors=["[Lambda_b0 -> p+ mu-]cc"],
                                ReFitPVs=True)
        _pMu.Preambulo = self._Definitions()
        _pMu.CombinationCut = "(AM>%(pMuMassLower)s*MeV)" % self._config
        _pMu.MotherCut = "(VFASPF(VCHI2/VDOF)< %(BVCHI2DOF)s) & (BPVDIRA> %(BDIRA)s)"\
                           "& (Lb_PT > %(pMuPT)s)"\
                           "& (BPVVDCHI2 >%(BFDCHI2HIGH)s)" % self._config
        _pMu.ReFitPVs = True

        _pMuSel = Selection(
            "pMu_fakemu_Lb_for" + self._name,
            Algorithm=_pMu,
            RequiredSelections=[self._fakemuonFilter(),
                                self._protonFilter()])

        _LbSel = tosSelection(_pMuSel, {'Hlt2.*Topo2Body.*Decision%TOS': 0})
        return _LbSel
Exemple #24
0
    def makeKst2KSLLpi( self, name, config ) :
        # define all the cuts
        _massCutLo = "(AM > %s*MeV)" % config['Kstar_MassLo']
        _massCutHi = "(AM < %s*MeV)" % config['Kstar_MassHi']

        _trkChi2Cut      = "(TRCHI2DOF<%s)"   % config['Trk_Long_Chi2']
        _trkGhostProbCut = "(TRGHOSTPROB<%s)" % config['Trk_Long_GhostProb']

        _daughtersCuts = _trkChi2Cut+'&'+_trkGhostProbCut
      
        _allCuts = _massCutLo+'&'+_massCutHi

        # make the filter
        _filterKst2KSLLpi = CombineParticles()
        _filterKst2KSLLpi.DecayDescriptor = "[K*(892)+ -> KS0 pi+]cc"
        _filterKst2KSLLpi.CombinationCut = _allCuts 
        _filterKst2KSLLpi.DaughtersCuts = { "pi+" : _daughtersCuts }
        _filterKst2KSLLpi.MotherCut = "ALL"

        # make and store the Selection object
        self.selKst2KSLLpi = Selection( name, Algorithm = _filterKst2KSLLpi, RequiredSelections = [self.selKS2LL, self.pions] ) 
Exemple #25
0
    def __Omega2PiPiPi0__(self, Pions, Pi0, conf):
        """
        Make omega -> pi+ pi- pi0 
        """
        _omega2pipipizero = CombineParticles()
        _omega2pipipizero.DecayDescriptor = "omega(782) -> pi+ pi- pi0"
        _omega2pipipizero.CombinationCut = "(ADAMASS('omega(782)') < %(Omega_CombMassWin)s * MeV) " % conf
        #"(ADOCACHI2CUT(20.,''))"

        _omega2pipipizero.MotherCut = "(ADMASS('omega(782)') < %(Omega_MassWin)s *MeV) & " \
                                      "(VFASPF(VPCHI2)> %(OmegaChi2Prob)s )"  %conf

        _omegaConf = _omega2pipipizero.configurable("Combine_" + self.name +
                                                    "_PiPiPi0")
        _omegaConf.ParticleCombiners.update({'': 'OfflineVertexFitter:PUBLIC'})

        _selOMEGA2PIPIPIZERO = Selection("Selection_" + self.name +
                                         "_omega2pipipizero",
                                         Algorithm=_omegaConf,
                                         RequiredSelections=[Pions, Pi0])
        return _selOMEGA2PIPIPIZERO
Exemple #26
0
    def __InclDimuLowQ2__(self, conf, doWS=False):
        '''
        Create a new dimuon for high q2 inclusive B->Xmumu
        '''
        from GaudiConfUtils.ConfigurableGenerators import CombineParticles
        CombineDiMuon = CombineParticles()
        CombineDiMuon.DecayDescriptors = ["B0 -> mu- mu+"]
        sel_name = "InclDiMuLowQ2"
        #CombineDiMuon.CombinationCut = self.InclDiMuLowQ2CombCut
        CombineDiMuon.MotherCut = self.InclDiMuCut + "&" + self.InclDiMuLowQ2Cut
        # choose
        if doWS == True:
            CombineDiMuon.DecayDescriptors = [
                "B0 -> mu- mu+", "B0 -> mu- mu-", "B0 -> mu+ mu+"
            ]

        from PhysSelPython.Wrappers import Selection
        SelDiMuon = Selection("Sel_" + self.name + "_" + sel_name,
                              Algorithm=CombineDiMuon,
                              RequiredSelections=[self.LowQ2Muons])
        return SelDiMuon
Exemple #27
0
    def __FakeTrimu__(self, conf):
        """
        Create trimuon
        """

        CombineTriMuon = CombineParticles()
        CombineTriMuon.DecayDescriptor = "[B+ -> J/psi(1S) mu+]cc"
        sel_name = "FakeTriMu"
        #CombineTriMuon.CombinationCut = self.TriMuLowQ2CombCut
        #["[B+ ->mu+ mu+ mu-]cc", "[B+ ->mu+ mu+ mu+]cc"]
        CombineTriMuon.MotherCut = self.TriMuCut
        # choose

        from PhysSelPython.Wrappers import Selection
        #SelTriMuon = Selection("Sel_" + self.name + "_"+sel_name, Algorithm = CombineTriMuon,
        #                      RequiredSelections = [self.Jpsi, self.FakeMuon ])
        SelTriMuon = Selection(sel_name,
                               Algorithm=CombineTriMuon,
                               RequiredSelections=[self.FakeMuons, self.Jpsi])

        return SelTriMuon
Exemple #28
0
def makeB2TauMu(name):
    """
    Please contact Johannes Albrecht if you think of prescaling this line!
    
    Arguments:
    name        : name of the Selection.
    """

    #from Configurables import OfflineVertexFitter
    Bs2TauMu = CombineParticles()
    Bs2TauMu.DecayDescriptors = [
        "[B_s0 -> tau+ mu-]cc", "[B_s0 -> tau+ mu+]cc"
    ]
    # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Kstar:
    #Bs2TauMu.addTool( OfflineVertexFitter )
    #Bs2TauMu.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    #Bs2TauMu.OfflineVertexFitter.useResonanceVertex = False
    #Bs2TauMu.ReFitPVs = True
    Bs2TauMu.DaughtersCuts = {
        "mu+": "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3)"
    }

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

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

    from CommonParticles import StdLooseDetachedTau, StdLooseDipion
    _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles")
    _stdLooseDetachedTaus = DataOnDemand(
        Location="Phys/StdLooseDetachedTau3pi/Particles")

    return Selection(
        name,
        Algorithm=Bs2TauMu,
        RequiredSelections=[_stdLooseMuons, _stdLooseDetachedTaus])
Exemple #29
0
def makeKpKpKp_incl(name, _h_PT, _h_P, _h_IPCHI2, _h_TRCHI2DOF, _h_TRGHP,
                    _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_CORRMmax,
                    _3h_CORRMmin, _3hKKK_Mmin, _3hKKK_Mmax):

    _daughtersCuts = {
        "K+":
        "(PT > %(_h_PT)s*MeV) \
                             & (P > %(_h_P)s*MeV) \
                             & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \
                             & (TRCHI2DOF < %(_h_TRCHI2DOF)s) \
                             & (TRGHOSTPROB < %(_h_TRGHP)s)" % locals()
    }
    _combinationCut = "(AM < %(_3hKKK_Mmax)s*MeV) \
                     & (AM > %(_3hKKK_Mmin)s*MeV) \
		     & (AMAXDOCA('LoKi::TrgDistanceCalculator') < %(_3h_DOCA)s)" % locals()
    _motherCut = "(MAXTREE(((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=='K+') | (ABSID=='K-')),0.0) > %(_3h_PTsum)s*MeV) \
		& (SUMTREE(P,((ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_Psum)s*MeV) \
		& (SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_PVIPCHI2sum)s) \
		& (MINTREE((('K+'==ABSID) | ('K-'==ABSID)),TRCHI2DOF) < %(_3h_TRKCHIDOFmin)s) \
		& (BPVCORRM < %(_3h_CORRMmax)s * MeV)& (BPVCORRM > %(_3h_CORRMmin)s*MeV)" % locals(
    )

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

    return Selection(name,
                     Algorithm=_KpKpKp,
                     RequiredSelections=[StdNoPIDsKaons])
    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
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 =  [
      "TupleToolKinematic"
Exemple #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" }
_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"