// @(#)root/tmva $Id$
// Author: Tancredi Carli, Dominik Dannheim, Alexander Voigt

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Classes: PDEFoamEvent                                                          *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Implementation.                                                           *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Tancredi Carli   - CERN, Switzerland                                      *
 *      Dominik Dannheim - CERN, Switzerland                                      *
 *      S. Jadach        - Institute of Nuclear Physics, Cracow, Poland           *
 *      Alexander Voigt  - TU Dresden, Germany                                    *
 *      Peter Speckmayer - CERN, Switzerland                                      *
 *                                                                                *
 * Copyright (c) 2008, 2010:                                                      *
 *      CERN, Switzerland                                                         *
 *      MPI-K Heidelberg, Germany                                                 *
 *                                                                                *
 * Redistribution and use in source and binary forms, with or without             *
 * modification, are permitted according to the terms listed in LICENSE           *
 * (http://tmva.sourceforge.net/LICENSE)                                          *
 **********************************************************************************/

//_____________________________________________________________________
//
// PDEFoamEvent
//
// This PDEFoam variant stores in every cell the sum of event weights
// and the sum of the squared event weights.  It therefore acts as
// event density estimator.  It should be booked together with the
// PDEFoamEventDensity density estimator, which returns the event
// weight density at a given phase space point during the foam
// build-up.
//
//_____________________________________________________________________

#ifndef ROOT_TMVA_PDEFoamEvent
#include "TMVA/PDEFoamEvent.h"
#endif

ClassImp(TMVA::PDEFoamEvent)

//_____________________________________________________________________
TMVA::PDEFoamEvent::PDEFoamEvent()
   : PDEFoam()
{
   // Default constructor for streamer, user should not use it.
}

//_____________________________________________________________________
TMVA::PDEFoamEvent::PDEFoamEvent(const TString& name)
   : PDEFoam(name)
{}

//_____________________________________________________________________
TMVA::PDEFoamEvent::PDEFoamEvent(const PDEFoamEvent &from)
   : PDEFoam(from)
{
   // Copy Constructor  NOT IMPLEMENTED (NEVER USED)
   Log() << kFATAL << "COPY CONSTRUCTOR NOT IMPLEMENTED" << Endl;
}

//_____________________________________________________________________
void TMVA::PDEFoamEvent::FillFoamCells(const Event* ev, Float_t wt)
{
   // This function fills an event weight 'wt' into the PDEFoam.  Cell
   // element 0 is filled with the weight 'wt', and element 1 is
   // filled with the squared weight.

   // find corresponding foam cell
   std::vector<Float_t> values  = ev->GetValues();
   std::vector<Float_t> tvalues = VarTransform(values);
   PDEFoamCell *cell = FindCell(tvalues);

   // 0. Element: Sum of event weights 'wt'
   // 1. Element: Sum of squared event weights 'wt'
   SetCellElement(cell, 0, GetCellElement(cell, 0) + wt);
   SetCellElement(cell, 1, GetCellElement(cell, 1) + wt * wt);
}
 PDEFoamEvent.cxx:1
 PDEFoamEvent.cxx:2
 PDEFoamEvent.cxx:3
 PDEFoamEvent.cxx:4
 PDEFoamEvent.cxx:5
 PDEFoamEvent.cxx:6
 PDEFoamEvent.cxx:7
 PDEFoamEvent.cxx:8
 PDEFoamEvent.cxx:9
 PDEFoamEvent.cxx:10
 PDEFoamEvent.cxx:11
 PDEFoamEvent.cxx:12
 PDEFoamEvent.cxx:13
 PDEFoamEvent.cxx:14
 PDEFoamEvent.cxx:15
 PDEFoamEvent.cxx:16
 PDEFoamEvent.cxx:17
 PDEFoamEvent.cxx:18
 PDEFoamEvent.cxx:19
 PDEFoamEvent.cxx:20
 PDEFoamEvent.cxx:21
 PDEFoamEvent.cxx:22
 PDEFoamEvent.cxx:23
 PDEFoamEvent.cxx:24
 PDEFoamEvent.cxx:25
 PDEFoamEvent.cxx:26
 PDEFoamEvent.cxx:27
 PDEFoamEvent.cxx:28
 PDEFoamEvent.cxx:29
 PDEFoamEvent.cxx:30
 PDEFoamEvent.cxx:31
 PDEFoamEvent.cxx:32
 PDEFoamEvent.cxx:33
 PDEFoamEvent.cxx:34
 PDEFoamEvent.cxx:35
 PDEFoamEvent.cxx:36
 PDEFoamEvent.cxx:37
 PDEFoamEvent.cxx:38
 PDEFoamEvent.cxx:39
 PDEFoamEvent.cxx:40
 PDEFoamEvent.cxx:41
 PDEFoamEvent.cxx:42
 PDEFoamEvent.cxx:43
 PDEFoamEvent.cxx:44
 PDEFoamEvent.cxx:45
 PDEFoamEvent.cxx:46
 PDEFoamEvent.cxx:47
 PDEFoamEvent.cxx:48
 PDEFoamEvent.cxx:49
 PDEFoamEvent.cxx:50
 PDEFoamEvent.cxx:51
 PDEFoamEvent.cxx:52
 PDEFoamEvent.cxx:53
 PDEFoamEvent.cxx:54
 PDEFoamEvent.cxx:55
 PDEFoamEvent.cxx:56
 PDEFoamEvent.cxx:57
 PDEFoamEvent.cxx:58
 PDEFoamEvent.cxx:59
 PDEFoamEvent.cxx:60
 PDEFoamEvent.cxx:61
 PDEFoamEvent.cxx:62
 PDEFoamEvent.cxx:63
 PDEFoamEvent.cxx:64
 PDEFoamEvent.cxx:65
 PDEFoamEvent.cxx:66
 PDEFoamEvent.cxx:67
 PDEFoamEvent.cxx:68
 PDEFoamEvent.cxx:69
 PDEFoamEvent.cxx:70
 PDEFoamEvent.cxx:71
 PDEFoamEvent.cxx:72
 PDEFoamEvent.cxx:73
 PDEFoamEvent.cxx:74
 PDEFoamEvent.cxx:75
 PDEFoamEvent.cxx:76
 PDEFoamEvent.cxx:77
 PDEFoamEvent.cxx:78
 PDEFoamEvent.cxx:79
 PDEFoamEvent.cxx:80
 PDEFoamEvent.cxx:81
 PDEFoamEvent.cxx:82
 PDEFoamEvent.cxx:83
 PDEFoamEvent.cxx:84