示例#1
0
    def __init__(self, name, config):
        self.name = name
        LineBuilder.__init__(self, name, config)
        modeName = "Bu2rho0rhoPlus"
        ### filters ----------------------------------------------------------------------------------------
        _resVoidFilter = "((CONTAINS('Phys/StdLoosePions/Particles')>0) & (CONTAINS('Phys/StdLooseResolvedPi0/Particles')>0))"
        _mgdVoidFilter = "((CONTAINS('Phys/StdLoosePions/Particles')>0) & (CONTAINS('Phys/StdLooseMergedPi0/Particles')>0))"
        _hltFilter = "( HLT_PASS_RE('Hlt1TrackAllL0Decision') & HLT_PASS_RE('Hlt2Topo[23].*Decision') )"
        _TisTosTaggerSpecs = {'Hlt2Topo[23].*Decision%TOS': 0}
        if config["isMC"]:
            _hltFilter = None
        ### build cuts -------------------------------------------------------------------------------------
        _trackCuts = (
            "(MIPCHI2DV(PRIMARY) > %(trMinIPChi2PV)s) & (PROBNNpi > %(trMinProbNNpi)s) & (PROBNNK < %(trMaxProbNNK)s)"
            " & (TRCHI2DOF < %(trMaxChi2Dof)s) & (TRGHOSTPROB < %(trMaxGhostProb)s)"
        ) % locals()["config"]

        _rhoCombMassWindow = "(AM > %(rhoCombMassMin)s) & (AM < %(rhoCombMassMax)s)" % locals(
        )["config"]

        _rho0CombCuts = _rhoCombMassWindow + " & (ADOCACHI2CUT(%(rho0DauMaxDocaChi2)s,''))" % locals(
        )["config"]
        _rho0MotherCuts = (
            "(M > %(rhoMothMassMin)s) & (M < %(rhoMothMassMax)s) & (BPVVDZ > %(rho0MinDeltaZ)s) & (VFASPF(VCHI2/VDOF) < %(rho0MinVChi2Dof)s)"
            " & (BPVDIRA > %(rho0MinDira)s) & (BPVVDCHI2 > %(rho0MinVDisplChi2)s)"
        ) % locals()["config"]

        _rhoPResDaughtersCuts = {
            "pi+":
            "ALL",
            "pi0":
            ("(P > %(pi0ResMinP)s) & (PT > %(pi0ResMinPT)s) & (CHILD(CL,1) > %(pi0ResDauMinCL)s) & (CHILD(CL,2) > %(pi0ResDauMinCL)s)"
             " & (CHILD(PT,1) > %(pi0ResDauMinPT)s) & (CHILD(PT,2) > %(pi0ResDauMinPT)s)"
             ) % locals()["config"]
        }
        _rhoPResMotherCuts = "(M > %(rhoMothMassMin)s) & (M < %(rhoMothMassMax)s) & (PT > %(rhoPResMinPT)s)" % locals(
        )["config"]

        _BuResCombCuts = "(ADAMASS('B0') < %(BuResCombMassWindow)s)" % locals(
        )["config"]
        _BuResMotherCuts = (
            "(VFASPF(VCHI2/VDOF) < %(BuResMinVChi2Dof)s) & (ADMASS('B+') < %(BuResMothMassWindow)s)"
            " & (BPVDIRA > %(BuResMinDira)s) & (PT > %(BuResMinPT)s)"
        ) % locals()["config"]

        _rhoPMgdDaughtersCuts = {
            "pi+": "ALL",
            "pi0": "(PT > %(pi0MgdMinPT)s)" % locals()["config"]
        }
        _rhoPMgdMotherCuts = "ALL"

        _BuMgdCombCuts = "(AM > %(BuMgdCombMassMin)s) & (AM < %(BuMgdCombMassMax)s)" % locals(
        )["config"]
        _BuMgdMotherCuts = (
            "(M > %(BuMgdMothMassMin)s) & (M < %(BuMgdMothMassMax)s) & (VFASPF(VCHI2/VDOF) < %(BuMgdMinVChi2Dof)s)"
            " & (BPVDIRA > %(BuMgdMinDira)s)") % locals()["config"]

        _extraInfoList = [{
            "Type": "ConeVariables",
            "ConeAngle": 1.0,
            "ConeNumber": 3,
            "Variables": ['angle', 'mult', 'ptasy']
        }, {
            "Type": "VertexIsolation"
        }]

        ### shared particles -------------------------------------------------------------------------------
        _trackFilter = FilterDesktop(Code=_trackCuts)
        _tracks = Selection("tracks" + self.name,
                            Algorithm=_trackFilter,
                            RequiredSelections=[StdLoosePions])

        _rho0 = CombineParticles(DecayDescriptor="rho(770)0 -> pi+ pi-",
                                 CombinationCut=_rho0CombCuts,
                                 MotherCut=_rho0MotherCuts)
        _selRho0 = Selection("selRho0",
                             Algorithm=_rho0,
                             RequiredSelections=[_tracks])

        ### resolved line ----------------------------------------------------------------------------------
        _selRhoPResolved = makeRhoP("RhoPResolved",
                                    DauCuts=_rhoPResDaughtersCuts,
                                    combCuts=_rhoCombMassWindow,
                                    mothCuts=_rhoPResMotherCuts,
                                    inputSel=[_tracks, StdLooseResolvedPi0])

        _selBuResolved = makeBu2rho0rhoPlus(
            modeName + "Resolved",
            combCuts=_BuResCombCuts,
            mothCuts=_BuResMotherCuts,
            inputSel=[_selRho0, _selRhoPResolved])

        if config["isMC"]:
            self.stripCandResolved = _selBuResolved
        else:
            # self.stripCandResolved = makeTisTosSelection( _selBuResolved, _TisTosTaggerSpecs )
            self.stripCandResolved = _selBuResolved

        self.Bu2rho0rhoPlusResolvedLine = StrippingLine(
            modeName + "ResolvedLine",
            prescale=config["PrescaleBu2rho0rhoPlusResolved"],
            HLT=_hltFilter,
            FILTER=_resVoidFilter,
            checkPV=True,
            ExtraInfoTools=_extraInfoList,
            selection=self.stripCandResolved)

        self.registerLine(self.Bu2rho0rhoPlusResolvedLine)

        ### merged line ------------------------------------------------------------------------------------
        _selRhoPMerged = makeRhoP("RhoPMerged",
                                  DauCuts=_rhoPMgdDaughtersCuts,
                                  combCuts=_rhoCombMassWindow,
                                  mothCuts=_rhoPMgdMotherCuts,
                                  inputSel=[_tracks, StdLooseMergedPi0])

        _selBuMerged = makeBu2rho0rhoPlus(modeName + "Merged",
                                          combCuts=_BuMgdCombCuts,
                                          mothCuts=_BuMgdMotherCuts,
                                          inputSel=[_selRho0, _selRhoPMerged])

        if config["isMC"]:
            self.stripCandMerged = _selBuMerged
        else:
            # self.stripCandMerged = makeTisTosSelection( _selBuMerged, _TisTosTaggerSpecs )
            self.stripCandMerged = _selBuMerged

        self.Bu2rho0rhoPlusMergedLine = StrippingLine(
            modeName + "MergedLine",
            prescale=config["PrescaleBu2rho0rhoPlusMerged"],
            HLT=_hltFilter,
            FILTER=_mgdVoidFilter,
            checkPV=True,
            ExtraInfoTools=_extraInfoList,
            selection=self.stripCandMerged)

        self.registerLine(self.Bu2rho0rhoPlusMergedLine)
示例#2
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        self.name = name
        self.config = config

        # Define input daughter lists for various B -> J/psi X selections:

        self.WideJpsiList = DataOnDemand(
            Location="Phys/StdMassConstrainedJpsi2MuMu/Particles")

        self.JpsiList = self.createSubSel(
            OutputList='NarrowJpsiForBetaS' + self.name,
            InputList=self.WideJpsiList,
            Cuts="(PFUNA(ADAMASS('J/psi(1S)')) < %(JpsiMassWindow)s * MeV)" %
            self.config)

        self.KaonList = self.createSubSel(
            OutputList="KaonsForBetaS" + self.name,
            InputList=DataOnDemand(Location="Phys/StdLooseKaons/Particles"),
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s ) & (PIDK >-2)" % self.config)

        self.NoIPKaonList = self.createSubSel(
            OutputList="NoIPKaonsForBetaS" + self.name,
            InputList=DataOnDemand(Location="Phys/StdAllLooseKaons/Particles"),
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s ) & (PIDK > 0)" % self.config)

        self.NoPIDPionList = self.createSubSel(
            OutputList="NoPIDPionsForBetaS" + self.name,
            InputList=DataOnDemand(Location="Phys/StdNoPIDsPions/Particles"),
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s )" % self.config)

        self.ProtonList = self.createSubSel(
            OutputList="ProtonsForBetaS" + self.name,
            InputList=DataOnDemand(Location="Phys/StdLooseProtons/Particles"),
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s )" % self.config)

        self.PhiList = self.createSubSel( OutputList = "Phi2KKForBetaS" + self.name,
                                          InputList = DataOnDemand(Location = "Phys/StdLoosePhi2KK/Particles"),
                                          Cuts = "(in_range(980,M,1050))" \
                                          "& (PT > 500.*MeV) " \
                                          "& (VFASPF(VCHI2) < 25)" \
                                          "& (MAXTREE('K+'==ABSID, TRCHI2DOF) < %(TRCHI2DOF)s )" \
                                          "& (MINTREE('K+'==ABSID, PIDK) > 0)" % self.config)

        self.KstarList = self.createSubSel( OutputList = "Kstar2KpiForBetaS" + self.name,
                                            InputList = DataOnDemand(Location = "Phys/StdLooseKstar2Kpi/Particles"),
                                            Cuts = "(in_range(826,M,966))" \
                                            "& (PT > 1300.*MeV) " \
                                            "& (VFASPF(VCHI2) < 25)" \
                                            "& (MAXTREE('K+'==ABSID,  TRCHI2DOF) < %(TRCHI2DOF)s )" \
                                            "& (MAXTREE('pi-'==ABSID, TRCHI2DOF) < %(TRCHI2DOF)s )" \
                                            "& (MINTREE('K+'==ABSID, PIDK) > 0)" % self.config)

        self.KsListLoose = MergedSelection(
            "StdLooseKsMergedForBetaS" + self.name,
            RequiredSelections=[
                DataOnDemand(Location="Phys/StdLooseKsDD/Particles"),
                DataOnDemand(Location="Phys/StdLooseKsLL/Particles")
            ])

        self.KsList = self.createSubSel(OutputList="KsForBetaS" + self.name,
                                        InputList=self.KsListLoose,
                                        Cuts="(VFASPF(VCHI2)<20) & (BPVDLS>5)")

        self.KsLDList = self.createSubSel(
            OutputList="KsLDForBetaS" + self.name,
            InputList=DataOnDemand(Location="Phys/StdLooseKsLD/Particles"),
            Cuts="(VFASPF(VCHI2)<20) & (BPVDLS>5)")

        self.DetachedKstarWideList = self.createCombinationsSel(
            OutputList="DetachedKstarWideListForBetaS" + self.name,
            DaughterLists=[StdLooseKaons, StdLoosePions],
            DecayDescriptors=[
                "[K*(892)0 -> K+ pi-]cc", "[K*_0(1430)0 -> K+ pi-]cc"
            ],
            DaughterCuts={
                "pi-": " (PT > 500 *MeV) & (PIDK < 0) & (TRGHOSTPROB < 0.8)",
                "K+": " (PT > 500 *MeV) & (PIDK > 0) & (TRGHOSTPROB < 0.8)"
            },
            PreVertexCuts="(in_range(750,AM,1900))  & (ADOCACHI2CUT(30, ''))",
            PostVertexCuts="(VFASPF(VCHI2) < 25)",
            ReFitPVs=False)

        self.LambdaListLoose = MergedSelection(
            "StdLooseLambdaMergedForBetaS" + self.name,
            RequiredSelections=[
                DataOnDemand(Location="Phys/StdLooseLambdaDD/Particles"),
                DataOnDemand(Location="Phys/StdLooseLambdaLL/Particles")
            ])
        self.LambdaList = self.createSubSel(
            OutputList="LambdaForBetaS" + self.name,
            InputList=self.LambdaListLoose,
            Cuts=
            "(MAXTREE('p+'==ABSID, PT) > 500.*MeV) & (MAXTREE('pi-'==ABSID, PT) > 100.*MeV) & (ADMASS('Lambda0') < 15.*MeV) & (VFASPF(VCHI2) < 20)"
        )

        self.Pi0ListLoose = MergedSelection(
            "StdLooseCocktailPi0ForBetaS" + self.name,
            RequiredSelections=[
                DataOnDemand(Location="Phys/StdLooseResolvedPi0/Particles"),
                DataOnDemand(Location="Phys/StdLooseMergedPi0/Particles")
            ])

        self.Pi0List = self.createSubSel(OutputList="Pi0ForBetaS" + self.name,
                                         InputList=self.Pi0ListLoose,
                                         Cuts="(PT > 1500.*MeV)")

        self.makeInclJpsi()
        self.makeBd2JpsiKsLD()
        self.makeBu2JpsiK()
        self.makeBs2JpsiPhi()
        self.makeBs2JpsiKstarWide()
        self.makeBd2JpsiKstar()
        self.makeBd2JpsiKs()
        self.makeLambdab2Jpsippi()
        self.makeLambdab2JpsiLambda()
        self.makeBd2JpsiPi0()
示例#3
0
    def __init__(self, name=default_name, config=None, debug_cuts=0):

        LineBuilder.__init__(self, name, config)

        prompt_name = name + 'Prompt'
        simple_name = name + 'Simple'
        detached_name = name + 'Detached'
        loose_name = name + 'Loose'

        self.config_dict = config
        self.debug_cuts = debug_cuts
        self.selPrompt = self.makeDefault(prompt_name, type=0)
        self.selSimple = self.makeDefault(simple_name, type=1)
        self.selDetached = self.makeDefault(detached_name, type=2)
        self.selLoose = self.makeDefault(loose_name, type=3)

        ExtraInfoTools = [{
            'Type':
            'ConeVariables',
            'ConeNumber':
            1,
            'ConeAngle':
            1.0,
            'Variables': ['angle', 'mult', 'p', 'pt', 'ptasy', 'pasy']
        }, {
            'Type':
            'ConeVariables',
            'ConeNumber':
            2,
            'ConeAngle':
            1.5,
            'Variables': ['angle', 'mult', 'p', 'pt', 'ptasy', 'pasy']
        }, {
            'Type':
            'ConeVariables',
            'ConeNumber':
            3,
            'ConeAngle':
            2.0,
            'Variables': ['angle', 'mult', 'p', 'pt', 'ptasy', 'pasy']
        }, {
            'Type': 'VertexIsolation'
        }]

        ExtraInfoDaughters = {
            "prompt": [getattr(self, "A1" + prompt_name)],
            "simple": [getattr(self, "A1" + simple_name)],
            "detached": [getattr(self, "A1" + detached_name)],
            "loose": [getattr(self, "A1" + loose_name)]
        }

        self.promptLine = StrippingLine(
            prompt_name + "Line",
            prescale=config['PromptLinePrescale'],
            postscale=config['DefaultPostscale'],
            #                                        algos = [ self.selPrompt ],
            selection=self.selPrompt,
            ExtraInfoTools=ExtraInfoTools,
            ExtraInfoSelections=ExtraInfoDaughters["prompt"],
            MDSTFlag=True,
            RequiredRawEvents=["Muon"])

        self.simpleLine = StrippingLine(
            simple_name + "Line",
            prescale=config['SimpleLinePrescale'],
            postscale=config['DefaultPostscale'],
            #                                        algos = [ self.selSimple ],
            selection=self.selSimple,
            ExtraInfoTools=ExtraInfoTools,
            ExtraInfoSelections=ExtraInfoDaughters["simple"],
            MDSTFlag=True,
            RequiredRawEvents=["Muon"])

        self.detachedLine = StrippingLine(
            detached_name + "Line",
            prescale=config['DetachedLinePrescale'],
            postscale=config['DefaultPostscale'],
            #                                          algos = [ self.selDetached ],
            selection=self.selDetached,
            ExtraInfoTools=ExtraInfoTools,
            ExtraInfoSelections=ExtraInfoDaughters["detached"],
            MDSTFlag=True,
            RequiredRawEvents=["Muon"])

        ## no need for mdst or raw data in the loose line...
        self.looseLine = StrippingLine(
            loose_name + "Line",
            prescale=config['LooseLinePrescale'],
            postscale=config['DefaultPostscale'],
            #                                       algos = [ self.selLoose ],
            selection=self.selLoose,
            ExtraInfoTools=ExtraInfoTools,
            ExtraInfoSelections=ExtraInfoDaughters["loose"],
        )

        self.registerLine(self.promptLine)
        self.registerLine(self.simpleLine)
        self.registerLine(self.detachedLine)
示例#4
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)

        selpifromSigmacmm = makepifromSigmacmm(
            name=name,
            MINP=config['piSigmaMINP'],
            MINPT=config['piSigmaMINPT'],
            MAXP=config['piSigmaMAXP'],
            MAXPT=config['piSigmaMAXPT'],
            MINIPCHI2=config['piSigmaMINIPCHI2'],
            trackChi2DOF=config['TrackChi2DOF'])

        selThreePart = makeThreePart(
            name=name,
            pMINP=config['protonMINP'],
            pMINPT=config['protonMINPT'],
            pMINIPCHI2=config['protonMINIPCHI2'],
            pMINPIDp=config['protonMINPIDp'],
            pMINPIDp_K=config['protonMINPIDp_K'],
            piMINP=config['pionMINP'],
            piMINPT=config['pionMINPT'],
            piMINIPCHI2=config['pionMINIPCHI2'],
            trackChi2DOF=config['TrackChi2DOF'],
            applyPionPIDK=config['ApplyPionPIDK'],
            pionPIDK=config['PionPIDK'],
            applyGhostProbCut=config['ApplyGhostProbCut'],
            ghostProbCut=config['GhostProbCut'],
            threepartMassLow=config['threepartMassLow'],
            threepartMassHigh=config['threepartMassHigh'],
            threepartMAXDOCA=config['threepartMAXDOCA'],
            threepartVtxChi2DOF=config['threepartVtxChi2DOF'],
            threepartFDChi2=config['threepartFDChi2'],
            threepartPT=config['threepartPT'],
            threepartMinIPChi2=config['threepartMinIPChi2'])

        selThreePartWS_SC = makeThreePartWS_SC(
            name=name,
            pMINP=config['protonMINP'],
            pMINPT=config['protonMINPT'],
            pMINIPCHI2=config['protonMINIPCHI2'],
            pMINPIDp=config['protonMINPIDp'],
            pMINPIDp_K=config['protonMINPIDp_K'],
            piMINP=config['pionMINP'],
            piMINPT=config['pionMINPT'],
            piMINIPCHI2=config['pionMINIPCHI2'],
            trackChi2DOF=config['TrackChi2DOF'],
            applyPionPIDK=config['ApplyPionPIDK'],
            pionPIDK=config['PionPIDK'],
            applyGhostProbCut=config['ApplyGhostProbCut'],
            ghostProbCut=config['GhostProbCut'],
            threepartMassLow=config['threepartMassLow'],
            threepartMassHigh=config['threepartMassHigh'],
            threepartMAXDOCA=config['threepartMAXDOCA'],
            threepartVtxChi2DOF=config['threepartVtxChi2DOF'],
            threepartFDChi2=config['threepartFDChi2'],
            threepartPT=config['threepartPT'],
            threepartMinIPChi2=config['threepartMinIPChi2'])

        selFourPart = makeFourPart(
            name=name,
            selectionthree=selThreePart,
            selectionpiSigma=selpifromSigmacmm,
            fourpartMassLow=config["fourpartMassLow"],
            fourpartMassHigh=config["fourpartMassHigh"],
            fourpartMAXDOCA=config["fourpartMAXDOCA"],
            fourpartVtxChi2DOF=config["fourpartVtxChi2DOF"],
            fourpartFDChi2=config["fourpartFDChi2"],
            fourpartPT=config['fourpartPT'],
            fourpartMinIPChi2=config['fourpartMinIPChi2'],
            ApplyDeltaMCut=config['ApplyDeltaMCut'],
            DelmUpper=config['DelmUpper'],
            DelmLower=config['DelmLower'],
            UseTOS=config['UseTOS'],
            Hlt2TOS=config['Hlt2TOS'])

        selFourPartWS = makeFourPartWS(
            name=name,
            selectionthree=selThreePart,
            selectionpiSigma=selpifromSigmacmm,
            fourpartMassLow=config["fourpartMassLow"],
            fourpartMassHigh=config["fourpartMassHigh"],
            fourpartMAXDOCA=config["fourpartMAXDOCA"],
            fourpartVtxChi2DOF=config["fourpartVtxChi2DOF"],
            fourpartFDChi2=config["fourpartFDChi2"],
            fourpartPT=config['fourpartPT'],
            fourpartMinIPChi2=config['fourpartMinIPChi2'],
            ApplyDeltaMCut=config['ApplyDeltaMCut'],
            DelmUpper=config['DelmUpper'],
            DelmLower=config['DelmLower'],
            UseTOS=config['UseTOS'],
            Hlt2TOS=config['Hlt2TOS'])

        selFourPartWS_SC = makeFourPartWS_SC(
            name=name,
            selectionthree=selThreePartWS_SC,
            selectionpiSigma=selpifromSigmacmm,
            fourpartMassLow=config["fourpartMassLow"],
            fourpartMassHigh=config["fourpartMassHigh"],
            fourpartMAXDOCA=config["fourpartMAXDOCA"],
            fourpartVtxChi2DOF=config["fourpartVtxChi2DOF"],
            fourpartFDChi2=config["fourpartFDChi2"],
            fourpartPT=config['fourpartPT'],
            fourpartMinIPChi2=config['fourpartMinIPChi2'],
            ApplyDeltaMCut=config['ApplyDeltaMCut'],
            DelmUpper=config['DelmUpper'],
            DelmLower=config['DelmLower'],
            UseTOS=config['UseTOS'],
            Hlt2TOS=config['Hlt2TOS'])

        selSigmacmm2Lcpi = makeSigmacmm2Lcpi(
            name=name,
            selection=selpifromSigmacmm,
            LcMassWind=config['LcMassWind'],
            LcFDChi2=config['LcFDChi2'],
            LcVtxChi2DOF=config['LcVtxChi2DOF'],
            SigmaMAXDOCA=config['SigmaMAXDOCA'],
            SigmaFDChi2=config['SigmaFDChi2'],
            SigmaVtxChi2DOF=config['SigmaVtxChi2DOF'],
            SigmaLcDeltaMlow=config['SigmaLcDeltaMlow'],
            SigmaLcDeltaMhigh=config['SigmaLcDeltaMhigh'],
            SigmaPT=config['SigmaPT'])

        selB2ppipiSigmacmm = makeB2ppipiSigmacmm(
            name=name,
            selectionthree=selThreePart,
            selectionSigma=selSigmacmm2Lcpi,
            BMassWind=config['BMassWind'],
            BMAXDOCA=config['BMAXDOCA'],
            BVtxChi2DOF=config['BVtxChi2DOF'],
            BFDChi2=config['BFDChi2'],
            BDIRA=config['BDIRA'])

        selB2ppipiSigmacmm_FourPart = makeB2ppipiSigmacmm_FourPart(
            name=name,
            selectionfour=selFourPart,
            BMassWind=config['BMassWind'],
            BMAXDOCA=config['BMAXDOCA'],
            BVtxChi2DOF=config['BVtxChi2DOF'],
            BFDChi2=config['BFDChi2'],
            BDIRA=config['BDIRA'],
            LcMassWind=config['LcMassWind'],
            LcVtxChi2DOF=config['LcVtxChi2DOF'],
            LcFDChi2=config['LcFDChi2'])

        selB2ppipiSigmacmm_FourPart_WS = makeB2ppipiSigmacmm_FourPart_WS(
            name=name,
            selectionfour=selFourPartWS,
            BMassWind=config['BMassWind'],
            BMAXDOCA=config['BMAXDOCA'],
            BVtxChi2DOF=config['BVtxChi2DOF'],
            BFDChi2=config['BFDChi2'],
            BDIRA=config['BDIRA'],
            LcMassWind=config['LcMassWind'],
            LcVtxChi2DOF=config['LcVtxChi2DOF'],
            LcFDChi2=config['LcFDChi2'])

        selB2ppipiSigmacmm_FourPart_WS_SC = makeB2ppipiSigmacmm_FourPart_WS_SC(
            name=name,
            selectionfour=selFourPartWS_SC,
            BMassWind=config['BMassWind'],
            BMAXDOCA=config['BMAXDOCA'],
            BVtxChi2DOF=config['BVtxChi2DOF'],
            BFDChi2=config['BFDChi2'],
            BDIRA=config['BDIRA'],
            LcMassWind=config['LcMassWind'],
            LcVtxChi2DOF=config['LcVtxChi2DOF'],
            LcFDChi2=config['LcFDChi2'])

        _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

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

        self.line_fourpart = StrippingLine(
            name + "_PartReco_Line",
            prescale=config['Prescalefourpart'],
            postscale=config['Postscalefourpart'],
            selection=selFourPart,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_fourpart)

        self.line_fourpartWS = StrippingLine(
            name + "_PartRecoWS_Line",
            prescale=config['Prescalefourpart'],
            postscale=config['Postscalefourpart'],
            selection=selFourPartWS,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_fourpartWS)

        self.line_fourpartWS_SC = StrippingLine(
            name + "_PartRecoWS_SC_Line",
            prescale=config['Prescalefourpart'],
            postscale=config['Postscalefourpart'],
            selection=selFourPartWS_SC,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_fourpartWS_SC)

        self.line_B2ppipiSigmacmm = StrippingLine(
            name + "_Closed_Line",
            prescale=config['PrescaleCompleteNorm'],
            postscale=config['PostscaleCompleteNorm'],
            selection=selB2ppipiSigmacmm,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_B2ppipiSigmacmm)

        self.line_B2ppipiSigmacmm_FourPart = StrippingLine(
            name + "_Closed_Line_FourPart",
            prescale=config['PrescaleComplete'],
            postscale=config['PostscaleComplete'],
            selection=selB2ppipiSigmacmm_FourPart,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_B2ppipiSigmacmm_FourPart)

        self.line_B2ppipiSigmacmm_FourPart_WS = StrippingLine(
            name + "_Closed_Line_FourPart_WS",
            prescale=config['PrescaleComplete'],
            postscale=config['PostscaleComplete'],
            selection=selB2ppipiSigmacmm_FourPart_WS,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_B2ppipiSigmacmm_FourPart_WS)

        self.line_B2ppipiSigmacmm_FourPart_WS_SC = StrippingLine(
            name + "_Closed_Line_FourPart_WS_SC",
            prescale=config['PrescaleComplete'],
            postscale=config['PostscaleComplete'],
            selection=selB2ppipiSigmacmm_FourPart_WS_SC,
            checkPV=config['CheckPV'],
            FILTER=_GECfilter)
        self.registerLine(self.line_B2ppipiSigmacmm_FourPart_WS_SC)
示例#5
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)
        
        #Tau: Cuts for single pions
        self.PionCut = "(PT > %(SinglePiPT)s*MeV) & (MIPCHI2DV(PRIMARY)> %(SinglePiIPChi2)s ) & (TRCHI2DOF < 5.0) & (PIDK < 8.0)" %config

        #Tau: Cuts for di pions
        self.DiPionCut = "(PT>%(DiPiPT)s*MeV) & in_range(%(DiPiLowM)s,M,%(DiPiHighM)s) & "\
                          "(VFASPF(VCHI2/VDOF)<%(DiPiVxChi2)s) & (BPVDIRA > %(DiPiDira)s) & "\
                          "(MIPCHI2DV(PRIMARY)> %(DiPiIPChi2)s)" %config

        self.DiPionCombCut = "(AMAXCHILD('pi-'==ABSID,BPVIPCHI2())> %(DiPiMaxIPChi2)s)" %config
      
        #Tau: Cuts for tri pions
        self.TriPionCut = "(PT>%(TriPiPT)s*MeV) & in_range(%(TriPiLowM)s,M,%(TriPiHighM)s) & "\
                           "(VFASPF(VCHI2/VDOF)<%(TriPiVxChi2)s) & (BPVDIRA > %(TriPiDira)s) & "\
                           "(MIPCHI2DV(PRIMARY)> %(TriPiIPChi2)s)" %config


        # StdLoose D* has the following decay chain:  D*+ -> pi ( D0 -> K pi )

        # Cuts for D0        
        self.KCut  = "& CHILDCUT(CHILDCUT( (PT > %(KPT)s*MeV) & (ISLONG) & "\
                     " (TRCHI2DOF < %(KTrChi2)s ) & (MIPDV(PRIMARY) > %(KIP)s) & "\
                     " (MIPCHI2DV(PRIMARY)> %(KIPChi2)s ) & "\
                     " (PIDK >  %(KTrPID)s ),1),2) " % config
        
        self.PiCut = "& CHILDCUT(CHILDCUT( (PT> %(PiPT)s*MeV) & (ISLONG) & "\
                     " (TRCHI2DOF < %(PiTrChi2)s) & (MIPDV(PRIMARY) > %(PiIP)s) & "\
                     " (MIPCHI2DV(PRIMARY)> %(PiIPChi2)s ),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 for Dstar        
        self.slowPiCut= "& CHILDCUT( (PT>110*MeV) & (ISLONG)  & "\
                        " (TRCHI2DOF < %(slowPiTrChi2)s) & "\
                        " (MIPDV(PRIMARY) > 0.04*mm),1) " % config        

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

        self.totalDstarCut = self.DstarCut + self.KCut + self.PiCut + self.D0Cut + self.slowPiCut

        #new B0 Cuts:
        self.B0CombCut="(DAMASS('B0') > %(BdLowDM)s*MeV) & (DAMASS('B0') < %(BdHighDM)s*MeV)" %config
        self.B0Cut = " (VFASPF(VCHI2/VDOF) > %(BdVxChi2)s) & (BPVDIRA > %(BdDira)s) & (D2DVVD(2)-D2DVVD(1)> %(VxOrder)s) &"\
                    " (MINTREE(ABSID=='D0', VFASPF(VZ))-VFASPF(VZ) > %(B0dD0_DeltaZVtx)s*mm) & (BPVVDZ > %(B0dPV_DeltaZVtx)s*mm)" %config

        ### Now make all the selections ###

        self.__FilterDstars__()

        self.__FilterPions__()
        self.__MakeDiPions__()
        self.__MakeTaus__()
        
        self.__MakeB0d__()
        
        from StrippingConf.StrippingLine import StrippingLine
        from PhysSelPython.Wrappers import SelectionSequence
        
        ### Now make a stripping line ###
        B0dLine=StrippingLine(self._name,
                              prescale = config['Prescale'],
                              postscale = config['Postscale'],
                              algos = [ self.B0Sel ]
                              )
        self.registerLine(B0dLine)
        
        ### Collect them all together in a nice way ###
        self.Line=B0dLine
        self.Selections=[self.DstarSel, self.PionSel, self.PiPiSel, self.TauSel, self.B0Sel]
示例#6
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'],
                                               RequiredRawEvents = ["Muon","Calo","Rich"],
                                               HLT1 = config['HLT'],
                                               selection = self.selPhi)
        self.lineF2            = StrippingLine(name + 'F2Line',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['F2prescale'],
                                               postscale = config['postscale'],
                                               RequiredRawEvents = ["Muon","Calo","Rich"],
                                               HLT1 = config['HLT'],
                                               selection = self.selF2)
        self.lineLambdaCplus  =  StrippingLine(name+'LambdaCplusLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['LambdaCprescale'],
                                               postscale = config['postscale'],
                                               RequiredRawEvents = ["Muon","Calo","Rich"],
                                               HLT1 = config['HLT'],
                                               selection = self.selLambdaCplus)
        self.lineLambdaCminus  = StrippingLine(name+'LambdaCminusLine',
                                               FILTER    = _globalEventCuts,
                                               prescale  = config['LambdaCprescale'],
                                               postscale = config['postscale'],
                                               RequiredRawEvents = ["Muon","Calo","Rich"],
                                               HLT1 = config['HLT'],
                                               selection = self.selLambdaCminus)

        self.registerLine(self.linePhi)
        self.registerLine(self.lineF2)
        self.registerLine(self.lineLambdaCplus)
        self.registerLine(self.lineLambdaCminus)
示例#7
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        self.name = name
        self.config = config

        # define input daughter lists for various B -> J/psi X selections
        self.JpsiList = DataOnDemand(
            Location="Phys/StdMassConstrainedJpsi2MuMu/Particles")

        self.KaonList = self.createSubSel(
            OutputList="KaonsForBetaS" + self.name,
            InputList=StdLooseKaons,
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s ) & (PIDK > -2)" % self.config)

        self.NoPIDKaonList = self.createSubSel(
            OutputList="NoPIDKaonsForBetaS" + self.name,
            InputList=StdNoPIDsKaons,
            Cuts="(TRCHI2DOF < %(TRCHI2DOF)s)" % self.config)

        self.PhiList = self.createSubSel( OutputList = "Phi2KKForBetaS" + self.name,
                        InputList = DataOnDemand(Location = "Phys/StdLoosePhi2KK/Particles"),
                        Cuts = "(in_range(980,M,1050))" \
                        "& (PT > 500.*MeV) " \
                        "& (VFASPF(VCHI2) < 16)" \
                        "& (MAXTREE('K+'==ABSID, TRCHI2DOF) < %(TRCHI2DOF)s )" \
                        "& (MINTREE('K+'==ABSID, PIDK) > -2)" % self.config)

        self.KstarList = self.createSubSel( OutputList = "Kstar2KpiForBetaS" + self.name,
          InputList = DataOnDemand(Location = "Phys/StdLooseKstar2Kpi/Particles"),
                               Cuts = "(in_range(826,M,966))" \
                               "& (PT > 500.*MeV) " \
                               "& (VFASPF(VCHI2) < 16)" \
                               "& (MAXTREE('K+'==ABSID,  TRCHI2DOF) < %(TRCHI2DOF)s )" \
                               "& (MAXTREE('pi-'==ABSID, TRCHI2DOF) < %(TRCHI2DOF)s )" \
                               "& (MINTREE('K+'==ABSID, PIDK) > -2)" % self.config)

        self.KsListLoose = MergedSelection(
            "StdLooseKsMergedForBetaS" + self.name,
            RequiredSelections=[
                DataOnDemand(Location="Phys/StdLooseKsDD/Particles"),
                DataOnDemand(Location="Phys/StdLooseKsLL/Particles")
            ])

        self.KsList = self.createSubSel(OutputList="KsForBetaS" + self.name,
                                        InputList=self.KsListLoose,
                                        Cuts="(VFASPF(VCHI2)<20) & (BPVDLS>5)")

        self.DetachedKstarList = self.createSubSel(OutputList = "DetachedKstarListForBetaS" + self.name,
                                                 InputList = DataOnDemand(Location = "Phys/StdVeryLooseDetachedKst2Kpi/Particles"),
                                                 Cuts = "(INTREE( ('K+'==ABSID) &  (TRCHI2DOF < %(TRCHI2DOF)s) & (MIPCHI2DV(PRIMARY)>6) &(PIDK > -2)))" \
                                                 "& (INTREE( ('pi+'==ABSID) & (TRCHI2DOF < %(TRCHI2DOF)s) & (MIPCHI2DV(PRIMARY)>6) ))" \
                                                 "& (ADMASS('K*(892)0') < 300 *MeV)" \
                                                 "& (VFASPF(VCHI2/VDOF) < 16)" \
                                                 "& (SUMTREE(PT, ((ABSID=='pi+') | (ABSID=='K+'))) > 900. * MeV)" % self.config)

        self.f0List = self.createCombinationsSel(
            OutputList="f02PiPiForBetaS" + self.name,
            DaughterLists=[self.KaonList, StdLoosePions],
            DecayDescriptors=[
                "f_0(980) -> pi+ pi-", "f_0(980) -> pi- pi-",
                "f_0(980) -> pi+ pi+", "f_0(980) -> K+ K-",
                "f_0(980) -> K- K-", "f_0(980) -> K+ K+"
            ],
            DaughterCuts={
                "pi+":
                " (MIPCHI2DV(PRIMARY)>6) & (TRCHI2DOF < %(TRCHI2DOF)s)" %
                self.config,
                "K+":
                " (MIPCHI2DV(PRIMARY)>6) & (TRCHI2DOF < %(TRCHI2DOF)s)" %
                self.config
            },
            PreVertexCuts=
            "(ACHILD(PT,1)+ACHILD(PT,2) > 900.*MeV) & (AM < 2700 *MeV) & (ADOCACHI2CUT(20., ''))",
            PostVertexCuts="(VFASPF(VCHI2) < 16)")

        self.LambdaListLoose = MergedSelection(
            "StdLooseLambdaMergedForBetaS" + self.name,
            RequiredSelections=[
                DataOnDemand(Location="Phys/StdLooseLambdaDD/Particles"),
                DataOnDemand(Location="Phys/StdLooseLambdaLL/Particles")
            ])
        self.LambdaList = self.createSubSel(
            OutputList="LambdaForBetaS" + self.name,
            InputList=self.LambdaListLoose,
            Cuts=
            "(MAXTREE('p+'==ABSID, PT) > 500.*MeV) & (MAXTREE('pi-'==ABSID, PT) > 100.*MeV) & (ADMASS('Lambda0') < 15.*MeV) & (VFASPF(VCHI2) < 20)"
        )

        self.EtaList = self.createSubSel( OutputList = "EtaForBetaS" + self.name,
                   InputList = StdLooseResolvedEta,
                   Cuts = "(PT > 1500.*MeV)"\
                   "& (MINTREE('gamma'==ABSID, PT) > 500.*MeV)")

        self.makeInclJpsi()
        self.makeBu2JpsiK()
        self.makeBu2JpsiH()
        self.makeBs2JpsiPhi()
        self.makeBd2JpsiKstar()
        self.makeBd2JpsiKs()
        self.makeBs2Jpsif0()
        self.makeBs2JpsiKstar()
        self.makeLambdab2JpsiLambda()
        self.makeBs2JpsiEta()
示例#8
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        prescaled_name = name + 'Prescaled'

        self.selMuons = makeMuons('MuonsFor' + prescaled_name,
                                  TRACK_Chi2=config['TRACK_Chi2'],
                                  MUON_MinPT=config['MUON_MinPT'],
                                  MUON_PIDmu=config['MUON_PIDmu'])

        self.selMuonsFromB = makeMuonsFromB(
            'MuonsFromBFor' + prescaled_name,
            muonSel=self.selMuons,
            TRACK_MINIPCHI2=config['TRACK_MINIPCHI2'])

        self.selKaonsFromB = makeKaonsFromB(
            'KaonsFromBFor' + prescaled_name,
            TRACK_MINIPCHI2=config['TRACK_MINIPCHI2'],
            TRACK_Chi2=config['TRACK_Chi2'],
            KAON_PIDK=config['KAON_PIDK'],
            KAON_MinPT=config['KAON_MinPT'])

        self.selPions = makePions('PionsFor' + prescaled_name,
                                  TRACK_Chi2=config['TRACK_Chi2'],
                                  PION_PIDmu=config['PION_PIDmu'],
                                  PION_PIDK=config['PION_PIDK'],
                                  PION_MinPT=config['PION_MinPT'])

        self.selPionsFromB = makePionsFromB(
            'PionsFromBFor' + prescaled_name,
            pionSel=self.selPions,
            TRACK_MINIPCHI2=config['TRACK_MINIPCHI2'])

        self.selSlowPions = makeSlowPions('SlowPionsFor' + prescaled_name,
                                          TRACK_Chi2=config['TRACK_Chi2'],
                                          PION_PIDmu=config['PION_PIDmu'])

        self.selKstar = makeKstar('KstarFor' + prescaled_name,
                                  pionFromBSel=self.selPionsFromB,
                                  kaonFromBSel=self.selKaonsFromB,
                                  Kstar_MinPT=config['Kstar_MinPT'],
                                  Kstar_MassMax=config['Kstar_MassMax'],
                                  Kstar_MassMin=config['Kstar_MassMin'])

        self.selRho = makeRho('RhoFor' + prescaled_name,
                              pionFromBSel=self.selPionsFromB,
                              Rho_MinPT=config['Rho_MinPT'],
                              Rho_MassMax=config['Rho_MassMax'],
                              Rho_MassMin=config['Rho_MassMin'])

        self.selDplus2KstarMuNu = makeDplus2KstarMuNu(
            'Dplus2KstarMuNuFor' + prescaled_name,
            muonFromBSel=self.selMuonsFromB,
            KstarSel=self.selKstar,
            PAIR_SumPTMin=config['PAIR_SumPTMin'],
            D_MassMax=config['D_MassMax'],
            D_DIRA=config['D_DIRA'],
            D_DOCA=config['D_DOCA'],
            D_MinP=config['D_MinP'],
            Dplus_FD=config['Dplus_FD'],
            D_MCORR_MIN=config['D_MCORR_MIN'],
            D_MCORR_MAX=config['D_MCORR_MAX'],
            D_BPVVDZ=config['D_BPVVDZ'],
            D_VtxChi2=config['D_VtxChi2'])

        self.selDplus2RhoMuNu = makeDplus2RhoMuNu(
            'Dplus2RhoMuNuFor' + prescaled_name,
            muonFromBSel=self.selMuonsFromB,
            RhoSel=self.selRho,
            PAIR_SumPTMin=config['PAIR_SumPTMin'],
            D_MassMax=config['D_MassMax'],
            D_DIRA=config['D_DIRA'],
            D_DOCA=config['D_DOCA'],
            D_MinP=config['D_MinP'],
            Dplus_FD=config['Dplus_FD'],
            D_MCORR_MIN=config['D_MCORR_MIN'],
            D_MCORR_MAX=config['D_MCORR_MAX'],
            D_BPVVDZ=config['D_BPVVDZ'],
            D_VtxChi2=config['D_VtxChi2'])

        self.selBtoDplusRhoMuNu = makeBtoDplusRhoMuNu(
            'BtoDplusRhoMuNu' + prescaled_name,
            Dplus2RhoMuNuSel=self.selDplus2RhoMuNu,
            PionsFromBSel=self.selPionsFromB,
            BtoD_DeltaMass_MIN=config['BtoD_DeltaMass_MIN'],
            BtoD_DeltaMass_MAX=config['BtoD_DeltaMass_MAX'],
            B_DIRA=config['B_DIRA'],
            B_FDCHI2=config['B_FDCHI2'])

        self.selBtoDplusKstarMuNu = makeBtoDplusKstarMuNu(
            'BtoDplusKstarMuNu' + prescaled_name,
            Dplus2KstarMuNuSel=self.selDplus2KstarMuNu,
            PionsFromBSel=self.selPionsFromB,
            BtoD_DeltaMass_MIN=config['BtoD_DeltaMass_MIN'],
            BtoD_DeltaMass_MAX=config['BtoD_DeltaMass_MAX'],
            B_DIRA=config['B_DIRA'],
            B_FDCHI2=config['B_FDCHI2'])

        self.selD02PiMuNu = makeD02PiMuNu(
            'D0PiMuNuFor' + prescaled_name,
            muonSel=self.selMuons,
            pionSel=self.selPions,
            PAIR_SumPTMin=config['PAIR_SumPTMin'],
            D_MassMax=config['D_MassMax'],
            D_DIRA=config['D_DIRA'],
            D_DOCA=config['D_DOCA'],
            D_MinP=config['D_MinP'],
            D0_FD=config['D0_FD'],
            D_MCORR_MIN=config['D_MCORR_MIN'],
            D_MCORR_MAX=config['D_MCORR_MAX'],
            D_BPVVDZ=config['D_BPVVDZ'],
            D_VtxChi2=config['D_VtxChi2'])

        self.selDstarD02PiMuNu = makeDstarD02PiMuNu(
            'DstarD0PiMuNuFor' + prescaled_name,
            D02PiMuNuSel=self.selD02PiMuNu,
            slowPionSel=self.selSlowPions,
            Dstar_MassMin=config['Dstar_MassMin'],
            Dstar_DOCA=config['Dstar_DOCA'],
            Dstar_VtxChi2=config['Dstar_VtxChi2'],
            Dstar_DeltaMass=config['Dstar_DeltaMass'])

        self.prescaled_lineRhoMuNu = StrippingLine(
            prescaled_name + "RhoMuNuLine",
            prescale=config['PrescaledRhoLinePrescale'],
            HLT=config['HLT_FILTER'],
            selection=self.selBtoDplusRhoMuNu)
        self.prescaled_lineKstarMuNu = StrippingLine(
            prescaled_name + "KstarMuNuLine",
            prescale=config['PrescaledKstarLinePrescale'],
            HLT=config['HLT_FILTER'],
            selection=self.selBtoDplusKstarMuNu)
        self.prescaled_linePiMuNu = StrippingLine(
            prescaled_name + "PiMuNuLine",
            prescale=config['PrescaledPiLinePrescale'],
            HLT=config['HLT_FILTER_PiMuNu'],
            selection=self.selDstarD02PiMuNu)
        self.registerLine(self.prescaled_lineRhoMuNu)
        self.registerLine(self.prescaled_lineKstarMuNu)
        self.registerLine(self.prescaled_linePiMuNu)
示例#9
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        self.name = name
        self.config = config

        #### Input selections:

        # ------------------------------------------------------------ J/Psi:

        self.WideJpsiList = DataOnDemand(
            Location="Phys/StdMassConstrainedJpsi2MuMu/Particles")

        self.DetachedJpsiList = self.createSubSel(
            OutputList='NarrowDetachedJpsiForJpsiHH' + self.name,
            InputList=self.WideJpsiList,
            Cuts=
            "(PFUNA(ADAMASS('J/psi(1S)')) < %(JpsiMassWindow)s * MeV) & (BPVDIRA >0.9) & (BPVVD > 1.5 *mm)"
            % self.config)

        # ------------------------------------------------------------ Kaons:

        self.NoIPKaonList = self.createSubSel(
            OutputList="NoIPKaonsForJpsiHH" + self.name,
            InputList=DataOnDemand(Location="Phys/StdAllLooseKaons/Particles"),
            Cuts=
            "(TRCHI2DOF < %(TRCHI2DOF)s ) & (PIDK > 0) & (PT > 250.*MeV) & (TRGHOSTPROB < 0.8)"
            % self.config)

        self.NoIPPionList = self.createSubSel(
            OutputList="NoIPPionsForJpsiHH" + self.name,
            InputList=DataOnDemand(Location="Phys/StdAllLoosePions/Particles"),
            Cuts=
            "(TRCHI2DOF < %(TRCHI2DOF)s ) & (PT > 250.*MeV) & (TRGHOSTPROB < 0.8)"
            % self.config)

        self.DetachedKstarList = self.createCombinationSel(
            OutputList="DetachedKstarListForJpsiHH" + self.name,
            DaughterLists=[self.NoIPKaonList, self.NoIPPionList],
            DecayDescriptor="[K*(892)0 -> K+ pi-]cc",
            PreVertexCuts=
            "(ACHILD(PT,1)+ACHILD(PT,2) > 900.*MeV) & (ADAMASS('K*(892)0') < 200 *MeV) & (ADOCACHI2CUT(20., ''))",
            PostVertexCuts=
            "(VFASPF(VCHI2) < 16) & (BPVDIRA >0.9) & (BPVVD > 1.5 *mm)",
            ReFitPVs=False)

        self.Detachedf0List = self.createCombinationsSel(
            OutputList="Detachedf02HHForJpsiHH" + self.name,
            DaughterLists=[self.NoIPKaonList, self.NoIPPionList],
            DecayDescriptors=[
                "f_0(980) -> pi+ pi-", "f_0(980) -> pi- pi-",
                "f_0(980) -> pi+ pi+", "f_0(980) -> K+ K-"
            ],
            #                                                  DaughterCuts = { "pi+" : " (MIPCHI2DV(PaRIMARY)>9) " % self.config,
            #                                                                   "K+"  : " (MIPCHI2DV(PRIMARY)>9) " % self.config },
            PreVertexCuts=
            "(ACHILD(PT,1)+ACHILD(PT,2) > 900.*MeV) & (AM < 2700 *MeV) & (ADOCACHI2CUT(20., ''))",
            PostVertexCuts=
            "(VFASPF(VCHI2) < 16) & (BPVDIRA >0.9) & (BPVVD > 1.5 *mm)",
            ReFitPVs=False
        )  # Note that this is false to save CPU time, for the future check with Liming if the kaon list is fine

        #unbiased f0
        self.Unbiasedf0List = self.createCombinationsSel(
            OutputList="Unbiasedf02HHForJpsiHH" + self.name,
            DaughterLists=[self.NoIPKaonList, self.NoIPPionList],
            DecayDescriptors=["f_0(980) -> pi+ pi-", "f_0(980) -> K+ K-"],
            PreVertexCuts=
            "(ACHILD(PT,1)+ACHILD(PT,2) > 900.*MeV) & (AM < 2700 *MeV) & (ADOCACHI2CUT(20., ''))",
            PostVertexCuts="(VFASPF(VCHI2) < 16)",
            ReFitPVs=False
        )  # Note that this is false to save CPU time, for the future check with Liming if the kaon list is fine

        self.makeBs2Jpsif0()
        self.makeBs2JpsiKstar()
示例#10
0
    def __init__(self, name, config):
        self.name = name
        LineBuilder.__init__(self, name, config)
        modeName = "Bu2rho0rhoPlus"
        ### filters :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        mgdVoidFilter = "(CONTAINS('Phys/StdLooseMergedPi0/Particles')>0)"
        resVoidFilter = "(CONTAINS('Phys/StdLooseResolvedPi0/Particles')>0)"

        mgdHltFilter = None
        resHltFilter = None
        mgdUpHltFilter = None
        resUpHltFilter = None
        if not config["isMC"]:
            hlt1Filter = "HLT_PASS_RE('Hlt1Track(AllL0|Photon)Decision')"
            mgdHltFilter   = hlt1Filter + " & "\
                             "HLT_PASS_RE('Hlt2(Topo[23]BodyBBDT|B2HHPi0_Merged|"\
                             "RadiativeTopoPhoton)Decision')"
            resHltFilter   = hlt1Filter + " & "\
                             "HLT_PASS_RE('Hlt2Topo[23]BodyBBDTDecision')"
            mgdUpHltFilter = hlt1Filter + " & "\
                             "HLT_PASS_RE('Hlt2(Topo2BodyBBDT|B2HHPi0_Merged|"\
                             "RadiativeTopoPhoton)Decision')"
            resUpHltFilter = "HLT_PASS('Hlt1TrackAllL0Decision') & "\
                             "HLT_PASS('Hlt2Topo2BodyBBDTDecision')"
        ### :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        longTracksCuts = ""
        upAndLongTracksCuts = ""
        if config["vetoTrISMUON"]:
            longTracksCuts += "(~ISMUON) &"
            upAndLongTracksCuts += "(~ISMUON) &"
        longTracksCuts      += "(MIPCHI2DV(PRIMARY) > %(trMinIPChi2)s)"\
                               " & (PROBNNpi > %(trMinProbNNpi)s)"\
                               " & (TRCHI2DOF < %(trMaxChi2Dof)s)"\
                               " & (TRGHOSTPROB < %(trMaxGhostProb)s)"\
                               % locals()["config"]
        upAndLongTracksCuts += "(MIPCHI2DV(PRIMARY) > %(trUpMinIPChi2)s)"\
                               " & (PROBNNpi > %(trMinProbNNpi)s)"\
                               " & (TRCHI2DOF < %(trMaxChi2Dof)s)"\
                               " & (TRGHOSTPROB < %(trMaxGhostProb)s)"\
                               % locals()["config"]
        ### :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        longTracksFilter = FilterDesktop(Code=longTracksCuts)
        longTracks = Selection("longTracksFor" + self.name,
                               Algorithm=longTracksFilter,
                               RequiredSelections=[StdAllNoPIDsPions])
        upAndLongTracksFilter = FilterDesktop(Code=upAndLongTracksCuts)
        upAndLongTracks = Selection(
            "upAndLongTracksFor" + self.name,
            Algorithm=upAndLongTracksFilter,
            RequiredSelections=[StdAllNoPIDsPions, StdNoPIDsUpPions])
        ### long tracks :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        selBuMgdLong, mgdDaughters = makeBu2rho0rhoPlus(
            modeName + "Merged",
            config["longLines"], [longTracks], [StdLooseMergedPi0],
            merged=True,
            refit=config["refitPVs"])

        self.Bu2rho0rhoPlusMergedLine = StrippingLine(
            modeName + "MergedLine",
            prescale=config["PrescaleBu2rho0rhoPlusMerged"],
            HLT=mgdHltFilter,
            FILTER=mgdVoidFilter,
            checkPV=True,
            RelatedInfoTools=relInfoToolList(selBuMgdLong, mgdDaughters),
            RequiredRawEvents=['Calo'],
            selection=selBuMgdLong)

        self.registerLine(self.Bu2rho0rhoPlusMergedLine)
        ### :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        selBuResLong, resDaughters = makeBu2rho0rhoPlus(
            modeName + "Resolved",
            config["longLines"], [longTracks], [StdLooseResolvedPi0],
            merged=False,
            refit=config["refitPVs"])

        self.Bu2rho0rhoPlusResolvedLine = StrippingLine(
            modeName + "ResolvedLine",
            prescale=config["PrescaleBu2rho0rhoPlusResolved"],
            HLT=resHltFilter,
            FILTER=resVoidFilter,
            checkPV=True,
            RelatedInfoTools=relInfoToolList(selBuResLong, resDaughters),
            RequiredRawEvents=['Calo'],
            selection=selBuResLong)

        self.registerLine(self.Bu2rho0rhoPlusResolvedLine)
        ### upstream ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        selBuMgdUp, mgdUpDaughters = makeBu2rho0rhoPlus(
            modeName + "UpMerged",
            config["upstreamLines"], [upAndLongTracks], [StdLooseMergedPi0],
            merged=True,
            upstream=True,
            refit=config["refitPVs"])

        self.Bu2rho0rhoPlusUpMergedLine = StrippingLine(
            modeName + "UpMergedLine",
            prescale=config["PrescaleBu2rho0rhoPlusUpMerged"],
            HLT=mgdUpHltFilter,
            FILTER=mgdVoidFilter,
            checkPV=True,
            RelatedInfoTools=relInfoToolList(selBuMgdUp, mgdUpDaughters),
            RequiredRawEvents=['Calo'],
            selection=selBuMgdUp)

        self.registerLine(self.Bu2rho0rhoPlusUpMergedLine)
        ### :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        selBuResUp, resUpDaughters = makeBu2rho0rhoPlus(
            modeName + "UpResolved",
            config["upstreamLines"], [upAndLongTracks], [StdLooseResolvedPi0],
            merged=False,
            upstream=True,
            refit=config["refitPVs"])

        self.Bu2rho0rhoPlusUpResolvedLine = StrippingLine(
            modeName + "UpResolvedLine",
            prescale=config["PrescaleBu2rho0rhoPlusUpResolved"],
            HLT=resUpHltFilter,
            FILTER=resVoidFilter,
            checkPV=True,
            RelatedInfoTools=relInfoToolList(selBuResUp, resUpDaughters),
            RequiredRawEvents=['Calo'],
            selection=selBuResUp)

        self.registerLine(self.Bu2rho0rhoPlusUpResolvedLine)
示例#11
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        self._myname = name

        # High pT Topo line
        from Configurables import HighPtTopoTool as HighpTDT
        code = "ACCEPT('HighPtTopoTool/HighPtTopoLine_DT_40000')"
        alg = LoKi__VoidFilter('HighPtTopoLineFilter_40000', Code=code)
        sel = EventSelection('HighPtTopoEventSel_40000', Algorithm=alg)
        dt = HighpTDT('HighPtTopoLine_DT_40000')
        dt.minpT = config['pT']
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine(name + '%(pT)s' % config,
                              prescale=config['HighPtTopo40000_Prescale'],
                              postscale=config['HighPtTopo_Postscale'],
                              selection=sel,
                              HLT=hlt)
        self.registerLine(sline)

        # High pT Topo line
        from Configurables import HighPtTopoTool as HighpTDT
        code = "ACCEPT('HighPtTopoTool/HighPtTopoLine_DT_20000')"
        alg = LoKi__VoidFilter('HighPtTopoLineFilter_20000', Code=code)
        sel = EventSelection('HighPtTopoEventSel_20000', Algorithm=alg)
        dt = HighpTDT('HighPtTopoLine_DT_20000')
        dt.minpT = config['pT20']
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine(name + '%(pT20)s' % config,
                              prescale=config['HighPtTopo20000_Prescale'],
                              postscale=config['HighPtTopo_Postscale'],
                              selection=sel,
                              HLT=hlt)
        self.registerLine(sline)

        # High pT Topo line
        from Configurables import HighPtTopoTool as HighpTDT
        code = "ACCEPT('HighPtTopoTool/HighPtTopoLine_DT_10000')"
        alg = LoKi__VoidFilter('HighPtTopoLineFilter_10000', Code=code)
        sel = EventSelection('HighPtTopoEventSel_10000', Algorithm=alg)
        dt = HighpTDT('HighPtTopoLine_DT_10000')
        dt.minpT = config['pT10']
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine(name + '%(pT10)s' % config,
                              prescale=config['HighPtTopo10000_Prescale'],
                              postscale=config['HighPtTopo_Postscale'],
                              selection=sel,
                              HLT=hlt)
        self.registerLine(sline)

        # High pT Topo line
        from Configurables import HighPtTopoTool as HighpTDT
        code = "ACCEPT('HighPtTopoTool/HighPtTopoLine_DT_1000')"
        alg = LoKi__VoidFilter('HighPtTopoLineFilter_1000', Code=code)
        sel = EventSelection('HighPtTopoEventSel_1000', Algorithm=alg)
        dt = HighpTDT('HighPtTopoLine_DT_1000')
        dt.minpT = config['pT1']
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine(name + '%(pT1)s' % config,
                              prescale=config['HighPtTopo1000_Prescale'],
                              postscale=config['HighPtTopo_Postscale'],
                              selection=sel,
                              HLT=hlt)
        self.registerLine(sline)

        from Configurables import HighPtTopoTool as HighpTDT
        code = "ACCEPT('HighPtTopoTool/HighPtTopoLine_DT_20000_Cone55')"
        alg = LoKi__VoidFilter('HighPtTopoLineFilter_20000_Cone55', Code=code)
        sel = EventSelection('HighPtTopoEventSel_20000_Cone55', Algorithm=alg)
        dt = HighpTDT('HighPtTopoLine_DT_20000_Cone55')
        dt.minconepT = config['pTcone']
        dt.conesize = config['conesize']
        dt.minpT = config['pT20']
        hlt = "HLT_PASS_RE('Hlt2Topo.*Decision')"
        sline = StrippingLine(
            name + '%(pT20)s_Cone55' % config,
            prescale=config['HighPtTopo20000_Cone55_Prescale'],
            postscale=config['HighPtTopo_Postscale'],
            selection=sel,
            HLT=hlt)
        self.registerLine(sline)
    def __init__(self, name='LFV', config=None):

        LineBuilder.__init__(self, name, config)

        tau_name = name + 'Tau2PhiMu'
        mme_name = name + 'Tau2eMuMu'
        emu_name = name + 'B2eMu'
        ee_name = name + 'B2ee'
        hemu_name = name + 'B2heMu'
        pmu_name = name + 'B2pMu'
        bu_name = name + 'Bu2KJPsiee'

        self.selTau2PhiMu = makeTau2PhiMu(tau_name)
        self.selTau2eMuMu = makeTau2eMuMu(mme_name)
        self.selB2eMu = makeB2eMu(emu_name)
        self.selB2ee = makeB2ee(ee_name)
        self.selB2heMu = makeB2heMu(hemu_name)
        self.selB2pMu = makeB2pMu(pmu_name)
        self.selBu = makeBu(bu_name)

        self.tau2PhiMuLine = StrippingLine(tau_name + "Line",
                                           prescale=config['TauPrescale'],
                                           postscale=config['Postscale'],
                                           algos=[self.selTau2PhiMu])

        self.tau2eMuMuLine = StrippingLine(
            mme_name + "Line",
            prescale=config['Tau2MuMuePrescale'],
            postscale=config['Postscale'],
            algos=[self.selTau2eMuMu])

        self.b2eMuLine = StrippingLine(emu_name + "Line",
                                       prescale=config['B2eMuPrescale'],
                                       postscale=config['Postscale'],
                                       algos=[self.selB2eMu])

        self.b2eeLine = StrippingLine(ee_name + "Line",
                                      prescale=config['B2eePrescale'],
                                      postscale=config['Postscale'],
                                      algos=[self.selB2ee])

        self.b2heMuLine = StrippingLine(hemu_name + "Line",
                                        prescale=config['B2heMuPrescale'],
                                        postscale=config['Postscale'],
                                        algos=[self.selB2heMu])

        self.b2pMuLine = StrippingLine(pmu_name + "Line",
                                       prescale=config['B2pMuPrescale'],
                                       postscale=config['Postscale'],
                                       algos=[self.selB2pMu])

        self.buLine = StrippingLine(bu_name + "Line",
                                    prescale=config['Bu2KJPsieePrescale'],
                                    postscale=config['Postscale'],
                                    algos=[self.selBu])

        self.registerLine(self.tau2PhiMuLine)
        self.registerLine(self.tau2eMuMuLine)
        self.registerLine(self.b2eMuLine)
        self.registerLine(self.b2eeLine)
        self.registerLine(self.b2heMuLine)
        self.registerLine(self.b2pMuLine)
        self.registerLine(self.buLine)
示例#13
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 = "(recSummary (LHCb.RecSummary.nLongTracks, 'Rec/Track/Long') < %(LongTrackGEC)s )" % config

        # Pick up standard kaons, pions
        # Filter them for use as daughter particles:
        self.dauPi = filterPions(name + 'FilteredPions')
        self.dauK = filterKaons(name + 'FilteredKaons')
        self.dauP = filterProtons(name + 'FilteredProtons')

        # Pick up standard Lambdac -> p K- pi+ then filter it to reduce rate:
        self.filterLc = makeLc(name + 'FilterLc')
        self.filterLcForControl = filterLcForControl(
            name + 'FilterLcForControl', self.filterLc)

        # Pick up standard D+ -> K- pi+ pi+ then filter it to reduce rate:
        self.dplus = filterDplus(name + 'FilteredDplus2KPiPi')

        # Pick up standard D_s+ -> K- K+ pi+ then filter it to reduce rate:
        self.dsplus = filterDsplus(name + 'FilteredDsplus2KKPi')

        # Pick up standard D0 -> K- pi+ then filter it to reduce rate:
        self.dzero = filterD0(name + 'FilteredD02KPi')

        ## Some generic cuts for Xicc.
        ## Vertex chi2 cut depends on number of daughters:
        ##      (2 dau => 1 NDF; 3 dau => 3 NDF; 4 dau => 5 NDF)
        _strCutComb  = "(AM<%(Xicc_AM_Max)s)" \
                       "& (APT>%(Xicc_APT_Min)s)" \
                       "& (ADOCAMAX('')<%(Xicc_ADOCAMAX_Max)s)" % _my_immutable_config
        _strCutMoth  = "(CHILD(VFASPF(VZ),1) - VFASPF(VZ) > %(Xicc_Lc_delta_VZ_Min)s)" \
                       "& (BPVVDCHI2 > %(Xicc_BPVVDCHI2_Min)s)" \
                       "& (BPVDIRA > %(Xicc_BPVDIRA_Min)s)" % _my_immutable_config

        _strChi2Moth2 = "(VFASPF(VCHI2)<%(Xicc_2Dau_VCHI2_Max)s)" % _my_immutable_config
        _strChi2Moth3 = "(VFASPF(VCHI2)<%(Xicc_3Dau_VCHI2_Max)s)" % _my_immutable_config
        _strChi2Moth4 = "(VFASPF(VCHI2)<%(Xicc_4Dau_VCHI2_Max)s)" % _my_immutable_config

        _strCutMoth2 = _strChi2Moth2 + '&' + _strCutMoth
        _strCutMoth3 = _strChi2Moth3 + '&' + _strCutMoth
        _strCutMoth4 = _strChi2Moth4 + '&' + _strCutMoth

        # Combine Lambda with pion to make Xi-
        self.stdLambdaLL = DataOnDemand(
            Location='Phys/StdLooseLambdaLL/Particles')
        self.stdLambdaDD = DataOnDemand(
            Location='Phys/StdLooseLambdaDD/Particles')
        self.combineXiLL = makeXi(
            name + 'CombineXiLL', self.stdLambdaLL,
            _my_immutable_config['Xi_LL_ADAMASS_HalfWin'],
            _my_immutable_config['Xi_LL_ADMASS_HalfWin'])
        self.combineXiDD = makeXi(
            name + 'CombineXiDD', self.stdLambdaDD,
            _my_immutable_config['Xi_DD_ADAMASS_HalfWin'],
            _my_immutable_config['Xi_DD_ADMASS_HalfWin'])

        # Combine Xi- with pion(s) to make Xic0, Xic+
        self.combineXicZero = makeXicZero(
            name + "CombineXicZero",
            [self.combineXiLL, self.combineXiDD, self.dauPi])
        self.combineXicPlus = makeXicPlus(
            name + "CombineXicPlus",
            [self.combineXiLL, self.combineXiDD, self.dauPi])

        # Combine Lc+ with a K and a pi to make a Xicc+ or Xicc++:
        self.combineXicc1 = makeXicc(name + 'CombineXicc1',
                                     [self.filterLc, self.dauPi, self.dauK],
                                     '[Xi_cc+ -> Lambda_c+ K- pi+]cc',
                                     _strCutComb, _strCutMoth3)
        self.combineXicc2 = makeXicc(name + 'CombineXicc2',
                                     [self.filterLc, self.dauPi, self.dauK],
                                     '[Xi_cc++ -> Lambda_c+ K- pi+ pi+]cc',
                                     _strCutComb, _strCutMoth4)

        # Combine D+ with a K and a p to make a Xicc+ or Xicc++:
        self.combineXicc1a = makeXicc(name + 'CombineXicc1a',
                                      [self.dplus, self.dauP, self.dauK],
                                      '[Xi_cc+ -> D+ p+ K-]cc', _strCutComb,
                                      _strCutMoth3)
        self.combineXicc2a = makeXicc(
            name + 'CombineXicc2a',
            [self.dplus, self.dauP, self.dauK, self.dauPi],
            '[Xi_cc++ -> D+ p+ K- pi+]cc', _strCutComb, _strCutMoth4)

        # Combine Ds+ with a pi and a p to make a Xicc+ or Xicc++:
        self.combineXicc1b = makeXicc(name + 'CombineXicc1b',
                                      [self.dsplus, self.dauP, self.dauPi],
                                      '[Xi_cc+ -> D_s+ p+ pi-]cc', _strCutComb,
                                      _strCutMoth3)
        self.combineXicc2b = makeXicc(name + 'CombineXicc2b',
                                      [self.dsplus, self.dauP, self.dauPi],
                                      '[Xi_cc++ -> D_s+ p+]cc', _strCutComb,
                                      _strCutMoth4)

        # Combine D0 with a K, a p and a pi to make a Xicc+ or Xicc++:
        self.combineXicc7 = makeXicc(
            name + 'CombineXicc7',
            [self.dzero, self.dauP, self.dauK, self.dauPi],
            '[Xi_cc+ -> D0 p+ K- pi+]cc', _strCutComb, _strCutMoth4)
        self.combineXicc8 = makeXicc(
            name + 'CombineXicc8',
            [self.dzero, self.dauP, self.dauK, self.dauPi],
            '[Xi_cc++ -> D0 p+ K- pi+ pi+]cc', _strCutComb, _strCutMoth4)

        # Combine Xic0/+ with pion(s) to make Xicc+, Xicc++
        self.combineXicc3 = makeXicc(name + 'CombineXicc3',
                                     [self.combineXicZero, self.dauPi],
                                     '[Xi_cc+ -> Xi_c0 pi+]cc', _strCutComb,
                                     _strCutMoth2)
        self.combineXicc4 = makeXicc(name + 'CombineXicc4',
                                     [self.combineXicZero, self.dauPi],
                                     '[Xi_cc++ -> Xi_c0 pi+ pi+]cc',
                                     _strCutComb, _strCutMoth3)
        self.combineXicc5 = makeXicc(name + 'CombineXicc5',
                                     [self.combineXicPlus, self.dauPi],
                                     '[Xi_cc+ -> Xi_c+ pi+ pi-]cc',
                                     _strCutComb, _strCutMoth3)
        self.combineXicc6 = makeXicc(name + 'CombineXicc6',
                                     [self.combineXicPlus, self.dauPi],
                                     '[Xi_cc++ -> Xi_c+ pi+]cc', _strCutComb,
                                     _strCutMoth2)

        # Control lines (to be prescaled!)
        #self.lineControl1 = StrippingLine(name+'ControlLc',
        #selection = self.filterLcForControl)
        #self.lineControl2 = StrippingLine(name+'ControlXicZero',
        #selection = self.combineXicZero)
        #self.lineControl3 = StrippingLine(name+'ControlXicPlus',
        #selection = self.combineXicPlus)

        self.selXicc1 = makeTisTos(name + 'SelXiccPlusToLcKPi',
                                   selection=self.combineXicc1,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc2 = makeTisTos(name + 'SelXiccPlusPlusToLcKPiPi',
                                   selection=self.combineXicc2,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc1a = makeTisTos(name + 'SelXiccPlusToDpPK',
                                    selection=self.combineXicc1a,
                                    hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc2a = makeTisTos(name + 'SelXiccPlusPlusToDpPKPi',
                                    selection=self.combineXicc2a,
                                    hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc1b = makeTisTos(name + 'SelXiccPlusToDspPPi',
                                    selection=self.combineXicc1b,
                                    hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc2b = makeTisTos(name + 'SelXiccPlusPlusToDspPPiPi',
                                    selection=self.combineXicc2b,
                                    hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc3 = makeTisTos(name + 'SelXiccPlusToXicZeroPi',
                                   selection=self.combineXicc3,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc4 = makeTisTos(name + 'SelXiccPlusPlusToXicZeroPiPi',
                                   selection=self.combineXicc4,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc5 = makeTisTos(name + 'SelXiccPlusToXicPlusPiPi',
                                   selection=self.combineXicc5,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc6 = makeTisTos(name + 'SelXiccPlusPlusToXicPlusPi',
                                   selection=self.combineXicc6,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc7 = makeTisTos(name + 'SelXiccPlusToD0PKPi',
                                   selection=self.combineXicc7,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])
        self.selXicc8 = makeTisTos(name + 'SelXiccPlusPlusToD0PKPiPi',
                                   selection=self.combineXicc8,
                                   hltTisTosSpec=config['Hlt2TisTosSpec'])

        # Control lines (to be prescaled!)
        self.lineControl1 = StrippingLine(name + 'ControlLc',
                                          prescale=config['controlPrescaleLc'],
                                          postscale=1.0,
                                          FILTER=_globalEventCuts,
                                          selection=self.filterLcForControl)
        self.lineControl2 = StrippingLine(
            name + 'ControlXicZero',
            prescale=config['controlPrescaleXic'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self.combineXicZero)
        self.lineControl3 = StrippingLine(
            name + 'ControlXicPlus',
            prescale=config['controlPrescaleXic'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self.combineXicPlus)
        self.lineControl4 = StrippingLine(name + 'ControlDp',
                                          prescale=config['controlPrescaleDp'],
                                          postscale=1.0,
                                          FILTER=_globalEventCuts,
                                          selection=self.dplus)
        self.lineControl5 = StrippingLine(name + 'ControlD0',
                                          prescale=config['controlPrescaleD0'],
                                          postscale=1.0,
                                          FILTER=_globalEventCuts,
                                          selection=self.dzero)
        self.lineControl6 = StrippingLine(
            name + 'ControlDsp',
            prescale=config['controlPrescaleDsp'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self.dsplus)

        # Physics lines
        self.lineXicc1 = StrippingLine(name + 'XiccPlusToLcKPi',
                                       prescale=config['signalPrescaleViaLc'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc1)
        self.lineXicc2 = StrippingLine(name + 'XiccPlusPlusToLcKPiPi',
                                       prescale=config['signalPrescaleViaLc'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc2)
        self.lineXicc1a = StrippingLine(name + 'XiccPlusToDpPK',
                                        prescale=config['signalPrescaleViaDp'],
                                        postscale=1.0,
                                        FILTER=_globalEventCuts,
                                        selection=self.selXicc1a)
        self.lineXicc2a = StrippingLine(name + 'XiccPlusPlusToDpPKPi',
                                        prescale=config['signalPrescaleViaDp'],
                                        postscale=1.0,
                                        FILTER=_globalEventCuts,
                                        selection=self.selXicc2a)
        self.lineXicc1b = StrippingLine(
            name + 'XiccPlusToDspPPi',
            prescale=config['signalPrescaleViaDsp'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self.selXicc1b)
        self.lineXicc2b = StrippingLine(
            name + 'XiccPlusPlusToDspP',
            prescale=config['signalPrescaleViaDsp'],
            postscale=1.0,
            FILTER=_globalEventCuts,
            selection=self.selXicc2b)
        self.lineXicc3 = StrippingLine(name + 'XiccPlusToXicZeroPi',
                                       prescale=config['signalPrescaleViaXic'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc3)
        self.lineXicc4 = StrippingLine(name + 'XiccPlusPlusToXicZeroPiPi',
                                       prescale=config['signalPrescaleViaXic'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc4)
        self.lineXicc5 = StrippingLine(name + 'XiccPlusToXicPlusPiPi',
                                       prescale=config['signalPrescaleViaXic'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc5)
        self.lineXicc6 = StrippingLine(name + 'XiccPlusPlusToXicPlusPi',
                                       prescale=config['signalPrescaleViaXic'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc6)
        self.lineXicc7 = StrippingLine(name + 'XiccPlusToD0PKPi',
                                       prescale=config['signalPrescaleViaD0'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc7)
        self.lineXicc8 = StrippingLine(name + 'XiccPlusPlusToD0PKPiPi',
                                       prescale=config['signalPrescaleViaD0'],
                                       postscale=1.0,
                                       FILTER=_globalEventCuts,
                                       selection=self.selXicc8)

        self.registerLine(self.lineControl1)
        self.registerLine(self.lineControl2)
        self.registerLine(self.lineControl3)
        self.registerLine(self.lineControl4)
        self.registerLine(self.lineControl5)
        self.registerLine(self.lineControl6)
        self.registerLine(self.lineXicc1)
        self.registerLine(self.lineXicc2)
        self.registerLine(self.lineXicc1a)
        self.registerLine(self.lineXicc2a)
        self.registerLine(self.lineXicc1b)
        self.registerLine(self.lineXicc2b)
        self.registerLine(self.lineXicc3)
        self.registerLine(self.lineXicc4)
        self.registerLine(self.lineXicc5)
        self.registerLine(self.lineXicc6)
        self.registerLine(self.lineXicc7)
        self.registerLine(self.lineXicc8)
示例#14
0
    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)
示例#15
0
    def __init__( self,name,config ) :        
        
        LineBuilder.__init__(self, name, config)
        
        B2PPbarName  = name + "B2PPbar"

        B2PPSameSignName  = name + "B2PPSameSign"

        B2Lp_dd_name    = name+'B2PLambdabarDD'
        B2Lp_ll_name    = name+'B2PLambdabarLL'

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

        self.selLambda2DD = self.makeLambda2DD( 'Lambda0DDBLines', config )
        self.selLambda2LL = self.makeLambda2LL( 'Lambda0LLBLines', config )

        self.selB2LpDD = self.makeB2LpDD( B2Lp_dd_name, config )
        self.selB2LpLL = self.makeB2LpLL( B2Lp_ll_name, config )

        self.selB2LpLLMVA = self.makeB2LpLLMVA( B2Lp_ll_name+"_MVA", config )
        self.selB2LpDDMVA = self.makeB2LpDDMVA( B2Lp_dd_name+"_MVA", config )

        self.B2PPbar = self.makeB2PPbar( B2PPbarName,
                                    config['MinPTB2PPbar'],
                                    #config['TrChi2'],
                                    config['PIDppi'],
                                    config['PIDpk'],
                                    config['MinIPChi2B2PPbar'],
                                    config['MaxIPChi2B2PPbar'],
                                    config['CombMassWindow'],
                                    config['MaxPTB2PPbar'], 
                                    config['MaxDaughtPB2PPbar'],	            
                                    config['VertexChi2B2PPbar'],
                                    config['BIPChi2B2PPbar'],
                                    config['BPTB2PPbar'],
                                    config['BDIRA'],
                                    config['MaxGhostProb']
                                    )

        """self.B2PPSameSign = self.makeB2PPSameSign( B2PPSameSignName,
                                         config['MinPTB2PPbar'],
                                         #config['TrChi2'],
                                         config['PIDppi'],
                                         config['PIDpk'],
                                         config['MinIPChi2B2PPbar'],
                                         config['MaxIPChi2B2PPbar'],
                                         config['CombMassWindow'],
                                         config['MaxPTB2PPbar'], 
                                         config['MaxDaughtPB2PPbar'],	            
                                         config['VertexChi2B2PPbar'],
                                         config['BIPChi2B2PPbar'],
                                         config['BPTB2PPbar'],
                                         config['BDIRA'],
                                         config['MaxGhostProb']
                                         )
"""
        self.B2Lp_dd_line = StrippingLine(B2Lp_dd_name+"Line",
                                         prescale = config['Prescale'],
                                         postscale = config['Postscale'],
                                         selection = self.selB2LpDD,
                                         FILTER = GECCode,
                                         RelatedInfoTools = config['RelatedInfoTools'],
                                         #ExtraInfoTools = config['ExtraInfoTools'],
                                         #ExtraInfoDaughters = [self.selB2LpDD]
                                         )
        self.B2Lp_ll_line = StrippingLine(B2Lp_ll_name+"Line",
                                         prescale = config['Prescale'],
                                         postscale = config['Postscale'],
                                         selection =  self.selB2LpLL,
                                         FILTER = GECCode,
                                         RelatedInfoTools = config['RelatedInfoTools'],
                                         #ExtraInfoTools = config['ExtraInfoTools'],
                                         #ExtraInfoDaughters = [self.selB2LpLL]
                                         )
        #for alg in config['RelatedInfoTools']:
        #    alg['TopSelection'] = self.selB2LpLLMVA
        self.B2Lp_ll_MVAline = StrippingLine(B2Lp_ll_name+"_MVALine",
                                          prescale = config['Prescale'],
                                          postscale = config['Postscale'],
                                          selection =  self.selB2LpLLMVA,
                                          FILTER = GECCode,
                                          RelatedInfoTools = config['RelatedInfoTools'],
                                          #ExtraInfoTools = config['ExtraInfoTools'],
                                          #ExtraInfoDaughters = [self.selB2LpLLMVA]
                                          )
        self.B2Lp_dd_MVAline = StrippingLine(B2Lp_dd_name+"_MVALine",
                                             prescale = config['Prescale'],
                                             postscale = config['Postscale'],
                                             selection =  self.selB2LpDDMVA,
                                             FILTER = GECCode,
                                             RelatedInfoTools = config['RelatedInfoTools'],
                                             #ExtraInfoTools = config['ExtraInfoTools'],
                                             #ExtraInfoDaughters = [self.selB2LpLLMVA]
                                             )
        


        self.lineB2PPbar = StrippingLine( B2PPbarName+"Line",
                                          prescale = config['PrescaleB2PPbar'],
                                          selection = self.B2PPbar,
                                          RelatedInfoTools = config['RelatedInfoTools'])
         
        #self.lineB2PPSameSign = StrippingLine( B2PPSameSignName+"Line",
        #                                  prescale = config['PrescaleB2PPbar'],
        #                                  selection = self.B2PPSameSign,
        #                                  RelatedInfoTools = config['RelatedInfoTools'])
         

            
        ## Some generic cuts for Bs0.
        ## Vertex chi2 cut depends on number of daughters:
        ##      (2 dau => 1 NDF; 3 dau => 3 NDF; 4 dau => 5 NDF)
        _strCutComb_Long = "(ADAMASS(5.1*GeV)<1.1*%(Bs0_AM_Max)s)" \
                           "& (APT>%(Bs0_APT_Min)s)" \
                           "& (ADOCAMAX('')<%(Bs0_ADOCAMAX_Long_Max)s)" % config
        _strCutMoth_Long  = "(ADMASS(5.1*GeV)<%(Bs0_AM_Max)s)" \
                            "& (BPVVDCHI2 > %(Bs0_BPVVDCHI2_Long_Min)s)" \
                            "& (BPVIPCHI2()< %(Bs0_BPVIPCHI2_Long_Max)s)" \
                            "& (BPVDIRA > %(Bs0_BPVDIRA_Long_Min)s)" % config
        
        _strChi2Moth_Long = "(VFASPF(VCHI2/VDOF)<%(Bs0_VtxChi2_NDF_Long_Max)s)" % config
        
        _strCutMoth_Long = _strChi2Moth_Long + '&' + _strCutMoth_Long
        

        #make Bs0
        """
        Bs0 -> Lambda0 Lambda~0
        """
        self.combineBs04LLDD = self.makeBs0(name+'CombineBsLLDD', [ self.selLambda2LL,self.selLambda2DD] , '[B_s0 -> Lambda0 Lambda~0]cc', _strCutComb_Long, _strCutMoth_Long)
        self.lineBs04LLDD = StrippingLine(name = name+'Bs2LambdabarLambda', prescale = 1.0, postscale = 1.0, selection = self.combineBs04LLDD)

        self.registerLine(self.B2Lp_dd_line)
        self.registerLine(self.B2Lp_ll_line)
        self.registerLine(self.B2Lp_ll_MVAline)
        self.registerLine(self.B2Lp_dd_MVAline)
        self.registerLine(self.lineB2PPbar)
        self.registerLine(self.lineBs04LLDD)
示例#16
0
    def __init__(self, 
                 name = 'LFV',
                 config = None) :

        LineBuilder.__init__(self, name, config)
        
        tau_name=name+'Tau2PhiMu'
        mme_name=name+'Tau2eMuMu'
        emu_name=name+'B2eMu'
        ee_name=name+'B2ee'
        hemu_name=name+'B2heMu'
        pmu_name=name+'B2hMu'
        bu_name=name+'Bu2KJPsiee'
        taumu_name=name+'B2TauMu'
        htaumu_name=name+'B2hTauMu'

        self.selTau2PhiMu, self.selPhi2KK = makeTau2PhiMu(tau_name)
        self.selTau2eMuMu = makeTau2eMuMu(mme_name)
        self.selB2eMu = makeB2eMu(emu_name)
        self.selB2ee = makeB2ee(ee_name)
        self.selB2heMu = makeB2heMu(hemu_name)
        self.selB2pMu = makeB2pMu(pmu_name)
        self.selBu = makeBu(bu_name)
        #self.selB2TauMu = makeB2TauMu(taumu_name)
        self.selB2hTauMu = makeB2hTauMu(htaumu_name)

        
                
        self.tau2PhiMuLine = StrippingLine(tau_name+"Line",
                                           prescale = config['TauPrescale'],
                                           postscale = config['Postscale'],
                                           MDSTFlag = True,
                                           selection=self.selTau2PhiMu,
                                           RelatedInfoTools = [{ 'Type' : 'RelInfoConeVariables', 'ConeAngle' : 0.5,
                                                                 'Variables' : ['CONEANGLE', 'CONEMULT', 'CONEPT', 'CONEPTASYM'],
                                                                 'RecursionLevel' : 2, 
                                                                 'Locations' : { self.selTau2PhiMu : 'coneInfoTau05', 
                                                                                 self.selPhi2KK : 'coneInfoPhi05',
                                                                                 'Phys/StdAllLooseMuons' : 'coneInfoMu05',
                                                                                 'Phys/StdAllLooseKaons' : ['coneInfoKplus05', 'coneInfoKminus05'],
                                                                                 } },
                                                               { 'Type' : 'RelInfoConeVariables', 'ConeAngle' : 0.8,
                                                                 'Variables' : ['CONEANGLE', 'CONEMULT', 'CONEPT', 'CONEPTASYM'],
                                                                 'RecursionLevel' : 2, 
                                                                 'Locations' : { self.selTau2PhiMu : 'coneInfoTau08', 
                                                                                 self.selPhi2KK : 'coneInfoPhi08',
                                                                                 'Phys/StdAllLooseMuons' : 'coneInfoMu08',
                                                                                 'Phys/StdAllLooseKaons' : ['coneInfoKplus08', 'coneInfoKminus08'],
                                                                                 } },
                                                               { 'Type' : 'RelInfoConeVariables', 'ConeAngle' : 1.,
                                                                 'Variables' : ['CONEANGLE', 'CONEMULT', 'CONEPT', 'CONEPTASYM'],
                                                                 'RecursionLevel' : 2, 
                                                                 'Locations' : { self.selTau2PhiMu : 'coneInfoTau10', 
                                                                                 self.selPhi2KK : 'coneInfoPhi10',
                                                                                 'Phys/StdAllLooseMuons' : 'coneInfoMu10',
                                                                                 'Phys/StdAllLooseKaons' : ['coneInfoKplus10', 'coneInfoKminus10'],
                                                                                 } },
                                                               { 'Type' : 'RelInfoConeVariables', 'ConeAngle' : 1.2,
                                                                 'Variables' : ['CONEANGLE', 'CONEMULT', 'CONEPT', 'CONEPTASYM'],
                                                                 'RecursionLevel' : 2, 
                                                                 'Locations' : { self.selTau2PhiMu : 'coneInfoTau12', 
                                                                                 self.selPhi2KK : 'coneInfoPhi12',
                                                                                 'Phys/StdAllLooseMuons' : 'coneInfoMu12',
                                                                                 'Phys/StdAllLooseKaons' : ['coneInfoKplus12', 'coneInfoKminus12'],
                                                                                 } },
                                                               {'Type': 'RelInfoVertexIsolation',
                                                                'Location':'VtxIsoInfo',
                                                                'Variables'  : [ 'VTXISONUMVTX',
                                                                                 'VTXISODCHI2ONETRACK', 'VTXISODCHI2MASSONETRACK',
                                                                                 'VTXISODCHI2TWOTRACK', 'VTXISODCHI2MASSTWOTRACK' ],},
                                                               { 'Type': 'RelInfoTrackIsolationBDT',
                                                                 'RecursionLevel' : 2,
                                                                 'Locations': { 'Phys/StdAllLooseMuons' : "MuonTrackIsoBDTInfo",
                                                                                'Phys/StdAllLooseKaons' : ["KplusTrackIsoBDTInfo", "KminusTrackIsoBDTInfo"],
                                                                                }}
                                                               ]
                                           )
        
        self.tau2eMuMuLine = StrippingLine(mme_name+"Line",
                                           prescale = config['Tau2MuMuePrescale'],
                                           postscale = config['Postscale'],
                                           algos = [ self.selTau2eMuMu ]
                                           )
        
        self.b2eMuLine = StrippingLine(emu_name+"Line",
                                       prescale = config['B2eMuPrescale'],
                                       postscale = config['Postscale'],
                                       RelatedInfoTools = config['RelatedInfoTools'],
                                       MDSTFlag = True,
                                       RequiredRawEvents = ["Velo"],
                                       algos = [ self.selB2eMu ]
                                     )
        #self.b2TauMuLine = StrippingLine(taumu_name+"Line",
        #                             prescale = config['B2TauMuPrescale'],
        #                             postscale = config['Postscale'],
        #                             algos = [ self.selB2TauMu ]
        #                             )

        self.b2eeLine = StrippingLine(ee_name+"Line",
                                      prescale = config['B2eePrescale'],
                                      postscale = config['Postscale'],
                                      RelatedInfoTools = config['RelatedInfoTools'],
                                      algos = [ self.selB2ee ]
                                      )

        self.b2hTauMuLine = StrippingLine(htaumu_name+"Line",
                                     prescale = config['B2hTauMuPrescale'],
                                     postscale = config['Postscale'],
                                     algos = [ self.selB2hTauMu ]
                                     )
        
        self.b2heMuLine = StrippingLine(hemu_name+"Line",
                                        prescale = config['B2heMuPrescale'],
                                        postscale = config['Postscale'],
                                        algos = [ self.selB2heMu ]
                                        )


        self.b2pMuLine = StrippingLine(pmu_name+"Line",
                                     prescale = config['B2pMuPrescale'],
                                     postscale = config['Postscale'],
                                     algos = [ self.selB2pMu ]
                                     )

        self.buLine = StrippingLine(bu_name+"Line",
                                    prescale = config['Bu2KJPsieePrescale'],
                                    postscale = config['Postscale'],
                                    algos = [ self.selBu ]
                                    )
              
        self.registerLine(self.tau2PhiMuLine)
        self.registerLine(self.tau2eMuMuLine)
        self.registerLine(self.b2eMuLine)
        self.registerLine(self.b2eeLine)
        self.registerLine(self.b2heMuLine)
        self.registerLine(self.b2pMuLine)
        self.registerLine(self.buLine)        
        #self.registerLine(self.b2TauMuLine)
        self.registerLine(self.b2hTauMuLine)
    def __init__(self, name, config):
        self.name = name
        self.__confdict__ = config_params
        LineBuilder.__init__(self, name, config)

        _trkFilter = FilterDesktop(
            Code=
            "(MIPCHI2DV(PRIMARY) > %(Q2BTrkMinIPChi2)s) & (TRGHOSTPROB < %(Q2BTrkGhostProb)s)"
            % self.__confdict__)

        self.TrackList = Selection('TrackList' + self.name,
                                   Algorithm=_trkFilter,
                                   RequiredSelections=[StdNoPIDsPions])

        _trkFilter_HiP = FilterDesktop(Code="(PT > %(Q2BTrkMinHiPT)s)" %
                                       self.__confdict__)
        self.TrackList_HiP = Selection('TrackList_HiP' + self.name,
                                       Algorithm=_trkFilter_HiP,
                                       RequiredSelections=[self.TrackList])

        self.DiTrackList = makeDiTrackList(
            name="DiTracksForCharmlessB" + self.name,
            trkList=self.TrackList,
            MinPTCut=config['Q2BResMinPT'],
            MaxMassCut=config['Q2BResMaxMass'],
            VtxChi2DOFCut=config['Q2BResVtxChi2DOF'])

        _diTrackFilter_HiPt = FilterDesktop(Code="(PT > %(Q2BResMinHiPT)s)" %
                                            self.__confdict__)
        self.DiTrackList_HiPt = Selection(
            'DiTracksHiPtForCharmlessB' + self.name,
            Algorithm=_diTrackFilter_HiPt,
            RequiredSelections=[self.DiTrackList])

        B2Q2B4piName = self.name + "4piSelection"
        self.B2CharmlessQ2B4pi = makeB2Q2B4pi(
            B2Q2B4piName,
            diTrkList=self.DiTrackList,
            MinPTCut=config['Q2BBMinPT'],
            MinMassCut=config['Q2BBMinM4pi'],
            MaxMassCut=config['Q2BBMaxM4pi'],
            MaxCorrMCut=config['Q2BBMaxCorrM4pi'],
            VtxChi2DOFCut=config['Q2BBVtxChi2DOF'])

        self.Q2B4piLine = StrippingLine(B2Q2B4piName + "Line",
                                        prescale=config['Q2BPrescale'],
                                        selection=tisTosSelection(
                                            self.B2CharmlessQ2B4pi))

        B2Q2B3piName = self.name + "3piSelection"
        self.B2CharmlessQ2B3pi = makeB2Q2B3pi(
            B2Q2B3piName,
            trkList=self.TrackList_HiP,
            diTrkList=self.DiTrackList_HiPt,
            MinPTCut=config['Q2BBMinPT'],
            MinMassCut=config['Q2BBMinM3pi'],
            MaxMassCut=config['Q2BBMaxM3pi'],
            MaxCorrMCut=config['Q2BBMaxCorrM3pi'],
            VtxChi2DOFCut=config['Q2BBVtxChi2DOF'])

        self.Q2B3piLine = StrippingLine(B2Q2B3piName + "Line",
                                        prescale=config['Q2BPrescale'],
                                        selection=tisTosSelection(
                                            self.B2CharmlessQ2B3pi))

        self.registerLine(self.Q2B4piLine)
        self.registerLine(self.Q2B3piLine)
示例#18
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']))
     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,
         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)
示例#19
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        self.selD02HH = makeD02HH(
            'D0For' + name,
            D0MassWin=config['D0MassWin'],
            D0PT=config['D0PT'],
            D0VtxChi2Ndof=config['D0VtxChi2Ndof'],
            D0Bpvdira=config['D0Bpvdira'],
            D0Bpvdls=config['D0Bpvdls'],
            D0daughterPT=config['D0daughterPT'],
            D0daughterP=config['D0daughterP'],
            D0daughterTrkChi2=config['D0daughterTrkChi2'],
            D0daughterTrkGhostProb=config['D0daughterTrkGhostProb'],
            D0daughterBpvIpChi2=config['D0daughterBpvIpChi2'],
            ###                                     D0daughterKaonPIDK     = config['D0daughterKaonPIDK'],
            ###                                     D0daughterPionPIDK     = config['D0daughterPionPIDK'],
            D0daughterKaonProbNNk=config['D0daughterKaonProbNNk'],
            D0daughterPionProbNNpi=config['D0daughterPionProbNNpi'],
        )

        self.selDp2HHH = makeDp2HHH(
            'DpFor' + name,
            DpmMassWin=config['DpmMassWin'],
            DpmPT=config['DpmPT'],
            DpmVtxChi2Ndof=config['DpmVtxChi2Ndof'],
            DpmBpvdira=config['DpmBpvdira'],
            DpmBpvdls=config['DpmBpvdls'],
            DpmdaughterPT=config['DpmdaughterPT'],
            DpmdaughterP=config['DpmdaughterP'],
            DpmdaughterTrkChi2=config['DpmdaughterTrkChi2'],
            DpmdaughterTrkGhostProb=config['DpmdaughterTrkGhostProb'],
            DpmdaughterBpvIpChi2=config['DpmdaughterBpvIpChi2'],
            ###                                     DpmdaughterKaonPIDK     = config['DpmdaughterKaonPIDK'],
            ###                                     DpmdaughterPionPIDK     = config['DpmdaughterPionPIDK'],
            DpmdaughterKaonProbNNk=config['DpmdaughterKaonProbNNk'],
            DpmdaughterPionProbNNpi=config['DpmdaughterPionProbNNpi'],
        )

        self.selDs2HHH = makeDs2HHH(
            'DsFor' + name,
            DpmMassWin=config['DpmMassWin'],
            DpmPT=config['DpmPT'],
            DpmVtxChi2Ndof=config['DpmVtxChi2Ndof'],
            DpmBpvdira=config['DpmBpvdira'],
            DpmBpvdls=config['DpmBpvdls'],
            DpmdaughterPT=config['DpmdaughterPT'],
            DpmdaughterP=config['DpmdaughterP'],
            DpmdaughterTrkChi2=config['DpmdaughterTrkChi2'],
            DpmdaughterTrkGhostProb=config['DpmdaughterTrkGhostProb'],
            DpmdaughterBpvIpChi2=config['DpmdaughterBpvIpChi2'],
            ###                                     DpmdaughterKaonPIDK     = config['DpmdaughterKaonPIDK'],
            ###                                     DpmdaughterPionPIDK     = config['DpmdaughterPionPIDK'],
            DpmdaughterKaonProbNNk=config['DpmdaughterKaonProbNNk'],
            DpmdaughterPionProbNNpi=config['DpmdaughterPionProbNNpi'],
        )

        self.selLc2HHH = makeLc2HHH(
            'LcFor' + name,
            LcMassWin=config['LcMassWin'],
            LcPT=config['LcPT'],
            LcVtxChi2Ndof=config['LcVtxChi2Ndof'],
            LcBpvdira=config['LcBpvdira'],
            LcBpvdls=config['LcBpvdls'],
            LcdaughterPT=config['LcdaughterPT'],
            LcdaughterP=config['LcdaughterP'],
            LcdaughterTrkChi2=config['LcdaughterTrkChi2'],
            LcdaughterTrkGhostProb=config['LcdaughterTrkGhostProb'],
            LcdaughterBpvIpChi2=config['LcdaughterBpvIpChi2'],
            ###                                     LcdaughterKaonPIDK     = config['LcdaughterKaonPIDK'],
            ###                                     LcdaughterPionPIDK     = config['LcdaughterPionPIDK'],
            LcdaughterProtonProbNNp=config['LcdaughterProtonProbNNp'],
            LcdaughterKaonProbNNk=config['LcdaughterKaonProbNNk'],
            LcdaughterPionProbNNpi=config['LcdaughterPionProbNNpi'],
        )

        self.selXc2HHHH = makeXc2HHHH(
            'XcFor' + name,
            XcMassWin=config['XcMassWin'],
            XcPT=config['XcPT'],
            XcVtxChi2Ndof=config['XcVtxChi2Ndof'],
            XcBpvdira=config['XcBpvdira'],
            XcBpvdls=config['XcBpvdls'],
            XcdaughterPT=config['XcdaughterPT'],
            XcdaughterP=config['XcdaughterP'],
            XcdaughterTrkChi2=config['XcdaughterTrkChi2'],
            XcdaughterTrkGhostProb=config['XcdaughterTrkGhostProb'],
            XcdaughterBpvIpChi2=config['XcdaughterBpvIpChi2'],
            ###                                     XcdaughterKaonPIDK     = config['XcdaughterKaonPIDK'],
            ###                                     XcdaughterPionPIDK     = config['XcdaughterPionPIDK'],
            XcdaughterProtonProbNNp=config['XcdaughterProtonProbNNp'],
            XcdaughterKaonProbNNk=config['XcdaughterKaonProbNNk'],
            XcdaughterPionProbNNpi=config['XcdaughterPionProbNNpi'],
        )

        self.selCC2DD = makeCC2DD(
            name,
            D0Sel=self.selD02HH,
            DplusSel=self.selDp2HHH,
            DsSel=self.selDs2HHH,
            LcSel=self.selLc2HHH,
            XcSel=self.selXc2HHHH,
            CCMassCut=config['CCMassCut'],
            CCVtxChi2Ndof=config['CCVtxChi2Ndof'],
            CCMaxD0ChildPT=config['CCMaxD0ChildPT'],
            CCMaxD0TreePT=config['CCMaxD0TreePT'],
            CCMaxD0MinTreeIpChi2=config['CCMaxD0MinTreeIpChi2'],
        )

        self.myLine = StrippingLine(name + "Line",
                                    prescale=1.,
                                    postscale=1.,
                                    selection=self.selCC2DD)

        self.registerLine(self.myLine)
示例#20
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)
        self.__confdict__ = config

        #########
        self.dauPions = Selection(
            "dauPifor" + name,
            Algorithm=FilterDesktop(
                Code=
                "(TRGHOSTPROB < %(GHOSTPROB_MAX)s) & (PIDK < %(PionPIDK)s) & (MIPCHI2DV(PRIMARY)> %(dau_MIPCHI2DV)s) & (TRCHI2DOF < %(TRCHI2)s) & (PT > %(dau_PT_MIN)s *MeV)"
                % config),
            RequiredSelections=[StdLoosePions])

        self.dauKaons = Selection(
            "dauKfor" + name,
            Algorithm=FilterDesktop(
                Code=
                "(TRGHOSTPROB < %(GHOSTPROB_MAX)s) & (PIDK > %(KaonPIDK)s) & (MIPCHI2DV(PRIMARY)> %(dau_MIPCHI2DV)s) & (TRCHI2DOF < %(TRCHI2)s) & (PT > %(dau_PT_MIN)s *MeV)"
                % config),
            RequiredSelections=[StdLooseKaons])

        #########
        self.comb_D2PiPi = CombineParticles(
            DecayDescriptors=['[D- -> pi- pi-]cc'],
            CombinationCut=
            "(AM+10 > %(D_MASS_MIN)s *MeV) & (AM-10 < %(D_MASS_MAX)s *MeV) & (APT+20 > %(D_PT_MIN)s *MeV) & (AMAXDOCA('') < %(D_AMAXDOCA)s *mm) & (ADOCACHI2CUT(%(D_DOCACHI2_MAX)s,''))"
            % config,
            MotherCut=
            "(M > %(D_MASS_MIN)s *MeV) & (M < %(D_MASS_MAX)s *MeV) & (PT > %(D_PT_MIN)s *MeV) & (BPVDIRA>0.99) & (VFASPF(VCHI2/VDOF)< %(D_VFASPF)s) & (BPVVDCHI2>%(D_BPVVDCHI2)s)"
            % config)
        self.seld2pi = Selection("D2PiPifor" + name,
                                 Algorithm=self.comb_D2PiPi,
                                 RequiredSelections=[self.dauPions])

        #########
        self.comb_Lc2Kpi = CombineParticles(
            DecayDescriptors=['[Lambda_c+ -> K- pi+]cc'],
            CombinationCut=
            "(AM+10 > %(Lc_MASS_MIN)s *MeV) & (AM-10 < %(Lc_MASS_MAX)s *MeV) & (APT+20 > %(Lc_PT_MIN)s *MeV) & (AMAXDOCA('') < %(Lc_AMAXDOCA)s *mm) & (ADOCACHI2CUT(%(Lc_DOCACHI2_MAX)s,''))"
            % config,
            MotherCut=
            "(M > %(Lc_MASS_MIN)s *MeV) & (M < %(Lc_MASS_MAX)s *MeV) & (PT > %(Lc_PT_MIN)s *MeV) & (BPVDIRA>0.99) & (VFASPF(VCHI2/VDOF)< %(Lc_VFASPF)s) & (BPVVDCHI2>%(Lc_BPVVDCHI2)s)"
            % config)
        self.selLc2Kpi = Selection(
            "LcToKpifor" + name,
            Algorithm=self.comb_Lc2Kpi,
            RequiredSelections=[self.dauKaons, self.dauPions])

        #########
        self.comb_a2PiPiPi = CombineParticles(
            DecayDescriptors=['[a_1(1260)+ -> pi+ pi- pi+]cc'],
            CombinationCut=
            "(AM+10 > %(A1_MASS_MIN)s *MeV) & (AM-10 < %(A1_MASS_MAX)s *MeV) & (APT+20 > %(A1_PT_MIN)s *MeV) & (AMAXDOCA('') < %(A1_AMAXDOCA)s *mm) & (ADOCACHI2CUT(%(D_DOCACHI2_MAX)s,''))"
            % config,
            MotherCut=
            "(M > %(A1_MASS_MIN)s *MeV) & (M < %(A1_MASS_MAX)s *MeV) & (PT > %(A1_PT_MIN)s *MeV) & (VFASPF(VCHI2/VDOF)< %(A1_VFASPF)s) & (BPVVDCHI2>%(A1_BPVVDCHI2)s)"
            % config)
        self.sela3pi = Selection("A2PiPiPifor" + name,
                                 Algorithm=self.comb_a2PiPiPi,
                                 RequiredSelections=[self.dauPions])

        #########
        self.comb_B2Dhhh = CombineParticles(
            DecayDescriptor='[B0 -> D- a_1(1260)+]cc',
            CombinationCut=
            "(AM+10 > %(B_MASS_MIN)s *MeV) & (AM-10 < %(B_MASS_MAX)s *MeV) & (AM-AM1+10 > %(B_D_deltamass_MIN)s *MeV) & (AM-AM1-10 < %(B_D_deltamass_MAX)s *MeV) & (APT+20 > %(B_PT_MIN)s *MeV) & (ADOCACHI2CUT(%(B_DOCACHI2_MAX)s,''))"
            % config,
            MotherCut=
            "(M > %(B_MASS_MIN)s *MeV) & (M < %(B_MASS_MAX)s *MeV) & (PT > %(B_PT_MIN)s *MeV) & (BPVDIRA> 0.999) & (VFASPF(VCHI2/VDOF) < %(B_VFASPF)s) & (BPVVDCHI2>%(B_BPVVDCHI2)s) & (MINTREE(((ABSID=='D+')|(ABSID=='D0')|(ABSID=='Lambda_c+')) , VFASPF(VZ))-VFASPF(VZ) > %(B_DZ)s *mm )"
            % config)
        self.selB2Dhhh = Selection(
            "B2Dhhh_DPiPi_for" + name,
            Algorithm=self.comb_B2Dhhh,
            RequiredSelections=[self.seld2pi, self.sela3pi])

        #########
        self.diPiPi = PiPiMaker("PiPi_For" + name, config, [self.dauPions],
                                ['rho(770)0 -> pi+ pi-'])

        self.comb_Lb2Lchhh = CombineParticles(
            DecayDescriptor='[Lambda_b0 -> Lambda_c+ rho(770)0 pi-]cc',
            CombinationCut=
            "(AM+10 > %(Lb_MASS_MIN)s *MeV) & (AM-10 < %(Lb_MASS_MAX)s *MeV) & (AM-AM1+10 > %(Lb_Lc_deltamass_MIN)s *MeV) & (AM-AM1-10 < %(Lb_Lc_deltamass_MAX)s *MeV) & (AM12-AM1+10 > %(LcStar_MASS_MIN)s *MeV) & (AM12-AM1-10 < %(LcStar_MASS_MAX)s *MeV) & (APT+20 > %(Lb_PT_MIN)s *MeV) & (ADOCACHI2CUT(%(Lb_DOCACHI2_MAX)s,''))"
            % config,
            MotherCut=
            "(M > %(Lb_MASS_MIN)s *MeV) & (M < %(Lb_MASS_MAX)s *MeV) & (PT > %(Lb_PT_MIN)s *MeV) & (BPVDIRA> 0.999) & (VFASPF(VCHI2/VDOF) < %(Lb_VFASPF)s ) & (BPVVDCHI2>%(Lb_BPVVDCHI2)s) & (MINTREE(((ABSID=='D+')|(ABSID=='D0')|(ABSID=='Lambda_c+')) , VFASPF(VZ))-VFASPF(VZ) > %(Lb_DZ)s *mm )"
            % config)
        self.selLb2Lchhh = Selection(
            "Lb2Lchhh_LcKpi_for" + name,
            Algorithm=self.comb_Lb2Lchhh,
            RequiredSelections=[self.selLc2Kpi, self.diPiPi, self.dauPions])

        #########
        self.selB2Dhhh_tos = TOSFilter("B2Dhhh_DPiPiTOS_for" + name,
                                       self.selB2Dhhh)
        self.selLb2Lchhh_tos = TOSFilter("Lb2Lchhh_LcKpiTOS_for" + name,
                                         self.selLb2Lchhh)
        #########

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

        #########
        self.B2DhhhLine = StrippingLine('B2DHHHwD2PiPi' + name + 'Line',
                                        prescale=config['PreScale'],
                                        FILTER=GECs,
                                        selection=self.selB2Dhhh_tos)
        self.Lb2LchhhLine = StrippingLine('Lb2LcHHHwLc2KPi' + name + 'Line',
                                          prescale=config['PreScale'],
                                          FILTER=GECs,
                                          selection=self.selLb2Lchhh_tos)

        self.registerLine(self.B2DhhhLine)
        self.registerLine(self.Lb2LchhhLine)
示例#21
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        Bd2eeKstarBDTName = name
        Bd2eeKstarBDTLineName = Bd2eeKstarBDTName + "Line"

        self.SelEE = makeEE(
            'eeFor' + Bd2eeKstarBDTName,
            ElectronPT=config['ElectronPT'],
            ElectronTrackCHI2pNDOF=config['ElectronTrackCHI2pNDOF'],
            ElectronIPCHI2=config['ElectronIPCHI2'],
            ElectronPIDepi=config['ElectronPIDepi'],
            #
            eeCuts=config['eeCuts'])

        self.SelKstar = makeKstar(
            'KstarFor' + Bd2eeKstarBDTName,
            KaonPT=config['KaonPT'],
            KaonP=config['KaonP'],
            KaonTrackCHI2pNDOF=config['KaonTrackCHI2pNDOF'],
            KaonIPCHI2=config['KaonIPCHI2'],
            KaonPIDKpi=config['KaonPIDKpi'],
            #
            PionPT=config['PionPT'],
            PionP=config['PionP'],
            PionTrackCHI2pNDOF=config['PionTrackCHI2pNDOF'],
            PionIPCHI2=config['PionIPCHI2'],
            PionPIDpiK=config['PionPIDpiK'],
            #
            KstarVertexCHI2=config['KstarVertexCHI2'],
            KstarMassW=config['KstarMassW'])

        self.SelBd2eeKstar = makeBd2eeKstar("Sel_" + Bd2eeKstarBDTName,
                                            SelEE=self.SelEE,
                                            SelKstar=self.SelKstar,
                                            BComMassW=config['BComMassW'],
                                            BVertexCHI2=config['BVertexCHI2'],
                                            BMassW=config['BMassW'],
                                            BDIRA=config['BDIRA'])

        self.CutBDTBd2eeKstar = applyBDT(
            "CutBDT_" + Bd2eeKstarBDTName,
            LineName=Bd2eeKstarBDTLineName,
            SelBd2eeKstar=self.SelBd2eeKstar,
            BDTCutValue=config['BDTCutValue'],
            BDTWeightsFile=config['BDTWeightsFile'])

        self.line = StrippingLine(Bd2eeKstarBDTLineName,
                                  prescale=config['LinePrescale'],
                                  postscale=config['LinePostscale'],
                                  selection=self.CutBDTBd2eeKstar)

        self.registerLine(self.line)

        # new line with new Brem cor
        self.FilterEE = filterEE(
            'filterEEFor' + Bd2eeKstarBDTName,
            ElectronPT=config['ElectronPT'],
            ElectronTrackCHI2pNDOF=config['ElectronTrackCHI2pNDOF'],
            ElectronIPCHI2=config['ElectronIPCHI2'],
            ElectronPIDepi=config['ElectronPIDepi'],
            #
            eeCuts=config['eeCuts'])

        self.SelBd2DieeKstar = makeBd2eeKstar(
            "Sel2_" + Bd2eeKstarBDTName,
            SelEE=self.FilterEE,
            SelKstar=self.SelKstar,
            BComMassW=config['BComMassW'],
            BVertexCHI2=config['BVertexCHI2'],
            BMassW=config['BMassW'],
            BDIRA=config['BDIRA'])

        self.CutBDTBd2eeKstar2 = applyBDT(
            "CutBDT2_" + Bd2eeKstarBDTName,
            LineName=Bd2eeKstarBDTLineName + "2",
            SelBd2eeKstar=self.SelBd2DieeKstar,
            BDTCutValue=config['BDTCutValue'],
            BDTWeightsFile=config['BDTWeightsFile'])

        self.line2 = StrippingLine(Bd2eeKstarBDTLineName + "2",
                                   prescale=config['LinePrescale'],
                                   postscale=config['LinePostscale'],
                                   selection=self.CutBDTBd2eeKstar2)

        self.registerLine(self.line2)
示例#22
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, name, config):
        LineBuilder.__init__(self, name, config)
        
        PiCalLine_name = name+"_PiCal"
        PiOSLine_name = name+"_PiOS"
        PiSSLine_name = name+"_PiSS"
        KOSLine_name = name+"_KOS"
        KSSLine_name = name+"_KSS"
        KKLine_name = name+"_KK"
        PiPiLine_name = name+"_PiPi"
        KKPiPiLine_name = name+"_KKPiPi"
        K3PiLine_name = name+"_K3Pi"
        K2PiLine_name = name+"_K2Pi"
        TwoKPiLine_name = name+"_2KPi"
        
        # 1 : Make kaons
        selKaons = makeKaons(name="KaonsFor"+name
                             , KaonP = config['KaonP']
                             , KaonPT = config['KaonPT']
                             , KaonPIDK = config['KaonPIDK']
                             , KaonMINIPCHI2 = config['KaonMINIPCHI2']
                             , KaonTRCHI2 = config['KaonTRCHI2'])
        
        # 2 : Make pions
        selPions = makePions(name="PionsFor"+name
                             , PionP = config['PionP']
                             , PionPT = config['PionPT']
                             , PionMINIPCHI2 = config['PionMINIPCHI2']
                             , PionTRCHI2 = config['PionTRCHI2'])
        
        # 3 : Make muons
        selMuons = makeMuons(name="MuonsFor"+name
                             , MuonP = config['MuonP']
                             , MuonPT = config['MuonPT']
                             , MuonMINIPCHI2 = config['MuonMINIPCHI2']
                             , MuonTRCHI2 = config['MuonTRCHI2'])
                                                             
        # 3b : Make muons candidates from pions
        pionsAsMuons = makePionsAsMuons(name="PionsAsMuonsFor"+name
                             , MuonP = config['MuonP']
                             , MuonPT = config['MuonPT']
                             , MuonMINIPCHI2 = config['MuonMINIPCHI2']
                             , MuonTRCHI2 = config['MuonTRCHI2'])

        # 4 : Make Muons for hhmumu 
        selMuonsForhhmumu = makeMuonsForhhmumu(name="MuonsForhhmumuAndFor"+name
                             , MuonP = config['MuonP']
                             , MuonPT = config['PT_CS_hhmumu']
                             , MuonMINIPCHI2 = config['MINIPCHI2_CS_hhmumu']
                             , MuonTRCHI2 = config['MuonTRCHI2'])

        # 5 : Make Kaons for hhmumu 
        selKaonsForhhmumu  = makeKaonsForhhmumu(name="KaonsForhhmumuAndFor"+name
                             , KaonP = config['KaonP']
                             , KaonPT = config['PT_CS_hhmumu']
                             , KaonPIDK = config['KaonPIDK']
                             , KaonMINIPCHI2 = config['MINIPCHI2_CS_hhmumu']
                             , KaonTRCHI2 = config['KaonTRCHI2'])

        # 6 : Make Pions for hhmumu 
        selPionsForhhmumu = makePionsForhhmumu(name="PionsForForhhmumuAndFor"+name
                             , PionP = config['PionP']
                             , PionPT = config['PT_CS_hhmumu']
                             , PionMINIPCHI2 = config['MINIPCHI2_CS_hhmumu']
                             , PionTRCHI2 = config['PionTRCHI2'])



        # 5b : Make Kaons for Control Samples
        selKaonsForCS  = makeKaonsForCS(name="HadForCSAndFor"+name
                             , KaonP = config['KaonP']
                             , KaonPT = config['PT_CS_hhmumu']
                             , KaonMINIPCHI2 = config['MINIPCHI2_CS_hhmumu']
                             , KaonTRCHI2 = config['KaonTRCHI2'])

        # 6b : Make Pions for Control samples 
        selPionsForCS = makePionsForCS(name="PionsForCSAndFor"+name
                             , PionP = config['PionP']
                             , PionPT = config['PT_CS_hhmumu']
                             , PionMINIPCHI2 = config['MINIPCHI2_CS_hhmumu']
                             , PionTRCHI2 = config['PionTRCHI2'])



                                        
        # 7 : Combine
        selD2PiPiPi   = self._makeD2PiPiPi(name=PiCalLine_name,
                                             pionSel = selPions,
                                             muonSel = pionsAsMuons,
                                             config = config)
        
        selD2PiMuMuOS = self._makeD2PiMuMuOS(name=PiOSLine_name,
                                             pionSel = selPions,
                                             muonSel = selMuons,
                                             config = config)

        selD2PiMuMuSS = self._makeD2PiMuMuSS(name=PiSSLine_name,
                                             pionSel = selPions,
                                             muonSel = selMuons,
                                             config = config)

        selD2KMuMuOS = self._makeD2KMuMuOS(name=KOSLine_name,
                                           kaonSel = selKaons,
                                           muonSel = selMuons,
                                           config = config)

        selD2KMuMuSS = self._makeD2KMuMuSS(name=KSSLine_name,
                                           kaonSel = selKaons,
                                           muonSel = selMuons,
                                           config = config)
        
        selD02KKMuMu = self._makeD02KKMuMu(name=KKLine_name,
                                           kaonSel = selKaonsForhhmumu,
                                           muonSel = selMuonsForhhmumu,
                                           config = config)
        
        selD02PiPiMuMu = self._makeD02PiPiMuMu(name=PiPiLine_name,
                                           pionSel = selPionsForhhmumu,
                                           muonSel = selMuonsForhhmumu,
                                           config = config)
        
        selD02KKPiPi = self._makeD02KKPiPi(name=KKPiPiLine_name,
                                           kaonSel = selKaonsForCS,
                                           pionSel = selPionsForCS,
                                           config = config)

        selD02K3Pi = self._makeD02K3Pi(name=K3PiLine_name,
                                           kaonSel = selKaonsForCS,
                                           pionSel = selPionsForCS,
                                           config = config)

        selD2K2Pi = self._makeD2K2Pi(name=K2PiLine_name,
                                      kaonSel = selKaonsForCS,
                                      pionSel = selPionsForCS,
                                      config = config)

        selD22KPi = self._makeD22KPi(name=TwoKPiLine_name,
                                     kaonSel = selKaonsForCS,
                                     pionSel = selPionsForCS,
                                     config = config)
        
        
        # 8 : Declare Lines
        self.PiCalLine = StrippingLine(PiCalLine_name+"Line",
                                      prescale = config['D2PiPiPiCalLinePrescale'],
                                      postscale = config['D2PiPiPiCalLinePostscale'],
                                      selection = selD2PiPiPi
                                       )
        
        self.PiOSLine = StrippingLine(PiOSLine_name+"Line",
                                      prescale = config['D2PiMuMuOSLinePrescale'],
                                      postscale = config['D2PiMuMuOSLinePostscale'],
                                      selection = selD2PiMuMuOS
                                      )
        
        self.PiSSLine = StrippingLine(PiSSLine_name+"Line",
                                      prescale = config['D2PiMuMuSSLinePrescale'],
                                      postscale = config['D2PiMuMuSSLinePostscale'],
                                      selection = selD2PiMuMuSS
                                      )
        
        self.KOSLine = StrippingLine(KOSLine_name+"Line",
                                     prescale = config['D2KMuMuOSLinePrescale'],
                                     postscale = config['D2KMuMuOSLinePostscale'],
                                     selection = selD2KMuMuOS
                                     )
        
        self.KSSLine = StrippingLine(KSSLine_name+"Line",
                                     prescale = config['D2KMuMuSSLinePrescale'],
                                     postscale = config['D2KMuMuSSLinePostscale'],
                                     selection = selD2KMuMuSS
                                     )
        
        self.KKLine = StrippingLine(KKLine_name+"Line",
                                    prescale = config['D02KKMuMuLinePrescale'],
                                    postscale = config['D02KKMuMuLinePostscale'],
                                    selection = selD02KKMuMu
                                    )
        
        self.PiPiLine = StrippingLine(PiPiLine_name+"Line",
                                    prescale = config['D02PiPiMuMuLinePrescale'],
                                    postscale = config['D02PiPiMuMuLinePostscale'],
                                    selection = selD02PiPiMuMu
                                    )

        self.KKPiPiLine = StrippingLine(KKPiPiLine_name+"Line",
                                    prescale = config['D02KKPiPiLinePrescale'],
                                    postscale = config['D02KKPiPiLinePostscale'],
                                    selection = selD02KKPiPi
                                    )

        self.K3PiLine = StrippingLine(K3PiLine_name+"Line",
                                        prescale = config['D02K3PiLinePrescale'],
                                        postscale = config['D02K3PiLinePostscale'],
                                        selection = selD02K3Pi
                                        )

        self.K2PiLine = StrippingLine(K2PiLine_name+"Line",
                                        prescale = config['D2K2PiLinePrescale'],
                                        postscale = config['D2K2PiLinePostscale'],
                                        selection = selD2K2Pi
                                        )

        self.TwoKPiLine = StrippingLine(TwoKPiLine_name+"Line",
                                        prescale = config['D22KPiLinePrescale'],
                                        postscale = config['D22KPiLinePostscale'],
                                        selection = selD22KPi
                                        )

        
        

        # 9 : register Line
        self.registerLine( self.KSSLine )
        self.registerLine( self.KOSLine )
        self.registerLine( self.PiSSLine )
        self.registerLine( self.PiOSLine )
        self.registerLine( self.PiCalLine )
        self.registerLine( self.KKLine )
        self.registerLine( self.PiPiLine )
        self.registerLine( self.KKPiPiLine )
        self.registerLine( self.K3PiLine )
        self.registerLine( self.K2PiLine )
        self.registerLine( self.TwoKPiLine )
示例#24
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        self._config = config

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

        self._muon = self._muonFilter()
        self._pion = self._pionFilter()
        self._kaon = self._kaonFilter()

        self._d2pimunu = self._D2HMuNuBuilder("D02PiMuNu",
                                              ["[D0 -> pi- mu+]cc"],
                                              [self._muon, self._pion])
        self._d2kmunu = self._D2HMuNuBuilder("D02KMuNu", ["[D0 -> K- mu+]cc"],
                                             [self._muon, self._kaon])
        self._d2kpipimunu = self._D2KPiPiMuNuBuilder(
            "D02KPiPiMuNu", ["[D0 -> K- pi+ pi- mu+]cc"],
            [self._kaon, self._pion, self._muon])
        self._d2pimunuws = self._D2HMuNuBuilder("D02PiMuNuWS",
                                                ["[D0 -> pi- mu-]cc"],
                                                [self._muon, self._pion])
        self._d2kmunuws = self._D2HMuNuBuilder("D02KMuNuWS",
                                               ["[D0 -> K- mu-]cc"],
                                               [self._muon, self._kaon])
        self._d2kpipimunuws = self._D2KPiPiMuNuBuilder(
            "D02KPiPiMuNuWS", ["[D0 -> K- pi+ pi- mu-]cc"],
            [self._kaon, self._pion, self._muon])
        self._hh = self._HHBuilder()
        self._hhh = self._HHHBuilder()

        self.registerLine(
            self._makeBLine("B2D0PiD02PiMuNu", ["[B- -> D0 pi-]cc"],
                            [self._d2pimunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0PiD02KMuNu", ["[B- -> D0 pi-]cc"],
                            [self._d2kmunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0PiD02KPiPiMuNu", ["[B- -> D0 pi-]cc"],
                            [self._d2kpipimunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02PiMuNu", ["[B- -> D0 K-]cc"],
                            [self._d2pimunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02KMuNu", ["[B- -> D0 K-]cc"],
                            [self._d2kmunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02KPiPiMuNu", ["[B- -> D0 K-]cc"],
                            [self._d2kpipimunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02PiMuNu", ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2pimunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KMuNu", ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2kmunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KPiPiMuNu",
                            ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2kpipimunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02PiMuNu", ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2pimunu, self._hh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KMuNu", ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2kmunu, self._hh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KPiPiMuNu", ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2kpipimunu, self._hh], 1.0))

        self.registerLine(
            self._makeBLine("B2D0PiD02PiMuNuSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2pimunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0PiD02KMuNuSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2kmunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0PiD02KPiPiMuNuSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2kpipimunu, self._pion], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02PiMuNuSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2pimunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02KMuNuSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2kmunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KD02KPiPiMuNuSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2kpipimunu, self._kaon], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02PiMuNuSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2pimunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KMuNuSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2kmunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KPiPiMuNuSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2kpipimunu, self._hhh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02PiMuNuSUP", ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2pimunu, self._hh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KMuNuSUP", ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2kmunu, self._hh], 1.0))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KPiPiMuNuSUP",
                            ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2kpipimunu, self._hh], 1.0))

        self.registerLine(
            self._makeBLine("B2D0PiD02PiMuNuWS", ["[B- -> D0 pi-]cc"],
                            [self._d2pimunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0PiD02KMuNuWS", ["[B- -> D0 pi-]cc"],
                            [self._d2kmunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0PiD02KPiPiMuNuWS", ["[B- -> D0 pi-]cc"],
                            [self._d2kpipimunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02PiMuNuWS", ["[B- -> D0 K-]cc"],
                            [self._d2pimunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02KMuNuWS", ["[B- -> D0 K-]cc"],
                            [self._d2kmunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02KPiPiMuNuWS", ["[B- -> D0 K-]cc"],
                            [self._d2kpipimunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02PiMuNuWS",
                            ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2pimunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KMuNuWS", ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2kmunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KPiPiMuNuWS",
                            ["[B- -> D0 K_1(1270)-]cc"],
                            [self._d2kpipimunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02PiMuNuWS", ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2pimunuws, self._hh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KMuNuWS", ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2kmunuws, self._hh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KPiPiMuNuWS",
                            ["[B0 -> D~0 K*(892)0]cc"],
                            [self._d2kpipimunuws, self._hh], 0.1))

        self.registerLine(
            self._makeBLine("B2D0PiD02PiMuNuWSSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2pimunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0PiD02KMuNuWSSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2kmunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0PiD02KPiPiMuNuWSSUP", ["[B+ -> D0 pi+]cc"],
                            [self._d2kpipimunuws, self._pion], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02PiMuNuWSSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2pimunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02KMuNuWSSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2kmunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KD02KPiPiMuNuWSSUP", ["[B+ -> D0 K+]cc"],
                            [self._d2kpipimunuws, self._kaon], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02PiMuNuWSSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2pimunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KMuNuWSSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2kmunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B2D0KPiPiD02KPiPiMuNuWSSUP",
                            ["[B+ -> D0 K_1(1270)+]cc"],
                            [self._d2kpipimunuws, self._hhh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02PiMuNuWSSUP",
                            ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2pimunuws, self._hh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KMuNuWSSUP", ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2kmunuws, self._hh], 0.1))
        self.registerLine(
            self._makeBLine("B02D0KPiD02KPiPiMuNuWSSUP",
                            ["[B0 -> D0 K*(892)0]cc"],
                            [self._d2kpipimunuws, self._hh], 0.1))
示例#25
0
    def __init__(self, name="D23Mu", config=default_config):

        LineBuilder.__init__(self, name, config)

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

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

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

        self.CombinationCutsLoose = """
                                    (ADAMASS(1920*MeV) < %(mDiffDLoose)s*MeV)
                                    & (ADOCA(1,3) < %(MaxDoca)s*mm)
                                    & (ADOCA(2,3) < %(MaxDoca)s*mm)
                                    """ % config

        self.CombinationCutsTight = """
                                    (ADAMASS(1920*MeV) < %(mDiffDTight)s*MeV)
                                    & (ADOCA(1,3) < %(MaxDoca)s*mm)
                                    & (ADOCA(2,3) < %(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

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

        D23Mu_name = name + "D23Mu"
        D2Muee_name = name + "D2Muee"
        D23Pi_name = name + "D23Pi"

        self.selD23Mu = self.makeD23Mu(D23Mu_name)
        self.selD2Muee = self.makeD2Muee(D2Muee_name)
        self.selD23Pi = self.makeD23Pi(D23Pi_name)

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

        self.D23Mu_Line = StrippingLine(
            D23Mu_name + "Line",
            prescale=config["D23MuPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=config["MDSTflag"],
            selection=self.selD23Mu,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": 'ConeIso05Dp',
                    "DaughterLocations": {
                        "[D+ -> ^mu+  mu+  l]CC": "ConeIso05mu1",
                        "[D+ ->  mu+ ^mu+  l]CC": "ConeIso05mu2",
                        "[D+ ->  mu+  mu+ ^l]CC": "ConeIso05mu3",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": 'ConeIso10Dp',
                    "DaughterLocations": {
                        "[D+ -> ^mu+  mu+  l]CC": "ConeIso10mu1",
                        "[D+ ->  mu+ ^mu+  l]CC": "ConeIso10mu2",
                        "[D+ ->  mu+  mu+ ^l]CC": "ConeIso10mu3",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": 'ConeIso15Dp',
                    "DaughterLocations": {
                        "[D+ -> ^mu+  mu+  l]CC": "ConeIso15mu1",
                        "[D+ ->  mu+ ^mu+  l]CC": "ConeIso15mu2",
                        "[D+ ->  mu+  mu+ ^l]CC": "ConeIso15mu3",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "[D+ -> ^mu+  mu+  l]CC": "TrackIsoBDTmu1",
                        "[D+ ->  mu+ ^mu+  l]CC": "TrackIsoBDTmu2",
                        "[D+ ->  mu+  mu+ ^l]CC": "TrackIsoBDTmu3",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "[D+ -> ^mu+  mu+  l]CC": "BsMuMuTrackIsomu1",
                        "[D+ ->  mu+ ^mu+  l]CC": "BsMuMuTrackIsomu2",
                        "[D+ ->  mu+  mu+ ^l]CC": "BsMuMuTrackIsomu3",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        self.D2Muee_Line = StrippingLine(
            D2Muee_name + "Line",
            prescale=config["D2MueePrescale"],
            postscale=config["Postscale"],
            MDSTFlag=config["MDSTflag"],
            selection=self.selD2Muee,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": 'ConeIso05Dp',
                    "DaughterLocations": {
                        "[D+ -> ^l  l  l]CC": "ConeIso05mu",
                        "[D+ ->  l ^l  l]CC": "ConeIso05e1",
                        "[D+ ->  l  l ^l]CC": "ConeIso05e2",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": 'ConeIso10Dp',
                    "DaughterLocations": {
                        "[D+ -> ^l  l  l]CC": "ConeIso10mu",
                        "[D+ ->  l ^l  l]CC": "ConeIso10e1",
                        "[D+ ->  l  l ^l]CC": "ConeIso10e2",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": 'ConeIso15Dp',
                    "DaughterLocations": {
                        "[D+ -> ^l  l  l]CC": "ConeIso15mu",
                        "[D+ ->  l ^l  l]CC": "ConeIso15e1",
                        "[D+ ->  l  l ^l]CC": "ConeIso15e2",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "[D+ -> ^l  l  l]CC": "TrackIsoBDTmu",
                        "[D+ ->  l ^l  l]CC": "TrackIsoBDTe1",
                        "[D+ ->  l  l ^l]CC": "TrackIsoBDTe2",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "[D+ -> ^l  l  l]CC": "BsMuMuTrackIsomu1",
                        "[D+ ->  l ^l  l]CC": "BsMuMuTrackIsomu2",
                        "[D+ ->  l  l ^l]CC": "BsMuMuTrackIsomu3",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        self.D23Pi_Line = StrippingLine(
            D23Pi_name + "Line",
            prescale=config["D23PiPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=config["MDSTflag"],
            selection=self.selD23Pi,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": 'ConeIso05Dp',
                    "DaughterLocations": {
                        "[D+ -> ^pi+  pi+  pi-]CC": "ConeIso05pi1",
                        "[D+ ->  pi+ ^pi+  pi-]CC": "ConeIso05pi2",
                        "[D+ ->  pi+  pi+ ^pi-]CC": "ConeIso05pi3",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": 'ConeIso10Dp',
                    "DaughterLocations": {
                        "[D+ -> ^pi+  pi+  pi-]CC": "ConeIso10pi1",
                        "[D+ ->  pi+ ^pi+  pi-]CC": "ConeIso10pi2",
                        "[D+ ->  pi+  pi+ ^pi-]CC": "ConeIso10pi3",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": 'ConeIso15Dp',
                    "DaughterLocations": {
                        "[D+ -> ^pi+  pi+  pi-]CC": "ConeIso15pi1",
                        "[D+ ->  pi+ ^pi+  pi-]CC": "ConeIso15pi2",
                        "[D+ ->  pi+  pi+ ^pi-]CC": "ConeIso15pi3",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "[D+ -> ^pi+  pi+  pi-]CC": "TrackIsoBDTpi1",
                        "[D+ ->  pi+ ^pi+  pi-]CC": "TrackIsoBDTpi2",
                        "[D+ ->  pi+  pi+ ^pi-]CC": "TrackIsoBDTpi3",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "[D+ -> ^pi+  pi+  pi-]CC": "TrackIsoBDTpi1",
                        "[D+ ->  pi+ ^pi+  pi-]CC": "TrackIsoBDTpi2",
                        "[D+ ->  pi+  pi+ ^pi-]CC": "TrackIsoBDTpi3",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

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

        self.registerLine(self.D23Mu_Line)
        self.registerLine(self.D2Muee_Line)
        self.registerLine(self.D23Pi_Line)
示例#26
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)
        self.name = name
        self.config = config
        """
        Di letpons
        """
        from StandardParticles import StdDiElectronFromTracks, StdLooseDiMuon

        self.SelDiElectron = self.createSubSel(
            OutputList=self.name + "SelDiElectron",
            InputList=StdDiElectronFromTracks,
            Cuts=config['DiElectronCuts'])

        self.SelDiMuon = self.createSubSel(OutputList=self.name + "SelDiMuon",
                                           InputList=StdLooseDiMuon,
                                           Cuts=config['DiMuonCuts'])
        """
        Basic particles, long tracks
        """
        from StandardParticles import StdLooseANNPions, StdLooseANNKaons, StdLooseANNProtons

        self.SelPions = self.createSubSel(OutputList=self.name + "SelPions",
                                          InputList=StdLooseANNPions,
                                          Cuts=config['PionCuts'])

        self.SelKaons = self.createSubSel(OutputList=self.name + "SelKaons",
                                          InputList=StdLooseANNKaons,
                                          Cuts=config['KaonCuts'])

        self.SelProtons = self.createSubSel(OutputList=self.name +
                                            "SelProtons",
                                            InputList=StdLooseANNProtons,
                                            Cuts=config['ProtonCuts'])

        from StandardParticles import StdAllLooseANNPions
        self.SelPions4LP = self.createSubSel(OutputList=self.name +
                                             "SelPions4LP",
                                             InputList=StdAllLooseANNPions,
                                             Cuts=config['Pion4LPCuts'])
        """
        Kstar
        """
        from StandardParticles import StdVeryLooseDetachedKst2Kpi

        self.SelKstar = self.createSubSel(
            OutputList=self.name + "SelKstar",
            InputList=StdVeryLooseDetachedKst2Kpi,
            Cuts=config['KstarCuts'])
        """
        Kshort, both LL and DD
        """
        from StandardParticles import StdLooseKsDD, StdLooseKsLL

        self.SelKsDD = self.createSubSel(OutputList=self.name + "SelKsDD",
                                         InputList=StdLooseKsDD,
                                         Cuts=config['KsDDCuts'])
        """ 
        self.SelKsLL = self.createSubSel( OutputList = self.name + "SelKsLL",
                                          InputList = StdLooseKsLL,
                                          Cuts = config['KsLLCuts'] )
        """

        self.SelKsLL = self.createCombinationSel(
            OutputList=self.name + "SelKsLL",
            DecayDescriptor="KS0 -> pi+ pi-",
            DaughterLists=[self.SelPions4LP],
            PreVertexCuts=config['KsLLComCuts'],
            PostVertexCuts=config['KsLLCuts'])

        self.SelKs = MergedSelection(
            self.name + "SelKs",
            RequiredSelections=[self.SelKsDD, self.SelKsLL])
        """
        Phi 
        """
        from StandardParticles import StdLoosePhi2KK

        self.SelPhi = self.createSubSel(OutputList=self.name + "SelPhi",
                                        InputList=StdLoosePhi2KK,
                                        Cuts=config['PhiCuts'])
        """
        Lambda, both LL and DD
        """
        from StandardParticles import StdLooseLambdaDD, StdLooseLambdaLL

        self.SelLambdaDD = self.createSubSel(OutputList=self.name +
                                             "SelLambdaDD",
                                             InputList=StdLooseLambdaDD,
                                             Cuts=config['LambdaDDCuts'])

        self.SelLambdaLL = self.createCombinationSel(
            OutputList=self.name + "SelLambdaLL",
            DecayDescriptor="[Lambda0 -> p+ pi-]cc",
            DaughterLists=[self.SelProtons, self.SelPions4LP],
            PreVertexCuts=config['LambdaLLComCuts'],
            PostVertexCuts=config['LambdaLLCuts'])

        self.SelLambda = MergedSelection(
            self.name + "SelLambda",
            RequiredSelections=[self.SelLambdaDD, self.SelLambdaLL])
        """
        Lambda* -> p K
        """
        self.SelLambdastar = self.createCombinationSel(
            OutputList=self.name + "SelLambdastar",
            DecayDescriptor="[Lambda(1520)0 -> p+ K-]cc",
            DaughterLists=[self.SelProtons, self.SelKaons],
            PreVertexCuts=config['LambdastarComCuts'],
            PostVertexCuts=config['LambdastarCuts'])

        #
        #  Stripping lines here
        #
        self.B2LLHVars = {
            "sqrt(L1_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 1, 1))",
            "sqrt(L2_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 1, 2))",
            "sqrt(Jpsi_IPCHI2_OWNPV}": "sqrt(CHILD(MIPCHI2DV(), 1 ))",
            "sqrt(H_IPCHI2_OWNPV}": "sqrt(CHILD(MIPCHI2DV(), 2 ))",
            "sqrt(B_IPCHI2_OWNPV)": "sqrt(BPVIPCHI2())",
            "log(L1_PT)": "log(CHILD(PT, 1, 1))",
            "log(L2_PT)": "log(CHILD(PT, 1, 2))",
            "log(Jpsi_PT)": "log(CHILD(PT, 1))",
            "log(H_PT)": "log(CHILD(PT, 2))",
            "log(B_PT)": "log(PT)",
            "sqrt(Jpsi_FDCHI2_OWNPV)": "sqrt(CHILD(BPVVDCHI2,1))",
            "sqrt(B_FDCHI2_OWNPV)": "sqrt(BPVVDCHI2)",
            "B_DIRA_OWNPV": "BPVDIRA"
        }
        """
        Bu2eeK
        """
        self.SelBu2eeK = self.createCombinationSel(
            OutputList=self.name + "SelBu2eeK",
            DecayDescriptor="[B+ -> J/psi(1S) K+]cc",
            DaughterLists=[self.SelDiElectron, self.SelKaons],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBu2eeK = self.applyMVA(self.name + "MvaBu2eeK",
                                       SelB=self.SelBu2eeK,
                                       MVAVars=self.B2LLHVars,
                                       MVACutValue=config['Bu2eeKMVACut'],
                                       MVAxmlFile=config['Bu2LLKXmlFile'])

        self.Bu2eeKLine = StrippingLine(
            self.name + '_Bu2eeKLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBu2eeK],
            MDSTFlag=False)

        self.registerLine(self.Bu2eeKLine)
        """
        Bu2mumuK
        """
        self.SelBu2mumuK = self.createCombinationSel(
            OutputList=self.name + "SelBu2mumuK",
            DecayDescriptor="[B+ -> J/psi(1S) K+]cc",
            DaughterLists=[self.SelDiMuon, self.SelKaons],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBu2mumuK = self.applyMVA(self.name + "MvaBu2mumuK",
                                         SelB=self.SelBu2mumuK,
                                         MVAVars=self.B2LLHVars,
                                         MVACutValue=config['Bu2mumuKMVACut'],
                                         MVAxmlFile=config['Bu2LLKXmlFile'])

        self.Bu2mumuKLine = StrippingLine(
            self.name + '_Bu2mumuKLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBu2mumuK],
            MDSTFlag=False)

        self.registerLine(self.Bu2mumuKLine)

        #
        # Bd2LLKstar
        #
        """
        B2LLXVars
        """
        self.B2LLXVars = {
            "sqrt(L1_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 1, 1))",
            "sqrt(L2_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 1, 2))",
            "sqrt(Jpsi_IPCHI2_OWNPV}": "sqrt(CHILD(MIPCHI2DV(), 1 ))",
            "sqrt(H1_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 2, 1))",
            "sqrt(H2_IPCHI2_OWNPV)": "sqrt(CHILD(MIPCHI2DV(), 2, 2))",
            "sqrt(X_IPCHI2_OWNPV}": "sqrt(CHILD(MIPCHI2DV(), 2 ))",
            "sqrt(B_IPCHI2_OWNPV)": "sqrt(BPVIPCHI2())",
            "log(L1_PT)": "log(CHILD(PT, 1, 1))",
            "log(L2_PT)": "log(CHILD(PT, 1, 2))",
            "log(Jpsi_PT)": "log(CHILD(PT, 1))",
            "log(H1_PT)": "log(CHILD(PT, 2, 1))",
            "log(H2_PT)": "log(CHILD(PT, 2, 2))",
            "log(X_PT)": "log(CHILD(PT, 2))",
            "log(B_PT)": "log(PT)",
            "sqrt(Jpsi_FDCHI2_OWNPV)": "sqrt(CHILD(BPVVDCHI2,1))",
            "sqrt(X_FDCHI2_OWNPV)": "sqrt(CHILD(BPVVDCHI2,2))",
            "sqrt(B_FDCHI2_OWNPV)": "sqrt(BPVVDCHI2)",
            "B_DIRA_OWNPV": "BPVDIRA"
        }
        """
        Bd2eeKstar
        """
        self.SelBd2eeKstar = self.createCombinationSel(
            OutputList=self.name + "SelBd2eeKstar",
            DecayDescriptor="[B0 -> J/psi(1S) K*(892)0]cc",
            DaughterLists=[self.SelDiElectron, self.SelKstar],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBd2eeKstar = self.applyMVA(
            self.name + "MvaBd2eeKstar",
            SelB=self.SelBd2eeKstar,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Bd2eeKstarMVACut'],
            MVAxmlFile=config['Bd2LLKstarXmlFile'])

        self.Bd2eeKstarLine = StrippingLine(
            self.name + '_Bd2eeKstarLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBd2eeKstar],
            MDSTFlag=False)

        self.registerLine(self.Bd2eeKstarLine)
        """
        Bd2mumuKstar
        """
        self.SelBd2mumuKstar = self.createCombinationSel(
            OutputList=self.name + "SelBd2mumuKstar",
            DecayDescriptor="[B0 -> J/psi(1S) K*(892)0]cc",
            DaughterLists=[self.SelDiMuon, self.SelKstar],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBd2mumuKstar = self.applyMVA(
            self.name + "MvaBd2mumuKstar",
            SelB=self.SelBd2mumuKstar,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Bd2mumuKstarMVACut'],
            MVAxmlFile=config['Bd2LLKstarXmlFile'])

        self.Bd2mumuKstarLine = StrippingLine(
            self.name + '_Bd2mumuKstarLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBd2mumuKstar],
            MDSTFlag=False)

        self.registerLine(self.Bd2mumuKstarLine)
        """
        Bd2eeKs
        """
        self.SelBd2eeKs = self.createCombinationSel(
            OutputList=self.name + "SelBd2eeKs",
            DecayDescriptor="B0 -> J/psi(1S) KS0",
            DaughterLists=[self.SelDiElectron, self.SelKs],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBd2eeKs = self.applyMVA(self.name + "MvaBd2eeKs",
                                        SelB=self.SelBd2eeKs,
                                        MVAVars=self.B2LLXVars,
                                        MVACutValue=config['Bd2eeKsMVACut'],
                                        MVAxmlFile=config['Bd2LLKsXmlFile'])

        self.Bd2eeKsLine = StrippingLine(
            self.name + '_Bd2eeKsLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBd2eeKs],
            MDSTFlag=False)

        self.registerLine(self.Bd2eeKsLine)
        """
        Bd2mumuKs
        """
        self.SelBd2mumuKs = self.createCombinationSel(
            OutputList=self.name + "SelBd2mumuKs",
            DecayDescriptor="B0 -> J/psi(1S) KS0",
            DaughterLists=[self.SelDiMuon, self.SelKs],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBd2mumuKs = self.applyMVA(
            self.name + "MvaBd2mumuKs",
            SelB=self.SelBd2mumuKs,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Bd2mumuKsMVACut'],
            MVAxmlFile=config['Bd2LLKsXmlFile'])

        self.Bd2mumuKsLine = StrippingLine(
            self.name + '_Bd2mumuKsLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBd2mumuKs],
            MDSTFlag=False)

        self.registerLine(self.Bd2mumuKsLine)
        """
        Bs2eePhi
        """
        self.SelBs2eePhi = self.createCombinationSel(
            OutputList=self.name + "SelBs2eePhi",
            DecayDescriptor="B_s0 -> J/psi(1S) phi(1020)",
            DaughterLists=[self.SelDiElectron, self.SelPhi],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBs2eePhi = self.applyMVA(self.name + "MvaBs2eePhi",
                                         SelB=self.SelBs2eePhi,
                                         MVAVars=self.B2LLXVars,
                                         MVACutValue=config['Bs2eePhiMVACut'],
                                         MVAxmlFile=config['Bs2LLPhiXmlFile'])

        self.Bs2eePhiLine = StrippingLine(
            self.name + '_Bs2eePhiLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBs2eePhi],
            MDSTFlag=False)

        self.registerLine(self.Bs2eePhiLine)
        """
        Bs2mumuPhi
        """
        self.SelBs2mumuPhi = self.createCombinationSel(
            OutputList=self.name + "SelBs2mumuPhi",
            DecayDescriptor="B_s0 -> J/psi(1S) phi(1020)",
            DaughterLists=[self.SelDiMuon, self.SelPhi],
            PreVertexCuts=config['BComCuts'],
            PostVertexCuts=config['BMomCuts'])

        self.MvaBs2mumuPhi = self.applyMVA(
            self.name + "MvaBs2mumuPhi",
            SelB=self.SelBs2mumuPhi,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Bs2mumuPhiMVACut'],
            MVAxmlFile=config['Bs2LLPhiXmlFile'])

        self.Bs2mumuPhiLine = StrippingLine(
            self.name + '_Bs2mumuPhiLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaBs2mumuPhi],
            MDSTFlag=False)

        self.registerLine(self.Bs2mumuPhiLine)
        """
        Lb2eeLambda
        """
        self.SelLb2eeLambda = self.createCombinationSel(
            OutputList=self.name + "SelLb2eeLambda",
            DecayDescriptor="[Lambda_b0 -> J/psi(1S) Lambda0]cc",
            DaughterLists=[self.SelDiElectron, self.SelLambda],
            PreVertexCuts=config['LbComCuts'],
            PostVertexCuts=config['LbMomCuts'])

        self.MvaLb2eeLambda = self.applyMVA(
            self.name + "MvaLb2eeLambda",
            SelB=self.SelLb2eeLambda,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Lb2eeLambdaMVACut'],
            MVAxmlFile=config['Lb2LLLambdaXmlFile'])

        self.Lb2eeLambdaLine = StrippingLine(
            self.name + '_Lb2eeLambdaLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaLb2eeLambda],
            MDSTFlag=False)

        self.registerLine(self.Lb2eeLambdaLine)
        """
        Lb2mumuLambda
        """
        self.SelLb2mumuLambda = self.createCombinationSel(
            OutputList=self.name + "SelLb2mumuLambda",
            DecayDescriptor="[Lambda_b0 -> J/psi(1S) Lambda0]cc",
            DaughterLists=[self.SelDiMuon, self.SelLambda],
            PreVertexCuts=config['LbComCuts'],
            PostVertexCuts=config['LbMomCuts'])

        self.MvaLb2mumuLambda = self.applyMVA(
            self.name + "MvaLb2mumuLambda",
            SelB=self.SelLb2mumuLambda,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Lb2mumuLambdaMVACut'],
            MVAxmlFile=config['Lb2LLLambdaXmlFile'])

        self.Lb2mumuLambdaLine = StrippingLine(
            self.name + '_Lb2mumuLambdaLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaLb2mumuLambda],
            MDSTFlag=False)

        self.registerLine(self.Lb2mumuLambdaLine)

        #
        # Lb-> LL Kstar
        #
        """
        Lb2eePK
        """

        self.SelLb2eePK = self.createCombinationSel(
            OutputList=self.name + "SelLb2eePK",
            DecayDescriptor="[Lambda_b0 -> J/psi(1S) Lambda(1520)0]cc",
            DaughterLists=[self.SelDiElectron, self.SelLambdastar],
            PreVertexCuts=config['LbComCuts'],
            PostVertexCuts=config['LbMomCuts'])

        self.MvaLb2eePK = self.applyMVA(self.name + "MvaLb2eePK",
                                        SelB=self.SelLb2eePK,
                                        MVAVars=self.B2LLXVars,
                                        MVACutValue=config['Lb2eePKMVACut'],
                                        MVAxmlFile=config['Lb2LLPKXmlFile'])

        self.Lb2eePKLine = StrippingLine(
            self.name + '_Lb2eePKLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaLb2eePK],
            MDSTFlag=False)

        self.registerLine(self.Lb2eePKLine)
        """
        Lb2mumuPK
        """
        self.SelLb2mumuPK = self.createCombinationSel(
            OutputList=self.name + "SelLb2mumuPK",
            DecayDescriptor="[Lambda_b0 -> J/psi(1S) Lambda(1520)0]cc",
            DaughterLists=[self.SelDiMuon, self.SelLambdastar],
            PreVertexCuts=config['LbComCuts'],
            PostVertexCuts=config['LbMomCuts'])

        self.MvaLb2mumuPK = self.applyMVA(
            self.name + "MvaLb2mumuPK",
            SelB=self.SelLb2mumuPK,
            MVAVars=self.B2LLXVars,
            MVACutValue=config['Lb2mumuPKMVACut'],
            MVAxmlFile=config['Lb2LLPKXmlFile'])

        self.Lb2mumuPKLine = StrippingLine(
            self.name + '_Lb2mumuPKLine',
            RelatedInfoTools=config['RelatedInfoTools'],
            algos=[self.MvaLb2mumuPK],
            MDSTFlag=False)

        self.registerLine(self.Lb2mumuPKLine)
示例#27
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=config["MDSTflag"],
            selection=self.selB24p,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": 'ConeIso05B0',
                    "DaughterLocations": {
                        "Beauty -> ^X  X  X  X": "ConeIso05p1",
                        "Beauty ->  X ^X  X  X": "ConeIso05p2",
                        "Beauty ->  X  X ^X  X": "ConeIso05p3",
                        "Beauty ->  X  X  X ^X": "ConeIso05p4",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": 'ConeIso10B0',
                    "DaughterLocations": {
                        "Beauty -> ^X  X  X  X": "ConeIso10p1",
                        "Beauty ->  X ^X  X  X": "ConeIso10p2",
                        "Beauty ->  X  X ^X  X": "ConeIso10p3",
                        "Beauty ->  X  X  X ^X": "ConeIso10p4",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": 'ConeIso15B0',
                    "DaughterLocations": {
                        "Beauty -> ^X  X  X  X": "ConeIso15p1",
                        "Beauty ->  X ^X  X  X": "ConeIso15p2",
                        "Beauty ->  X  X ^X  X": "ConeIso15p3",
                        "Beauty ->  X  X  X ^X": "ConeIso15p4",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "Beauty -> ^X  X  X  X": "TrackIsoBDTp1",
                        "Beauty ->  X ^X  X  X": "TrackIsoBDTp2",
                        "Beauty ->  X  X ^X  X": "TrackIsoBDTp3",
                        "Beauty ->  X  X  X ^X": "TrackIsoBDTp4",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "Beauty -> ^X  X  X  X": "BsMuMuTrackIsop1",
                        "Beauty ->  X ^X  X  X": "BsMuMuTrackIsop2",
                        "Beauty ->  X  X ^X  X": "BsMuMuTrackIsop3",
                        "Beauty ->  X  X  X ^X": "BsMuMuTrackIsop4",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools
        )  # closes Strippingline

        self.B2JpsiKpi_Line = StrippingLine(
            B2JpsiKpi_name + "Line",
            prescale=config["B2JpsiKpiPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=config["MDSTflag"],
            selection=self.selB2JpsiKpi,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": "ConeIso05B0",
                    "DaughterLocations": {
                        "[B0 -> ^p+  p~-  K+  pi-]CC": "ConeIso05p1",
                        "[B0 ->  p+ ^p~-  K+  pi-]CC": "ConeIso05p2",
                        "[B0 ->  p+  p~- ^K+  pi-]CC": "ConeIso05K",
                        "[B0 ->  p+  p~-  K+ ^pi-]CC": "ConeIso05pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": "ConeIso10B0",
                    "DaughterLocations": {
                        "[B0 -> ^p+  p~-  K+  pi-]CC": "ConeIso10p1",
                        "[B0 ->  p+ ^p~-  K+  pi-]CC": "ConeIso10p2",
                        "[B0 ->  p+  p~- ^K+  pi-]CC": "ConeIso10K",
                        "[B0 ->  p+  p~-  K+ ^pi-]CC": "ConeIso10pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": "ConeIso15B0",
                    "DaughterLocations": {
                        "[B0 -> ^p+  p~-  K+  pi-]CC": "ConeIso15p1",
                        "[B0 ->  p+ ^p~-  K+  pi-]CC": "ConeIso15p2",
                        "[B0 ->  p+  p~- ^K+  pi-]CC": "ConeIso15K",
                        "[B0 ->  p+  p~-  K+ ^pi-]CC": "ConeIso15pi",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "[B0 -> ^p+  p~-  K+  pi-]CC": "TrackIsoBDTp1",
                        "[B0 ->  p+ ^p~-  K+  pi-]CC": "TrackIsoBDTp2",
                        "[B0 ->  p+  p~- ^K+  pi-]CC": "TrackIsoBDTK",
                        "[B0 ->  p+  p~-  K+ ^pi-]CC": "TrackIsoBDTpi",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "[B0 -> ^p+  p~-  K+  pi-]CC": "BsMuMuTrackIsop1",
                        "[B0 ->  p+ ^p~-  K+  pi-]CC": "BsMuMuTrackIsop2",
                        "[B0 ->  p+  p~- ^K+  pi-]CC": "BsMuMuTrackIsoK",
                        "[B0 ->  p+  p~-  K+ ^pi-]CC": "BsMuMuTrackIsopi",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

        self.B2PhiKh_Line = StrippingLine(
            B2PhiKh_name + "Line",
            prescale=config["B2PhiKhPrescale"],
            postscale=config["Postscale"],
            MDSTFlag=config["MDSTflag"],
            selection=self.selB2PhiKh,
            RelatedInfoTools=[
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 0.5,
                    "Variables": [],
                    "Location": "ConeIso05B0",
                    "DaughterLocations": {
                        "[B0 -> ^K+  K-  K+  pi-]CC": "ConeIso05K1",
                        "[B0 ->  K+ ^K-  K+  pi-]CC": "ConeIso05K2",
                        "[B0 ->  K+  K- ^K+  pi-]CC": "ConeIso05K3",
                        "[B0 ->  K+  K-  K+ ^pi-]CC": "ConeIso05pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.0,
                    "Variables": [],
                    "Location": "ConeIso10B0",
                    "DaughterLocations": {
                        "[B0 -> ^K+  K-  K+  pi-]CC": "ConeIso10K1",
                        "[B0 ->  K+ ^K-  K+  pi-]CC": "ConeIso10K2",
                        "[B0 ->  K+  K- ^K+  pi-]CC": "ConeIso10K3",
                        "[B0 ->  K+  K-  K+ ^pi-]CC": "ConeIso10pi",
                    },
                },
                {
                    "Type": "RelInfoConeVariables",
                    "ConeAngle": 1.5,
                    "Variables": [],
                    "Location": "ConeIso15B0",
                    "DaughterLocations": {
                        "[B0 -> ^K+  K-  K+  pi-]CC": "ConeIso15K1",
                        "[B0 ->  K+ ^K-  K+  pi-]CC": "ConeIso15K2",
                        "[B0 ->  K+  K- ^K+  pi-]CC": "ConeIso15K3",
                        "[B0 ->  K+  K-  K+ ^pi-]CC": "ConeIso15pi",
                    },
                },
                {
                    "Type": "RelInfoTrackIsolationBDT",
                    "Variables": 0,
                    "DaughterLocations": {
                        "[B0 -> ^K+  K-  K+  pi-]CC": "TrackIsoBDTK1",
                        "[B0 ->  K+ ^K-  K+  pi-]CC": "TrackIsoBDTK2",
                        "[B0 ->  K+  K- ^K+  pi-]CC": "TrackIsoBDTK3",
                        "[B0 ->  K+  K-  K+ ^pi-]CC": "TrackIsoBDTpi",
                    },
                },
                {
                    "Type": "RelInfoBs2MuMuTrackIsolations",
                    "Variables": [],
                    "IsoTwoBody": True,
                    "DaughterLocations": {
                        "[B0 -> ^K+  K-  K+  pi-]CC": "BsMuMuTrackIsoK1",
                        "[B0 ->  K+ ^K-  K+  pi-]CC": "BsMuMuTrackIsoK2",
                        "[B0 ->  K+  K- ^K+  pi-]CC": "BsMuMuTrackIsoK3",
                        "[B0 ->  K+  K-  K+ ^pi-]CC": "BsMuMuTrackIsopi",
                    },
                },
            ] + config["CommonRelInfoTools"]  # end of RelatedInfoTools 
        )  # closes Strippingline

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

        self.registerLine(self.B24p_Line)
        self.registerLine(self.B2JpsiKpi_Line)
        self.registerLine(self.B2PhiKh_Line)
示例#28
0
    def __init__(self, name, config):
        """Initialise this LineBuilder instance."""
        self.name = name
        self.config = config
        LineBuilder.__init__(self, name, config)

        # Line names
        lambdac_name = '{0}Lambdac2PKPi'.format(name)
        lambdac_pKK_name = '{0}Lambdac2PKK'.format(name)
        lambdac_ppipi_name = '{0}Lambdac2PPiPi'.format(name)
        lambdac_ppiK_name = '{0}Lambdac2PPiKWS'.format(name)
        sigmacz_name = '{0}Sigmacz2LambdacPi'.format(name)
        sigmacpp_name = '{0}Sigmacpp2LambdacPi'.format(name)

        # Build pion, kaon, and proton cut strings
        daugCuts = ('(PT > {0[Daug_All_PT_MIN]})'
                    '& (BPVIPCHI2() > {0[Daug_All_BPVIPCHI2_MIN]})').format(
                        self.config)
        pidFiducialCuts = (
            '(in_range({0[Daug_P_MIN]}, P, {0[Daug_P_MAX]}))'
            '& (in_range({0[Daug_ETA_MIN]}, ETA, {0[Daug_ETA_MAX]}))').format(
                self.config)
        protonPIDCuts = (
            pidFiducialCuts + '& ((PIDp - PIDpi) > {0[Proton_PIDpPIDpi_MIN]})'
            '& ((PIDp - PIDK) > {0[Proton_PIDpPIDK_MIN]})').format(self.config)
        kaonPIDCuts = (pidFiducialCuts +
                       '& ((PIDK - PIDpi) > {0[K_PIDK_MIN]})').format(
                           self.config)
        pionPIDCuts = (pidFiducialCuts +
                       '& ((PIDK - PIDpi) < {0[Pi_PIDK_MAX]})').format(
                           self.config)
        pionCuts = '{0} & {1}'.format(daugCuts, pionPIDCuts)
        kaonCuts = '{0} & {1}'.format(daugCuts, kaonPIDCuts)
        protonCuts = '{0} & {1}'.format(daugCuts, protonPIDCuts)

        # Filter StdAllNoPIDs particles
        self.inPions = Selection('PionsFor{0}'.format(name),
                                 Algorithm=FilterDesktop(
                                     'FilterPionsFor{0}'.format(name),
                                     Code=pionCuts),
                                 RequiredSelections=[StdAllNoPIDsPions])
        self.inKaons = Selection('KaonsFor{0}'.format(name),
                                 Algorithm=FilterDesktop(
                                     'FilterKaonsFor{0}'.format(name),
                                     Code=kaonCuts),
                                 RequiredSelections=[StdAllNoPIDsKaons])
        self.inProtons = Selection('ProtonsFor{0}'.format(name),
                                   Algorithm=FilterDesktop(
                                       'FilterProtonsFor{0}'.format(name),
                                       Code=protonCuts),
                                   RequiredSelections=[StdAllNoPIDsProtons])
        # Don't used filtered pions for soft pions, cut would be too tight
        self.inSoftPions = StdAllNoPIDsPions

        self.selLambdac2PKPi = self.makeLambdac2PHH(
            name=lambdac_name,
            inputSel=[self.inProtons, self.inKaons, self.inPions],
            decDescriptors=self.Lambdac2PKPi)
        self.selLambdac2PKPiMVA = self.makeMVASelection(
            '{0}MVASelection'.format(lambdac_name), self.selLambdac2PKPi)

        self.selLambdac2PKK = self.makeLambdac2PHH(
            name=lambdac_pKK_name,
            inputSel=[self.inProtons, self.inKaons],
            decDescriptors=self.Lambdac2PKK)
        self.selLambdac2PKKMVA = self.makeMVASelection(
            '{0}MVASelection'.format(lambdac_pKK_name), self.selLambdac2PKK)

        self.selLambdac2PPiPi = self.makeLambdac2PHH(
            name=lambdac_ppipi_name,
            inputSel=[self.inProtons, self.inPions],
            decDescriptors=self.Lambdac2PPiPi)
        self.selLambdac2PPiPiMVA = self.makeMVASelection(
            '{0}MVASelection'.format(lambdac_ppipi_name),
            self.selLambdac2PPiPi)

        self.selLambdac2PPiKWS = self.makeLambdac2PHH(
            name=lambdac_ppiK_name,
            inputSel=[self.inProtons, self.inKaons, self.inPions],
            decDescriptors=self.Lambdac2PPiKWS)
        self.selLambdac2PPiKWSMVA = self.makeMVASelection(
            '{0}MVASelection'.format(lambdac_ppiK_name),
            self.selLambdac2PPiKWS)

        self.selSigmacz2LambdacPi = self.makeSigmac2LambdacPi(
            name=sigmacz_name,
            inputSel=[self.selLambdac2PKPiMVA, self.inSoftPions],
            decDescriptors=self.Sigmacz2LambdacPi)

        self.selSigmacpp2LambdacPi = self.makeSigmac2LambdacPi(
            name=sigmacpp_name,
            inputSel=[self.selLambdac2PKPiMVA, self.inSoftPions],
            decDescriptors=self.Sigmacpp2LambdacPi)

        self.line_Lambdac2PKPi = self.make_line(
            name='{0}Line'.format(lambdac_name),
            selection=self.selLambdac2PKPiMVA,
            prescale=config['PrescaleLambdac2PKPi'],
            postscale=config['PostscaleLambdac2PKPi'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])

        self.line_Lambdac2PKK = self.make_line(
            name='{0}Line'.format(lambdac_pKK_name),
            selection=self.selLambdac2PKKMVA,
            prescale=config['PrescaleLambdac2PKK'],
            postscale=config['PostscaleLambdac2PKK'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])

        self.line_Lambdac2PPiPi = self.make_line(
            name='{0}Line'.format(lambdac_ppipi_name),
            selection=self.selLambdac2PPiPiMVA,
            prescale=config['PrescaleLambdac2PPiPi'],
            postscale=config['PostscaleLambdac2PPiPi'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])

        self.line_Lambdac2PPiKWS = self.make_line(
            name='{0}Line'.format(lambdac_ppiK_name),
            selection=self.selLambdac2PPiKWSMVA,
            prescale=config['PrescaleLambdac2PPiKWS'],
            postscale=config['PostscaleLambdac2PPiKWS'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])

        self.line_Sigmacz2LambdacPi = self.make_line(
            name='{0}Line'.format(sigmacz_name),
            selection=self.selSigmacz2LambdacPi,
            prescale=config['PrescaleSigmacz2LambdacPi'],
            postscale=config['PostscaleSigmacz2LambdacPi'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])

        self.line_Sigmacpp2LambdacPi = self.make_line(
            name='{0}Line'.format(sigmacpp_name),
            selection=self.selSigmacpp2LambdacPi,
            prescale=config['PrescaleSigmacpp2LambdacPi'],
            postscale=config['PostscaleSigmacpp2LambdacPi'],
            HLT1=config['Hlt1Filter'],
            HLT2=config['Hlt2Filter'])
示例#29
0
    def __init__(self, name, config):

        LineBuilder.__init__(self, name, config)

        self.selPi = makePi('PiFor' + name,
                            MinPiPt=config['MinPiPt'],
                            MinPiIPChi2DV=config['MinPiIPChi2DV'],
                            MaxPiChi2=config['MaxPiChi2'],
                            MinPiPIDK=config['MinPiPIDK'],
                            MinPiPIDp=config['MinPiPIDp'])
        self.selK = makeK('KFor' + name,
                          MinKPt=config['MinKPt'],
                          MinKIPChi2DV=config['MinKIPChi2DV'],
                          MaxKChi2=config['MaxKChi2'],
                          MinKPIDPi=config['MinKPIDPi'],
                          MinKPIDp=config['MinKPIDp'])
        self.selp = makep('pFor' + name,
                          MinpPt=config['MinpPt'],
                          MinpIPChi2DV=config['MinpIPChi2DV'],
                          MaxpChi2=config['MaxpChi2'],
                          MinpPIDPi=config['MinpPIDPi'],
                          MinpPIDK=config['MinpPIDK'])
        self.selKs = makeKs('KsFor' + name,
                            MaxKsDeltaM=config['MaxKsDeltaM'],
                            MinKsPt=config['MinKsPt'],
                            MaxKsVertChi2DOF=config['MaxKsVertChi2DOF'],
                            MinKsPVVDChi2=config['MinKsPVVDChi2'],
                            MinKsIPChi2=config['MinKsIPChi2'],
                            MinKsDauPt=config['MinKsDauPt'],
                            MinKsDauIPChi2=config['MinKsDauIPChi2'],
                            MaxKsDauTrkChi2=config['MaxKsDauTrkChi2'])
        self.selLm = makeLm('LmFor' + name,
                            MaxLmDeltaM=config['MaxLmDeltaM'],
                            MinLmPt=config['MinLmPt'],
                            MaxLmVertChi2DOF=config['MaxLmVertChi2DOF'],
                            MinLmPVVDChi2=config['MinLmPVVDChi2'],
                            MinLmIPChi2=config['MinLmIPChi2'],
                            MinLmPrtPt=config['MinLmPrtPt'],
                            MinLmPiPt=config['MinLmPiPt'],
                            MinLmPrtIPChi2=config['MinLmPrtIPChi2'],
                            MinLmPiIPChi2=config['MinLmPiIPChi2'],
                            MaxLmPrtTrkChi2=config['MaxLmPrtTrkChi2'],
                            MaxLmPiTrkChi2=config['MaxLmPiTrkChi2'])
        self.selDz = makeDz('DzFor' + name,
                            MaxDzDeltaM=config['MaxDzDeltaM'],
                            MinDzPt=config['MinDzPt'],
                            MaxDzVertChi2DOF=config['MaxDzVertChi2DOF'],
                            MinDzPVVDChi2=config['MinDzPVVDChi2'],
                            MinDzIPChi2=config['MinDzIPChi2'],
                            MinDzDauPt=config['MinDzDauPt'],
                            MinDzDauIPChi2=config['MinDzDauIPChi2'],
                            MaxDzDauTrkChi2=config['MaxDzDauTrkChi2'],
                            MinDzKPIDPi=config['MinDzKPIDPi'],
                            MinDzPiPIDK=config['MinDzPiPIDK'])
        self.selDp = makeDp('DpFor' + name,
                            MaxDpDeltaM=config['MaxDpDeltaM'],
                            MinDpPt=config['MinDpPt'],
                            MaxDpVertChi2DOF=config['MaxDpVertChi2DOF'],
                            MinDpPVVDChi2=config['MinDpPVVDChi2'],
                            MinDpIPChi2=config['MinDpIPChi2'],
                            MinDpDauPt=config['MinDpDauPt'],
                            MinDpDauIPChi2=config['MinDpDauIPChi2'],
                            MaxDpDauTrkChi2=config['MaxDpDauTrkChi2'],
                            MinDpKPIDPi=config['MinDpKPIDPi'],
                            MinDpPiPIDK=config['MinDpPiPIDK'])
        self.selDs = makeDs('DsFor' + name,
                            MaxDsDeltaM=config['MaxDsDeltaM'],
                            MinDsPt=config['MinDsPt'],
                            MaxDsVertChi2DOF=config['MaxDsVertChi2DOF'],
                            MinDsPVVDChi2=config['MinDsPVVDChi2'],
                            MinDsIPChi2=config['MinDsIPChi2'],
                            MinDsDauPt=config['MinDsDauPt'],
                            MinDsDauIPChi2=config['MinDsDauIPChi2'],
                            MaxDsDauTrkChi2=config['MaxDsDauTrkChi2'],
                            MinDsKmPIDPi=config['MinDsKmPIDPi'],
                            MinDsKpPIDPi=config['MinDsKpPIDPi'],
                            MinDsPiPIDK=config['MinDsPiPIDK'])
        self.selLc = makeLc('LcFor' + name,
                            MaxLcDeltaM=config['MaxLcDeltaM'],
                            MinLcPt=config['MinLcPt'],
                            MaxLcVertChi2DOF=config['MaxLcVertChi2DOF'],
                            MinLcPVVDChi2=config['MinLcPVVDChi2'],
                            MinLcIPChi2=config['MinLcIPChi2'],
                            MinLcDauPt=config['MinLcDauPt'],
                            MinLcDauIPChi2=config['MinLcDauIPChi2'],
                            MaxLcDauTrkChi2=config['MaxLcDauTrkChi2'],
                            MinLcKPIDPi=config['MinLcKPIDPi'],
                            MinLcpPIDPi=config['MinLcpPIDPi'],
                            MinLcpPIDK=config['MinLcpPIDK'],
                            MinLcPiPIDK=config['MinLcPiPIDK'])
        self.selPh = makePh('PhFor' + name,
                            MaxPhDeltaM=config['MaxPhDeltaM'],
                            MinPhPt=config['MinPhPt'],
                            MaxPhVertChi2DOF=config['MaxPhVertChi2DOF'],
                            MinPhPVVDChi2=config['MinPhPVVDChi2'],
                            MinPhIPChi2=config['MinPhIPChi2'],
                            MinPhDauPt=config['MinPhDauPt'],
                            MinPhDauIPChi2=config['MinPhDauIPChi2'],
                            MaxPhDauTrkChi2=config['MaxPhDauTrkChi2'])
        self.selKS = makeKS('KSFor' + name,
                            MaxKSDeltaM=config['MaxKSDeltaM'],
                            MinKSPt=config['MinKSPt'],
                            MaxKSVertChi2DOF=config['MaxKSVertChi2DOF'],
                            MinKSPVVDChi2=config['MinKSPVVDChi2'],
                            MinKSIPChi2=config['MinKSIPChi2'],
                            MinKSDauPt=config['MinKSDauPt'],
                            MinKSDauIPChi2=config['MinKSDauIPChi2'],
                            MaxKSDauTrkChi2=config['MaxKSDauTrkChi2'],
                            MinKSKPIDPi=config['MinKSKPIDPi'],
                            MinKSPiPIDK=config['MinKSPiPIDK'])
        self.selJp = makeJp('JpFor' + name,
                            MaxJpDeltaM=config['MaxJpDeltaM'],
                            MinJpPt=config['MinJpPt'],
                            MaxJpVertChi2DOF=config['MaxJpVertChi2DOF'],
                            MinJpPVVDChi2=config['MinJpPVVDChi2'],
                            MinJpIPChi2=config['MinJpIPChi2'],
                            MinJpDauPt=config['MinJpDauPt'],
                            MinJpDauIPChi2=config['MinJpDauIPChi2'],
                            MaxJpDauTrkChi2=config['MaxJpDauTrkChi2'])
        self.selDS = makeDS('DSFor' + name,
                            MaxDSDeltaM=config['MaxDSDeltaM'],
                            MinDSPt=config['MinDSPt'],
                            MaxDSVertChi2DOF=config['MaxDSVertChi2DOF'],
                            MinDSPVVDChi2=config['MinDSPVVDChi2'],
                            MinDSIPChi2=config['MinDSIPChi2'],
                            MinDSPiPt=config['MinDSPiPt'],
                            MinDSPiIPChi2=config['MinDSPiIPChi2'],
                            MaxDSPiTrkChi2=config['MaxDSPiTrkChi2'],
                            MaxDSD0DeltaM=config['MaxDSD0DeltaM'],
                            MinDSD0Pt=config['MinDSD0Pt'],
                            MaxDSD0VertChi2DOF=config['MaxDSD0VertChi2DOF'],
                            MinDSD0PVVDChi2=config['MinDSD0PVVDChi2'],
                            MinDSD0IPChi2=config['MinDSD0IPChi2'],
                            MinDSD0DauPt=config['MinDSD0DauPt'],
                            MinDSD0DauIPChi2=config['MinDSD0DauIPChi2'],
                            MaxDSD0DauTrkChi2=config['MaxDSD0DauTrkChi2'])

        self.selB2nbody = makeB2nbody(
            name,
            PiSel=self.selPi,
            KSel=self.selK,
            pSel=self.selp,
            KsSel=self.selKs,
            LmSel=self.selLm,
            DzSel=self.selDz,
            DpSel=self.selDp,
            DsSel=self.selDs,
            LcSel=self.selLc,
            PhSel=self.selPh,
            KSSel=self.selKS,
            JpSel=self.selJp,
            DSSel=self.selDS,
            nbody=config['nbody'],
            MinBMass=config['MinBMass'],
            MaxBMass=config['MaxBMass'],
            MinBPt=config['MinBPt'],
            MaxBVertChi2DOF=config['MaxBVertChi2DOF'],
            MinBPVVDChi2=config['MinBPVVDChi2'],
            MaxBPVIPChi2=config['MaxBPVIPChi2'],
            MinBPVDIRA=config['MinBPVDIRA'],
            MaxMass=config['MaxMass'],
            MaxNtrk=config['MaxNtrk'],
            MinNvc=config['MinNvc'],
            doPi=config['doPi'],
            doK=config['doK'],
            dop=config['dop'],
            doKs=config['doKs'],
            doLm=config['doLm'],
            doDz=config['doDz'],
            doDp=config['doDp'],
            doDs=config['doDs'],
            doLc=config['doLc'],
            doPh=config['doPh'],
            doKS=config['doKS'],
            doJp=config['doJp'],
            doDS=config['doDS'])
        TrLongFilter = {
            'Code':
            "(recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %s )" %
            config['MaxTrLong'],
            'Preambulo': [
                "from LoKiTracks.decorators import *",
                'from LoKiCore.functions import *'
            ]
        }

        self.line = StrippingLine(name + "Line",
                                  selection=self.selB2nbody,
                                  prescale=config['prescale'],
                                  FILTER=TrLongFilter)
        self.registerLine(self.line)
示例#30
0
    def __init__(self, _name, config) :

        LineBuilder.__init__(self, _name, config)
        
        GECs = { "Code":"( recSummaryTrack(LHCb.RecSummary.nLongTracks, TrLONG) < %(GEC_nLongTrk)s )" %config ,
                 "Preambulo": ["from LoKiTracks.decorators import *"]}
        
        self.KsLLCuts = " (PT> %(KS_LL_PTMIN)s *MeV)" \
            " & (ADMASS('KS0') < %(KS_LL_MASS_WINDOW)s *MeV)"\
            " & (BPVVD > %(KS_LL_FD_MIN)s *mm)" \
            " & (BPVVDCHI2 > %(KS_LL_FDCHI2_MIN)s)" \
            " & CHILDCUT((TRGHOSTPROB < %(GHOSTPROB_MAX)s),1)" \
            " & CHILDCUT((TRGHOSTPROB < %(GHOSTPROB_MAX)s),2)" \
            " & (VFASPF(VCHI2PDOF) < %(KS_LL_VCHI2NDOF_MAX)s)" \
            " & (BPVDIRA > %(KS_LL_DIRA_MIN)s)" %config
        
        self.KsDDCuts = " (PT> %(KS_DD_PTMIN)s *MeV)" \
            " & (ADMASS('KS0') < %(KS_DD_MASS_WINDOW)s *MeV)"\
            " & (BPVVD > %(KS_DD_FD_MIN)s *mm)" \
            " & (BPVVDCHI2 > %(KS_DD_FDCHI2_MIN)s)" \
            " & (VFASPF(VCHI2PDOF) < %(KS_DD_VCHI2NDOF_MAX)s)" \
            " & (BPVDIRA > %(KS_DD_DIRA_MIN)s)" %config

        self.KaonCuts = " (PT> %(K_PTMIN)s *MeV)" \
            " & (PIDK > %(K_PIDK_MIN)s)"\
            " & (MIPCHI2DV(PRIMARY) < %(K_IPCHI2_MAX)s)"\
            " & (TRGHOSTPROB < %(GHOSTPROB_MAX)s)" %config
        
        self.MuonCuts = " (PT> %(Mu_PTMIN)s *MeV)" \
            " & (PIDmu > %(Mu_PIDmu_MIN)s)"\
            " & (MIPCHI2DV(PRIMARY) < %(Mu_IPCHI2_MAX)s)"\
            " & (TRGHOSTPROB < %(GHOSTPROB_MAX)s)" %config
        
        self.PionCuts = " (PT> %(Pi_PTMIN)s *MeV)" \
            " & (MIPCHI2DV(PRIMARY) < %(Pi_IPCHI2_MAX)s)"\
            " & (TRGHOSTPROB < %(GHOSTPROB_MAX)s)" %config
        
	self.LambdaCuts = " (PT> %(Lambda_PTMIN)s *MeV)" \
            " & (ADMASS('Lambda0') < %(Lambda_MASS_WINDOW)s *MeV)"\
            " & (BPVVD > %(Lambda_FD_MIN)s *mm)" \
            " & (BPVVDCHI2 > %(Lambda_FDCHI2_MIN)s)" \
            " & CHILDCUT((TRGHOSTPROB < %(GHOSTPROB_MAX)s),1)" \
            " & CHILDCUT((TRGHOSTPROB < %(GHOSTPROB_MAX)s),2)" \
            " & (VFASPF(VCHI2PDOF) < %(Lambda_VCHI2NDOF_MAX)s)" \
            " & (BPVDIRA > %(Lambda_DIRA_MIN)s)" %config
        
        self.KsLL = Selection( "KsLLFor" + _name,
                               Algorithm = FilterDesktop(name = "KsLLFilterFor"+_name, Code = self.KsLLCuts ),
                               RequiredSelections = [DataOnDemand(Location = 'Phys/StdLooseKsLL/Particles')])
        
        self.KsDD = Selection( "KsDDFor" + _name,
                               Algorithm = FilterDesktop(name = "KsDDFilterFor"+_name, Code = self.KsDDCuts ),
                               RequiredSelections = [DataOnDemand(Location = 'Phys/StdLooseKsDD/Particles')])
        
        self.Ks = MergedSelection("KsFor"+_name, RequiredSelections = [ self.KsLL, self.KsDD] )
        
        self.Kaons = Selection( "KaonsFor" + _name,
                                Algorithm = FilterDesktop(name = "KaonFilterFor"+_name, Code = self.KaonCuts ),
                                RequiredSelections = [StdAllLooseKaons])
        
        self.Muons = Selection( "MuonsFor" + _name,
                                Algorithm = FilterDesktop(name = "MuonFilterFor"+_name, Code = self.MuonCuts ),
                                RequiredSelections = [StdAllLooseMuons])
        
	self.Pions = Selection( "PionsFor" + _name,
                                Algorithm = FilterDesktop(name = "PionFilterFor"+_name, Code = self.PionCuts ),
                                #RequiredSelections = [StdAllLoosePions])
                                RequiredSelections = [DataOnDemand(Location = 'Phys/StdAllLoosePions/Particles')])
        
        self.LambdaDD = Selection( "LambdaDDFor" + _name,
                                Algorithm = FilterDesktop(name = "LambdaDDFilterFor"+_name, Code = self.LambdaCuts ),
                                RequiredSelections = [DataOnDemand(Location = 'Phys/StdLooseLambdaDD/Particles')])
	
        self.LambdaLL = Selection( "LambdaLLFor" + _name,
                                Algorithm = FilterDesktop(name = "LambdaLLFilterFor"+_name, Code = self.LambdaCuts ),
                                RequiredSelections = [DataOnDemand(Location = 'Phys/StdLooseLambdaLL/Particles')])
        
        self.Lambdas = MergedSelection("LambdasFor"+_name, RequiredSelections = [ self.LambdaLL, self.LambdaDD] )
        
        ####### phi(1020) #############

        self.PhiToKK_Line = VMaker(_name+"_PhiToKK",[self.Kaons],"phi(1020) -> K+ K-",GECs,config,config["prescale_PhiToKK"])
        self.registerLine(self.PhiToKK_Line)        
        
        self.PhiToMuMu_Line = VMaker(_name+"_PhiToMuMu",[self.Muons],"phi(1020) -> mu+ mu-",GECs,config,config["prescale_PhiToMuMu"])
        self.registerLine(self.PhiToMuMu_Line)        
        
        self.PhiToKsKs_Line = VMaker(_name+"_PhiToKsKs",[self.Ks],"phi(1020) -> KS0 KS0",GECs,config,config["prescale_PhiToKsKs"])
        self.registerLine(self.PhiToKsKs_Line)        
        
        ########### J/psi(1S)  ################
        
        self.JPsiToKK_Line = VMaker(_name+"_JPsiToKK",[self.Kaons],"J/psi(1S) -> K+ K-",GECs,config,config["prescale_JPsiToKK"])
        self.registerLine(self.JPsiToKK_Line)        
        
        self.JPsiToKsKs_Line = VMaker(_name+"_JPsiToKsKs",[self.Ks],"J/psi(1S) -> KS0 KS0",GECs,config,config["prescale_JPsiToKsKs"])
        self.registerLine(self.JPsiToKsKs_Line)        
        
	########### D0  ################
        
        self.D0ToKsKs_Line = VMaker(_name+"_D0ToKsKs",[self.Ks],"D0 -> KS0 KS0",GECs,config,config["prescale_D0ToKsKs"])
        self.registerLine(self.D0ToKsKs_Line)        
        
	########### eta_c  ################
        
        self.EtaCToLL_Line = VMaker(_name+"_EtaCToLL",[self.Lambdas],"eta_c(1S) -> Lambda0 Lambda~0",GECs,config,config["prescale_EtaCToLL"])
        self.registerLine(self.EtaCToLL_Line)        

        ####### D -> phi(1020) pi #############

        self.CombPhiForD = CombineParticles( name = "Comb_PhiForDToPhiPiKsKs",
                           DecayDescriptor = "phi(1020) -> KS0 KS0",
                           CombinationCut = "( (ACHILDCUT(CHILDCUT(ISLONG,1),1)) | (ACHILDCUT(CHILDCUT(ISLONG,1),2)) ) & (APT > %(Phi_PT_MIN)s *MeV) & (AM < %(Phi_MASS_MAX)s + 30*MeV) & (ACUTDOCACHI2(%(Phi_DOCACHI2_MAX)s,''))" %config,
                           MotherCut = "(M < %(Phi_MASS_MAX)s +20*MeV) & (VFASPF(VCHI2/VDOF) < %(Phi_VCHI2NDOF_MAX)s) & (MIPCHI2DV(PRIMARY) < %(Phi_IPCHI2_MAX)s)" %config)

        self.SelPhiForD = Selection(name = "Sel_PhiForDToPhiPiKsKs",
                    Algorithm = self.CombPhiForD,
                    RequiredSelections = [self.Ks])
        
        self.DToPhiPiKsKs_Line = VMaker(_name+"_DToPhiPiKsKs",[ self.SelPhiForD, self.Pions],"D_s+ -> phi(1020) pi+",GECs,config,config["prescale_DToPhiPiKsKs"])
        self.registerLine(self.DToPhiPiKsKs_Line)        
示例#31
0
    def __init__(self, name, config):
        LineBuilder.__init__(self, name, config)
        #
        selPions = self._makePions(name="PionsFor" + name, config=config)
        selKaons = self._makeKaons(name="KaonsFor" + name, config=config)
        selMuons = self._makeMuons(name="MuonsFor" + name, config=config)

        selDipionsD = self._makeDipionsforD(name="DipionsDFor" + name,
                                            pionSel=selPions,
                                            kaonSel=selKaons,
                                            config=config)
        selDipions = DataOnDemand("Phys/StdLooseDetachedDipion/Particles")
        #

        rawTau = DataOnDemand("Phys/StdLooseDetachedTau3pi/Particles")

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

        selD = self._makeD(name="DFor" + name,
                           pionSel=selPions,
                           dipionSel=selDipionsD,
                           config=config)
        #
        selB2TauTau, selB2DD = self._makeB2XX(name=name,
                                              tauSel=selTau,
                                              DSel=selD,
                                              config=config)
        selB2TauTauSS, selB2DDSS = self._makeB2XXSS(name=name,
                                                    tauSel=selTau,
                                                    DSel=selD,
                                                    config=config)
        selB2TauMu, selB2DMu = self._makeB2XMu(name=name,
                                               tauSel=selTau,
                                               DSel=selD,
                                               muonSel=selMuons,
                                               config=config)
        selB2TauMuSS, selB2DMuSS = self._makeB2XMuSS(name=name,
                                                     tauSel=selTau,
                                                     DSel=selD,
                                                     muonSel=selMuons,
                                                     config=config)
        #
        self.TauTau_TOSLine = StrippingLine(
            name + "_TauTau_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauTau_TOSLinePrescale'],
            postscale=config['B2TauTau_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForTauTau", selB2TauTau))
        self.TauTau_SS_TOSLine = StrippingLine(
            name + "_TauTau_SameSign_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauTau_TOSLinePrescale'],
            postscale=config['B2TauTau_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForTauTauSS", selB2TauTauSS))
        self.DD_TOSLine = StrippingLine(
            name + "_DD_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DD_TOSLinePrescale'],
            postscale=config['B2DD_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForDD", selB2DD))
        self.DD_SS_TOSLine = StrippingLine(
            name + "_DD_SameSign_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DD_TOSLinePrescale'],
            postscale=config['B2DD_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForDDSS", selB2DDSS))
        self.TauMu_TOSLine = StrippingLine(
            name + "_TauMu_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauMu_TOSLinePrescale'],
            postscale=config['B2TauMu_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForTauMu", selB2TauMu))
        self.TauMu_SS_TOSLine = StrippingLine(
            name + "_TauMu_SameSign_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauMu_TOSLinePrescale'],
            postscale=config['B2TauMu_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForTauMuSS", selB2TauMuSS))
        self.DMu_TOSLine = StrippingLine(
            name + "_DMu_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DMu_TOSLinePrescale'],
            postscale=config['B2DMu_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForDMu", selB2DMu))
        self.DMu_SS_TOSLine = StrippingLine(
            name + "_DMu_SameSign_TOSLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DMu_TOSLinePrescale'],
            postscale=config['B2DMu_TOSLinePostscale'],
            selection=self._makeTOS(name + "_TOSForDMuSS", selB2DMuSS))
        #
        self.TauTau_TISLine = StrippingLine(
            name + "_TauTau_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauTau_TISLinePrescale'],
            postscale=config['B2TauTau_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForTauTau", selB2TauTau))
        self.TauTau_SS_TISLine = StrippingLine(
            name + "_TauTau_SameSign_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauTau_TISLinePrescale'],
            postscale=config['B2TauTau_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForTauTauSS", selB2TauTauSS))
        self.DD_TISLine = StrippingLine(
            name + "_DD_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DD_TISLinePrescale'],
            postscale=config['B2DD_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForDD", selB2DD))
        self.DD_SS_TISLine = StrippingLine(
            name + "_DD_SameSign_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DD_TISLinePrescale'],
            postscale=config['B2DD_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForDDSS", selB2DDSS))
        self.TauMu_TISLine = StrippingLine(
            name + "_TauMu_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauMu_TISLinePrescale'],
            postscale=config['B2TauMu_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForTauMu", selB2TauMu))
        self.TauMu_SS_TISLine = StrippingLine(
            name + "_TauMu_SameSign_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2TauMu_TISLinePrescale'],
            postscale=config['B2TauMu_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForTauMuSS", selB2TauMuSS))
        self.DMu_TISLine = StrippingLine(
            name + "_DMu_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DMu_TISLinePrescale'],
            postscale=config['B2DMu_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForDMu", selB2DMu))
        self.DMu_SS_TISLine = StrippingLine(
            name + "_DMu_SameSign_TISLine",
            #HLT         = " HLT_PASS_RE('"+HLT_DECISIONS+"') ",
            prescale=config['B2DMu_TISLinePrescale'],
            postscale=config['B2DMu_TISLinePostscale'],
            selection=self._makeTIS(name + "_TISForDMuSS", selB2DMuSS))
        #
        self.registerLine(self.TauTau_TOSLine)
        self.registerLine(self.DD_TOSLine)
        self.registerLine(self.TauMu_TOSLine)
        self.registerLine(self.DMu_TOSLine)
        self.registerLine(self.TauTau_TISLine)
        self.registerLine(self.DD_TISLine)
        self.registerLine(self.TauMu_TISLine)
        self.registerLine(self.DMu_TISLine)
        self.registerLine(self.TauTau_SS_TOSLine)
        self.registerLine(self.DD_SS_TOSLine)
        self.registerLine(self.TauMu_SS_TOSLine)
        self.registerLine(self.DMu_SS_TOSLine)
        self.registerLine(self.TauTau_SS_TISLine)
        self.registerLine(self.DD_SS_TISLine)
        self.registerLine(self.TauMu_SS_TISLine)
        self.registerLine(self.DMu_SS_TISLine)