Source code for skim.WGs.btocharmless

#!/usr/bin/env python3

##########################################################################
# basf2 (Belle II Analysis Software Framework)                           #
# Author: The Belle II Collaboration                                     #
#                                                                        #
# See git log for contributors and copyright holders.                    #
# This file is licensed under LGPL-3.0, see LICENSE.md.                  #
##########################################################################

"""
Skim list building functions for :math:`B\\to X_u +h` analyses
"""

import modularAnalysis as ma
from skim import BaseSkim, fancy_skim_header
from stdV0s import stdKshorts
from skim.standardlists.charmless import (
    loadStdVeryLooseTracks,
    loadStdPi0ForBToCharmless,
    loadStdVeryLooseKstar0,
    loadStdVeryLooseRho0,
    loadStdVeryLooseKstarPlus,
    loadStdVeryLooseKstarPlusPi0,
    loadStdVeryLooseRhoPlus)
from skim.standardlists.lightmesons import (
    loadStdSkimHighEffTracks,
    loadStdSkimHighEffEtaPrime,
    loadStdSkimHighEffEta)
from stdPi0s import stdPi0s
from stdPhotons import stdPhotons

__liaison__ = "Benedikt Wach <benedikt.wach@desy.de>"
_VALIDATION_SAMPLE = "mdst14.root"


[docs]@fancy_skim_header class BtoPi0Pi0(BaseSkim): """ Reconstructed decay modes: * :math:`B^{0}\\to \\pi^0 \\pi^0` Cuts applied: * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.5`` """ __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Francis Pham", "Benedikt Wach"] __description__ = "Skim list definitions for neutral B to two neutral pions." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = False NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): loadStdPi0ForBToCharmless(path=path)
[docs] def build_lists(self, path): Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5' BsigList = [] ma.reconstructDecay('B0:Pi0Pi0 -> pi0:charmlessFit pi0:charmlessFit', Bcuts, path=path) BsigList.append('B0:Pi0Pi0') return BsigList
[docs]@fancy_skim_header class BtoHadTracks(BaseSkim): """ Reconstructed decay modes: * :math:`B^{0}\\to \\pi^+ \\pi^-` * :math:`B^{0}\\to K^+ \\pi^-` * :math:`B^{0}\\to K^+ K^-` * :math:`B^{+}\\to \\pi^+ \\pi^+ \\pi^-` * :math:`B^{+}\\to K_{\\rm S}^0 \\pi^+` * :math:`B^{+}\\to K_{\\rm S}^0 K^+` * :math:`B^{+}\\to K^+ \\pi^+ \\pi^-` * :math:`B^{+}\\to K^+ K^+ \\pi^-` * :math:`B^{+}\\to K^+ K^- \\pi^+` * :math:`B^{+}\\to K^+ K^+ K^-` * :math:`B^{0}\\to \\pi^+ \\pi^- \\pi^+ \\pi^-` * :math:`B^{0}\\to K^+ \\pi^- \\pi^+ \\pi^-` * :math:`B^{0}\\to K^+ K^- \\pi^+ \\pi^-` * :math:`B^{0}\\to K^+ \\pi^- K^+ \\pi^-` * :math:`B^{0}\\to K^+ K^- K^+ \\pi^-` * :math:`B^{0}\\to K^+ K^- K^+ K^-` * :math:`B^{0}\\to K_{\\rm S}^0 \\pi^+ \\pi^-` * :math:`B^{0}\\to K_{\\rm S}^0 K^+ \\pi^-` * :math:`B^{0}\\to K_{\\rm S}^0 K^+ K^-` * :math:`B^{0}\\to K_{\\rm S}^0 K_{\\rm S}^0` * :math:`B^{0}\\to K^{*0} K^- K^+` * :math:`B^{0}\\to K^{*0} \\pi^- \\pi^+` * :math:`B^{0}\\to K^{*0} K^+ \\pi^-` * :math:`B^{0}\\to \\rho^0 \\rho^0` * :math:`B^{+}\\to K^{*+} K^- K^+` * :math:`B^{+}\\to K^{*+} \\pi^- \\pi^+` * :math:`B^{+}\\to K^{*+} K^+ \\pi^-` Cuts applied: * ``nTracks >= 2 (event level)`` * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.3`` """ __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"] __description__ = "Skim list definitions for all B to charmless modes with tracks only in the final state." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = True NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): loadStdVeryLooseTracks('K', path=path) loadStdVeryLooseTracks('pi', path=path) stdKshorts(path=path) loadStdVeryLooseKstar0(path=path) loadStdVeryLooseRho0(path=path) loadStdVeryLooseKstarPlus(path=path)
[docs] def build_lists(self, path): Bcuts = "5.2 < Mbc < 5.29 and abs(deltaE) < 0.3" channels = {'B0:Charmless_b2pipi': 'pi+:SkimVeryLoose pi-:SkimVeryLoose', # 1 'B0:Charmless_b2Kpi': 'K+:SkimVeryLoose pi-:SkimVeryLoose', # 2 'B0:Charmless_b2KK': 'K+:SkimVeryLoose K-:SkimVeryLoose', # 3 'B+:Charmless_b2pipipi': 'pi+:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 4 'B+:Charmless_b2Kspi': 'K_S0:merged pi+:SkimVeryLoose', # 5 'B+:Charmless_b2KsK': 'K_S0:merged K+:SkimVeryLoose', # 6 'B+:Charmless_b2Kpipi': 'K+:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose ', # 7 'B+:Charmless_b2KKpi_0': 'K+:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 8 'B+:Charmless_b2KKpi_1': 'K+:SkimVeryLoose K-:SkimVeryLoose pi+:SkimVeryLoose', # 9 'B+:Charmless_b2KKK': 'K+:SkimVeryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 10 'B0:Charmless_b2pipipipi': 'pi+:SkimVeryLoose pi-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 11 'B0:Charmless_b2Kpipipi': 'K+:SkimVeryLoose pi-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 12 'B0:Charmless_b2KKpipi': 'K+:SkimVeryLoose K-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 13 'B0:Charmless_b2KpiKpi': 'K+:SkimVeryLoose pi-:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 14 'B0:Charmless_b2KKKpi': 'K+:SkimVeryLoose K-:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 15 'B0:Charmless_b2KKKK': 'K+:SkimVeryLoose K-:SkimVeryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 16 'B0:Charmless_b2Kspipi': 'K_S0:merged pi+:SkimVeryLoose pi-:SkimVeryLoose', # 17 'B0:Charmless_b2KsKpi': 'K_S0:merged K+:SkimVeryLoose pi-:SkimVeryLoose', # 18 'B0:Charmless_b2KsKK': 'K_S0:merged K+:SkimVeryLoose K-:SkimVeryLoose', # 19 'B0:Charmless_b2KsKs': 'K_S0:merged K_S0:merged', # 20 'B0:Charmless_b2K*KK': 'K*0:veryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 21 'B0:Charmless_b2K*pipi': 'K*0:veryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 22 'B0:Charmless_b2K*Kpi': 'K*0:veryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 23 'B0:Charmless_b2rhorho': 'rho0:veryLoose rho0:veryLoose', # 24 'B+:Charmless_b2K*pKK': 'K*+:veryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 25 'B+:Charmless_b2K*ppipi': 'K*+:veryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 26 'B+:Charmless_b2K*pKpi': 'K*+:veryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 27 } BsigList = [] for chID, channel in enumerate(channels.keys()): ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel], cut=Bcuts, dmID=chID, path=path) BsigList.append(channel) path = self.skim_event_cuts("nTracks >= 2", path=path) return BsigList
[docs]@fancy_skim_header class BtoHad1Pi0(BaseSkim): """ Reconstructed decay modes: * :math:`B^+\\to \\pi^+ \\pi^0` * :math:`B^+\\to K^+ \\pi^0` * :math:`B^0\\to \\pi^+ \\pi^- \\pi^0` * :math:`B^0\\to K^+ \\pi^- \\pi^0` * :math:`B^0\\to K^- \\pi^+ \\pi^0` * :math:`B^0\\to K^+ K^- \\pi^0` * :math:`B^0\\to K_{\\rm S}^0 \\pi^0` * :math:`B^+\\to K_{\\rm S}^{0} \\pi^+ \\pi^0` * :math:`B^+\\to K_{\\rm S}^{0} K^+ \\pi^0` * :math:`B^+\\to \\rho^{+} \\rho^{0}` Cuts applied: * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.5`` """ __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"] __description__ = "Skim list for B to charmless modes including 1 pi0 in the final state." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = True NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): loadStdVeryLooseTracks('K', path=path) loadStdVeryLooseTracks('pi', path=path) loadStdPi0ForBToCharmless(path=path) stdKshorts(path=path) loadStdVeryLooseRho0(path=path) loadStdVeryLooseRhoPlus(path=path)
[docs] def build_lists(self, path): Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5' BsigList = [] channels = { 'B+:Charmless_b2pipi0': 'pi+:SkimVeryLoose pi0:charmlessFit', # 1 'B+:Charmless_b2Kpi0': 'K+:SkimVeryLoose pi0:charmlessFit', # 2 'B0:Charmless_b2pipipi0': 'pi+:SkimVeryLoose pi-:SkimVeryLoose pi0:charmlessFit', # 1 'B0:Charmless_b2Kpipi0_0': 'K+:SkimVeryLoose pi-:SkimVeryLoose pi0:charmlessFit', # 2 'B0:Charmless_b2KKpi0': 'K+:SkimVeryLoose K-:SkimVeryLoose pi0:charmlessFit', # 4 'B0:Charmless_b2Kspi0': 'K_S0:merged pi0:charmlessFit', # 5 'B+:Charmless_b2Kspipi0': 'K_S0:merged pi+:SkimVeryLoose pi0:charmlessFit', # 6 'B+:Charmless_b2KsKpi0': 'K_S0:merged K+:SkimVeryLoose pi0:charmlessFit', # 7 'B+:Charmless_b2rhorho0': 'rho+:veryLoose rho0:veryLoose', # 8 } for chID, channel in enumerate(channels.keys()): ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel], cut=Bcuts, dmID=chID, path=path) BsigList.append(channel) return BsigList
[docs]@fancy_skim_header class BtoHad3Tracks1Pi0(BaseSkim): """ Reconstructed decay modes: * :math:`B^+\\to K^{*+} K^+ K^-` * :math:`B^+\\to K^{*+} K^+ \\pi^-` * :math:`B^+\\to K^{*+} \\pi^+ \\pi^-` Cuts applied: * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.5`` """ __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"] __description__ = "Skim list for all charged B to charmless modes with 3 tracks and 1 Pi0." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = True NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): loadStdVeryLooseTracks('K', path=path) loadStdVeryLooseTracks('pi', path=path) loadStdPi0ForBToCharmless(path=path) loadStdVeryLooseKstarPlusPi0(path=path)
[docs] def build_lists(self, path): Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5' BsigList = [] channels = { 'B+:Charmless_b2K*KK_2': 'K*+:veryLoosePi0 K-:SkimVeryLoose K+:SkimVeryLoose', # 1 'B+:Charmless_b2K*pipi_2': 'K*+:veryLoosePi0 pi-:SkimVeryLoose pi+:SkimVeryLoose', # 2 'B+:Charmless_b2K*Kpi_2': 'K*+:veryLoosePi0 K+:SkimVeryLoose pi-:SkimVeryLoose', # 3 } for chID, channel in enumerate(channels.keys()): ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel], cut=Bcuts, dmID=chID, path=path) ma.rankByHighest(particleList=channel, variable="cos(mdstIndex)", numBest=3, outputVariable="cosMdstIndex_rank", path=path) BsigList.append(channel) path = self.skim_event_cuts("nTracks >= 2", path=path) return BsigList
[docs]@fancy_skim_header class BtoRhopRhom(BaseSkim): """ Reconstructed decay modes: * :math:`B^+ \\to \\rho^{+} \\rho^{-}` Cuts applied: * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.5`` """ __authors__ = ["Yu Nakazawa", "Benedikt Wach"] __description__ = "Skim list for B to rho+ rho-." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = True NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): loadStdVeryLooseTracks('pi', path=path) loadStdPi0ForBToCharmless(path=path) loadStdVeryLooseRhoPlus(path=path)
[docs] def build_lists(self, path): Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5' BsigList = [] ma.reconstructDecay('B0:Charmless_b2rr -> rho+:veryLoose rho-:veryLoose', Bcuts, path=path) BsigList.append('B0:Charmless_b2rr') path = self.skim_event_cuts("nTracks >= 2", path=path) return BsigList
[docs]@fancy_skim_header class BtoEtapKstp(BaseSkim): """ Reconstructed decay mode: * :math:`B^{+}\\to \\eta^{'} K^{*+}` Cuts applied: * ``5.20 < Mbc < 5.29`` * ``abs(deltaE) < 0.5`` * ``0.4 < M_{eta} < 0.6`` * ``0.8 < M_{eta'} < 1.1`` * ``0.7 < M_{K*} < 1.6`` Note: This skim uses `skim.standardlists.lightmesons.loadStdSkimHighEffEtaPrime` and `skim.standardlists.charmless.loadStdVeryLooseKstarPlus` where :math:`\\eta^{'}` and :math:`K^{*+}` are defined, respectively. :math:`\\eta` channel is defined in `skim.standardlists.lightmesons.loadStdSkimHighEffEta`. """ __authors__ = ["Chia-Ling Hsu"] __description__ = "Skim list for B+ to eta' K*+." __contact__ = __liaison__ __category__ = "physics, hadronic B to charmless" ApplyHLTHadronCut = True NoisyModules = ["ParticleLoader", "RootOutput"]
[docs] def load_standard_lists(self, path): stdKshorts(path=path) stdPhotons('all', path=path) stdPi0s("eff40_May2020", path=path) loadStdVeryLooseTracks('pi', path=path) loadStdSkimHighEffTracks('pi', path=path) loadStdSkimHighEffEta(path=path) loadStdSkimHighEffEtaPrime(path=path) loadStdVeryLooseKstarPlus(path=path)
[docs] def build_lists(self, path): Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5' BsigList = [] ma.reconstructDecay("B+:Charmless_b2etapkst -> eta':SkimHighEff K*+:veryLoose", Bcuts, path=path) BsigList.append('B+:Charmless_b2etapkst') return BsigList