112                                                      std::vector<TH1D*> &hbkg, std::vector<TH1D*> &hsig_unw,
 
  113                                                      std::vector<TH1D*> &hbkg_unw)
 
  116   if (hsig.size() != volume.
fLower->size()
 
  117       || hbkg.size() != volume.
fLower->size()
 
  118       || hsig_unw.size() != volume.
fLower->size()
 
  119       || hbkg_unw.size() != volume.
fLower->size())
 
  120      Log() << kFATAL << 
"<PDEFoamDistr::FillHistograms> Edge histograms have wrong size!" << 
Endl;
 
  123   for (
UInt_t idim = 0; idim < hsig.size(); ++idim) {
 
  124      if (!hsig.at(idim) || !hbkg.at(idim) ||
 
  125          !hsig_unw.at(idim) || !hbkg_unw.at(idim))
 
  126         Log() << kFATAL << 
"<PDEFoamDistr::FillHist> Histograms not initialized!" << 
Endl;
 
  130   std::vector<const TMVA::BinarySearchTreeNode*> nodes;
 
  133   fBst->SearchVolume(&volume, &nodes);
 
  136   std::vector<Float_t> 
xmin(volume.
fLower->size(), std::numeric_limits<float>::max());
 
  137   std::vector<Float_t> 
xmax(volume.
fLower->size(), -std::numeric_limits<float>::max());
 
  138   for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
 
  139        it != nodes.end(); ++it) {
 
  140      std::vector<Float_t> ev = (*it)->GetEventV();
 
  141      for (
UInt_t idim = 0; idim < 
xmin.size(); ++idim) {
 
  142         if (ev.at(idim) < 
xmin.at(idim))  
xmin.at(idim) = ev.at(idim);
 
  143         if (ev.at(idim) > 
xmax.at(idim))  
xmax.at(idim) = ev.at(idim);
 
  148   for (
UInt_t idim = 0; idim < hsig.size(); ++idim) {
 
  149      hsig.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim), 
xmax.at(idim));
 
  150      hbkg.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim), 
xmax.at(idim));
 
  151      hsig_unw.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim), 
xmax.at(idim));
 
  152      hbkg_unw.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim), 
xmax.at(idim));
 
  153      hsig.at(idim)->Reset();
 
  154      hbkg.at(idim)->Reset();
 
  155      hsig_unw.at(idim)->Reset();
 
  156      hbkg_unw.at(idim)->Reset();
 
  160   for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
 
  161        it != nodes.end(); ++it) {
 
  162      std::vector<Float_t> ev = (*it)->GetEventV();
 
  163      Float_t              wt = (*it)->GetWeight();
 
  164      for (
UInt_t idim = 0; idim < ev.size(); ++idim) {
 
  165         if ((*it)->GetClass() == 
fClass) {
 
  166            hsig.at(idim)->Fill(ev.at(idim), wt);
 
  167            hsig_unw.at(idim)->Fill(ev.at(idim), 1);
 
  169            hbkg.at(idim)->Fill(ev.at(idim), wt);
 
  170            hbkg_unw.at(idim)->Fill(ev.at(idim), 1);
 
This is a concrete implementation of PDEFoam.
 
PDEFoamDecisionTreeDensity()
 
virtual Double_t Density(std::vector< Double_t > &Xarg, Double_t &event_density)
This function is not used in the decision tree like PDEFoam, instead FillHist() is used.
 
virtual void FillHistograms(TMVA::Volume &, std::vector< TH1D * > &, std::vector< TH1D * > &, std::vector< TH1D * > &, std::vector< TH1D * > &)
Fill the given histograms with signal and background events, which are found in the volume.
 
This is an abstract class, which provides an interface for a PDEFoam density estimator.
 
Volume for BinarySearchTree.
 
std::vector< Double_t > * fLower
vector with lower volume dimensions
 
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
 
MsgLogger & Endl(MsgLogger &ml)