#ifndef ROOT_TMVA_Tools
#define ROOT_TMVA_Tools
#include <vector>
#include <string>
#ifndef ROOT_TMVA_TMatrixDSymEigen
#include "TMatrixDSymEigen.h"
#endif
#ifndef ROOT_TMVA_MsgLogger
#include "TMVA/MsgLogger.h"
#endif
class TList;
class TTree;
class TString;
class TH1;
class TSpline;
namespace TMVA {
   class Event;
   
   namespace Tools {
      
      void  ComputeStat( TTree* theTree, const TString& theVarName,
                         Double_t&, Double_t&, Double_t&, 
                         Double_t&, Double_t&, Double_t&, Bool_t norm = kFALSE );
      
      inline Double_t ComputeVariance( Double_t sumx2, Double_t sumx, Int_t nx );
      
      TH1* projNormTH1F( TTree* theTree, TString theVarName,
                         TString name, Int_t nbins, 
                         Double_t xmin, Double_t xmax, TString cut );
      
      Double_t NormHist( TH1* theHist, Double_t norm = 1.0 );
      
      TList* ParseFormatLine( TString theString, const char * sep = ":" );
      
      std::vector<Int_t>* ParseANNOptionString( TString theOptions, Int_t nvar,
                                                std::vector<Int_t>* nodes );
      
      
      TMatrixD* GetSQRootMatrix( TMatrixDSym* symMat );
      
      const TMatrixD* GetCorrelationMatrix( const TMatrixD* covMat );
      
      Bool_t CheckSplines( const TH1*, const TSpline* );
      
      Double_t NormVariable( Double_t x, Double_t xmin, Double_t xmax );
      
      Double_t GetSeparation( TH1* S, TH1* B );
      
      std::vector<Double_t> MVADiff( std::vector<Double_t>&, std::vector<Double_t>& );
      void Scale     ( std::vector<Double_t>&, Double_t );
      void Scale     ( std::vector<Float_t> &, Float_t  );
  
      
      
      void UsefulSortDescending( std::vector< std::vector<Double_t> >&, std::vector<TString>* vs = 0 );
      void UsefulSortAscending ( std::vector< std::vector<Double_t> >& );
    
      void UsefulSortDescending( std::vector<Double_t>& );
      void UsefulSortAscending ( std::vector<Double_t>& );
      Int_t GetIndexMaxElement ( std::vector<Double_t>& );
      Int_t GetIndexMinElement ( std::vector<Double_t>& );
      
      Bool_t  ContainsRegularExpression( const TString& s );
      TString ReplaceRegularExpressions( const TString& s, const TString& replace = "+" );
      
      void FormattedOutput( const std::vector<Double_t>&, const std::vector<TString>&, 
                            const TString titleVars, const TString titleValues, MsgLogger& logger,
                            TString format = "%+1.3f" );
      void FormattedOutput( const TMatrixD&, const std::vector<TString>&, MsgLogger& logger );
      void writeFloatArbitraryPrecision(Float_t val, ostream & os);
      void readFloatArbitraryPrecision(Float_t & val, istream & is);
      
      template<typename T>
      inline Bool_t VerifyRange( MsgLogger &mlog, const char *varstr, T & var, T vmin, T vmax );
      template<typename T>
      inline Bool_t VerifyRange( MsgLogger &mlog, const char *varstr, T & var, T vmin, T vmax, T vdef );
      template<typename T>
      inline Int_t VerifyRange( T & var, T vmin, T vmax );
      
      MsgLogger& Logger();
      const TString __regexp__ = "!%^&()'<>?= ";
      const TString& Color(const TString &);
      
      enum EWelcomeMessage {
         kStandardWelcomeMsg = 1,
         kIsometricWelcomeMsg,
         kBlockWelcomeMsg,
         kLeanWelcomeMsg,
         kLogoWelcomeMsg,
         kSmall1WelcomeMsg,
         kSmall2WelcomeMsg,
         kOriginalWelcomeMsgColor,
         kOriginalWelcomeMsgBW
      };
      void TMVAWelcomeMessage();
      void TMVAWelcomeMessage( MsgLogger& logger, EWelcomeMessage m = kStandardWelcomeMsg );
      void TMVAVersionMessage( MsgLogger& logger );
   } 
} 
inline Double_t TMVA::Tools::ComputeVariance( Double_t sumx2, Double_t sumx, Int_t nx )
{
   
   if (nx<2) return 0;
   return (sumx2 - ((sumx*sumx)/static_cast<Double_t>(nx)))/static_cast<Double_t>(nx-1);
}
template<typename T>
inline Int_t TMVA::Tools::VerifyRange( T & var, T vmin, T vmax )
{
   
   if (var>vmax) return  1;
   if (var<vmin) return -1;
   return 0;
}
template<typename T>
inline Bool_t TMVA::Tools::VerifyRange( TMVA::MsgLogger &mlog, const char *varstr, T & var, T vmin, T vmax )
{
   
   
   Int_t dir = TMVA::Tools::VerifyRange(var,vmin,vmax);
   Bool_t modif=kFALSE;
   if (dir==1) {
      modif = kTRUE;
      var=vmax;
   }
   if (dir==-1) {
      modif = kTRUE;
      var=vmin;
   }
   if (modif) {
      mlog << kWARNING << "Option <" << varstr << "> " << (dir==1 ? "above":"below") << " allowed range. Reset to new value = " << var << Endl;
   }
   return modif;
}
template<typename T>
inline Bool_t TMVA::Tools::VerifyRange( TMVA::MsgLogger &mlog, const char *varstr, T & var, T vmin, T vmax, T vdef )
{
   
   
   Int_t dir = TMVA::Tools::VerifyRange(var,vmin,vmax);
   Bool_t modif=kFALSE;
   if (dir!=0) {
      modif = kTRUE;
      var=vdef;
   }
   if (modif) {
      mlog << kWARNING << "Option <" << varstr << "> " << (dir==1 ? "above":"below") << " allowed range. Reset to default value = " << var << Endl;
   }
   return modif;
}
#endif
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.