13 <contact>software-tracking@belle2.org</contact>
14 <input>V0ValidationHarvested.root</input>
15 <output>V0Validation.root</output>
16 <description>This module creates efficiency plots
for the V0 validation.</description>
27class V0ValidationPlots:
29 """Reads the output created by the V0Harvester and creates plots from it."""
31 def __init__(self, input_file='../V0ValidationHarvested.root', output_file='V0Validation.root'):
32 """Reads the output created by the V0Harvester defines histograms which will be filled later.
34 :param input_file: Output of V0ValidationHarvester.
35 :param output_file: Plots displayed in the V0Validation.
43 self.hist_r = ROOT.TH1F("",
"True R", 20, 0, 20)
45 self.
hist_theta = ROOT.TH1F(
"",
"True Theta", 26, 20, 150)
47 self.
hist_phi = ROOT.TH1F(
"",
"True Phi", 36, -180, 180)
49 self.
hist_p = ROOT.TH1F(
"",
"True P", 25, 0.0, 1.0)
87 """Fills the defined histograms with the V0Harvester data.
91 input_root_file = ROOT.TFile.Open(self.input_file, "READ")
93 for event
in input_root_file.V0Harvester_tree:
94 self.
hist_r.Fill(event.R_MC)
95 self.
hist_theta.Fill(numpy.rad2deg(event.THETA_MC))
96 self.
hist_phi.Fill(numpy.rad2deg(event.PHI_MC))
97 self.
hist_p.Fill(event.P_MC)
118 assert event.R_MC <= 1.0
123 input_root_file.Close()
127 def efficiency_plot(found, all, title, x_variable, x_unit, description='', check='', contact='', meta_options=''):
128 """Create an efficiency plot.
130 :param found: Histogram with all found entries (i.e. reconstructed).
131 :param all: Histogram
with all entries (i.e. MCTruth).
132 :param title: Title of the histogram.
133 :param x_variable: x variable.
134 :param x_unit: x unit.
135 :param description: Description text shown on the validation page.
136 :param check: Check text shown on the validation page.
137 :param contact: Contact text shown on the validation page.
138 :param meta_options: Meta options
for the validation page.
139 :
return: ROOT.TEfficiency
141 efficiency = ROOT.TEfficiency(found, all)
142 efficiency.SetName("".join(title.split()))
143 ylabel = f
'Efficiency / ({(found.GetXaxis().GetXmax() - found.GetXaxis().GetXmin()) / found.GetNbinsX()} {x_unit})'
144 efficiency.SetTitle(f
"{title};{x_variable} / ({x_unit});{ylabel}")
145 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
146 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
147 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
148 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
152 def histogram_plot(hist, title, x_variable, x_unit=None, description='', check='', contact='', meta_options=''):
153 """Create (annotate) an histogram plot.
156 :param title: Title of the histogram.
157 :param x_variable: x variable.
158 :param x_unit: x unit.
159 :param description: Description text shown on the validation page.
160 :param check: Check text shown on the validation page.
161 :param contact: Contact text shown on the validation page.
162 :param meta_options: Meta options for the validation page.
163 :
return: modified hist
165 hist.SetName("".join(title.split()))
166 xlabel = f
'{x_variable} / ({x_unit})' if x_unit
is not None else f
'{x_variable}'
167 ylabel = f
'Entries / ({(hist.GetXaxis().GetXmax() - hist.GetXaxis().GetXmin()) / hist.GetNbinsX()} {x_unit})' \
168 if x_unit
is not None \
169 else f
'Entries / ({(hist.GetXaxis().GetXmax() - hist.GetXaxis().GetXmin()) / hist.GetNbinsX()})'
170 hist.SetTitle(f
"{title};{xlabel};{ylabel}")
171 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
172 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
173 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
174 hist.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
179 description='', check='', contact='', meta_options=''):
180 """Create a 2d hisogram plot.
183 :param title: Title of the histogram.
184 :param x_variable: x variable
185 :param y_variable: y variable
186 :param x_unit: x unit
187 :param y_unit: y unit
188 :param description: Description text shown on the validation page.
189 :param check: Check text shown on the validation page.
190 :param contact: Contact text shown on the validation page.
191 :param meta_options: Meta options for the validation page.
192 :
return: ROOT.TEfficiency
195 hist.SetName("".join(title.split()))
196 xlabel = f
'{x_variable} / ({x_unit})' if x_unit
is not None else f
'{x_variable}'
197 ylabel = f
'{y_variable} / ({y_unit})' if y_unit
is not None else f
'{y_variable}'
198 hist.SetTitle(f
"{title};{xlabel};{ylabel}")
199 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
200 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
201 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
202 hist.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
206 """Create plots with the data filled with 'collect_histograms'.
210 output_root_file = ROOT.TFile.Open(self.output_file, "RECREATE")
212 V0ValidationPlots.efficiency_plot(
218 description=
'Reconstruction Efficiency vs. r (perpendicular)',
219 check=
'Check that efficiencies are close to the reference. Report significant deviations.',
220 contact=
'software-tracking@belle2.org',
221 meta_options=
'shifter').Write()
224 description=
'Reconstruction Efficiency vs. theta',
226 contact=
'software-tracking@belle2.org',
227 meta_options=
'').Write()
230 description=
'Reconstruction Efficiency vs phi',
232 contact=
'software-tracking@belle2.org',
233 meta_options=
'').Write()
235 V0ValidationPlots.efficiency_plot(self.
hist_p_found, self.
hist_p,
'Efficiency vs P',
'P',
'GeV',
236 description=
'Reconstruction Efficiency vs momentum',
238 contact=
'software-tracking@belle2.org',
239 meta_options=
'').Write()
241 V0ValidationPlots.histogram_plot(self.
hist_invariant_mass,
"KShort Invariant Mass",
"m",
"GeV",
242 description=
'Reconstructed invariant mass of KShorts with standard reconstruction',
243 check=
'Invariant mass peak around KShort nominal mass 497.61 MeV.',
244 contact=
'software-tracking@belle2.org',
245 meta_options=
'shifter').Write()
248 description=
'Invariant mass residuum of KShorts with standard reconstruction',
250 contact=
'software-tracking@belle2.org',
251 meta_options=
'').Write()
253 V0ValidationPlots.histogram_plot(self.
hist_chi2,
"Chi2 of Vertex Fits.",
"Chi2",
None,
254 description=
'Chi2 distributions of the vertex fits.',
255 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
256 contact=
'software-tracking@belle2.org',
257 meta_options=
'').Write()
259 V0ValidationPlots.histogram_plot(self.
hist_chi2_inside,
"Chi2 of Vertex Fits Inside Beampipe.",
"Chi2",
None,
260 description=
'Chi2 distributions of the vertex fits inside the beampipe.',
261 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
262 contact=
'software-tracking@belle2.org',
263 meta_options=
'').Write()
265 V0ValidationPlots.histogram_plot(self.
hist_chi2_outside,
"Chi2 of Vertex Fits Outside Beampipe.",
"Chi2",
None,
266 description=
'Chi2 distributions of the vertex fits outside the beampipe.',
267 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
268 contact=
'software-tracking@belle2.org',
269 meta_options=
'').Write()
272 "Reconstructed Mass",
"GeV",
"MC Mass",
"GeV",
273 description=
"Reconstructed mass vs invariant Mass.",
275 contact=
"software-tracking@belle2.org",
276 meta_options=
'').Write()
278 V0ValidationPlots.histogram_plot(self.
hist_r_residuum,
"KShort R Residuum",
"Rec - MC",
"cm",
279 description=
'R residuum of KShorts with standard reconstruction',
281 contact=
'software-tracking@belle2.org',
282 meta_options=
'').Write()
283 V0ValidationPlots.histogram_plot(self.
hist_theta_residuum,
"KShort Theta Residuum",
"Rec - MC",
"rad",
284 description=
'Theta residuum of KShorts with standard reconstruction',
286 contact=
'software-tracking@belle2.org',
287 meta_options=
'').Write()
288 V0ValidationPlots.histogram_plot(self.
hist_phi_residuum,
"KShort Phi Residuum",
"Rec - MC",
"rad",
289 description=
'Phi residuum of KShorts with standard reconstruction',
291 contact=
'software-tracking@belle2.org',
292 meta_options=
'').Write()
293 V0ValidationPlots.histogram_plot(self.
hist_p_residuum,
"KShort Momentum Residuum",
"Rec - MC",
"GeV",
294 description=
'Momentum residuum of KShorts with standard reconstruction',
296 contact=
'software-tracking@belle2.org',
297 meta_options=
'').Write()
299 output_root_file.Write()
300 output_root_file.Close()
304if __name__ ==
'__main__':
308 print(
"This validation deactivated and thus basf2 is not executed.\n"
309 "If you want to run this validation, please set the 'ACTIVE' flag above to 'True'.\n"
hist_chi2
Chi2 of all vertex fits.
hist_r_residuum
R residuum histogram.
hist_chi2_outside
Chi2 of vertex fit outside beampipe.
hist_invariant_mass_res
Invariant mass residual histogram.
def efficiency_plot(found, all, title, x_variable, x_unit, description='', check='', contact='', meta_options='')
hist_theta_found
Reconstructed Theta.
hist_mass_vs_mc_mass
2D histogram; invariant mass vs reconstructed mass
def histogram_plot(hist, title, x_variable, x_unit=None, description='', check='', contact='', meta_options='')
hist_phi_residuum
Phi residuum histogram.
hist_invariant_mass
Invariant mass histogram.
hist_chi2_inside
Chi2 of vertex fit inside beampipe.
def histogram_2d_plot(hist, title, x_variable, y_variable, x_unit=None, y_unit=None, description='', check='', contact='', meta_options='')
hist_r_found
Reconstructed R.
hist_theta_residuum
Theta residuum histogram.
hist_p_found
Reconstructed Momentum.
hist_invariant_mass_residuum
Invariant mass residuum histogram.
def collect_histograms(self)
hist_p_residuum
Momentum residuum histogram.
def __init__(self, input_file='../V0ValidationHarvested.root', output_file='V0Validation.root')
hist_phi_found
Reconstructed Phi.