54 ClassImp(TMVA::PDEFoamTargetDensity);
58 TMVA::PDEFoamTargetDensity::PDEFoamTargetDensity()
59 : PDEFoamDensityBase()
73 TMVA::PDEFoamTargetDensity::PDEFoamTargetDensity(std::vector<Double_t> box, UInt_t target)
74 : PDEFoamDensityBase(box)
82 TMVA::PDEFoamTargetDensity::PDEFoamTargetDensity(
const PDEFoamTargetDensity &distr)
83 : PDEFoamDensityBase(distr)
84 , fTarget(distr.fTarget)
104 Double_t TMVA::PDEFoamTargetDensity::Density(std::vector<Double_t> &xev, Double_t &event_density)
107 Log() << kFATAL <<
"<PDEFoamTargetDensity::Density()> Binary tree not found!" << Endl;
110 std::vector<Double_t> lb(GetBox().size());
111 std::vector<Double_t> ub(GetBox().size());
114 const Double_t probevolume_inv = 1.0 / GetBoxVolume();
117 for (UInt_t idim = 0; idim < GetBox().size(); ++idim) {
118 lb[idim] = xev[idim] - GetBox().at(idim) / 2.0;
119 ub[idim] = xev[idim] + GetBox().at(idim) / 2.0;
122 TMVA::Volume volume(&lb, &ub);
123 std::vector<const TMVA::BinarySearchTreeNode*> nodes;
126 const Double_t sumOfWeights = fBst->SearchVolume(&volume, &nodes);
129 event_density = nodes.size() * probevolume_inv;
133 for (std::vector<const TMVA::BinarySearchTreeNode*>::const_iterator it = nodes.begin();
134 it != nodes.end(); ++it) {
135 n_tar += ((*it)->GetTargets()).at(fTarget) * ((*it)->GetWeight());
139 return (n_tar / (sumOfWeights + 0.1)) * probevolume_inv;