Belle II Software  light-2205-abys
Utility.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <mva/utility/Utility.h>
10 #include <mva/utility/DataDriven.h>
11 #include <mva/methods/PDF.h>
12 #include <mva/methods/Reweighter.h>
13 #include <mva/methods/Trivial.h>
14 #include <mva/methods/Combination.h>
15 
16 #include <framework/logging/Logger.h>
17 
18 #include <framework/utilities/MakeROOTCompatible.h>
19 
20 #include <boost/algorithm/string/predicate.hpp>
21 #include <boost/property_tree/xml_parser.hpp>
22 
23 #include <iostream>
24 #include <chrono>
25 #include <string>
26 #include <regex>
27 #include <fstream>
28 
29 using namespace Belle2::MVA;
30 
31 void Utility::download(const std::string& identifier, const std::string& filename, int experiment, int run, int event)
32 {
33  Belle2::EventMetaData emd(event, run, experiment);
35  if (boost::ends_with(filename, ".root")) {
36  Belle2::MVA::Weightfile::saveToROOTFile(weightfile, filename);
37  } else if (boost::ends_with(filename, ".xml")) {
38  Belle2::MVA::Weightfile::saveToXMLFile(weightfile, filename);
39  } else {
40  std::cerr << "Unknown file extension, fallback to xml" << std::endl;
41  Belle2::MVA::Weightfile::saveToXMLFile(weightfile, filename);
42  }
43 }
44 
45 void Utility::upload(const std::string& filename, const std::string& identifier, int exp1, int run1, int exp2, int run2)
46 {
47  Belle2::IntervalOfValidity iov(exp1, run1, exp2, run2);
48  Belle2::MVA::Weightfile weightfile;
49  if (boost::ends_with(filename, ".root")) {
50  weightfile = Belle2::MVA::Weightfile::loadFromROOTFile(filename);
51  } else if (boost::ends_with(filename, ".xml")) {
52  weightfile = Belle2::MVA::Weightfile::loadFromXMLFile(filename);
53  } else {
54  std::cerr << "Unknown file extension, fallback to xml" << std::endl;
55  weightfile = Belle2::MVA::Weightfile::loadFromXMLFile(filename);
56  }
57  Belle2::MVA::Weightfile::saveToDatabase(weightfile, identifier, iov);
58 }
59 
60 void Utility::upload_array(const std::vector<std::string>& filenames, const std::string& identifier, int exp1, int run1, int exp2,
61  int run2)
62 {
63  Belle2::IntervalOfValidity iov(exp1, run1, exp2, run2);
64 
65  std::vector<Belle2::MVA::Weightfile> weightfiles;
66  for (const auto& filename : filenames) {
67 
68  Belle2::MVA::Weightfile weightfile;
69  if (boost::ends_with(filename, ".root")) {
70  weightfile = Belle2::MVA::Weightfile::loadFromROOTFile(filename);
71  } else if (boost::ends_with(filename, ".xml")) {
72  weightfile = Belle2::MVA::Weightfile::loadFromXMLFile(filename);
73  } else {
74  std::cerr << "Unknown file extension, fallback to xml" << std::endl;
75  weightfile = Belle2::MVA::Weightfile::loadFromXMLFile(filename);
76  }
77  weightfiles.push_back(weightfile);
78  }
79  Belle2::MVA::Weightfile::saveArrayToDatabase(weightfiles, identifier, iov);
80 }
81 
82 void Utility::extract(const std::string& filename, const std::string& directory)
83 {
84 
86  auto supported_interfaces = AbstractInterface::getSupportedInterfaces();
87  auto weightfile = Weightfile::load(filename);
88  weightfile.setRemoveTemporaryDirectories(false);
89  weightfile.setTemporaryDirectory(directory);
90  GeneralOptions general_options;
91  weightfile.getOptions(general_options);
92  auto expertLocal = supported_interfaces[general_options.m_method]->getExpert();
93  expertLocal->load(weightfile);
94 
95 }
96 
97 std::string Utility::info(const std::string& filename)
98 {
99 
101  auto supported_interfaces = AbstractInterface::getSupportedInterfaces();
102  auto weightfile = Weightfile::load(filename);
103  GeneralOptions general_options;
104  weightfile.getOptions(general_options);
105 
106  auto specific_options = supported_interfaces[general_options.m_method]->getOptions();
107  specific_options->load(weightfile.getXMLTree());
108 
109  boost::property_tree::ptree temp_tree;
110  general_options.save(temp_tree);
111  specific_options->save(temp_tree);
112  std::ostringstream oss;
113 
114 #if BOOST_VERSION < 105600
115  boost::property_tree::xml_writer_settings<char> settings('\t', 1);
116 #else
117  boost::property_tree::xml_writer_settings<std::string> settings('\t', 1);
118 #endif
119  boost::property_tree::xml_parser::write_xml(oss, temp_tree, settings);;
120 
121  return oss.str();
122 
123 }
124 
125 bool Utility::available(const std::string& filename, int experiment, int run, int event)
126 {
127 
128  try {
129  auto weightfile = Weightfile::load(filename, Belle2::EventMetaData(event, run, experiment));
130  return true;
131  } catch (...) {
132  return false;
133  }
134 
135 }
136 
137 void Utility::expert(const std::vector<std::string>& filenames, const std::vector<std::string>& datafiles,
138  const std::string& treename,
139  const std::string& outputfile, int experiment, int run, int event, bool copy_target)
140 {
141 
142  std::vector<Weightfile> weightfiles;
143  std::vector<TBranch*> branches;
144 
145  TFile file(outputfile.c_str(), "RECREATE");
146  file.cd();
147  TTree tree("variables", "variables");
148  float result = 0;
149 
150  for (auto& filename : filenames) {
151  Belle2::EventMetaData emd(event, run, experiment);
152  auto weightfile = Weightfile::load(filename, emd);
153  weightfiles.push_back(weightfile);
154 
155  std::string branchname = Belle2::MakeROOTCompatible::makeROOTCompatible(filename);
156  auto branch = tree.Branch(branchname.c_str(), &result, (branchname + "/F").c_str());
157  branches.push_back(branch);
158  }
159 
161  auto supported_interfaces = AbstractInterface::getSupportedInterfaces();
162 
163  unsigned int i = 0;
164  for (auto& weightfile : weightfiles) {
165  GeneralOptions general_options;
166  weightfile.getOptions(general_options);
167  general_options.m_treename = treename;
168  // Override possible restriction of number of events in training
169  // otherwise this would apply to the expert as well.
170  general_options.m_max_events = 0;
171 
172  auto expertLocal = supported_interfaces[general_options.m_method]->getExpert();
173  expertLocal->load(weightfile);
174  // define if target variables should be copied
175  if (not copy_target) {
176  general_options.m_target_variable = std::string();
177  }
178 
179  general_options.m_datafiles = datafiles;
180  auto& branch = branches[i];
181  ROOTDataset data(general_options);
182  std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
183  auto results = expertLocal->apply(data);
184  std::chrono::high_resolution_clock::time_point stop = std::chrono::high_resolution_clock::now();
185  std::chrono::duration<double, std::milli> training_time = stop - start;
186  B2INFO("Elapsed application time in ms " << training_time.count() << " for " << general_options.m_identifier);
187  for (auto& r : results) {
188  result = r;
189  branch->Fill();
190  }
191 
192 
193  if (not general_options.m_target_variable.empty()) {
194  std::string branchname = Belle2::MakeROOTCompatible::makeROOTCompatible(std::string(branch->GetName()) + "_" +
195  general_options.m_target_variable);
196  float target = 0;
197  auto target_branch = tree.Branch(branchname.c_str(), &target, (branchname + "/F").c_str());
198  auto targets = data.getTargets();
199  for (auto& t : targets) {
200  target = t;
201  target_branch->Fill();
202  }
203  }
204 
205  ++i;
206  }
207 
208  tree.SetEntries();
209  file.Write("variables");
210 
211 }
212 
213 void Utility::save_custom_weightfile(const GeneralOptions& general_options, const SpecificOptions& specific_options,
214  const std::string& custom_weightfile, const std::string& output_identifier)
215 {
216  std::ifstream ifile(custom_weightfile);
217  if (!(bool)ifile) {
218  B2FATAL("Input weight file: " << custom_weightfile << " does not exist!");
219  }
220 
221  Weightfile weightfile;
222  weightfile.addOptions(general_options);
223  weightfile.addOptions(specific_options);
224  weightfile.addFile(general_options.m_identifier + "_Weightfile", custom_weightfile);
225  std::string output_weightfile(custom_weightfile);
226  if (!output_identifier.empty()) {
227  std::regex to_replace("(\\.\\S+$)");
228  std::string replacement = "_" + output_identifier + "$0";
229  output_weightfile = std::regex_replace(output_weightfile, to_replace, replacement);
230  }
231  Weightfile::save(weightfile, output_weightfile);
232 }
233 
234 void Utility::teacher(const GeneralOptions& general_options, const SpecificOptions& specific_options,
235  const MetaOptions& meta_options)
236 {
237  unsigned int number_of_enabled_meta_trainings = 0;
238  if (meta_options.m_use_splot)
239  number_of_enabled_meta_trainings++;
240  if (meta_options.m_use_sideband_subtraction)
241  number_of_enabled_meta_trainings++;
242  if (meta_options.m_use_reweighting)
243  number_of_enabled_meta_trainings++;
244 
245  if (number_of_enabled_meta_trainings > 1) {
246  B2ERROR("You enabled more than one meta training option. You can only use one (sPlot, SidebandSubstraction or Reweighting)");
247  return;
248  }
249 
250  if (meta_options.m_use_splot) {
251  teacher_splot(general_options, specific_options, meta_options);
252  } else if (meta_options.m_use_sideband_subtraction) {
253  teacher_sideband_subtraction(general_options, specific_options, meta_options);
254  } else if (meta_options.m_use_reweighting) {
255  teacher_reweighting(general_options, specific_options, meta_options);
256  } else {
257  ROOTDataset data(general_options);
258  teacher_dataset(general_options, specific_options, data);
259  }
260 }
261 
262 
263 std::unique_ptr<Belle2::MVA::Expert> Utility::teacher_dataset(GeneralOptions general_options,
264  const SpecificOptions& specific_options,
265  Dataset& data)
266 {
267  if (general_options.m_method.empty()) {
268  general_options.m_method = specific_options.getMethod();
269  } else {
270  if (general_options.m_method != specific_options.getMethod()) {
271  B2ERROR("The method specified in the general options is in conflict with the provided specific option:" << general_options.m_method
272  << " " << specific_options.getMethod());
273  }
274  }
276  auto supported_interfaces = AbstractInterface::getSupportedInterfaces();
277  if (supported_interfaces.find(general_options.m_method) != supported_interfaces.end()) {
278  auto teacherLocal = supported_interfaces[general_options.m_method]->getTeacher(general_options, specific_options);
279  std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
280  auto weightfile = teacherLocal->train(data);
281  std::chrono::high_resolution_clock::time_point stop = std::chrono::high_resolution_clock::now();
282  std::chrono::duration<double, std::milli> training_time = stop - start;
283  B2INFO("Elapsed training time in ms " << training_time.count() << " for " << general_options.m_identifier);
284  Weightfile::save(weightfile, general_options.m_identifier);
285  auto expertLocal = supported_interfaces[general_options.m_method]->getExpert();
286  expertLocal->load(weightfile);
287  return expertLocal;
288  } else {
289  B2ERROR("Interface doesn't support chosen method" << general_options.m_method);
290  throw std::runtime_error("Interface doesn't support chosen method" + general_options.m_method);
291  }
292 }
293 
294 std::unique_ptr<Belle2::MVA::Expert> Utility::teacher_splot(const GeneralOptions& general_options,
295  const SpecificOptions& specific_options,
296  const MetaOptions& meta_options)
297 {
298 
299  GeneralOptions data_general_options = general_options;
300  data_general_options.m_target_variable = "";
301  if (meta_options.m_splot_combined)
302  data_general_options.m_identifier = general_options.m_identifier + "_splot.xml";
303  ROOTDataset data_dataset(data_general_options);
304  // Reset target variable so that it shows up in the weightfile at the end
305  data_general_options.m_target_variable = general_options.m_target_variable;
306 
307  GeneralOptions discriminant_general_options = general_options;
308  discriminant_general_options.m_target_variable = "";
309  discriminant_general_options.m_variables = {meta_options.m_splot_variable};
310  ROOTDataset discriminant_dataset(discriminant_general_options);
311  // Reset target variable so that it shows up in the weightfile at the end
312  discriminant_general_options.m_target_variable = general_options.m_target_variable;
313 
314  GeneralOptions mc_general_options = general_options;
315  mc_general_options.m_datafiles = meta_options.m_splot_mc_files;
316  mc_general_options.m_variables = {meta_options.m_splot_variable};
317  ROOTDataset mc_dataset(mc_general_options);
318 
319  auto mc_signals = mc_dataset.getSignals();
320  auto mc_weights = mc_dataset.getWeights();
321  auto mc_feature = mc_dataset.getFeature(0);
322  auto data_feature = discriminant_dataset.getFeature(0);
323  auto data_weights = discriminant_dataset.getWeights();
324 
325  Binning binning = Binning::CreateEqualFrequency(mc_feature , mc_weights, mc_signals, 100);
326 
327  float signalFraction = binning.m_signal_yield / (binning.m_signal_yield + binning.m_bckgrd_yield);
328 
329  std::vector<double> data(100, 0);
330  double total_data = 0.0;
331  for (unsigned int iEvent = 0; iEvent < data_dataset.getNumberOfEvents(); ++iEvent) {
332  data[binning.getBin(data_feature[iEvent])] += data_weights[iEvent];
333  total_data += data_weights[iEvent];
334  }
335 
336  // We do a simple fit here to estimate the signal and background yields
337  // We could use RooFit here to avoid using custom code,
338  // but I found RooFit to be difficult and unstable ...
339 
340  float best_yield = 0.0;
341  double best_chi2 = 1000000000.0;
342  bool empty_bin = false;
343  for (double yield = 0; yield < total_data; yield += 1) {
344  double chi2 = 0.0;
345  for (unsigned int iBin = 0; iBin < 100; ++iBin) {
346  double deviation = (data[iBin] - (yield * binning.m_signal_pdf[iBin] + (total_data - yield) * binning.m_bckgrd_pdf[iBin]) *
347  (binning.m_boundaries[iBin + 1] - binning.m_boundaries[iBin]) / (binning.m_boundaries[100] - binning.m_boundaries[0]));
348  if (data[iBin] > 0)
349  chi2 += deviation * deviation / data[iBin];
350  else
351  empty_bin = true;
352  }
353  if (chi2 < best_chi2) {
354  best_chi2 = chi2;
355  best_yield = yield;
356  }
357  }
358 
359  if (empty_bin) {
360  B2WARNING("Encountered empty bin in data histogram during fit of the components for sPlot");
361  }
362 
363  B2INFO("sPlot best yield " << best_yield);
364  B2INFO("sPlot Yields On MC " << binning.m_signal_yield << " " << binning.m_bckgrd_yield);
365 
366  binning.m_signal_yield = best_yield;
367  binning.m_bckgrd_yield = (total_data - best_yield);
368 
369  B2INFO("sPlot Yields Fitted On Data " << binning.m_signal_yield << " " << binning.m_bckgrd_yield);
370 
371  if (meta_options.m_splot_boosted) {
372  GeneralOptions boost_general_options = data_general_options;
373  boost_general_options.m_identifier = general_options.m_identifier + "_boost.xml";
374  SPlotDataset splot_dataset(boost_general_options, data_dataset, getBoostWeights(discriminant_dataset, binning), signalFraction);
375  auto boost_expert = teacher_dataset(boost_general_options, specific_options, splot_dataset);
376 
377  SPlotDataset aplot_dataset(data_general_options, data_dataset, getAPlotWeights(discriminant_dataset, binning,
378  boost_expert->apply(data_dataset)), signalFraction);
379  auto splot_expert = teacher_dataset(data_general_options, specific_options, aplot_dataset);
380  if (not meta_options.m_splot_combined)
381  return splot_expert;
382  } else {
383  SPlotDataset splot_dataset(data_general_options, data_dataset, getSPlotWeights(discriminant_dataset, binning), signalFraction);
384  auto splot_expert = teacher_dataset(data_general_options, specific_options, splot_dataset);
385  if (not meta_options.m_splot_combined)
386  return splot_expert;
387  }
388 
389  mc_general_options.m_identifier = general_options.m_identifier + "_pdf.xml";
390  mc_general_options.m_method = "PDF";
391  PDFOptions pdf_options;
392  // cppcheck-suppress unreadVariable
393  auto pdf_expert = teacher_dataset(mc_general_options, pdf_options, mc_dataset);
394 
395  GeneralOptions combination_general_options = general_options;
396  combination_general_options.m_method = "Combination";
397  combination_general_options.m_variables.push_back(meta_options.m_splot_variable);
398  CombinationOptions combination_options;
399  combination_options.m_weightfiles = {data_general_options.m_identifier, mc_general_options.m_identifier};
400  auto combination_expert = teacher_dataset(combination_general_options, combination_options, data_dataset);
401 
402  return combination_expert;
403 }
404 
405 std::unique_ptr<Belle2::MVA::Expert> Utility::teacher_reweighting(const GeneralOptions& general_options,
406  const SpecificOptions& specific_options,
407  const MetaOptions& meta_options)
408 {
409  if (std::find(general_options.m_variables.begin(), general_options.m_variables.end(),
410  meta_options.m_reweighting_variable) != general_options.m_variables.end()) {
411  B2ERROR("You cannot use the reweighting variable as a feature in your training");
412  return nullptr;
413  }
414 
415  GeneralOptions data_general_options = general_options;
416  data_general_options.m_target_variable = "";
417  data_general_options.m_datafiles = meta_options.m_reweighting_data_files;
418  ROOTDataset data_dataset(data_general_options);
419 
420  GeneralOptions mc_general_options = general_options;
421  mc_general_options.m_datafiles = meta_options.m_reweighting_mc_files;
422  ROOTDataset mc_dataset(mc_general_options);
423 
424  CombinedDataset boost_dataset(general_options, data_dataset, mc_dataset);
425 
426  GeneralOptions boost_general_options = general_options;
427  boost_general_options.m_identifier = general_options.m_identifier + "_boost.xml";
428  // cppcheck-suppress unreadVariable
429  auto boost_expert = teacher_dataset(boost_general_options, specific_options, boost_dataset);
430 
431  GeneralOptions reweighter_general_options = general_options;
432  reweighter_general_options.m_identifier = meta_options.m_reweighting_identifier;
433  reweighter_general_options.m_method = "Reweighter";
434  ReweighterOptions reweighter_specific_options;
435  reweighter_specific_options.m_weightfile = boost_general_options.m_identifier;
436  reweighter_specific_options.m_variable = meta_options.m_reweighting_variable;
437 
438  if (meta_options.m_reweighting_variable != "") {
439  if (std::find(reweighter_general_options.m_spectators.begin(), reweighter_general_options.m_spectators.end(),
440  meta_options.m_reweighting_variable) == reweighter_general_options.m_spectators.end() and
441  std::find(reweighter_general_options.m_variables.begin(), reweighter_general_options.m_variables.end(),
442  meta_options.m_reweighting_variable) == reweighter_general_options.m_variables.end() and
443  reweighter_general_options.m_target_variable != meta_options.m_reweighting_variable and
444  reweighter_general_options.m_weight_variable != meta_options.m_reweighting_variable) {
445  reweighter_general_options.m_spectators.push_back(meta_options.m_reweighting_variable);
446  }
447  }
448 
449  ROOTDataset dataset(reweighter_general_options);
450  auto reweight_expert = teacher_dataset(reweighter_general_options, reweighter_specific_options, dataset);
451  auto weights = reweight_expert->apply(dataset);
452  ReweightingDataset reweighted_dataset(general_options, dataset, weights);
453  auto expertLocal = teacher_dataset(general_options, specific_options, reweighted_dataset);
454 
455  return expertLocal;
456 }
457 
458 std::unique_ptr<Belle2::MVA::Expert> Utility::teacher_sideband_subtraction(const GeneralOptions& general_options,
459  const SpecificOptions& specific_options,
460  const MetaOptions& meta_options)
461 {
462 
463  if (std::find(general_options.m_variables.begin(), general_options.m_variables.end(),
464  meta_options.m_sideband_variable) != general_options.m_variables.end()) {
465  B2ERROR("You cannot use the sideband variable as a feature in your training");
466  return nullptr;
467  }
468 
469  GeneralOptions data_general_options = general_options;
470  if (std::find(data_general_options.m_spectators.begin(), data_general_options.m_spectators.end(),
471  meta_options.m_sideband_variable) == data_general_options.m_spectators.end()) {
472  data_general_options.m_spectators.push_back(meta_options.m_sideband_variable);
473  }
474  ROOTDataset data_dataset(data_general_options);
475 
476  GeneralOptions mc_general_options = general_options;
477  mc_general_options.m_datafiles = meta_options.m_sideband_mc_files;
478  if (std::find(mc_general_options.m_spectators.begin(), mc_general_options.m_spectators.end(),
479  meta_options.m_sideband_variable) == mc_general_options.m_spectators.end()) {
480  mc_general_options.m_spectators.push_back(meta_options.m_sideband_variable);
481  }
482  ROOTDataset mc_dataset(mc_general_options);
483 
484  GeneralOptions sideband_general_options = general_options;
485  SidebandDataset sideband_dataset(sideband_general_options, data_dataset, mc_dataset, meta_options.m_sideband_variable);
486  auto expertLocal = teacher_dataset(general_options, specific_options, sideband_dataset);
487 
488  return expertLocal;
489 }
Store event, run, and experiment numbers.
Definition: EventMetaData.h:33
A class that describes the interval of experiments/runs for which an object in the database is valid.
static std::map< std::string, AbstractInterface * > getSupportedInterfaces()
Returns interfaces supported by the MVA Interface.
Definition: Interface.h:53
static void initSupportedInterfaces()
Static function which initliazes all supported interfaces, has to be called once before getSupportedI...
Definition: Interface.cc:45
Binning of a data distribution Provides PDF and CDF values of the distribution per bin.
Definition: Binning.h:27
std::vector< float > m_bckgrd_pdf
Background pdf of data distribution per bin.
Definition: Binning.h:58
std::vector< float > m_signal_pdf
Signal pdf of data distribution per bin.
Definition: Binning.h:56
std::vector< float > m_boundaries
Boundaries of data distribution, including minimum and maximum value as first and last boundary.
Definition: Binning.h:61
double m_bckgrd_yield
Background yield in data distribution.
Definition: Binning.h:54
double m_signal_yield
Signal yield in data distribution.
Definition: Binning.h:53
static Binning CreateEqualFrequency(const std::vector< float > &data, const std::vector< float > &weights, const std::vector< bool > &isSignal, unsigned int nBins)
Create an equal frequency (aka equal-statistics) binning.
Definition: Binning.cc:93
unsigned int getBin(float datapoint) const
Gets the bin corresponding to the given datapoint.
Definition: Binning.cc:34
Options for the Combination MVA method.
Definition: Combination.h:28
std::vector< std::string > m_weightfiles
Weightfiles of all methods we want to combine.
Definition: Combination.h:53
Wraps two other Datasets, one containing signal, the other background events Used by the reweighting ...
Definition: Dataset.h:294
Abstract base class of all Datasets given to the MVA interface The current event can always be access...
Definition: Dataset.h:33
virtual std::vector< bool > getSignals()
Returns all is Signals.
Definition: Dataset.cc:122
General options which are shared by all MVA trainings.
Definition: Options.h:62
std::vector< std::string > m_datafiles
Name of the datafiles containing the training data.
Definition: Options.h:84
std::vector< std::string > m_variables
Vector of all variables (branch names) used in the training.
Definition: Options.h:86
std::string m_weight_variable
Weight variable (branch name) defining the weights.
Definition: Options.h:90
std::vector< std::string > m_spectators
Vector of all spectators (branch names) used in the training.
Definition: Options.h:87
std::string m_method
Name of the MVA method to use.
Definition: Options.h:82
std::string m_target_variable
Target variable (branch name) defining the target.
Definition: Options.h:89
std::string m_identifier
Identifier containing the finished training.
Definition: Options.h:83
Meta Options which modify the underlying training by doing sPlot, Multiclass and HyperparameterSearch...
Definition: Options.h:110
Options for the PDF MVA method.
Definition: PDF.h:29
Proivdes a dataset from a ROOT file This is the usually used dataset providing training data to the m...
Definition: Dataset.h:349
virtual unsigned int getNumberOfEvents() const override
Returns the number of events in this dataset.
Definition: Dataset.h:371
virtual std::vector< float > getFeature(unsigned int iFeature) override
Returns all values of one feature in a std::vector<float>
Definition: Dataset.cc:443
virtual std::vector< float > getWeights() override
Returns all values of of the weights in a std::vector<float>
Definition: Dataset.cc:415
Options for the Reweighter MVA method.
Definition: Reweighter.h:28
std::string m_weightfile
Weightfile of the reweighting expert.
Definition: Reweighter.h:53
std::string m_variable
Variable which decides if the reweighter is applied or not.
Definition: Reweighter.h:54
Dataset for Reweighting Wraps a dataset and provides each data-point with a new weight.
Definition: DataDriven.h:29
Dataset for sPlot Wraps a dataset and provides each data-point twice, once as signal and once as back...
Definition: DataDriven.h:161
Dataset for Sideband Subtraction Wraps a dataset and provides each data-point with a new weight.
Definition: DataDriven.h:104
Specific Options, all method Options have to inherit from this class.
Definition: Options.h:97
static void expert(const std::vector< std::string > &filenames, const std::vector< std::string > &datafiles, const std::string &treename, const std::string &outputfile, int experiment=0, int run=0, int event=0, bool copy_target=true)
Convenience function applies experts on given data.
Definition: Utility.cc:137
static void upload_array(const std::vector< std::string > &filenames, const std::string &identifier, int exp1=0, int run1=0, int exp2=-1, int run2=-1)
Convenience function which uploads an array of weightfiles to the database.
Definition: Utility.cc:60
static void upload(const std::string &filename, const std::string &identifier, int exp1=0, int run1=0, int exp2=-1, int run2=-1)
Convenience function which uploads a given weightfile to the database.
Definition: Utility.cc:45
static void download(const std::string &identifier, const std::string &filename, int experiment=0, int run=0, int event=0)
Convenience function which downloads a given weightfile from the database.
Definition: Utility.cc:31
static std::unique_ptr< Belle2::MVA::Expert > teacher_sideband_subtraction(const GeneralOptions &general_options, const SpecificOptions &specific_options, const MetaOptions &meta_options)
Performs a sideband subtraction training, convenience function.
Definition: Utility.cc:458
static std::unique_ptr< Belle2::MVA::Expert > teacher_reweighting(const GeneralOptions &general_options, const SpecificOptions &specific_options, const MetaOptions &meta_options)
Performs a MC vs data pre-training and afterwards reweighted training, convenience function.
Definition: Utility.cc:405
static void teacher(const GeneralOptions &general_options, const SpecificOptions &specific_options, const MetaOptions &meta_options=MetaOptions())
Convenience function which performs a training with the given options.
Definition: Utility.cc:234
static void extract(const std::string &filename, const std::string &directory)
Convenience function which extracts the expertise in a given weightfile into a temporary directory.
Definition: Utility.cc:82
static std::unique_ptr< Belle2::MVA::Expert > teacher_dataset(GeneralOptions general_options, const SpecificOptions &specific_options, Dataset &data)
Convenience function which performs a training on a dataset.
Definition: Utility.cc:263
static std::string info(const std::string &filename)
Print information about the classifier stored in the given weightfile.
Definition: Utility.cc:97
static void save_custom_weightfile(const GeneralOptions &general_options, const SpecificOptions &specific_options, const std::string &custom_weightfile, const std::string &output_identifier="")
Convenience function which saves a pre-existing weightfile in a mva package-compliant format.
Definition: Utility.cc:213
static std::unique_ptr< Belle2::MVA::Expert > teacher_splot(const GeneralOptions &general_options, const SpecificOptions &specific_options, const MetaOptions &meta_options)
Performs an splot training, convenience function.
Definition: Utility.cc:294
static bool available(const std::string &filename, int experiment=0, int run=0, int event=0)
Convenience function which checks if an experise is available.
Definition: Utility.cc:125
The Weightfile class serializes all information about a training into an xml tree.
Definition: Weightfile.h:38
void addFile(const std::string &identifier, const std::string &custom_weightfile)
Add a file (mostly a weightfile from a MVA library) to our Weightfile.
Definition: Weightfile.cc:114
static Weightfile loadFromXMLFile(const std::string &filename)
Static function which loads a Weightfile from a XML file.
Definition: Weightfile.cc:239
static void save(Weightfile &weightfile, const std::string &filename, const Belle2::IntervalOfValidity &iov=Belle2::IntervalOfValidity(0, 0, -1, -1))
Static function which saves a Weightfile to a file.
Definition: Weightfile.cc:153
static void saveToXMLFile(Weightfile &weightfile, const std::string &filename)
Static function which saves a Weightfile to a XML file.
Definition: Weightfile.cc:174
void addOptions(const Options &options)
Add an Option object to the xml tree.
Definition: Weightfile.cc:61
static Weightfile loadFromROOTFile(const std::string &filename)
Static function which loads a Weightfile from a ROOT file.
Definition: Weightfile.cc:216
static Weightfile load(const std::string &filename, const Belle2::EventMetaData &emd=Belle2::EventMetaData(0, 0, 0))
Static function which loads a Weightfile from a file or from the database.
Definition: Weightfile.cc:194
static Weightfile loadFromDatabase(const std::string &identifier, const Belle2::EventMetaData &emd=Belle2::EventMetaData(0, 0, 0))
Static function which loads a Weightfile from the basf2 condition database.
Definition: Weightfile.cc:280
static void saveToROOTFile(Weightfile &weightfile, const std::string &filename)
Static function which saves a Weightfile to a ROOT file.
Definition: Weightfile.cc:164
static void saveArrayToDatabase(const std::vector< Weightfile > &weightfiles, const std::string &identifier, const Belle2::IntervalOfValidity &iov=Belle2::IntervalOfValidity(0, 0, -1, -1))
Static function which saves an array of Weightfile objects in the basf2 condition database.
Definition: Weightfile.cc:266
static void saveToDatabase(Weightfile &weightfile, const std::string &identifier, const Belle2::IntervalOfValidity &iov=Belle2::IntervalOfValidity(0, 0, -1, -1))
Static function which saves a Weightfile in the basf2 condition database.
Definition: Weightfile.cc:257
static std::string makeROOTCompatible(std::string str)
Remove special characters that ROOT dislikes in branch names, e.g.