Belle II Software  release-05-02-19
btocharmless.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """
5 Skim list building functions for :math:`B\\to X_u +h` analyses
6 """
7 
8 __authors__ = [
9  "Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"
10 ]
11 
12 import modularAnalysis as ma
13 from skimExpertFunctions import BaseSkim, fancy_skim_header
14 from stdV0s import stdKshorts
15 from skim.standardlists.charmless import (
16  loadStdVeryLooseTracks,
17  loadStdPi0ForBToCharmless,
18  loadStdVeryLooseKstar0,
19  loadStdVeryLooseRho0,
20  loadStdVeryLooseKstarPlus,
21  loadStdVeryLooseKstarPlusPi0,
22  loadStdVeryLooseRhoPlus)
23 
24 
25 __liaison__ = "Benedikt Wach <benedikt.wach@desy.de>"
26 
27 
28 @fancy_skim_header
30  """
31  Reconstructed decay modes:
32 
33  * :math:'B^{0}\\to \\pi^0 \\pi^0'
34 
35  Cuts applied:
36 
37  * ``5.20 < Mbc < 5.29``
38  * ``abs(deltaE) < 0.5``
39 
40  """
41  __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Francis Pham", "Benedikt Wach"]
42  __description__ = "Skim list definitions for neutral B to two neutral pions."
43  __contact__ = __liaison__
44  __category__ = "physics, hadronic B to charmless"
45 
46  ApplyHLTHadronCut = False
47  NoisyModules = ["ParticleLoader", "RootOutput"]
48 
49  def load_standard_lists(self, path):
50  loadStdPi0ForBToCharmless(path=path)
51 
52  def build_lists(self, path):
53  Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5'
54  BsigList = []
55  ma.reconstructDecay('B0:Pi0Pi0 -> pi0:charmlessFit pi0:charmlessFit', Bcuts, path=path)
56  BsigList.append('B0:Pi0Pi0')
57  self.SkimLists = BsigList
58 
59 
60 @fancy_skim_header
62  """
63  Reconstructed decay modes:
64 
65  * :math:'B^{0}\\to \\pi^+ \\pi^-'
66  * :math:'B^{0}\\to \\K^+ \\pi^-'
67  * :math:'B^{0}\\to \\K^+ K^-'
68  * :math:'B^{+}\\to \\pi^+ \\pi^+ \\pi^-'
69  * :math:'B^{+}\\to K_{\\rm S}^0 \\pi^+'
70  * :math:'B^{+}\\to K_{\\rm S}^0 K^+'
71  * :math:'B^{+}\\to K^+ \\pi^+ \\pi^-'
72  * :math:'B^{+}\\to K^+ K^+ \\pi^-'
73  * :math:'B^{+}\\to K^+ K^- \\pi^+'
74  * :math:'B^{+}\\to K^+ K^+ K^-'
75  * :math:'B^{0}\\to \\pi^+ \\pi^- \\pi^+ \\pi^-'
76  * :math:'B^{0}\\to -> K^+ \\pi^- \\pi^+ \\pi^-'
77  * :math:'B^{0}\\to -> K^+ K^- \\pi^+ \\pi^-'
78  * :math:'B^{0}\\to -> K^+ \\pi^- K^+ \\pi^-'
79  * :math:'B^{0}\\to -> K^+ K^- K^+ \\pi^-'
80  * :math:'B^{0}\\to -> K^+ K^- K^+ K^-'
81  * :math:'B^{0}\\to -> K_{\\rm S}^0 \\pi^+ \\pi^-'
82  * :math:'B^{0}\\to -> K_{\\rm S}^0 K^+ \\pi^-'
83  * :math:'B^{0}\\to -> K_{\\rm S}^0 K^+ K^-'
84  * :math:'B^{0}\\to -> K_{\\rm S}^0 K_{\\rm S}^0'
85  * :math:'B^{0}\\to -> K^{*0} K^- K^+'
86  * :math:'B^{0}\\to -> K^{*0} \\pi^- \\pi^+'
87  * :math:'B^{0}\\to -> K^{*0} K^+ \\pi^-'
88  * :math:'B^{0}\\to -> \\rho^0 \\rho^0'
89  * :math:'B^{+}\\to -> K^{*+} K^- K^+'
90  * :math:'B^{+}\\to -> K^{*+} \\pi^- \\pi^+'
91  * :math:'B^{+}\\to -> K^{*+} K^+ \\pi^-'
92 
93  Cuts applied:
94 
95  * ``nTracks >= 2 (event level)``
96  * ``5.20 < Mbc < 5.29``
97  * ``abs(deltaE) < 0.3``
98 
99  """
100  __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"]
101  __description__ = "Skim list definitions for all B to charmless modes with tracks only in the final state."
102  __contact__ = __liaison__
103  __category__ = "physics, hadronic B to charmless"
104 
105  ApplyHLTHadronCut = True
106  NoisyModules = ["ParticleLoader", "RootOutput"]
107 
108  def load_standard_lists(self, path):
109  loadStdVeryLooseTracks('K', path=path)
110  loadStdVeryLooseTracks('pi', path=path)
111  stdKshorts(path=path)
112  loadStdVeryLooseKstar0(path=path)
113  loadStdVeryLooseRho0(path=path)
114  loadStdVeryLooseKstarPlus(path=path)
115 
116  def build_lists(self, path):
117  Bcuts = "5.2 < Mbc < 5.29 and abs(deltaE) < 0.3"
118 
119  channels = {'B0:Charmless_b2pipi': 'pi+:SkimVeryLoose pi-:SkimVeryLoose', # 1
120  'B0:Charmless_b2Kpi': 'K+:SkimVeryLoose pi-:SkimVeryLoose', # 2
121  'B0:Charmless_b2KK': 'K+:SkimVeryLoose K-:SkimVeryLoose', # 3
122  'B+:Charmless_b2pipipi': 'pi+:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 4
123  'B+:Charmless_b2Kspi': 'K_S0:merged pi+:SkimVeryLoose', # 5
124  'B+:Charmless_b2KsK': 'K_S0:merged K+:SkimVeryLoose', # 6
125  'B+:Charmless_b2Kpipi': 'K+:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose ', # 7
126  'B+:Charmless_b2KKpi_0': 'K+:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 8
127  'B+:Charmless_b2KKpi_1': 'K+:SkimVeryLoose K-:SkimVeryLoose pi+:SkimVeryLoose', # 9
128  'B+:Charmless_b2KKK': 'K+:SkimVeryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 10
129  'B0:Charmless_b2pipipipi': 'pi+:SkimVeryLoose pi-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 11
130  'B0:Charmless_b2Kpipipi': 'K+:SkimVeryLoose pi-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 12
131  'B0:Charmless_b2KKpipi': 'K+:SkimVeryLoose K-:SkimVeryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 13
132  'B0:Charmless_b2KpiKpi': 'K+:SkimVeryLoose pi-:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 14
133  'B0:Charmless_b2KKKpi': 'K+:SkimVeryLoose K-:SkimVeryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 15
134  'B0:Charmless_b2KKKK': 'K+:SkimVeryLoose K-:SkimVeryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 16
135  'B0:Charmless_b2Kspipi': 'K_S0:merged pi+:SkimVeryLoose pi-:SkimVeryLoose', # 17
136  'B0:Charmless_b2KsKpi': 'K_S0:merged K+:SkimVeryLoose pi-:SkimVeryLoose', # 18
137  'B0:Charmless_b2KsKK': 'K_S0:merged K+:SkimVeryLoose K-:SkimVeryLoose', # 19
138  'B0:Charmless_b2KsKs': 'K_S0:merged K_S0:merged', # 20
139  'B0:Charmless_b2K*KK': 'K*0:veryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 21
140  'B0:Charmless_b2K*pipi': 'K*0:veryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 22
141  'B0:Charmless_b2K*Kpi': 'K*0:veryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 23
142  'B0:Charmless_b2rhorho': 'rho0:veryLoose rho0:veryLoose', # 24
143  'B+:Charmless_b2K*pKK': 'K*+:veryLoose K+:SkimVeryLoose K-:SkimVeryLoose', # 25
144  'B+:Charmless_b2K*ppipi': 'K*+:veryLoose pi+:SkimVeryLoose pi-:SkimVeryLoose', # 26
145  'B+:Charmless_b2K*pKpi': 'K*+:veryLoose K+:SkimVeryLoose pi-:SkimVeryLoose', # 27
146  }
147 
148  BsigList = []
149  for chID, channel in enumerate(channels.keys()):
150  ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel],
151  cut=Bcuts, dmID=chID, path=path)
152  BsigList.append(channel)
153  path = self.skim_event_cuts("nTracks >= 2", path=path)
154  self.SkimLists = BsigList
155 
156 
157 @fancy_skim_header
159  """
160  Reconstructed decay modes:
161 
162  * :math:'B^+\\to \\pi^+ \\pi^0'
163  * :math:'B^+\\to K^+ \\pi^0'
164  * :math:'B^0\\to \\pi^+ \\pi^- \\pi^0'
165  * :math:'B^0\\to K^+ \\pi^- \\pi^0'
166  * :math:'B^0\\to K^- \\pi^+ \\pi^0'
167  * :math:'B^0\\to K^+ K^- \\pi^0'
168  * :math:'B^0\\to K_{\\rm S}^0 \\pi^0'
169  * :math:'B^+\\to K_{\\rm S}^{0} \\pi^+ \\pi^0'
170  * :math:'B^+\\to K_{\\rm S}^{0} K^+ \\pi^0'
171  * :math:'B^+\\to \\rho^{+} \\rho^{0}'
172 
173  Cuts applied:
174 
175  * ``5.20 < Mbc < 5.29``
176  * ``abs(deltaE) < 0.5``
177 
178  """
179  __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"]
180  __description__ = "Skim list for B to charmless modes including 1 pi0 in the final state."
181  __contact__ = __liaison__
182  __category__ = "physics, hadronic B to charmless"
183 
184  ApplyHLTHadronCut = True
185  NoisyModules = ["ParticleLoader", "RootOutput"]
186 
187  def load_standard_lists(self, path):
188  loadStdVeryLooseTracks('K', path=path)
189  loadStdVeryLooseTracks('pi', path=path)
190  loadStdPi0ForBToCharmless(path=path)
191  stdKshorts(path=path)
192  loadStdVeryLooseRho0(path=path)
193  loadStdVeryLooseRhoPlus(path=path)
194 
195  def build_lists(self, path):
196  Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5'
197  BsigList = []
198  channels = {
199  'B+:Charmless_b2pipi0': 'pi+:SkimVeryLoose pi0:charmlessFit', # 1
200  'B+:Charmless_b2Kpi0': 'K+:SkimVeryLoose pi0:charmlessFit', # 2
201  'B0:Charmless_b2pipipi0': 'pi+:SkimVeryLoose pi-:SkimVeryLoose pi0:charmlessFit', # 1
202  'B0:Charmless_b2Kpipi0_0': 'K+:SkimVeryLoose pi-:SkimVeryLoose pi0:charmlessFit', # 2
203  'B0:Charmless_b2KKpi0': 'K+:SkimVeryLoose K-:SkimVeryLoose pi0:charmlessFit', # 4
204  'B0:Charmless_b2Kspi0': 'K_S0:merged pi0:charmlessFit', # 5
205  'B+:Charmless_b2Kspipi0': 'K_S0:merged pi+:SkimVeryLoose pi0:charmlessFit', # 6
206  'B+:Charmless_b2KsKpi0': 'K_S0:merged K+:SkimVeryLoose pi0:charmlessFit', # 7
207  'B+:Charmless_b2rhorho0': 'rho+:veryLoose rho0:veryLoose', # 8
208  }
209 
210  for chID, channel in enumerate(channels.keys()):
211  ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel],
212  cut=Bcuts, dmID=chID, path=path)
213  BsigList.append(channel)
214  self.SkimLists = BsigList
215 
216 
217 @fancy_skim_header
219  """
220  Reconstructed decay modes:
221 
222  * :math:'B^+\\to K^{*+} K^+ K^-'
223  * :math:'B^+\\to K^{*+} K^+ \\pi^-'
224  * :math:'B^+\\to K^{*+} \\pi^+ \\pi^-'
225 
226  Cuts applied:
227 
228  * ``5.20 < Mbc < 5.29``
229  * ``abs(deltaE) < 0.5``
230 
231  """
232  __authors__ = ["Fernando Abudinen", "Riccardo Manfredi", "Sebastiano Raiz", "Benedikt Wach"]
233  __description__ = "Skim list for all charged B to charmless modes with 3 tracks and 1 Pi0."
234  __contact__ = __liaison__
235  __category__ = "physics, hadronic B to charmless"
236 
237  ApplyHLTHadronCut = True
238  NoisyModules = ["ParticleLoader", "RootOutput"]
239 
240  def load_standard_lists(self, path):
241  loadStdVeryLooseTracks('K', path=path)
242  loadStdVeryLooseTracks('pi', path=path)
243  loadStdPi0ForBToCharmless(path=path)
244  loadStdVeryLooseKstarPlusPi0(path=path)
245 
246  def build_lists(self, path):
247  Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5'
248  BsigList = []
249 
250  channels = {
251  'B+:Charmless_b2K*KK_2': 'K*+:veryLoosePi0 K-:SkimVeryLoose K+:SkimVeryLoose', # 1
252  'B+:Charmless_b2K*pipi_2': 'K*+:veryLoosePi0 pi-:SkimVeryLoose pi+:SkimVeryLoose', # 2
253  'B+:Charmless_b2K*Kpi_2': 'K*+:veryLoosePi0 K+:SkimVeryLoose pi-:SkimVeryLoose', # 3
254  }
255  for chID, channel in enumerate(channels.keys()):
256  ma.reconstructDecay(decayString=channel + ' -> ' + channels[channel],
257  cut=Bcuts, dmID=chID, path=path)
258  ma.rankByHighest(particleList=channel, variable="cos(mdstIndex)", numBest=3,
259  outputVariable="cosMdstIndex_rank", path=path)
260  BsigList.append(channel)
261  path = self.skim_event_cuts("nTracks >= 2", path=path)
262  self.SkimLists = BsigList
263 
264 
265 @fancy_skim_header
267  """
268  Reconstructed decay modes:
269 
270  * :math:'B^+ \\to \\rho^{+} \\rho^{-}'
271 
272  Cuts applied:
273 
274  * ``5.20 < Mbc < 5.29``
275  * ``abs(deltaE) < 0.5``
276 
277  """
278  __authors__ = ["Yu Nakazawa", "Benedikt Wach"]
279  __description__ = "Skim list for B to rho+ rho-."
280  __contact__ = __liaison__
281  __category__ = "physics, hadronic B to charmless"
282 
283  ApplyHLTHadronCut = True
284  NoisyModules = ["ParticleLoader", "RootOutput"]
285 
286  def load_standard_lists(self, path):
287  loadStdVeryLooseTracks('pi', path=path)
288  loadStdPi0ForBToCharmless(path=path)
289  loadStdVeryLooseRhoPlus(path=path)
290 
291  def build_lists(self, path):
292  Bcuts = '5.20 < Mbc < 5.29 and abs(deltaE) < 0.5'
293  BsigList = []
294  ma.reconstructDecay('B0:Charmless_b2rr -> rho+:veryLoose rho-:veryLoose', Bcuts, path=path)
295  BsigList.append('B0:Charmless_b2rr')
296  path = self.skim_event_cuts("nTracks >= 2", path=path)
297  self.SkimLists = BsigList
skim.btocharmless.BtoRhopRhom.build_lists
def build_lists(self, path)
Definition: btocharmless.py:291
skimExpertFunctions.BaseSkim.skim_event_cuts
def skim_event_cuts(self, cut, *path)
Definition: skimExpertFunctions.py:716
skim.btocharmless.BtoHad3Tracks1Pi0.build_lists
def build_lists(self, path)
Definition: btocharmless.py:246
skim.btocharmless.BtoRhopRhom.load_standard_lists
def load_standard_lists(self, path)
Definition: btocharmless.py:286
skim.btocharmless.BtoHad1Pi0.load_standard_lists
def load_standard_lists(self, path)
Definition: btocharmless.py:187
skim.btocharmless.BtoHad3Tracks1Pi0
Definition: btocharmless.py:218
skim.btocharmless.BtoRhopRhom
Definition: btocharmless.py:266
skim.btocharmless.BtoPi0Pi0
Definition: btocharmless.py:29
skim.btocharmless.BtoHad3Tracks1Pi0.load_standard_lists
def load_standard_lists(self, path)
Definition: btocharmless.py:240
skim.btocharmless.BtoPi0Pi0.load_standard_lists
def load_standard_lists(self, path)
Definition: btocharmless.py:49
skimExpertFunctions.BaseSkim
Definition: skimExpertFunctions.py:504
skim.btocharmless.BtoPi0Pi0.build_lists
def build_lists(self, path)
Definition: btocharmless.py:52
skim.btocharmless.BtoHad3Tracks1Pi0.SkimLists
SkimLists
Definition: btocharmless.py:262
skim.btocharmless.BtoHad1Pi0
Definition: btocharmless.py:158
skim.btocharmless.BtoHad1Pi0.SkimLists
SkimLists
Definition: btocharmless.py:214
skim.btocharmless.BtoHadTracks.SkimLists
SkimLists
Definition: btocharmless.py:154
skim.btocharmless.BtoRhopRhom.SkimLists
SkimLists
Definition: btocharmless.py:297
skim.btocharmless.BtoHadTracks
Definition: btocharmless.py:61
skim.btocharmless.BtoHadTracks.build_lists
def build_lists(self, path)
Definition: btocharmless.py:116
skim.btocharmless.BtoHadTracks.load_standard_lists
def load_standard_lists(self, path)
Definition: btocharmless.py:108
skim.btocharmless.BtoPi0Pi0.SkimLists
SkimLists
Definition: btocharmless.py:57
skim.btocharmless.BtoHad1Pi0.build_lists
def build_lists(self, path)
Definition: btocharmless.py:195