#ifndef ROOT_TMVA_MethodBase
#define ROOT_TMVA_MethodBase
#include "Riostream.h"
#include <vector>
#include <iostream>
#ifndef ROOT_TMVA_DataSet
#include "TMVA/DataSet.h"
#endif
#ifndef ROOT_TMVA_IMethod
#include "TMVA/IMethod.h"
#endif
#ifndef ROOT_TMVA_PDF
#include "TMVA/PDF.h"
#endif
#ifndef ROOT_TMVA_TSpline1
#include "TMVA/TSpline1.h"
#endif
#ifndef ROOT_TMVA_Option
#include "TMVA/Option.h"
#endif
#ifndef ROOT_TMVA_Tools
#include "TMVA/Tools.h"
#endif
#ifndef ROOT_TMVA_Configurable
#include "TMVA/Configurable.h"
#endif
#ifndef ROOT_TMVA_Types
#include "TMVA/Types.h"
#endif
#ifndef ROOT_TMVA_MsgLogger
#include "TMVA/MsgLogger.h"
#endif
#ifndef ROOT_TMVA_VariableTransformBase
#include "TMVA/VariableTransformBase.h"
#endif
class TTree;
class TDirectory;
namespace TMVA {
class Ranking;
class MethodBase : public IMethod, public Configurable {
public:
enum EWeightFileType { kROOT=0, kTEXT };
MethodBase( TString jobName,
TString methodTitle,
DataSet& theData,
TString theOption = "",
TDirectory* theBaseDir = 0 );
MethodBase( DataSet& theData,
TString weightFile,
TDirectory* theBaseDir = 0 );
virtual ~MethodBase();
virtual void PrepareEvaluationTree( TTree* theTestTree );
void TrainMethod();
Bool_t IsMVAPdfs() const { return fIsMVAPdfs; }
void CreateMVAPdfs();
void WriteStateToFile () const;
void WriteStateToStream ( std::ostream& tf, Bool_t isClass = kFALSE ) const;
void WriteStateToStream ( TFile& rf ) const;
void ReadStateFromFile ();
void ReadStateFromStream( std::istream& tf );
void ReadStateFromStream( TFile& rf );
virtual void WriteWeightsToStream ( std::ostream& tf ) const = 0;
virtual void WriteWeightsToStream ( TFile& ) const {}
virtual void ReadWeightsFromStream( std::istream& tf ) = 0;
virtual void ReadWeightsFromStream( TFile& ) {}
virtual void WriteMonitoringHistosToFile() const;
virtual Bool_t IsSignalLike() { return GetMvaValue() > GetSignalReferenceCut() ? kTRUE : kFALSE; }
virtual void TestInit( TTree* theTestTree = 0 );
virtual Double_t GetMvaValue() = 0;
virtual Double_t GetProba( Double_t mvaVal, Double_t ap_sig );
virtual Double_t GetRarity( Double_t mvaVal, Types::ESBType reftype = Types::kBackground ) const;
virtual void Test( TTree* theTestTree = 0 );
const TString& GetJobName () const { return fJobName; }
const TString& GetMethodName () const { return fMethodName; }
const char* GetName () const { return GetMethodName().Data(); }
const TString& GetMethodTitle() const { return fMethodTitle; }
Types::EMVA GetMethodType () const { return fMethodType; }
void SetJobName ( TString jobName ) { fJobName = jobName; }
void SetMethodName ( TString methodName ) { fMethodName = methodName; }
void SetMethodTitle( TString methodTitle ) { fMethodTitle = methodTitle; }
void SetMethodType ( Types::EMVA methodType ) { fMethodType = methodType; }
TString GetWeightFileDir() const { return fFileDir; }
void SetWeightFileDir( TString fileDir );
const TString& GetInputVar( int i ) const { return Data().GetInternalVarName(i); }
const TString& GetInputExp( int i ) const { return Data().GetExpression(i); }
void SetWeightFileName( TString );
TString GetWeightFileName() const;
Bool_t HasTrainingTree() const { return Data().GetTrainingTree() != 0; }
TTree* GetTrainingTree() const {
if (GetVariableTransform() != Types::kNone) {
fLogger << kFATAL << "Trying to access correlated Training tree in method "
<< GetMethodName() << Endl;
}
return Data().GetTrainingTree();
}
TTree* GetTestTree() const {
if (GetVariableTransform() != Types::kNone) {
fLogger << kFATAL << "Trying to access correlated Training tree in method "
<< GetMethodName() << Endl;
}
return Data().GetTestTree();
}
Int_t GetNvar() const { return fNvar; }
void SetNvar( Int_t n) { fNvar = n; }
virtual Double_t GetEfficiency( TString, TTree*, Double_t& err );
virtual Double_t GetTrainingEfficiency( TString );
virtual Double_t GetSignificance() const;
virtual Double_t GetOptimalSignificance( Double_t SignalEvents, Double_t BackgroundEvents,
Double_t& optimal_significance_value ) const;
virtual Double_t GetSeparation( TH1*, TH1* ) const;
virtual Double_t GetSeparation( PDF* pdfS = 0, PDF* pdfB = 0 ) const;
virtual Double_t GetmuTransform( TTree* );
Double_t GetRMS( Int_t ivar ) const { return GetVarTransform().Variable(ivar).GetRMS(); }
Double_t GetXmin( Int_t ivar ) const { return GetVarTransform().Variable(ivar).GetMin(); }
Double_t GetXmax( Int_t ivar ) const { return GetVarTransform().Variable(ivar).GetMax(); }
Double_t GetXmin( const TString& var ) const { return GetVarTransform().Variable(var) .GetMin(); }
Double_t GetXmax( const TString& var ) const { return GetVarTransform().Variable(var) .GetMax(); }
void SetXmin( Int_t ivar, Double_t x ) { GetVarTransform().Variable(ivar).SetMin(x); }
void SetXmax( Int_t ivar, Double_t x ) { GetVarTransform().Variable(ivar).SetMax(x); }
void SetXmin( const TString& var, Double_t x ) { GetVarTransform().Variable(var) .SetMin(x); }
void SetXmax( const TString& var, Double_t x ) { GetVarTransform().Variable(var) .SetMax(x); }
Double_t Norm ( Int_t ivar, Double_t x ) const;
Double_t Norm ( TString var, Double_t x ) const;
Bool_t IsNormalised() const { return fNormalise; }
void SetNormalised( Bool_t norm ) { fNormalise = norm; }
Bool_t IsOK() const { return fIsOK; }
void WriteEvaluationHistosToFile( TDirectory* targetDir = 0 );
Types::EVariableTransform GetVariableTransform() const { return fVariableTransform; }
void SetVariableTransform ( Types::EVariableTransform m ) { fVariableTransform = m; }
Bool_t Verbose() const { return fVerbose; }
Bool_t Help () const { return fHelp; }
void SetVerbose( Bool_t v = kTRUE ) { fVerbose = v; }
void SetHelp ( Bool_t h = kTRUE ) { fHelp = h; }
DataSet& Data() const { return fData; }
virtual Bool_t ReadEvent( TTree* tr, UInt_t ievt, Types::ESBType type = Types::kMaxSBType ) const {
if (type == Types::kMaxSBType) type = GetVariableTransformType();
fVarTransform->ReadEvent(tr, ievt, type);
return kTRUE;
}
virtual Bool_t ReadTrainingEvent( UInt_t ievt, Types::ESBType type = Types::kMaxSBType ) const {
return ReadEvent( Data().GetTrainingTree(), ievt, type );
}
virtual Bool_t ReadTestEvent( UInt_t ievt, Types::ESBType type = Types::kMaxSBType ) const {
return ReadEvent( Data().GetTestTree(), ievt, type );
}
TMVA::Event& GetEvent() const { return GetVarTransform().GetEvent(); }
Bool_t IsSignalEvent() const { return GetEvent().IsSignal(); }
Double_t GetEventVal( Int_t ivar ) const {
if (IsNormalised()) return GetEventValNormalised(ivar);
else return GetEvent().GetVal(ivar);
}
Double_t GetEventWeight() const { return GetEvent().GetWeight(); }
virtual void DeclareOptions();
virtual void ProcessOptions();
const TString& GetTestvarName() const { return fTestvar; }
const TString GetProbaName() const { return fTestvar + "_Proba"; }
VariableTransformBase& GetVarTransform() const { return *fVarTransform; }
Double_t GetSignalReferenceCut() const { return fSignalReferenceCut; }
virtual void MakeClass( const TString& classFileName = "" ) const;
void PrintHelpMessage() const;
protected:
virtual void MakeClassSpecific( std::ostream&, const TString& = "" ) const {}
virtual void MakeClassSpecificHeader( std::ostream&, const TString& = "" ) const {}
public:
static MethodBase* GetThisBase() { return fgThisBase; }
TDirectory* BaseDir() const;
TDirectory* MethodBaseDir() const;
protected:
enum ECutOrientation { kNegative = -1, kPositive = +1 };
ECutOrientation GetCutOrientation() const { return fCutOrientation; }
void ResetThisBase() { fgThisBase = this; }
void SetSignalReferenceCut( Double_t cut ) { fSignalReferenceCut = cut; }
void Statistics( TMVA::Types::ETreeType treeType, const TString& theVarName,
Double_t&, Double_t&, Double_t&,
Double_t&, Double_t&, Double_t&, Bool_t norm = kFALSE );
Types::ESBType GetVariableTransformType() const { return fVariableTransformType; }
void SetVariableTransformType( Types::ESBType t ) { fVariableTransformType = t; }
UInt_t GetTrainingTMVAVersionCode() const { return fTMVATrainingVersion; }
UInt_t GetTrainingROOTVersionCode() const { return fROOTTrainingVersion; }
TString GetTrainingTMVAVersionString() const;
TString GetTrainingROOTVersionString() const;
const TString& GetInternalVarName( Int_t ivar ) const { return (*fInputVars)[ivar]; }
const TString& GetOriginalVarName( Int_t ivar ) const { return Data().GetExpression(ivar); }
private:
DataSet& fData;
Double_t fSignalReferenceCut;
Types::ESBType fVariableTransformType;
protected:
TDirectory* LocalTDir() const { return Data().LocalRootDir(); }
void SetTestvarName( const TString & v="" ) { fTestvar = (v=="")?(fTestvarPrefix + GetMethodTitle()):v; }
const TString& GetTestvarPrefix() const { return fTestvarPrefix; }
void SetTestvarPrefix( TString prefix ) { fTestvarPrefix = prefix; }
Bool_t CheckSanity( TTree* theTree = 0 );
Bool_t TxtWeightsOnly() const { return fTxtWeightsOnly; }
Ranking* fRanking;
vector<TString>* fInputVars;
private:
TString fJobName;
TString fMethodName;
Types::EMVA fMethodType;
TString fMethodTitle;
TString fTestvar;
TString fTestvarPrefix;
UInt_t fTMVATrainingVersion;
UInt_t fROOTTrainingVersion;
Bool_t fNormalise;
private:
void SetBaseDir( TDirectory* d ) { fBaseDir = d; }
Double_t GetEventValNormalised(Int_t ivar) const {
return Tools::NormVariable( GetEvent().GetVal(ivar), GetXmin(ivar), GetXmax(ivar) );
}
Int_t fNvar;
TDirectory* fBaseDir;
TDirectory* fMethodBaseDir;
TString fFileDir;
TString fWeightFile;
VariableTransformBase* fVarTransform;
protected:
Bool_t fIsOK;
TH1* fHistS_plotbin;
TH1* fHistB_plotbin;
TH1* fProbaS_plotbin;
TH1* fProbaB_plotbin;
TH1* fRarityS_plotbin;
TH1* fRarityB_plotbin;
TH1* fHistS_highbin;
TH1* fHistB_highbin;
TH1* fEffS;
TH1* fEffB;
TH1* fEffBvsS;
TH1* fRejBvsS;
TH1* finvBeffvsSeff;
TH1* fHistBhatS;
TH1* fHistBhatB;
TH1* fHistMuS;
TH1* fHistMuB;
TH1* fTrainEffS;
TH1* fTrainEffB;
TH1* fTrainEffBvsS;
TH1* fTrainRejBvsS;
Int_t fNbinsMVAPdf;
Int_t fNsmoothMVAPdf;
TMVA::PDF* fMVAPdfS;
TMVA::PDF* fMVAPdfB;
Double_t fX;
Double_t fMode;
TGraph* fGraphS;
TGraph* fGraphB;
TGraph* fGrapheffBvsS;
PDF* fSplS;
PDF* fSplB;
TSpline* fSpleffBvsS;
TGraph* fGraphTrainS;
TGraph* fGraphTrainB;
TGraph* fGraphTrainEffBvsS;
PDF* fSplTrainS;
PDF* fSplTrainB;
TSpline* fSplTrainEffBvsS;
private:
Double_t fMeanS;
Double_t fMeanB;
Double_t fRmsS;
Double_t fRmsB;
Double_t fXmin;
Double_t fXmax;
Bool_t fUseDecorr;
Types::EVariableTransform fVariableTransform;
TString fVarTransformString;
TString fVariableTransformTypeString;
Bool_t fVerbose;
TString fVerbosityLevelString;
EMsgType fVerbosityLevel;
Bool_t fHelp;
Bool_t fIsMVAPdfs;
Bool_t fTxtWeightsOnly;
protected:
Int_t fNbins;
Int_t fNbinsH;
ECutOrientation fCutOrientation;
TSpline1* fSplRefS;
TSpline1* fSplRefB;
TSpline1* fSplTrainRefS;
TSpline1* fSplTrainRefB;
public:
static Double_t IGetEffForRoot( Double_t );
Double_t GetEffForRoot( Double_t );
private:
static MethodBase* fgThisBase;
void Init();
bool GetLine(std::istream& fin, char * buf );
protected:
mutable MsgLogger fLogger;
ClassDef(MethodBase,0)
};
}
#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.