Belle II Software  release-08-01-10
stdPi0s.py
1 #!/usr/bin/env python3
2 
3 
10 
11 import modularAnalysis as ma
12 from stdPhotons import stdPhotons
13 from vertex import kFit
14 from basf2 import B2WARNING
15 
16 
17 def stdPi0s(
18  listtype="eff60_May2020",
19  path=None,
20  beamBackgroundMVAWeight="",
21  fakePhotonMVAWeight="",
22  biasCorrectionTable=""):
23  """
24  Function to prepare one of several standardized types of pi0 lists:
25 
26  - 'all' using gamma:all
27  - 'eff10_May2020' gamma:pi0eff10_May2020, mass range selection, 10% pi0 efficiency list, optimized in May 2020
28  - 'eff20_May2020' gamma:pi0eff20_May2020, mass range selection, 20% pi0 efficiency list, optimized in May 2020
29  - 'eff30_May2020' gamma:pi0eff30_May2020, mass range selection, 30% pi0 efficiency list, optimized in May 2020
30  - 'eff40_May2020' gamma:pi0eff40_May2020, mass range selection, 40% pi0 efficiency list, optimized in May 2020
31  - 'eff50_May2020' gamma:pi0eff50_May2020, mass range selection, 50% pi0 efficiency list, optimized in May 2020
32  - 'eff60_May2020' gamma:pi0eff60_May2020, mass range selection, 60% pi0 efficiency list, optimized in May 2020
33 
34  You can also append "Fit" to the listtype which will run a mass fit and
35  require that the fit did not fail. For example: "pi0:eff50_May2020Fit" is the 50%
36  efficiency list plus a not-failing mass fit.
37 
38  Parameters:
39  listtype (str): name of standard list
40  path (basf2.Path): modules are added to this path
41  beamBackgroundMVAWeight (str): type of weight file for beam background MVA; if empty, beam background MVA will not be used
42 
43  .. tip::
44  Please refer to the
45  `Neutrals Performance Confluence page <https://confluence.desy.de/display/BI/Neutrals+Performance>`_
46  for information on the beam background MVA.
47 
48  fakePhotonMVAWeight (str): type of weight file for fake photon MVA; if empty, fake photon MVA will not be used
49 
50  .. tip::
51  Please refer to the
52  `Neutrals Performance Confluence page <https://confluence.desy.de/display/BI/Neutrals+Performance>`_
53  for information on the fake photon MVA.
54 
55  biasCorrectionTable (str): correction table for the photon energy bias correction (should only be applied to data)
56 
57  .. tip::
58  Please refer to the
59  `Neutrals Performance Confluence page <https://confluence.desy.de/display/BI/Neutrals+Performance>`_
60  for information on the names of available correction tables.
61 
62  """
63 
64  if listtype != 'all':
65  B2WARNING("stdPi0s is loading \"May2020\" pi0 recommendations. Please check Neutrals Performance Confluence"
66  " page for most up-to-date pi0 recommendations.")
67 
68  if listtype == 'all':
69  stdPhotons('all', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
70  ma.reconstructDecay('pi0:all -> gamma:all gamma:all', '', 1, True, path)
71  ma.matchMCTruth('pi0:all', path)
72  elif 'eff10_May2020' == listtype:
73  stdPhotons('pi0eff10_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
74  ma.reconstructDecay('pi0:eff10_May2020 -> gamma:pi0eff10_May2020 gamma:pi0eff10_May2020',
75  '0.127<InvM<0.139 and -0.9<daughterDiffOf(0,1,phi)<0.9 and daughterAngle(0,1)<0.8',
76  1,
77  True,
78  path)
79  ma.matchMCTruth('pi0:eff10_May2020', path)
80  elif 'eff20_May2020' == listtype:
81  stdPhotons('pi0eff20_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
82  ma.reconstructDecay('pi0:eff20_May2020 -> gamma:pi0eff20_May2020 gamma:pi0eff20_May2020',
83  '0.121<InvM<0.142 and -1.0<daughterDiffOf(0,1,phi)<1.0 and daughterAngle(0,1)<0.9',
84  1,
85  True,
86  path)
87  ma.matchMCTruth('pi0:eff20_May2020', path)
88  elif 'eff30_May2020' == listtype:
89  stdPhotons('pi0eff30_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
90  ma.reconstructDecay('pi0:eff30_May2020 -> gamma:pi0eff30_May2020 gamma:pi0eff30_May2020',
91  '0.120<InvM<0.145 and -1.5<daughterDiffOf(0,1,phi)<1.5 and daughterAngle(0,1)<1.4',
92  1,
93  True,
94  path)
95  ma.matchMCTruth('pi0:eff30_May2020', path)
96  elif 'eff40_May2020' == listtype:
97  stdPhotons('pi0eff40_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
98  ma.reconstructDecay('pi0:eff40_May2020 -> gamma:pi0eff40_May2020 gamma:pi0eff40_May2020', '0.120<InvM<0.145', 1, True, path)
99  ma.matchMCTruth('pi0:eff40_May2020', path)
100  elif 'eff50_May2020_nomcmatch' == listtype:
101  stdPhotons('pi0eff50_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
102  ma.reconstructDecay(
103  'pi0:eff50_May2020_nomcmatch -> gamma:pi0eff50_May2020 gamma:pi0eff50_May2020',
104  '0.105<InvM<0.150',
105  1,
106  True,
107  path)
108  elif 'eff50_May2020' == listtype:
109  stdPi0s('eff50_May2020_nomcmatch', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
110  ma.cutAndCopyList('pi0:eff50_May2020', 'pi0:eff50_May2020_nomcmatch', '', True, path)
111  ma.matchMCTruth('pi0:eff50_May2020', path)
112  elif 'eff60_May2020_nomcmatch' == listtype:
113  stdPhotons('pi0eff60_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight, biasCorrectionTable)
114  ma.reconstructDecay(
115  'pi0:eff60_May2020_nomcmatch -> gamma:pi0eff60_May2020 gamma:pi0eff60_May2020',
116  '0.03<InvM',
117  1,
118  True,
119  path)
120  elif 'eff60_May2020' == listtype:
121  stdPi0s('eff60_May2020_nomcmatch', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
122  ma.cutAndCopyList('pi0:eff60_May2020', 'pi0:eff60_May2020_nomcmatch', '', True, path)
123  ma.matchMCTruth('pi0:eff60_May2020', path)
124 
125  # skim list(s)
126  elif listtype == 'skim':
127  stdPi0s('eff50_May2020_nomcmatch', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
128  ma.cutAndCopyList('pi0:skim', 'pi0:eff50_May2020_nomcmatch', '', True, path)
129  kFit('pi0:skim', 0.0, 'mass', path=path)
130  elif listtype == 'SkimHighEff':
131  stdPi0s('eff60_May2020_nomcmatch', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
132  ma.cutAndCopyList('pi0:SkimHighEff', 'pi0:eff60_May2020_nomcmatch', '', True, path)
133  kFit('pi0:SkimHighEff', 0.0, 'mass', path=path)
134 
135  # same lists with, but with mass constraints fits
136  elif listtype == 'allFit':
137  stdPi0s('all', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
138  ma.cutAndCopyList('pi0:allFit', 'pi0:all', '', True, path)
139  kFit('pi0:allFit', 0.0, 'mass', path=path)
140  elif listtype == 'eff10_May2020Fit':
141  stdPi0s('eff10_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
142  ma.cutAndCopyList('pi0:eff10_May2020Fit', 'pi0:eff10_May2020', '', True, path)
143  kFit('pi0:eff10_May2020Fit', 0.0, 'mass', path=path)
144  elif listtype == 'eff20_May2020Fit':
145  stdPi0s('eff20_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
146  ma.cutAndCopyList('pi0:eff20_May2020Fit', 'pi0:eff20_May2020', '', True, path)
147  kFit('pi0:eff20_May2020Fit', 0.0, 'mass', path=path)
148  elif listtype == 'eff30_May2020Fit':
149  stdPi0s('eff30_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
150  ma.cutAndCopyList('pi0:eff30_May2020Fit', 'pi0:eff30_May2020', '', True, path)
151  kFit('pi0:eff30_May2020Fit', 0.0, 'mass', path=path)
152  elif listtype == 'eff40_May2020Fit':
153  stdPi0s('eff40_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
154  ma.cutAndCopyList('pi0:eff40_May2020Fit', 'pi0:eff40_May2020', '', True, path)
155  kFit('pi0:eff40_May2020Fit', 0.0, 'mass', path=path)
156  elif listtype == 'eff50_May2020Fit':
157  stdPi0s('eff50_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
158  ma.cutAndCopyList('pi0:eff50_May2020Fit', 'pi0:eff50_May2020', '', True, path)
159  kFit('pi0:eff50_May2020Fit', 0.0, 'mass', path=path)
160  elif listtype == 'eff60_May2020Fit':
161  stdPi0s('eff60_May2020', path, beamBackgroundMVAWeight, fakePhotonMVAWeight)
162  ma.cutAndCopyList('pi0:eff60_May2020Fit', 'pi0:eff60_May2020', '', True, path)
163  kFit('pi0:eff60_May2020Fit', 0.0, 'mass', path=path)
164  else:
165  raise ValueError(f"\"{listtype}\" is none of the allowed standardized types of pi0 lists!")
166 
167 # pi0 list(s) for skims (and ONLY for skims)
168 
169 
170 def loadStdSkimPi0(path):
171  """
172  Function to prepare the skim pi0 lists.
173 
174  Warning:
175  Should only be used by skims.
176 
177  Parameters:
178  path (basf2.Path) modules are added to this path
179 
180  """
181  stdPi0s('skim', path)
182 
183 
184 def loadStdSkimHighEffPi0(path):
185  """
186  Function to prepare the high-efficiency skim pi0 lists based on eff60_May2020 list.
187 
188  Warning:
189  Should only be used by skims.
190 
191  Parameters:
192  path (basf2.Path) modules are added to this path
193 
194  """
195  stdPi0s('SkimHighEff', path)