57 ClassImp(TMVA::PDEFoamDiscriminantDensity);
61 TMVA::PDEFoamDiscriminantDensity::PDEFoamDiscriminantDensity()
62 : PDEFoamDensityBase()
76 TMVA::PDEFoamDiscriminantDensity::PDEFoamDiscriminantDensity(std::vector<Double_t> box, UInt_t cls)
77 : PDEFoamDensityBase(box)
85 TMVA::PDEFoamDiscriminantDensity::PDEFoamDiscriminantDensity(
const PDEFoamDiscriminantDensity &distr)
86 : PDEFoamDensityBase(distr)
87 , fClass(distr.fClass)
108 Double_t TMVA::PDEFoamDiscriminantDensity::Density(std::vector<Double_t> &xev, Double_t &event_density)
111 Log() << kFATAL <<
"<PDEFoamDiscriminantDensity::Density()> Binary tree not set!" << Endl;
114 std::vector<Double_t> lb(GetBox().size());
115 std::vector<Double_t> ub(GetBox().size());
118 const Double_t probevolume_inv = 1.0 / GetBoxVolume();
121 for (UInt_t idim = 0; idim < GetBox().size(); ++idim) {
122 lb[idim] = xev[idim] - GetBox().at(idim) / 2.0;
123 ub[idim] = xev[idim] + GetBox().at(idim) / 2.0;
126 TMVA::Volume volume(&lb, &ub);
127 std::vector<const TMVA::BinarySearchTreeNode*> nodes;
130 const Double_t sumOfWeights = fBst->SearchVolume(&volume, &nodes);
133 event_density = nodes.size() * probevolume_inv;
137 for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
138 it != nodes.end(); ++it) {
139 if ((*it)->GetClass() == fClass)
140 n_sig += (*it)->GetWeight();
144 return (n_sig / (sumOfWeights + 0.1)) * probevolume_inv;