def makeB2X(name, decay, inputs, config): '''Makes all B -> X selections.''' comboCuts = LoKiCuts(['SUMPT', 'AM', 'AMAXDOCA'], config).code() momCuts = [ LoKiCuts(['VCHI2DOF'], config).code(), has1TrackChild(), hasTopoChildren(), LoKiCuts(['BPVIPCHI2', 'BPVLTIME', 'BPVDIRA'], config).code() ] momCuts = LoKiCuts.combine(momCuts) b2x = CombineParticles(DecayDescriptors=decay, CombinationCut=comboCuts, MotherCut=momCuts) return Selection(name, Algorithm=b2x, RequiredSelections=inputs)
def _makeSels(self,decays,xtag,inputs): sels = [] for tag, decay in decays.iteritems(): comboCuts = LoKiCuts(['SUMPT','AM'],self.config).code() momCuts = [LoKiCuts(['VCHI2DOF'],self.config).code(), hasTopoChildren()] momCuts = LoKiCuts.combine(momCuts) b2x = CombineParticles(DecayDescriptors=decay, CombinationCut=comboCuts, MotherCut=momCuts) sel = Selection(tag+xtag+'Beauty2Charm',Algorithm=b2x, RequiredSelections=inputs[tag]) sels.append(sel) return sels
def makeB2DstarX(sel, uppions, config): # change B to something that doesn't fly sub = SubstitutePID('SubPID' + sel.name(), Code="DECTREE('Beauty -> Charm ...')") sub.MaxChi2PerDoF = -666 sub.Substitutions = {'Beauty -> Charm ...': 'J/psi(1S)'} subsel = Selection(sel.name() + 'DstarUPSel', Algorithm=sub, RequiredSelections=[sel]) filter = "INTREE(ID=='J/psi(1S)')" subsel = filterSelection(sel.name() + 'DstarUPFilter', filter, [subsel]) # Delta M cut on D* (preambulo is below) #dmcut = '((ISD1 & ((MD1PI-MD1) < 180)) | (ISD2 & ((MD2PI-MD2) < 180)))' #dmcut = '((MD1PI-MD1) < 180) | ((MD2PI-MD2) < 180)' dmcut = "((((IDD1==421)|(IDD1==411)) & ((MD1PI-MD1) < 180)) | (((IDD2==421)|(IDD2==411)) & ((MD2PI-MD2) < 180)))" # add UP track combConfig = {'AMAXDOCA_MAX': '0.5*mm'} comboCuts = [LoKiCuts(['AMAXDOCA'], combConfig).code(), dmcut] comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVDIRA'], config).code() #did = "((ABSID=='D+')|(ABSID=='D0'))" preambulo = [ 'PXPI = ACHILD(PX,2)', 'PYPI = ACHILD(PY,2)', 'PZPI = ACHILD(PZ,2)', 'EPI = ACHILD(E,2)', 'IDD1 = ACHILD(CHILD(ABSID,1),1)', #'ISD1 = ACHILD(CHILD(%s,1),1)' % did, 'PXD1 = ACHILD(CHILD(PX,1),1)', 'PYD1 = ACHILD(CHILD(PY,1),1)', 'PZD1 = ACHILD(CHILD(PZ,1),1)', 'ED1 = ACHILD(CHILD(E,1),1)', 'MD1 = ACHILD(CHILD(M,1),1)', 'MD1PI = sqrt((EPI+ED1)**2 - (PXPI+PXD1)**2 - (PYPI+PYD1)**2 - (PZPI+PZD1)**2)', #'ISD2 = ACHILD(CHILD(%s,2),1)' % did, 'IDD2 = ACHILD(CHILD(ABSID,2),1)', 'PXD2 = ACHILD(CHILD(PX,2),1)', 'PYD2 = ACHILD(CHILD(PY,2),1)', 'PZD2 = ACHILD(CHILD(PZ,2),1)', 'ED2 = ACHILD(CHILD(E,2),1)', 'MD2 = ACHILD(CHILD(M,2),1)', 'MD2PI = sqrt((EPI+ED2)**2 - (PXPI+PXD2)**2 - (PYPI+PYD2)**2 - (PZPI+PZD2)**2)', ] cp = CombineParticles(CombinationCut=comboCuts, MotherCut=momCuts, Preambulo=preambulo, DecayDescriptor='[B+ -> J/psi(1S) pi+]cc') return Selection('DstarUP' + sel.name(), Algorithm=cp, RequiredSelections=[uppions] + [subsel])
def makeX(which, config, dec, inputs): comboCuts = "(AM < 5000*MeV) & (APT > %s)" % config['PT_MIN'] if (which.find('DD') < 0): comboCuts += " & (ACUTDOCA(0.2*mm,''))" comboCuts += "& (ADOCACHI2CUT(25,''))" momCuts = LoKiCuts(['HASVERTEX', 'BPVVDCHI2', 'VCHI2DOF'], config).code() momCuts = LoKiCuts.combine(['(BPVDIRA > 0)', momCuts]) x = CombineParticles(DecayDescriptors=[dec], CombinationCut=comboCuts, MotherCut=momCuts) #print 'makeX:',which,comboCuts,momCuts return Selection("X2" + which + "DarkBosonSel", Algorithm=x, RequiredSelections=inputs)
def makeB(name,decays,inputs,default_config): comboCuts = LoKiCuts(['AM','SUMPT'],default_config).code() momCuts = LoKiCuts(['HASVERTEX','PT','VCHI2DOF','BPVLTIME','BPVIPCHI2'],default_config).code() cuts = '(BPVDIRA > 0) & ' cuts += '(NINGENERATION(ISBASIC & (MIPCHI2DV(PRIMARY) < %s),1)==0)' \ % default_config['HAD_MINIPCHI2_MIN'] momCuts = LoKiCuts.combine([cuts,momCuts]) momCuts += ' & (MM > %s) & (MM < %s)' % (default_config['AM_MIN'],default_config['AM_MAX']) alg = CombineParticles(DecayDescriptors=decays) alg.ReFitPVs = True alg.CombinationCut=comboCuts alg.MotherCut=momCuts #print 'makeB:',name,comboCuts,momCuts,decays return Selection(name+"DarkBosonSel",Algorithm=alg, RequiredSelections=inputs)
def diMuonBuilder(muons,config,decay,tag,oneLooseMuInDimu): comboCuts = LoKiCuts(['ASUMPT','AMAXDOCA'],config).code() if oneLooseMuInDimu: #comboCuts+='& ( ACHILDCUT(ISMUON, 1) | ACHILDCUT(ISMUON, 2) )' comboCuts+='& ( (ANUM(ISMUON))>0 )' momCuts = '' if config['BPVVDCHI2_MIN']: momCuts = LoKiCuts(['VCHI2DOF','BPVVDCHI2','BPVDIRA'],config).code() else : momCuts = LoKiCuts(['VCHI2DOF','BPVDIRA'],config).code() cp = CombineParticles(CombinationCut=comboCuts,MotherCut=momCuts, DecayDescriptors=[decay]) return Selection('B2MuMuXDiMuonBuilder'+tag,Algorithm=cp, RequiredSelections=[muons])
def makeBc2BX(name,decay,inputs,config): from copy import deepcopy config = deepcopy(config) comboCuts = LoKiCuts(['SUMPT','AM'],config).code() flightCuts = ['BPVLTIME','DZ1'] flightCuts += ['BPVIPCHI2','BPVDIRA'] momCuts = [LoKiCuts(['VCHI2DOF'],config).code(), "INTREE( HASTRACK & ISBASIC & (P>5000*MeV) & (PT > 500*MeV) & (MIPCHI2DV(PRIMARY) > 10) & (MIPDV(PRIMARY) > 0.06*mm))", LoKiCuts(flightCuts,config).code()] momCuts = LoKiCuts.combine(momCuts) bc2bx = CombineParticles(DecayDescriptors=decay, CombinationCut=comboCuts, MotherCut=momCuts) return Selection(name,Algorithm=bc2bx,RequiredSelections=inputs)
def _makeX2HH(self, name, decays, amass, config, inputs): ''' Makes all X -> HH selections with charged tracks only.''' comboCuts = [ LoKiCuts(['ASUMPT'], config).code(), amass, hasTopoChild() ] comboCuts.append(LoKiCuts(['AMAXDOCA'], config).code()) comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVDIRA'], config).code() cp = CombineParticles(CombinationCut=comboCuts, MotherCut=momCuts, DecayDescriptors=decays) return Selection(name + 'Beauty2Charm', Algorithm=cp, RequiredSelections=inputs)
def _makeD2X(self, name, decays, wm, up, config, extrainputs): ''' Makes all D -> X selections.''' if up: wm += '& (ANUM(ISUP)==1)' name += 'UP' comboCuts = [LoKiCuts(['ASUMPT'], config).code(), wm, hasTopoChild()] comboCuts.append(LoKiCuts(['AMAXDOCA'], config).code()) comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVDIRA'], config).code() cp = CombineParticles(CombinationCut=comboCuts, MotherCut=momCuts, DecayDescriptors=decays) return Selection('Proto' + name + 'Beauty2Charm', Algorithm=cp, RequiredSelections=[self.pions] + extrainputs)
def makeLambda2X(name, decay, inputs, config): '''Makes all Lambda -> X selections.''' from copy import deepcopy comboCuts = LoKiCuts(['SUMPT', 'AM'], config).code() #flightCuts = ['BPVLTIME'] #if useIP: # flightCuts += ['BPVIPCHI2','BPVDIRA'] #momCuts = [LoKiCuts(['VCHI2DOF'],config).code(), momCuts = [has1TrackChild()] momCuts = LoKiCuts.combine(momCuts) b2x = CombineParticles(DecayDescriptors=decay, CombinationCut=comboCuts, MotherCut=momCuts) b2x.ParticleCombiners = {'': 'LoKi::VertexFitter'} return Selection(name, Algorithm=b2x, RequiredSelections=inputs)
def filterInputs(which,conf,inputs): keys = [key.split('_')[0] for key in conf.keys()] code = LoKiCuts(keys,conf).code() #code = LoKiCuts.combine(['INMUON',code]) #print "filterInputs: ", which, code return Selection(which+'DarkBosonFilter',Algorithm=FilterDesktop(Code=code), RequiredSelections=inputs)
def makeY2X(name,decay,inputs,config,vertex=True): wm = ['in_range(%s,AM,%s)' % (config['MASS_MIN']['Y'], config['MASS_MAX']['Y'])] wm = '('+('|'.join(wm))+')' comboCuts = [LoKiCuts(['SUMPT'],config).code(),wm] comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF','BPVDIRA'],config).code() y2x = CombineParticles(DecayDescriptors=decay,CombinationCut=comboCuts, MotherCut=momCuts) if not vertex: y2x = y2x.configurable(name+'B2MuMuXVertexFitter') y2x.addTool(OfflineVertexFitter) y2x.ParticleCombiners.update( { "" : "OfflineVertexFitter"} ) y2x.OfflineVertexFitter.useResonanceVertex = False return Selection(name,Algorithm=y2x,RequiredSelections=inputs)
def filterInputs(tag, inputs, config): '''Filter input particles.''' code = LoKiCuts([ 'TRCHI2DOF', 'PT', 'P', 'MIPCHI2DV', 'MM', 'CHILDCL1', 'CHILDCL2', 'PIDK', 'PIDp', 'BPVVDRHO', 'BPVVDZ', 'DOCAMAX', 'TRGHP' ], config).code() return filterSelection(tag + 'Inputs', code, inputs)
def _makeX2HHH(self, name, decays, amass, config, inputs, pi0=False): ''' Makes all X -> HHH selections involving neutrals.''' comboCuts = [ LoKiCuts(['ASUMPT'], config).code(), amass, hasTopoChild() ] comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2'], config).code() cp = CombineParticles(CombinationCut=comboCuts, MotherCut=momCuts, DecayDescriptors=decays) if pi0: cp = cp.configurable(name + 'Beauty2XGammaCombiner') cp.ParticleCombiners = {'': 'LoKi::VertexFitter'} return Selection(name + 'Beauty2XGamma', Algorithm=cp, RequiredSelections=inputs)
def _makeXPLUS2HH(self, name, decays, amass, config, inputs, pi0=False): ''' Makes all X+ -> HH selections involving neutrals.''' comboCuts = [ LoKiCuts(['ASUMPT'], config).code(), amass, hasTopoChild() ] comboCuts = LoKiCuts.combine(comboCuts) momCuts = "ALL" cp = CombineParticles(CombinationCut=comboCuts, MotherCut=momCuts, DecayDescriptors=decays) if pi0: cp = cp.configurable(name + 'Beauty2CharmCombiner') #cp.ParticleCombiners.update({'':'MomentumCombiner'}) return Selection(name + 'Beauty2Charm', Algorithm=cp, RequiredSelections=inputs)
def filterPID(name, input, config, level=1): cuts = ["(NINGENERATION(('p+'==ABSID) & (PIDp < %s),%d) == 0)" \ % (config['P']['PIDp_MIN'],level), "(NINGENERATION(('K+'==ABSID) & (PIDK < %s), %d) == 0)" \ % (config['K']['PIDK_MIN'],level), "(NINGENERATION(('pi+'==ABSID) & (PIDK > %s), %d) == 0)" \ % (config['PI']['PIDK_MAX'],level)] return filterSelection(name, LoKiCuts.combine(cuts), input)
def makeB2X(name,decay,inputs,config,useIP=True,resVert=True): '''Makes all B -> X selections.''' from copy import deepcopy comboCuts = LoKiCuts(['SUMPT','AM'],config).code() flightCuts = ['BPVLTIME'] if useIP: flightCuts += ['BPVIPCHI2','BPVDIRA'] momCuts = [LoKiCuts(['VCHI2DOF'],config).code(),has1TrackChild(), hasTopoChildren(),LoKiCuts(flightCuts,config).code()] momCuts = LoKiCuts.combine(momCuts) b2x = CombineParticles(DecayDescriptors=decay,CombinationCut=comboCuts, MotherCut=momCuts) if not resVert: b2x = b2x.configurable(name+'Beauty2CharmVertexFitter') b2x.addTool(OfflineVertexFitter) b2x.VertexFitters.update( { "" : "OfflineVertexFitter"} ) b2x.OfflineVertexFitter.useResonanceVertex = False return Selection(name,Algorithm=b2x,RequiredSelections=inputs)
def _massWindowD2HHHCF(self): dm,units = LoKiCuts.cutValue(self.config['MASS_WINDOW']) d_min = 1869.62 - dm d_max = 1869.62 + dm ds_min = 1968.49 - dm ds_max = 1968.49 + dm return ('%s*%s'%(d_min,units),'%s*%s'%(d_max,units), '%s*%s'%(ds_min,units),'%s*%s'%(ds_max,units))
def _massWindow(self, which): dm, units = LoKiCuts.cutValue(self.config['MASS_WINDOW']) if which is 'D0': min = 1864.84 - dm # D0 - dm max = 1864.84 + dm # D0 + dm else: min = 1869.62 - dm # D+ - dm max = 1968.49 + dm # Ds+ + dm return ('%s*%s' % (min, units), '%s*%s' % (max, units))
def filterEE(which,econf,xconf,inputs): code = "(ID=='J/psi(1S)') & (PT > %s) & (MINTREE('e+'==ABSID,PIDe) > %s)" \ % (xconf['PT_MIN'],econf['PIDe_MIN']) code += " & (MINTREE('e+'==ABSID,MIPCHI2DV(PRIMARY)) > %s)" \ % econf['MIPCHI2DV_MIN'] code += " & (MINTREE('e+'==ABSID,PT) > %s)" % econf['PT_MIN'] code += " & (MAXTREE('e+'==ABSID,TRGHP) < %s)" % econf['TRGHP_MAX'] code = LoKiCuts.combine([code,LoKiCuts(['HASVERTEX','BPVVDCHI2','VCHI2DOF'], xconf).code()]) #print "filterEE: ", code sel = Selection(which+'FilterEEDarkBosonFilter', Algorithm=FilterDesktop(Code=code), RequiredSelections=inputs) sub = SubstitutePID(which+'EESubPIDDarkBoson', Code="DECTREE('J/psi(1S) -> e+ e-')") sub.MaxChi2PerDoF = -666 sub.Substitutions = {'J/psi(1S) -> e+ e-' : 'KS0'} return Selection(which+'EESubPIDDarkBosonSel',Algorithm=sub, RequiredSelections=[sel])
def __init__(self,pions,ks,pi0,config,config_pid): self.pions = pions self.ks = ks self.pi0 = pi0 self.config = config self.hh = self._makeD2hh() self.hhh = self._makeD2hhh() self.hhhh = self._makeD2hhhh() self.ksh_ll = self._makeD2KSh("LL") self.ksh_dd = self._makeD2KSh("DD") self.kshh_ll = self._makeD2KShh("LL") self.kshh_dd = self._makeD2KShh("DD") self.pi0hh_merged = self._makeD2Pi0hh("Merged") self.pi0hh_resolved = self._makeD2Pi0hh("Resolved") self.pi0hhh_merged = self._makeD2Pi0hhh("Merged") self.pi0hhh_resolved = self._makeD2Pi0hhh("Resolved") # PID filtered selections self.hh_pid = [filterPID('D2HHPID',self.hh,config_pid)] self.hhh_pid = [filterPID('D2HHHPID',self.hhh,config_pid)] # subset decays oneK = "NINTREE(ABSID=='K+') == 1" d_cf = "(((ID=='D+') & (NINTREE(ID=='K-')==1) & (%s)) | "\ "((ID=='D-') & (NINTREE(ID=='K+')==1) & (%s)))" % (oneK,oneK) ds_cf = "((NINTREE(ID=='K-')==1) & (NINTREE(ID=='K+')==1))" self.kpi_pid = [filterSelection('D2KPIPID',oneK,self.hh_pid)] self.k3pi = [filterSelection('D2K3PI',oneK,self.hhhh)] self.pi0kpi_merged = [filterSelection('D2Pi0KPi_Merged',oneK, self.pi0hh_merged)] self.pi0kpi_resolved = [filterSelection('D2Pi0KPi_Resolved',oneK, self.pi0hh_resolved)] d_min,d_max,ds_min,ds_max = self._massWindowD2HHHCF() d_cf = LoKiCuts.combine([d_cf,"in_range(%s,MM,%s)"%(d_min,d_max)]) ds_cf = LoKiCuts.combine([ds_cf,"in_range(%s,MM,%s)"%(ds_min,ds_max)]) cf = '('+d_cf+') | (' + ds_cf + ')' self.hhh_cf_pid = [filterSelection('D2HHHCFPID',cf,self.hhh_pid)] # WS decays self.kshh_ll_ws = self._makeD2KShhWS("LL") self.kshh_dd_ws = self._makeD2KShhWS("DD") self.hh_ws = self._makeD2hhWS() self.pi0hh_merged_ws = self._makeD2Pi0hhWS('Merged') self.pi0hh_resolved_ws = self._makeD2Pi0hhWS('Resolved') self.hhhh_ws = self._makeD2hhhhWS()
def filterMuons(muons,config): name='B2MuMuXNoPidMuonFilter' code = '' if config['ISMUON']: code += '(ISMUON) & ' name=name.replace("NoPid","Loose") if config['InAccMuon']: code += '(PPINFO(LHCb.ProtoParticle.InAccMuon,-1) == 1) &' code += LoKiCuts(['TRCHI2DOF','MIPCHI2DV'],config).code() return Selection(name,Algorithm=FilterDesktop(Code=code), RequiredSelections=[muons])
def makeB2TwoDetachedDimuons(name, config, inputSel): """ B --> KS0 KS0 --> 4mu selection """ # define cuts on B object wm = [ 'in_range(%s,AM,%s)' % (config['MASS_MIN']['B'], config['MASS_MAX']['B']) ] wm = '(' + ('|'.join(wm)) + ')' comboCuts = [LoKiCuts(['SUMPT'], config).code(), wm] comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVIPCHI2', 'BPVDIRA'], config).code() B2KSKS = CombineParticles("Combine" + name) B2KSKS.DecayDescriptor = 'B0 -> KS0 KS0' B2KSKS.CombinationCut = comboCuts B2KSKS.MotherCut = momCuts return Selection(name, Algorithm=B2KSKS, RequiredSelections=inputSel)
def makeV0s(name,particles,decay,config): ''' Makes all V0 -> X+X- selections.''' dauPiCuts = {'pi+' : LoKiCuts(['P','PT','TRCHI2DOF','MIPCHI2DV'],config['DAUGHTERS']).code()} dauKCuts = {'K+' : LoKiCuts(['P','PT','TRCHI2DOF','MIPCHI2DV'],config['DAUGHTERS']).code()} if 'Rho' in name: wm = ['in_range(%s,AM,%s)' % (config['MASS_MIN']['RHO'],config['MASS_MAX']['RHO'])] elif 'Kst' in name: wm = ['in_range(%s,AM,%s)' % (config['MASS_MIN']['KST'],config['MASS_MAX']['KST'])] elif 'Phi' in name: wm = ['in_range(%s,AM,%s)' % (config['MASS_MIN']['PHI'],config['MASS_MAX']['PHI'])] wm = '('+('|'.join(wm))+')' comboCuts = [LoKiCuts(['ASUMPT'],config).code(),wm] comboCuts.append(LoKiCuts(['AMAXDOCA'],config).code()) comboCuts = LoKiCuts.combine(comboCuts) momCuts = LoKiCuts(['VCHI2DOF','BPVVDCHI2','BPVDIRA'],config).code() cp = CombineParticles(CombinationCut=comboCuts,MotherCut=momCuts, DecayDescriptors=[decay]) return Selection(name+'B2MuMuX',Algorithm=cp, RequiredSelections=particles)
def makeB2X(name,decay,inputs,config,useIP=True,resVert=True): '''Makes all B -> X selections.''' from copy import deepcopy config = deepcopy(config) if name.find('B02') >= 0 or name.find('B2D0PiNoIP') >= 0: config['AM_MAX'] = '6000*MeV' if name.find('B02DPiD2HHHBeauty2Charm') >=0 or name.find('B02DKD2HHHBeauty2Charm') >=0 : config['AM_MAX'] = '7000*MeV' if name.find('B02DPiD2Pi0HHHResolvedBeauty2Charm') >=0 or name.find('B02DKD2Pi0HHHResolvedBeauty2Charm') >=0 : config['AM_MAX'] = '7000*MeV' #if name.find('Bc') >=0 : # config['AM_MIN'] = '6000*MeV' # config['AM_MAX'] = '7000*MeV' comboCuts = LoKiCuts(['SUMPT','AM'],config).code() flightCuts = ['BPVLTIME','DZ1','DZ2'] if useIP: flightCuts += ['BPVIPCHI2','BPVDIRA'] momCuts = [LoKiCuts(['VCHI2DOF', 'BPVCORRM'],config).code(),has1TrackChild(), hasTopoChildren(),LoKiCuts(flightCuts,config).code()] momCuts = LoKiCuts.combine(momCuts) b2x = CombineParticles(DecayDescriptors=decay,CombinationCut=comboCuts, MotherCut=momCuts) return Selection(name,Algorithm=b2x,RequiredSelections=inputs)
def _makeFiltCharm(self,input,name,tag): x = self.tightCuts dCuts = deepcopy(x) childPIDp = "(NINGENERATION( ('p+'==ABSID) & (PIDp < %s), 1) < 1 )"\ %(self.config['pPIDp_MIN']) childPIDK = "(NINGENERATION( ('K+'==ABSID) & (PIDK < %s), 1) < 1 )"\ %(self.config['KPIDK_MIN']) childPIDpi = "(NINGENERATION( ('pi+'==ABSID) & (PIDK > %s), 1) < 1 )"\ %(self.config['piPIDK_MAX']) dCuts.append(childPIDK ) dCuts.append(childPIDpi ) dCuts.append(childPIDp ) # Create Tight D+- Mesons dCuts.append(self._massWindow(tag)) dCuts = LoKiCuts.combine(dCuts) return [filterSelection(name,dCuts,input)]
def __init__(self,d,dst,lc,config): self.hhh = d.hhh self.hh = d.hh self.d0pi = dst.d0pi self.pkpi = lc.pkpi self.config = config self.tightCuts = [LoKiCuts(['MIPCHI2DV','VCHI2DOF','BPVVDCHI2', 'MIPCHI2DV','BPVDIRA','BPVVDRHO','BPVVDZ'], config).code()] self.fhhh = self._makeFiltCharm(self.hhh,'DFilt','D') self.fhh = self._makeFiltCharm(self.hh,'D0Filt','D0') self.fdst = self._makeFiltCharm(self.d0pi,'DstFilt','Dst') self.flc = self._makeFiltCharm(self.pkpi,'LcFilt','Lc') self.hh_biased = self._makeBiased('D2HH',d.hh) self.hhh_biased = self._makeBiased('D2HHH',d.hhh) self.dst_biased = self._makeBiased('Dst2DH',dst.d0pi)
def _makeX2HHH(self,name,decays,amass,config,inputs): ''' Makes all X -> HHH selections with charged tracks only.''' comboCuts = [LoKiCuts(['ASUMPT'],config).code(),amass,hasTopoChild()] comboCuts12 = [LoKiCuts(['ADOCA12'],config).code()] comboCuts.append(LoKiCuts(['ADOCA13'],config).code()) comboCuts.append(LoKiCuts(['ADOCA23'],config).code()) numPassPtCut = "(ANUM(PT < %s) <= 1)" %(config['PTMIN1']) comboCuts.append(numPassPtCut) comboCuts = LoKiCuts.combine(comboCuts) comboCuts12 = LoKiCuts.combine(comboCuts12) momCuts = LoKiCuts(['VCHI2DOF','BPVVDCHI2','BPVDIRA','MIPCHI2DV', 'BPVVDRHO','BPVVDZ'],config).code() cp = DaVinci__N3BodyDecays(Combination12Cut=comboCuts12,CombinationCut=comboCuts,MotherCut=momCuts, DecayDescriptors=decays) return Selection(name+'Beauty2Charm',Algorithm=cp, RequiredSelections=inputs)
def makeEEdd(default_config): eedd = DiElectronMaker('EEDDForDarkBoson') eedd.Particle = "KS0" selector = trackSelector(eedd, trackTypes=["Downstream"]) eedd.addTool(ProtoParticleCALOFilter, name='Electron') eedd.Electron.Selection = ["RequiresDet='CALO' CombDLL(e-pi)>'%s'" \ % default_config['PID']['E']['PIDe_MIN']] eedd.DiElectronMassMax = 5000 eedd.DiElectronMassMin = 0 eedd.DiElectronPtMin = 250 eedd.ElectronPtMin = 100 eedd.ElectronPIDcut = default_config['PID']['E']['PIDe_MIN'] sel = Selection('EEDDDarkBosonSel',Algorithm=eedd) code = LoKiCuts(['HASVERTEX','BPVVDCHI2','VCHI2DOF'],default_config['V']).code() #print 'makeEEdd', code return Selection('FilterEEDDDarkBoson',Algorithm=FilterDesktop(Code=code), RequiredSelections=[sel])
def _makeXiccpp2Xicpi(self): '''Makes Lc -> p K pi + cc''' dm,units = LoKiCuts.cutValue(self.config['MASS_WINDOW']) comboCuts = [LoKiCuts(['ASUMPT'],self.config).code(), "(ADAMASS('Xi_cc++') < %s*%s) " % (dm+410,units)] comboCuts.append(LoKiCuts(['AMAXDOCA'],self.config).code()) comboCuts = LoKiCuts.combine(comboCuts) momCuts = ["(ADMASS('Xi_cc++') < %s*%s) " % (dm+400,units), LoKiCuts(['VCHI2DOF','BPVVDCHI2','BPVDIRA'], self.config).code()] momCuts = LoKiCuts.combine(momCuts) cp = CombineParticles(CombinationCut=comboCuts,MotherCut=momCuts, DecayDescriptors=["[Xi_cc++ -> Xi_c+ pi+]cc"]) return Selection('Xiccpp2XicPiXic2PKPiPBeauty2Charm',Algorithm=cp, RequiredSelections=[self.xic,self.pions])