Skip to content
Snippets Groups Projects

Draft: DsstGamma line

Closed Mark Smith requested to merge RD/B2DsstGamma_line into 2018-patches
1 file
+ 114
2
Compare changes
  • Side-by-side
  • Inline
@@ -21,7 +21,7 @@ __author__ = ['Fatima Soomro', 'Albert Puig', 'Pablo Ruiz Valls', 'Luis Miguel G
__date__ = '09/11/2016'
__version__ = '$Revision: 2.0 $'
__all__ = ('StrippingB2XGammaConf', 'makePhoton', 'makePhi2KK', 'makeKstar', 'makeBs2PhiGamma', 'makeBd2KstGamma', 'default_config')
__all__ = ('StrippingB2XGammaConf', 'makePhoton', 'makePhi2KK', 'makeKstar', 'makeDs2KKPi', 'makeDsst2DsGamma', 'makeBs2PhiGamma', 'makeBd2KstGamma', 'makeBp2DsstGamma', 'default_config')
from Gaudi.Configuration import *
from GaudiConfUtils.ConfigurableGenerators import FilterDesktop, CombineParticles
@@ -41,13 +41,21 @@ default_config = {
,'PhiMassWin' : 15. # MeV
,'KstMassWin' : 100. # MeV was(150)
,'DsMassWin' : 60. # MeV
,'DsstMassMin' : 1962. # MeV
,'DsstMassMax' : 2262. # MeV
,'PhiVCHI2' : 9. # dimensionless
,'KstVCHI2' : 9. # dimensionless
,'DsVCHI2' : 5. # dimensionless
,'BdDIRA' : 60e-3 # rad
,'photonPT' : 2500. # MeV
,'Bp2DsstGammaPhotonPT' : 2000. # MeV
,'DsstGammaConeCut' : 0.45 # dimensionless
,'DsstGammaCL' : 0.4 # dimensionless
,'B_PT' : 2000. # MeV (was 3000)
,'B_PT' : 2000. # MeV (was 3000)
,'Bs_PT' : 4000. # MeV (was 3000)
,'SumVec_PT' : 1500. #MeV (was 1500)
,'MinTrack_PT' : 500. #MeV
,'MinTrack_P' : 3000. #MeV
@@ -55,8 +63,12 @@ default_config = {
,'BMassMin' : 4000. # MeV
,'BMassMax' : 7000. # MeV
,'BpMassMin' : 4500. #MeV
,'BpMassMax' : 6000. #MeV
,'BsPVIPchi2' : 9. # Dimensionless
,'BpDsPVIPchi2' : 9. # Dimensionless
,'B0PVIPchi2' : 9. # Dimensionless
,'DsstVTXchi2' : 9. # Dimensionless
,'BsVTXchi2' : 9. # Dimensionless
,'B0VTXchi2' : 9. # Dimensionless
,'GhostProb_Max' : 0.4 # Dimensionless
@@ -125,6 +137,24 @@ class Beauty2XGammaExclusiveConf(LineBuilder):
config['SumVec_PT'],
config['MinTrack_PT'],
config['MinTrack_P'])
self.selDs = makeDs2KKPi('DsSel' + self.name,
config['TrIPchi2'],
config['TrChi2'],
config['DsMassWin'],
config['DsVCHI2'],
config['GhostProb_Max'],
config['SumVec_PT'],
config['MinTrack_PT'],
config['MinTrack_P']
)
self.selDsst = makeDsst2DsGamma('Dsst2DsGamaSel' + self.name,
self.selDs,
config['DsstMassMin'],
config['DsstMassMax'],
config['DsVCHI2'],
config['DsstGammaConeCut'],
config['DsstGammaCL']
)
# Bs->Phi Gamma selections
self.selBs2PhiGamma = makeBs2PhiGamma(self.name + 'Bs2PhiGamma',
self.selPhi2KK,
@@ -146,6 +176,15 @@ class Beauty2XGammaExclusiveConf(LineBuilder):
config['B_PT'],
config['B_APT'],
config['BdDIRA'])
# Bs->Dsst Gamma selection
self.selBp2DsstGamma = makeBp2DsstGamma(self.name + 'Bp2DsstGamma',
self.selDsst,
config['BpMassMin'],
config['BpMassMax'],
config['BsVTXchi2'],
config['BpDsPVIPchi2'],
config['Bs_PT'],
config['Bp2DsstGammaPhotonPT'])
# Stripping lines
self.Bs2PhiGammaLine = StrippingLine(self.name + 'Bs2PhiGammaLine',
prescale=config['Bs2PhiGammaPreScale'],
@@ -162,6 +201,13 @@ class Beauty2XGammaExclusiveConf(LineBuilder):
EnableFlavourTagging = True,
selection=self.selBd2KstGamma)
self.registerLine(self.Bd2KstGammaLine)
self.Bp2DsstGammaLine = StrippingLine(self.name + 'Bp2DsstGammaLine',
prescale=1.,
postscale=1.,
EnableFlavourTagging = False,
selection=self.selBp2DsstGamma)
self.registerLine(self.Bp2DsstGammaLine)
def makePhoton(name, photonPT):
"""Create photon Selection object starting from DataOnDemand 'Phys/StdLooseAllPhotons'.
@@ -184,6 +230,7 @@ def makePhoton(name, photonPT):
_stdGamma = StdLooseAllPhotons
return Selection(name, Algorithm=_gammaFilter, RequiredSelections=[_stdGamma])
def makePhi2KK(name, TrIPchi2Phi, TrChi2, PhiMassWin, PhiVCHI2, GhostProb_Max, SumVec_PT, MinTrack_PT, MinTrack_P) :
"""
Create and return a Phi->KK Selection object, starting from DataOnDemand 'Phys/StdLoosePhi2KK'.
@@ -226,6 +273,71 @@ def makeKstar(name, TrIPchi2Kst, TrChi2, KstMassWin, KstVCHI2, GhostProb_Max, Su
_stdKst2Kpi = DataOnDemand(Location="Phys/StdVeryLooseDetachedKst2Kpi/Particles")
return Selection(name, Algorithm=_kstFilter, RequiredSelections=[_stdKst2Kpi])
def makeDs2KKPi(name, TrIPchi2Ds, TrChi2, DsMassWin, DsVCHI2, GhostProb_Max, SumVec_PT, MinTrack_PT, MinTrack_P) :
"""
Create and return a Ds->KKpi Selection object, starting from DataOnDemand 'Phys/StdLooseDsplus2KKPi'.
@arg name: name of the Selection.
@arg TrIPchi2Ds: tracks IP chi2
@arg TrChi2: tracks chi2
@arg DsMassWin: Ds mass window
@arg DsVCHI2: vertex chi2 of the Ds
@return: Selection object
"""
_preambulo = ["goodTrack = ((MIPCHI2DV(PRIMARY) > %(TrIPchi2Ds)s) & (TRCHI2DOF < %(TrChi2)s) & (MAXTREE(TRGHOSTPROB, HASTRACK) < %(GhostProb_Max)s) & (P > %(MinTrack_P)s) & (PT > %(MinTrack_PT)s))" % locals(),
"goodDs = (((VFASPF(VCHI2/VDOF) < %(DsVCHI2)s)) & (ADMASS('D_s+') < %(DsMassWin)s*MeV) & (SUMTREE(PT, ISBASIC, 0.0) > %(SumVec_PT)s))" % locals()]
_code = "goodDs & CHILDCUT( goodTrack , 1 ) & CHILDCUT( goodTrack , 2 ) & CHILDCUT( goodTrack , 3 )"
_dsFilter = FilterDesktop(Preambulo=_preambulo, Code=_code)
_stdDs2KKpi = DataOnDemand(Location="Phys/StdLooseDsplus2KKPi/Particles")
return Selection(name, Algorithm=_dsFilter, RequiredSelections=[_stdDs2KKpi])
def makeDsst2DsGamma(name, DsSel, DsstMassMin, DsstMassMax, DsstVTXchi2, DsstGammaConeCut, DsstGammaCL) :
"""
Create and return a Ds*->Ds gamma Selection object, using photons from Phys/StdVeryLooseAllPhotons.
@arg name: name of the Selection.
@arg DsstMassMin: Dsst mass min
@arg DsstMassMax: Dsst mass max
@arg DsstVCHI2: vertex chi2 of the Ds*
@return: Selection object
"""
_gammaForDsst = DataOnDemand(Location="Phys/StdVeryLooseAllPhotons/Particles")
_gammaForDsstFilter = FilterDesktop(Code = "(CL>%(DsstGammaCL)s)" % locals())
_gammaForDsstSelection = Selection(name+'GammaSel', Algorithm = _gammaForDsstFilter, RequiredSelections=[_gammaForDsst])
_combinationCut = "((AM > %(DsstMassMin)s) & (AM < %(DsstMassMax)s) & (abs(ACHILD(PHI, 1) - ACHILD(PHI, 2))<%(DsstGammaConeCut)s) & (abs(ACHILD(ETA, 1) - ACHILD(ETA, 2))<%(DsstGammaConeCut)s) )" % locals()
_motherCut = "(VFASPF(VCHI2/VDOF) <%(DsstVTXchi2)s) & (M > %(DsstMassMin)s) & (M < %(DsstMassMax)s)" % locals()
_Dsst = CombineParticles(DecayDescriptor="[D*_s+ -> D_s+ gamma]cc",
CombinationCut=_combinationCut,
MotherCut=_motherCut,
ReFitPVs=False)
return Selection(name, Algorithm=_Dsst, RequiredSelections = [_gammaForDsstSelection, DsSel])
def makeBp2DsstGamma(name, DsstSel, BpMassMin, BpMassMax, BsVTXchi2, BpDsPVIPchi2, BPT, photonPT) :
"""
Create and return a Ds*->Ds gamma Selection object, using photons from Phys/StdVeryLooseAllPhotons.
@arg name: name of the Selection.
@arg DsstMassWin: Ds mass window
@return: Selection object
"""
_gammaForBs = makePhoton('B2DsGammaPhotonSel' + name,photonPT)
_combinationCut = "((AM > %(BpMassMin)s) & (AM < %(BpMassMax)s))" % locals()
_motherCut = "(VFASPF(VCHI2/VDOF) <%(BsVTXchi2)s) & (M > %(BpMassMin)s) & (M < %(BpMassMax)s) & (BPVIPCHI2() < %(BpDsPVIPchi2)s) & (PT > %(BPT)s)" % locals()
_Dsst = CombineParticles(DecayDescriptor="[B+ -> D*_s+ gamma]cc",
CombinationCut=_combinationCut,
MotherCut=_motherCut,
ReFitPVs=False)
return Selection(name, Algorithm=_Dsst, RequiredSelections = [_gammaForBs, DsstSel])
def makeBs2PhiGamma(name, phiSel, gammaSel, BsVTXchi2, BsPVIPchi2, BMassMin, BMassMax, BPT, B_APT):
"""
Create and return a Bs -> Phi Gamma Selection object, starting with the daughters' selections.
Loading