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());
168 if (dir != 0)
method->SetMethodBaseDir( dir );
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());
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.
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.
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
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)