ROOT logo

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Classes: PDEFoamDistr                                                          *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Class PDEFoamDistr is an Abstract class representing                      *
 *      n-dimensional real positive integrand function                            *
 *      The main function is Density() which provides the event density at a      *
 *      given point during the foam build-up (sampling).                          *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Tancredi Carli   - CERN, Switzerland                                      *
 *      Dominik Dannheim - CERN, Switzerland                                      *
 *      S. Jadach        - Institute of Nuclear Physics, Cracow, Poland           *
 *      Alexander Voigt  - CERN, Switzerland                                      *
 *      Peter Speckmayer - CERN, Switzerland                                      *
 *                                                                                *
 * Copyright (c) 2008:                                                            *
 *      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_PDEFoamDistr
#define ROOT_TMVA_PDEFoamDistr

#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TH1D
#include "TH1D.h"
#endif
#ifndef ROOT_TH2D
#include "TH2D.h"
#endif

#ifndef ROOT_TMVA_BinarySearchTree
#include "TMVA/BinarySearchTree.h"
#endif
#ifndef ROOT_TMVA_Event
#include "TMVA/Event.h"
#endif
#ifndef ROOT_TMVA_PDEFoam
#include "TMVA/PDEFoam.h"
#endif
#ifndef ROOT_TMVA_PDEFoamCell
#include "TMVA/PDEFoamCell.h"
#endif
#ifndef ROOT_TMVA_MsgLogger
#include "TMVA/MsgLogger.h"
#endif

namespace TMVA {
   // options for filling density (used in Density() to build up foam)
   // kEVENT_DENSITY : use event density for foam buildup
   // kDISCRIMINATOR : use N_sig/(N_sig + N_bg) for foam buildup
   // kTARGET        : use GetTarget(0) for foam build up
   enum TDensityCalc { kEVENT_DENSITY, kDISCRIMINATOR, kTARGET };
}

namespace TMVA {

   // class definition of underlying density
   class PDEFoamDistr : public ::TObject  {

   private:
      const PDEFoam *fPDEFoam;  // PDEFoam to refer to
      BinarySearchTree *fBst;   // Binary tree to find events within a volume
      TDensityCalc fDensityCalc;// method of density calculation

   protected:
      mutable MsgLogger* fLogger;                     //! message logger
      MsgLogger& Log() const { return *fLogger; }

   public:
      PDEFoamDistr();
      PDEFoamDistr(const PDEFoamDistr&);
      virtual ~PDEFoamDistr();

      // density build-up functions
      void Initialize(); // create and initialize binary search tree
      void FillBinarySearchTree( const Event* ev, EFoamType ft, Bool_t NoNegWeights=kFALSE );

      // main function used by PDEFoam
      // returns density at a given point by range searching in BST
      Double_t Density(Double_t *Xarg, Double_t &event_density);

      // Return fDim histograms with signal and bg events
      void FillHist(PDEFoamCell* cell, std::vector<TH1F*>&, std::vector<TH1F*>&, 
		    std::vector<TH1F*>&, std::vector<TH1F*>&);

      // Getter and setter for the fPDEFoam pointer
      void SetPDEFoam(const PDEFoam *foam){ fPDEFoam = foam; }
      const PDEFoam* GetPDEFoam() const { return fPDEFoam; };

      // Getters and setters for foam filling method
      void SetDensityCalc( TDensityCalc dc ){ fDensityCalc = dc; };
      Bool_t FillDiscriminator(){ return fDensityCalc == kDISCRIMINATOR; }
      Bool_t FillTarget0()      { return fDensityCalc == kTARGET;        }
      Bool_t FillEventDensity() { return fDensityCalc == kEVENT_DENSITY; }

      ClassDef(PDEFoamDistr,3) //Class for Event density
   };  //end of PDEFoamDistr

}  // namespace TMVA

#endif
 PDEFoamDistr.h:1
 PDEFoamDistr.h:2
 PDEFoamDistr.h:3
 PDEFoamDistr.h:4
 PDEFoamDistr.h:5
 PDEFoamDistr.h:6
 PDEFoamDistr.h:7
 PDEFoamDistr.h:8
 PDEFoamDistr.h:9
 PDEFoamDistr.h:10
 PDEFoamDistr.h:11
 PDEFoamDistr.h:12
 PDEFoamDistr.h:13
 PDEFoamDistr.h:14
 PDEFoamDistr.h:15
 PDEFoamDistr.h:16
 PDEFoamDistr.h:17
 PDEFoamDistr.h:18
 PDEFoamDistr.h:19
 PDEFoamDistr.h:20
 PDEFoamDistr.h:21
 PDEFoamDistr.h:22
 PDEFoamDistr.h:23
 PDEFoamDistr.h:24
 PDEFoamDistr.h:25
 PDEFoamDistr.h:26
 PDEFoamDistr.h:27
 PDEFoamDistr.h:28
 PDEFoamDistr.h:29
 PDEFoamDistr.h:30
 PDEFoamDistr.h:31
 PDEFoamDistr.h:32
 PDEFoamDistr.h:33
 PDEFoamDistr.h:34
 PDEFoamDistr.h:35
 PDEFoamDistr.h:36
 PDEFoamDistr.h:37
 PDEFoamDistr.h:38
 PDEFoamDistr.h:39
 PDEFoamDistr.h:40
 PDEFoamDistr.h:41
 PDEFoamDistr.h:42
 PDEFoamDistr.h:43
 PDEFoamDistr.h:44
 PDEFoamDistr.h:45
 PDEFoamDistr.h:46
 PDEFoamDistr.h:47
 PDEFoamDistr.h:48
 PDEFoamDistr.h:49
 PDEFoamDistr.h:50
 PDEFoamDistr.h:51
 PDEFoamDistr.h:52
 PDEFoamDistr.h:53
 PDEFoamDistr.h:54
 PDEFoamDistr.h:55
 PDEFoamDistr.h:56
 PDEFoamDistr.h:57
 PDEFoamDistr.h:58
 PDEFoamDistr.h:59
 PDEFoamDistr.h:60
 PDEFoamDistr.h:61
 PDEFoamDistr.h:62
 PDEFoamDistr.h:63
 PDEFoamDistr.h:64
 PDEFoamDistr.h:65
 PDEFoamDistr.h:66
 PDEFoamDistr.h:67
 PDEFoamDistr.h:68
 PDEFoamDistr.h:69
 PDEFoamDistr.h:70
 PDEFoamDistr.h:71
 PDEFoamDistr.h:72
 PDEFoamDistr.h:73
 PDEFoamDistr.h:74
 PDEFoamDistr.h:75
 PDEFoamDistr.h:76
 PDEFoamDistr.h:77
 PDEFoamDistr.h:78
 PDEFoamDistr.h:79
 PDEFoamDistr.h:80
 PDEFoamDistr.h:81
 PDEFoamDistr.h:82
 PDEFoamDistr.h:83
 PDEFoamDistr.h:84
 PDEFoamDistr.h:85
 PDEFoamDistr.h:86
 PDEFoamDistr.h:87
 PDEFoamDistr.h:88
 PDEFoamDistr.h:89
 PDEFoamDistr.h:90
 PDEFoamDistr.h:91
 PDEFoamDistr.h:92
 PDEFoamDistr.h:93
 PDEFoamDistr.h:94
 PDEFoamDistr.h:95
 PDEFoamDistr.h:96
 PDEFoamDistr.h:97
 PDEFoamDistr.h:98
 PDEFoamDistr.h:99
 PDEFoamDistr.h:100
 PDEFoamDistr.h:101
 PDEFoamDistr.h:102
 PDEFoamDistr.h:103
 PDEFoamDistr.h:104
 PDEFoamDistr.h:105
 PDEFoamDistr.h:106
 PDEFoamDistr.h:107
 PDEFoamDistr.h:108
 PDEFoamDistr.h:109
 PDEFoamDistr.h:110
 PDEFoamDistr.h:111
 PDEFoamDistr.h:112
 PDEFoamDistr.h:113