52 ClassImp(TMVA::PDEFoamTarget);
 
   57 TMVA::PDEFoamTarget::PDEFoamTarget()
 
   72 TMVA::PDEFoamTarget::PDEFoamTarget(
const TString& name, UInt_t target)
 
   81 TMVA::PDEFoamTarget::PDEFoamTarget(
const PDEFoamTarget &from)
 
   83    , fTarget(from.fTarget)
 
   85    Log() << kFATAL << 
"COPY CONSTRUCTOR NOT IMPLEMENTED" << Endl;
 
   93 void TMVA::PDEFoamTarget::FillFoamCells(
const Event* ev, Float_t wt)
 
   96    std::vector<Float_t> values  = ev->GetValues();
 
   97    std::vector<Float_t> tvalues = VarTransform(values);
 
   98    std::vector<Float_t> targets = ev->GetTargets();
 
   99    PDEFoamCell *cell = FindCell(tvalues);
 
  103    SetCellElement(cell, 0, GetCellElement(cell, 0) + wt);
 
  104    SetCellElement(cell, 1, GetCellElement(cell, 1) + wt * targets.at(fTarget));
 
  112 void TMVA::PDEFoamTarget::Finalize()
 
  115    for (Long_t iCell = 0; iCell <= fLastCe; iCell++) {
 
  116       if (!(fCells[iCell]->GetStat()))
 
  119       Double_t n_ev  = GetCellElement(fCells[iCell], 0); 
 
  120       Double_t tar   = GetCellElement(fCells[iCell], 1); 
 
  123          SetCellElement(fCells[iCell], 0, tar / n_ev); 
 
  124          SetCellElement(fCells[iCell], 1, tar / TMath::Sqrt(n_ev)); 
 
  126          SetCellElement(fCells[iCell], 0, 0.0);  
 
  127          SetCellElement(fCells[iCell], 1, -1);   
 
  136 Bool_t TMVA::PDEFoamTarget::CellValueIsUndefined(PDEFoamCell* cell)
 
  138    return GetCellValue(cell, kValueError) == -1;
 
  150 Float_t TMVA::PDEFoamTarget::GetCellValue(
const std::vector<Float_t> &xvec, ECellValue cv, PDEFoamKernelBase *kernel)
 
  152    std::vector<Float_t> txvec(VarTransform(xvec));
 
  153    PDEFoamCell *cell = FindCell(txvec);
 
  155    if (!CellValueIsUndefined(cell)) {
 
  158          return GetCellValue(cell, cv);
 
  160          return kernel->Estimate(
this, txvec, cv);
 
  163       return GetAverageNeighborsValue(txvec, kValue);
 
  175 Float_t TMVA::PDEFoamTarget::GetAverageNeighborsValue(std::vector<Float_t> &txvec,
 
  178    const Float_t xoffset = 1.e-6;
 
  182    PDEFoamCell *cell = FindCell(txvec); 
 
  183    PDEFoamVect cellSize(GetTotDim());
 
  184    PDEFoamVect cellPosi(GetTotDim());
 
  185    cell->GetHcub(cellPosi, cellSize); 
 
  188    for (Int_t dim = 0; dim < GetTotDim(); dim++) {
 
  189       std::vector<Float_t> ntxvec(txvec);
 
  190       PDEFoamCell* left_cell  = 0; 
 
  191       PDEFoamCell* right_cell = 0; 
 
  194       ntxvec[dim] = cellPosi[dim] - xoffset;
 
  195       left_cell = FindCell(ntxvec);
 
  196       if (!CellValueIsUndefined(left_cell)) {
 
  198          result += GetCellValue(left_cell, cv);
 
  202       ntxvec[dim] = cellPosi[dim] + cellSize[dim] + xoffset;
 
  203       right_cell = FindCell(ntxvec);
 
  204       if (!CellValueIsUndefined(right_cell)) {
 
  206          result += GetCellValue(right_cell, cv);
 
  210    if (norm > 0)  result /= norm;