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

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Classes: PDEFoamMultiTarget                                                    *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Concrete PDEFoamEvent sub-class.  This foam stores the number             *
 *      of events with every cell, as well as the statistical error on            *
 *      the event number.  It overrides GetCellValue() for projecting             *
 *      the target values given an incomplete event map with                      *
 *      N_variables < dimension of foam.                                          *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      S. Jadach        - Institute of Nuclear Physics, Cracow, Poland           *
 *      Tancredi Carli   - CERN, Switzerland                                      *
 *      Dominik Dannheim - CERN, Switzerland                                      *
 *      Alexander Voigt  - TU Dresden, Germany                                    *
 *                                                                                *
 * 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)                                          *
 **********************************************************************************/

#ifndef ROOT_TMVA_PDEFoamMultiTarget
#define ROOT_TMVA_PDEFoamMultiTarget

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

namespace TMVA
{

   // target selection method
   enum ETargetSelection { kMean = 0, kMpv = 1 };

   class PDEFoamMultiTarget : public PDEFoamEvent
   {

   protected:
      ETargetSelection fTargetSelection; // the target selection method

      PDEFoamMultiTarget(const PDEFoamMultiTarget&); // Copy Constructor  NOT USED
      virtual void CalculateMpv(std::map<Int_t, Float_t>&, const std::vector<PDEFoamCell*>&);  // Calculate mpv target
      virtual void CalculateMean(std::map<Int_t, Float_t>&, const std::vector<PDEFoamCell*>&); // Calculate mean target

      // ---------- Public functions ----------------------------------
   public:
      PDEFoamMultiTarget();                  // Default constructor (used only by ROOT streamer)
      PDEFoamMultiTarget(const TString&, ETargetSelection); // Principal user-defined constructor
      virtual ~PDEFoamMultiTarget() {}       // Default destructor

      // overridden from PDEFoam: extract the targets from the foam
      virtual std::vector<Float_t> GetCellValue(const std::map<Int_t, Float_t>&, ECellValue);
      using PDEFoam::GetCellValue;

      // ---------- ROOT class definition
      ClassDef(PDEFoamMultiTarget, 1) // Tree of PDEFoamCells
   }; // end of PDEFoamMultiTarget

}  // namespace TMVA

// ---------- Inline functions

#endif
 PDEFoamMultiTarget.h:1
 PDEFoamMultiTarget.h:2
 PDEFoamMultiTarget.h:3
 PDEFoamMultiTarget.h:4
 PDEFoamMultiTarget.h:5
 PDEFoamMultiTarget.h:6
 PDEFoamMultiTarget.h:7
 PDEFoamMultiTarget.h:8
 PDEFoamMultiTarget.h:9
 PDEFoamMultiTarget.h:10
 PDEFoamMultiTarget.h:11
 PDEFoamMultiTarget.h:12
 PDEFoamMultiTarget.h:13
 PDEFoamMultiTarget.h:14
 PDEFoamMultiTarget.h:15
 PDEFoamMultiTarget.h:16
 PDEFoamMultiTarget.h:17
 PDEFoamMultiTarget.h:18
 PDEFoamMultiTarget.h:19
 PDEFoamMultiTarget.h:20
 PDEFoamMultiTarget.h:21
 PDEFoamMultiTarget.h:22
 PDEFoamMultiTarget.h:23
 PDEFoamMultiTarget.h:24
 PDEFoamMultiTarget.h:25
 PDEFoamMultiTarget.h:26
 PDEFoamMultiTarget.h:27
 PDEFoamMultiTarget.h:28
 PDEFoamMultiTarget.h:29
 PDEFoamMultiTarget.h:30
 PDEFoamMultiTarget.h:31
 PDEFoamMultiTarget.h:32
 PDEFoamMultiTarget.h:33
 PDEFoamMultiTarget.h:34
 PDEFoamMultiTarget.h:35
 PDEFoamMultiTarget.h:36
 PDEFoamMultiTarget.h:37
 PDEFoamMultiTarget.h:38
 PDEFoamMultiTarget.h:39
 PDEFoamMultiTarget.h:40
 PDEFoamMultiTarget.h:41
 PDEFoamMultiTarget.h:42
 PDEFoamMultiTarget.h:43
 PDEFoamMultiTarget.h:44
 PDEFoamMultiTarget.h:45
 PDEFoamMultiTarget.h:46
 PDEFoamMultiTarget.h:47
 PDEFoamMultiTarget.h:48
 PDEFoamMultiTarget.h:49
 PDEFoamMultiTarget.h:50
 PDEFoamMultiTarget.h:51
 PDEFoamMultiTarget.h:52
 PDEFoamMultiTarget.h:53
 PDEFoamMultiTarget.h:54
 PDEFoamMultiTarget.h:55
 PDEFoamMultiTarget.h:56
 PDEFoamMultiTarget.h:57
 PDEFoamMultiTarget.h:58
 PDEFoamMultiTarget.h:59
 PDEFoamMultiTarget.h:60
 PDEFoamMultiTarget.h:61
 PDEFoamMultiTarget.h:62
 PDEFoamMultiTarget.h:63
 PDEFoamMultiTarget.h:64
 PDEFoamMultiTarget.h:65
 PDEFoamMultiTarget.h:66
 PDEFoamMultiTarget.h:67
 PDEFoamMultiTarget.h:68
 PDEFoamMultiTarget.h:69
 PDEFoamMultiTarget.h:70
 PDEFoamMultiTarget.h:71
 PDEFoamMultiTarget.h:72
 PDEFoamMultiTarget.h:73