56 ClassImp(TMVA::PDEFoamDecisionTreeDensity);
60 TMVA::PDEFoamDecisionTreeDensity::PDEFoamDecisionTreeDensity()
61 : PDEFoamDensityBase()
75 TMVA::PDEFoamDecisionTreeDensity::PDEFoamDecisionTreeDensity(std::vector<Double_t> box, UInt_t cls)
76 : PDEFoamDensityBase(box)
84 TMVA::PDEFoamDecisionTreeDensity::PDEFoamDecisionTreeDensity(
const PDEFoamDecisionTreeDensity &distr)
85 : PDEFoamDensityBase(distr)
86 , fClass(distr.fClass)
94 Double_t TMVA::PDEFoamDecisionTreeDensity::Density(std::vector<Double_t>& ,
111 void TMVA::PDEFoamDecisionTreeDensity::FillHistograms(TMVA::Volume &volume, std::vector<TH1D*> &hsig,
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);