58 fDataSetManager(NULL),
61 fNeedsRebuilding(
kTRUE ),
66 fNormalization(
"NONE" ),
68 fTrainingSumSignalWeights(-1),
69 fTrainingSumBackgrWeights(-1),
70 fTestingSumSignalWeights (-1),
71 fTestingSumBackgrWeights (-1),
75 fTargetsForMulticlass(0),
76 fLogger( new
MsgLogger(
"DataSetInfo", kINFO) )
87 for(
UInt_t i=0, iEnd = fClasses.size(); i<iEnd; ++i) {
88 if (fClasses[i])
delete fClasses[i];
91 if (fTargetsForMulticlass)
delete fTargetsForMulticlass;
100 if(fDataSet) {
delete fDataSet; fDataSet=
nullptr; }
108 fLogger->SetMinType(t);
115 ClassInfo* theClass = GetClassInfo(className);
116 if (theClass)
return theClass;
119 fClasses.push_back(
new ClassInfo(className) );
120 fClasses.back()->
SetNumber(fClasses.size()-1);
124 Log() << kHEADER <<
Form(
"[%s] : ",fName.Data()) <<
"Added class \"" << className <<
"\""<<
Endl;
126 Log() << kDEBUG <<
"\t with internal class number " << fClasses.back()->GetNumber() <<
Endl;
129 if (className ==
"Signal") fSignalClass = fClasses.size()-1;
131 return fClasses.back();
138 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
139 if ((*it)->GetName() ==
name)
return (*it);
149 return fClasses.at(cls);
160 for (
UInt_t cls = 0; cls < GetNClasses() ; cls++) {
161 Log() << kINFO <<
Form(
"Dataset[%s] : ",fName.Data()) <<
"Class index : " << cls <<
" name : " << GetClassInfo(cls)->GetName() <<
Endl;
169 return (ev->
GetClass() == fSignalClass);
176 if( !fTargetsForMulticlass ) fTargetsForMulticlass =
new std::vector<Float_t>( GetNClasses() );
178 fTargetsForMulticlass->assign( GetNClasses(), 0.0 );
179 fTargetsForMulticlass->at( ev->
GetClass() ) = 1.0;
180 return fTargetsForMulticlass;
189 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
199 ClassInfo* ptr = GetClassInfo(className);
217 fVariables.push_back(
VariableInfo( regexpr, title, unit,
218 fVariables.size()+1, varType, external, min, max, normalized ));
219 fNeedsRebuilding =
kTRUE;
220 return fVariables.back();
228 fNeedsRebuilding =
kTRUE;
229 return fVariables.back();
241 fVariables.reserve(fVariables.size() +
size);
242 for (
int i = 0; i <
size; ++i) {
245 fVariables.emplace_back(regexpr, newTitle, unit, fVariables.size() + 1, varType, external, min, max, normalized);
247 fVariables.back().SetBit(kIsArrayVariable);
249 fVariables.back().SetInternalName(newVarName);
252 if (varType ==
'F') {
253 float *ptr = (
float *)external;
255 external = (
void *)ptr;
256 }
else if (varType ==
'I') {
257 int *ptr = (
int *)external;
259 external = (
void *)ptr;
261 Error(
"TMVA::DataSetInfo::AddVariablesArray",
"'%c' variable type is not supported", varType);
264 fVarArrays[regexpr] =
size;
265 fNeedsRebuilding =
kTRUE;
283 fTargets.size()+1,
type, external, min,
285 fNeedsRebuilding =
kTRUE;
286 return fTargets.back();
294 fNeedsRebuilding =
kTRUE;
295 return fTargets.back();
306 Bool_t normalized,
void* external )
310 fSpectators.push_back(
VariableInfo( regexpr, title, unit,
311 fSpectators.size()+1,
type, external, min, max, normalized ));
312 fNeedsRebuilding =
kTRUE;
313 return fSpectators.back();
321 fNeedsRebuilding =
kTRUE;
322 return fSpectators.back();
330 for (
UInt_t ivar=0; ivar<GetNVariables(); ivar++)
331 if (var == GetVariableInfo(ivar).GetInternalName())
return ivar;
333 for (
UInt_t ivar=0; ivar<GetNVariables(); ivar++)
334 Log() << kINFO <<
Form(
"Dataset[%s] : ",fName.Data()) << GetVariableInfo(ivar).GetInternalName() <<
Endl;
336 Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
"<FindVarIndex> Variable \'" << var <<
"\' not found." <<
Endl;
348 if (className !=
"") {
354 if (fClasses.empty()) {
355 Log() << kWARNING <<
Form(
"Dataset[%s] : ",fName.Data()) <<
"No classes registered yet, cannot specify weight expression!" <<
Endl;
357 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
358 (*it)->SetWeight( expr );
367 GetClassInfo(className)->SetCorrelationMatrix(matrix);
375 if (className ==
"") {
376 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
377 (*it)->SetCut( cut );
391 if (className ==
"") {
392 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
393 const TCut& oldCut = (*it)->GetCut();
394 (*it)->SetCut( oldCut+cut );
408 std::vector<TString> vNames;
409 std::vector<TMVA::VariableInfo>::const_iterator viIt = GetVariableInfos().begin();
410 for(;viIt != GetVariableInfos().end(); ++viIt) vNames.push_back( (*viIt).GetInternalName() );
423 <<
"Correlation matrix (" << className <<
"):" <<
Endl;
435 const UInt_t nvar = GetNVariables();
440 for (
UInt_t ivar=0; ivar<nvar; ivar++) {
441 for (
UInt_t jvar=0; jvar<nvar; jvar++) {
442 (*tm)(ivar, jvar) = (*
m)(ivar,jvar);
447 h2->SetNameTitle( hName, hTitle );
449 for (
UInt_t ivar=0; ivar<nvar; ivar++) {
450 h2->GetXaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
451 h2->GetYaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
457 for (
UInt_t ibin=1; ibin<=nvar; ibin++) {
458 for (
UInt_t jbin=1; jbin<=nvar; jbin++) {
459 h2->SetBinContent( ibin, jbin,
Int_t(h2->GetBinContent( ibin, jbin )) );
464 const Float_t labelSize = 0.055;
466 h2->GetXaxis()->SetLabelSize( labelSize );
467 h2->GetYaxis()->SetLabelSize( labelSize );
468 h2->SetMarkerSize( 1.5 );
469 h2->SetMarkerColor( 0 );
470 h2->LabelsOption(
"d" );
471 h2->SetLabelOffset( 0.011 );
472 h2->SetMinimum( -100.0 );
473 h2->SetMaximum( +100.0 );
485 Log() << kDEBUG <<
Form(
"Dataset[%s] : ",fName.Data()) <<
"Created correlation matrix as 2D histogram: " << h2->GetName() <<
Endl;
495 if (fDataSet==0 || fNeedsRebuilding) {
496 if (fNeedsRebuilding) Log() << kINFO <<
"Rebuilding Dataset " << fName <<
Endl;
500 if( !fDataSetManager )
501 Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
"DataSetManager has not been set in DataSetInfo (GetDataSet() )." <<
Endl;
502 fDataSet = fDataSetManager->CreateDataSet(GetName());
504 fNeedsRebuilding =
kFALSE;
514 return fSpectators.size();
516 for(std::vector<VariableInfo>::const_iterator spit=fSpectators.begin(); spit!=fSpectators.end(); ++spit) {
517 if(spit->GetVarType()!=
'C') nsp++;
527 for (
UInt_t cl = 0; cl < GetNClasses(); cl++) {
528 if (
TString(GetClassInfo(cl)->GetName()).
Length() > maxL) maxL =
TString(GetClassInfo(cl)->GetName()).Length();
539 for (
UInt_t i = 0; i < GetNVariables(); i++) {
540 if (
TString(GetVariableInfo(i).GetExpression()).
Length() > maxL) maxL =
TString(GetVariableInfo(i).GetExpression()).Length();
551 for (
UInt_t i = 0; i < GetNTargets(); i++) {
552 if (
TString(GetTargetInfo(i).GetExpression()).
Length() > maxL) maxL =
TString(GetTargetInfo(i).GetExpression()).Length();
561 if (fTrainingSumSignalWeights<0) Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
" asking for the sum of training signal event weights which is not initialized yet" <<
Endl;
562 return fTrainingSumSignalWeights;
568 if (fTrainingSumBackgrWeights<0) Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
" asking for the sum of training backgr event weights which is not initialized yet" <<
Endl;
569 return fTrainingSumBackgrWeights;
575 if (fTestingSumSignalWeights<0) Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
" asking for the sum of testing signal event weights which is not initialized yet" <<
Endl;
576 return fTestingSumSignalWeights ;
582 if (fTestingSumBackgrWeights<0) Log() << kFATAL <<
Form(
"Dataset[%s] : ",fName.Data()) <<
" asking for the sum of testing backgr event weights which is not initialized yet" <<
Endl;
583 return fTestingSumBackgrWeights ;
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
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
TMatrixT< Float_t > TMatrixF
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
A specialized string object used for TTree selections.
2-D histogram with a float per channel (see TH1 documentation)
Service class for 2-D histogram classes.
Class that contains all the information of a class.
const TMatrixD * GetCorrelationMatrix() const
const TCut & GetCut() const
void SetCut(const TCut &cut)
void SetWeight(const TString &weight)
void SetNumber(const UInt_t index)
UInt_t GetNSpectators(bool all=kTRUE) const
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=nullptr)
add a variable (can be a complex expression) to the set of variables used in the MV analysis
ClassInfo * AddClass(const TString &className)
const TMatrixD * CorrelationMatrix(const TString &className) const
Int_t GetTargetNameMaxLength() const
virtual ~DataSetInfo()
destructor
Double_t GetTestingSumBackgrWeights()
void SetMsgType(EMsgType t) const
DataSet * GetDataSet() const
returns data set
DataSetInfo(const TString &name="Default")
constructor
TH2 * CreateCorrelationMatrixHist(const TMatrixD *m, const TString &hName, const TString &hTitle) const
std::vector< TString > GetListOfVariables() const
returns list of variables
ClassInfo * GetClassInfo(Int_t clNum) const
Double_t GetTrainingSumSignalWeights()
void PrintClasses() const
Int_t GetClassNameMaxLength() const
Double_t GetTrainingSumBackgrWeights()
VariableInfo & AddTarget(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, Bool_t normalized=kTRUE, void *external=nullptr)
add a variable (can be a complex expression) to the set of variables used in the MV analysis
void PrintCorrelationMatrix(const TString &className)
calculates the correlation matrices for signal and background, prints them to standard output,...
void SetCut(const TCut &cut, const TString &className)
set the cut for the classes
Double_t GetTestingSumSignalWeights()
Int_t FindVarIndex(const TString &) const
find variable by name
Int_t GetVariableNameMaxLength() const
Bool_t IsSignal(const Event *ev) 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=nullptr)
add a spectator (can be a complex expression) to the set of spectator variables used in the MV analys...
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...
void AddCut(const TCut &cut, const TString &className)
set the cut for the classes
void AddVariablesArray(const TString &expression, Int_t size, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0, char type='F', Bool_t normalized=kTRUE, void *external=nullptr)
add an array of variables identified by an expression corresponding to an array entry in the tree
std::vector< Float_t > * GetTargetsForMulticlass(const Event *ev)
void SetCorrelationMatrix(const TString &className, TMatrixD *matrix)
void ClearDataSet() const
Class that contains all the data information.
ostringstream derivative to redirect and format output
Class for type info of MVA input variable.
Mother of all ROOT objects.
TString & ReplaceAll(const TString &s1, const TString &s2)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
MsgLogger & Endl(MsgLogger &ml)