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)
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()
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)
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)
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]
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)
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()
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)
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()
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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 )
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))
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)
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)
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)
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'])
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)
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)
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)