Beispiel #1
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        self.__confdict__ = config

        self.GECs = {
            "Code":
            "( recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %(GEC_nLongTrk)s )"
            % config,
            "Preambulo": ["from LoKiTracks.decorators import *"]
        }

        #== selection of standard particles
        self.Kaon1Cuts = "(TRCHI2DOF < 3) & (TRGHOSTPROB < 0.5) & (PT > %(K1PT)s *MeV) &"\
                         "(MIPCHI2DV(PRIMARY) < %(K1MinIPChi2)s) & "\
                         "(PIDK-PIDpi > %(K1PIDK)s) & (PIDK-PIDp > 0) & (PIDK-PIDmu > 0)" %config

        self.Kaon1CutsLoose = "(TRCHI2DOF < 3) & (TRGHOSTPROB < 0.5) & (PT > %(K1PTLoose)s *MeV) &"\
                              "(MIPCHI2DV(PRIMARY) < %(K1MinIPChi2)s) & "\
                              "(PIDK-PIDpi > %(K1PIDK)s) & (PIDK-PIDp > 0) & (PIDK-PIDmu > 0)" %config

        self.Kaon2Cuts = "(TRCHI2DOF < 3) & (TRGHOSTPROB < 0.5) & "\
                         "(P > %(K2P)s *MeV) & (PT > %(K2PT)s *MeV) & "\
                         "(MIPCHI2DV(PRIMARY) > %(K2MinIPChi2)s) & "\
                         "(PIDK-PIDpi > %(K2PIDK)s) & (PIDK-PIDp > 0) & (PIDK-PIDmu > 0)" %config

        self.MuonCuts  = "(TRCHI2DOF < 3) & (TRGHOSTPROB < 0.5) & "\
                         "(P > %(MuP)s *MeV) & (PT > %(MuPT)s *MeV) & "\
                         "(MIPCHI2DV(PRIMARY) > %(MuMinIPChi2)s) & "\
                         "(PIDmu-PIDK > 0) & (PIDmu-PIDp > 0) & (PIDmu-PIDpi > %(MuPIDmu)s)" %config

        self.JpsiCuts = "(PFUNA(ADAMASS('J/psi(1S)')) < %(JpsiMassWindow)s * MeV)" % config

        self.SelKaon1 = Selection("K1_for" + name,
                                  Algorithm=FilterDesktop(Code=self.Kaon1Cuts),
                                  RequiredSelections=[StdAllLooseKaons])

        self.SelKaon1Loose = Selection(
            "K1Loose_for" + name,
            Algorithm=FilterDesktop(Code=self.Kaon1CutsLoose),
            RequiredSelections=[StdAllLooseKaons])

        self.SelKaon2 = Selection("K2_for" + name,
                                  Algorithm=FilterDesktop(Code=self.Kaon2Cuts),
                                  RequiredSelections=[StdLooseKaons])

        self.SelMuon = Selection("Mu_for" + name,
                                 Algorithm=FilterDesktop(Code=self.MuonCuts),
                                 RequiredSelections=[StdLooseMuons])

        self.SelJpsi = Selection(
            "Jpsi_for" + name,
            Algorithm=FilterDesktop(Code=self.JpsiCuts),
            RequiredSelections=[StdMassConstrainedJpsi2MuMu])

        # B -> K Mu X, both opposite & same signed K mu can be signals
        self.Bu2KMu = CombineParticles(
            DecayDescriptors=["[B+ -> K+ mu-]cc", "[B+ -> K+ mu+]cc"])
        self.Bu2KMu.CombinationCut = "(AM > %(KMuMassMin)s*MeV) & (AM < %(KMuMassMax)s*MeV)" % config
        self.Bu2KMu.MotherCut      = "(VFASPF(VCHI2/VDOF) < %(KMuVChi2Dof)s) & (BPVDIRA > 0.99) & "\
                                     "(BPVVDCHI2 > %(KMuFdChi2)s)" % config
        self.Bu2KMu.ReFitPVs = True

        self.SelBu2KMu = Selection(
            "Bu2KMu_for" + name,
            Algorithm=self.Bu2KMu,
            RequiredSelections=[self.SelKaon2, self.SelMuon])

        # B -> K J/psi
        self.Bu2KJpsi = CombineParticles(
            DecayDescriptors=["[B+ -> J/psi(1S) K+]cc"])
        self.Bu2KJpsi.CombinationCut = "(AM > %(KJpsiMassMin)s*MeV) & (AM < %(KJpsiMassMax)s*MeV)" % config
        self.Bu2KJpsi.MotherCut      = "(VFASPF(VCHI2/VDOF) < %(KJpsiVChi2Dof)s) & (BPVDIRA > 0.99) & "\
                                       "(BPVVDCHI2 > %(KJpsiFdChi2)s)" % config
        self.Bu2KJpsi.ReFitPVs = True

        self.SelBu2KJpsi = Selection(
            "Bu2KJpsi_for" + name,
            Algorithm=self.Bu2KJpsi,
            RequiredSelections=[self.SelKaon2, self.SelJpsi])

        # B_s2*0 -> (B -> K Mu X) K, signal KK have opposite signed charge.
        self.Bs2KKMu = CombineParticles(DecayDescriptor="[B*_s20 -> B+ K-]cc")
        self.Bs2KKMu.CombinationCut = "(AM-AM1 < %(DMKKMu)s*MeV) & "\
                                      "(abs(ACHILD(BPV(VZ),1)-ACHILD(BPV(VZ),2))<%(DZBPV)s*mm)" % config
        self.Bs2KKMu.MotherCut = "(PT > %(Bs2PT)s*MeV)" % config
        self.Bs2KKMu.ReFitPVs = False

        self.SelBs2KKMu = Selection(
            "Bs2KKMu_for" + name,
            Algorithm=self.Bs2KKMu,
            RequiredSelections=[self.SelBu2KMu, self.SelKaon1])

        # B_s2*0 -> (B -> K Mu X) K, same signed KK for back ground
        self.Bs2KKMuWS = CombineParticles(
            DecayDescriptor="[B*_s20 -> B+ K+]cc")
        self.Bs2KKMuWS.CombinationCut = self.Bs2KKMu.CombinationCut
        self.Bs2KKMuWS.MotherCut = self.Bs2KKMu.MotherCut
        self.Bs2KKMuWS.ReFitPVs = self.Bs2KKMu.ReFitPVs

        self.SelBs2KKMuWS = Selection(
            "Bs2KKMuWS_for" + name,
            Algorithm=self.Bs2KKMuWS,
            RequiredSelections=[self.SelBu2KMu, self.SelKaon1])

        # B_s2*0 -> (B -> K Jpsi) K, signal KK have opposite signed charge.
        self.Bs2KKJpsi = CombineParticles(
            DecayDescriptor="[B*_s20 -> B+ K-]cc")
        self.Bs2KKJpsi.CombinationCut = "(AM-AM1 < %(DMKKJpsi)s*MeV) & "\
                                        "(abs(ACHILD(BPV(VZ),1)-ACHILD(BPV(VZ),2))<%(DZBPV)s*mm)" % config
        self.Bs2KKJpsi.MotherCut = "(PT > %(Bs2PT)s*MeV)" % config
        self.Bs2KKJpsi.ReFitPVs = False

        self.SelBs2KKJpsi = Selection(
            "Bs2KKJpsi_for" + name,
            Algorithm=self.Bs2KKJpsi,
            RequiredSelections=[self.SelBu2KJpsi, self.SelKaon1Loose])

        # B_s2*0 -> (B -> K Jpsi) K, same signed KK for back ground
        self.Bs2KKJpsiWS = CombineParticles(
            DecayDescriptor="[B*_s20 -> B+ K+]cc")
        self.Bs2KKJpsiWS.CombinationCut = self.Bs2KKJpsi.CombinationCut
        self.Bs2KKJpsiWS.MotherCut = self.Bs2KKJpsi.MotherCut
        self.Bs2KKJpsiWS.ReFitPVs = self.Bs2KKJpsi.ReFitPVs

        self.SelBs2KKJpsiWS = Selection(
            "Bs2KKJpsiWS_for" + name,
            Algorithm=self.Bs2KKJpsiWS,
            RequiredSelections=[self.SelBu2KJpsi, self.SelKaon1Loose])

        # register stripping lines
        self.Bs2st2KKMuLine = StrippingLine(
            "Bs2st2KKMuLine",
            prescale=config['Bs2st2KKMuPrescale'],
            FILTER=self.GECs,
            RelatedInfoTools=config['RelatedInfoTools'],
            selection=self.SelBs2KKMu
            #, MDSTFlag  = True
        )

        self.Bs2st2KKMuWSLine = StrippingLine(
            "Bs2st2KKMuWSLine",
            prescale=config['Bs2st2KKMuWSPrescale'],
            FILTER=self.GECs,
            RelatedInfoTools=self.Bs2st2KKMuLine.RelatedInfoTools,
            selection=self.SelBs2KKMuWS
            #, MDSTFlag  = True
        )

        self.Bs2st2KKJpsiLine = StrippingLine(
            "Bs2st2KKJpsiLine",
            prescale=config['Bs2st2KKMuPrescale'],
            FILTER=self.GECs,
            selection=self.SelBs2KKJpsi
            #, MDSTFlag  = True
        )

        self.Bs2st2KKJpsiWSLine = StrippingLine(
            "Bs2st2KKJpsiWSLine",
            prescale=config['Bs2st2KKJpsiWSPrescale'],
            FILTER=self.GECs,
            selection=self.SelBs2KKJpsiWS
            #, MDSTFlag  = True
        )

        # register stripping lines
        self.registerLine(self.Bs2st2KKMuLine)
        self.registerLine(self.Bs2st2KKMuWSLine)
        self.registerLine(self.Bs2st2KKJpsiLine)
        self.registerLine(self.Bs2st2KKJpsiWSLine)
Beispiel #2
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        # if name not set outside, set it to empty
        #if name == None:
        #    name = ""

        # Selection of Bc daughters: photon, D0, Ds1
        self.selPhoton = makePhoton('GammaFor%s' % name, config['photonPT'])

        self.selD0 = makeD0('D0For%s' % name, config['KaonProbNN'],
                            config['pionProbNN'], config['TrGhostProb'])

        self.selDs1 = makeDs1(
            'Ds1For%s' % name,
            self.selD0,
            '[D_s1(2536)+ -> D0 K+]cc',  #DecayDescriptor
            config['KaonProbNN'],
            config['TrGhostProb'],
            config['Ds1DeltaMassWin'],
            config['MaxDs1VertChi2DOF'])

        self.selDs1WS = makeDs1(
            'Ds1WSFor%s' % name,
            self.selD0,
            '[D_s1(2536)+ -> D~0 K+]cc',  #DecayDescriptor
            config['KaonProbNN'],
            config['TrGhostProb'],
            config['Ds1DeltaMassWin'],
            config['MaxDs1VertChi2DOF'])

        # Bc->Ds1 Gamma selections
        self.selBc2Ds1Gamma = makeBc2Ds1Gamma(
            'Bc2Ds1GammaFor%s' % name,
            self.selDs1,
            self.selPhoton,
            config['BcPVIPchi2'],
            #                                              config['BcMassWin'],
            config['MinBcMass'],
            config['MaxBcMass'],
            config['Bc_PT'],
            config['CTAU_Bc'])

        self.selBc2Ds1GammaWS = makeBc2Ds1Gamma(
            'Bc2Ds1GammaWSFor%s' % name,
            self.selDs1WS,
            self.selPhoton,
            config['BcPVIPchi2'],
            #                                                config['BcMassWin'],
            config['MinBcMass'],
            config['MaxBcMass'],
            config['Bc_PT'],
            config['CTAU_Bc'])

        # Create and register stripping lines
        self.Bc2Ds1GammaLine = StrippingLine(
            "%s_Line" % name,
            prescale=config['Bc2Ds1GammaPreScale'],
            postscale=config['Bc2Ds1GammaPostScale'],
            selection=self.selBc2Ds1Gamma)
        self.registerLine(self.Bc2Ds1GammaLine)

        self.Bc2Ds1GammaLineWS = StrippingLine(
            "%sWS_Line" % name,
            prescale=config['Bc2Ds1GammaPreScale'],
            postscale=config['Bc2Ds1GammaPostScale'],
            selection=self.selBc2Ds1GammaWS)
        self.registerLine(self.Bc2Ds1GammaLineWS)
 def _KSS_line(self):
     from StrippingConf.StrippingLine import StrippingLine
     return StrippingLine(self._name + 'Bs2KSSLine',
                          prescale=0.5,
                          FILTER=self.GECs,
                          algos=[self._Bs2KMuNuSS()])
Beispiel #4
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        self.selStdAllNoPIDMuons = StdAllNoPIDsMuons
        self.selStdNoPIDMuons = StdNoPIDsMuons
        #self.selStdNoPIDMuons_L0   = makeTISTOS( name + "muons_L0"  , self.selStdNoPIDMuons   ,   "L0.*Physics.*Decision%TIS"   )
        #self.selStdNoPIDMuons_Hlt1 = makeTISTOS( name + "muons_Hlt1", self.selStdNoPIDMuons_L0,   "Hlt1.*Physics.*Decision%TIS" )
        #self.selStdNoPIDMuons_Hlt2 = makeTISTOS( name + "muons_Hlt2", self.selStdNoPIDMuons_Hlt1, "Hlt2.*Physics.*Decision%TIS" )

        self.selStdNoPIDKaons = StdNoPIDsKaons
        self.selStdNoPIDPions = StdNoPIDsPions
        self.selStdNoPIDProtons = StdNoPIDsProtons

        #Prompt line
        self.sel_Prompt = makePromptSelection(name + "_Combine",
                                              self.selStdAllNoPIDMuons)
        self.line_Prompt = StrippingLine(name + '_JpsiNoPID',
                                         prescale=config['PromptPrescale'],
                                         selection=self.sel_Prompt)

        #Detached
        self.sel_Detached = makeDetachedSelection(name + "_FromBCombine",
                                                  self.selStdNoPIDMuons)
        self.line_Detached = StrippingLine(name + '_JpsiFromBNoPID',
                                           prescale=config['DetachedPrescale'],
                                           selection=self.sel_Detached)

        self.sel_DetachedNoMIP = makeDetachedNoMIPSelection(
            name + "_FromBNoMipCombine", self.selStdNoPIDMuons)
        self.line_DetachedNoMIP = StrippingLine(
            name + '_JpsiFromBNoPIDNoMip',
            prescale=config['DetachedNoMIPPrescale'],
            selection=self.sel_DetachedNoMIP)

        self.sel_DetachedNoMIPHiP = makeDetachedNoMIPHiPSelection(
            name + "_FromBNoMipHiPCombine", self.selStdNoPIDMuons)
        self.line_DetachedNoMIPHiP = StrippingLine(
            name + '_JpsiFromBNoPIDNoMipHiP',
            prescale=config['DetachedNoMIPHiPPrescale'],
            selection=self.sel_DetachedNoMIPHiP)

        self.sel_DetachedNoMIPNoPCut = makeDetachedNoMIPNoPCutSelection(
            name + "_FromBNoMipCombineNoPCut", self.selStdNoPIDMuons)
        self.sel_DetachedNoMIPK = makeDetachedNoMIPKSelection(
            name + "_FromBNoMipWithKCombine", self.sel_DetachedNoMIPNoPCut,
            self.selStdNoPIDKaons)
        self.line_DetachedNoMIPK = StrippingLine(
            name + '_JpsiKFromBNoPIDNoMip',
            prescale=config['DetachedNoMIPKPrescale'],
            selection=self.sel_DetachedNoMIPK)

        #lambda_c
        self.sel_Lambdac = makeLambdacSelection(name + '_FromLambdac', "",
                                                self.selStdNoPIDPions,
                                                self.selStdNoPIDKaons,
                                                self.selStdNoPIDProtons)
        self.line_Lambdac = StrippingLine(
            name + '_FromLambdacDecay',
            prescale=config['FromLambdacPrescale'],
            selection=self.sel_Lambdac)

        self.sel_PiLambdac = makeLambdacSelection(name + '_PiFromLambdac',
                                                  "pion",
                                                  self.selStdNoPIDPions,
                                                  self.selStdNoPIDKaons,
                                                  self.selStdNoPIDProtons)
        self.line_PiLambdac = StrippingLine(
            name + '_PiFromLambdacDecay',
            prescale=config['PiFromLambdacPrescale'],
            selection=self.sel_PiLambdac)

        self.sel_KLambdac = makeLambdacSelection(name + '_KFromLambdac',
                                                 "kaon", self.selStdNoPIDPions,
                                                 self.selStdNoPIDKaons,
                                                 self.selStdNoPIDProtons)
        self.line_KLambdac = StrippingLine(
            name + '_KFromLambdacDecay',
            prescale=config['KFromLambdacPrescale'],
            selection=self.sel_KLambdac)

        self.sel_PLambdac = makeLambdacSelection(name + '_PFromLambdac',
                                                 "proton",
                                                 self.selStdNoPIDPions,
                                                 self.selStdNoPIDKaons,
                                                 self.selStdNoPIDProtons)
        self.line_PLambdac = StrippingLine(
            name + '_PFromLambdacDecay',
            prescale=config['PFromLambdacPrescale'],
            selection=self.sel_PLambdac)

        self.sel_PiISMUONLambdac = makeLambdacSelection(
            name + '_PiISMUONFromLambdac', "pionISMUON", self.selStdNoPIDPions,
            self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_PiISMUONLambdac = StrippingLine(
            name + '_PiISMUONFromLambdacDecay',
            prescale=config['PiISMUONFromLambdacPrescale'],
            selection=self.sel_PiISMUONLambdac)

        self.sel_KISMUONLambdac = makeLambdacSelection(
            name + '_KISMUONFromLambdac', "kaonISMUON", self.selStdNoPIDPions,
            self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_KISMUONLambdac = StrippingLine(
            name + '_KISMUONFromLambdacDecay',
            prescale=config['KISMUONFromLambdacPrescale'],
            selection=self.sel_KISMUONLambdac)

        self.sel_PISMUONLambdac = makeLambdacSelection(
            name + '_PISMUONFromLambdac', "protonISMUON",
            self.selStdNoPIDPions, self.selStdNoPIDKaons,
            self.selStdNoPIDProtons)
        self.line_PISMUONLambdac = StrippingLine(
            name + '_PISMUONFromLambdacDecay',
            prescale=config['PISMUONFromLambdacPrescale'],
            selection=self.sel_PISMUONLambdac)

        self.registerLine(self.line_Prompt)
        self.registerLine(self.line_Detached)
        self.registerLine(self.line_DetachedNoMIP)
        self.registerLine(self.line_DetachedNoMIPHiP)
        self.registerLine(self.line_DetachedNoMIPK)
        self.registerLine(self.line_Lambdac)
        self.registerLine(self.line_PiLambdac)
        self.registerLine(self.line_KLambdac)
        self.registerLine(self.line_PLambdac)
        self.registerLine(self.line_PiISMUONLambdac)
        self.registerLine(self.line_KISMUONLambdac)
        self.registerLine(self.line_PISMUONLambdac)
Beispiel #5
0
    def __init__(self, moduleName, config):

        LineBuilder.__init__(self, moduleName, config)

        # pre-filter inputs
        uppions = filterInputs('PiUP', [StdNoPIDsUpPions], config['UPSTREAM'])
        pions = filterInputs('Pi', [StdAllNoPIDsPions], config['ALL'])
        kaons = filterInputs('K', [StdAllNoPIDsKaons], config['ALL'])
        protons = filterInputs('P', [StdAllNoPIDsProtons], config['ALL'])
        ks_dd = filterInputs('KS0_DD', [dataOnDemand("StdLooseKsDD")],
                             config['KS0'])
        ks_ll = filterInputs('KS0_LL', [dataOnDemand("StdLooseKsLL")],
                             config['KS0'])
        ks = {"DD": [ks_dd], "LL": [ks_ll]}
        pi0_merged = filterPi0s('Merged', [StdLooseMergedPi0], config['Pi0'])
        pi0_resolved = filterPi0s('Resolved', [StdLooseResolvedPi0],
                                  config['Pi0'])
        pi0 = {"Merged": [pi0_merged], "Resolved": [pi0_resolved]}
        pcut = 'P > %s' % config['Pi0']['FROM_B_P_MIN']
        pi0_fromB_merged = filterSelection('Pi0FromBMerged', pcut,
                                           [pi0_merged])
        pi0_fromB_resolved = filterSelection('Pi0FromBResolved', pcut,
                                             [pi0_resolved])
        pi0_fromB = {
            'Merged': [pi0_fromB_merged],
            'Resolved': [pi0_fromB_resolved]
        }
        muons = filterInputs('MU', [StdLooseMuons],
                             config['ALL'])  # make muons (for D -> phi mu nu)

        # pre-filter hard inputs (these could have been used in HLT2)
        topoPions = topoInputs('Pi', [pions])
        topoKaons = topoInputs('K', [kaons])
        topoProtons = topoInputs('P', [protons])

        # make D->X, etc. inputs
        d = DBuilder(pions, kaons, ks, pi0, uppions, muons, config['D2X'],
                     config['PID'])
        dst = DstarBuilder(d, pions, pi0, config['Dstar'], config['PID'])

        # X -> hh
        hh = HHBuilder(pions, kaons, protons, ks, pi0_fromB, config['HH'],
                       config['PID'])

        # X -> hhh
        hhh = HHHBuilder(pions, kaons, protons, config['HHH'])

        # Lc -> X
        lc = LcBuilder(pions, kaons, protons, config['D2X'], config['PID'])

        # make B->DX
        b2dx = B2DXBuilder(d, dst, topoPions, topoKaons, ks, pi0_fromB, hh,
                           hhh, config['B2X'])
        self._makeLines(b2dx.lines, config)

        # Lb -> X
        lb2x = Lb2XBuilder(lc, d, hh, topoPions, topoKaons, topoProtons, hhh,
                           dst, config['B2X'])
        self._makeLines(lb2x.lines, config)

        # Unbiased lines
        ltub = LTUnbiasedBuilder(d, config['B2X'])
        self._makeLines(ltub.lines, config)

        # UP D* lines
        for line in b2dx.lines:
            for sel in line.selections:
                if sel.name().find('WS') > 0: continue
                dstar_sel = makeB2DstarX(sel, uppions, config['B2X'])
                self._makeLine(ProtoLine([dstar_sel], line.pre), config)

        # Double Topo line
        from Configurables import DoubleTopoTool as DT
        code = "ACCEPT('DoubleTopoTool/DoubleTopoLine_DT')"
        alg = LoKi__VoidFilter('DoubleTopoLineFilter', Code=code)
        sel = EventSelection('DoubleTopoEventSel', Algorithm=alg)
        dt = DT('DoubleTopoLine_DT')
        dt.minAngle = 2 / 57.
        dt.minMass = 19000
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine('DoubleTopoLine', 1.0, selection=sel, HLT=hlt)
        self.registerLine(sline)
    def __init__(self, name, config) :
        LineBuilder.__init__(self, name, config)

        # Set up global event cuts.
        # Conceptually these come first, although the place where they're
        # inserted into the line is at the bottom of the code.
        _globalEventCuts = { "Code":"( recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %(LongTrackGEC)s )" % config,
                            "Preambulo": ["from LoKiTracks.decorators import *"]}

        # Select all kaons and pions.
        self.selDauKaon = filterDaughters('KFor'+name, 'Phys/StdAllLooseKaons/Particles',
                                          config['TrkChi2_MAX_Child_MAX'],
                                          config['Trk_PT_MIN'],
                                          config['Trk_P_MIN'],
                                          config['IPCHI2_MAX_Child_MIN'])
        self.selDauPion = filterDaughters('PiFor'+name, 'Phys/StdAllLoosePions/Particles',
                                          config['TrkChi2_MAX_Child_MAX'],
                                          config['Trk_PT_MIN'],
                                          config['Trk_P_MIN'],
                                          config['IPCHI2_MAX_Child_MIN'])

        self.selDauPP = [self.selDauPion]
        self.selDauKK = [self.selDauKaon]
        self.selDauKP = [self.selDauKaon, self.selDauPion]
        
        # Now make the various decays of the K*(892)0
        strDecaysPiPi         = ["K*(892)0 -> pi+ pi-"]
        strDecaysKK           = ["K*(892)0 -> K+ K-"]
        strDecaysKPlusPiMinus = ["K*(892)0 -> K+ pi-"]
        strDecaysKMinusPiPlus = ["K*(892)0 -> K- pi+"]
        
        self.selKstarPiPi         = makeKstar('Kstar2PiPi'        + name, strDecaysPiPi,         self.selDauPP, config['Pair_SumAPT_MIN'], config['Pair_AMINDOCA_MAX'], config['Pair_BPVVD_MIN'], config['Pair_BPVCORRM_MAX'], config['FDCHI2_D0_MIN'], config['DIRA_D0_MIN'], config['M_MAX'], config['VCHI2_D0_MAX'])
        self.selKstarKK           = makeKstar('Kstar2KK'          + name, strDecaysKK  ,         self.selDauKK, config['Pair_SumAPT_MIN'], config['Pair_AMINDOCA_MAX'], config['Pair_BPVVD_MIN'], config['Pair_BPVCORRM_MAX'], config['FDCHI2_D0_MIN'], config['DIRA_D0_MIN'], config['M_MAX'], config['VCHI2_D0_MAX'])
        self.selKstarKPlusPiMinus = makeKstar('Kstar2KPlusPiMinus'+ name, strDecaysKPlusPiMinus, self.selDauKP, config['Pair_SumAPT_MIN'], config['Pair_AMINDOCA_MAX'], config['Pair_BPVVD_MIN'], config['Pair_BPVCORRM_MAX'], config['FDCHI2_D0_MIN'], config['DIRA_D0_MIN'], config['M_MAX'], config['VCHI2_D0_MAX'])
        self.selKstarKMinusPiPlus = makeKstar('Kstar2KMinusPiPlus'+ name, strDecaysKMinusPiPlus, self.selDauKP, config['Pair_SumAPT_MIN'], config['Pair_AMINDOCA_MAX'], config['Pair_BPVVD_MIN'], config['Pair_BPVCORRM_MAX'], config['FDCHI2_D0_MIN'], config['DIRA_D0_MIN'], config['M_MAX'], config['VCHI2_D0_MAX'])

        # Now make the D* -> K*(892)0 pi
        self.selDstarPiPi         = makeDstar('Dstar_PiPi'         + name, [self.selKstarPiPi],         config['IPCHI2_PiSlow_MAX'], config['PairMaxDoca_Dstar'], config['PT_Dstar_MIN'], config['DeltaM_MIN'], config['DeltaM_MAX'])
        self.selDstarKK           = makeDstar('Dstar_KK'           + name, [self.selKstarKK],           config['IPCHI2_PiSlow_MAX'], config['PairMaxDoca_Dstar'], config['PT_Dstar_MIN'], config['DeltaM_MIN'], config['DeltaM_MAX'])
        self.selDstarKPlusPiMinus = makeDstar('Dstar_KPlusPiMinus' + name, [self.selKstarKPlusPiMinus], config['IPCHI2_PiSlow_MAX'], config['PairMaxDoca_Dstar'], config['PT_Dstar_MIN'], config['DeltaM_MIN'], config['DeltaM_MAX'])
        self.selDstarKMinusPiPlus = makeDstar('Dstar_KMinusPiPlus' + name, [self.selKstarKMinusPiPlus], config['IPCHI2_PiSlow_MAX'], config['PairMaxDoca_Dstar'], config['PT_Dstar_MIN'], config['DeltaM_MIN'], config['DeltaM_MAX'])

        # Make the stripping lines
        self.linePiPi          = StrippingLine(name+'PiPiLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['prescale'],
                                               postscale = config['postscale'],
                                               selection = self.selDstarPiPi)
        self.lineKK            = StrippingLine(name + 'KKLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['prescale'],
                                               postscale = config['postscale'],
                                               selection = self.selDstarKK)
        self.lineKPlusPiMinus  = StrippingLine(name + 'KPlusPiMinusLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['prescale'],
                                               postscale = config['postscale'],
                                               selection = self.selDstarKPlusPiMinus)
        self.lineKMinusPiPlus  = StrippingLine(name + 'KMinusPiPlusLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['prescale'],
                                               postscale = config['postscale'],
                                               selection = self.selDstarKMinusPiPlus)

        self.registerLine(self.linePiPi)
        self.registerLine(self.lineKK)
        self.registerLine(self.lineKPlusPiMinus)
        self.registerLine(self.lineKMinusPiPlus)
Beispiel #7
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        self.selPions = self._makePions(name="PionsFor" + name, config=config)

        self.selPions_high = self._makePions_high(name="PionsHighFor" + name,
                                                  config=config)

        self.rawPions = DataOnDemand("Phys/StdLoosePions/Particles")

        #
        self.incTauVertices = self._makeTauVertices(name=name +
                                                    "_IncTopoVtxFor",
                                                    pionInput=self.selPions,
                                                    config=config)

        self.incTauVertices_high = self._makeTauVertices(
            name=name + "_IncTopoVtxHighFor",
            pionInput=self.selPions_high,
            config=config)

        #
        self.selTau = self._filterTau(name=name + "_TauFilter",
                                      tauInput=self.incTauVertices,
                                      config=config)

        #
        self.selHigh = self._filterHigh(name=name + "_HighFilter",
                                        tauInput=self.incTauVertices_high,
                                        config=config)

        #
        self.selB2TauTau, self.selB2TauTauSS = self._makeB2TauTau(
            name=name, tauSel=self.selTau, config=config)
        #
        self.TauTau_Line = StrippingLine(
            name + "_TauTau_Line",
            #    self.TauTau_Line    = StrippingLine(name+"_TauTau_Line",
            prescale=config['B2TauTau_LinePrescale'],
            postscale=config['B2TauTau_LinePostscale'],
            #                                           selection   = self._makeTOS(name+"_TOSForTauTau",selB2TauTau)
            MDSTFlag=False,
            RelatedInfoTools=[{
                "Type": "RelInfoBstautauTauIsolationBDT",
                "Location": "TauIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTauIsolation",
                "Location": "TauIsolation"
            }, {
                "Type": "RelInfoBstautauTrackIsolationBDT",
                "Location": "TrackIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTrackIsolation",
                "Location": "TrackIsolation"
            }, {
                "Type": "RelInfoBstautauCDFIso",
                "Location": "CDFIso"
            }, {
                "Type": "RelInfoBstautauZVisoBDT",
                "Location": "ZVisoBDT"
            }, {
                "Type": "RelInfoVertexIsolation",
                "Location": "BVars_VertexIsoInfo",
                "DaughterLocations": {
                    "[B0 -> ^tau+ tau-]CC": "TauVars_VertexIsoInfo_0",
                    "[B0 -> tau+ ^tau-]CC": "TauVars_VertexIsoInfo_1"
                }
            }],
            selection=self.selB2TauTau)

        self.TauTauSS_Line = StrippingLine(
            name + "_TauTauSS_Line",
            #    self.TauTau_Line    = StrippingLine(name+"_TauTau_Line",
            prescale=config['B2TauTauSS_LinePrescale'],
            postscale=config['B2TauTauSS_LinePostscale'],
            #                                           selection   = self._makeTOS(name+"_TOSForTauTau",selB2TauTau)
            MDSTFlag=False,
            RelatedInfoTools=[{
                "Type": "RelInfoBstautauTauIsolationBDT",
                "Location": "TauIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTauIsolation",
                "Location": "TauIsolation"
            }, {
                "Type": "RelInfoBstautauTrackIsolationBDT",
                "Location": "TrackIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTrackIsolation",
                "Location": "TrackIsolation"
            }, {
                "Type": "RelInfoBstautauCDFIso",
                "Location": "CDFIso"
            }, {
                "Type": "RelInfoBstautauZVisoBDT",
                "Location": "ZVisoBDT"
            }, {
                "Type": "RelInfoVertexIsolation",
                "Location": "BVars_VertexIsoInfo",
                "DaughterLocations": {
                    "[B0 -> ^tau+ tau+]CC": "TauVars_VertexIsoInfo_0",
                    "[B0 -> tau+ ^tau+]CC": "TauVars_VertexIsoInfo_1"
                }
            }],
            selection=self.selB2TauTauSS)

        self.High_Line = StrippingLine(
            name + "_High_Line",
            prescale=config['High_LinePrescale'],
            postscale=config['High_LinePostscale'],
            #                                           selection   = self._makeTOS(name+"_TOSForTauTau",selB2TauTau)
            MDSTFlag=False,
            RelatedInfoTools=[{
                "Type": "RelInfoBstautauTauIsolationBDT",
                "Location": "TauIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTauIsolation",
                "Location": "TauIsolation"
            }, {
                "Type": "RelInfoBstautauTrackIsolationBDT",
                "Location": "TrackIsolationBDT"
            }, {
                "Type": "RelInfoBstautauTrackIsolation",
                "Location": "TrackIsolation"
            }, {
                "Type": "RelInfoBstautauCDFIso",
                "Location": "CDFIso"
            }, {
                "Type": "RelInfoBstautauZVisoBDT",
                "Location": "ZVisoBDT"
            }, {
                "Type": "RelInfoVertexIsolation",
                "Location": "Vars_VertexIsoInfo"
            }],
            selection=self.selHigh)

        #
        self.registerLine(self.TauTau_Line)
        self.registerLine(self.TauTauSS_Line)
        self.registerLine(self.High_Line)
Beispiel #8
0
 def _makeInclbJetLine(self, name):
     return StrippingLine(name,
                          HLT2=self.__confdict__['HLT2'],
                          prescale=self.__confdict__['scale'],
                          RequiredRawEvents=["Calo"],
                          selection=self._makeInclbJetSel(name))
    def __init__(self, name, config):
        '''The constructor of the configuration class.
        Requires a configuration dictionary, config, which must provide all the settings for cuts which are not hard coded'''

        LineBuilder.__init__(self, name, config)

        #       _globalEventCuts = (
        #           "(recSummary (LHCb.RecSummary.nLongTracks, 'Rec/Track/Long') < 800 )"
        #           ) % config

        self.name = name

        self.BuToK1MuMuLineName = self.name + "_BuToK1MuMu"

        # Define cut strings
        self.BuCombCut = "(AM > %(B_Comb_MassLow)s * MeV) & (AM < %(B_Comb_MassHigh)s * MeV)" % config

        self.BuCut = "(M > %(B_MassLow)s * MeV) & " \
                     "(M < %(B_MassHigh)s * MeV) & " \
                     "(VFASPF(VCHI2/VDOF) < %(B_VertexCHI2)s) & " \
                     "(BPVIPCHI2() < %(B_IPCHI2)s) & " \
                     "(BPVDIRA> %(B_DIRA)s) & " \
                     "(BPVVDCHI2 > %(B_FlightCHI2)s) & " \
                     "(MAXTREE(ISBASIC,MIPCHI2DV(PRIMARY))> %(B_Dau_MaxIPCHI2)s )" %config

        DaughterCuts = "(VFASPF(VCHI2/VDOF) < %(Dau_VertexCHI2)s) & " \
                       "(BPVDIRA> %(Dau_DIRA)s)" %config

        self.K1CombCut = "(AM > %(K1_Comb_MassLow)s * MeV) & " \
                         "(AM < %(K1_Comb_MassHigh)s * MeV) & " \
                         "(ADOCACHI2CUT(20.,''))" %config

        self.K1Cut = DaughterCuts + " & (M > %(K1_MassLow)s * MeV) & " \
                     "(M < %(K1_MassHigh)s * MeV) & " \
                     "(BPVVDCHI2 > %(K1_FlightChi2)s) & " \
                     "(MIPCHI2DV(PRIMARY) > %(K1_MinIPCHI2)s) &" \
                     "(MAXTREE(ISBASIC,MIPCHI2DV(PRIMARY))> %(K1_Dau_MaxIPCHI2)s )" %config


        self.DiMuonCut = DaughterCuts + " & (BPVVDCHI2 > %(Dimu_FlightChi2)s) & " \
                         "(MAXTREE(ISBASIC,MIPCHI2DV(PRIMARY))> %(Dimu_Dau_MaxIPCHI2)s )" %config

        TrackCuts = "(TRCHI2DOF < %(Track_CHI2nDOF)s) " % config

        HadronCuts = "(MIPCHI2DV(PRIMARY) > %(Hadron_MinIPCHI2)s)&"\
                     "(PT > %(Hadron_PT)s * MeV)" %config

        self.KaonCut = TrackCuts + " & " + HadronCuts  #+ "& (PIDK > %(K_PIDK_min)s)" %config
        self.PionCut = TrackCuts + " & " + HadronCuts  #+ "& (PIDK < %(pi_PIDK_max)s)" %config

        self.MuonCut = TrackCuts + " & (MIPCHI2DV(PRIMARY) > %(Muon_MinIPCHI2)s)" % config

        #if(config["Muon_IsMuon"]):
        #    self.MuonCut += " & (ISMUON)"

        self.K1FilterCut = self.K1Cut + " & (INTREE(ABSID=='K+') & " + self.KaonCut + ") & (INTREE(ABSID=='pi+') & " + self.PionCut + ")"
        #self.DiMuonFilterCut = self.DiMuonCut + " & (2 == NINTREE((ABSID=='mu-') & " + self.MuonCut + "))"

        #########################
        ## Make the selections ##
        #########################

        Sel_Kaon = self.__Selection_FilterKaon__(self.name, self.KaonCut,
                                                 config['UseNoPIDsHadrons'])

        Sel_K1 = self.__Selection_CreateK1__(self.name, self.K1CombCut,
                                             self.K1Cut, self.KaonCut,
                                             self.PionCut,
                                             config['UseNoPIDsHadrons'])

        Sel_DiMuon = self.__Selection_CreateDiMuon__(self.name, self.DiMuonCut,
                                                     self.MuonCut,
                                                     config['Muon_IsMuon'])
        Sel_DiMuonSS = self.__Selection_CreateDiMuonSS__(
            self.name, self.DiMuonCut, self.MuonCut, config['Muon_IsMuon'])

        Sel_BuToK1MuMu = self.__Selection_CreateBuToK1MuMu__(
            self.name, [Sel_DiMuon, Sel_K1], self.BuCombCut, self.BuCut)
        Sel_BuToK1MuMuSS = self.__Selection_CreateBuToK1MuMu__(
            self.name + "SS", [Sel_DiMuonSS, Sel_K1], self.BuCombCut,
            self.BuCut)

        ###################################
        ## Construct the stripping lines ##
        ###################################

        from StrippingConf.StrippingLine import StrippingLine

        ## --- Bu -> K1 mu mu (default) line ---
        Line_BuToK1MuMu_Name = self.BuToK1MuMuLineName + "Line"
        Line_BuToK1MuMu = StrippingLine(
            Line_BuToK1MuMu_Name,
            prescale=config['Prescale_BuToK1MuMu'],
            postscale=config['Postscale_BuToK1MuMu'],
            selection=Sel_BuToK1MuMu)
        self.registerLine(Line_BuToK1MuMu)

        ## --- Bu -> K1 mu mu same sign line ---
        Line_BuToK1MuMuSS_Name = self.BuToK1MuMuLineName + "SSLine"
        Line_BuToK1MuMuSS = StrippingLine(
            Line_BuToK1MuMuSS_Name,
            prescale=config['Prescale_BuToK1MuMuSS'],
            postscale=config['Postscale_BuToK1MuMuSS'],
            selection=Sel_BuToK1MuMuSS)
        self.registerLine(Line_BuToK1MuMuSS)
Beispiel #10
0
    def __init__(self, name, config) :

        # Initialize the stripping.
        LineBuilder.__init__(self, name, config)
        self._config = config
        self._name = name

        # Preselection strings for HLT and FILTER.
        hlt     = "HLT_PASS_RE('" + self._config["HLT"]["LINETOPO"] + ".*Decision')"
        hltMB   = "HLT_PASS('"+self._config["HLT"]["LINEMB"]+"')"
        fltDIFF = {"Code" : "(recSummary(LHCb.RecSummary.nPVs, 'Rec/Vertex/Primary')<2)"
                            "& (recSummaryTrack(LHCb.RecSummary.nBackTracks, TrBACKWARD) < 1)",
                   'Preambulo' : ['from LoKiTracks.decorators import *',
                                  'from LoKiCore.functions    import *']}

        # Select the particles.
        trks     = self._create_trks([StdAllNoPIDsPions])
        svrs     = self._create_svrs([trks])
        mptJets  = self._filter_hPTJets([StdJets],str(self._config["JET"]["MIN_PT"]) )
        hptJets  = self._filter_hPTJets([StdJets],str(self._config["JET"]["VERYLOW_PT"]) )
        bJets    = self._create_bJets(mptJets,svrs)
        #one jet has 60% of a TOPO object LHCbID, with PT > 15, 50, 90
        fbJets0   = self._filter_bJets(bJets,0,str(self._config["JET"]["VERYLOW_PT"]))
        fbJets1   = self._filter_bJets(bJets,0,str(self._config["JET"]["MEDIUM_PT"]))
        fbJets2   = self._filter_bJets(bJets,0,str(self._config["JET"]["HIGH_PT"]))
        dijets_T6_A  = self._create_dijets([hptJets, bJets], cut2=0, PT = str(self._config["JET"]["LOW_PT"]))
        #one jet has 60% of a TOPO object LHCbID, the other has both trk of one 2-trk SV
        dijets_T6_PS = self._create_dijets([bJets],   cut1=0,  cut3=15, PT = str(self._config["JET"]["LOW_PT"]))
        #
        #cut1 and cut2 act on the TopoObject tagging for jet1 and jet2:
        #    cut1 apply to jet1 and cut2 apply to jet2, or cut2 apply to jet1 and cut1
        #    apply to jet2
        #cut3 and cut4 act on the  created SV tagging for jet1 and jet2
        #
        # cutX == 0  no tagging
        # cutX == 1  at least  60% of the LHCbID to the "tagging" object are
        # continas in the jet
        # cutX == 11 TOS (or all tracks in the jet)
        #
        #The three following lines are designed for the 4b analyses (Contact: Stephane Tourneur):
        _3jets_Pt7_3sv = self._create_3jets([mptJets, bJets], minPT = str(self._config["JET"]["EXTLOW_PT"]), Nsvtag="2.5")
        _4jets_Pt5_3sv = self._create_4jets([mptJets, bJets], minPT = str(self._config["JET"]["MIN_PT"]), Nsvtag="2.5")
        _4jets_Pt5_0sv = self._create_4jets([mptJets, bJets], minPT = str(self._config["JET"]["MIN_PT"]), Nsvtag="-0.5")

        line_jetDIFF = StrippingLine(
            name + "Diffractive",
            prescale = self._config["PRESCALE"]["DIFF"],
            HLT = hlt,
            FILTER = fltDIFF,
            selection = hptJets,
            RequiredRawEvents = ["Calo"]
        )
        line_jetMB = StrippingLine(
            name + "MB",
            prescale = self._config["PRESCALE"]["MB"],
            HLT = hltMB,
            selection = hptJets,
            RequiredRawEvents = ["Calo"]
        )
        line_jetPT0 = StrippingLine(
            name + "bJetPT15",
            prescale = self._config["PRESCALE"]["bJetPT15"],
            HLT = hlt,
            selection = fbJets0,
            RequiredRawEvents = ["Calo"]
            )
        line_jetPT1 = StrippingLine(
            name + "bJetPT50",
            prescale = self._config["PRESCALE"]["bJetPT50"],
            HLT = hlt,
            selection = fbJets1,
            RequiredRawEvents = ["Calo"]
            )
        line_jetPT2 = StrippingLine(
            name + "bJetPT90",
            prescale = self._config["PRESCALE"]["bJetPT90"],
            HLT = hlt,
            selection = fbJets2,
            RequiredRawEvents = ["Calo"]
            )
        line_Dijets_T6A = StrippingLine(
            name + "DiJet20_T6A",
            prescale = self._config["PRESCALE"]["dibJetT6A"],
            HLT = hlt,
            selection = dijets_T6_A,
            RequiredRawEvents = ["Calo"]
            )
        line_Dijets_T6PS = StrippingLine(
            name + "DiJet20_T6PS",
            prescale = self._config["PRESCALE"]["dibJetT6PS"],
            HLT = hlt,
            selection = dijets_T6_PS,
            RequiredRawEvents = ["Calo"]
            )
        line__3jets_Pt7_3sv  = StrippingLine(
            name + "_3jets_Pt7_3sv",
            prescale = self._config["PRESCALE"]["_3jets_Pt7_3sv"],
            HLT = hlt,
            selection = _3jets_Pt7_3sv,
            RequiredRawEvents = ["Calo"]
            )
        line__4jets_Pt5_3sv  = StrippingLine(
            name + "_4jets_Pt5_3sv",
            prescale = self._config["PRESCALE"]["_4jets_Pt5_3sv"],
            HLT = hlt,
            selection = _4jets_Pt5_3sv,
            RequiredRawEvents = ["Calo"]
            )
        line__4jets_Pt5_0sv_Prescaled  = StrippingLine(
            name + "_4jets_Pt5_0sv_Prescaled",
            prescale = self._config["PRESCALE"]["_4jets_Pt5_0sv_Prescaled"],
            HLT = hlt,
            selection = _4jets_Pt5_0sv,
            RequiredRawEvents = ["Calo"]
            )

        self.registerLine(line_jetMB)
        self.registerLine(line_jetDIFF)
        self.registerLine(line_jetPT0)
        self.registerLine(line_jetPT1)
        self.registerLine(line_jetPT2)
        self.registerLine(line_Dijets_T6A)
        self.registerLine(line_Dijets_T6PS)
        self.registerLine(line__3jets_Pt7_3sv)
        self.registerLine(line__4jets_Pt5_3sv)
        self.registerLine(line__4jets_Pt5_0sv_Prescaled)
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        B2etap_LL_name = name + 'B2etapKSLL'
        B2etap_DD_name = name + 'B2etapKSDD'
        B2eta_LL_name = name + 'B2etaKSLL'
        B2eta_DD_name = name + 'B2etaKSDD'
        Lb2etap_LL_name = name + 'Lb2etapLLL'
        Lb2etap_DD_name = name + 'Lb2etapLDD'
        Lb2eta_LL_name = name + 'Lb2etaLLL'
        Lb2eta_DD_name = name + 'Lb2etaLDD'

        GECCode = {
            'Code':
            "(recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %s)" %
            config['GEC_MaxTracks'],
            'Preambulo': ["from LoKiTracks.decorators import *"]
        }

        self.pions = Pions
        self.photons = Photons
        self.eta = Eta

        self.daughters = MergedSelection(
            "DaughtersFor" + name,
            RequiredSelections=[self.pions, self.photons, self.eta])

        self.makeKS2LL('KSfor' + B2etap_LL_name, config)
        self.makeKS2DD('KSfor' + B2etap_DD_name, config)
        self.makeL2LL('Lambdafor' + Lb2etap_LL_name, config)
        self.makeL2DD('Lambdafor' + Lb2etap_DD_name, config)
        self.makeEta('Etafor' + name, config)
        self.makeEtap('Etapfor' + name, config)

        self.makeB2KSLLetap(B2etap_LL_name, config)
        self.makeB2KSDDetap(B2etap_DD_name, config)
        self.makeB2KSLLeta(B2eta_LL_name, config)
        self.makeB2KSDDeta(B2eta_DD_name, config)
        self.makeLb2LLLetap(Lb2etap_LL_name, config)
        self.makeLb2LDDetap(Lb2etap_DD_name, config)
        self.makeLb2LLLeta(Lb2eta_LL_name, config)
        self.makeLb2LDDeta(Lb2eta_DD_name, config)

        self.B2etap_LL_line = StrippingLine(B2etap_LL_name + 'Line',
                                            prescale=config['Prescale'],
                                            postscale=config['Postscale'],
                                            selection=self.selB2KSLLetap,
                                            FILTER=GECCode)
        self.B2etap_DD_line = StrippingLine(B2etap_DD_name + 'Line',
                                            prescale=config['Prescale'],
                                            postscale=config['Postscale'],
                                            selection=self.selB2KSDDetap,
                                            FILTER=GECCode)
        self.B2eta_LL_line = StrippingLine(B2eta_LL_name + 'Line',
                                           prescale=config['Prescale'],
                                           postscale=config['Postscale'],
                                           selection=self.selB2KSLLeta,
                                           FILTER=GECCode)
        self.B2eta_DD_line = StrippingLine(B2eta_DD_name + 'Line',
                                           prescale=config['Prescale'],
                                           postscale=config['Postscale'],
                                           selection=self.selB2KSDDeta,
                                           FILTER=GECCode)
        self.Lb2etap_LL_line = StrippingLine(Lb2etap_LL_name + 'Line',
                                             prescale=config['Prescale'],
                                             postscale=config['Postscale'],
                                             selection=self.selLb2LLLetap,
                                             FILTER=GECCode)
        self.Lb2etap_DD_line = StrippingLine(Lb2etap_DD_name + 'Line',
                                             prescale=config['Prescale'],
                                             postscale=config['Postscale'],
                                             selection=self.selLb2LDDetap,
                                             FILTER=GECCode)
        self.Lb2eta_LL_line = StrippingLine(Lb2eta_LL_name + 'Line',
                                            prescale=config['Prescale'],
                                            postscale=config['Postscale'],
                                            selection=self.selLb2LLLeta,
                                            FILTER=GECCode)
        self.Lb2eta_DD_line = StrippingLine(Lb2eta_DD_name + 'Line',
                                            prescale=config['Prescale'],
                                            postscale=config['Postscale'],
                                            selection=self.selLb2LDDeta,
                                            FILTER=GECCode)

        self.registerLine(self.B2etap_LL_line)
        self.registerLine(self.B2etap_DD_line)
        self.registerLine(self.B2eta_LL_line)
        self.registerLine(self.B2eta_DD_line)
        self.registerLine(self.Lb2etap_LL_line)
        self.registerLine(self.Lb2etap_DD_line)
        self.registerLine(self.Lb2eta_LL_line)
        self.registerLine(self.Lb2eta_DD_line)
Beispiel #12
0
    def __init__(self, name="B24p", config=default_config):

        LineBuilder.__init__(self, name, config)

        B24p_name = name + "B24p"
        B2JpsiKpi_name = name + "B2JpsiKpi"
        B2PhiKh_name = name + "B2PhiKh"

        #############################################################################

        self.TrackCuts = """
                         ( MIPCHI2DV(PRIMARY) > %(MinTrIPChi2)s )
                         & ( TRCHI2DOF < %(MaxTrChi2Dof)s )
                         & ( TRGHP < %(MaxTrGhp)s )
                         """ % config

        self.CommonCombi12Cuts = "(ADOCA(1,2) < %(MaxDoca)s*mm)" % config

        self.CommonCombi123Cuts = """
                                  (ADOCA(1,3) < %(MaxDoca)s*mm)
                                  & (ADOCA(2,3) < %(MaxDoca)s*mm)
                                  """ % config

        self.CommonCombiCuts = """
                               (ADAMASS(5323*MeV) < %(mDiffb)s*MeV)
                               & (ADOCA(1,4) < %(MaxDoca)s*mm)
                               & (ADOCA(2,4) < %(MaxDoca)s*mm)
                               & (ADOCA(3,4) < %(MaxDoca)s*mm)                               
                               """ % config

        self.MotherCuts = """
                          (BPVIPCHI2() < %(MaxIPChi2)s )
                          & (BPVVDCHI2 > %(MinVDChi2)s )
                          & (VFASPF(VCHI2/VDOF) < %(MaxVtxChi2Dof)s )
                          & (BPVDIRA > %(MinDira)s )
                          & (BPVLTIME() > %(MinTau)s*ps )
                          """ % config

        self.B2JpsiKpiCombi12Cut = "(ADOCA(1,2) < %(MaxDoca)s*mm) & ( in_range(2990*MeV,AM12,3200*MeV) )"

        #############################################################################

        self.selB24p = self.makeB24p(B24p_name)
        self.selB2JpsiKpi = self.makeB2JpsiKpi(B2JpsiKpi_name, config)
        self.selB2PhiKh = self.makeB2PhiKh(B2PhiKh_name, config)

        #############################################################################

        self.B24p_Line = StrippingLine(
            B24p_name + "Line",
            prescale=config["B24pPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=True,
            selection=self.selB24p,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB24p:
                        "ConeIso05B0",
                        "Phys/StdAllLooseProtons": [
                            "ConeIso05p1", "ConeIso05p2", "ConeIso05p3",
                            "ConeIso05p4"
                        ],
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB24p:
                        "ConeIso10B0",
                        "Phys/StdAllLooseProtons": [
                            "ConeIso10p1", "ConeIso10p2", "ConeIso10p3",
                            "ConeIso10p4"
                        ],
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB24p:
                        "ConeIso15B0",
                        "Phys/StdAllLooseProtons": [
                            "ConeIso15p1", "ConeIso15p2", "ConeIso15p3",
                            "ConeIso15p4"
                        ],
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "RecursionLevel": 1,
                    "Variables": 0,
                    "Locations": {
                        "Phys/StdAllLooseProtons": [
                            "TrackIsoBDTp1", "TrackIsoBDTp2", "TrackIsoBDTp3",
                            "TrackIsoBDTp4"
                        ],
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "RecursionLevel": 1,
                    "Variables": [],
                    "IsoTwoBody": True,
                    "Locations": {
                        "Phys/StdAllLooseProtons": [
                            "BsMuMuTrackIsop1", "BsMuMuTrackIsop2",
                            "BsMuMuTrackIsop3", "BsMuMuTrackIsop4"
                        ],
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        self.B2JpsiKpi_Line = StrippingLine(
            B2JpsiKpi_name + "Line",
            prescale=config["B2JpsiKpiPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=True,
            selection=self.selB2JpsiKpi,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2JpsiKpi: "ConeIso05B0",
                        "Phys/StdAllLooseProtons":
                        ["ConeIso05p1", "ConeIso05p2"],
                        "Phys/StdAllLooseKaons": "ConeIso05K",
                        "Phys/StdAllNoPIDsPions": "ConeIso05pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2JpsiKpi: "ConeIso10B0",
                        "Phys/StdAllLooseProtons":
                        ["ConeIso10p1", "ConeIso10p2"],
                        "Phys/StdAllLooseKaons": "ConeIso10K",
                        "Phys/StdAllNoPIDsPions": "ConeIso10pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2JpsiKpi: "ConeIso15B0",
                        "Phys/StdAllLooseProtons":
                        ["ConeIso15p1", "ConeIso15p2"],
                        "Phys/StdAllLooseKaons": ["ConeIso15K"],
                        "Phys/StdAllNoPIDsPions": ["ConeIso15pi"],
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "RecursionLevel": 1,
                    "Variables": 0,
                    "Locations": {
                        "Phys/StdAllLooseProtons":
                        ["TrackIsoBDTp1", "TrackIsoBDTp2"],
                        "Phys/StdAllLooseKaons":
                        "TrackIsoBDTK",
                        "Phys/StdAllNoPIDsPions":
                        "TrackIsoBDTpi",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "RecursionLevel": 1,
                    "Variables": [],
                    "IsoTwoBody": True,
                    "Locations": {
                        "Phys/StdAllLooseKaons":
                        "BsMuMuTrackIsoK",
                        "Phys/StdAllNoPIDsPions":
                        "BsMuMuTrackIsopi",
                        "Phys/StdAllLooseProtons":
                        ["BsMuMuTrackIsop1", "BsMuMuTrackIsop2"],
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        self.B2PhiKh_Line = StrippingLine(
            B2PhiKh_name + "Line",
            prescale=config["B2PhiKhPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=True,
            selection=self.selB2PhiKh,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2PhiKh:
                        "ConeIso05B0",
                        "Phys/StdAllNoPIDsPions":
                        "ConeIso05pi",
                        "Phys/StdAllLooseKaons":
                        ["ConeIso05K1", "ConeIso05K2", "ConeIso05K3"],
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2PhiKh:
                        "ConeIso10B0",
                        "Phys/StdAllNoPIDsPions":
                        "ConeIso10pi",
                        "Phys/StdAllLooseKaons":
                        ["ConeIso10K1", "ConeIso10K2", "ConeIso10K3"],
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "RecursionLevel": 1,
                    "Locations": {
                        self.selB2PhiKh:
                        "ConeIso15B0",
                        "Phys/StdAllNoPIDsPions": ["ConeIso15pi"],
                        "Phys/StdAllLooseKaons":
                        ["ConeIso15K1", "ConeIso15K2", "ConeIso15K3"],
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "RecursionLevel": 1,
                    "Variables": 0,
                    "Locations": {
                        "Phys/StdAllNoPIDsPions":
                        "TrackIsoBDTpi",
                        "Phys/StdAllLooseKaons":
                        ["TrackIsoBDTK1", "TrackIsoBDTK2", "TrackIsoBDTK3"],
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "RecursionLevel": 1,
                    "Variables": [],
                    "IsoTwoBody": True,
                    "Locations": {
                        "Phys/StdAllNoPIDsPions":
                        "BsMuMuTrackIsopi",
                        "Phys/StdAllLooseKaons": [
                            "BsMuMuTrackIsoK1", "BsMuMuTrackIsoK2",
                            "BsMuMuTrackIsoK3"
                        ],
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        #############################################################################

        self.registerLine(self.B24p_Line)
        self.registerLine(self.B2JpsiKpi_Line)
        self.registerLine(self.B2PhiKh_Line)
Beispiel #13
0
 def __init__(self, name, config):
     self.name = name
     LineBuilder.__init__(self, name, config)
     #################################################################################
     # Configure trigger
     #################################################################################
     l0 = None
     if config['L0']:
         l0 = "L0_CHANNEL_RE('%s')" % ('|'.join(config['L0']))
     l0_conv = None
     if config['L0_Conv']:
         l0_conv = "L0_CHANNEL_RE('%s')" % ('|'.join(config['L0_Conv']))
     hlt1 = None
     if config['HLT1']:
         hlt1 = "HLT_PASS_RE('%s')" % ('|'.join(config['HLT1']))
     hlt2 = None
     if config['HLT2']:
         hlt2 = "HLT_PASS_RE('%s')" % ('|'.join(config['HLT2']))
     #################################################################################
     # Build Lambda_0
     #################################################################################
     tracks_code = """(MAXTREE(TRCHI2DOF, HASTRACK) < %(Track_Chi2ndf_Max)s) &
                      (MINTREE(TRCHI2DOF, HASTRACK) < %(Track_MinChi2ndf_Max)s) &
                      (MAXTREE(TRGHOSTPROB, HASTRACK) < %(Track_GhostProb_Max)s) &
                      (INTREE(('p+'==ABSID) & (PT > %(Proton_Pt_Min)s))) &
                      (INTREE(('pi+'==ABSID) & (PT > %(Pion_Pt_Min)s))) &
                      (INTREE(('p+'==ABSID) & (P > %(Proton_P_Min)s))) &
                      (INTREE(('pi+'==ABSID) & (P > %(Pion_P_Min)s)))"""
     lambda0_ll_dod = DataOnDemand(
         Location='Phys/StdLooseLambdaLL/Particles')
     lambda0_ll_code = """(PT>%(Lambda0_Pt_Min)s*MeV) &
                          (VFASPF(VCHI2/VDOF)<%(Lambda0_VtxChi2_Max)s) &
                          (MINTREE(MIPCHI2DV(PRIMARY), ISLONG) > %(TrackLL_IPChi2_Min)s) &
                          (MIPDV(PRIMARY) > %(Lambda0LL_IP_Min)s*mm) &
                          (ADMASS('Lambda0') < %(Lambda0LL_MassWindow)s*MeV)"""
     lambda0_ll_code = (lambda0_ll_code + " & " + tracks_code) % config
     lambda0_ll_filter = FilterDesktop(Code=lambda0_ll_code)
     lambda0_ll = Selection("LooseLambda0LL",
                            Algorithm=lambda0_ll_filter,
                            RequiredSelections=[lambda0_ll_dod])
     lambda0_dd_dod = DataOnDemand(
         Location='Phys/StdLooseLambdaDD/Particles')
     lambda0_dd_code = """(PT>%(Lambda0_Pt_Min)s*MeV) &
                          (VFASPF(VCHI2/VDOF)<%(Lambda0_VtxChi2_Max)s) &
                          (ADMASS('Lambda0') < %(Lambda0DD_MassWindow)s*MeV)"""
     lambda0_dd_code = (lambda0_dd_code + " & " + tracks_code) % config
     lambda0_dd_filter = FilterDesktop(Code=lambda0_dd_code)
     lambda0_dd = Selection("LooseLambda0DD",
                            Algorithm=lambda0_dd_filter,
                            RequiredSelections=[lambda0_dd_dod])
     lambda0 = MergedSelection("LooseLambda0",
                               RequiredSelections=[lambda0_ll, lambda0_dd])
     #################################################################################
     # Filter photons
     #################################################################################
     photons_noncnv_filter = FilterDesktop(
         Code="(PT > %(Photon_PT_Min)s*MeV) & (CL > %(Photon_CL_Min)s)" %
         config)
     photons_noncnv = Selection("Photons_NonCnv",
                                Algorithm=photons_noncnv_filter,
                                RequiredSelections=[StdLooseAllPhotons])
     photons_cnv_merged = MergedSelection(
         "Photons_Cnv_Merge",
         RequiredSelections=[StdAllLooseGammaDD, StdAllLooseGammaLL])
     photons_cnv_code = """(HASVERTEX) &
                           (MM < %(PhotonCnv_MM_Max)s*MeV) &
                           (PT > %(PhotonCnv_PT_Min)s*MeV) &
                           (VFASPF(VCHI2/VDOF)<%(PhotonCnv_VtxChi2_Max)s)""" % config
     photons_cnv_filter = FilterDesktop(Code=photons_cnv_code % config)
     photons_cnv = Selection("Photons_Cnv",
                             Algorithm=photons_cnv_filter,
                             RequiredSelections=[photons_cnv_merged])
     #################################################################################
     # Build Lambda_b
     #################################################################################
     # With non-converted photons
     lambda_b_combine = CombineParticles("Lambdab_NonConv_Combine")
     lambda_b_combine.DecayDescriptor = "[Lambda_b0 -> Lambda0 gamma]cc"
     lambda_b_combine.DaughtersCuts = {'Lambda0': 'ALL', 'gamma': 'ALL'}
     lambda_b_combine.ParticleCombiners = {'': 'MomentumCombiner:PUBLIC'}
     lambda_b_combine.CombinationCut = """(ADAMASS('Lambda_b0') < %(Lambdab_MassWindow)s*MeV) &
                                          (ASUM(PT) > %(Lambdab_SumPt_Min)s )""" % config
     lambda_b_combine.MotherCut = """(PT > %(Lambdab_Pt_Min)s*MeV) &
                                     (MTDOCACHI2(1) < %(Lambdab_MTDOCAChi2_Max)s)""" % config
     lambda_b = Selection("Lambdab_NonConv_Sel",
                          Algorithm=lambda_b_combine,
                          RequiredSelections=[photons_noncnv, lambda0])
     # With converted photons
     lambda_b_cnv_combine = CombineParticles("Lambdab_Conv_Combine")
     lambda_b_cnv_combine.DecayDescriptor = "[Lambda_b0 -> Lambda0 gamma]cc"
     lambda_b_cnv_combine.DaughtersCuts = {'Lambda0': 'ALL', 'gamma': 'ALL'}
     lambda_b_cnv_combine.ParticleCombiners = {
         "": "OfflineVertexFitter:PUBLIC"
     }
     lambda_b_cnv_combine.CombinationCut = "(ADAMASS('Lambda_b0') < 1.5*%(Lambdab_MassWindow)s*MeV)" % config
     lambda_b_cnv_combine.MotherCut = """(HASVERTEX) & (VFASPF(VCHI2/VDOF)<%(Lambdab_VtxChi2_Max)s) &
                                         (PT > %(Lambdab_Pt_Min)s*MeV) &
                                         (BPVIPCHI2() < %(Lambdab_IPChi2_Max)s) &
                                         (ADMASS('Lambda_b0') < %(Lambdab_MassWindow)s*MeV)""" % config
     #(MTDOCACHI2(1) < %(Lambdab_MTDOCAChi2_Max)s) &
     lambda_b_cnv = Selection("Lambdab_Conv_Sel",
                              Algorithm=lambda_b_cnv_combine,
                              RequiredSelections=[photons_cnv, lambda0])
     #################################################################################
     # Build lines
     #################################################################################
     children = {'L0': '[Lambda_b0 -> ^Lambda0 gamma]CC'}
     self.line = StrippingLine("Lb2L0Gamma",
                               prescale=config["Lb2L0GammaPrescale"],
                               L0DU=l0,
                               HLT1=hlt1,
                               HLT2=hlt2,
                               checkPV=True,
                               RelatedInfoTools=[
                                   self.get_cone_relinfo(1.7,
                                                         children=children),
                                   self.get_cone_relinfo(1.35,
                                                         children=children),
                                   self.get_cone_relinfo(1.0,
                                                         children=children),
                               ],
                               RequiredRawEvents=['Calo'],
                               MDSTFlag=True,
                               selection=lambda_b)
     self.registerLine(self.line)
     self.line_cnv = StrippingLine(
         "Lb2L0GammaConverted",
         prescale=config["Lb2L0GammaPrescale"],
         L0DU=l0_conv,
         HLT1=hlt1,
         HLT2=hlt2,
         checkPV=True,
         RelatedInfoTools=[
             self.get_cone_relinfo(1.7, lambda_b_cnv, children),
             self.get_cone_relinfo(1.35, lambda_b_cnv, children),
             self.get_cone_relinfo(1.0, lambda_b_cnv, children),
             self.get_vtxisol_relinfo(lambda_b_cnv),
         ],
         RequiredRawEvents=['Calo'],
         MDSTFlag=True,
         selection=lambda_b_cnv)
     self.registerLine(self.line_cnv)
Beispiel #14
0
    def __init__( self, name, config ) :
        LineBuilder.__init__( self, name, config )


        self.selStdAllNoPIDMuons = StdAllNoPIDsMuons 
        self.selStdNoPIDMuons    = StdNoPIDsMuons 
        #self.selStdNoPIDMuons_L0   = makeTISTOS( name + "muons_L0"  , self.selStdNoPIDMuons   ,   "L0.*Physics.*Decision%TIS"   )
        #self.selStdNoPIDMuons_Hlt1 = makeTISTOS( name + "muons_Hlt1", self.selStdNoPIDMuons_L0,   "Hlt1.*Physics.*Decision%TIS" )
        #self.selStdNoPIDMuons_Hlt2 = makeTISTOS( name + "muons_Hlt2", self.selStdNoPIDMuons_Hlt1, "Hlt2.*Physics.*Decision%TIS" )

        self.selStdNoPIDKaons    = StdNoPIDsKaons 
        self.selStdNoPIDPions    = StdNoPIDsPions
        self.selStdNoPIDProtons  = StdNoPIDsProtons

        #Prompt line
        self.sel_Prompt  = makePromptSelection( name + "_Combine", self.selStdAllNoPIDMuons )
        self.line_Prompt = StrippingLine( name + '_JpsiNoPID', 
                                          prescale = config[ 'PromptPrescale' ], 
                                          selection = self.sel_Prompt, 
                                          RequiredRawEvents = ["Muon"],
                                          RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_Prompt.algorithm().DecayDescriptor)  ] 
                                          ) 

        #Detached
        self.sel_Detached  = makeDetachedSelection( name + "_FromBCombine", self.selStdNoPIDMuons)
        self.line_Detached = StrippingLine( name + '_JpsiFromBNoPID', 
                                            prescale = config[ 'DetachedPrescale' ], 
                                            selection = self.sel_Detached, 
                                            RequiredRawEvents = ["Muon"],
                                            RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_Detached.algorithm().DecayDescriptor)  ]
                                            ) 

        self.sel_DetachedNoMIP  = makeDetachedNoMIPSelection( name + "_FromBNoMipCombine", self.selStdNoPIDMuons )
        self.line_DetachedNoMIP = StrippingLine( name + '_JpsiFromBNoPIDNoMip', 
                                                 prescale = config[ 'DetachedNoMIPPrescale' ], 
                                                 selection = self.sel_DetachedNoMIP, 
                                                 RequiredRawEvents = ["Muon"],
                                                 RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_DetachedNoMIP.algorithm().DecayDescriptor)  ]
                                                 ) 
                 
        self.sel_DetachedNoMIPHiP  = makeDetachedNoMIPHiPSelection( name + "_FromBNoMipHiPCombine", self.selStdNoPIDMuons )
        self.line_DetachedNoMIPHiP = StrippingLine( name + '_JpsiFromBNoPIDNoMipHiP', 
                                                    prescale = config[ 'DetachedNoMIPHiPPrescale' ], 
                                                    selection = self.sel_DetachedNoMIPHiP, 
                                                    RequiredRawEvents = ["Muon"],
                                                    RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_DetachedNoMIPHiP.algorithm().DecayDescriptor)  ]
                                                    ) 

        self.sel_DetachedNoMIPNoPCut  = makeDetachedNoMIPNoPCutSelection( name + "_FromBNoMipCombineNoPCut", self.selStdNoPIDMuons )
        self.sel_DetachedNoMIPK  = makeDetachedNoMIPKSelection( name + "_FromBNoMipWithKCombine", self.sel_DetachedNoMIPNoPCut, self.selStdNoPIDKaons )
        self.line_DetachedNoMIPK = StrippingLine( name + '_JpsiKFromBNoPIDNoMip', 
                                                  prescale = config[ 'DetachedNoMIPKPrescale' ], 
                                                  selection = self.sel_DetachedNoMIPK, 
                                                  MDSTFlag = True,
                                                  RequiredRawEvents = ["Muon"],
                                                  RelatedInfoTools = [  addRelInfoMuonIsolation('[B+ ->  ( J/psi(1S) -> mu+ mu-) K+ ]CC')  ]
                                                  ) 

        #lambda_c
        self.sel_Lambdac = makeLambdacSelection( name + '_FromLambdac', "", self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_Lambdac = StrippingLine( name + '_FromLambdacDecay', 
                                           prescale = config[ 'FromLambdacPrescale' ], 
                                           selection = self.sel_Lambdac, 
                                           MDSTFlag = True,
                                           RequiredRawEvents = ["Muon"],
                                           RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_Lambdac.algorithm().DecayDescriptor)  ]
                                           ) 

        self.sel_PiLambdac = makeLambdacSelection( name + '_PiFromLambdac', "pion", self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_PiLambdac = StrippingLine( name + '_PiFromLambdacDecay', 
                                             prescale = config[ 'PiFromLambdacPrescale' ], 
                                             selection = self.sel_PiLambdac, 
                                             RequiredRawEvents = ["Muon"],
                                             RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_PiLambdac.algorithm().DecayDescriptor)  ]
                                             ) 

        self.sel_KLambdac = makeLambdacSelection( name + '_KFromLambdac', "kaon", self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_KLambdac = StrippingLine( name + '_KFromLambdacDecay', 
                                            prescale = config[ 'KFromLambdacPrescale' ], 
                                            selection = self.sel_KLambdac, 
                                            RequiredRawEvents = ["Muon"],
                                            RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_KLambdac.algorithm().DecayDescriptor)  ]
                                            ) 

        self.sel_PLambdac = makeLambdacSelection( name + '_PFromLambdac', "proton", self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_PLambdac = StrippingLine( name + '_PFromLambdacDecay', 
                                            prescale = config[ 'PFromLambdacPrescale' ], 
                                            selection = self.sel_PLambdac, 
                                            RequiredRawEvents = ["Muon"],
                                            RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_PLambdac.algorithm().DecayDescriptor)  ]
                                            ) 

        self.sel_PiISMUONLambdac = makeLambdacSelection( name + '_PiISMUONFromLambdac', "pionISMUON", 
                                                         self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_PiISMUONLambdac = StrippingLine( name + '_PiISMUONFromLambdacDecay', 
                                                   prescale = config[ 'PiISMUONFromLambdacPrescale' ], 
                                                   selection = self.sel_PiISMUONLambdac, 
                                                   RequiredRawEvents = ["Muon"],
                                                   RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_PiISMUONLambdac.algorithm().DecayDescriptor)  ]
                                                   ) 

        self.sel_KISMUONLambdac = makeLambdacSelection( name + '_KISMUONFromLambdac', "kaonISMUON", 
                                                        self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_KISMUONLambdac = StrippingLine( name + '_KISMUONFromLambdacDecay', 
                                                  prescale = config[ 'KISMUONFromLambdacPrescale' ], 
                                                  selection = self.sel_KISMUONLambdac, 
                                                  RequiredRawEvents = ["Muon"],
                                                  RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_KISMUONLambdac.algorithm().DecayDescriptor)  ]
                                                  ) 

        self.sel_PISMUONLambdac = makeLambdacSelection( name + '_PISMUONFromLambdac', "protonISMUON"
                                                        , self.selStdNoPIDPions, self.selStdNoPIDKaons, self.selStdNoPIDProtons)
        self.line_PISMUONLambdac = StrippingLine( name + '_PISMUONFromLambdacDecay', 
                                                  prescale = config[ 'PISMUONFromLambdacPrescale' ], 
                                                  selection = self.sel_PISMUONLambdac, 
                                                  RequiredRawEvents = ["Muon"],
                                                  RelatedInfoTools = [addRelInfoMuonIsolation(self.sel_PISMUONLambdac.algorithm().DecayDescriptor)  ]
                                                  ) 

        #self.registerLine( self.line_Prompt )
        #self.registerLine( self.line_Detached )
        self.registerLine( self.line_DetachedNoMIP )
        #self.registerLine( self.line_DetachedNoMIPHiP )
        self.registerLine( self.line_DetachedNoMIPK )
        self.registerLine( self.line_Lambdac )
Beispiel #15
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        # Set up global event cuts.
        # Conceptually these come first, although the place where they're
        # inserted into the line is at the bottom of the code.
        _globalEventCuts = {
            "Code":
            "( recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %(LongTrackGEC)s )"
            % config,
            "Preambulo": ["from LoKiTracks.decorators import *"]
        }

        # Select all charged kaons, protons and pions.
        self.selKaon = filterKaons('KFor' + name,
                                   'Phys/StdTightKaons/Particles',
                                   config['isLong'], config['Trk_P_MIN'],
                                   config['KAON_PIDK_MIN'],
                                   config['KAON_PIDKp_MIN'],
                                   config['KAON_ipChi2_MAX'])

        self.selPion = filterPions('PiFor' + name,
                                   'Phys/StdAllNoPIDsPions/Particles',
                                   config['isLong'], config['PION_ipChi2_MIN'],
                                   config['PION_P_MIN'])

        #using the same function/method to select Protons as Pions
        self.selProton = filterPions('ProtonFor' + name,
                                     'Phys/StdAllNoPIDsProtons/Particles',
                                     config['isLong'],
                                     config['PROTON_ipChi2_MIN'],
                                     config['PROTON_P_MIN'])

        self.selPPi = [self.selPion, self.selProton]
        self.selKK = [self.selKaon]

        # Now make the various decays e.g. Lambda/Lambda-bar decays which are real
        # and the dummy decays "f_2(2300) -> Lambda0 Lambda~0", - not real decay but dummy
        #                      "phi(1020) -> K+ K-" - not real but dummy
        #                      "Lambda_c+ -> Lambda0 K+" - not real but dummy
        #                      "Lambda_c- -> Lambda~0 K-" - not real but dummy
        #
        # real decays
        strDecaysLambda = ["Lambda0 -> p+ pi-"]
        strDecaysLambdabar = ["Lambda~0 -> p~- pi+"]
        # dummy decays
        strDecaysF2 = ["f_2(2300) -> Lambda0 Lambda~0"]
        strDecaysPhi = ["phi(1020) -> K+ K-"]
        strDecaysLambdaCplus = ["Lambda_c+ -> Lambda0 K+"]
        strDecaysLambdaCminus = ["Lambda_c~- -> Lambda~0 K-"]

        # make real decays
        self.selLambda = makeLambda('Lambda' + name, strDecaysLambda,
                                    self.selPPi, config['Fisher'],
                                    config['Lambda_V_Chi2_Max'],
                                    config['Lambda_Adamass'],
                                    config['Lambda_ipChi2_MAX'])
        self.selLambdabar = makeLambda('Lambdabar' + name, strDecaysLambdabar,
                                       self.selPPi, config['Fisher'],
                                       config['Lambda_V_Chi2_Max'],
                                       config['Lambda_Adamass'],
                                       config['Lambda_ipChi2_MAX'])

        #        print  self.selKK
        # make a dummy Phi
        self.selPhi = makePhi('Phi' + name, strDecaysPhi, self.selKK)

        # Now make the dummy decays with at least a Lambda
        #        print [self.selLambda] + [self.selLambdabar]
        #        print [self.selLambda] + self.selKK
        #        print [self.selLambdabar] +  self.selKK
        #        print 'input'
        #        print strDecaysLambda
        #        print strDecaysLambdabar

        #        print strDecaysPhi
        #        print strDecaysF2
        #        print strDecaysLambdaCplus
        #        print strDecaysLambdaCminus

        self.selF2 = makePhi('F2LambdaLambdabar' + name, strDecaysF2,
                             [self.selLambda] + [self.selLambdabar])
        self.selLambdaCplus = makePhi('LambdaCplus' + name,
                                      strDecaysLambdaCplus,
                                      [self.selLambda] + self.selKK)
        self.selLambdaCminus = makePhi('LambdaCminus' + name,
                                       strDecaysLambdaCminus,
                                       [self.selLambdabar] + self.selKK)

        # Make the stripping lines
        self.linePhi = StrippingLine(name + 'PhiLine',
                                     FILTER=_globalEventCuts,
                                     prescale=config['Phiprescale'],
                                     postscale=config['postscale'],
                                     HLT=config['HLT'],
                                     selection=self.selPhi)
        self.lineF2 = StrippingLine(name + 'F2Line',
                                    FILTER=_globalEventCuts,
                                    prescale=config['F2prescale'],
                                    postscale=config['postscale'],
                                    HLT=config['HLT'],
                                    selection=self.selF2)
        self.lineLambdaCplus = StrippingLine(
            name + 'LambdaCplusLine',
            FILTER=_globalEventCuts,
            prescale=config['LambdaCprescale'],
            postscale=config['postscale'],
            HLT=config['HLT'],
            selection=self.selLambdaCplus)
        self.lineLambdaCminus = StrippingLine(
            name + 'LambdaCminusLine',
            FILTER=_globalEventCuts,
            prescale=config['LambdaCprescale'],
            postscale=config['postscale'],
            HLT=config['HLT'],
            selection=self.selLambdaCminus)

        self.registerLine(self.linePhi)
        self.registerLine(self.lineF2)
        self.registerLine(self.lineLambdaCplus)
        self.registerLine(self.lineLambdaCminus)
Beispiel #16
0
    def __init__(self, name, config):
        '''The constructor of the configuration class.
        Requires a configuration dictionary, config, which must provide all the settings for cuts which are not hard coded
        '''

        LineBuilder.__init__(self, name, config)

        self.name = name

        self.BuToKX3872LineName = self.name + "_BuToKX3872"
        self.BuToKPsi2SLineName = self.name + "_BuToKPsi2S"
        self.BuToKX3872LooseLineName = self.name + "_BuToKX3872Loose"
        self.BuToKPsi2SLooseLineName = self.name + "_BuToKPsi2SLoose"
        #self.__PVOutputLocation__ = "Rec/Vertex/"+name+"_ModPrimary"
        ##self.__PVOutputLocation__ = "Rec/Vertex/Primary"

        ############################
        ## Define the cut strings ##
        ############################

        ###############
        #   Bu cuts  ##
        ###############

        self.BuCombCut = "(ADAMASS('B+') < %(Bu_Comb_MassWindow)s * MeV)" % config
        self.BuCombLooseCut = "(ADAMASS('B+') < %(Bu_Comb_MassWindowLoose)s * MeV)" % config

        self.BuCut = "(ADMASS('B+') < %(Bu_MassWindow)s * MeV) & (VFASPF(VCHI2/VDOF) < %(Bu_VertexCHI2)s) & (BPVIPCHI2() < %(Bu_IPCHI2)s) & (BPVDIRA> %(Bu_DIRA)s) & (BPVVDCHI2 > %(Bu_FlightCHI2)s)" % config
        self.BuLooseCut = "(ADMASS('B+') < %(Bu_MassWindowLoose)s * MeV) & (VFASPF(VCHI2/VDOF) < %(Bu_VertexCHI2Loose)s) & (BPVIPCHI2() < %(Bu_IPCHI2Loose)s) & (BPVDIRA> %(Bu_DIRALoose)s) & (BPVVDCHI2 > %(Bu_FlightCHI2Loose)s)" % config

        ##############################
        ##  X3872  and Psi(2S) cuts ##
        ##############################

        self.X3872CombCut = "(ADAMASS('X_1(3872)') < %(X3872_Comb_MassWindow)s * MeV)" % config
        self.X3872CombLooseCut = "(ADAMASS('X_1(3872)') < %(X3872_Comb_MassWindowLoose)s * MeV)" % config

        self.Psi2SCombCut = "(ADAMASS('psi(2S)') < %(X3872_Comb_MassWindow)s * MeV)" % config
        self.Psi2SCombLooseCut = "(ADAMASS('psi(2S)') < %(X3872_Comb_MassWindowLoose)s * MeV)" % config

        ResonanceVertexCut = "(VFASPF(VCHI2/VDOF) < %(X3872_VertexCHI2)s)" % config
        ResonanceVertexLooseCut = "(VFASPF(VCHI2/VDOF) < %(X3872_VertexCHI2Loose)s)" % config

        self.X3872Cut = "(ADMASS('X_1(3872)') < %(X3872_MassWindow)s * MeV) & " % config + ResonanceVertexCut
        self.X3872LooseCut = "(ADMASS('X_1(3872)') < %(X3872_MassWindowLoose)s * MeV) & " % config + ResonanceVertexLooseCut

        self.Psi2SCut = "(ADMASS('psi(2S)') < %(X3872_MassWindow)s * MeV) & " % config + ResonanceVertexCut
        self.Psi2SLooseCut = "(ADMASS('psi(2S)') < %(X3872_MassWindowLoose)s * MeV) & " % config + ResonanceVertexLooseCut

        ######################
        ##    Track cuts    ##
        ######################

        TrackCut = "(TRCHI2DOF < %(Track_CHI2nDOF)s)" % config

        self.KaonCut = TrackCut + " & (PT > %(Kaon_PT)s * MeV) & (MIPCHI2DV(PRIMARY) > %(Kaon_MinIPCHI2)s)" % config
        self.KaonLooseCut = TrackCut + "  & (PT > %(Kaon_PTLoose)s * MeV) & (MIPCHI2DV(PRIMARY) > %(Kaon_MinIPCHI2Loose)s)" % config

        self.PionCut = TrackCut + " & (MIPCHI2DV(PRIMARY) > %(Pion_MinIPCHI2)s)" % config
        self.PionLooseCut = TrackCut + " & (MIPCHI2DV(PRIMARY) > %(Pion_MinIPCHI2Loose)s)" % config

        MuonCut = TrackCut + " & (MIPCHI2DV(PRIMARY) > %(Muon_MinIPCHI2)s) & (PT > %(Muon_PT)s * MeV)" % config
        if (config["Muon_IsMuon"]):
            MuonCut += " & (ISMUON)"

        MuonLooseCut = TrackCut + " & (MIPCHI2DV(PRIMARY) > %(Muon_MinIPCHI2Loose)s) & (PT > %(Muon_PT)s * MeV)" % config
        if (config["Muon_IsMuon"]):
            MuonLooseCut += " & (ISMUON)"

        MuonPVCut = TrackCut + " & (PT > %(Muon_PT)s * MeV)" % config
        if (config["Muon_IsMuon"]):
            MuonPVCut += " & (ISMUON)"

        ##################
        ##   Rho cuts   ##
        ##################

        self.RhoCuts = "(2 == NINTREE((ABSID=='pi+') & " + self.PionCut + "))"

        ######################
        ##    J/psi cuts    ##
        ######################

        JPsiCut = "(ADMASS('J/psi(1S)') < %(JPsi_MassWindow)s * MeV) & (VFASPF(VCHI2/VDOF) < %(JPsi_VertexCHI2)s)" % config
        JPsiLooseCut = "(ADMASS('J/psi(1S)') < %(JPsi_MassWindowLoose)s * MeV) & (VFASPF(VCHI2/VDOF) < %(JPsi_VertexCHI2Loose)s)" % config

        self.JPsiCuts = JPsiCut + " & (2 == NINTREE((ABSID=='mu-') & " + MuonCut + "))"
        self.JPsiLooseCuts = JPsiLooseCut + " & (2 == NINTREE((ABSID=='mu-') & " + MuonLooseCut + "))"

        #########################
        ## Make the selections ##
        #########################

        ## loose selections
        Sel_JPsiLoose = self.__FilterSelectionJPsi__(self.name + "Loose",
                                                     self.JPsiLooseCuts)
        Sel_RhoLoose = self.__CreateSelectionRho__(self.name + "Loose", "",
                                                   "ALL", self.PionCut)

        Sel_X3872Loose = self.__CreateSelectionX3872__(
            self.BuToKX3872LooseLineName, self.X3872CombLooseCut,
            self.X3872LooseCut, [Sel_JPsiLoose, Sel_RhoLoose])
        Sel_Psi2SLoose = self.__CreateSelectionX3872__(
            self.BuToKPsi2SLooseLineName, self.Psi2SCombLooseCut,
            self.Psi2SLooseCut, [Sel_JPsiLoose, Sel_RhoLoose])

        Sel_KaonLoose = self.__FilterKaon__(self.name + "Loose",
                                            self.KaonLooseCut)

        Sel_BuX3872KLoose = self.__CreateSelectionBu__(
            self.BuToKX3872LooseLineName, self.BuCombLooseCut, self.BuLooseCut,
            [Sel_X3872Loose, Sel_KaonLoose])
        Sel_BuPsi2SKLoose = self.__CreateSelectionBu__(
            self.BuToKPsi2SLooseLineName, self.BuCombLooseCut, self.BuLooseCut,
            [Sel_Psi2SLoose, Sel_KaonLoose])

        ## tight selections
        Sel_JPsi = self.__FilterSelectionJPsi__(self.name, self.JPsiCuts)
        Sel_Rho = self.__FilterSelectionRho__(self.name, self.RhoCuts,
                                              [Sel_RhoLoose])

        Sel_X3872 = self.__CreateSelectionX3872__(self.BuToKX3872LineName,
                                                  self.X3872CombCut,
                                                  self.X3872Cut,
                                                  [Sel_JPsi, Sel_Rho])
        Sel_Psi2S = self.__CreateSelectionX3872__(self.BuToKPsi2SLineName,
                                                  self.Psi2SCombCut,
                                                  self.Psi2SCut,
                                                  [Sel_JPsi, Sel_Rho])

        Sel_Kaon = self.__FilterKaon__(self.name, self.KaonCut)

        Sel_BuX3872K = self.__CreateSelectionBu__(self.BuToKX3872LineName,
                                                  self.BuCombCut, self.BuCut,
                                                  [Sel_X3872, Sel_Kaon])
        Sel_BuPsi2SK = self.__CreateSelectionBu__(self.BuToKPsi2SLineName,
                                                  self.BuCombCut, self.BuCut,
                                                  [Sel_Psi2S, Sel_Kaon])

        ###################################
        ## Construct the stripping lines ##
        ###################################

        from StrippingConf.StrippingLine import StrippingLine

        ## Define PV filter
        #MyFilterPVs = {'Code' : "VSOURCE('Rec/Vertex/Primary') >> (NTRACKS > 6) >> RV_SINKTES('"+self.__PVOutputLocation__+"') >> ~VEMPTY", 'Preambulo' : ["from LoKiPhys.decorators import *"]}

        ## --- B+ -> X3872 K+ loose line ---
        Line_BuToX3872Loose_Name = self.BuToKX3872LooseLineName + "Line"
        Line_BuToX3872Loose = StrippingLine(
            Line_BuToX3872Loose_Name,
            prescale=config['Prescale_BuToKX3872Loose'],
            postscale=config['Postscale_BuToKX3872Loose'],
            #FILTER = MyFilterPVs,
            selection=Sel_BuX3872KLoose)
        self.registerLine(Line_BuToX3872Loose)

        ## --- B+ -> Psi2S K+ loose line ---
        Line_BuToPsi2SLoose_Name = self.BuToKPsi2SLooseLineName + "Line"
        Line_BuToPsi2SLoose = StrippingLine(
            Line_BuToPsi2SLoose_Name,
            prescale=config['Prescale_BuToKPsi2SLoose'],
            postscale=config['Postscale_BuToKPsi2SLoose'],
            selection=Sel_BuPsi2SKLoose)
        self.registerLine(Line_BuToPsi2SLoose)

        ## --- B+ -> X3872 K+ line ---
        Line_BuToX3872_Name = self.BuToKX3872LineName + "Line"
        Line_BuToX3872 = StrippingLine(
            Line_BuToX3872_Name,
            prescale=config['Prescale_BuToKX3872'],
            postscale=config['Postscale_BuToKX3872'],
            selection=Sel_BuX3872K)
        self.registerLine(Line_BuToX3872)

        ## --- B+ -> Psi2S K+ line ---
        Line_BuToPsi2S_Name = self.BuToKPsi2SLineName + "Line"
        Line_BuToPsi2S = StrippingLine(
            Line_BuToPsi2S_Name,
            prescale=config['Prescale_BuToKPsi2S'],
            postscale=config['Postscale_BuToKPsi2S'],
            selection=Sel_BuPsi2SK)
        self.registerLine(Line_BuToPsi2S)
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        KstKst_name = name + "Nominal"
        KstKstSameCharge_name = name + 'SameCharge'
        BdJpsiKst_name = "Bd2JPsiKstFor" + name

        self.selJPsi2mumu = makeJPsi2mumu('Jpsi2MuMuFor' + name,
                                          MuonPT=config['KaonPT'],
                                          MuonIPCHI2=config['KaonIPCHI2'],
                                          JPsiPT=config["KstarPT"],
                                          JPsiVCHI2=config['KstarVCHI2'])

        self.selKst2Kpi = makeKst2Kpi('Kst2KpiFor' + name,
                                      KaonPT=config['KaonPT'],
                                      KaonIPCHI2=config['KaonIPCHI2'],
                                      PionPT=config['PionPT'],
                                      PionIPCHI2=config['PionIPCHI2'],
                                      KstarPT=config["KstarPT"],
                                      KaonPIDK=config['KaonPIDK'],
                                      KstarVCHI2=config['KstarVCHI2'],
                                      KstarMassWin=config['KstarMassWin'],
                                      PionPIDK=config['PionPIDK'])

        self.selBs2KstKst = makeBs2KstKst(KstKst_name,
                                          Kstsel=self.selKst2Kpi,
                                          BMassWin=config['BMassWin'],
                                          BVCHI2=config['BVCHI2'],
                                          BDOCA=config['BDOCA'],
                                          BIPCHI2=config['BIPCHI2'])

        self.selBs2KstKstSameCharge = makeBs2KstKstSameCharge(
            KstKstSameCharge_name,
            Kstsel=self.selKst2Kpi,
            BMassWin=config['BMassWin'],
            BVCHI2=config['BVCHI2'],
            BDOCA=config['BDOCA'],
            BIPCHI2=config['BIPCHI2'])

        self.selBd2JPsiKst = makeBd2JPsiKst(BdJpsiKst_name,
                                            JPsisel=self.selJPsi2mumu,
                                            Kstsel=self.selKst2Kpi,
                                            BMassWin=config['BMassWin'],
                                            BVCHI2=config['BVCHI2'],
                                            BDOCA=config['BDOCA'],
                                            BIPCHI2=config['BIPCHI2'])

        self.Bs2KstKst_line = StrippingLine(KstKst_name + "Line",
                                            prescale=1,
                                            postscale=1,
                                            algos=[self.selBs2KstKst])

        self.Bs2KstKstSameCharge_line = StrippingLine(
            KstKstSameCharge_name + "Line",
            prescale=1,
            postscale=1,
            algos=[self.selBs2KstKstSameCharge])

        self.Bd2JPsiKstar_line = StrippingLine(BdJpsiKst_name + "Line",
                                               prescale=1,
                                               postscale=1,
                                               algos=[self.selBd2JPsiKst])

        self.registerLine(self.Bs2KstKst_line)
        self.registerLine(self.Bs2KstKstSameCharge_line)
        self.registerLine(self.Bd2JPsiKstar_line)
Beispiel #18
0
  def __init__(self, moduleName, config):
    LineBuilder.__init__(self, moduleName, config)

    selD02hhhh = makeD02hhhh(
      moduleName = moduleName
      ,combMassWin = config['CombD0MassWin']
      ,massWin = config['D0MassWin']
      ,maxDOCA = config['D0MaxDOCA']
      ,pt = config['D0Pt']
      ,dauPt = config['D0DauPt']
      ,dauMom = config['D0DauP']
      ,vtxChi2DOF = config['D0VtxChi2DOF']
      ,FDChi2 = config['D0FDChi2']
      ,IPChi2 = config['D0IPChi2']
      ,dauMaxIPChi2 = config['D0DauMaxIPChi2']
      ,dauIPChi2 = config['D0DauIPChi2']
      ,DIRA = config['D0DIRA']
      ,trackChi2DOF = config['TrackChi2DOF']
      ,applyKaonPIDK = config['ApplyKaonPIDK']
      ,kaonPIDK = config['KaonPIDK']
      ,applyPionPIDK = config['ApplyPionPIDK']
      ,pionPIDK = config['PionPIDK']
      ,applyGhostProbCut = config['ApplyGhostProbCut']
      ,ghostProbCut = config['GhostProbCut']
      )

    selPromptDstar = makePromptDstar(
      moduleName = moduleName
      ,selection = selD02hhhh
      ,combDelmLower = config['CombDelmLower']
      ,combDelmUpper = config['CombDelmUpper']
      ,delmLower = config['DelmLower']
      ,delmUpper = config['DelmUpper']
      ,DOCA = config['DstarDOCA']
      ,vertexChi2DOF = config['DstarVtxChi2DOF']
      ,pt = config['DstarPt']
      ,slowPionPt = config['SlowPionPt']
      ,trackChi2DOF = config['TrackChi2DOF']
      )

    _GECfilter = None

    if config['ApplyGECs']:
      _filter = ""

      nLong = config["MaxLongTracks"]
      if nLong is not None:
        if _filter != "":
          _filter+=" & "
        _filter += "( recSummaryTrack(LHCb.RecSummary.nLongTracks,TrLONG) < %s )" %nLong

      nDigits = config["MaxSpdDigits"]
      if nDigits is not None:
        if _filter != "":
          _filter+=" & "
        _filter += "( recSummary(LHCb.RecSummary.nSpdhits,'Raw/Spd/Digits') < %s )" %nDigits

      nClusters = config["MaxITClusters"]
      if nClusters is not None:
        if _filter != "":
          _filter+=" & "
        _filter += " ( recSummary(LHCb.RecSummary.nITClusters,'Raw/IT/Clusters') < %s )" %nClusters

      nVELO = config["MaxVeloTracks"]
      if nVELO is not None:
        if _filter != "":
          _filter+=" & "
        _filter += "( recSummaryTrack(LHCb.RecSummary.nVeloTracks,TrVELO) < %s )" %nVELO


      if _filter != "":
        _GECfilter = {'Code' : _filter,
                      'Preambulo' : ["from LoKiTracks.decorators import *",
                                     'from LoKiNumbers.decorators    import *',
                                     'from LoKiCore.functions    import *']
                      }


    self.line_tagged_d02hhhh = StrippingLine(
      moduleName+"Line"
      ,prescale=config['Prescale']
      ,postscale=config['Postscale']
      ,selection=selPromptDstar
      ,checkPV=config['CheckPV']
      ,FILTER=_GECfilter)
    self.registerLine(self.line_tagged_d02hhhh)
    def __init__(self, moduleName, config):
        LineBuilder.__init__(self, moduleName, config)

        selD02hhhh = makeD02hhhh(moduleName=moduleName,
                                 combMassWin=config['CombD0MassWin'],
                                 massWin=config['D0MassWin'],
                                 maxDOCA=config['D0MaxDOCA'],
                                 pt=config['D0Pt'],
                                 dauPt=config['D0DauPt'],
                                 dauMom=config['D0DauP'],
                                 vtxChi2DOF=config['D0VtxChi2DOF'],
                                 FDChi2=config['D0FDChi2'],
                                 IPChi2=config['D0IPChi2'],
                                 dauMaxIPChi2=config['D0DauMaxIPChi2'],
                                 dauIPChi2=config['D0DauIPChi2'],
                                 DIRA=config['D0DIRA'],
                                 trackChi2DOF=config['TrackChi2DOF'],
                                 applyKaonPIDK=config['ApplyKaonPIDK'],
                                 kaonPIDK=config['KaonPIDK'],
                                 applyPionPIDK=config['ApplyPionPIDK'],
                                 pionPIDK=config['PionPIDK'])

        selPromptDstar = makePromptDstar(
            moduleName=moduleName,
            selection=selD02hhhh,
            combDelmLower=config['CombDelmLower'],
            combDelmUpper=config['CombDelmUpper'],
            delmLower=config['DelmLower'],
            delmUpper=config['DelmUpper'],
            DOCA=config['DstarDOCA'],
            vertexChi2DOF=config['DstarVtxChi2DOF'],
            pt=config['DstarPt'],
            slowPionPt=config['SlowPionPt'],
            trackChi2DOF=config['TrackChi2DOF'])

        _filter = None

        if config['ApplyGECs']:
            _filter = ""

            nLong = config["MaxLongTracks"]
            if nLong is not None:
                if _filter != "":
                    _filter += " & "
                _filter += "(TrSOURCE('Rec/Track/Best') >> TrLONG >> (TrSIZE < %s))" % nLong

            nDigits = config["MaxSpdDigits"]
            if nDigits is not None:
                if _filter != "":
                    _filter += " & "
                _filter += "(CONTAINS('Raw/Spd/Digits') < %s)" % nDigits

            nClusters = config["MaxITClusters"]
            if nClusters is not None:
                if _filter != "":
                    _filter += " & "
                _filter += "(CONTAINS('Raw/IT/Clusters') < %s)" % nClusters

            nVELO = config["MaxVeloTracks"]
            if nVELO is not None:
                if _filter != "":
                    _filter += " & "
                _filter += "(TrSOURCE('Rec/Track/Best') >> TrVELO >> (TrSIZE < %s))" % nVELO
            if _filter == "": _filter = None  # no filters

        self.line_tagged_d02hhhh = StrippingLine(moduleName + "Line",
                                                 prescale=config['Prescale'],
                                                 postscale=config['Postscale'],
                                                 selection=selPromptDstar,
                                                 checkPV=config['CheckPV'],
                                                 FILTER=_filter)

        self.registerLine(self.line_tagged_d02hhhh)
Beispiel #20
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        _pipipi_exclName = name + '_pipipi_excl'
        _Kpipi_exclName = name + '_Kpipi_excl'
        _KKpi_exclName = name + '_KKpi_excl'
        _KKK_exclName = name + '_KKK_excl'
        _pppi_exclName = name + '_pppi_excl'
        _ppK_exclName = name + '_ppK_excl'

        self.selpipipi = makepipipi_excl(
            'pipipiexclFor' + _pipipi_exclName + 'Sel',
            _h_PT=config['_h_PT'],
            _h_P=config['_h_P'],
            _h_IPCHI2=config['_h_IPCHI2'],
            _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
            _h_TRGHP=config['_h_TRGHP'],
            _3h_DOCA=config['_3h_DOCA'],
            _3h_PTmax=config['_3h_PTmax'],
            _3h_DIRA=config['_3h_DIRA'],
            _3h_FDCHI2=config['_3h_FDCHI2'],
            _3h_SVPV=config['_3h_SVPV'],
            _3h_CHI2=config['_3h_CHI2'],
            _3h_IPCHI2=config['_3h_IPCHI2'],
            _3h_PT=config['_3h_PT'],
            _3h_PTsum=config['_3h_PTsum'],
            _3h_Psum=config['_3h_Psum'],
            _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
            _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
            _3h_Mmin=config['_3h_Mmin'],
            _3h_Mmax=config['_3h_Mmax'],
            _bu3h_Mmin=config['_bu3h_Mmin'],
            _bu3h_Mmax=config['_bu3h_Mmax'])

        self.selKpipi = makeKpipi_excl(
            'KpipiexclFor' + _Kpipi_exclName + 'Sel',
            _h_PT=config['_h_PT'],
            _h_P=config['_h_P'],
            _h_IPCHI2=config['_h_IPCHI2'],
            _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
            _h_TRGHP=config['_h_TRGHP'],
            _3h_DOCA=config['_3h_DOCA'],
            _3h_PTmax=config['_3h_PTmax'],
            _3h_DIRA=config['_3h_DIRA'],
            _3h_FDCHI2=config['_3h_FDCHI2'],
            _3h_SVPV=config['_3h_SVPV'],
            _3h_CHI2=config['_3h_CHI2'],
            _3h_IPCHI2=config['_3h_IPCHI2'],
            _3h_PT=config['_3h_PT'],
            _3h_PTsum=config['_3h_PTsum'],
            _3h_Psum=config['_3h_Psum'],
            _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
            _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
            _3h_Mmin=config['_3h_Mmin'],
            _3h_Mmax=config['_3h_Mmax'],
            _bu3h_Mmin=config['_bu3h_Mmin'],
            _bu3h_Mmax=config['_bu3h_Mmax'],
            _probnnk=config['_probnnk'])

        self.selKKpi = makeKKpi_excl(
            'KKpiexclFor' + _KKpi_exclName + 'Sel',
            _h_PT=config['_h_PT'],
            _h_P=config['_h_P'],
            _h_IPCHI2=config['_h_IPCHI2'],
            _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
            _h_TRGHP=config['_h_TRGHP'],
            _3h_DOCA=config['_3h_DOCA'],
            _3h_PTmax=config['_3h_PTmax'],
            _3h_DIRA=config['_3h_DIRA'],
            _3h_FDCHI2=config['_3h_FDCHI2'],
            _3h_SVPV=config['_3h_SVPV'],
            _3h_CHI2=config['_3h_CHI2'],
            _3h_IPCHI2=config['_3h_IPCHI2'],
            _3h_PT=config['_3h_PT'],
            _3h_PTsum=config['_3h_PTsum'],
            _3h_Psum=config['_3h_Psum'],
            _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
            _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
            _3h_Mmin=config['_3h_Mmin'],
            _3h_Mmax=config['_3h_Mmax'],
            _bu3h_Mmin=config['_bu3h_Mmin'],
            _bu3h_Mmax=config['_bu3h_Mmax'],
            _probnnpi=config['_probnnpi'],
            _probnnk=config['_probnnk'])

        self.selKKK = makeKKK_excl('KKKexclFor' + _KKK_exclName + 'Sel',
                                   _h_PT=config['_h_PT'],
                                   _h_P=config['_h_P'],
                                   _h_IPCHI2=config['_h_IPCHI2'],
                                   _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
                                   _h_TRGHP=config['_h_TRGHP'],
                                   _3h_DOCA=config['_3h_DOCA'],
                                   _3h_PTmax=config['_3h_PTmax'],
                                   _3h_DIRA=config['_3h_DIRA'],
                                   _3h_FDCHI2=config['_3h_FDCHI2'],
                                   _3h_SVPV=config['_3h_SVPV'],
                                   _3h_CHI2=config['_3h_CHI2'],
                                   _3h_IPCHI2=config['_3h_IPCHI2'],
                                   _3h_PT=config['_3h_PT'],
                                   _3h_PTsum=config['_3h_PTsum'],
                                   _3h_Psum=config['_3h_Psum'],
                                   _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
                                   _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
                                   _3h_Mmin=config['_3h_Mmin'],
                                   _3h_Mmax=config['_3h_Mmax'],
                                   _bu3h_Mmin=config['_bu3h_Mmin'],
                                   _bu3h_Mmax=config['_bu3h_Mmax'],
                                   _probnnk=config['_probnnk'])

        self.selpppi = makepppi_excl(
            'pppiexclFor' + _pppi_exclName + 'Sel',
            _h_PT=config['_h_PT'],
            _h_P=config['_h_P'],
            _h_IPCHI2=config['_h_IPCHI2'],
            _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
            _h_TRGHP=config['_h_TRGHP'],
            _3h_DOCA=config['_3h_DOCA'],
            _3h_PTmax=config['_3h_PTmax'],
            _3h_DIRA=config['_3h_DIRA'],
            _3h_FDCHI2=config['_3h_FDCHI2'],
            _3h_SVPV=config['_3h_SVPV'],
            _3h_CHI2=config['_3h_CHI2'],
            _3h_IPCHI2=config['_3h_IPCHI2'],
            _3h_PT=config['_3h_PT'],
            _3h_PTsum=config['_3h_PTsum'],
            _3h_Psum=config['_3h_Psum'],
            _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
            _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
            _3h_Mmin=config['_3h_Mmin'],
            _3h_Mmax=config['_3h_Mmax'],
            _bu3h_Mmin=config['_bu3h_Mmin'],
            _bu3h_Mmax=config['_bu3h_Mmax'],
            _probnnpi=config['_probnnpi'],
            _probnnp=config['_probnnp'])

        self.selppK = makeppK_excl('ppKexclFor' + _ppK_exclName + 'Sel',
                                   _h_PT=config['_h_PT'],
                                   _h_P=config['_h_P'],
                                   _h_IPCHI2=config['_h_IPCHI2'],
                                   _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
                                   _h_TRGHP=config['_h_TRGHP'],
                                   _3h_DOCA=config['_3h_DOCA'],
                                   _3h_PTmax=config['_3h_PTmax'],
                                   _3h_DIRA=config['_3h_DIRA'],
                                   _3h_FDCHI2=config['_3h_FDCHI2'],
                                   _3h_SVPV=config['_3h_SVPV'],
                                   _3h_CHI2=config['_3h_CHI2'],
                                   _3h_IPCHI2=config['_3h_IPCHI2'],
                                   _3h_PT=config['_3h_PT'],
                                   _3h_PTsum=config['_3h_PTsum'],
                                   _3h_Psum=config['_3h_Psum'],
                                   _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
                                   _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
                                   _3h_Mmin=config['_3h_Mmin'],
                                   _3h_Mmax=config['_3h_Mmax'],
                                   _bu3h_Mmin=config['_bu3h_Mmin'],
                                   _bu3h_Mmax=config['_bu3h_Mmax'],
                                   _probnnk=config['_probnnk'],
                                   _probnnp=config['_probnnp'])

        self.gECFilter = globalEventCutFilter(name + 'GlobalEventCutFilter',
                                              MaxTrSIZE=config['MaxTrSIZE'])

        self.algospipipi = []
        if self.gECFilter != None: self.algospipipi.append(self.gECFilter)
        self.algospipipi.append(self.selpipipi)

        self.algosKpipi = []
        if self.gECFilter != None: self.algosKpipi.append(self.gECFilter)
        self.algosKpipi.append(self.selKpipi)

        self.algosKKpi = []
        if self.gECFilter != None: self.algosKKpi.append(self.gECFilter)
        self.algosKKpi.append(self.selKKpi)

        self.algosKKK = []
        if self.gECFilter != None: self.algosKKK.append(self.gECFilter)
        self.algosKKK.append(self.selKKK)

        self.algospppi = []
        if self.gECFilter != None: self.algospppi.append(self.gECFilter)
        self.algospppi.append(self.selpppi)

        self.algosppK = []
        if self.gECFilter != None: self.algosppK.append(self.gECFilter)
        self.algosppK.append(self.selppK)

        self.linepipipi_excl = StrippingLine(
            _pipipi_exclName + 'Line',
            prescale=config['pipipi_exclLinePrescale'],
            postscale=config['pipipi_exclLinePostscale'],
            algos=self.algospipipi,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.lineKpipi_excl = StrippingLine(
            _Kpipi_exclName + 'Line',
            prescale=config['Kpipi_exclLinePrescale'],
            postscale=config['Kpipi_exclLinePostscale'],
            algos=self.algosKpipi,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.lineKKpi_excl = StrippingLine(
            _KKpi_exclName + 'Line',
            prescale=config['KKpi_exclLinePrescale'],
            postscale=config['KKpi_exclLinePostscale'],
            algos=self.algosKKpi,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.lineKKK_excl = StrippingLine(
            _KKK_exclName + 'Line',
            prescale=config['KKK_exclLinePrescale'],
            postscale=config['KKK_exclLinePostscale'],
            algos=self.algosKKK,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.linepppi_excl = StrippingLine(
            _pppi_exclName + 'Line',
            prescale=config['pppi_exclLinePrescale'],
            postscale=config['pppi_exclLinePostscale'],
            algos=self.algospppi,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.lineppK_excl = StrippingLine(
            _ppK_exclName + 'Line',
            prescale=config['ppK_exclLinePrescale'],
            postscale=config['ppK_exclLinePostscale'],
            algos=self.algosppK,
            MDSTFlag=True,
            EnableFlavourTagging=True)

        self.registerLine(self.linepipipi_excl)
        self.registerLine(self.lineKpipi_excl)
        self.registerLine(self.lineKKpi_excl)
        self.registerLine(self.lineKKK_excl)
        self.registerLine(self.linepppi_excl)
        self.registerLine(self.lineppK_excl)
Beispiel #21
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        _KKK_inclName = name + '_KKK_incl'
        _KpKpKp_inclName = name + '_KKK_samesign'
        _pph_inclName = name + '_pph_incl'

        self.selKKK = makeKKK_incl('KKKinclFor' + _KKK_inclName + 'Sel',
                                   _h_PT=config['_h_PT'],
                                   _h_P=config['_h_P'],
                                   _h_IPCHI2=config['_h_IPCHI2'],
                                   _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
                                   _h_TRGHP=config['_h_TRGHP'],
                                   _3h_DOCA=config['_3h_DOCA'],
                                   _3h_PTmax=config['_3h_PTmax'],
                                   _3h_DIRA=config['_3h_DIRA'],
                                   _3h_FDCHI2=config['_3h_FDCHI2'],
                                   _3h_PVDOCAmin=config['_3h_PVDOCAmin'],
                                   _3h_CHI2=config['_3h_CHI2'],
                                   _3h_IPCHI2=config['_3h_IPCHI2'],
                                   _3h_PT=config['_3h_PT'],
                                   _3h_PTsum=config['_3h_PTsum'],
                                   _3h_Psum=config['_3h_Psum'],
                                   _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
                                   _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
                                   _3h_CORRMmax=config['_3h_CORRMmax'],
                                   _3h_CORRMmin=config['_3h_CORRMmin'],
                                   _3hKKK_Mmin=config['_3hKKK_Mmin'],
                                   _3hKKK_Mmax=config['_3hKKK_Mmax'])

        self.selKpKpKp = makeKpKpKp_incl(
            'KpKpKpinclFor' + _KpKpKp_inclName + 'Sel',
            _h_PT=config['_h_PT'],
            _h_P=config['_h_P'],
            _h_IPCHI2=config['_h_IPCHI2'],
            _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
            _h_TRGHP=config['_h_TRGHP'],
            _3h_DOCA=config['_3h_DOCA'],
            _3h_PTmax=config['_3h_PTmax'],
            _3h_DIRA=config['_3h_DIRA'],
            _3h_FDCHI2=config['_3h_FDCHI2'],
            _3h_PVDOCAmin=config['_3h_PVDOCAmin'],
            _3h_CHI2=config['_3h_CHI2'],
            _3h_IPCHI2=config['_3h_IPCHI2'],
            _3h_PT=config['_3h_PT'],
            _3h_PTsum=config['_3h_PTsum'],
            _3h_Psum=config['_3h_Psum'],
            _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
            _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
            _3h_CORRMmax=config['_3h_CORRMmax'],
            _3h_CORRMmin=config['_3h_CORRMmin'],
            _3hKKK_Mmin=config['_3hKKK_Mmin'],
            _3hKKK_Mmax=config['_3hKKK_Mmax'])

        self.selpph = makepph_incl('pphinclFor' + _pph_inclName + 'Sel',
                                   _h_PT=config['_h_PT'],
                                   _h_P=config['_h_P'],
                                   _h_IPCHI2=config['_h_IPCHI2'],
                                   _h_TRCHI2DOF=config['_h_TRCHI2DOF'],
                                   _h_TRGHP=config['_h_TRGHP'],
                                   _3h_DOCA=config['_3h_DOCA'],
                                   _3h_PTmax=config['_3h_PTmax'],
                                   _3h_DIRA=config['_3h_DIRA'],
                                   _3h_FDCHI2=config['_3h_FDCHI2'],
                                   _3h_PVDOCAmin=config['_3h_PVDOCAmin'],
                                   _3h_CHI2=config['_3h_CHI2'],
                                   _3h_IPCHI2=config['_3h_IPCHI2'],
                                   _3h_PT=config['_3h_PT'],
                                   _3h_PTsum=config['_3h_PTsum'],
                                   _3h_Psum=config['_3h_Psum'],
                                   _3h_PVIPCHI2sum=config['_3h_PVIPCHI2sum'],
                                   _3h_TRKCHIDOFmin=config['_3h_TRKCHIDOFmin'],
                                   _3h_CORRMmax=config['_3h_CORRMmax'],
                                   _3h_CORRMmin=config['_3h_CORRMmin'],
                                   _3hpph_deltaMmax=config['_3hpph_deltaMmax'],
                                   _3hpph_deltaMmin=config['_3hpph_deltaMmin'])

        self.algosKKK = []
        self.algosKKK.append(self.selKKK)

        self.algosKpKpKp = []
        self.algosKpKpKp.append(self.selKpKpKp)

        self.algospph = []
        self.algospph.append(self.selpph)

        self.lineKKK_incl = StrippingLine(
            _KKK_inclName + 'Line',
            prescale=config['KKK_inclLinePrescale'],
            postscale=config['KKK_inclLinePostscale'],
            algos=self.algosKKK,
            FILTER=filter,
            RelatedInfoTools=[{
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                0.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "ConeIso05h1",
                    "[B+ -> K+ ^K+ K-]CC": "ConeIso05h2",
                    "[B+ -> K+ K+ ^K-]CC": "ConeIso05h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "ConeIso10h1",
                    "[B+ -> K+ ^K+ K-]CC": "ConeIso10h2",
                    "[B+ -> K+ K+ ^K-]CC": "ConeIso10h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "ConeIso15h1",
                    "[B+ -> K+ ^K+ K-]CC": "ConeIso15h2",
                    "[B+ -> K+ K+ ^K-]CC": "ConeIso15h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                2.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "ConeIso20h1",
                    "[B+ -> K+ ^K+ K-]CC": "ConeIso20h2",
                    "[B+ -> K+ K+ ^K-]CC": "ConeIso20h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                0.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "NConeIso05h1",
                    "[B+ -> K+ ^K+ K-]CC": "NConeIso05h2",
                    "[B+ -> K+ K+ ^K-]CC": "NConeIso05h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "NConeIso10h1",
                    "[B+ -> K+ ^K+ K-]CC": "NConeIso10h2",
                    "[B+ -> K+ K+ ^K-]CC": "NConeIso10h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "NConeIso15h1",
                    "[B+ -> K+ ^K+ K-]CC": "NConeIso15h2",
                    "[B+ -> K+ K+ ^K-]CC": "NConeIso15h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                2.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K-]CC": "NConeIso20h1",
                    "[B+ -> K+ ^K+ K-]CC": "NConeIso20h2",
                    "[B+ -> K+ K+ ^K-]CC": "NConeIso20h3",
                }
            }])

        self.lineKpKpKp_incl = StrippingLine(
            _KpKpKp_inclName + 'Line',
            prescale=config['KpKpKp_inclLinePrescale'],
            postscale=config['KpKpKp_inclLinePostscale'],
            algos=self.algosKpKpKp,
            FILTER=filter,
            RelatedInfoTools=[{
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                0.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "ConeIso05h1",
                    "[B+ -> K+ ^K+ K+]CC": "ConeIso05h2",
                    "[B+ -> K+ K+ ^K+]CC": "ConeIso05h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "ConeIso10h1",
                    "[B+ -> K+ ^K+ K+]CC": "ConeIso10h2",
                    "[B+ -> K+ K+ ^K+]CC": "ConeIso10h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "ConeIso15h1",
                    "[B+ -> K+ ^K+ K+]CC": "ConeIso15h2",
                    "[B+ -> K+ K+ ^K+]CC": "ConeIso15h3",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                2.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "ConeIso20h1",
                    "[B+ -> K+ ^K+ K+]CC": "ConeIso20h2",
                    "[B+ -> K+ K+ ^K+]CC": "ConeIso20h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                0.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "NConeIso05h1",
                    "[B+ -> K+ ^K+ K+]CC": "NConeIso05h2",
                    "[B+ -> K+ K+ ^K+]CC": "NConeIso05h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "NConeIso10h1",
                    "[B+ -> K+ ^K+ K+]CC": "NConeIso10h2",
                    "[B+ -> K+ K+ ^K+]CC": "NConeIso10h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "NConeIso15h1",
                    "[B+ -> K+ ^K+ K+]CC": "NConeIso15h2",
                    "[B+ -> K+ K+ ^K+]CC": "NConeIso15h3",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                2.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^K+ K+ K+]CC": "NConeIso20h1",
                    "[B+ -> K+ ^K+ K+]CC": "NConeIso20h2",
                    "[B+ -> K+ K+ ^K+]CC": "NConeIso20h3",
                }
            }])

        self.linepph_incl = StrippingLine(
            _pph_inclName + 'Line',
            prescale=config['pph_inclLinePrescale'],
            postscale=config['pph_inclLinePostscale'],
            algos=self.algospph,
            FILTER=filter,
            RelatedInfoTools=[{
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                0.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "ConeIso05p1",
                    "[B+ -> p+ ^p~- K+]CC": "ConeIso05p2",
                    "[B+ -> p+ p~- ^K+]CC": "ConeIso05h",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "ConeIso10p1",
                    "[B+ -> p+ ^p~- K+]CC": "ConeIso10p2",
                    "[B+ -> p+ p~- ^K+]CC": "ConeIso10h",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                1.5,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "ConeIso15p1",
                    "[B+ -> p+ ^p~- K+]CC": "ConeIso15p2",
                    "[B+ -> p+ p~- ^K+]CC": "ConeIso15h",
                }
            }, {
                'Type':
                'RelInfoConeVariables',
                'ConeAngle':
                2.0,
                'Variables':
                ['CONEANGLE', 'CONEMULT', 'CONEPASYM', 'CONEPTASYM'],
                'Location':
                'ConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "ConeIso20p1",
                    "[B+ -> p+ ^p~- K+]CC": "ConeIso20p2",
                    "[B+ -> p+ p~- ^K+]CC": "ConeIso20h",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                0.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso05B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "NConeIso05p1",
                    "[B+ -> p+ ^p~- K+]CC": "NConeIso05p2",
                    "[B+ -> p+ p~- ^K+]CC": "NConeIso05h",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso10B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "NConeIso10p1",
                    "[B+ -> p+ ^p~- K+]CC": "NConeIso10p2",
                    "[B+ -> p+ p~- ^K+]CC": "NConeIso10h",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                1.5,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso15B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "NConeIso15p1",
                    "[B+ -> p+ ^p~- K+]CC": "NConeIso15p2",
                    "[B+ -> p+ p~- ^K+]CC": "NConeIso15h",
                }
            }, {
                'Type':
                'RelInfoConeVariablesForEW',
                'ConeAngle':
                2.0,
                'Variables': [
                    'EWCONEANGLE', 'EWCONENPX', 'EWCONENPY', 'EWCONENPZ',
                    'EWCONENMULT', 'EWCONENVPT', 'EWCONENSPT', 'EWCONENVP',
                    'EWCONENSP'
                ],
                'Location':
                'NConeIso20B',
                "DaughterLocations": {
                    "[B+ -> ^p+ p~- K+]CC": "NConeIso20p1",
                    "[B+ -> p+ ^p~- K+]CC": "NConeIso20p2",
                    "[B+ -> p+ p~- ^K+]CC": "NConeIso20h",
                }
            }])

        self.registerLine(self.lineKKK_incl)
        self.registerLine(self.lineKpKpKp_incl)
        self.registerLine(self.linepph_incl)
Beispiel #22
0
def BtoDlnuLine(module_name,
                name,
                BDecays,
                DDecays,
                CONFIG,
                CHARM_DAUGHTERS,
                MUON,
                FAKE_MUON=None):

    DEFAULT_GECs = {
        "Code":
        "( recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %(GEC_nLongTrk)s )"
        % CONFIG,
        "Preambulo": ["from LoKiTracks.decorators import *"]
    }

    CHARM_DaugCuts = {}
    CHARM_ComboCuts = CONFIG["CharmComboCuts"]
    CHARM_MotherCuts = CONFIG["CharmMotherCuts"]
    CHARM_ComboCuts += " & (ADOCACHI2CUT( %(D_DocaChi2Max)s, ''))" % CONFIG
    CHARM_MotherCuts += "& (VFASPF(VCHI2/VDOF) < %(D_VCHI2DOF)s) " \
        "& (BPVVDCHI2 > %(D_FDCHI2)s) &  (BPVDIRA> %(D_BPVDIRA)s)"  % CONFIG

    if "CharmDaugCuts" in CONFIG.keys():
        CHARM_DaugCuts = CONFIG["CharmDaugCuts"]
    if "CharmExtraComboCuts" in CONFIG.keys():
        CHARM_ComboCuts += CONFIG["CharmExtraComboCuts"]
    if "CharmExtraMotherCuts" in CONFIG.keys():
        CHARM_MotherCuts += CONFIG["CharmExtraMotherCuts"]

    CHARM = Selection("CharmSelFor" + name + module_name,
                      Algorithm=CombineParticles(
                          DecayDescriptors=DDecays,
                          DaughtersCuts=CHARM_DaugCuts,
                          CombinationCut=CHARM_ComboCuts,
                          MotherCut=CHARM_MotherCuts),
                      RequiredSelections=CHARM_DAUGHTERS)

    USED_CHARM = CHARM
    if "D*" in BDecays:
        DST = makeDstar("CharmSelDstFor" + name + module_name, CHARM, CONFIG)
        USED_CHARM = DST

    B_combinationCut = "(AM > %(B_MassMin)s) & (AM < %(B_MassMax)s) & (ADOCACHI2CUT( %(B_DocaChi2Max)s, ''))" % CONFIG
    B_motherCut = " (MM>%(B_MassMin)s) & (MM<%(B_MassMax)s)"\
        "&(VFASPF(VCHI2/VDOF)< %(B_VCHI2DOF)s) & (BPVDIRA> %(B_DIRA)s)"\
        "&(MINTREE(((ABSID=='D+')|(ABSID=='D0')|(ABSID=='Lambda_c+')|(ABSID=='Omega_c0')|(ABSID=='Xi_c+')|(ABSID=='Xi_c0'))"\
        ", VFASPF(VZ))-VFASPF(VZ) > %(B_D_DZ)s  ) " %CONFIG
    if "ExtraComboCuts" in CONFIG.keys():
        B_combinationCut += CONFIG["ExtraComboCuts"]
    if "ExtraMotherCuts" in CONFIG.keys():
        B_motherCut += CONFIG["ExtraMotherCuts"]

    B_DaugCuts = {}
    if "ExtraMuonCuts" in CONFIG.keys():
        B_DaugCuts = {"mu+": CONFIG["ExtraMuonCuts"]}
    if "ExtraElectronCuts" in CONFIG.keys():
        B_DaugCuts = {"e+": CONFIG["ExtraElectronCuts"]}
    _B = CombineParticles(DecayDescriptors=BDecays,
                          DaughtersCuts=B_DaugCuts,
                          CombinationCut=B_combinationCut,
                          MotherCut=B_motherCut)

    if CONFIG["Monitor"] == True:
        _B.Preambulo = [
            "hdm1 = Gaudi.Histo1DDef ( 'D_M' , 1700 , 2800  , 200 )"
        ]
        _B.Monitor = True
        _B.MotherMonitor = "process ( monitor ( CHILD(M,1) , hdm1 , 'D_M' ) )  >> ~EMPTY " ""

    BSel = Selection("BSelFor" + name + module_name,
                     Algorithm=_B,
                     RequiredSelections=[MUON, USED_CHARM])

    BSelTOS = TOSFilter("BSelFor" + name + module_name + "TOS", BSel,
                        CONFIG["TTSpecs"])

    LINE_NAME = module_name + "_" + name
    _prescale = 1.0
    if LINE_NAME in CONFIG["prescales"].keys():
        _prescale = CONFIG["prescales"][LINE_NAME]
    main_line = StrippingLine(LINE_NAME,
                              selection=BSelTOS,
                              HLT1=CONFIG["HLT1"],
                              HLT2=CONFIG["HLT2"],
                              FILTER=DEFAULT_GECs,
                              prescale=_prescale)

    if FAKE_MUON == None:
        return main_line
    else:
        BSelFake = Selection("BSelFakeFor" + name + module_name,
                             Algorithm=_B,
                             RequiredSelections=[FAKE_MUON, USED_CHARM])

        BSelFakeTOS = TOSFilter("BSelFakeFor" + name + module_name + "TOS",
                                BSelFake, CONFIG["TTSpecs"])
        return {
            "RealMuon":
            main_line,
            "FakeMuon":
            StrippingLine(LINE_NAME + '_FakeMuon',
                          selection=BSelFakeTOS,
                          HLT1=CONFIG["HLT1"],
                          HLT2=CONFIG["HLT2"],
                          FILTER=DEFAULT_GECs,
                          prescale=CONFIG["prescaleFakes"])
        }
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        PiOSLine_name = name + "_PiOS"
        PiSSLine_name = name + "_PiSS"
        KOSLine_name = name + "_KOS"
        KSSLine_name = name + "_KSS"

        # 1 : Make kaons
        selKaons = makeKaons(name="KaonsFor" + name,
                             KaonP=config['KaonP'],
                             KaonPT=config['KaonPT'],
                             KaonMINIPCHI2=config['KaonMINIPCHI2'])

        # 2 : Make pions
        selPions = makePions(name="PionsFor" + name,
                             PionP=config['PionP'],
                             PionPT=config['PionPT'],
                             PionMINIPCHI2=config['PionMINIPCHI2'])

        # 3 : Make muons
        selMuons = makeMuons(name="MuonsFor" + name,
                             MuonP=config['MuonP'],
                             MuonPT=config['MuonPT'],
                             MuonMINIPCHI2=config['MuonMINIPCHI2'])

        # 4 : Combine
        selB2PiMuMuOS = self._makeB2PiMuMuOS(name=PiOSLine_name,
                                             pionSel=selPions,
                                             muonSel=selMuons,
                                             config=config)

        selB2PiMuMuSS = self._makeB2PiMuMuSS(name=PiSSLine_name,
                                             pionSel=selPions,
                                             muonSel=selMuons,
                                             config=config)

        selB2KMuMuOS = self._makeB2KMuMuOS(name=KOSLine_name,
                                           kaonSel=selKaons,
                                           muonSel=selMuons,
                                           config=config)

        selB2KMuMuSS = self._makeB2KMuMuSS(name=KSSLine_name,
                                           kaonSel=selKaons,
                                           muonSel=selMuons,
                                           config=config)

        # 5 : Declare Lines
        self.PiOSLine = StrippingLine(
            PiOSLine_name + "Line",
            prescale=config['B2PiMuMuOSLinePrescale'],
            postscale=config['B2PiMuMuOSLinePostscale'],
            selection=selB2PiMuMuOS)

        self.PiSSLine = StrippingLine(
            PiSSLine_name + "Line",
            prescale=config['B2PiMuMuSSLinePrescale'],
            postscale=config['B2PiMuMuSSLinePostscale'],
            selection=selB2PiMuMuSS)

        self.KOSLine = StrippingLine(
            KOSLine_name + "Line",
            prescale=config['B2KMuMuOSLinePrescale'],
            postscale=config['B2KMuMuOSLinePostscale'],
            selection=selB2KMuMuOS)

        self.KSSLine = StrippingLine(
            KSSLine_name + "Line",
            prescale=config['B2KMuMuSSLinePrescale'],
            postscale=config['B2KMuMuSSLinePostscale'],
            selection=selB2KMuMuSS)

        # 6 : register Line
        self.registerLine(self.PiOSLine)
        self.registerLine(self.PiSSLine)
        self.registerLine(self.KOSLine)
        self.registerLine(self.KSSLine)

        print "Created lines"
    def _lines_inner(self):
        if hasattr(self, '_Lines'): return self._Lines

        self._Lines = [
            ##
            StrippingLine(
                "K0SLLLine" + self._name,
                prescale=self._KS0LLPrescale,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.K0S_LL_Bin1()]),
            ##
            StrippingLine(
                "K0SDDLine" + self._name,
                prescale=self._KS0DDPrescale,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.K0S_DD_Bin1()]),
            ##
            StrippingLine(
                "Lam0LLLine1" + self._name,
                prescale=self._LamLLPrescale_LoP,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_LL_Bin1()]),
            ##
            StrippingLine(
                "Lam0LLLine2" + self._name,
                prescale=self._LamLLPrescale_HiP,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_LL_Bin2()]),
            ##
            StrippingLine(
                "Lam0DDLine" + self._name,
                prescale=self._LamDDPrescale,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_DD_Bin1()]),
            ##
            StrippingLine(
                "Lam0LLIsMUONLine1" + self._name,
                prescale=self._LamLLIsMUONPrescale_LoP,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_LL_Bin1_IsMUON()]),
            ##
            StrippingLine(
                "Lam0LLIsMUONLine2" + self._name,
                prescale=self._LamLLIsMUONPrescale_HiP,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_LL_Bin2_IsMUON()]),
            ##
            StrippingLine(
                "Lam0DDIsMUONLine" + self._name,
                prescale=self._LamDDIsMUONPrescale,
                checkPV=True,  ## attention! PV is required!
                postscale=1,
                #HLT        = self._hlt ,
                algos=[self.Lam0_DD_Bin1_IsMUON()])
        ]

        return self._Lines
Beispiel #25
0
    def __init__(self, name, config):
        '''The constructor of the configuration class.
        Requires a name which is added to the end of each algorithm name,
        and a configuration dictionary, config, which must provide all the settings
        which differ between the lines'''
        LineBuilder.__init__(self, name, config)

        ### first we define the cuts from the configuration ###
        ### NB: Common particles are defined with some cuts ###
        ### Check in CommonParticles the definition         ###


        # Cuts for Mu        
        self.MuCut = " (PT >  %(MuPT)s *MeV) & (P > 2.0*GeV) & (ISMUON) & (HASMUON) & "\
                     " (TRGHOSTPROB < %(TrGHOSTPROBCut)s) & "\
                     " (PIDmu > %(MuTrPID)s) " % config

        # Cuts to refine D0 selection
        self.KCut  = "& CHILDCUT(CHILDCUT( (PT > %(KPT)s*MeV) & (P > 2.0*GeV) & "\
                     " (MIPDV(PRIMARY) > 0.04*mm) & "\
                     " (TRGHOSTPROB < %(TrGHOSTPROBCut)s) & "\
                     " (PIDK >  %(KTrPID)s ),1),2) " % config
		     
        
        self.PiCut = "& CHILDCUT(CHILDCUT( (PT> %(PiPT)s*MeV) & (P > 2.0*GeV) & "\
                     " (TRGHOSTPROB < %(TrGHOSTPROBCut)s) & "\
                     " (MIPDV(PRIMARY) > 0.04*mm) ,2),2) " % config


        self.D0Cut = "& CHILDCUT( (PT>1600*MeV) & (ADMASS('D0') < %(D0MassW)s *MeV ) &  " \
                     " (BPVVDCHI2 > %(D0_BPVVDCHI2)s) & (VFASPF(VCHI2/VDOF)<10),2)  "% config

        # Cuts to refine D* selection
        self.slowPiCut= "& CHILDCUT( (PT>110*MeV) & "\
                        " (MIPDV(PRIMARY) > 0.04*mm),1) " % config        

        self.DstarCut = " (VFASPF(VCHI2/VDOF) < %(Dstar_VCHI2)s ) & " \
                        " (PT>%(Dstar_PT)s *MeV) & (ADMASS('D*(2010)+')< %(DstarMassW)s*MeV)" % config
#& (M-MAXTREE('D0'==ABSID,M)<165 * MeV) &"\

        # Cuts for B0         
        self.BCombCut="((AM > 3000.*MeV) )"
        
        self.BCut = " (BPVDIRA> 0.999 ) & "\
                    "  in_range(3000.*MeV,M,5280.*MeV) & "\
                    " (MINTREE(ABSID=='D0', VFASPF(VZ))-VFASPF(VZ) > %(B0dD0_DeltaZVtx)s*mm) & (BPVVDZ > %(B0dPV_DeltaZVtx)s*mm) & "\
                    " (VFASPF(VCHI2/VDOF)< %(B0d_VCHI2)s ) " % config
	
        self.totalDstarCut = self.DstarCut + self.KCut + self.PiCut + self.D0Cut + self.slowPiCut		    

        ### Now make all the selections ###
        
        self.__MakeMuSel__()
        self.__MakeDstar__()
        self.__MakeB0d__()
        
        from StrippingConf.StrippingLine import StrippingLine
        
        ### Now make a stripping line ###
        B0dLine=StrippingLine(self._name,
                              prescale = config['Prescale'],
                              postscale = config['Postscale'],
                              algos = [ self.B0Sel ],
                              EnableFlavourTagging = True
                              )
        
        self.registerLine(B0dLine)
        ### Collect them all together in a nice way ###
        self.Line=B0dLine
        #self.TopSelectionSeq=SeqBd2DstarMuNu
        self.Selections=[self.MuSel, self.D0Sel, self.DstarSel, self.B0Sel]
Beispiel #26
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        mmKLine_name = name + "_mm"
        eeKLine_name = name + "_ee"
        meKLine_name = name + "_me"

        # 1 : Make high IP, Pt kaons
        Kaons = StdLooseKaons
        selKaons = makeKaons(name="KaonsFor" + name,
                             KaonIPCHI2=config['KaonIPCHI2'],
                             KaonPT=config['KaonPT'])
        selKstars = makeKstars(name="KstarsFor" + name,
                               KaonIPCHI2=config['KaonIPCHI2'],
                               KaonPT=config['KaonPT'])
        # 2 : Dileptons
        Electrons = DataOnDemand(Location="Phys/StdLooseDiElectron/Particles")
        Electrons2 = DataOnDemand(
            Location="Phys/StdDiElectronFromTracks/Particles")  # TEST
        Muons = DataOnDemand(Location="Phys/StdLooseDiMuon/Particles")
        MuE = makeMuE()

        selDiElectron = self._makeDiLepton(name='Dilepton_For' + eeKLine_name,
                                           leptonSel=Electrons,
                                           config=config)
        selDiElectron2 = self._makeDiLepton(
            name='Dilepton2_For' + eeKLine_name,  # TEST
            leptonSel=Electrons2,
            config=config)
        selDiMuon = self._makeDiLepton(name='Dilepton_For' + mmKLine_name,
                                       leptonSel=Muons,
                                       config=config)
        selMuE = self._makeDiLepton(name='Dilepton_For' + meKLine_name,
                                    leptonSel=MuE,
                                    config=config)
        # 3 : Combine
        selB2LLK_ee = self._makeB2LLK(name=eeKLine_name,
                                      dileptonSel=selDiElectron,
                                      kaonSel=selKaons,
                                      kstarSel=selKstars,
                                      config=config,
                                      massCut="1000*MeV")

        selB2LLK_ee2 = self._makeB2LLK(name=eeKLine_name + "2",
                                       dileptonSel=selDiElectron2,
                                       kaonSel=selKaons,
                                       kstarSel=selKstars,
                                       config=config,
                                       massCut="1000*MeV")

        selB2LLK_mm = self._makeB2LLK(name=mmKLine_name,
                                      dileptonSel=selDiMuon,
                                      kaonSel=selKaons,
                                      kstarSel=selKstars,
                                      config=config,
                                      massCut="600*MeV")

        selB2LLK_me = self._makeB2LLK(name=meKLine_name,
                                      dileptonSel=selMuE,
                                      kaonSel=selKaons,
                                      kstarSel=selKstars,
                                      config=config,
                                      massCut="600*MeV")

        # 4 : Declare Lines
        self.eeKLine = StrippingLine(eeKLine_name + "Line",
                                     prescale=config['Bu2eeKLinePrescale'],
                                     postscale=1,
                                     selection=selB2LLK_ee,
                                     ExtraInfoTools=config['ExtraInfoTools'])
        self.eeKLine2 = StrippingLine(eeKLine_name + "Line2",
                                      prescale=config['Bu2eeKLinePrescale'],
                                      postscale=1,
                                      selection=selB2LLK_ee2,
                                      ExtraInfoTools=config['ExtraInfoTools'])
        self.mmKLine = StrippingLine(mmKLine_name + "Line",
                                     prescale=config['Bu2mmKLinePrescale'],
                                     postscale=1,
                                     selection=selB2LLK_mm,
                                     ExtraInfoTools=config['ExtraInfoTools'])
        self.meKLine = StrippingLine(meKLine_name + "Line",
                                     prescale=config['Bu2meKLinePrescale'],
                                     postscale=1,
                                     selection=selB2LLK_me,
                                     ExtraInfoTools=config['ExtraInfoTools'])

        # 5 : register Line
        self.registerLine(self.eeKLine)
        self.registerLine(self.eeKLine2)
        self.registerLine(self.mmKLine)
        self.registerLine(self.meKLine)
 def _K_line(self):
     from StrippingConf.StrippingLine import StrippingLine
     return StrippingLine(self._name + 'Bs2KLine',
                          prescale=1.0,
                          FILTER=self.GECs,
                          algos=[self._Bs2KMuNu()])
Beispiel #28
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        # Set up global event cuts.
        # Conceptually these come first, although the place where they're
        # inserted into the line is at the bottom of the code.
        _globalEventCuts = {
            'Code':
            ("(recSummary (LHCb.RecSummary.nLongTracks, 'Rec/Track/Long') < %(LongTrackGEC)s )"
             ) % config,
            'Preambulo': ["from LoKiTracks.decorators import *"]
        }

        ####################################### Common Jpsi  #########################################

        self._muon4Jpsi = AutomaticData(
            _my_immutable_config['MuonsForJpsiLocation'])
        self._Jpsi = filterJpsi(name, config=config)

        ######################################## Xibc+ Exclusive Line ##################################

        self._pions4Lambdac = AutomaticData(
            _my_immutable_config['PionsForLambdacLocation'])
        self._protons4Lambdac = AutomaticData(
            _my_immutable_config['ProtonsForLambdacLocation'])
        self._kaons4Lambdac = AutomaticData(
            _my_immutable_config['KaonsForLambdacLocation'])

        self._Lambdac = makeLambdac(
            name,
            [self._protons4Lambdac, self._kaons4Lambdac, self._pions4Lambdac],
            config)

        self._Xibc = makeXibc(name, [self._Jpsi, self._Lambdac], config)

        #declare the line:
        self.lineXibc2LcJpsi = StrippingLine(
            name + 'Xibc2LcJpsi',
            prescale=config['Xibc2LcJpsiPrescale'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self._Xibc)

        self.registerLine(self.lineXibc2LcJpsi)

        ##################################### Xibc0 ###################################################

        self._Lambda0 = makeLambda0(name, [], config)
        #Note: the Jpsi requirement is added to quickly skip events without a Jpsi saving CPU time
        self._XiminusL = makeXi(name + "LongPi", [
            self._Lambda0,
            AutomaticData(_my_immutable_config['LongPionsForXi']), self._Jpsi
        ], config)

        self._XiminusD = makeXi(name + "DownPi", [
            self._Lambda0,
            AutomaticData(_my_immutable_config['DownPionsForXi']), self._Jpsi
        ], config)

        self._Ximinus = MergedSelection(
            name + "MergedXiminus",
            RequiredSelections=[self._XiminusL, self._XiminusD])

        self._Xic0 = makeXic(name, [
            self._Ximinus,
            AutomaticData(_my_immutable_config['PionsForXic'])
        ], config)

        self._Xibc0 = makeXibc0(name, [self._Jpsi, self._Xic0], config)

        #declare the line:
        self.lineXibc2XicJpsi = StrippingLine(name + 'Xibc2XicJpsi',
                                              prescale=1,
                                              postscale=1.0,
                                              FILTER=_globalEventCuts,
                                              selection=self._Xibc0)

        self.registerLine(self.lineXibc2XicJpsi)

        ########################################## Xibc -> J/psi K p  Line #######################

        self._Xibc2JpsiKpi = makeXibc2JpsiKp(name, [
            self._Jpsi,
            AutomaticData(_my_immutable_config['Protons4JpsiKp']),
            AutomaticData(_my_immutable_config['Kaons4JpsiKp'])
        ], config)

        self.lineXibc2JpsiKp = StrippingLine((name + 'Xibc2JpsiKp'),
                                             prescale=1.0,
                                             postscale=1.0,
                                             FILTER=_globalEventCuts,
                                             selection=self._Xibc2JpsiKpi)

        self.registerLine(self.lineXibc2JpsiKp)

        ########################################## Xibc -> J/psi K p Control Line #######################

        self._Xibc2JpsiKpiCtrl = makeXibc2JpsiKp(name + "Lb", [
            self._Jpsi,
            AutomaticData(_my_immutable_config['Protons4JpsiKp']),
            AutomaticData(_my_immutable_config['Kaons4JpsiKp'])
        ],
                                                 config,
                                                 controlLine=True)

        self.lineXibc2JpsiKp = StrippingLine(
            (name + 'Lb2JpsiKp'),
            prescale=config['JpsiKp_CtrlLine_Prescale'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self._Xibc2JpsiKpiCtrl)

        self.registerLine(self.lineXibc2JpsiKp)

        ########################################## Inclusive X -> p J/psi Line #####################

        self._X = makeX(
            name,
            [  #self._Jpsi, 
                AutomaticData(_my_immutable_config['Jpsi4HighMassBaryon']),
                AutomaticData(_my_immutable_config['Protons4HighMassBaryon'])
            ],
            config)

        self.lineX2JpsiProton = StrippingLine(name + 'X2JpsiProton',
                                              prescale=1.0,
                                              postscale=1.0,
                                              FILTER=_globalEventCuts,
                                              selection=self._X)

        self.registerLine(self.lineX2JpsiProton)
 def _RhoSB_line(self):
     from StrippingConf.StrippingLine import StrippingLine
     return StrippingLine(self._name + 'Bu2RhoSBLine',
                          prescale=1.0,
                          FILTER=self.GECs,
                          algos=[self._Bu2RhoMuNuSB()])
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)
        '''
        Here we construct the selections
        '''

        name_DpKs_line = name + '_DpKs'
        name_DstarpKs_line = name + '_DstarpKs'
        name_DstarD02K3PiKs_line = name + '_DstarD02K3PiKs'
        name_D0K_line = name + '_D0K'
        name_DpPim_line = name + '_DpPim'
        name_D0Pip_line = name + '_D0Pip'
        name_DstarpPim_line = name + '_DstarpPim'
        name_DzP_line = name + '_DzP'
        name_DpP_line = name + '_DpP'
        name_DsKs_line = name + '_DsKs'
        name_DsKm_line = name + '_DsKm'
        '''
        make particles
        '''

        self.sel_Dp2KmPipPip = makeDp2KmPipPip(name + "Dplus")
        self.sel_KS02LL = makeKS02LL(name + "KSLongLong")
        self.sel_KS02DD = makeKS02DD(name + "KSDownDown")
        self.sel_KS0 = MergedSelection(
            name + "KS0",
            RequiredSelections=[self.sel_KS02LL, self.sel_KS02DD])
        self.sel_Dstarp = makeDstar2D0pi(name + "Dstar")
        self.sel_Ds = makeDs2KKPi(name + "Ds")
        self.sel_D0 = makePromptD02KPi(name + "D0")
        self.sel_K = makePromptTracks(name + "K",
                                      "Phys/StdTightKaons/Particles")
        self.sel_Pi = makePromptTracks(name + "Pi",
                                       "Phys/StdTightPions/Particles")
        self.sel_P = makePromptTracks(name + "P",
                                      "Phys/StdTightProtons/Particles")
        self.sel_LoosePi = makeNoPromptTracks(
            name + "LoosePi", "Phys/StdAllLoosePions/Particles")
        self.sel_LooseK = makeNoPromptTracks(
            name + "LooseK", "Phys/StdAllLooseKaons/Particles")
        self.sel_LoosePromptPi = makePromptSoftTracks(
            name + "LoosePromptPi", "Phys/StdAllLoosePions/Particles")
        self.sel_D02K3Pi = makeD02K3Pi(name + "D02K3Pi", self.sel_LoosePi,
                                       self.sel_LooseK)
        self.sel_DstarD02K3Pi = makeDstarD02K3Pi(name + "DstarD02K3Pi",
                                                 self.sel_D02K3Pi,
                                                 self.sel_LoosePromptPi)
        '''
        combine particles
        '''

        self.DpKs = CombineDandTrack(name + "Ds2DpKs", "[D*_s2+ -> D+ KS0]cc",
                                     self.sel_Dp2KmPipPip, self.sel_KS0)
        self.DstarpKs = CombineDandTrack(name + "Ds2DstarpKs",
                                         "[D_s1(2536)+ -> D*(2010)+ KS0]cc",
                                         self.sel_Dstarp, self.sel_KS0)
        self.DstarD02K3PiKs = CombineDandTrack(
            name + "Ds2DstarD02K3PiKs", "[D_s1(2536)+ -> D*(2010)+ KS0]cc",
            self.sel_DstarD02K3Pi, self.sel_KS0)
        self.D0K = CombineDandTrack(name + "Ds2D0K",
                                    "[D_s1(2536)+ -> D0 K+]cc", self.sel_D0,
                                    self.sel_K)
        self.DpPim = CombineDandTrack(name + "Dj2DpPim",
                                      "[D*_2(2460)0 -> D+ pi-]cc",
                                      self.sel_Dp2KmPipPip, self.sel_Pi)
        self.D0Pip = CombineDandTrack(name + "Dj2D0Pip",
                                      "[D*_2(2460)+ -> D0 pi+]cc", self.sel_D0,
                                      self.sel_Pi)
        self.DstarpPim = CombineDandTrack(name + "Dj2DstarpPim",
                                          "[D*_2(2460)0 -> D*(2010)+ pi-]cc",
                                          self.sel_Dstarp, self.sel_Pi)
        self.DzP = CombineDandTrack(name + "Lam2DzP",
                                    "[Lambda_c(2625)+ -> D0 p+]cc",
                                    self.sel_D0, self.sel_P)
        self.DpP = CombineDandTrack(name + "Lam2DpP",
                                    "[Lambda_c(2625)+ -> D+ p~-]cc",
                                    self.sel_Dp2KmPipPip, self.sel_P)
        self.DsKs = CombineDandTrack(name + "D2DsKs",
                                     "[D*_2(2460)+ -> D_s+ KS0]cc",
                                     self.sel_Ds, self.sel_KS0)
        self.DsKm = CombineDandTrack(name + "D2DsKm",
                                     "[D*_2(2460)0 -> D_s+ K-]cc", self.sel_Ds,
                                     self.sel_K)
        '''
        Here we construct the stripping lines
        '''
        self.DpKs_line = StrippingLine(name_DpKs_line,
                                       prescale=config['DpKs_prescale'],
                                       selection=self.DpKs)
        self.DstarpKs_line = StrippingLine(
            name_DstarpKs_line,
            prescale=config['DstarpKs_prescale'],
            selection=self.DstarpKs)
        self.D0K_line = StrippingLine(name_D0K_line,
                                      prescale=config['D0K_prescale'],
                                      selection=self.D0K)
        self.DpPim_line = StrippingLine(name_DpPim_line,
                                        prescale=config['DpPim_prescale'],
                                        selection=self.DpPim)
        self.D0Pip_line = StrippingLine(name_D0Pip_line,
                                        prescale=config['D0Pip_prescale'],
                                        selection=self.D0Pip)
        self.DstarpPim_line = StrippingLine(
            name_DstarpPim_line,
            prescale=config['DstarpPim_prescale'],
            selection=self.DstarpPim)
        self.DzP_line = StrippingLine(name_DzP_line,
                                      prescale=config['DzP_prescale'],
                                      selection=self.DzP)
        self.DpP_line = StrippingLine(name_DpP_line,
                                      prescale=config['DpP_prescale'],
                                      selection=self.DpP)
        self.DsKs_line = StrippingLine(name_DsKs_line,
                                       prescale=config['DsKs_prescale'],
                                       selection=self.DsKs)
        self.DsKm_line = StrippingLine(name_DsKm_line,
                                       prescale=config['DsKm_prescale'],
                                       selection=self.DsKm)
        self.DstarD02K3PiKs_line = StrippingLine(
            name_DstarD02K3PiKs_line,
            prescale=config['DstarD02K3PiKs_prescale'],
            selection=self.DstarD02K3PiKs)
        '''
        register stripping lines
        '''
        self.registerLine(self.DpKs_line)
        self.registerLine(self.DstarpKs_line)
        self.registerLine(self.D0K_line)
        self.registerLine(self.DpPim_line)
        self.registerLine(self.D0Pip_line)
        self.registerLine(self.DstarpPim_line)
        self.registerLine(self.DzP_line)
        self.registerLine(self.DpP_line)
        self.registerLine(self.DsKs_line)
        self.registerLine(self.DsKm_line)
        self.registerLine(self.DstarD02K3PiKs_line)