14 <contact>software-tracking@belle2.org</contact>
15 <input>V0ValidationHarvested.root</input>
16 <description>This module creates efficiency plots for the V0 validation.</description>
27 """Reads the output created by the V0Harvester and creates plots from it."""
29 def __init__(self, input_file='../V0ValidationHarvested.root', output_file='V0Validation.root'):
30 """Reads the output created by the V0Harvester defines histograms which will be filled later.
32 :param input_file: Output of V0ValidationHarvester.
33 :param output_file: Plots displayed in the V0Validation.
41 self.
hist_rhist_r = ROOT.TH1F(
"",
"True R", 20, 0, 20)
43 self.
hist_thetahist_theta = ROOT.TH1F(
"",
"True Theta", 26, 20, 150)
45 self.
hist_phihist_phi = ROOT.TH1F(
"",
"True Phi", 36, -180, 180)
47 self.
hist_phist_p = ROOT.TH1F(
"",
"True P", 25, 0.0, 1.0)
50 self.
hist_r_foundhist_r_found = ROOT.TH1F(
"",
"Found R", 20, 0, 20)
54 self.
hist_phi_foundhist_phi_found = ROOT.TH1F(
"",
"Found Phi", 36, -180, 180)
56 self.
hist_p_foundhist_p_found = ROOT.TH1F(
"",
"Found P", 25, 0.0, 1.0)
64 self.
hist_chi2hist_chi2 = ROOT.TH1F(
"",
"", 50, 0, 50)
85 """Fills the defined histograms with the V0Harvester data.
89 input_root_file = ROOT.TFile.Open(self.
input_fileinput_file,
"READ")
91 for event
in input_root_file.V0Harvester_tree:
92 self.
hist_rhist_r.Fill(event.R_MC)
93 self.
hist_thetahist_theta.Fill(numpy.rad2deg(event.THETA_MC))
94 self.
hist_phihist_phi.Fill(numpy.rad2deg(event.PHI_MC))
95 self.
hist_phist_p.Fill(event.P_MC)
100 self.
hist_phi_foundhist_phi_found.Fill(numpy.rad2deg(event.PHI_MC))
116 assert event.R_MC <= 1.0
121 input_root_file.Close()
125 def efficiency_plot(found, all, title, x_variable, x_unit, description='', check='', contact='', meta_options=''):
126 """Create an efficiency plot.
128 :param found: Histogram with all found entries (i.e. reconstructed).
129 :param all: Histogram with all entries (i.e. MCTruth).
130 :param title: Title of the histogram.
131 :param x_variable: x variable.
132 :param x_unit: x unit.
133 :param description: Description text shown on the validation page.
134 :param check: Check text shown on the validation page.
135 :param contact: Contact text shown on the validation page.
136 :param meta_options: Meta options for the validation page.
137 :return: ROOT.TEfficiency
139 efficiency = ROOT.TEfficiency(found, all)
140 efficiency.SetName(
"".join(title.split()))
141 ylabel =
'Efficiency / ({} {})'.format((found.GetXaxis().GetXmax() -
142 found.GetXaxis().GetXmin()) / found.GetNbinsX(), x_unit)
143 efficiency.SetTitle(
"{};{} / ({});{}".format(title, x_variable, x_unit, ylabel))
144 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
145 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
146 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
147 efficiency.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
151 def histogram_plot(hist, title, x_variable, x_unit=None, description='', check='', contact='', meta_options=''):
152 """Create (annotate) an histogram plot.
155 :param title: Title of the histogram.
156 :param x_variable: x variable.
157 :param x_unit: x unit.
158 :param description: Description text shown on the validation page.
159 :param check: Check text shown on the validation page.
160 :param contact: Contact text shown on the validation page.
161 :param meta_options: Meta options for the validation page.
162 :return: modified hist
164 hist.SetName(
"".join(title.split()))
165 xlabel =
'{} / ({})'.format(x_variable, x_unit)
if x_unit
is not None else '{}'.format(x_variable)
166 ylabel =
'Entries / ({} {})'.format((hist.GetXaxis().GetXmax() -
167 hist.GetXaxis().GetXmin()) /
168 hist.GetNbinsX(), x_unit)
if x_unit
is not None \
169 else 'Entries / ({})'.format((hist.GetXaxis().GetXmax() - hist.GetXaxis().GetXmin()) / hist.GetNbinsX())
170 hist.SetTitle(
"{};{};{}".format(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 =
'{} / ({})'.format(x_variable, x_unit)
if x_unit
is not None else '{}'.format(x_variable)
197 ylabel =
'{} / ({})'.format(y_variable, y_unit)
if y_unit
is not None else '{}'.format(y_variable)
198 hist.SetTitle(
"{};{};{}".format(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_fileoutput_file,
"RECREATE")
212 V0ValidationPlots.efficiency_plot(self.
hist_r_foundhist_r_found, self.
hist_rhist_r,
'Efficiency vs R',
'r',
'cm',
213 description=
'Reconstruction Efficiency vs. r (perpendicular)',
215 contact=
'software-tracking@belle2.org',
216 meta_options=
'shifter').Write()
218 V0ValidationPlots.efficiency_plot(self.
hist_theta_foundhist_theta_found, self.
hist_thetahist_theta,
'Efficiency vs Theta',
'Theta',
'deg',
219 description=
'Reconstruction Efficiency vs. theta',
221 contact=
'software-tracking@belle2.org',
222 meta_options=
'').Write()
224 V0ValidationPlots.efficiency_plot(self.
hist_phi_foundhist_phi_found, self.
hist_phihist_phi,
'Efficiency vs Phi',
'Phi',
'deg',
225 description=
'Reconstruction Efficiency vs phi',
227 contact=
'software-tracking@belle2.org',
228 meta_options=
'').Write()
230 V0ValidationPlots.efficiency_plot(self.
hist_p_foundhist_p_found, self.
hist_phist_p,
'Efficiency vs P',
'P',
'GeV',
231 description=
'Reconstruction Efficiency vs momentum',
233 contact=
'software-tracking@belle2.org',
234 meta_options=
'').Write()
236 V0ValidationPlots.histogram_plot(self.
hist_invariant_masshist_invariant_mass,
"KShort Invariant Mass",
"m",
"GeV",
237 description=
'Reconstructed invariant mass of KShorts with standard reconstruction',
238 check=
'Invariant mass peak around KShort nominal mass 497.61 MeV.',
239 contact=
'software-tracking@belle2.org',
240 meta_options=
'shifter').Write()
242 V0ValidationPlots.histogram_plot(self.
hist_invariant_mass_residuumhist_invariant_mass_residuum,
"KShort Invariant Mass Residuum",
"Rec - MC",
"GeV",
243 description=
'Invariant mass residuum of KShorts with standard reconstruction',
245 contact=
'software-tracking@belle2.org',
246 meta_options=
'').Write()
248 V0ValidationPlots.histogram_plot(self.
hist_chi2hist_chi2,
"Chi2 of Vertex Fits.",
"Chi2",
None,
249 description=
'Chi2 distributions of the vertex fits.',
250 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
251 contact=
'software-tracking@belle2.org',
252 meta_options=
'').Write()
254 V0ValidationPlots.histogram_plot(self.
hist_chi2_insidehist_chi2_inside,
"Chi2 of Vertex Fits Inside Beampipe.",
"Chi2",
None,
255 description=
'Chi2 distributions of the vertex fits inside the beampipe.',
256 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
257 contact=
'software-tracking@belle2.org',
258 meta_options=
'').Write()
260 V0ValidationPlots.histogram_plot(self.
hist_chi2_outsidehist_chi2_outside,
"Chi2 of Vertex Fits Outside Beampipe.",
"Chi2",
None,
261 description=
'Chi2 distributions of the vertex fits outside the beampipe.',
262 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
263 contact=
'software-tracking@belle2.org',
264 meta_options=
'').Write()
266 V0ValidationPlots.histogram_2d_plot(self.
hist_mass_vs_mc_masshist_mass_vs_mc_mass,
"Reconstructed vs MC Mass.",
267 "Reconstructed Mass",
"GeV",
"MC Mass",
"GeV",
268 description=
"Reconstructed mass vs invariant Mass.",
270 contact=
"software-tracking@belle2.org",
271 meta_options=
'').Write()
273 V0ValidationPlots.histogram_plot(self.
hist_r_residuumhist_r_residuum,
"KShort R Residuum",
"Rec - MC",
"cm",
274 description=
'R residuum of KShorts with standard reconstruction',
276 contact=
'software-tracking@belle2.org',
277 meta_options=
'').Write()
278 V0ValidationPlots.histogram_plot(self.
hist_theta_residuumhist_theta_residuum,
"KShort Theta Residuum",
"Rec - MC",
"rad",
279 description=
'Theta residuum of KShorts with standard reconstruction',
281 contact=
'software-tracking@belle2.org',
282 meta_options=
'').Write()
283 V0ValidationPlots.histogram_plot(self.
hist_phi_residuumhist_phi_residuum,
"KShort Phi Residuum",
"Rec - MC",
"rad",
284 description=
'Phi residuum of KShorts with standard reconstruction',
286 contact=
'software-tracking@belle2.org',
287 meta_options=
'').Write()
288 V0ValidationPlots.histogram_plot(self.
hist_p_residuumhist_p_residuum,
"KShort Momentum Residuum",
"Rec - MC",
"GeV",
289 description=
'Momentum residuum of KShorts with standard reconstruction',
291 contact=
'software-tracking@belle2.org',
292 meta_options=
'').Write()
294 output_root_file.Write()
295 output_root_file.Close()
299 if __name__ ==
'__main__':
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.