def makeB2X(name,
            decay,
            inputs,
            config,
            useIP=True,
            resVert=False,
            usePi0=False):
    '''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(),
        has1TrackChild(),
        hasTopoChildren(),
        LoKiCuts(flightCuts, config).code()
    ]
    momCuts = LoKiCuts.combine(momCuts)
    b2x = CombineParticles(DecayDescriptors=decay,
                           CombinationCut=comboCuts,
                           MotherCut=momCuts)
    if usePi0:
        #b2x = b2x.configurable(name+'Beauty2XGammaCombiner')
        #b2x.ParticleCombiners.update({'':'MomentumCombiner'})
        b2x.ParticleCombiners = {'': 'LoKi::VertexFitter'}
    if resVert:
        b2x = b2x.configurable(name + 'Beauty2XGammaVertexFitter')
        b2x.addTool(OfflineVertexFitter)
        b2x.ParticleCombiners.update({"": "OfflineVertexFitter"})
        b2x.OfflineVertexFitter.useResonanceVertex = False
    return Selection(name, Algorithm=b2x, RequiredSelections=inputs)
def makeBs2XMuMu(name,
                 DecayDescriptor,
                 DaughterLists,
                 BsMassWin,
                 BsVCHI2DOF,
                 BsDIRA,
                 BsIPCHI2,
                 BsFDCHI2):
    from Configurables import CombineParticles, OfflineVertexFitter
    combinerName = "Combine" + name
    _Bs = CombineParticles(combinerName)
    _Bs.DecayDescriptor = DecayDescriptor 
    _Bs.CombinationCut = "ADAMASS('B_s0') < %(BsMassWin)s *MeV" % locals()
    _Bs.MotherCut = "  (VFASPF(VCHI2/VDOF) < %(BsVCHI2DOF)s)" \
                    "& (BPVDIRA > %(BsDIRA)s)" \
                    "& (BPVIPCHI2() < %(BsIPCHI2)s)" \
                    "& (BPVVDCHI2 > %(BsFDCHI2)s)" % locals()
    #        _Bs.ReFitPVs = True
    # Set the OfflineVertexFitter to keep the 4 tracks
    _Bs.addTool( OfflineVertexFitter )
    _Bs.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )
    _Bs.OfflineVertexFitter.useResonanceVertex = False
    return Selection(name, 
                     Algorithm = _Bs,
                     RequiredSelections = DaughterLists)
Exemple #3
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('NoIP') >= 0:
        config['AM_MAX'] = '6000*MeV'
    comboCuts = LoKiCuts(['SUMPT', 'AM'], config).code()
    flightCuts = ['BPVLTIME', 'DZ1', 'DZ2']
    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.ParticleCombiners.update({"": "OfflineVertexFitter"})
        b2x.OfflineVertexFitter.useResonanceVertex = False
    return Selection(name, Algorithm=b2x, RequiredSelections=inputs)
Exemple #4
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)