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