ROOT logo
// @(#)root/tmva $Id: MethodCategory.h 36966 2010-11-26 09:50:13Z evt $
// Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss,Or Cohen

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : MethodCompositeBase                                                   *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Virtual base class for all MVA method                                     *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Andreas Hoecker    <Andreas.Hocker@cern.ch> - CERN, Switzerland           *
 *      Joerg Stelzer      <Joerg.Stelzer@cern.ch>  - CERN, Switzerland           *
 *      Peter Speckmayer   <Peter.Speckmayer@cern.ch> - CERN, Switzerland         *
 *      Helge Voss         <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany   *
 *      Eckhard v. Toerne  <evt@uni-bonn.de>        - U of Bonn, Germany          *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         *
 *      U. of Victoria, Canada                                                    *
 *      MPI-K Heidelberg, Germany                                                 *
 *      LAPP, Annecy, France                                                      *
 *                                                                                *
 * 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_MethodCategory
#define ROOT_TMVA_MethodCategory

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// MethodCategory                                                       //
//                                                                      //
// Class for categorizing the phase space                               //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <iosfwd>
#include <vector>

#ifndef ROOT_TMVA_MethodBase
#include "TMVA/MethodBase.h"
#endif

#ifndef ROOT_TMVA_MethodCompositeBase
#include "TMVA/MethodCompositeBase.h"
#endif

namespace TMVA {

   class Factory;  // DSMTEST
   class Reader;   // DSMTEST
   class MethodBoost;   // DSMTEST
   class DataSetManager;  // DSMTEST

   class MethodCategory : public MethodCompositeBase {

   public :

      // constructors
      MethodCategory( const TString& jobName,
                      const TString& methodTitle,
                      DataSetInfo& theData,
                      const TString& theOption = "",
                      TDirectory* theTargetDir = NULL );

      MethodCategory( DataSetInfo& dsi,
                      const TString& theWeightFile,
                      TDirectory* theTargetDir = NULL );

      virtual ~MethodCategory( void );

      virtual Bool_t HasAnalysisType( Types::EAnalysisType type, UInt_t numberClasses, UInt_t /*numberTargets*/ );
      // training and boosting all the classifiers
      void Train( void );

      // ranking of input variables
      const Ranking* CreateRanking();

      // saves the name and options string of the boosted classifier
      TMVA::IMethod* AddMethod(const TCut&,
                               const TString& theVariables,
                               Types::EMVA theMethod,
                               const TString& theTitle,
                               const TString& theOptions);

      void AddWeightsXMLTo( void* parent ) const;
      void ReadWeightsFromXML( void* wghtnode );

      Double_t GetMvaValue( Double_t* err=0, Double_t* errUpper = 0 );

      virtual void MakeClass( const TString& = TString("") ) const {};

   private :

      // initializing mostly monitoring tools of the category process
      void Init();

      // the option handling methods
      void DeclareOptions();
      void ProcessOptions();

      // build the cut formula for event categorization
      Bool_t PassesCut( const Event* ev, UInt_t methodIdx );

   protected:

      // vectors that contain the added methods and the cuts on which they are to be called
      std::vector<IMethod*>               fMethods;
      std::vector<TCut>                   fCategoryCuts;
      std::vector<UInt_t>                 fCategorySpecIdx;
      std::vector<TString>                fVars;
      std::vector <std::vector <UInt_t> > fVarMaps;

      // get help message text
      void GetHelpMessage() const;

      TMVA::DataSetInfo& CreateCategoryDSI(const TCut&, const TString&, const TString&);

   private:

      void InitCircularTree(const DataSetInfo& dsi);

      TTree *                    fCatTree; //! needed in conjunction with TTreeFormulas for evaluation category expressions
      std::vector<TTreeFormula*> fCatFormulas;

      DataSetManager* fDataSetManager; // DSMTEST
      friend class Factory; // DSMTEST
      friend class Reader;  // DSMTEST
      friend class MethodBoost;  // DSMTEST

      ClassDef(MethodCategory,0)
   };
}

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