Skip to content
Snippets Groups Projects
Commit 113d6174 authored by James Brown's avatar James Brown Committed by Yingao Tang
Browse files

Added new Bd2K1MuMu line

parent 8b3750dc
No related branches found
No related tags found
3 merge requests!1919Fixes for Bd2K1MuMuLine,!1766Added new Bd2K1MuMu line,!1742Rd 2018 patches
###############################################################################
# (c) Copyright 2000-2021 CERN for the benefit of the LHCb Collaboration #
# #
# This software is distributed under the terms of the GNU General Public #
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
# #
# In applying this licence, CERN does not waive the privileges and immunities #
# granted to it by virtue of its status as an Intergovernmental Organization #
# or submit itself to any jurisdiction. #
###############################################################################
"""
Stripping options for "B0 -> ( Jpsi -> mu+ mu- ) ( K1(1270) -> ( K*(892) -> K+ pi- ) pi0 )"CC - reconstructed as Bd -> Jpsi K* for efficiency reasons'
Author: James Brown
"""
########################################################################
__author__ = ['James Brown']
__date__ = '23/06/2023'
__version__ = '$ 1.0 $'
__all__ = ('Bd2K1MuMuLine',
'makeBdK1Jpsi',
'makeJpsis',
'makeKstars',
'default_config')
from Gaudi.Configuration import *
from GaudiConfUtils.ConfigurableGenerators import CombineParticles
from StandardParticles import StdLooseMuons, StdAllLooseKaons, StdAllLoosePions
from PhysSelPython.Wrappers import Selection
from StrippingConf.StrippingLine import StrippingLine
from StrippingUtils.Utils import LineBuilder, checkConfig
default_config = {
'NAME' : 'Bd2K1MuMu',
'WGs' : ['RD'],
'BUILDERTYPE' : 'Bd2K1MuMuLine',
'CONFIG' : {'PrescaleBd2K1MuMuLine' : 1,
### B0
'BMassWindow' : 2500,
'BDIRA' : 0.9995,
'BIPCHI2' : 100,
'BVertexCHI2' : 9,
'BVDCHI2' : 100,
### Intermediates - Jpsi/Kst
"InterMIPCHI2DV" : 0,
"InterVertexCHI2" : 9,
"JpsiUpperM" : 3300,
"JpsiLowerM" : 3000,
"KstUpperM" : 1100,
"KstLowerM" : 700,
"Kst_PT" : 800,
### Final states
"fsPT" : 300,
"fsMIPCHI2DV" : 4,
"fsTRCHI2" : 4,
"fsTRGHOSTPROB" : 0.4,
"fsPROBNN" : 0.4,
"muPROBpi" : 0.95,
"fsM" : 2600,
},
'STREAMS' : ['Leptonic']
}
class Bd2K1MuMuLine( LineBuilder ) :
__configuration_keys__ = default_config['CONFIG'].keys()
def __init__( self,name,config ) :
LineBuilder.__init__(self, name, config)
Bd2K1MuMuName = name
# Default SPD hits filter
SPDFilter = {
'Code' : " ( recSummary(LHCb.RecSummary.nSPDhits,'Raw/Spd/Digits') < 600 )" ,
'Preambulo' : [ "from LoKiNumbers.decorators import *", "from LoKiCore.basic import LHCb" ]
}
# Make parents
self.Jpsi = makeJpsis( "JpsisForBd2K1MuMu",
config['InterMIPCHI2DV'], config['InterVertexCHI2'], config['JpsiLowerM'], config['JpsiUpperM'],
config['fsPT'], config['fsMIPCHI2DV'], config['fsTRCHI2'], config['fsTRGHOSTPROB'], config['fsPROBNN'], config['muPROBpi'], config['fsM'])
self.Kst = makeKstars( "KstForBd2K1MuMu",
config['InterMIPCHI2DV'], config['InterVertexCHI2'], config['KstLowerM'], config['KstUpperM'], config['Kst_PT'],
config['fsPT'], config['fsMIPCHI2DV'], config['fsTRCHI2'], config['fsTRGHOSTPROB'], config['fsPROBNN'], config['fsM'])
# Make B0
self.BdK1Jpsi = makeBdK1Jpsi( name, self.Jpsi, self.Kst,
config['BMassWindow'], config['BVertexCHI2'], config['BIPCHI2'], config['BDIRA'], config['BVDCHI2'])
self.lineBd2K1MuMu = StrippingLine( Bd2K1MuMuName+"Line",
prescale = config['PrescaleBd2K1MuMuLine'],
selection = self.BdK1Jpsi,
FILTER = SPDFilter,
EnableFlavourTagging = False,
RequiredRawEvents = ["Trigger","Muon","Calo","Rich","Velo","Tracker"])
#RequiredRawEvents = ["Velo"])
self.registerLine(self.lineBd2K1MuMu)
##############################################################
def makeBdK1Jpsi( name, Jpsi, K1,
BMassWindow, BVertexCHI2, BIPCHI2, BDIRA, BVDCHI2) :
_combination_cuts = "( ADAMASS('B0') < %(BMassWindow)s * MeV )" %locals()
_mother_cuts = "( (VFASPF(VCHI2/VDOF) < %(BVertexCHI2)s ) & (BPVIPCHI2() < %(BIPCHI2)s ) & (BPVDIRA > %(BDIRA)s ) & (BPVVDCHI2 > %(BVDCHI2)s ) )" %locals()
CombineBdK1Jpsi = CombineParticles( DecayDescriptor = "[B0 -> J/psi(1S) K*(892)0]cc",
CombinationCut = _combination_cuts,
MotherCut = _mother_cuts )
return Selection( name,
Algorithm = CombineBdK1Jpsi,
RequiredSelections = [ Jpsi, K1 ] )
def makeJpsis( name,
InterMIPCHI2DV, InterVertexCHI2, JpsiLowerM, JpsiUpperM,
fsPT, fsMIPCHI2DV, fsTRCHI2, fsTRGHOSTPROB, fsPROBNN, muPROBpi, fsM) :
_daughters_cuts = '(HASMUON) & (ISMUON) & ( PT > %(fsPT)s ) & ( MIPCHI2DV(PRIMARY) > %(fsMIPCHI2DV)s ) & ( TRGHOSTPROB < %(fsTRGHOSTPROB)s ) & ( TRCHI2DOF < %(fsTRCHI2)s ) & ( PROBNNpi < %(muPROBpi)s ) & ( PROBNNmu > %(fsPROBNN)s )' %locals()
_combination_cuts = "(AM > 100*MeV)"
_mother_cuts = "(MM > %(JpsiLowerM)s *MeV) & (MM < %(JpsiUpperM)s *MeV) & (VFASPF(VCHI2/VDOF)<%(InterVertexCHI2)s) & (MIPCHI2DV(PRIMARY) > %(InterMIPCHI2DV)s )" %locals()
CombineDiMuons = CombineParticles( DecayDescriptor = "J/psi(1S) -> mu+ mu-",
DaughtersCuts = { "mu+" : _daughters_cuts, "mu-" : _daughters_cuts},
CombinationCut = _combination_cuts,
MotherCut = _mother_cuts )
DiMuonConf = CombineDiMuons.configurable("CombineDiMuons")
return Selection( name,
Algorithm = CombineDiMuons,
RequiredSelections = [ StdLooseMuons ] )
def makeKstars( name,
InterMIPCHI2DV, InterVertexCHI2, KstLowerM, KstUpperM, Kst_PT,
fsPT, fsMIPCHI2DV, fsTRCHI2, fsTRGHOSTPROB, fsPROBNN, fsM) :
_daughters_cuts = "(PT > %(fsPT)s) & (MIPCHI2DV(PRIMARY)>%(fsMIPCHI2DV)s) & (TRGHOSTPROB<%(fsTRGHOSTPROB)s) & (TRCHI2DOF<%(fsTRCHI2)s) & (M<%(fsM)s)" %locals()
_combination_cuts = "(APT > 500 *MeV) & (ADAMASS('K*(892)0') < 300 *MeV) & (ADOCACHI2CUT(30, ''))"
_mother_cuts = "(MM > %(KstLowerM)s *MeV) & (MM < %(KstUpperM)s *MeV) & (VFASPF(VCHI2/VDOF)<%(InterVertexCHI2)s) & (MIPCHI2DV(PRIMARY) > %(InterMIPCHI2DV)s ) & (PT>%(Kst_PT)s *MeV)" %locals()
CombineKst = CombineParticles( DecayDescriptor = "[K*(892)0 -> K+ pi-]cc",
DaughtersCuts = {"K+" : _daughters_cuts + " & (PROBNNk>%(fsPROBNN)s)" %locals(), "pi-" : _daughters_cuts + " & (PROBNNpi>%(fsPROBNN)s)" %locals()},
CombinationCut = _combination_cuts,
MotherCut = _mother_cuts)
KstConf = CombineKst.configurable("CombineKst")
return Selection( name,
Algorithm = CombineKst,
RequiredSelections = [ StdAllLooseKaons, StdAllLoosePions ] )
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment