Пример #1
0
def topoSubPID(name, inputs):
    sub = SubstitutePID(name + 'SubPID', Code="DECTREE('X0 -> X X')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'X0 -> X X': 'B0'}
    sel = Selection(name + 'FinalSel',
                    Algorithm=sub,
                    RequiredSelections=[inputs])
    filter = "INTREE(ID=='B0')"
    return filterSelection(name, filter, [sel])
def subPID(name,p,d,inputs):
    sub = SubstitutePID(name+'SubPIDBeauty2XGamma',
                        Code="DECTREE('X0 -> X+ X-')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'X0 -> ^X+ X-' : d[0],'X0 -> X+ ^X-' : d[1],
                         'X0 -> X+ X-'  : p}
    sel = Selection(name+'Beauty2XGammaSel',Algorithm=sub,
                    RequiredSelections=inputs)
    filter = "INTREE(ID=='%s') & INTREE(ID=='%s') & INTREE(ID=='%s')" \
             % (p,d[0],d[1])
    return filterSelection(name,filter,[sel])
Пример #3
0
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])
Пример #4
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 _buildAlgorithmChain(self, name, decayCombos, massLow, massHigh,
                          inputSelection):
     print 'build shit!!!!'
     uniqueCombos = []
     for nominalDecay, validDecays in decayCombos.items():
         uniqueCombos.extend(validDecays)
     uniqueCombos = list(set(uniqueCombos))
     wmSelections = {}
     for combo in uniqueCombos:
         comboName = ''.join(self._unsignDecay(combo))
         functor = self._buildUnsignedWMFunctor({combo: [combo]}, massLow,
                                                massHigh)
         _filter = FilterDesktop("%s_WMFilter_%s" % (name, comboName),
                                 Code=functor)
         print '_filter', _filter
         wmSelections[comboName] = Selection(
             "%s_WMSel_%s" % (name, comboName),
             Algorithm=_filter,
             RequiredSelections=[inputSelection])
     mySelections = {}
     for nominalDecay, validDecays in decayCombos.items():
         nominalDecayName = ''.join(nominalDecay)
         nDaughters = len(nominalDecay)
         algoList = []
         for validDecay in validDecays:
             validDecayName = ''.join(validDecay)
             wmSel = wmSelections[''.join(self._unsignDecay(validDecay))]
             _subsAlgo = SubstitutePID("%s_SubsAlg_%s" %
                                       (name, validDecayName),
                                       Code="DECTREE( 'Charm -> %s' )" %
                                       (' '.join(self.referenceDecay)),
                                       Substitutions={})
             _subsAlgo.MaxChi2PerDoF = -666
             mySubs = {}
             for i, validDaughter in enumerate(validDecay):
                 #if validDaughter == self.referenceDecay[i]:
                 #  continue
                 if not validDaughter in mySubs:
                     mySubs[validDaughter] = self.referenceDecay[:]
                 mySubs[validDaughter][i] = '^' + mySubs[validDaughter][i]
             for sub, descriptor in mySubs.items():
                 subsString = 'Charm -> ' + ' '.join(descriptor)
                 _subsAlgo.Substitutions[subsString] = sub
             #print 'Combo:', 'alg =', _subsAlgo
             print 'subs:', _subsAlgo.Substitutions
             print 'code:', _subsAlgo.Code
             sel = Selection("%sSel_%s" % (name, validDecayName),
                             Algorithm=_subsAlgo,
                             RequiredSelections=[wmSel])
             sel = Selection(name + 'Sel_' + validDecayName + 'Filter',
                             Algorithm=FilterDesktop(
                                 'DummyName',
                                 Code='(in_range(1764.84, MM, 1964.84))'),
                             RequiredSelections=[sel])  # hi
             algoList.append(sel)
             #mySelections[validDecayName] = sel
         print 'algoList', algoList
         mySelections[nominalDecayName] = MergedSelection(
             "%sMSel_%s" % (name, nominalDecayName),
             RequiredSelections=algoList)
     print 'mySelections', mySelections
     return mySelections