45 #ifndef ROOT_TMVA_PDEFoamDecisionTreeDensity
53 TMVA::PDEFoamDecisionTreeDensity::PDEFoamDecisionTreeDensity()
54 : PDEFoamDensityBase()
105 std::vector<TH1D*> &hbkg, std::vector<TH1D*> &hsig_unw,
106 std::vector<TH1D*> &hbkg_unw)
109 if (hsig.size() != volume.
fLower->size()
110 || hbkg.size() != volume.
fLower->size()
111 || hsig_unw.size() != volume.
fLower->size()
112 || hbkg_unw.size() != volume.
fLower->size())
113 Log() <<
kFATAL <<
"<PDEFoamDistr::FillHistograms> Edge histograms have wrong size!" <<
Endl;
116 for (
UInt_t idim = 0; idim < hsig.size(); ++idim) {
117 if (!hsig.at(idim) || !hbkg.at(idim) ||
118 !hsig_unw.at(idim) || !hbkg_unw.at(idim))
119 Log() <<
kFATAL <<
"<PDEFoamDistr::FillHist> Histograms not initialized!" <<
Endl;
123 std::vector<const TMVA::BinarySearchTreeNode*> nodes;
126 fBst->SearchVolume(&volume, &nodes);
131 for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
132 it != nodes.end(); ++it) {
133 std::vector<Float_t> ev = (*it)->GetEventV();
134 for (
UInt_t idim = 0; idim <
xmin.size(); ++idim) {
135 if (ev.at(idim) <
xmin.at(idim))
xmin.at(idim) = ev.at(idim);
136 if (ev.at(idim) >
xmax.at(idim))
xmax.at(idim) = ev.at(idim);
141 for (
UInt_t idim = 0; idim < hsig.size(); ++idim) {
142 hsig.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim),
xmax.at(idim));
143 hbkg.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim),
xmax.at(idim));
144 hsig_unw.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim),
xmax.at(idim));
145 hbkg_unw.at(idim)->GetXaxis()->SetLimits(
xmin.at(idim),
xmax.at(idim));
146 hsig.at(idim)->Reset();
147 hbkg.at(idim)->Reset();
148 hsig_unw.at(idim)->Reset();
149 hbkg_unw.at(idim)->Reset();
153 for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
154 it != nodes.end(); ++it) {
155 std::vector<Float_t> ev = (*it)->GetEventV();
156 Float_t wt = (*it)->GetWeight();
157 for (
UInt_t idim = 0; idim < ev.size(); ++idim) {
158 if ((*it)->GetClass() ==
fClass) {
159 hsig.at(idim)->Fill(ev.at(idim), wt);
160 hsig_unw.at(idim)->Fill(ev.at(idim), 1);
162 hbkg.at(idim)->Fill(ev.at(idim), wt);
163 hbkg_unw.at(idim)->Fill(ev.at(idim), 1);
std::vector< Double_t > * fLower
ClassImp(TMVA::PDEFoamDecisionTreeDensity) TMVA
MsgLogger & Endl(MsgLogger &ml)
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...
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
TClass * fClass
pointer to the foreign object
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...
static Vc_ALWAYS_INLINE int_v max(const int_v &x, const int_v &y)
Abstract ClassifierFactory template that handles arbitrary types.