103 fDataSetManager(
NULL)
112 std::vector<TTreeFormula*>::iterator formIt =
fCatFormulas.begin();
113 std::vector<TTreeFormula*>::iterator lastF =
fCatFormulas.end();
114 for(;formIt!=lastF; ++formIt)
delete *formIt;
124 std::vector<IMethod*>::iterator itrMethod =
fMethods.begin();
127 for(; itrMethod !=
fMethods.end(); ++itrMethod ) {
128 if ( !(*itrMethod)->HasAnalysisType(type, numberClasses, numberTargets) )
152 Log() << kINFO <<
"Adding sub-classifier: " << addedMethodName <<
"::" << theTitle <<
Endl;
159 if(method==0)
return 0;
189 fVars.push_back(theVariables);
211 TString dsiName=theTitle+
"_dsi";
220 std::vector<VariableInfo>::iterator itrVarInfo;
232 std::vector<UInt_t> varMap;
236 std::vector<TString>::iterator itrVariables;
240 for (itrVariables = variables.begin(); itrVariables != variables.end(); itrVariables++) {
245 if((*itrVariables==itrVarInfo->GetLabel()) ) {
249 varMap.push_back(counter);
257 if((*itrVariables==itrVarInfo->GetLabel()) ) {
261 varMap.push_back(counter);
269 Log() << kFATAL <<
"The variable " << itrVariables->Data() <<
" was not found and could not be added " <<
Endl;
275 if (theVariables==
"") {
289 for (
UInt_t i=0; i<nClasses; i++) {
293 dsi->
AddCut(theCut,className);
322 std::vector<VariableInfo>::const_iterator viIt;
327 for (viIt = vars.begin(); viIt != vars.end(); ++viIt)
328 if( viIt->GetExternalLink() == 0 ) {
329 hasAllExternalLinks =
kFALSE;
332 for (viIt = specs.begin(); viIt != specs.end(); ++viIt)
333 if( viIt->GetExternalLink() == 0 ) {
334 hasAllExternalLinks =
kFALSE;
338 if(!hasAllExternalLinks)
return;
350 for (viIt = vars.begin(); viIt != vars.end(); ++viIt) {
354 for (viIt = specs.begin(); viIt != specs.end(); ++viIt) {
376 Log() << kINFO <<
"Train all sub-classifiers for " 381 Log() << kINFO <<
"...nothing found to train" <<
Endl;
385 std::vector<IMethod*>::iterator itrMethod;
388 for (itrMethod =
fMethods.begin(); itrMethod !=
fMethods.end(); ++itrMethod ) {
401 itrMethod =
fMethods.erase( itrMethod );
409 Log() << kINFO <<
"Training finished" <<
Endl;
414 <<
" not trained (training tree has less entries [" 416 <<
"] than required [" << MinNoTrainingEvents <<
"]" <<
Endl;
418 Log() << kERROR <<
" w/o training/test events for that category, I better stop here and let you fix " <<
Endl;
419 Log() << kFATAL <<
"that one first, otherwise things get too messy later ... " <<
Endl;
427 Log() << kINFO <<
"Begin ranking of input variables..." <<
Endl;
428 for (itrMethod =
fMethods.begin(); itrMethod !=
fMethods.end(); itrMethod++) {
431 const Ranking* ranking = (*itrMethod)->CreateRanking();
435 Log() << kINFO <<
"No variable ranking supplied by classifier: " 451 std::vector<IMethod*>::iterator itrMethod;
480 Log() << kINFO <<
"Recreating sub-classifiers from XML-file " <<
Endl;
483 for (
UInt_t i=0; i<nSubMethods; i++) {
489 methodType = fullMethodName(0,fullMethodName.
Index(
"::"));
490 if (methodType.
Contains(
" ")) methodType = methodType(methodType.
Last(
' ')+1,methodType.
Length());
493 titleLength = fullMethodName.
Length()-fullMethodName.
Index(
"::")-2;
494 methodTitle = fullMethodName(fullMethodName.
Index(
"::")+2,titleLength);
503 Log() << kFATAL <<
"Could not create sub-method " << method <<
" from XML." <<
Endl;
510 fVars.push_back(theVariables);
514 UInt_t spectatorIdx = 10000;
519 std::vector<VariableInfo>::iterator itrVarInfo;
522 for (itrVarInfo = spectators.begin(); itrVarInfo != spectators.end(); ++itrVarInfo, ++counter) {
523 if((specName==itrVarInfo->GetLabel()) || (specName==itrVarInfo->GetExpression())) {
524 spectatorIdx=counter;
555 Log() <<
"This method allows to define different categories of events. The" <<
Endl;
556 Log() <<
"categories are defined via cuts on the variables. For each" <<
Endl;
557 Log() <<
"category, a different classifier and set of variables can be" <<
Endl;
558 Log() <<
"specified. The categories which are defined for this method must" <<
Endl;
559 Log() <<
"be disjoint." <<
Endl;
579 Log() << kFATAL <<
"Large method index " << methodIdx <<
", number of category formulas = " 590 Log() << kFATAL <<
"Unknown method index " << methodIdx <<
" maximum allowed index=" 595 Bool_t pass = (specVal>0.5);
611 Int_t suitableCutsN = 0;
620 if (suitableCutsN == 0) {
621 Log() << kWARNING <<
"Event does not lie within the cut of any sub-classifier." <<
Endl;
625 if (suitableCutsN > 1) {
626 Log() << kFATAL <<
"The defined categories are not disjoint." <<
Endl;
651 Int_t suitableCutsN = 0;
660 if (suitableCutsN == 0) {
661 Log() << kWARNING <<
"Event does not lie within the cut of any sub-classifier." <<
Endl;
665 if (suitableCutsN > 1) {
666 Log() << kFATAL <<
"The defined categories are not disjoint." <<
Endl;
671 Log() << kFATAL <<
"method not found in Category Regression method" <<
Endl;
IMethod * Create(const std::string &name, const TString &job, const TString &title, DataSetInfo &dsi, const TString &option)
creates the method if needed based on the method name using the creator function the factory has stor...
static ClassifierFactory & Instance()
access to the ClassifierFactory singleton creates the instance if needed
Types::EAnalysisType fAnalysisType
std::vector< IMethod * > fMethods
void SetModelPersistence(Bool_t status)
virtual const char * GetName() const
Returns name of object.
void Init()
initialize the method
void WriteStateToXML(void *parent) const
general method used in writing the header of the weight files where the used variables, variable transformation type etc.
TMVA::IMethod * AddMethod(const TCut &, const TString &theVariables, Types::EMVA theMethod, const TString &theTitle, const TString &theOptions)
adds sub-classifier for a category
MsgLogger & Endl(MsgLogger &ml)
Singleton class for Global types used by TMVA.
VariableInfo & AddTarget(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis ...
void ReadStateFromXML(void *parent)
std::vector< VariableInfo > & GetSpectatorInfos()
void SetCut(const TCut &cut, const TString &className)
set the cut for the classes
void InitCircularTree(const DataSetInfo &dsi)
initialize the circular tree
static Types & Instance()
the the single instance of "Types" if existing already, or create it (Singleton)
void SetMethodBaseDir(TDirectory *methodDir)
std::vector< TCut > fCategoryCuts
Virtual base Class for all MVA method.
const std::vector< Float_t > & GetRegressionValues(const TMVA::Event *const ev)
std::vector< UInt_t > fCategorySpecIdx
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual const std::vector< Float_t > & GetRegressionValues()
Ranking for variables in method (implementation)
UInt_t GetNClasses() const
virtual ~MethodCategory(void)
destructor
void AddCut(const TCut &cut, const TString &className)
set the cut for the classes
void SetSilentFile(Bool_t status)
virtual Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets)=0
const TString & GetExpression() const
VariableInfo & AddSpectator(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, char type='F', Bool_t normalized=kTRUE, void *external=0)
add a spectator (can be a complex expression) to the set of spectator variables used in the MV analys...
const TString & GetNormalization() const
std::vector< std::vector< UInt_t > > fVarMaps
void DeclareOptions()
options for this method
const Event * GetEvent() const
Virtual base class for combining several TMVA method.
void SetVariableArrangement(std::vector< UInt_t > *const m) const
set the variable arrangement
virtual void ParseOptions()
options parser
void SetupMethod()
setup of methods
DataSetInfo & DataInfo() const
Class that contains all the data information.
Long64_t GetNTrainingEvents() const
std::vector< VariableInfo > & GetTargetInfos()
TDirectory * GetRootDir() const
A specialized string object used for TTree selections.
std::vector< TTreeFormula * > fCatFormulas
needed in conjunction with TTreeFormulas for evaluation category expressions
MethodCategory(const TString &jobName, const TString &methodTitle, DataSetInfo &theData, const TString &theOption="")
standard constructor
const Int_t MinNoTrainingEvents
void SetSplitOptions(const TString &so)
const Ranking * CreateRanking()
no ranking
void * GetExternalLink() const
UInt_t GetNTargets() const
TMVA::DataSetInfo & CreateCategoryDSI(const TCut &, const TString &, const TString &)
create a DataSetInfo object for a sub-classifier
const char * GetName() const
ClassInfo * GetClassInfo(Int_t clNum) const
void SetWeightExpression(const TString &exp, const TString &className="")
set the weight expressions for the classes if class name is specified, set only for this class if cla...
DataSetInfo & AddDataSetInfo(DataSetInfo &dsi)
stores a copy of the dataset info object
char * Form(const char *fmt,...)
DataSetManager * fDataSetManager
const TString & GetJobName() const
const TString & GetMethodName() const
void Train(void)
train all sub-classifiers
Class for categorizing the phase space.
virtual void Print() const
get maximum length of variable names
virtual void CheckSetup()
check may be overridden by derived class (sometimes, eg, fitters are used which can only be implement...
Ssiz_t Last(char c) const
Find last occurrence of a character c.
Describe directory structure in memory.
void SetFile(TFile *file)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t)
check whether method category has analysis type the method type has to be the same for all sub-method...
ClassInfo * AddClass(const TString &className)
void ProcessSetup()
process all options the "CheckForUnusedOptions" is done in an independent call, since it may be overr...
std::vector< TString > fVars
void GetHelpMessage() const
Get help message text.
Double_t GetMvaValue(Double_t *err=0, Double_t *errUpper=0)
returns the mva value of the right sub-classifier
Interface for all concrete MVA method implementations.
virtual Int_t Branch(TCollection *list, Int_t bufsize=32000, Int_t splitlevel=99, const char *name="")
Create one branch for each element in the collection.
#define REGISTER_METHOD(CLASS)
for example
Abstract ClassifierFactory template that handles arbitrary types.
const TString & GetSplitOptions() const
TDirectory * BaseDir() const
returns the ROOT directory where info/histograms etc of the corresponding MVA method instance are sto...
TString GetMethodTypeName() const
const TCut & GetCut(Int_t i) const
void SetWeightFileDir(TString fileDir)
set directory of weight file
void AddWeightsXMLTo(void *parent) const
create XML description of Category classifier
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
virtual void SetCircular(Long64_t maxEntries)
Enable/Disable circularity for this tree.
VariableInfo & AddVariable(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0, char varType='F', Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis ...
void DisableWriting(Bool_t setter)
Types::EAnalysisType GetAnalysisType() const
A TTree object has a header with a name and a title.
void ReadWeightsFromXML(void *wghtnode)
read weights of sub-classifiers of MethodCategory from xml weight file
Bool_t PassesCut(const Event *ev, UInt_t methodIdx)
Class for type info of MVA input variable.
Float_t GetSpectator(UInt_t ivar) const
return spectator content
const TString GetWeightExpression(Int_t i) const
double norm(double *x, double *p)
void SetNormalization(const TString &norm)
void SetRootDir(TDirectory *d)
virtual const std::vector< Float_t > & GetRegressionValues()
returns the mva value of the right sub-classifier
std::vector< VariableInfo > & GetVariableInfos()
void variables(TString dataset, TString fin="TMVA.root", TString dirName="InputVariables_Id", TString title="TMVA Input Variables", Bool_t isRegression=kFALSE, Bool_t useTMVAStyle=kTRUE)
virtual void SetAnalysisType(Types::EAnalysisType type)
virtual const char * GetTitle() const
Returns title of object.
void ProcessOptions()
process user options
const char * Data() const