13 <contact>software-tracking@belle2.org</contact>
14 <input>V0ValidationHarvested.root</input>
15 <description>This module creates efficiency plots for the V0 validation.</description>
28 """Reads the output created by the V0Harvester and creates plots from it."""
30 def __init__(self, input_file='../V0ValidationHarvested.root', output_file='V0Validation.root'):
31 """Reads the output created by the V0Harvester defines histograms which will be filled later.
33 :param input_file: Output of V0ValidationHarvester.
34 :param output_file: Plots displayed in the V0Validation.
42 self.
hist_rhist_r = ROOT.TH1F(
"",
"True R", 20, 0, 20)
44 self.
hist_thetahist_theta = ROOT.TH1F(
"",
"True Theta", 26, 20, 150)
46 self.
hist_phihist_phi = ROOT.TH1F(
"",
"True Phi", 36, -180, 180)
48 self.
hist_phist_p = ROOT.TH1F(
"",
"True P", 25, 0.0, 1.0)
51 self.
hist_r_foundhist_r_found = ROOT.TH1F(
"",
"Found R", 20, 0, 20)
55 self.
hist_phi_foundhist_phi_found = ROOT.TH1F(
"",
"Found Phi", 36, -180, 180)
57 self.
hist_p_foundhist_p_found = ROOT.TH1F(
"",
"Found P", 25, 0.0, 1.0)
65 self.
hist_chi2hist_chi2 = ROOT.TH1F(
"",
"", 50, 0, 50)
86 """Fills the defined histograms with the V0Harvester data.
90 input_root_file = ROOT.TFile.Open(self.
input_fileinput_file,
"READ")
92 for event
in input_root_file.V0Harvester_tree:
93 self.
hist_rhist_r.Fill(event.R_MC)
94 self.
hist_thetahist_theta.Fill(numpy.rad2deg(event.THETA_MC))
95 self.
hist_phihist_phi.Fill(numpy.rad2deg(event.PHI_MC))
96 self.
hist_phist_p.Fill(event.P_MC)
101 self.
hist_phi_foundhist_phi_found.Fill(numpy.rad2deg(event.PHI_MC))
117 assert event.R_MC <= 1.0
122 input_root_file.Close()
126 def efficiency_plot(found, all, title, x_variable, x_unit, description='', check='', contact='', meta_options=''):
127 """Create an efficiency plot.
129 :param found: Histogram with all found entries (i.e. reconstructed).
130 :param all: Histogram with all entries (i.e. MCTruth).
131 :param title: Title of the histogram.
132 :param x_variable: x variable.
133 :param x_unit: x unit.
134 :param description: Description text shown on the validation page.
135 :param check: Check text shown on the validation page.
136 :param contact: Contact text shown on the validation page.
137 :param meta_options: Meta options for the validation page.
138 :return: ROOT.TEfficiency
140 efficiency = ROOT.TEfficiency(found, all)
141 efficiency.SetName(
"".join(title.split()))
142 ylabel =
'Efficiency / ({} {})'.format((found.GetXaxis().GetXmax() -
143 found.GetXaxis().GetXmin()) / found.GetNbinsX(), x_unit)
144 efficiency.SetTitle(
"{};{} / ({});{}".format(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 =
'{} / ({})'.format(x_variable, x_unit)
if x_unit
is not None else '{}'.format(x_variable)
167 ylabel =
'Entries / ({} {})'.format((hist.GetXaxis().GetXmax() -
168 hist.GetXaxis().GetXmin()) /
169 hist.GetNbinsX(), x_unit)
if x_unit
is not None \
170 else 'Entries / ({})'.format((hist.GetXaxis().GetXmax() - hist.GetXaxis().GetXmin()) / hist.GetNbinsX())
171 hist.SetTitle(
"{};{};{}".format(title, xlabel, ylabel))
172 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
173 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
174 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
175 hist.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
180 description='', check='', contact='', meta_options=''):
181 """Create a 2d hisogram plot.
184 :param title: Title of the histogram.
185 :param x_variable: x variable
186 :param y_variable: y variable
187 :param x_unit: x unit
188 :param y_unit: y unit
189 :param description: Description text shown on the validation page.
190 :param check: Check text shown on the validation page.
191 :param contact: Contact text shown on the validation page.
192 :param meta_options: Meta options for the validation page.
193 :return: ROOT.TEfficiency
196 hist.SetName(
"".join(title.split()))
197 xlabel =
'{} / ({})'.format(x_variable, x_unit)
if x_unit
is not None else '{}'.format(x_variable)
198 ylabel =
'{} / ({})'.format(y_variable, y_unit)
if y_unit
is not None else '{}'.format(y_variable)
199 hist.SetTitle(
"{};{};{}".format(title, xlabel, ylabel))
200 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Description', description))
201 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Check', check))
202 hist.GetListOfFunctions().Add(ROOT.TNamed(
'Contact', contact))
203 hist.GetListOfFunctions().Add(ROOT.TNamed(
'MetaOptions', meta_options))
207 """Create plots with the data filled with 'collect_histograms'.
211 output_root_file = ROOT.TFile.Open(self.
output_fileoutput_file,
"RECREATE")
213 V0ValidationPlots.efficiency_plot(
219 description=
'Reconstruction Efficiency vs. r (perpendicular)',
220 check=
'Check that efficiencies are close to the reference. Report significant deviations.',
221 contact=
'software-tracking@belle2.org',
222 meta_options=
'shifter').Write()
224 V0ValidationPlots.efficiency_plot(self.
hist_theta_foundhist_theta_found, self.
hist_thetahist_theta,
'Efficiency vs Theta',
'Theta',
'deg',
225 description=
'Reconstruction Efficiency vs. theta',
227 contact=
'software-tracking@belle2.org',
228 meta_options=
'').Write()
230 V0ValidationPlots.efficiency_plot(self.
hist_phi_foundhist_phi_found, self.
hist_phihist_phi,
'Efficiency vs Phi',
'Phi',
'deg',
231 description=
'Reconstruction Efficiency vs phi',
233 contact=
'software-tracking@belle2.org',
234 meta_options=
'').Write()
236 V0ValidationPlots.efficiency_plot(self.
hist_p_foundhist_p_found, self.
hist_phist_p,
'Efficiency vs P',
'P',
'GeV',
237 description=
'Reconstruction Efficiency vs momentum',
239 contact=
'software-tracking@belle2.org',
240 meta_options=
'').Write()
242 V0ValidationPlots.histogram_plot(self.
hist_invariant_masshist_invariant_mass,
"KShort Invariant Mass",
"m",
"GeV",
243 description=
'Reconstructed invariant mass of KShorts with standard reconstruction',
244 check=
'Invariant mass peak around KShort nominal mass 497.61 MeV.',
245 contact=
'software-tracking@belle2.org',
246 meta_options=
'shifter').Write()
248 V0ValidationPlots.histogram_plot(self.
hist_invariant_mass_residuumhist_invariant_mass_residuum,
"KShort Invariant Mass Residuum",
"Rec - MC",
"GeV",
249 description=
'Invariant mass residuum of KShorts with standard reconstruction',
251 contact=
'software-tracking@belle2.org',
252 meta_options=
'').Write()
254 V0ValidationPlots.histogram_plot(self.
hist_chi2hist_chi2,
"Chi2 of Vertex Fits.",
"Chi2",
None,
255 description=
'Chi2 distributions of the vertex fits.',
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_insidehist_chi2_inside,
"Chi2 of Vertex Fits Inside Beampipe.",
"Chi2",
None,
261 description=
'Chi2 distributions of the vertex fits inside 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_plot(self.
hist_chi2_outsidehist_chi2_outside,
"Chi2 of Vertex Fits Outside Beampipe.",
"Chi2",
None,
267 description=
'Chi2 distributions of the vertex fits outside the beampipe.',
268 check=
'Check if distribution looks like a Chi2 distribution with 1 dof',
269 contact=
'software-tracking@belle2.org',
270 meta_options=
'').Write()
272 V0ValidationPlots.histogram_2d_plot(self.
hist_mass_vs_mc_masshist_mass_vs_mc_mass,
"Reconstructed vs MC Mass.",
273 "Reconstructed Mass",
"GeV",
"MC Mass",
"GeV",
274 description=
"Reconstructed mass vs invariant Mass.",
276 contact=
"software-tracking@belle2.org",
277 meta_options=
'').Write()
279 V0ValidationPlots.histogram_plot(self.
hist_r_residuumhist_r_residuum,
"KShort R Residuum",
"Rec - MC",
"cm",
280 description=
'R residuum of KShorts with standard reconstruction',
282 contact=
'software-tracking@belle2.org',
283 meta_options=
'').Write()
284 V0ValidationPlots.histogram_plot(self.
hist_theta_residuumhist_theta_residuum,
"KShort Theta Residuum",
"Rec - MC",
"rad",
285 description=
'Theta residuum of KShorts with standard reconstruction',
287 contact=
'software-tracking@belle2.org',
288 meta_options=
'').Write()
289 V0ValidationPlots.histogram_plot(self.
hist_phi_residuumhist_phi_residuum,
"KShort Phi Residuum",
"Rec - MC",
"rad",
290 description=
'Phi residuum of KShorts with standard reconstruction',
292 contact=
'software-tracking@belle2.org',
293 meta_options=
'').Write()
294 V0ValidationPlots.histogram_plot(self.
hist_p_residuumhist_p_residuum,
"KShort Momentum Residuum",
"Rec - MC",
"GeV",
295 description=
'Momentum residuum of KShorts with standard reconstruction',
297 contact=
'software-tracking@belle2.org',
298 meta_options=
'').Write()
300 output_root_file.Write()
301 output_root_file.Close()
305 if __name__ ==
'__main__':
309 print(
"This validation deactivated and thus basf2 is not executed.\n"
310 "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.