ROOT logo

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Classes: PDEFoam                                                               *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Class for PDEFoam object                                                  *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      S. Jadach        - Institute of Nuclear Physics, Cracow, Poland           *
 *      Tancredi Carli   - CERN, Switzerland                                      *
 *      Dominik Dannheim - CERN, Switzerland                                      *
 *      Alexander Voigt  - 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_PDEFoam
#define ROOT_TMVA_PDEFoam

#include <iosfwd>
#include <cassert>

#ifndef ROOT_TH2D
#include "TH2D.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
#ifndef ROOT_TObjString
#include "TObjString.h"
#endif
#ifndef ROOT_TVectorT
#include "TVectorT.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TMVA_VariableInfo
#include "TMVA/VariableInfo.h"
#endif
#ifndef ROOT_TMVA_Timer
#include "TMVA/Timer.h"
#endif
#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TRandom3
#include "TRandom3.h"
#endif

namespace TMVA {
   class PDEFoamCell;
   class PDEFoamVect;
   class PDEFoamDistr;
   class PDEFoam;

   enum EFoamType { kSeparate, kDiscr, kMonoTarget, kMultiTarget };
}

#ifndef ROOT_TMVA_PDEFoamDistr
#include "TMVA/PDEFoamDistr.h"
#endif
#ifndef ROOT_TMVA_PDEFoamVect
#include "TMVA/PDEFoamVect.h"
#endif
#ifndef ROOT_TMVA_PDEFoamCell
#include "TMVA/PDEFoamCell.h"
#endif

namespace TMVA {
   enum EKernel { kNone=0, kGaus=1, kLinN=2 };
   enum ETargetSelection { kMean=0, kMpv=1 };
   enum ECellType { kAll, kActive, kInActive };

   // enum type for possible foam cell values
   // kNev           : number of events (saved in cell element 0)
   // kDiscriminator : discriminator (saved in cell element 0)
   // kDiscriminatorError : error on discriminator (saved in cell element 1)
   // kTarget0       : target 0 (saved in cell element 0)
   // kTargetError   : error on target 0 (saved in cell element 1)
   // kMeanValue     : mean sampling value (saved in fIntegral)
   // kRms           : rms of sampling distribution (saved in fDriver)
   // kRmsOvMean     : rms/mean of sampling distribution (saved in
   //                  fDriver and fIntegral)
   // kDensity       : number of events/cell volume
   enum ECellValue { kNev, kDiscriminator, kDiscriminatorError, kTarget0,
                     kTarget0Error, kMeanValue, kRms, kRmsOvMean, kDensity };
   // separation quantity to use (kFoam: use PDEFoam algorithm)
   enum EDTSeparation { kFoam, kGiniIndex, kMisClassificationError, 
			kCrossEntropy };
}

namespace TMVA {

   std::ostream& operator<< ( std::ostream& os, const PDEFoam& pdefoam );
   std::istream& operator>> ( std::istream& istr,     PDEFoam& pdefoam );

   class PDEFoam : public TObject {
   protected:
      // COMPONENTS //
      //-------------- Input parameters
      TString fName;             // Name of a given instance of the FOAM class
      Int_t   fDim;              // Dimension of the integration/simulation space
      Int_t   fNCells;           // Maximum number of cells
      //-------------------
      Int_t   fNBin;             // No. of bins in the edge histogram for cell MC exploration
      Int_t   fNSampl;           // No. of MC events, when dividing (exploring) cell
      Int_t   fEvPerBin;         // Maximum number of effective (wt=1) events per bin
      //-------------------  MULTI-BRANCHING ---------------------
      Int_t  *fMaskDiv;          //! [fDim] Dynamic Mask for cell division
      Int_t  *fInhiDiv;          //! [fDim] Flags for inhibiting cell division
      //-------------------  GEOMETRY ----------------------------
      Int_t   fNoAct;            // Number of active cells
      Int_t   fLastCe;           // Index of the last cell
      PDEFoamCell **fCells;      // [fNCells] Array of ALL cells
      //------------------ M.C. generation----------------------------
      TObjArray *fHistEdg;       // Histograms of wt, one for each cell edge
      Double_t *fRvec;           // [fDim] random number vector from r.n. generator fDim+1 maximum elements
      //----------- Procedures
      TRandom3        *fPseRan;  // Pointer to user-defined generator of pseudorandom numbers
      //----------  working space for CELL exploration -------------
      Double_t *fAlpha;          // [fDim] Internal parameters of the hyperrectangle
      // ---------  PDE-Foam specific variables
      EFoamType fFoamType;     // type of foam
      Double_t *fXmin;         // [fDim] minimum for variable transform
      Double_t *fXmax;         // [fDim] maximum for variable transform
      UInt_t fNElements;       // number of variables in every cell
      UInt_t fNmin;            // minimal number of events in cell to split cell
      UInt_t fMaxDepth;        // maximum depth of cell tree
      Float_t fVolFrac;        // volume fraction (with respect to total phase space
      Bool_t fFillFoamWithOrigWeights; // fill the foam with boost or orig. weights
      EDTSeparation fDTSeparation; // split cells according to decision tree logic
      Bool_t fPeekMax;         // peek up cell with max. driver integral for split
      PDEFoamDistr *fDistr;    //! distribution of training events
      Timer *fTimer;           // timer for graphical output
      TObjArray *fVariableNames;// collection of all variable names
      mutable MsgLogger* fLogger;                     //! message logger

      /////////////////////////////////////////////////////////////////
      //                            METHODS                          //
      /////////////////////////////////////////////////////////////////
   private:
      // Square function (fastest implementation)
      template<typename T> T Sqr(T x) const { return x*x; }
      PDEFoamDistr* GetDistr() const { assert(fDistr); return fDistr; }

   protected:
      // ---------- TMVA console output

      void OutputGrow(Bool_t finished = false ); // nice TMVA console output

      // ---------- Weighting functions for kernels

      Float_t WeightGaus(PDEFoamCell*, std::vector<Float_t>&, UInt_t dim=0);

      Double_t WeightLinNeighbors( std::vector<Float_t> &txvec, ECellValue cv, 
                                   Int_t dim1=-1, Int_t dim2=-1, 
                                   Bool_t TreatEmptyCells=kFALSE );
      
      // ---------- Foam build-up functions

      // Internal foam initialization functions
      void InitCells();                   // Initialisation of all foam cells
      Int_t CellFill(Int_t, PDEFoamCell*);// Allocates new empty cell and return its index
      void Explore(PDEFoamCell *Cell);    // Exploration of the new cell, determine <wt>, wtMax etc.
      void DTExplore(PDEFoamCell *Cell);  // Exploration of the new cell according to decision tree logic
      void Varedu(Double_t [], Int_t&, Double_t&,Double_t&); // Determines the best edge, variace reduction
      void MakeAlpha();             // Provides random point inside hyperrectangle
      void Grow();                  // build up foam
      Long_t PeekMax();             // peek cell with max. driver integral
      Long_t PeekLast();            // peek last created cell
      Int_t  Divide(PDEFoamCell *); // Divide iCell into two daughters; iCell retained, taged as inactive
      Double_t Eval(Double_t *xRand, Double_t &event_density); // evaluate distribution on point 'xRand'
      Float_t GetSeparation(Float_t s, Float_t b); // calculate separation

      // ---------- Cell value access functions

      // low level functions to access a certain cell value
      Double_t GetCellElement(PDEFoamCell *cell, UInt_t i);  // get Element 'i' in cell 'cell'
      void SetCellElement(PDEFoamCell *cell, UInt_t i, Double_t value); // set Element 'i' in cell 'cell' to value 'value'

      // helper functions to access cell data
      Double_t GetCellValue(PDEFoamCell*, ECellValue);

      // specific function used during evaluation; determines, whether a cell value is undefined
      Bool_t   CellValueIsUndefined( PDEFoamCell* );

      // finds cell according to given event variables
      PDEFoamCell* FindCell(std::vector<Float_t>&); //!
      std::vector<TMVA::PDEFoamCell*> FindCells(std::vector<Float_t>&); //!

      // find cells, which fit a given event vector
      void FindCellsRecursive(std::vector<Float_t>&, PDEFoamCell*, 
                              std::vector<PDEFoamCell*> &);
      
      // calculates the mean/ mpv target values for a given event 'tvals'
      std::vector<Float_t> GetCellTargets( std::vector<Float_t> &tvals, ETargetSelection ts );
      // get number of events in cell during foam build-up
      Double_t GetBuildUpCellEvents(PDEFoamCell* cell);
      
      PDEFoam(const PDEFoam&);    // Copy Constructor  NOT USED

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

      // ---------- Foam creation functions

      void Init();                    // initialize PDEFoamDistr
      void FillBinarySearchTree( const Event* ev, Bool_t NoNegWeights=kFALSE );
      void Create();              // build-up foam

      // function to fill created cell with given value
      void FillFoamCells(const Event* ev, Bool_t NoNegWeights=kFALSE);

      // functions to calc discriminators/ mean targets for every cell
      // using filled cell values
      void CalcCellDiscr();
      void CalcCellTarget();

      // init TObject pointer on cells
      void ResetCellElements(Bool_t allcells = false);

      // ---------- Getters and Setters

      void SetDim(Int_t kDim); // Sets dimension of cubical space
      void SetnCells(Long_t nCells){fNCells =nCells;}  // Sets maximum number of cells
      void SetnSampl(Long_t nSampl){fNSampl =nSampl;}  // Sets no of MC events in cell exploration
      void SetnBin(Int_t nBin){fNBin = nBin;}          // Sets no of bins in histogs in cell exploration
      void SetEvPerBin(Int_t EvPerBin){fEvPerBin =EvPerBin;} // Sets max. no. of effective events per bin
      void SetInhiDiv(Int_t, Int_t ); // Set inhibition of cell division along certain edge
      void SetNElements(UInt_t numb){fNElements = numb;} // init every cell element (TVectorD*)
      void SetVolumeFraction(Float_t vfr){fVolFrac = vfr;} // set VolFrac
      void SetFoamType(EFoamType ft);   // set foam type
      void SetFillFoamWithOrigWeights(Bool_t new_val){fFillFoamWithOrigWeights=new_val;}
      void SetDTSeparation(EDTSeparation new_val){fDTSeparation=new_val;}
      void SetPeekMax(Bool_t new_val){ fPeekMax = new_val; }

      // coverity[ -tainted_data_return ]
      Int_t    GetTotDim()    const {return fDim;  } // Get total dimension
      TString  GetFoamName()  const {return fName; } // Get name of foam
      UInt_t   GetNElements() const {return fNElements; } // returns number of elements, saved on every cell
      Float_t  GetVolumeFraction() const {return fVolFrac;} // get VolFrac from PDEFoam
      EFoamType GetFoamType()      const {return fFoamType;}; // get foam type
      UInt_t   GetNActiveCells()   const {return fNoAct;}; // returns number of active cells
      UInt_t   GetNInActiveCells() const {return GetNCells()-GetNActiveCells();}; // returns number of not active cells
      UInt_t   GetNCells()         const {return fNCells;};   // returns number of cells
      PDEFoamCell* GetRootCell()   const {return fCells[0];}; // get pointer to root cell

      // Getters and Setters for user cut options
      void     SetNmin(UInt_t val)     { fNmin=val;      }
      UInt_t   GetNmin()               { return fNmin;   }
      Bool_t   GetFillFoamWithOrigWeights() const { return fFillFoamWithOrigWeights; }
      void     SetMaxDepth(UInt_t maxdepth) { fMaxDepth = maxdepth; }
      UInt_t   GetMaxDepth() const { return fMaxDepth; }

      // Getters and Setters for foam boundaries
      void SetXmin(Int_t idim, Double_t wmin);
      void SetXmax(Int_t idim, Double_t wmax);
      Double_t GetXmin(Int_t idim) const {return fXmin[idim];}
      Double_t GetXmax(Int_t idim) const {return fXmax[idim];}

      // Getters and Setters for variable names
      void AddVariableName(const char *s) { AddVariableName(new TObjString(s)); }
      void AddVariableName(TObjString *s) { fVariableNames->Add(s); }
      TObjString* GetVariableName(Int_t idx) {return dynamic_cast<TObjString*>(fVariableNames->At(idx));}

      // Delete the fDistr object, which contains the binary search
      // tree
      void DeleteBinarySearchTree();

      // ---------- Transformation functions for event variables into foam boundaries
      // reason: foam allways has boundaries [0, 1]

      Float_t VarTransform(Int_t idim, Float_t x) const; // transform [xmin, xmax] --> [0, 1]
      std::vector<Float_t> VarTransform(std::vector<Float_t> &invec) const;
      Float_t VarTransformInvers(Int_t idim, Float_t x) const; // transform [0, 1] --> [xmin, xmax]
      std::vector<Float_t> VarTransformInvers(std::vector<Float_t> &invec) const;

      // ---------- Debug functions

      void     CheckAll(Int_t);  // Checks correctness of the entire data structure in the FOAM object
      void     PrintCell(Long_t iCell=0); // Print content of cell
      void     PrintCells();     // Prints content of all cells
      void     CheckCells(Bool_t remove_empty_cells=false);   // check all cells with respect to critical values
      void     RemoveEmptyCell(Int_t iCell); // removes iCell if its volume is zero
      void     PrintCellElements();          // print all cells with its elements

      // Message logger
      MsgLogger& Log() const { return *fLogger; }

      // ---------- Foam output

      friend std::ostream& operator<< ( std::ostream& os, const PDEFoam& pdefoam );
      friend std::istream& operator>> ( std::istream& istr,     PDEFoam& pdefoam );

      void ReadStream(istream &);         // read  foam from stream
      void PrintStream(ostream  &) const; // write foam from stream
      void ReadXML( void* parent );       // read  foam variables from xml
      void AddXMLTo( void* parent );      // write foam variables to xml

      // ---------- Foam projection methods

      // project foam to two-dimensional histogram
      TH2D* Project2(Int_t idim1, Int_t idim2, const char *opt="cell_value", 
                     const char *ker="kNone", UInt_t maxbins=50);

      // helper function for Project2()
      Double_t GetProjectionCellValue( PDEFoamCell* cell,
                                       Int_t idim1, Int_t idim2, ECellValue cv );

      // Project one-dimensional foam to a 1-dim histogram
      TH1D* Draw1Dim(const char *opt, Int_t nbin);

      // Generates C++ code (root macro) for drawing foam with boxes (only 2-dim!)
      void RootPlot2dim( const TString& filename, TString opt,
                         Bool_t CreateCanvas = kTRUE, Bool_t colors = kTRUE,
                         Bool_t log_colors = kFALSE  );

      // ---------- Foam evaluation functions

      // get cell value for a given event
      Double_t GetCellValue(std::vector<Float_t>&, ECellValue);

      // helper functions to access cell data with kernel
      Double_t GetCellDiscr(std::vector<Float_t> &xvec, EKernel kernel=kNone);
      Double_t GetCellDensity(std::vector<Float_t> &xvec, EKernel kernel=kNone);

      // calc mean cell value of neighbor cells
      Double_t GetAverageNeighborsValue(std::vector<Float_t> &txvec, ECellValue cv);

      // returns regression value (mono target regression)
      Double_t GetCellRegValue0(std::vector<Float_t>&, EKernel kernel=kNone);

      // returns regression value i, given all variables (multi target regression)
      std::vector<Float_t> GetProjectedRegValue(std::vector<Float_t> &vals, EKernel kernel=kNone, ETargetSelection ts=kMean);

      // ---------- ROOT class definition
      ClassDef(PDEFoam,5) // Tree of PDEFoamCells
   }; // end of PDEFoam

}  // namespace TMVA

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

//_____________________________________________________________________
inline Float_t TMVA::PDEFoam::VarTransform(Int_t idim, Float_t x) const
{
   // transform variable x from [xmin, xmax] --> [0, 1]
   return (x-fXmin[idim])/(fXmax[idim]-fXmin[idim]);
}

//_____________________________________________________________________
inline std::vector<Float_t> TMVA::PDEFoam::VarTransform(std::vector<Float_t> &invec) const
{
   // transform vector invec from [xmin, xmax] --> [0, 1]
   std::vector<Float_t> outvec;
   for(UInt_t i=0; i<invec.size(); i++)
      outvec.push_back(VarTransform(i, invec.at(i)));
   return outvec;
}

//_____________________________________________________________________
inline Float_t TMVA::PDEFoam::VarTransformInvers(Int_t idim, Float_t x) const
{
   // transform variable x from [0, 1] --> [xmin, xmax]
   return x*(fXmax[idim]-fXmin[idim]) + fXmin[idim];
}

//_____________________________________________________________________
inline std::vector<Float_t> TMVA::PDEFoam::VarTransformInvers(std::vector<Float_t> &invec) const
{
   // transform vector invec from [0, 1] --> [xmin, xmax]
   std::vector<Float_t> outvec;
   for(UInt_t i=0; i<invec.size(); i++)
      outvec.push_back(VarTransformInvers(i, invec.at(i)));
   return outvec;
}

#endif
 PDEFoam.h:1
 PDEFoam.h:2
 PDEFoam.h:3
 PDEFoam.h:4
 PDEFoam.h:5
 PDEFoam.h:6
 PDEFoam.h:7
 PDEFoam.h:8
 PDEFoam.h:9
 PDEFoam.h:10
 PDEFoam.h:11
 PDEFoam.h:12
 PDEFoam.h:13
 PDEFoam.h:14
 PDEFoam.h:15
 PDEFoam.h:16
 PDEFoam.h:17
 PDEFoam.h:18
 PDEFoam.h:19
 PDEFoam.h:20
 PDEFoam.h:21
 PDEFoam.h:22
 PDEFoam.h:23
 PDEFoam.h:24
 PDEFoam.h:25
 PDEFoam.h:26
 PDEFoam.h:27
 PDEFoam.h:28
 PDEFoam.h:29
 PDEFoam.h:30
 PDEFoam.h:31
 PDEFoam.h:32
 PDEFoam.h:33
 PDEFoam.h:34
 PDEFoam.h:35
 PDEFoam.h:36
 PDEFoam.h:37
 PDEFoam.h:38
 PDEFoam.h:39
 PDEFoam.h:40
 PDEFoam.h:41
 PDEFoam.h:42
 PDEFoam.h:43
 PDEFoam.h:44
 PDEFoam.h:45
 PDEFoam.h:46
 PDEFoam.h:47
 PDEFoam.h:48
 PDEFoam.h:49
 PDEFoam.h:50
 PDEFoam.h:51
 PDEFoam.h:52
 PDEFoam.h:53
 PDEFoam.h:54
 PDEFoam.h:55
 PDEFoam.h:56
 PDEFoam.h:57
 PDEFoam.h:58
 PDEFoam.h:59
 PDEFoam.h:60
 PDEFoam.h:61
 PDEFoam.h:62
 PDEFoam.h:63
 PDEFoam.h:64
 PDEFoam.h:65
 PDEFoam.h:66
 PDEFoam.h:67
 PDEFoam.h:68
 PDEFoam.h:69
 PDEFoam.h:70
 PDEFoam.h:71
 PDEFoam.h:72
 PDEFoam.h:73
 PDEFoam.h:74
 PDEFoam.h:75
 PDEFoam.h:76
 PDEFoam.h:77
 PDEFoam.h:78
 PDEFoam.h:79
 PDEFoam.h:80
 PDEFoam.h:81
 PDEFoam.h:82
 PDEFoam.h:83
 PDEFoam.h:84
 PDEFoam.h:85
 PDEFoam.h:86
 PDEFoam.h:87
 PDEFoam.h:88
 PDEFoam.h:89
 PDEFoam.h:90
 PDEFoam.h:91
 PDEFoam.h:92
 PDEFoam.h:93
 PDEFoam.h:94
 PDEFoam.h:95
 PDEFoam.h:96
 PDEFoam.h:97
 PDEFoam.h:98
 PDEFoam.h:99
 PDEFoam.h:100
 PDEFoam.h:101
 PDEFoam.h:102
 PDEFoam.h:103
 PDEFoam.h:104
 PDEFoam.h:105
 PDEFoam.h:106
 PDEFoam.h:107
 PDEFoam.h:108
 PDEFoam.h:109
 PDEFoam.h:110
 PDEFoam.h:111
 PDEFoam.h:112
 PDEFoam.h:113
 PDEFoam.h:114
 PDEFoam.h:115
 PDEFoam.h:116
 PDEFoam.h:117
 PDEFoam.h:118
 PDEFoam.h:119
 PDEFoam.h:120
 PDEFoam.h:121
 PDEFoam.h:122
 PDEFoam.h:123
 PDEFoam.h:124
 PDEFoam.h:125
 PDEFoam.h:126
 PDEFoam.h:127
 PDEFoam.h:128
 PDEFoam.h:129
 PDEFoam.h:130
 PDEFoam.h:131
 PDEFoam.h:132
 PDEFoam.h:133
 PDEFoam.h:134
 PDEFoam.h:135
 PDEFoam.h:136
 PDEFoam.h:137
 PDEFoam.h:138
 PDEFoam.h:139
 PDEFoam.h:140
 PDEFoam.h:141
 PDEFoam.h:142
 PDEFoam.h:143
 PDEFoam.h:144
 PDEFoam.h:145
 PDEFoam.h:146
 PDEFoam.h:147
 PDEFoam.h:148
 PDEFoam.h:149
 PDEFoam.h:150
 PDEFoam.h:151
 PDEFoam.h:152
 PDEFoam.h:153
 PDEFoam.h:154
 PDEFoam.h:155
 PDEFoam.h:156
 PDEFoam.h:157
 PDEFoam.h:158
 PDEFoam.h:159
 PDEFoam.h:160
 PDEFoam.h:161
 PDEFoam.h:162
 PDEFoam.h:163
 PDEFoam.h:164
 PDEFoam.h:165
 PDEFoam.h:166
 PDEFoam.h:167
 PDEFoam.h:168
 PDEFoam.h:169
 PDEFoam.h:170
 PDEFoam.h:171
 PDEFoam.h:172
 PDEFoam.h:173
 PDEFoam.h:174
 PDEFoam.h:175
 PDEFoam.h:176
 PDEFoam.h:177
 PDEFoam.h:178
 PDEFoam.h:179
 PDEFoam.h:180
 PDEFoam.h:181
 PDEFoam.h:182
 PDEFoam.h:183
 PDEFoam.h:184
 PDEFoam.h:185
 PDEFoam.h:186
 PDEFoam.h:187
 PDEFoam.h:188
 PDEFoam.h:189
 PDEFoam.h:190
 PDEFoam.h:191
 PDEFoam.h:192
 PDEFoam.h:193
 PDEFoam.h:194
 PDEFoam.h:195
 PDEFoam.h:196
 PDEFoam.h:197
 PDEFoam.h:198
 PDEFoam.h:199
 PDEFoam.h:200
 PDEFoam.h:201
 PDEFoam.h:202
 PDEFoam.h:203
 PDEFoam.h:204
 PDEFoam.h:205
 PDEFoam.h:206
 PDEFoam.h:207
 PDEFoam.h:208
 PDEFoam.h:209
 PDEFoam.h:210
 PDEFoam.h:211
 PDEFoam.h:212
 PDEFoam.h:213
 PDEFoam.h:214
 PDEFoam.h:215
 PDEFoam.h:216
 PDEFoam.h:217
 PDEFoam.h:218
 PDEFoam.h:219
 PDEFoam.h:220
 PDEFoam.h:221
 PDEFoam.h:222
 PDEFoam.h:223
 PDEFoam.h:224
 PDEFoam.h:225
 PDEFoam.h:226
 PDEFoam.h:227
 PDEFoam.h:228
 PDEFoam.h:229
 PDEFoam.h:230
 PDEFoam.h:231
 PDEFoam.h:232
 PDEFoam.h:233
 PDEFoam.h:234
 PDEFoam.h:235
 PDEFoam.h:236
 PDEFoam.h:237
 PDEFoam.h:238
 PDEFoam.h:239
 PDEFoam.h:240
 PDEFoam.h:241
 PDEFoam.h:242
 PDEFoam.h:243
 PDEFoam.h:244
 PDEFoam.h:245
 PDEFoam.h:246
 PDEFoam.h:247
 PDEFoam.h:248
 PDEFoam.h:249
 PDEFoam.h:250
 PDEFoam.h:251
 PDEFoam.h:252
 PDEFoam.h:253
 PDEFoam.h:254
 PDEFoam.h:255
 PDEFoam.h:256
 PDEFoam.h:257
 PDEFoam.h:258
 PDEFoam.h:259
 PDEFoam.h:260
 PDEFoam.h:261
 PDEFoam.h:262
 PDEFoam.h:263
 PDEFoam.h:264
 PDEFoam.h:265
 PDEFoam.h:266
 PDEFoam.h:267
 PDEFoam.h:268
 PDEFoam.h:269
 PDEFoam.h:270
 PDEFoam.h:271
 PDEFoam.h:272
 PDEFoam.h:273
 PDEFoam.h:274
 PDEFoam.h:275
 PDEFoam.h:276
 PDEFoam.h:277
 PDEFoam.h:278
 PDEFoam.h:279
 PDEFoam.h:280
 PDEFoam.h:281
 PDEFoam.h:282
 PDEFoam.h:283
 PDEFoam.h:284
 PDEFoam.h:285
 PDEFoam.h:286
 PDEFoam.h:287
 PDEFoam.h:288
 PDEFoam.h:289
 PDEFoam.h:290
 PDEFoam.h:291
 PDEFoam.h:292
 PDEFoam.h:293
 PDEFoam.h:294
 PDEFoam.h:295
 PDEFoam.h:296
 PDEFoam.h:297
 PDEFoam.h:298
 PDEFoam.h:299
 PDEFoam.h:300
 PDEFoam.h:301
 PDEFoam.h:302
 PDEFoam.h:303
 PDEFoam.h:304
 PDEFoam.h:305
 PDEFoam.h:306
 PDEFoam.h:307
 PDEFoam.h:308
 PDEFoam.h:309
 PDEFoam.h:310
 PDEFoam.h:311
 PDEFoam.h:312
 PDEFoam.h:313
 PDEFoam.h:314
 PDEFoam.h:315
 PDEFoam.h:316
 PDEFoam.h:317
 PDEFoam.h:318
 PDEFoam.h:319
 PDEFoam.h:320
 PDEFoam.h:321
 PDEFoam.h:322
 PDEFoam.h:323
 PDEFoam.h:324
 PDEFoam.h:325
 PDEFoam.h:326
 PDEFoam.h:327
 PDEFoam.h:328
 PDEFoam.h:329
 PDEFoam.h:330
 PDEFoam.h:331
 PDEFoam.h:332
 PDEFoam.h:333
 PDEFoam.h:334
 PDEFoam.h:335
 PDEFoam.h:336
 PDEFoam.h:337
 PDEFoam.h:338
 PDEFoam.h:339
 PDEFoam.h:340
 PDEFoam.h:341
 PDEFoam.h:342
 PDEFoam.h:343
 PDEFoam.h:344
 PDEFoam.h:345
 PDEFoam.h:346
 PDEFoam.h:347
 PDEFoam.h:348
 PDEFoam.h:349
 PDEFoam.h:350
 PDEFoam.h:351
 PDEFoam.h:352
 PDEFoam.h:353
 PDEFoam.h:354
 PDEFoam.h:355
 PDEFoam.h:356
 PDEFoam.h:357
 PDEFoam.h:358
 PDEFoam.h:359
 PDEFoam.h:360
 PDEFoam.h:361
 PDEFoam.h:362
 PDEFoam.h:363
 PDEFoam.h:364
 PDEFoam.h:365
 PDEFoam.h:366
 PDEFoam.h:367
 PDEFoam.h:368
 PDEFoam.h:369
 PDEFoam.h:370
 PDEFoam.h:371
 PDEFoam.h:372
 PDEFoam.h:373
 PDEFoam.h:374
 PDEFoam.h:375
 PDEFoam.h:376
 PDEFoam.h:377
 PDEFoam.h:378
 PDEFoam.h:379
 PDEFoam.h:380
 PDEFoam.h:381
 PDEFoam.h:382
 PDEFoam.h:383
 PDEFoam.h:384
 PDEFoam.h:385
 PDEFoam.h:386
 PDEFoam.h:387
 PDEFoam.h:388
 PDEFoam.h:389
 PDEFoam.h:390
 PDEFoam.h:391