Belle II Software  release-05-01-25
leptonic.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """(Semi-)Leptonic Working Group Skims for leptonic analyses.
5 """
6 
7 __authors__ = [
8  "Sophie Hollit",
9  "Racha Cheaib",
10  "Hannah Wakeling",
11  "Phil Grace"
12 ]
13 
14 import modularAnalysis as ma
15 from skimExpertFunctions import BaseSkim, fancy_skim_header
16 from stdCharged import stdE, stdMu
17 from variables import variables as vm
18 
19 __liaison__ = "Shanette De La Motte <shanette.delamotte@adelaide.edu.au>"
20 
21 
22 @fancy_skim_header
24  """
25  Reconstructed decays
26  * :math:`B^- \\to e^-`
27  * :math:`B^- \\to \\mu^-`
28 
29  Cuts applied
30  * :math:`p_{\\ell}^{*} > 2\\,\\text{GeV}` in CMS Frame
31  * :math:`\\text{electronID} > 0.5`
32  * :math:`\\text{muonID} > 0.5`
33  * :math:`n_{\\text{tracks}} \\geq 3`
34  """
35 
36  __authors__ = ["Phillip Urquijo"]
37  __contact__ = __liaison__
38  __description__ = (
39  "Skim for leptonic analyses, "
40  ":math:`B_{\\text{sig}}^-\\to\\ell\\nu`, where :math:`\\ell=e,\\mu`"
41  )
42  __category__ = "physics, leptonic"
43 
44  def load_standard_lists(self, path):
45  stdE("all", path=path)
46  stdMu("all", path=path)
47 
48  def build_lists(self, path):
49  ma.cutAndCopyList(
50  "e-:LeptonicUntagged",
51  "e-:all",
52  "useCMSFrame(p) > 2.0 and electronID > 0.5",
53  True,
54  path=path,
55  )
56  ma.cutAndCopyList(
57  "mu-:LeptonicUntagged",
58  "mu-:all",
59  "useCMSFrame(p) > 2.0 and muonID > 0.5",
60  True,
61  path=path,
62  )
63  ma.reconstructDecay("B-:LeptonicUntagged_0 -> e-:LeptonicUntagged", "", 1, path=path)
64  ma.reconstructDecay("B-:LeptonicUntagged_1 -> mu-:LeptonicUntagged", "", 2, path=path)
65  ma.applyCuts("B-:LeptonicUntagged_0", "nTracks>=3", path=path)
66  ma.applyCuts("B-:LeptonicUntagged_1", "nTracks>=3", path=path)
67  lepList = ["B-:LeptonicUntagged_0", "B-:LeptonicUntagged_1"]
68  self.SkimLists = lepList
69 
70  def validation_histograms(self, path):
71  # NOTE: the validation package is not part of the light releases, so this import
72  # must be made here rather than at the top of the file.
73  from validation_tools.metadata import create_validation_histograms
74 
75  ma.cutAndCopyLists("B-:LeptonicUntagged", ["B-:LeptonicUntagged_0", "B-:LeptonicUntagged_1"], "", path=path)
76 
77  ma.buildRestOfEvent("B-:LeptonicUntagged", path=path)
78  ma.appendROEMask(
79  "B-:LeptonicUntagged",
80  "basic",
81  "pt>0.05 and -2<dr<2 and -4.0<dz<4.0",
82  "E>0.05",
83  path=path,
84  )
85  vm.addAlias("d0_p", "daughter(0,p)")
86  vm.addAlias("d0_electronID", "daughter(0,electronID)")
87  vm.addAlias("d0_muonID", "daughter(0,muonID)")
88  vm.addAlias("MissP", "weMissP(basic,0)")
89 
90  histogramFilename = "LeptonicUntagged_Validation.root"
91  contact = "Phil Grace <philip.grace@adelaide.edu.au>"
92 
93  create_validation_histograms(
94  rootfile=histogramFilename,
95  particlelist="B-:LeptonicUntagged",
96  variables_1d=[
97  ("Mbc", 100, 4.0, 5.3, "Mbc", contact, "", ""),
98  ("d0_p", 100, 0, 5.2, "Signal-side lepton momentum", contact, "", ""),
99  ("d0_electronID", 100, 0, 1, "electronID of signal-side lepton",
100  contact, "", ""),
101  ("d0_muonID", 100, 0, 1, "electronID of signal-side lepton", contact,
102  "", ""),
103  ("R2", 100, 0, 1, "R2", contact, "", ""),
104  ("MissP", 100, 0, 5.3, "Missing momentum of event (CMS frame)", contact,
105  "", ""),
106  ],
107  variables_2d=[
108  ("deltaE", 100, -5, 5, "Mbc", 100, 4.0, 5.3, "Mbc vs deltaE", contact,
109  "", "")
110  ],
111  path=path,
112  )
113 
114 
115 @fancy_skim_header
117  """
118  Reconstructed decays
119  * :math:`BBar \\to l^+l^-`
120  * :math:`BBar \\to l^+l^+`
121  * :math:`BBar \\to l^-l^-`
122  """
123  __authors__ = ["Alessandro Gaz, Chiara La Licata"]
124  __contact__ = __liaison__
125  __description__ = (
126  "Inclusive dilepton skim"
127  )
128  __category__ = "physics, leptonic"
129 
130  def load_standard_lists(self, path):
131  stdE("all", path=path)
132  stdMu("all", path=path)
133 
134  def build_lists(self, path):
135  ma.cutAndCopyList(
136  "e+:pid",
137  "e+:all",
138  "abs(d0) < 1 and abs(z0) < 4 and p > 1.2 and electronID > 0.5",
139  True,
140  path=path,
141  )
142  ma.cutAndCopyList(
143  "mu+:pid",
144  "mu+:all",
145  "abs(d0) < 1 and abs(z0) < 4 and p > 1.2 and muonID > 0.5",
146  True,
147  path=path,
148  )
149 
150  ma.buildEventShape(
151  inputListNames=[],
152  default_cleanup=True,
153  allMoments=False,
154  cleoCones=True,
155  collisionAxis=True,
156  foxWolfram=True,
157  harmonicMoments=True,
158  jets=True,
159  sphericity=True,
160  thrust=True,
161  checkForDuplicates=False,
162  path=path)
163 
164  ma.applyEventCuts(cut='foxWolframR2 < 0.5 and nTracks > 3', path=path)
165 
166  ma.reconstructDecay('Upsilon(4S):ee -> e+:pid e-:pid', 'M < 15', path=path)
167  ma.reconstructDecay('Upsilon(4S):emu -> e+:pid mu-:pid', 'M < 15', path=path)
168  ma.reconstructDecay('Upsilon(4S):mumu -> mu+:pid mu-:pid', 'M < 15', path=path)
169 
170  ma.reconstructDecay('Delta++:ee -> e+:pid e+:pid', 'M < 15', path=path)
171  ma.reconstructDecay('Delta++:emu -> e+:pid mu+:pid', 'M < 15', path=path)
172  ma.reconstructDecay('Delta++:mumu -> mu+:pid mu+:pid', 'M < 15', path=path)
173 
174  ma.copyLists(outputListName='Upsilon(4S):ll',
175  inputListNames=['Upsilon(4S):ee', 'Upsilon(4S):emu', 'Upsilon(4S):mumu'],
176  path=path)
177 
178  ma.copyLists(outputListName='Delta++:ll',
179  inputListNames=['Delta++:ee', 'Delta++:emu', 'Delta++:mumu'],
180  path=path)
181 
182  dileptonList = ["Upsilon(4S):ll", "Delta++:ll"]
183  self.SkimLists = dileptonList
skim.leptonic.LeptonicUntagged.validation_histograms
def validation_histograms(self, path)
Definition: leptonic.py:70
skim.leptonic.LeptonicUntagged.SkimLists
SkimLists
Definition: leptonic.py:68
skim.leptonic.dilepton.load_standard_lists
def load_standard_lists(self, path)
Definition: leptonic.py:130
skim.leptonic.LeptonicUntagged.load_standard_lists
def load_standard_lists(self, path)
Definition: leptonic.py:44
skim.leptonic.dilepton
Definition: leptonic.py:116
skim.leptonic.dilepton.SkimLists
SkimLists
Definition: leptonic.py:183
skim.leptonic.LeptonicUntagged
Definition: leptonic.py:23
skimExpertFunctions.BaseSkim
Definition: skimExpertFunctions.py:504
skim.leptonic.dilepton.build_lists
def build_lists(self, path)
Definition: leptonic.py:134
validation_tools.metadata
Definition: metadata.py:1
skim.leptonic.LeptonicUntagged.build_lists
def build_lists(self, path)
Definition: leptonic.py:48