106   std::vector<TTreeFormula*>::iterator 
formIt = fCatFormulas.
begin();
 
  107   std::vector<TTreeFormula*>::iterator 
lastF = fCatFormulas.
end();
 
 
  155   if(fModelPersistence) 
method->SetWeightFileDir(fFileDir);
 
  156   method->SetModelPersistence(fModelPersistence);
 
  157   method->SetAnalysisType( fAnalysisType );
 
  162   method->SetSilentFile(IsSilentFile());
 
  181   fMethods.push_back(
method);
 
  182   fCategoryCuts.push_back(
theCut);
 
 
  211   fDataSetManager->AddDataSetInfo(*
dsi);
 
  214   std::vector<VariableInfo>::iterator 
itrVarInfo;
 
  226   std::vector<UInt_t> 
varMap;
 
  243            varMap.push_back(counter);
 
  255            varMap.push_back(counter);
 
  263         Log() << kFATAL <<
"The variable " << 
itrVariables->Data() << 
" was not found and could not be added " << 
Endl;
 
  271         dsi->AddVariable(
oldDSI.GetVariableInfos()[i]);
 
  277   fVarMaps.push_back(
varMap);
 
  284      className = 
oldDSI.GetClassInfo(i)->GetName();
 
  285      dsi->AddClass(className);
 
  288      dsi->SetWeightExpression(
oldDSI.GetWeightExpression(i),className);
 
  292   dsi->SetSplitOptions(
oldDSI.GetSplitOptions());
 
  295   dsi->SetNormalization(norm);
 
 
  321   std::vector<VariableInfo>::const_iterator 
viIt;
 
  322   const std::vector<VariableInfo>& vars  = 
dsi.GetVariableInfos();
 
  323   const std::vector<VariableInfo>& 
specs = 
dsi.GetSpectatorInfos();
 
  327      if( 
viIt->GetExternalLink() == 0 ) {
 
  332      if( 
viIt->GetExternalLink() == 0 ) {
 
  345      fCatTree = 
new TTree(
TString::Format(
"Circ%s",GetMethodName().Data()).Data(),
"Circular Tree for categorization");
 
  346      fCatTree->SetCircular(1);
 
  355      if(
vi.GetVarType()==
'C') 
continue;
 
  359   for(
UInt_t cat=0; cat!=fCategoryCuts.size(); ++cat) {
 
 
  375   Log() << kINFO << 
"Train all sub-classifiers for " 
  379   if (fMethods.empty()) {
 
  380      Log() << kINFO << 
"...nothing found to train" << 
Endl;
 
  384   std::vector<IMethod*>::iterator 
itrMethod;
 
  391      mva->SetAnalysisType( analysisType );
 
  392      if (!
mva->HasAnalysisType( analysisType,
 
  393                                 mva->DataInfo().GetNClasses(),
 
  394                                 mva->DataInfo().GetNTargets() ) ) {
 
  395         Log() << kWARNING << 
"Method " << 
mva->GetMethodTypeName() << 
" is not capable of handling " ;
 
  397            Log() << 
"regression with " << 
mva->DataInfo().GetNTargets() << 
" targets." << 
Endl;
 
  399            Log() << 
"classification with " << 
mva->DataInfo().GetNClasses() << 
" classes." << 
Endl;
 
  405         Log() << kINFO << 
"Train method: " << 
mva->GetMethodName() << 
" for " 
  408         Log() << kINFO << 
"Training finished" << 
Endl;
 
  412         Log() << kWARNING << 
"Method " << 
mva->GetMethodName()
 
  413               << 
" not trained (training tree has less entries [" 
  414               << 
mva->Data()->GetNTrainingEvents()
 
  417         Log() << kERROR << 
" w/o training/test events for that category, I better stop here and let you fix " << 
Endl;
 
  418         Log() << kFATAL << 
"that one first, otherwise things get too messy later ... " << 
Endl;
 
  426      Log() << kINFO << 
"Begin ranking of input variables..." << 
Endl;
 
  434               Log() << kINFO << 
"No variable ranking supplied by classifier: " 
 
  451   for (
UInt_t i=0; i<fMethods.size(); i++) {
 
 
  477   Log() << kINFO << 
"Recreating sub-classifiers from XML-file " << 
Endl;
 
  500         Log() << kFATAL << 
"Could not create sub-method " << 
method << 
" from XML." << 
Endl;
 
  505      fMethods.push_back(
method);
 
  515      std::vector<VariableInfo>& spectators=
primaryDSI.GetSpectatorInfos();
 
  516      std::vector<VariableInfo>::iterator 
itrVarInfo;
 
  530   InitCircularTree(DataInfo());
 
 
  552   Log() << 
"This method allows to define different categories of events. The" <<
Endl;
 
  553   Log() << 
"categories are defined via cuts on the variables. For each" << 
Endl;
 
  554   Log() << 
"category, a different classifier and set of variables can be" <<
Endl;
 
  555   Log() << 
"specified. The categories which are defined for this method must" << 
Endl;
 
  556   Log() << 
"be disjoint." << 
Endl;
 
 
  576         Log() << kFATAL << 
"Large method index " << 
methodIdx << 
", number of category formulas = " 
  577               << fCatFormulas.size() << 
Endl;
 
  586      if (
methodIdx>=fCategorySpecIdx.size()) {
 
  587         Log() << kFATAL << 
"Unknown method index " << 
methodIdx << 
" maximum allowed index=" 
  588               << fCategorySpecIdx.size() << 
Endl;
 
 
  602   if (fMethods.empty()) 
return 0;
 
  610   for (
UInt_t i=0; i<fMethods.size(); ++i) {
 
  611      if (PassesCut(
ev, i)) {
 
  618      Log() << kWARNING << 
"Event does not lie within the cut of any sub-classifier." << 
Endl;
 
  623      Log() << kFATAL << 
"The defined categories are not disjoint." << 
Endl;
 
  630   ev->SetVariableArrangement(0);
 
  632   Log() << kDEBUG << 
"Event  is for method " << 
methodToUse << 
" spectator is " << 
ev->GetSpectator(0) << 
"  " 
  633             << fVarMaps[0][0] << 
" classID " << DataInfo().IsSignal(
ev) << 
" value " <<  
mvaValue 
  634             << 
" type " << Data()->GetCurrentType() << 
Endl;
 
 
  646   std::vector<Double_t> 
result;
 
  648   Info(
"GetMVaValues", 
"Evaluate MethodCategory for %d events type %d on the dataset %s", 
int(
lastEvt - 
firstEvt),
 
  649        (
int)Data()->GetCurrentType(), DataInfo().GetName());
 
  651   if (fMethods.empty())
 
  657   std::vector<std::vector<Double_t>> mvaValues(fMethods.size());
 
  658   for (
UInt_t i = 0; i < fMethods.size(); ++i) {
 
  663          ev->SetVariableArrangement(&fVarMaps[i]);
 
  681      for (
UInt_t i = 0; i < fMethods.size(); ++i) {
 
  682         if (PassesCut(
ev, i)) {
 
  689         Log() << kWARNING << 
"Event does not lie within the cut of any sub-classifier." << 
Endl;
 
  694         Log() << kFATAL << 
"The defined categories are not disjoint." << 
Endl;
 
  702      ev->SetVariableArrangement(
nullptr);
 
 
  712   if (fMethods.empty())
 
  721   for (
UInt_t i = 0; i < fMethods.size(); ++i) {
 
  722      if (PassesCut(
ev, i)) {
 
  729      Log() << kWARNING << 
"Event does not lie within the cut of any sub-classifier." << 
Endl;
 
  734      Log() << kFATAL << 
"The defined categories are not disjoint." << 
Endl;
 
  739      Log() << kFATAL << 
"method not found in Category Regression method" << 
Endl;
 
  745   ev->SetVariableArrangement(
nullptr);
 
 
  762   for (
UInt_t i=0; i<fMethods.size(); ++i) {
 
  763      if (PassesCut(
ev, i)) {
 
  770      Log() << kWARNING << 
"Event does not lie within the cut of any sub-classifier." << 
Endl;
 
  775      Log() << kFATAL << 
"The defined categories are not disjoint." << 
Endl;
 
  780      Log() << kFATAL << 
"method not found in Category Regression method" << 
Endl;
 
 
#define MinNoTrainingEvents
 
#define REGISTER_METHOD(CLASS)
for example
 
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
 
const_iterator begin() const
 
const_iterator end() const
 
A specialized string object used for TTree selections.
 
TDirectory::TContext keeps track and restore the current directory.
 
Describe directory structure in memory.
 
static ClassifierFactory & Instance()
access to the ClassifierFactory singleton creates the instance if needed
 
Class that contains all the data information.
 
Interface for all concrete MVA method implementations.
 
Virtual base Class for all MVA method.
 
virtual const std::vector< Float_t > & GetRegressionValues()
 
virtual const std::vector< Float_t > & GetMulticlassValues()
 
const TString & GetMethodName() const
 
friend class MethodCategory
 
Class for categorizing the phase space.
 
void InitCircularTree(const DataSetInfo &dsi)
initialize the circular tree
 
void GetHelpMessage() const
Get help message text.
 
void Init()
initialize the method
 
Bool_t PassesCut(const Event *ev, UInt_t methodIdx)
 
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...
 
void ProcessOptions()
process user options
 
virtual const std::vector< Float_t > & GetMulticlassValues()
returns the mva values of the multi-class right sub-classifier
 
Double_t GetMvaValue(Double_t *err=nullptr, Double_t *errUpper=nullptr)
returns the mva value of the right sub-classifier
 
TMVA::DataSetInfo & CreateCategoryDSI(const TCut &, const TString &, const TString &)
create a DataSetInfo object for a sub-classifier
 
void DeclareOptions()
options for this method
 
void AddWeightsXMLTo(void *parent) const
create XML description of Category classifier
 
const Ranking * CreateRanking()
no ranking
 
virtual ~MethodCategory(void)
destructor
 
virtual const std::vector< Float_t > & GetRegressionValues()
returns the mva value of the right sub-classifier
 
TMVA::IMethod * AddMethod(const TCut &, const TString &theVariables, Types::EMVA theMethod, const TString &theTitle, const TString &theOptions)
adds sub-classifier for a category
 
virtual std::vector< Double_t > GetMvaValues(Long64_t firstEvt=0, Long64_t lastEvt=-1, Bool_t logProgress=false)
returns the mva values of the right sub-classifier
 
void ReadWeightsFromXML(void *wghtnode)
read weights of sub-classifiers of MethodCategory from xml weight file
 
void Train(void)
train all sub-classifiers
 
Virtual base class for combining several TMVA method.
 
Ranking for variables in method (implementation)
 
Singleton class for Global types used by TMVA.
 
static Types & Instance()
The single instance of "Types" if existing already, or create it (Singleton)
 
Class for type info of MVA input variable.
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
A TTree represents a columnar dataset.
 
create variable transformations
 
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)
 
MsgLogger & Endl(MsgLogger &ml)