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)
Beispiel #2
0
 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])
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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])
Beispiel #7
0
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)    
Beispiel #8
0
 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)
Beispiel #9
0
 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)
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
 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)
Beispiel #15
0
 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)
Beispiel #16
0
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)
Beispiel #18
0
 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))
Beispiel #20
0
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()
Beispiel #22
0
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])
Beispiel #23
0
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)
Beispiel #24
0
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)  
Beispiel #25
0
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)
Beispiel #26
0
 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)]
Beispiel #27
0
 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)
Beispiel #28
0
 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)
Beispiel #29
0
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])
Beispiel #30
0
 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])