############################################################################## # $Id: MuonPidLaCalib.py,v 1.3 2009-05-29 17:30:20 pkoppenb Exp $ # # Author Alessio Sarti <*****@*****.**> # ############################################################################## from Gaudi.Configuration import * from Configurables import CombineParticles, ParticleMonitor, DaVinci muonPIDLaSeq = GaudiSequencer("MuonPIDLambdaSequence") LambdaCalibDDName = "MuonLambdaCalibDD" LambdaCalibDD = CombineParticles(LambdaCalibDDName) LambdaCalibDD.InputLocations = ["StdNoPIDsDownPions", "StdNoPIDsDownProtons"] LambdaCalibDD.DecayDescriptor = "[Lambda0 -> p+ pi-]cc" LambdaCalibDD.CombinationCut = "(ADAMASS('Lambda0')<100*MeV)" LambdaCalibDD.DaughtersCuts = { "p+": "(P>3000*MeV) & (PT>100*MeV) & (ISDOWN) & (0.5<PPINFO(LHCb.ProtoParticle.InAccMuon,-1))", "pi-": "(P>3000*MeV) & (PT>100*MeV) & (ISDOWN) & (0.5<PPINFO(LHCb.ProtoParticle.InAccMuon,-1))" } LambdaCalibDD.MotherCut = " (VFASPF(VCHI2)<5) & (500<BPVVDZ) & (BPVVDZ<2000) & (BPVDIRA>0.9999995) " muonPIDLaSeq.Members += [LambdaCalibDD] plotLamDD = ParticleMonitor("MuonLamdaDDMoni") plotLamDD.InputLocations = [LambdaCalibDDName] plotLamDD.PeakCut = "(ADMASS('Lambda0')<10*MeV)" plotLamDD.SideBandCut = "(ADMASS('Lambda0')>20*MeV)" plotLamDD.PlotTools = ["MassPlotTool"] muonPIDLaSeq.Members += [plotLamDD]
############################ KSDDForBd2Jpsi2MuMuKS = FilterDesktop("StripKSDDForBd2Jpsi2MuMuKS") KSDDForBd2Jpsi2MuMuKS.InputLocations = ["StdLooseKsDD"] KSDDForBd2Jpsi2MuMuKS.Code = " (MINTREE( ('pi+'==ABSID), P) >2.*GeV)"\ "& (MINTREE( ('pi+'==ABSID), MIPCHI2DV(PRIMARY)) >4.)"\ "& (MAXTREE( ('pi+'==ABSID), TRCHI2DOF) <20.)"\ "& (VFASPF(VCHI2/VDOF)<20.)"\ "& (ADMASS('KS0') < 100.0*MeV)" ################ # Bd -> JpsiKS # ################ Bd2JpsiKS = CombineParticles("StripBd2JpsiKS") Bd2JpsiKS.DecayDescriptor = "[B0 -> J/psi(1S) KS0]cc" Bd2JpsiKS.InputLocations = [ "StripKSLLForBd2Jpsi2MuMuKS", "StripKSDDForBd2Jpsi2MuMuKS", "StdLTUnbiasedJpsi2MuMu" ] Bd2JpsiKS.addTool(OfflineVertexFitter()) Bd2JpsiKS.VertexFitters.update({"": "OfflineVertexFitter"}) Bd2JpsiKS.OfflineVertexFitter.useResonanceVertex = False Bd2JpsiKS.ReFitPVs = True Bd2JpsiKS.DaughtersCuts = {'KS0': 'PT>1.*GeV', 'J/psi(1S)': 'PT>1.*GeV'} Bd2JpsiKS.CombinationCut = "ADAMASS('B0') < 300.*MeV" Bd2JpsiKS.MotherCut = "(VFASPF(VCHI2/VDOF)<15)" ############################################ # Create StrippingLine with this selection # ############################################ Bd2JpsiKSLine = StrippingLine(
######################################################################## # # Options for pre-selecting B->hh' and Bs->mu+ mu- events # # @author Angelo Carbone # @date 2009-02-18 # ######################################################################## from Configurables import GaudiSequencer, CombineParticles from StrippingConf.StrippingLine import StrippingLine PreselB2Charged2Body = CombineParticles("PreselB2Charged2Body") PreselB2Charged2Body.InputLocations = ["StdLoosePions"] PreselB2Charged2Body.DecayDescriptor = "B0 -> pi+ pi-" PreselB2Charged2Body.CombinationCut = "((AM>4200*MeV) & (AM<6300*MeV) & (AMAXDOCA('') < 0.08*mm) )" PreselB2Charged2Body.DaughtersCuts = { "pi+" : "(PT>700*MeV) & (MIPDV(PRIMARY)>0.08) & (TRCHI2DOF<5)","pi-" : "(PT>700*MeV) & (MIPDV(PRIMARY)>0.08) & (TRCHI2DOF<5)"} #PreselB2Charged2Body.MotherCut = "(BPVIP()<0.06) & (BPVVDSIGN>1.8) & (INTREE ( (ABSID=='pi+') & (PT>2400*MeV))) & (INTREE ( (ABSID=='pi+') & (MIPDV(PRIMARY)>0.2)))" PreselB2Charged2Body.MotherCut = "ALL" # Create the line for this selection line = StrippingLine('B2Charged2Body' , prescale = 1 , algos = [ PreselB2Charged2Body ] , stream = 'BExclusive' )
# B->JpsiKstar selection # from Gaudi.Configuration import * from StrippingConf.StrippingLine import StrippingLine, StrippingMember from Configurables import CombineParticles, FilterDesktop Strip_Penguin_Jpsi2MuMu = CombineParticles('Strip_Penguin_Jpsi2MuMu') Strip_Penguin_Jpsi2MuMu.InputLocations = ["StdLooseMuons"] Strip_Penguin_Jpsi2MuMu.DecayDescriptor = "J/psi(1S) -> mu+ mu-" Strip_Penguin_Jpsi2MuMu.CombinationCut = "ADAMASS('J/psi(1S)')<100000*MeV" #Strip_Penguin_Jpsi2MuMu.MotherCut = "(VFASPF(VCHI2/VDOF)<64)" Strip_Penguin_Jpsi2MuMu.MotherCut = "ALL" # #### #### # Make the K*... should be a common particle Strip_Penguin_Kstar2KPi = CombineParticles('Strip_Penguin_Kstar2KPi') Strip_Penguin_Kstar2KPi.InputLocations = ["StdLooseKaons", "StdLoosePions"] Strip_Penguin_Kstar2KPi.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc" Strip_Penguin_Kstar2KPi.DaughtersCuts = { "pi+": "(MIPCHI2DV(PRIMARY)>2.25)", "K+": "(MIPCHI2DV(PRIMARY)>2.25)" } Strip_Penguin_Kstar2KPi.CombinationCut = "(ADAMASS('K*(892)0')<600*MeV)" Strip_Penguin_Kstar2KPi.MotherCut = "(VFASPF(VCHI2/VDOF)<100) & (MIPCHI2DV(PRIMARY)>1.5)" #
############################################################################## # $Id: MuonPidJpCalib.py,v 1.4 2009-08-07 08:46:46 pkoppenb Exp $ # # Author Alessio Sarti <*****@*****.**> # ############################################################################## from Gaudi.Configuration import * from Configurables import CombineParticles, ParticleMonitor, DaVinci muonPIDJpSeq = GaudiSequencer("MuonPIDJpsiSequence") JpsiCalibName = "MuonJpsiCalib" JpsiCalib = CombineParticles(JpsiCalibName) JpsiCalib.InputLocations = ["StdNoPIDsMuons"] JpsiCalib.DecayDescriptor = "J/psi(1S) -> mu+ mu-" JpsiCalib.CombinationCut = "(ADAMASS('J/psi(1S)')<300*MeV)" muonscut = "(TRCHI2DOF<3) & (P>3*GeV) & (PT>500*MeV) & (ISLONG) & (0.5<PPINFO(LHCb.ProtoParticle.InAccMuon,-1)) & (PPINFO(LHCb.ProtoParticle.CaloEcalE,-10000)<800*MeV) & (PPINFO(LHCb.ProtoParticle.CaloHcalE,-10000)<4000*MeV) & (PPINFO(LHCb.ProtoParticle.CaloEcalE,-10000)>-10*MeV) & (PPINFO(LHCb.ProtoParticle.CaloHcalE,-10000)>1000*MeV)" JpsiCalib.DaughtersCuts = {"mu+": muonscut, "mu-": muonscut} childcuts = " ( ((CHILDCUT(ISMUON,1)) & (CHILDCUT((PT>1*GeV),1)) & (CHILDCUT((P>10*GeV),1)) ) | ((CHILDCUT(ISMUON,2)) & (CHILDCUT((PT>1*GeV),2)) & (CHILDCUT((P>10*GeV),2))) ) " JpsiCalib.MotherCut = "(VFASPF(VCHI2/VDOF)<3) & " + childcuts childcuts = " ( ((CHILDCUT(ISMUON,1)) & (CHILDCUT((PT>1*GeV),1)) & (CHILDCUT((P>10*GeV),1)) ) | ((CHILDCUT(ISMUON,2)) & (CHILDCUT((PT>1*GeV),2)) & (CHILDCUT((P>10*GeV),2))) ) " JpsiCalib.MotherCut = "(VFASPF(VCHI2/VDOF)<3) & " + childcuts muonPIDJpSeq.Members += [JpsiCalib] plotJPsiPr = ParticleMonitor("MuonJpsiPromptMoni") plotJPsiPr.InputLocations = [JpsiCalibName] plotJPsiPr.PeakCut = "(ADMASS('J/psi(1S)')<50*MeV)" plotJPsiPr.SideBandCut = "(ADMASS('J/psi(1S)')>100*MeV)" plotJPsiPr.PlotTools = ["MassPlotTool"]
Bd->JpsiK* stripping selection using LoKi::Hybrid and python configurables. PV refitting is done. Based on roadmap selection with loose PID cuts. ''' from Gaudi.Configuration import * from StrippingConf.StrippingLine import StrippingLine, StrippingMember from Configurables import FilterDesktop, CombineParticles, OfflineVertexFitter import GaudiKernel.SystemOfUnits as Units ####### # Kst # ####### StdUnbiasedKst2Kpi = CombineParticles("StripStdUnbiasedKst2Kpi") StdUnbiasedKst2Kpi.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc" StdUnbiasedKst2Kpi.InputLocations = ["StdLooseKaons", "StdLoosePions"] StdUnbiasedKst2Kpi.DaughtersCuts = {"K+" : " (MINTREE('K+'==ABSID, (PIDK - PIDp)) >-6.)"\ "& (MINTREE('K+'==ABSID, PIDK) > -5.)" } StdUnbiasedKst2Kpi.CombinationCut = "(ADAMASS('K*(892)0') < 90.*MeV)" StdUnbiasedKst2Kpi.MotherCut = "(VFASPF(VCHI2/VDOF)<20) & (PT > 1000.*MeV)" ###### # Bd # ###### Bd2JpsiKst = CombineParticles("StripBd2JpsiKst") Bd2JpsiKst.DecayDescriptor = "[B0 -> J/psi(1S) K*(892)0]cc" Bd2JpsiKst.InputLocations = [ "StdLTUnbiasedJpsi2MuMu", "StripStdUnbiasedKst2Kpi" ]
# # B->DPi selection for stripping (consider as an example). # This is an example of a simple wrapper over user's own algorithm. # No StrippingMember functionality is used here. # from os import environ from Gaudi.Configuration import * from Configurables import DecayTreeTuple from Configurables import CombineParticles, FilterDesktop from Configurables import TupleToolMCBackgroundInfo, TupleToolMCTruth, BackgroundCategory from StrippingConf.StrippingLine import StrippingLine ######################################################################## B2DhOfflineDplus2KPiPi = CombineParticles("B2DhOfflineDplus2KPiPi") B2DhOfflineDplus2KPiPi.InputLocations = [ "StdTightPions", "StdTightKaons" ] B2DhOfflineDplus2KPiPi.DecayDescriptor = "[D+ -> K- pi+ pi+]cc" B2DhOfflineDplus2KPiPi.DaughtersCuts = {"pi+" : "((PT > 300*MeV) & (P > 2*GeV) & (MIPCHI2DV(PRIMARY) > 9))" , "K+" : "((PT> 300*MeV) & (P > 2*GeV) & (MIPCHI2DV(PRIMARY) > 9))"}; B2DhOfflineDplus2KPiPi.CombinationCut = "( (ADAMASS('D+') < 21*MeV) & (APT > 2.*GeV) )"; B2DhOfflineDplus2KPiPi.MotherCut = "((VFASPF(VCHI2/VDOF)<15) & (BPVVDCHI2>100.) & (MIPCHI2DV(PRIMARY)>9))"; ######################################################################## B2DhOfflineBachelor = FilterDesktop("B2DhOfflineBachelor") B2DhOfflineBachelor.InputLocations = [ "StdLoosePions" ] B2DhOfflineBachelor.Code = "((PT > 500*MeV) & (P > 2*GeV) & (MIPCHI2DV(PRIMARY) > 9))" ######################################################################## B2DhOfflineSel = CombineParticles("B2DhOfflineSel") B2DhOfflineSel.InputLocations = [ "B2DhOfflineDplus2KPiPi", "B2DhOfflineBachelor"] B2DhOfflineSel.DecayDescriptor = "[B0 -> D+ pi-]cc" B2DhOfflineSel.DaughtersCuts = { "D+" : "ALL" }
############################# # Standard Unbiased Phi->KK # ############################# StdUnbiasedPhi2KK = FilterDesktop("StripStdUnbiasedPhi2KK") StdUnbiasedPhi2KK.InputLocations = ["StdLooseUnbiasedPhi2KK"] StdUnbiasedPhi2KK.Code = " (MINTREE('K+'==ABSID, PIDK) > -5.0)" \ "& (ADMASS('phi(1020)') < 15.*MeV)" \ "& (PT > 1000.*MeV)" \ "& (VFASPF(VCHI2/VDOF) < 20.0)" ###### # Bs # ###### Bs2JpsiPhi = CombineParticles("StripBs2JpsiPhi") Bs2JpsiPhi.DecayDescriptor = "B_s0 -> J/psi(1S) phi(1020)" Bs2JpsiPhi.InputLocations = [ "StdLTUnbiasedJpsi2MuMu", "StripStdUnbiasedPhi2KK" ] # Set the OfflineVertexFitter to keep the 4 tracks and not the J/Psi Phi Bs2JpsiPhi.addTool(OfflineVertexFitter()) Bs2JpsiPhi.VertexFitters.update({"": "OfflineVertexFitter"}) Bs2JpsiPhi.OfflineVertexFitter.useResonanceVertex = False Bs2JpsiPhi.ReFitPVs = True # Basic + loose offline PID Bs2JpsiPhi.CombinationCut = "ADAMASS('B_s0') < 300.*MeV" Bs2JpsiPhi.MotherCut = "(VFASPF(VCHI2/VDOF)<5) & (MIPCHI2DV(PRIMARY) < 25.0)" ############################################ # Create StrippingLine with this selection # ############################################ Bs2JpsiPhiLine = StrippingLine('Bs2JpsiPhiLine',
Bu->JpsiK stripping selection using LoKi::Hybrid and python configurables. PV refitting is done. Based on roadmap selection with loose PID cuts. ''' from Gaudi.Configuration import * from StrippingConf.StrippingLine import StrippingLine, StrippingMember from Configurables import FilterDesktop, CombineParticles, OfflineVertexFitter import GaudiKernel.SystemOfUnits as Units ###### # Bu # ###### Bu2JpsiK = CombineParticles("StripBu2JpsiK") Bu2JpsiK.DecayDescriptor = "[ B+ -> J/psi(1S) K+ ]cc" Bu2JpsiK.InputLocations = ["StdLTUnbiasedJpsi2MuMu", "StdLooseKaons"] Bu2JpsiK.addTool( OfflineVertexFitter() ) Bu2JpsiK.VertexFitters.update( { "" : "OfflineVertexFitter"} ) Bu2JpsiK.OfflineVertexFitter.useResonanceVertex = False Bu2JpsiK.ReFitPVs = True Bu2JpsiK.DaughtersCuts = {"K+" : " ((PIDK - PIDp)>-6.)"\ "& (PIDK > -5.)"\ "& (TRCHI2DOF<4.)"\ "& (PT>1300.*MeV)"\ "& (P>10000.*MeV)" } Bu2JpsiK.CombinationCut = "ADAMASS('B+') < 300.*MeV"