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)
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)
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)