ROOT logo
// @(#)root/tmva $Id: Reader.h 29195 2009-06-24 10:39:49Z brun $ 
// Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss 

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : Reader                                                                *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Reader class to be used in the user application to interpret the trained  *
 *      MVAs in an analysis context                                               *
 *                                                                                *
 * Authors (alphabetical order):                                                  *
 *      Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland              *
 *      Peter Speckmayer <peter.speckmayer@cern.ch> - CERN, Switzerland           *
 *      Joerg Stelzer <Joerg.Stelzer@cern.ch>    - CERN, Switzerland              *
 *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
 *      Kai Voss        <Kai.Voss@cern.ch>       - U. of Victoria, Canada         *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         * 
 *      U. of Victoria, Canada                                                    * 
 *      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://ttmva.sourceforge.net/LICENSE)                                         *
 **********************************************************************************/

#ifndef ROOT_TMVA_Reader
#define ROOT_TMVA_Reader

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Reader                                                               //
//                                                                      //
// Reader class to be used in the user application to interpret the     //
// trained MVAs in an analysis context                                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TMVA_Configurable
#include "TMVA/Configurable.h"
#endif
#ifndef ROOT_TMVA_Types
#include "TMVA/Types.h"
#endif
#ifndef ROOT_TMVA_DataSetInfo
#include "TMVA/DataSetInfo.h"
#endif
#ifndef ROOT_TMVA_DataInputHandler
#include "TMVA/DataInputHandler.h"
#endif
#ifndef ROOT_TMVA_DataSetManager
#include "TMVA/DataSetManager.h"
#endif

#include <vector>
#include <map>
#include <stdexcept>

namespace TMVA {

   class IMethod;
   class MethodBase;
   class DataSetInfo;
   class MethodCuts;

   class Reader : public Configurable {

   public:
      
      // without prior specification of variables
      Reader( const TString& theOption="", Bool_t verbose = 0 );

      // STL types
      Reader( std::vector<std::string>& varNames, const TString& theOption = "", Bool_t verbose = 0 );
      Reader( const std::string& varNames, const TString& theOption, Bool_t verbose = 0 );  // format: "var1:var2:..."

      // Root types
      Reader( std::vector<TString>& varNames, const TString& theOption = "", Bool_t verbose = 0 );
      Reader( const TString& varNames, const TString& theOption, Bool_t verbose = 0 );  // format: "var1:var2:..."

      virtual ~Reader( void );
  
      // book MVA method via weight file
      IMethod* BookMVA( const TString& methodTag, const TString& weightfile );
      IMethod* FindMVA( const TString& methodTag );
      // special function for Cuts to avoid dynamic_casts in ROOT macros, 
      // which are not properly handled by CINT
      MethodCuts* FindCutsMVA( const TString& methodTag ); 
      

      // returns the MVA response for given event
      Double_t EvaluateMVA( const std::vector<Float_t> &, const TString& methodTag, Double_t aux = 0 );    
      Double_t EvaluateMVA( const std::vector<Double_t>&, const TString& methodTag, Double_t aux = 0 );    
      Double_t EvaluateMVA( MethodBase* method,           Double_t aux = 0 );    
      Double_t EvaluateMVA( const TString& methodTag,     Double_t aux = 0 );    

      // returns error on MVA response for given event
      // NOTE: must be called AFTER "EvaluateMVA(...)" call !
      Double_t GetMVAError() const { return fMvaEventError; }

      const std::vector< Float_t >& EvaluateRegression( const TString& methodTag, Double_t aux = 0 );
      const std::vector< Float_t >& EvaluateRegression( MethodBase* method, Double_t aux = 0 );
      Float_t  EvaluateRegression( UInt_t tgtNumber, const TString& methodTag, Double_t aux = 0 );

      // probability and rarity accessors (see Users Guide for definition of Rarity)
      Double_t GetProba ( const TString& methodTag, Double_t ap_sig=0.5, Double_t mvaVal=-9999999 ); 
      Double_t GetRarity( const TString& methodTag, Double_t mvaVal=-9999999 );

      // accessors 
      virtual const char* GetName() const { return "Reader"; }
      Bool_t   Verbose( void ) const  { return fVerbose; }
      void     SetVerbose( Bool_t v ) { fVerbose = v; }

      const DataSetInfo& DataInfo() const { return fDataSetInfo; }
      DataSetInfo&       DataInfo()       { return fDataSetInfo; }
      
      void     AddVariable( const TString& expression, Float_t* );
      void     AddVariable( const TString& expression, Int_t* );
  
   private:

      // this booking method is internal
      IMethod* BookMVA( Types::EMVA method,  const TString& weightfile );

      DataSetInfo fDataSetInfo; // the data set

      DataInputHandler fDataInputHandler;

      // Init Reader class
      void Init( void );

      // Decode Constructor string (or TString) and fill variable name std::vector
      void DecodeVarNames( const std::string& varNames );
      void DecodeVarNames( const TString& varNames );

      void DeclareOptions();

      Bool_t    fVerbose;    // verbosity
      Bool_t    fSilent;     // silent mode
      Bool_t    fColor;      // color mode

      Double_t  fMvaEventError; // per-event error returned by MVA (unless: -1)

      std::map<TString, IMethod*> fMethodMap; // map of methods

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

      ClassDef(Reader,0) // Interpret the trained MVAs in an analysis context
   };

}

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