def makeTau2PhiMu(name): """ Please contact Giulio Dujany if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter Tau2PhiMu = CombineParticles() Tau2PhiMu.DecayDescriptor = " [ tau+ -> phi(1020) mu+ ]cc" makePhi = CombineParticles() makePhi.DecayDescriptor = "phi(1020) -> K+ K-" makePhi.DaughtersCuts = { "K+": "(ISLONG) & (TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & (PT>300*MeV) & (PIDK > 0) & ( BPVIPCHI2 () > 9 )", "K-": "(ISLONG) & (TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & (PT>300*MeV) & (PIDK > 0) & ( BPVIPCHI2 () > 9 )" } _kaons = DataOnDemand(Location='Phys/StdLooseKaons/Particles') makePhi.CombinationCut = "(ADAMASS('phi(1020)')<30*MeV)" makePhi.MotherCut = " ( VFASPF(VCHI2) < 25 ) & (MIPCHI2DV(PRIMARY)> 9)" SelPhi = Selection(name + "SelPhi", Algorithm=makePhi, RequiredSelections=[_kaons]) Tau2PhiMu.DaughtersCuts = { "mu-": " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3 ) & (TRGHOSTPROB<0.3) & ( BPVIPCHI2 () > 9 )" } Tau2PhiMu.CombinationCut = "(ADAMASS('tau-')<150*MeV)" Tau2PhiMu.MotherCut = "( VFASPF(VCHI2) < 25 ) & ( (BPVLTIME () * c_light) > 50 * micrometer ) & ( BPVIPCHI2() < 100 ) " _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles") SelTau = Selection(name + "makeTau", Algorithm=Tau2PhiMu, RequiredSelections=[SelPhi, _stdLooseMuons]) # Trigger selection from Configurables import TisTosParticleTagger _tisTosFilter = TisTosParticleTagger(name + "Triggered") _tisTosFilter.TisTosSpecs = { 'L0Global%TIS': 0, 'L0MuonDecision%TOS': 0, 'Hlt1TrackAllL0Decision%TOS': 0, 'Hlt1TrackMuonDecision%TOS': 0 } SelTau_triggered = Selection( name, Algorithm=_tisTosFilter, RequiredSelections=[SelTau], ) return SelTau_triggered
def buildPIDLineWithJpsi(self, configRowId): ## Resolves possible clone statements _config = self._resolveCloning(configRowId) ## Prepares the tag&probe cut if needed _combinationCutJpsi = _config['JpsiCombinationCut'] _combinationCut = _config['CombinationCut'] if 'TagAndProbeCut' in _config: _id = ["1", "2"] _combinationCutJpsi += ' & ' _combinationCutJpsi += self._buildTagProbeCut( _config['TagAndProbeCut'], _id) ###print _combinationCut _algorithmJpsi = CombineParticles() #_algorithmJpsi = CombineParticles(self.name + configRowId + 'JpsiAlgorithm') _algorithmJpsi.CombinationCut = _combinationCutJpsi _algorithmJpsi.DaughtersCuts = _config['DaughtersCuts'] _algorithmJpsi.MotherCut = _config['JpsiMotherCut'] _algorithmJpsi.DecayDescriptor = _config['DecayDescriptorJpsi'] _requiredSelections = [ DataOnDemand(x) for x in _config['InputTESJpsi'] ] _selectionJpsi = Selection(self.name + configRowId + 'SelectionJpsi', Algorithm=_algorithmJpsi, RequiredSelections=_requiredSelections) _algorithm = CombineParticles() #_algorithm = CombineParticles(self.name + configRowId + 'Algorithm') _algorithm.CombinationCut = _combinationCut _algorithm.DaughtersCuts = _config['DaughtersCuts'] _algorithm.MotherCut = _config['MotherCut'] _algorithm.DecayDescriptor = _config['DecayDescriptor'] _requiredSelections = [_selectionJpsi] + [ DataOnDemand(x) for x in _config['InputTES'] ] _selection = Selection(self.name + configRowId + 'Selection', Algorithm=_algorithm, RequiredSelections=_requiredSelections) _line = StrippingLine( self.name + configRowId + 'Line', prescale=_config['Prescale'], checkPV=_config['CheckPV'], EnableFlavourTagging=False, RequiredRawEvents=_config['RawEvent'] #, MDSTFlag = _config['MDST.DST'] , HLT1=_config['Hlt1Filter'], HLT2=_config['Hlt2Filter'], algos=[_selection], ODIN=self.odin) return _line
def makePhi2KK(name, KaonPT, KaonIPCHI2, KaonPIDK, PhiMassWin, PhiPT, PhiVCHI2): """ Create and return a Phi -> KK Selection object. Starts from DataOnDemand 'Phys/StdLoosePhi2KK'. Arguments: name : name of the Selection. KaonPT : Minimum transverse momentum of K (MeV). KaonIPCHI2 : Minimum impact parameter chi2 of K. KaonPIDK : Minimum PID_{K-pi} of K. PhiPT : Minimum transverse momentum of Phi (MeV). PhiMassWin : Phi invariant mass window around PDG mass value (MeV). PhiVCHI2 : Maximum Phi vertex chi2 (per degree of freedom?) """ _stdKaons = DataOnDemand(Location="Phys/StdLooseKaons/Particles") _Phi2KK = CombineParticles() _Phi2KK.DecayDescriptor = "phi(1020) -> K+ K-" _Phi2KK.DaughtersCuts = { "K+": "(PT>%(KaonPT)s*MeV)&(MIPCHI2DV(PRIMARY)>%(KaonIPCHI2)s)&(PIDK > %(KaonPIDK)s)" % locals() } _Phi2KK.CombinationCut = "(ADAMASS('phi(1020)') < %(PhiMassWin)s *MeV)" % locals( ) _Phi2KK.MotherCut = "(VFASPF(VCHI2/VDOF)< %(PhiVCHI2)s) & (PT > %(PhiPT)s *MeV)" % locals( ) return Selection(name, Algorithm=_Phi2KK, RequiredSelections=[_stdKaons])
def Dstar(name, D0Sel, config): """ Selection for D* """ _DSt = CombineParticles() _DSt.DecayDescriptor = "[D*(2010)+ -> D0 pi+]cc" slowPiCuts = "(PT>%(SlowPiPt)s) & (TRCHI2DOF < %(SlowPiTrkChi2)s)" % locals( )['config'] d0Cuts = "ALL" _DSt.DaughtersCuts = {'pi+': slowPiCuts, 'D0': d0Cuts} combcut = """ (APT>%(DstarPt)s) & (ADAMASS('D*(2010)+')<75) & (AM - AM1 < 165 * MeV) """ _DSt.CombinationCut = combcut % locals()['config'] mothercut = """ (VFASPF(VCHI2PDOF)<%(DstarVtxChi2Ndof)s) & (M-MAXTREE('D0'==ABSID,M)<%(DeltaM_Max)s) & (M-MAXTREE('D0'==ABSID,M)>%(DeltaM_Min)s) """ _DSt.MotherCut = mothercut % locals()['config'] DSt = Selection("SelDSt2D0PiFor" + name, Algorithm=_DSt, RequiredSelections=[StdAllNoPIDsPions, D0Sel]) return DSt
def __Dimuon__(self, conf): ''' Create a new dimuon from scratch ''' wsCombinations = conf['DimuonWS'] from GaudiConfUtils.ConfigurableGenerators import CombineParticles CombineDiMuon = CombineParticles() if wsCombinations == True: CombineDiMuon.DecayDescriptors = [ "J/psi(1S) -> mu- mu+", "J/psi(1S) -> mu+ mu+", " J/psi(1S) -> mu- mu-" ] else: CombineDiMuon.DecayDescriptors = ["J/psi(1S) -> mu- mu+"] CombineDiMuon.DaughtersCuts = { "mu+": self.MuonCut, "mu-": self.MuonCut } CombineDiMuon.CombinationCut = self.DiMuonCombCut CombineDiMuon.MotherCut = self.DiMuonCut IsMuonFlag = conf['Muon_IsMuon'] from StandardParticles import StdAllLooseMuons, StdAllVeryLooseMuons Muons = StdAllLooseMuons if IsMuonFlag else StdAllVeryLooseMuons from PhysSelPython.Wrappers import Selection SelDiMuon = Selection("Sel_" + self.name + "_DiMuon", Algorithm=CombineDiMuon, RequiredSelections=[Muons]) return SelDiMuon
def D0(name, config): """ Selection for D0 """ _D0 = CombineParticles() _D0.DecayDescriptor = "[D0 -> K- pi+]cc" dauCutStr = "(PT > %(DaugPt)s) & (P > %(DaugP)s) & (TRCHI2DOF < %(DaugTrkChi2)s) & (MIPCHI2DV(PRIMARY) > %(DaugIPChi2)s)" % locals( )['config'] _D0.DaughtersCuts = {"K+": dauCutStr, "pi+": dauCutStr} _D0.CombinationCut = "(AMINDOCA('')<0.5)&(ADAMASS('D0')<85 * MeV)" % locals( )['config'] mothercut = """ (PT>%(D0Pt)s) & (VFASPF(VCHI2PDOF)<%(D0VtxChi2Ndof)s) & (BPVVDCHI2>%(D0FDChi2)s) & (BPVDIRA>%(D0BPVDira)s) & (BPVIPCHI2()<%(D0IPChi2)s) & (ADMASS('D0') < %(D0MassWin)s ) & ( ADWM( 'D0' , WM( 'pi-' , 'K+') ) > %(DCS_WrongMass)s) """ # take these out as they shape the sidebands # & ( ADWM( 'D0' , WM( 'K-' , 'K+') ) > %(KK_WrongMass)s) # & ( ADWM( 'D0' , WM( 'pi-' , 'pi+') ) > %(PiPi_WrongMass)s) # """ _D0.MotherCut = mothercut % locals()['config'] D0 = Selection("SelD02RSKPiFor" + name, Algorithm=_D0, RequiredSelections=[StdAllNoPIDsKaons, StdAllNoPIDsPions]) return D0
def makeB2KSLLhh( self, name, config ) : """ Create and store a B -> KS(LL) h+ h- Selection object. Arguments: name : name of the Selection. config : config dictionary """ _massCutLow = "(AM>(5279-%s)*MeV)" % config['B_Mlow'] _massCutHigh = "(AM<(5279+%s)*MeV)" % config['B_Mhigh'] _daugMedPtCut = "(ANUM(PT>%s*MeV)>=2)" % config['BDaug_MedPT_PT'] _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config['BDaug_MaxPT_IP'] _hhDocaCut = "(ADOCA(1,2)<%s)" % config['hh_DOCA'] _daugPtSumCut = "((APT1+APT2+APT3)>%s*MeV)" % config['BDaug_LL_PTsum'] _combCuts = _massCutLow+'&'+_massCutHigh+'&'+_daugMedPtCut+'&'+_daugMaxPtIPCut+'&'+_hhDocaCut+'&'+_daugPtSumCut _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['B_VtxChi2'] _diraCut = "(BPVDIRA>%s)" % config['B_Dira'] _ipCut = "(MIPDV(PRIMARY)<%s)" % config['B_IPwrtPV'] _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV'] _fdChi2Cut = "(BPVVDCHI2>%s)" % config['B_LL_FDChi2'] _motherCuts = _vtxChi2Cut+'&'+_diraCut+'&'+_ipCut+'&'+_fdCut+'&'+_fdChi2Cut _B = CombineParticles() _B.DecayDescriptors = [ "B0 -> pi+ pi- KS0", \ "B0 -> K+ pi- KS0", "B0 -> pi+ K- KS0", \ "B0 -> K+ K- KS0" ] _B.DaughtersCuts = { "K+" : "TRCHI2DOF<%s"% config['Trk_Chi2'], "pi+" : "TRCHI2DOF<%s"% config['Trk_Chi2'] } _B.CombinationCut = _combCuts _B.MotherCut = _motherCuts self.selB2KSLLhh = Selection (name, Algorithm = _B, RequiredSelections = [ self.selKS2LL, self.pions, self.kaons ])
def makeD02kpipi0(name): pi0sel = MergedSelection( "Pi0For" + name, RequiredSelections=[StdLooseMergedPi0, StdLooseResolvedPi0]) str_D0_ChargedDau = "(PT>500*MeV) & (P>5*GeV) & (MIPCHI2DV(PRIMARY)>4) & (TRCHI2DOF<5)" str_D0_Pi0 = "(PT>800*MeV) & (P>5*GeV)" str_D0_CombCuts = "(ADAMASS('D0')<200*MeV) & (ADOCA(1,2) < 1.5) & (AHASCHILD(((ABSID == 'K+') | (ABSID == 'pi+')) & (MIPCHI2DV(PRIMARY)>40)))" str_D0_MotherCuts = "(BPVDIRA>0.9) & (PT>2.5*GeV) & (VFASPF(VCHI2/VDOF)<10) & (BPVVDCHI2>36)" str_D0_DecayDescriptor_RS = "[D0 -> K- pi+ pi0]cc" str_D0_Sidebands = "200*MeV" d0 = CombineParticles() d0.DecayDescriptor = str_D0_DecayDescriptor_RS d0.DaughtersCuts = { "K-": str_D0_ChargedDau + ' & ((PPINFO(LHCb.ProtoParticle.RichDLLk,-1000))>0)', "pi+": str_D0_ChargedDau + ' & ((PPINFO(LHCb.ProtoParticle.RichDLLk,-1000))<0)', "pi0": str_D0_Pi0 } d0.CombinationCut = str_D0_CombCuts d0.MotherCut = str_D0_MotherCuts return Selection( "D02Kpipi0For" + name, Algorithm=d0, RequiredSelections=[pi0sel, StdNoPIDsPions, StdNoPIDsKaons])
def makeB2LpLL( self, name, config ) : """ Create and store a B -> Lambda~0(LL) p+ Selection object. Arguments: name : name of the Selection. config : config dictionary """ _massCutLow = "(AM>(5279-%s)*MeV)" % config['B_2bodyMlow'] _massCutHigh = "(AM<(5279+%s)*MeV)" % config['B_2bodyMhigh'] _aptCut = "(APT>%s*MeV)" % config['B_APTmin'] _daugMedPtCut = "(ANUM(PT>%s*MeV)>=2)" % config['BDaug_MedPT_PT'] _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))" % config['BDaug_LL_maxDocaChi2'] _daugPtSumCut = "(APT1>%s*MeV)" % config['B_LL_PTMin'] _combCuts = _aptCut+'&'+_daugPtSumCut+'&'+_daugMedPtCut+'&'+_massCutLow+'&'+_massCutHigh+'&'+_maxDocaChi2Cut _ptCut = "(PT>%s*MeV)" % config['B_PTmin'] _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['B_VtxChi2'] _diraCut = "(BPVDIRA>%s)" % config['B_LL_Dira'] _ipChi2Cut = "(MIPCHI2DV(PRIMARY)<%s)" % config['B_LL_IPCHI2wrtPV'] _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV'] _fdChi2Cut = "(BPVVDCHI2>%s)" % config['B_LL_FDChi2'] _motherCuts = _ptCut+'&'+_vtxChi2Cut+'&'+_diraCut+'&'+_ipChi2Cut+'&'+_fdCut+'&'+_fdChi2Cut _B = CombineParticles() _B.DecayDescriptors = [ "B- -> p~- Lambda0", "B+ -> p+ Lambda~0" ] _B.DaughtersCuts = { "p+" : "TRCHI2DOF<%s"% config['Trk_Chi2'] } _B.CombinationCut = _combCuts _B.MotherCut = _motherCuts return Selection (name, Algorithm = _B, RequiredSelections = [self.selLambda2LL, StdLooseProtons ])
def makeEtaPrime2pipipi(name, config): """ eta' selection for tau -> mu eta' Please contact Guido Andreassi if you think of prescaling this line! Arguments: name : name of the Selection , configuration dictionary. """ EtaPrime2pipipi = CombineParticles() EtaPrime2pipipi.DecayDescriptor = "eta_prime -> pi+ pi- pi0" EtaPrime2pipipi.ReFitPVs = True EtaPrime2pipipi.DaughtersCuts = { "pi+": "{piplus_cuts}".format(**config), "pi-": "{piminus_cuts}".format(**config), "pi0": "{pi0_cuts}".format(**config) } EtaPrime2pipipi.CombinationCut = "{etap_mass_window}".format(**config) EtaPrime2pipipi.MotherCut = "{etap_cuts}".format(**config) _stdLoosePions = DataOnDemand(Location="Phys/StdLoosePions/Particles") _stdLooseResolvedPi0 = DataOnDemand( Location="Phys/StdLooseResolvedPi0/Particles") _stdLooseMergedPi0 = DataOnDemand( Location="Phys/StdLooseMergedPi0/Particles") _stdPi0 = MergedSelection( "Pi0For" + name, RequiredSelections=[_stdLooseResolvedPi0, _stdLooseMergedPi0]) return Selection(name, Algorithm=EtaPrime2pipipi, RequiredSelections=[_stdLoosePions, _stdPi0])
def makeBu2KSDDh(self, name, config): """ Create and store a B -> KS(DD) h+ Selection object. Arguments: name : name of the Selection. config : config dictionary """ _massCutLow = "(AM>(5279-%s)*MeV)" % config['B_Mlow'] _massCutHigh = "(AM<(5279+%s)*MeV)" % config['B_Mhigh'] _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config[ 'BDaug_MaxPT_IP'] _daugPtSumCut = "((APT1+APT2)>%s*MeV)" % config['BDaug_DD_PTsum'] _combCuts = _daugPtSumCut + '&' + _massCutLow + '&' + _massCutHigh + '&' + _daugMaxPtIPCut _pCut = "(P>%s*MeV)" % config['B_Pmin'] _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['B_DD_VtxChi2'] _diraCut = "(BPVDIRA>%s)" % config['B_Dira'] _ipChi2Cut = "(MIPCHI2DV(PRIMARY)<%s)" % config['B_DD_IPCHI2wrtPV'] _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['B_FDwrtPV'] _fdChi2Cut = "(BPVVDCHI2>%s)" % config['B_DD_FDChi2'] _motherCuts = _pCut + '&' + _vtxChi2Cut + '&' + _diraCut + '&' + _ipChi2Cut + '&' + _fdCut + '&' + _fdChi2Cut _B = CombineParticles() _B.DecayDescriptors = ["B+ -> pi+ KS0", "B- -> pi- KS0"] _B.DaughtersCuts = {"pi+": "TRCHI2DOF<%s" % config['Trk_Chi2']} _B.CombinationCut = _combCuts _B.MotherCut = _motherCuts return Selection(name, Algorithm=_B, RequiredSelections=[self.selKS2DD, self.selH])
def makeDetachedJPsi(name): """ detached JPsi selection for B--> JPsi X calibration and normalization channels. Please contact Flavio Archilli if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter DetachedJPsi = CombineParticles() DetachedJPsi.DecayDescriptor = "J/psi(1S) -> e+ e-" #DetachedJPsi.addTool( OfflineVertexFitter ) #DetachedJPsi.ParticleCombiners.update( { "" : "OfflineVertexFitter"} ) #DetachedJPsi.OfflineVertexFitter.useResonanceVertex = False DetachedJPsi.ReFitPVs = True DetachedJPsi.DaughtersCuts = { "e+" : "(TRCHI2DOF < 3 ) "\ "& (MIPCHI2DV(PRIMARY)> 25.) "\ "& (PIDe > 2) "} DetachedJPsi.CombinationCut = "(ADAMASS('J/psi(1S)')<1000*MeV) "\ "& (AMAXDOCA('')<0.3*mm)" DetachedJPsi.MotherCut = "(VFASPF(VCHI2)<9) "\ "& (ADMASS('J/psi(1S)') < 1000*MeV )"\ "& (BPVDIRA > 0) "\ "& (BPVVDCHI2>169)" _stdLooseElectrons = DataOnDemand( Location="Phys/StdLooseElectrons/Particles") return Selection(name, Algorithm=DetachedJPsi, RequiredSelections=[_stdLooseElectrons])
def makeTau2eMuMu(name): """ Please contact Johannes Albrecht if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter Tau2eMuMu = CombineParticles() Tau2eMuMu.DecayDescriptors = [ " [ tau+ -> e+ mu+ mu- ]cc", " [ tau+ -> mu+ mu+ e- ]cc" ] Tau2eMuMu.DaughtersCuts = { "mu+" : " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3 ) & ( BPVIPCHI2 () > 9 ) & (TRGHOSTPROB<0.3) " , "e+" : " ( PT > 300 * MeV ) & ( TRCHI2DOF < 3 ) & ( BPVIPCHI2 () > 9 ) "\ "& (PIDe > 2) " } Tau2eMuMu.CombinationCut = "(ADAMASS('tau+')<200*MeV)" Tau2eMuMu.MotherCut = """ ( VFASPF(VCHI2) < 15 ) & ( (BPVLTIME () * c_light) > 100 * micrometer ) & ( BPVIPCHI2() < 100 ) """ _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles") _stdLooseElectrons = DataOnDemand( Location="Phys/StdLooseElectrons/Particles") return Selection(name, Algorithm=Tau2eMuMu, RequiredSelections=[_stdLooseMuons, _stdLooseElectrons])
def makeB2ee(name): """ Please contact Johannes Albrecht if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter Bs2ee = CombineParticles() Bs2ee.DecayDescriptors = ["B_s0 -> e+ e-", "[B_s0 -> e+ e+]cc"] #Bs2ee.addTool( OfflineVertexFitter ) #Bs2ee.ParticleCombiners.update( { "" : "OfflineVertexFitter"} ) #Bs2ee.OfflineVertexFitter.useResonanceVertex = False Bs2ee.ReFitPVs = False Bs2ee.DaughtersCuts = {"e+": "(MIPCHI2DV(PRIMARY)> 25.)&(TRCHI2DOF < 3 )"} Bs2ee.CombinationCut = "(ADAMASS('B_s0')<1200*MeV)"\ "& (AMAXDOCA('')<0.3*mm)" Bs2ee.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\ "& (ADMASS('B_s0') < 1200*MeV )"\ "& (BPVDIRA > 0) "\ "& (BPVVDCHI2> 225)"\ "& (BPVIPCHI2()< 25) " _stdLooseElectrons = DataOnDemand( Location="Phys/StdLooseElectrons/Particles") return Selection(name, Algorithm=Bs2ee, RequiredSelections=[_stdLooseElectrons])
def _makeKstarPlus(self, name, kshorts, pions, params): """ Make a K*(892)+ -> KS0 pi+ """ _Decays = "[K*(892)+ -> KS0 pi+]cc" _CombinationCut = "(APT > %(KaonPT)s *MeV) & " \ "(ADAMASS('K*(892)+') < %(KstarPMassWindow)s *MeV) & " \ "(ADOCACHI2CUT( %(KstarPADOCACHI2)s , ''))" % params _MotherCut = "(VFASPF(VCHI2) < %(KstarPVertexCHI2)s)" % params _KshortCut = "(PT > %(KaonPT)s *MeV) & " \ "(M < %(DiHadronMass)s*MeV) & " \ "(NDAUGHTERS == NINTREE(ISBASIC & (MIPCHI2DV(PRIMARY) > %(KaonIPCHI2)s)))" % params _PionCut = "(PT > %(KaonPT)s *MeV) & " \ "(M < %(DiHadronMass)s*MeV) & " \ "(ISBASIC & (MIPCHI2DV(PRIMARY) > %(KaonIPCHI2)s))" % params _Combine = CombineParticles(DecayDescriptor=_Decays, CombinationCut=_CombinationCut, MotherCut=_MotherCut) _Combine.DaughtersCuts = {"KS0": _KshortCut, "pi+": _PionCut} return Selection(name, Algorithm=_Combine, RequiredSelections=[kshorts, pions])
def _makeK0s2TwoProngs(self, name,decay_descriptor, combcut, masscut) : """ K0s2mumu selection object with muon Id and wide mass window starts from Phys/StdLooseMuons Please contact Diego Martinez Santos if you think of prescaling this line! Arguments: name : name of the Selection. """ if "mu+" in decay_descriptor: dname = "mu+" daughters = self.SelMuons else: dname = "pi+" daughters = self.SelPions K0s2MuMu = CombineParticles(DecayDescriptor = decay_descriptor) K0s2MuMu.DaughtersCuts = { dname : "(MIPCHI2DV(PRIMARY)> 100.)"} K0s2MuMu.CombinationCut = combcut + "& (AMAXDOCA('')<%(DiDOCA)s*mm)"% self.config K0s2MuMu.MotherCut = "("+ masscut + "& (BPVDIRA>0) & ((BPVVDSIGN*M/P) > %(KSlife)s) & (MIPDV(PRIMARY)<0.4*mm))" %self.config return Selection (name, Algorithm = K0s2MuMu, RequiredSelections = [ daughters])
def __Selection_CreateKstar__(self, lName, KstarCombCut, KstarCut, KaonCut, PionCut, UseNoPIDsParticles): ''' Make K* using StdNoPID common particles ''' from StandardParticles import StdNoPIDsPions, StdNoPIDsKaons, StdLooseKaons, StdLoosePions _requires = [ StdNoPIDsKaons, StdNoPIDsPions ] if UseNoPIDsParticles else [StdLooseKaons, StdLoosePions] from GaudiConfUtils.ConfigurableGenerators import CombineParticles CombineKstar = CombineParticles() CombineKstar.DecayDescriptor = "[K*(892)0 -> K+ pi-]cc" CombineKstar.CombinationCut = KstarCombCut CombineKstar.MotherCut = KstarCut CombineKstar.DaughtersCuts = {"K+": KaonCut, "pi-": PionCut} from PhysSelPython.Wrappers import Selection SelKstar = Selection( "Sel_" + lName + "_Kstar", Algorithm=CombineKstar, RequiredSelections=_requires) #[StdNoPIDsPions, StdNoPIDsKaons]) return SelKstar
def _makeMuE(self, name, params, electronid=None, muonid=None, samesign=False): """ Makes MuE combinations """ from StandardParticles import StdLooseElectrons as Electrons from StandardParticles import StdLooseMuons as Muons _DaughtersCut = "(PT > %(LeptonPT)s) & " \ "(MIPCHI2DV(PRIMARY)>%(LeptonIPCHI2)s)" % params _MassCut = "(AM > 100*MeV)" _DecayDescriptor = "[J/psi(1S) -> mu+ e-]cc" if samesign: _DecayDescriptor = "[J/psi(1S) -> mu+ e+]cc" _Combine = CombineParticles(DecayDescriptor=_DecayDescriptor, CombinationCut=_MassCut, MotherCut="(VFASPF(VCHI2/VDOF) < 9)") _ElectronCut = _DaughtersCut _MuonCut = _DaughtersCut if electronid: _ElectronCut += ("&" + electronid) if muonid: _MuonCut += ("&" + muonid) _Combine.DaughtersCuts = {"e+": _ElectronCut, "mu+": _MuonCut} return Selection(name, Algorithm=_Combine, RequiredSelections=[Muons, Electrons])
def __CreateSelectionRho__(self, lName, RhoCombCut, RhoCut, PionCut): ''' rho(770)0 -> pi+ pi- selection (from StdAllLoosePions) ''' from StandardParticles import StdAllLoosePions from GaudiConfUtils.ConfigurableGenerators import CombineParticles CombineRho = CombineParticles() CombineRho.InputPrimaryVertices = self.__PVOutputLocation__ CombineRho.DecayDescriptor = "rho(770)0 -> pi+ pi-" if (len(RhoCombCut) > 0): CombineRho.CombinationCut = RhoCombCut CombineRho.MotherCut = RhoCut CombineRho.DaughtersCuts = {"pi+": PionCut} from PhysSelPython.Wrappers import Selection SelRho = Selection("SelBuild_" + lName + "_Rho", Algorithm=CombineRho, RequiredSelections=[StdAllLoosePions]) return SelRho
def make5pi_excl(name, _h_PT, _h_IPCHI2, _h_TRCHI2DOF, _h_TRGHP, _5h_DOCA, _5h_DIRA, _5h_FDCHI2, _5h_CHI2, _5h_PT, _5h_PVIPCHI2sum, _5h_Mmin, _5h_Mmax, _probnnpi): _daughtersCuts = { "pi+": " (PT > %(_h_PT)s*MeV) \ & (TRCHI2DOF < %(_h_TRCHI2DOF)s) \ & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \ & (PROBNNpi > %(_probnnpi)s) \ & (TRGHP < %(_h_TRGHP)s) " % locals() } _combinationCut = "(AM < %(_5h_Mmax)s*MeV) \ & (AM > %(_5h_Mmin)s*MeV) \ & (AMAXDOCA('LoKi::TrgDistanceCalculator') < %(_5h_DOCA)s)" % locals() _motherCut = " (BPVDIRA > %(_5h_DIRA)s) \ & (BPVVDCHI2 > %(_5h_FDCHI2)s) \ & (VFASPF(VCHI2) < %(_5h_CHI2)s) \ & (PT > %(_5h_PT)s*MeV) \ & (SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='pi+') | (ABSID=='pi-')),0.0) > %(_5h_PVIPCHI2sum)s) " \ % locals() _5pi = CombineParticles() _5pi.DecayDescriptors = ["[B+ -> pi+ pi+ pi+ pi- pi-]cc"] _5pi.MotherCut = _motherCut _5pi.CombinationCut = _combinationCut _5pi.DaughtersCuts = _daughtersCuts return Selection(name, Algorithm=_5pi, RequiredSelections=[StdNoPIDsPions])
def makeEtaPrime2pipigamma(name, config): """ eta' selection for tau -> mu eta' Please contact Guido Andreassi if you think of prescaling this line! Arguments: name : name of the Selection , configuration dictionary. """ EtaPrime2pipigamma = CombineParticles() EtaPrime2pipigamma.DecayDescriptor = "eta_prime -> pi+ pi- gamma" EtaPrime2pipigamma.ReFitPVs = True EtaPrime2pipigamma.DaughtersCuts = { "pi+": "{piplus_cuts}".format(**config), "pi-": "{piminus_cuts}".format(**config), "gamma": "{gamma_cuts}".format(**config) } EtaPrime2pipigamma.CombinationCut = "{etap_mass_window}".format(**config) EtaPrime2pipigamma.MotherCut = "{etap_cuts}".format(**config) _stdLoosePions = DataOnDemand(Location="Phys/StdLoosePions/Particles") _stdLooseAllPhotons = DataOnDemand( Location="Phys/StdLooseAllPhotons/Particles") return Selection(name, Algorithm=EtaPrime2pipigamma, RequiredSelections=[_stdLoosePions, _stdLooseAllPhotons])
def makeTau2MuEtaPrime(self, name, config, setEtaPrime): """ tau -> mu eta' selection Please contact Guido Andreassi if you think of prescaling this line! Arguments: name : name of the Selection, configuration dictionary. """ if setEtaPrime == 'gamma': self.SelEtaPrime = makeEtaPrime2pipigamma( "selEtap_gamma", config['config_EtaPrime2pipigamma']) if setEtaPrime == 'pi0': self.SelEtaPrime = makeEtaPrime2pipipi( "selEtap_pi0", config['config_EtaPrime2pipipi']) Tau2MuEtaPrime = CombineParticles() Tau2MuEtaPrime.DecayDescriptor = "[tau+ -> mu+ eta_prime]cc " Tau2MuEtaPrime.ReFitPVs = True Tau2MuEtaPrime.DaughtersCuts = {"mu+": "{muplus_cuts}".format(**config)} Tau2MuEtaPrime.CombinationCut = "{tau_mass_window}".format(**config) Tau2MuEtaPrime.MotherCut = "{tau_cuts}".format(**config) _muons = DataOnDemand(Location="Phys/StdLooseMuons/Particles") return Selection(name, Algorithm=Tau2MuEtaPrime, RequiredSelections=[self.SelEtaPrime, _muons])
def __Selection_CreateDiMuonSSLowP__(self, lName, DiMuonCuts, MuonCuts, IsMuonFlag, MuonPIDmu): ''' Clone the StdVeryLooseDiMuon to build same sign candidates ''' from StandardParticles import StdNoPIDsMuons, StdVeryLooseMuons _requires = [StdNoPIDsMuons] from GaudiConfUtils.ConfigurableGenerators import CombineParticles muhigh = '(0.5<PPINFO(LHCb.ProtoParticle.InAccMuon,-1)) ' mulow = '(0.5>PPINFO(LHCb.ProtoParticle.InAccMuon,-1)) & ( PIDmu > 3.0 )' CombineDiMuonSSLowP = CombineParticles() CombineDiMuonSSLowP.DecayDescriptor = "[J/psi(1S) -> mu+ mu+]cc" CombineDiMuonSSLowP.DaughtersCuts = { "mu+" : MuonCuts, "mu-": MuonCuts } if IsMuonFlag: CombineDiMuonSSLowP.CombinationCut = "( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,1) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,2) & ACHILDCUT(ISMUON, 1) & ACHILDCUT(PIDmu > "+str(MuonPIDmu) +",2) ) | ( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,2) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,1) & ACHILDCUT(ISMUON, 2) & ACHILDCUT(PIDmu > "+str(MuonPIDmu) + " ,1) )" else: CombineDiMuonSSLowP.CombinationCut = "( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,1) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,2) & ACHILDCUT(ISMUONLOOSE, 1) & ACHILDCUT(PIDmu > 0.0 ,2) ) | ( ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)>0.5,2) & ACHILDCUT(PPINFO(LHCb.ProtoParticle.InAccMuon,-1)<0.5,1) & ACHILDCUT(ISMUONLOOSE, 2) & ACHILDCUT(PIDmu > 0.0 ,1) )" CombineDiMuonSSLowP.MotherCut = DiMuonCuts from StandardParticles import StdLooseMuons, StdVeryLooseMuons Muons = StdLooseMuons if IsMuonFlag else StdVeryLooseMuons from PhysSelPython.Wrappers import Selection SelDiMuonSSLowP = Selection("Sel_" + lName + "_DiMuonSSLowP", Algorithm = CombineDiMuonSSLowP, RequiredSelections = _requires ) return SelDiMuonSSLowP
def makeBu(name): """ detached Bu-->JPsiK selection. Please contact Flavio Archilli if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter SelDJPsi = makeDetachedJPsi(name) PreselBu2JPsiKCommon = CombineParticles() PreselBu2JPsiKCommon.DecayDescriptor = " [B+ -> J/psi(1S) K+]cc " #PreselBu2JPsiKCommon.addTool( OfflineVertexFitter ) #PreselBu2JPsiKCommon.ParticleCombiners.update( { "" : "OfflineVertexFitter"} ) #PreselBu2JPsiKCommon.OfflineVertexFitter.useResonanceVertex = False PreselBu2JPsiKCommon.ReFitPVs = True PreselBu2JPsiKCommon.DaughtersCuts = { "K+": "(ISLONG) & (TRCHI2DOF < 3 ) &(MIPCHI2DV(PRIMARY)>25)& (PT>250*MeV) & (TRGHOSTPROB<0.3) " } PreselBu2JPsiKCommon.CombinationCut = "(ADAMASS('B+') < 600*MeV)" PreselBu2JPsiKCommon.MotherCut = "(BPVIPCHI2()< 25)& (VFASPF(VCHI2)<45) " _kaons = DataOnDemand(Location='Phys/StdNoPIDsKaons/Particles') return Selection("SelBu2KJPsiee", Algorithm=PreselBu2JPsiKCommon, RequiredSelections=[SelDJPsi, _kaons])
def __Selection_CreateK1__(self, lName, K1CombCut, K1Cut, KaonCut, PionCut, UseNoPIDsParticles): ''' Make K1 using StdNoPID common particles ''' from StandardParticles import StdAllNoPIDsPions, StdAllNoPIDsKaons, StdAllLooseKaons, StdAllLoosePions #just a test!!!!! _requires = [ StdAllNoPIDsKaons, StdAllNoPIDsPions ] if UseNoPIDsParticles else [StdAllLooseKaons, StdAllLoosePions] #_requires = [StdAllLooseKaons, StdAllLoosePions] from GaudiConfUtils.ConfigurableGenerators import CombineParticles CombineK1 = CombineParticles() CombineK1.DecayDescriptor = "[K_1(1270)+ -> K+ pi- pi+]cc" CombineK1.CombinationCut = K1CombCut CombineK1.MotherCut = K1Cut CombineK1.DaughtersCuts = {"K+": KaonCut, "pi-": PionCut} from PhysSelPython.Wrappers import Selection SelK1 = Selection( "Sel_" + lName + "_K1", Algorithm=CombineK1, RequiredSelections=_requires) #[StdNoPIDsPions, StdNoPIDsKaons]) return SelK1
def makeD2HHHInc(name, DaughterPT, DaughterP, DaughterIPChi2, Daughter2IPChi2, DaughterDOCA, DaughterDOCAChi2, PTSum, DDIRA, DIPChi2, DdcaFDChi2, DPt, DVXChi2NDOF, MinMassPosFit, MaxMassPosFit ): """ Create and return a D -> HHHInclusive selection Arguments: name : name of the Selection. pionSel : Pion Selection (from CommonParticles) DaughterPT : Minimum PT among daughters DaughterP : Minimum P among daughters DaughterIPChi2 : Minimum IPChi2 among daughters Daughter2IPChi2: Minimum IPChi2 required to at least 2 daughters DaughterDOCA : Maximum distance of closest approach between 2 daughters DaughterDOCAChi2:Maximum distance of closest approach between 2 daughters in error units PTSum : Minimum sum of daughters momenta DDIRA : Minimum opening angle between sum_p and FD-direction DIPChi2 : Maximum IPChi2 of the D DdcaFDChi2 : Minimum distance from SV to any PV DPt : Minimum D Momentum DVXChi2NDOF : Maximum Chi2 of the D Vertex MinMassPosFit : Minimum value of HHH invariant mass (MeV) MaxMassPosFit : Maximum value of HHH invariant mass (MeV). """ _DaughterCuts = "((MIPCHI2DV(PRIMARY)) > %(DaughterIPChi2)s ) & (P > %(DaughterP)s *MeV) & (PT > %(DaughterPT)s *MeV) " % locals() _Combcuts_HHH = "(ADOCACHI2CUT(%(DaughterDOCAChi2)s,'')) & (ADOCACUT(%(DaughterDOCA)s*mm,'')) & (ACHILD(PT,1)+ACHILD(PT,2)+ACHILD(PT,3) > %(PTSum)s*MeV) & (ANUM(MIPCHI2DV(PRIMARY) > %(Daughter2IPChi2)s ) >= 2) " % locals() _Mothercuts_HHH = """ (PT > %(DPt)s) & (VFASPF(VCHI2/VDOF) < %(DVXChi2NDOF)s) & (BPVDIRA > %(DDIRA)s) & (BPVIPCHI2() < %(DIPChi2)s) & (VFASPF(VMINVDCHI2DV(PRIMARY)) > %(DdcaFDChi2)s) """ % locals() _cutsMassPosFit = " (in_range ( %(MinMassPosFit)s , M , %(MaxMassPosFit)s )) " % locals() _combHHH = CombineParticles() _combHHH.DecayDescriptor = '[D+ -> pi- pi+ pi+]cc' _combHHH.DaughtersCuts = { "pi+" : '(' + _DaughterCuts + ')' } _combHHH.CombinationCut = '(' + _Combcuts_HHH + ')' _combHHH.MotherCut = '(' + _Mothercuts_HHH + ' & ' + _cutsMassPosFit + ')' return Selection ( name, Algorithm = _combHHH, RequiredSelections = [StdNoPIDsPions])
def makepph_incl(name, _h_PT, _h_P, _h_IPCHI2, _h_TRCHI2DOF, _3h_DOCA, _3h_PTmax, _3h_DIRA, _3h_FDCHI2, _3h_PVDOCAmin, _3h_CHI2, _3h_IPCHI2, _3h_PT, _3h_PTsum, _3h_Psum, _3h_PVIPCHI2sum, _3h_TRKCHIDOFmin, _3h_Charge, _3h_CORRMmax, _3h_CORRMmin, _3hpph_deltaMmax, _3hpph_deltaMmin) : _daughtersCuts = {"p+" : "(PT > %(_h_PT)s*MeV) \ & (P > %(_h_P)s*MeV) \ & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \ & (TRCHI2DOF < %(_h_TRCHI2DOF)s)" % locals(), "K+" : "(PT > %(_h_PT)s*MeV) \ & (P > %(_h_P)s*MeV) \ & (MIPCHI2DV(PRIMARY) > %(_h_IPCHI2)s) \ & (TRCHI2DOF < %(_h_TRCHI2DOF)s)" % locals()} _combinationCut = "(AM < (5279.15 + %(_3hpph_deltaMmax)s)*MeV) \ & (AM > (5279.15 - %(_3hpph_deltaMmin)s)*MeV) \ & (AMAXDOCA('LoKi::TrgDistanceCalculator') < %(_3h_DOCA)s)" % locals() _motherCut = "(MAXTREE(((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),PT) > %(_3h_PTmax)s*MeV) \ & (BPVDIRA > %(_3h_DIRA)s) \ & (BPVVDCHI2 > %(_3h_FDCHI2)s) \ & (VFASPF(VMINVDDV(PRIMARY)) > %(_3h_PVDOCAmin)s) \ & (VFASPF(VCHI2) < %(_3h_CHI2)s) \ & (MIPCHI2DV(PRIMARY) < %(_3h_IPCHI2)s) \ & (PT > %(_3h_PT)s*MeV) \ & (SUMTREE(PT,((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_PTsum)s*MeV) \ & (SUMTREE(P,((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_Psum)s*MeV) \ & (SUMTREE(MIPCHI2DV(PRIMARY),((ABSID=='p+') |(ABSID=='p~-') |(ABSID=='K+') | (ABSID=='K-')),0.0) > %(_3h_PVIPCHI2sum)s) \ & (MINTREE(((ABSID=='p+') |(ABSID=='p~-') |('K+'==ABSID) | ('K-'==ABSID)),TRCHI2DOF) < %(_3h_TRKCHIDOFmin)s) \ & (abs(CHILD(Q,1) + CHILD(Q,2) + CHILD(Q,3))== %(_3h_Charge)s ) \ & (BPVCORRM < %(_3h_CORRMmax)s * MeV)& (BPVCORRM > %(_3h_CORRMmin)s*MeV)" % locals() _pph=CombineParticles() _pph.DecayDescriptors = ["[B+ -> p+ p~- K+]cc"] _pph.MotherCut = _motherCut _pph.CombinationCut = _combinationCut _pph.DaughtersCuts = _daughtersCuts return Selection ( name, Algorithm = _pph, RequiredSelections = [StdNoPIDsKaons,StdTightProtons])
def _4jets( self, name, ptcut ): HighPT4Jets = CombineParticles() HighPT4Jets.ParticleCombiners = { "" : "LoKi::VertexFitter" } HighPT4Jets.IgnoreP2PVFromInputLocations = True HighPT4Jets.DecayDescriptor = "H_10 -> CELLjet CELLjet CELLjet CELLjet" HighPT4Jets.DaughtersCuts = { "CELLjet" : "PT > "+ptcut+"*MeV" } HighPT4Jets.CombinationCut = "(ADOCACHI2CUT(50, ''))" HighPT4Jets.MotherCut = "VFASPF(VCHI2PDOF) < 20" return HighPT4Jets
def makeLb2V0LDhh( self, name, config ) : """ Create and store a Lb ->Lambda0(LD) p+ h- Selection object. Arguments: name : name of the Selection. config : config dictionary """ _massCutLow = "(AM>(5619-%s)*MeV)" % config['Lb_Mlow'] _massCutHigh = "(AM<(5619+%s)*MeV)" % config['Lb_Mhigh'] _aptCut = "(APT>%s*MeV)" % config['Lb_APTmin'] _daugMedPtCut = "(ANUM(PT>%s*MeV)>=2)" % config['LbDaug_MedPT_PT'] _daugMaxPtIPCut = "(AVAL_MAX(MIPDV(PRIMARY),PT)>%s)" % config['LbDaug_MaxPT_IP'] _maxDocaChi2Cut = "(ACUTDOCACHI2(%s,''))" % config['LbDaug_LD_maxDocaChi2'] _daugPtSumCut = "((APT1+APT2+APT3)>%s*MeV)" % config['LbDaug_LD_PTsum'] _combCuts = _aptCut+'&'+_daugPtSumCut+'&'+_daugMedPtCut+'&'+_massCutLow+'&'+_massCutHigh+'&'+_daugMaxPtIPCut+'&'+_maxDocaChi2Cut _ptCut = "(PT>%s*MeV)" % config['Lb_PTmin'] _vtxChi2Cut = "(VFASPF(VCHI2)<%s)" % config['Lb_VtxChi2'] _diraCut = "(BPVDIRA>%s)" % config['Lb_LD_Dira'] _ipChi2Cut = "(MIPCHI2DV(PRIMARY)<%s)" % config['Lb_LD_IPCHI2wrtPV'] _fdCut = "(VFASPF(VMINVDDV(PRIMARY))>%s)" % config['Lb_FDwrtPV'] _fdChi2Cut = "(BPVVDCHI2>%s)" % config['Lb_LD_FDChi2'] _motherCuts = _ptCut+'&'+_vtxChi2Cut+'&'+_diraCut+'&'+_ipChi2Cut+'&'+_fdChi2Cut _Lb = CombineParticles() if 'SS' in name: # Same sign _Lb.DecayDescriptors = [ "Lambda_b0 -> pi+ pi+ Lambda0", "Lambda_b~0 -> pi+ pi+ Lambda~0", "Lambda_b0 -> pi- pi- Lambda0", "Lambda_b~0 -> pi- pi- Lambda~0"] else: _Lb.DecayDescriptors = [ "Lambda_b0 -> pi+ pi- Lambda0", "Lambda_b~0 -> pi+ pi- Lambda~0"] _trkGhostProbCut = "(TRGHOSTPROB<%s)" % config['Trk_GhostProb'] _trkChi2Cut = "(TRCHI2DOF<%s)" % config['Trk_Chi2'] _daughtersCuts = _trkChi2Cut + '&' + _trkGhostProbCut _Lb.DaughtersCuts = { "pi+" : _daughtersCuts } _Lb.CombinationCut = _combCuts _Lb.MotherCut = _motherCuts _Lb.ReFitPVs = True _LbConf = _Lb.configurable(name + '_combined') if 'SS' in name: # Same sign self.selLb2V0LDhhSS = Selection (name, Algorithm = _LbConf, RequiredSelections = [self.selLambda2LD, self.pions ]) return self.selLb2V0LDhhSS else: self.selLb2V0LDhh = Selection (name, Algorithm = _LbConf, RequiredSelections = [self.selLambda2LD, self.pions ]) return self.selLb2V0LDhh
def makeB2hTauMu(name): """ Please contact Johannes Albrecht if you think of prescaling this line! Arguments: name : name of the Selection. """ #from Configurables import OfflineVertexFitter Bs2hTauMu = CombineParticles() Bs2hTauMu.DecayDescriptors = [ "[B+ -> K+ tau+ mu-]cc", "[B+ -> K- tau+ mu+]cc", "[B+ -> K+ tau- mu+]cc", "[B+ -> pi+ tau+ mu-]cc", "[B+ -> pi- tau+ mu+]cc", "[B+ -> pi+ tau- mu+]cc", "[B+ -> p+ tau+ mu-]cc", "[B- -> p+ tau- mu-]cc", "[B+ -> p+ tau- mu+]cc" ] #Bs2hTauMu.addTool( OfflineVertexFitter ) #Bs2hTauMu.ParticleCombiners.update( { "" : "OfflineVertexFitter"} ) #Bs2hTauMu.OfflineVertexFitter.useResonanceVertex = False #Bs2hTauMu.ReFitPVs = True Bs2hTauMu.DaughtersCuts = { "mu+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)& (TRGHOSTPROB<0.3)", "pi+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3) & (TRGHOSTPROB<0.3)", "K+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)&(PIDK>5)& (TRGHOSTPROB<0.3)", "p+": "(MIPCHI2DV(PRIMARY)>36.)&(TRCHI2DOF<3)&(PIDp>5)& (TRGHOSTPROB<0.3)" } Bs2hTauMu.CombinationCut = "(ADAMASS('B+')<400*MeV)"\ "& (AMAXDOCA('')<0.15*mm)" Bs2hTauMu.MotherCut = "(VFASPF(VCHI2/VDOF)<9) "\ "& (BPVDIRA>0.999)"\ "& (ADMASS('B_s0') < 400*MeV )"\ "& (BPVDIRA > 0) "\ "& (BPVVDCHI2> 225)"\ "& (BPVIPCHI2()< 16) "#maybe 16 from CommonParticles import StdLooseDetachedTau, StdLooseDipion _stdLooseMuons = DataOnDemand(Location="Phys/StdLooseMuons/Particles") _stdLooseDetachedTaus = DataOnDemand( Location="Phys/StdLooseDetachedTau3pi/Particles") _stdNoPIDsPions = DataOnDemand(Location="Phys/StdNoPIDsPions/Particles") _stdNoPIDsKaons = DataOnDemand(Location="Phys/StdNoPIDsKaons/Particles") _stdNoPIDsProtons = DataOnDemand( Location="Phys/StdNoPIDsProtons/Particles") return Selection(name, Algorithm=Bs2hTauMu, RequiredSelections=[ _stdLooseMuons, _stdLooseDetachedTaus, _stdNoPIDsPions, _stdNoPIDsKaons, _stdNoPIDsProtons ])
bothstripping = MergedSelection("Selection_mergeddaughters", RequiredSelections = [LowQ2MuonsOnDemand,HighQ2MuonsOnDemand]) _filterDimuons = FilterDesktop(Code="ABSID==511") # Dimuons from B0--> mu mu stripping selection _selDimuons= Selection( "_selDimuons", Algorithm = _filterDimuons, RequiredSelections = [bothstripping] ) from Configurables import SubstitutePID subalg = SubstitutePID("_B2Jpsi_SubPID", Code="(DECTREE('B0 -> mu+ mu-'))", Substitutions={'B0 -> mu+ mu-' : 'J/psi(1S)'}, MaxChi2PerDoF=-666) subsel = Selection("subsel",Algorithm = subalg, RequiredSelections = [_selDimuons]) # Try and make B->J/psi K _B = CombineParticles() _B.DaughtersCuts = { "K+" : "PT>500*MeV" } _B.MotherCut = "(DMASS('B+')<5000*MeV) & (VFASPF(VCHI2)<25.0)" #need to check these cuts _B.DecayDescriptors = [ "[B+ -> J/psi(1S) K+]cc" ] _BdecaySelection = Selection( "TurboB", Algorithm = _B, RequiredSelections = [subsel,kaons] ) SeqB = SelectionSequence('SeqB', TopSelection = _BdecaySelection) tupleB = DecayTreeTuple("bar-muon-tuple") tupleB.Inputs = [SeqB.outputLocation()] tupleB.Decay = "[B+ -> ^(J/psi(1S) -> ^mu+ ^mu-) ^K+]CC"
bothstripping = MergedSelection("Selection_mergeddaughters", RequiredSelections = [LowQ2MuonsOnDemand,HighQ2MuonsOnDemand]) _filterDimuons = FilterDesktop(Code="ABSID==511") # Dimuons from B0--> mu mu stripping selection _selDimuons= Selection( "_selDimuons", Algorithm = _filterDimuons, RequiredSelections = [bothstripping] ) from Configurables import SubstitutePID subalg = SubstitutePID("_B2Jpsi_SubPID", Code="(DECTREE('B0 -> mu+ mu-'))", Substitutions={'B0 -> mu+ mu-' : 'J/psi(1S)'}, MaxChi2PerDoF=-666) subsel = Selection("subsel",Algorithm = subalg, RequiredSelections = [_selDimuons]) # Try and make B->J/psi K _B = CombineParticles() _B.DaughtersCuts = { "K+" : "(PT>500*MeV)&(MIPCHI2DV(PRIMARY) > 9)" } _B.MotherCut = "(DMASS('B+')<5000*MeV) & (VFASPF(VCHI2)/VFASPF(VDOF)<5.0) & (BPVDIRA > 0.999)" #need to check these cuts _B.DecayDescriptors = [ "[B+ -> J/psi(1S) K+]cc" ] _BdecaySelection = Selection( "TurboB", Algorithm = _B, RequiredSelections = [subsel,kaons] ) SeqB = SelectionSequence('SeqB', TopSelection = _BdecaySelection) # Here we just put the output candidates in an Tuple tupleB = DecayTreeTuple("bae-muon-data") tupleB.Inputs = [SeqB.outputLocation()] tupleB.Decay = "[B+ -> ^K+ ^(J/psi(1S) -> ^mu+ ^mu-)]CC" tupleB.ToolList = [