125 fDataSetManager( NULL ),
132 fMvaEventErrorUpper( 0 ),
150 fDataSetManager( NULL ),
157 fMvaEventErrorUpper( 0 ),
169 for (std::vector<TString>::iterator ivar = inputVars.begin(); ivar != inputVars.end(); ++ivar)
180 fDataSetManager( NULL ),
187 fMvaEventErrorUpper( 0 ),
199 for (std::vector<std::string>::iterator ivar = inputVars.begin(); ivar != inputVars.end(); ++ivar)
210 fDataSetManager( NULL ),
217 fMvaEventErrorUpper( 0 ),
238 fDataSetManager( NULL ),
245 fMvaEventErrorUpper( 0 ),
266 if (
gTools().CheckForSilentOption( GetOptions() )) Log().InhibitOutput();
268 DeclareOptionRef( fVerbose,
"V",
"Verbose flag" );
269 DeclareOptionRef( fColor,
"Color",
"Color flag (default True)" );
270 DeclareOptionRef( fSilent,
"Silent",
"Boolean silent flag (default False)" );
271 DeclareOptionRef( fCalculateError,
"Error",
"Calculates errors (default False)" );
279 delete fDataSetManager;
283 for (
auto it=fMethodMap.begin(); it!=fMethodMap.end(); it++){
294 if (Verbose()) fLogger->SetMinType( kVERBOSE );
305 DataInfo().AddVariable( expression,
"",
"", 0, 0,
'F',
kFALSE ,(
void*)datalink );
312 Log() << kFATAL <<
"Reader::AddVariable( const TString& expression, Int_t* datalink ), this function is deprecated, please provide all variables to the reader as floats" <<
Endl;
314 Log() << kFATAL <<
"Reader::AddVariable( const TString& expression, Int_t* datalink ), this function is deprecated, please provide all variables to the reader as floats" <<
Endl;
315 DataInfo().AddVariable(expression,
"",
"", 0, 0,
'I',
kFALSE, (
void*)datalink );
323 DataInfo().AddSpectator( expression,
"",
"", 0, 0,
'F',
kFALSE ,(
void*)datalink );
331 DataInfo().AddSpectator(expression,
"",
"", 0, 0,
'I',
kFALSE, (
void*)datalink );
339 std::ifstream fin( filename );
341 Log() << kFATAL <<
"<BookMVA> fatal error: "
342 <<
"unable to open input weight file: " << filename <<
Endl;
355 fin.getline(buf,512);
356 while (!
TString(buf).BeginsWith(
"Method")) fin.getline(buf,512);
360 TString methodType = fullMethodName(0,fullMethodName.
Index(
"::"));
361 if (methodType.
Contains(
" ")) methodType = methodType(methodType.
Last(
' ')+1,methodType.
Length());
371 if (fMethodMap.find( methodTag ) != fMethodMap.end())
372 Log() << kFATAL <<
"<BookMVA> method tag \"" << methodTag <<
"\" already exists!" <<
Endl;
374 TString methodType(GetMethodTypeFromFile(weightfile));
376 Log() << kINFO <<
"Booking \"" << methodTag <<
"\" of type \"" << methodType <<
"\" from " << weightfile <<
"." <<
Endl;
383 Log() << kFATAL <<
"Method with type kCategory cannot be casted to MethodCategory. /Reader" <<
Endl;
387 return fMethodMap[methodTag] = method;
400 if (method==0)
return im;
405 Log() << kERROR <<
"Method with type kCategory cannot be casted to MethodCategory. /Reader" <<
Endl;
421 Log() << kINFO <<
"Booked classifier \"" << method->
GetMethodName()
437 if(!method)
return 0;
442 Log() << kFATAL <<
"Method with type kCategory cannot be casted to MethodCategory. /Reader" <<
Endl;
458 Log() << kINFO <<
"Booked classifier \"" << method->
GetMethodName()
471 IMethod* imeth = FindMVA( methodTag );
473 if(meth==0)
return 0;
476 Event* tmpEvent=
new Event(inputVec, DataInfo().GetNVariables());
477 for (
UInt_t i=0; i<inputVec.size(); i++){
479 Log() << kERROR << i <<
"-th variable of the event is NaN --> return MVA value -999, \n that's all I can do, please fix or remove this event." <<
Endl;
502 if(fTmpEvalVec.size() != inputVec.size())
503 fTmpEvalVec.resize(inputVec.size());
505 for (
UInt_t idx=0; idx!=inputVec.size(); idx++ )
506 fTmpEvalVec[idx]=inputVec[idx];
508 return EvaluateMVA( fTmpEvalVec, methodTag, aux );
518 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
519 if (it == fMethodMap.end()) {
520 Log() << kINFO <<
"<EvaluateMVA> unknown classifier in map; "
521 <<
"you looked for \"" << methodTag <<
"\" within available methods: " <<
Endl;
522 for (it = fMethodMap.begin(); it!=fMethodMap.end(); ++it) Log() <<
"--> " << it->first <<
Endl;
523 Log() <<
"Check calling string" << kFATAL <<
Endl;
526 else method = it->second;
531 Log() << kFATAL << methodTag <<
" is not a method" <<
Endl;
538 Log() << kERROR << i <<
"-th variable of the event is NaN --> return MVA value -999, \n that's all I can do, please fix or remove this event." <<
Endl;
542 return this->EvaluateMVA( kl, aux );
558 return method->
GetMvaValue( (fCalculateError?&fMvaEventError:0),
559 (fCalculateError?&fMvaEventErrorUpper:0) );
569 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
570 if (it == fMethodMap.end()) {
571 Log() << kINFO <<
"<EvaluateMVA> unknown method in map; "
572 <<
"you looked for \"" << methodTag <<
"\" within available methods: " <<
Endl;
573 for (it = fMethodMap.begin(); it!=fMethodMap.end(); ++it) Log() <<
"--> " << it->first <<
Endl;
574 Log() <<
"Check calling string" << kFATAL <<
Endl;
576 else method = it->second;
581 Log() << kFATAL << methodTag <<
" is not a method" <<
Endl;
587 Log() << kERROR << i <<
"-th variable of the event is NaN, \n regression values might evaluate to .. what do I know. \n sorry this warning is all I can do, please fix or remove this event." <<
Endl;
591 return this->EvaluateRegression( kl, aux );
604 Log() << kERROR << i <<
"-th variable of the event is NaN, \n regression values might evaluate to .. what do I know. \n sorry this warning is all I can do, please fix or remove this event." <<
Endl;
617 return EvaluateRegression(methodTag, aux).at(tgtNumber);
619 catch (std::out_of_range &) {
620 Log() << kWARNING <<
"Regression could not be evaluated for target-number " << tgtNumber <<
Endl;
634 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
635 if (it == fMethodMap.end()) {
636 Log() << kINFO <<
"<EvaluateMVA> unknown method in map; "
637 <<
"you looked for \"" << methodTag <<
"\" within available methods: " <<
Endl;
638 for (it = fMethodMap.begin(); it!=fMethodMap.end(); ++it) Log() <<
"--> " << it->first <<
Endl;
639 Log() <<
"Check calling string" << kFATAL <<
Endl;
641 else method = it->second;
646 Log() << kFATAL << methodTag <<
" is not a method" <<
Endl;
653 Log() << kERROR << i <<
"-th variable of the event is NaN, \n regression values might evaluate to .. what do I know. \n sorry this warning is all I can do, please fix or remove this event." <<
Endl;
657 return this->EvaluateMulticlass( kl, aux );
670 Log() << kERROR << i <<
"-th variable of the event is NaN, \n regression values might evaluate to .. what do I know. \n sorry this warning is all I can do, please fix or remove this event." <<
Endl;
683 return EvaluateMulticlass(methodTag, aux).at(clsNumber);
685 catch (std::out_of_range &) {
686 Log() << kWARNING <<
"Multiclass could not be evaluated for class-number " << clsNumber <<
Endl;
697 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
698 if (it != fMethodMap.end())
return it->second;
699 Log() << kERROR <<
"Method " << methodTag <<
" not found!" <<
Endl;
709 return dynamic_cast<MethodCuts*
>(FindMVA(methodTag));
718 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
719 if (it == fMethodMap.end()) {
720 for (it = fMethodMap.begin(); it!=fMethodMap.end(); ++it) Log() <<
"M" << it->first <<
Endl;
721 Log() << kFATAL <<
"<EvaluateMVA> unknown classifier in map: " << method <<
"; "
722 <<
"you looked for " << methodTag<<
" while the available methods are : " <<
Endl;
724 else method = it->second;
733 Log() << kERROR << i <<
"-th variable of the event is NaN --> return MVA value -999, \n that's all I can do, please fix or remove this event." <<
Endl;
738 if (mvaVal == -9999999) mvaVal = kl->
GetMvaValue();
740 return kl->
GetProba( mvaVal, ap_sig );
749 std::map<TString, IMethod*>::iterator it = fMethodMap.find( methodTag );
750 if (it == fMethodMap.end()) {
751 for (it = fMethodMap.begin(); it!=fMethodMap.end(); ++it) Log() <<
"M" << it->first <<
Endl;
752 Log() << kFATAL <<
"<EvaluateMVA> unknown classifier in map: \"" << method <<
"\"; "
753 <<
"you looked for \"" << methodTag<<
"\" while the available methods are : " <<
Endl;
755 else method = it->second;
764 Log() << kERROR << i <<
"-th variable of the event is NaN --> return MVA value -999, \n that's all I can do, please fix or remove this event." <<
Endl;
769 if (mvaVal == -9999999) mvaVal = kl->
GetMvaValue();
783 size_t ipos = 0,
f = 0;
784 while (
f != varNames.length()) {
785 f = varNames.find(
':', ipos );
786 if (
f > varNames.length())
f = varNames.length();
787 std::string subs = varNames.substr( ipos,
f-ipos ); ipos =
f+1;
788 DataInfo().AddVariable( subs.c_str() );
801 for (
int i=0; i<
n+1 ; i++) {
802 format.
Append(varNames(i));
803 if (varNames(i) ==
':' || i ==
n) {
807 DataInfo().AddVariable( format_obj );
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
void SetUseColor(Bool_t uc)
void SetConfigName(const char *n)
virtual void ParseOptions()
options parser
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
Class that contains all the data information.
DataSetInfo & AddDataSetInfo(DataSetInfo &dsi)
stores a copy of the dataset info object
Float_t GetValue(UInt_t ivar) const
return value of i'th variable
UInt_t GetNVariables() const
accessor to the number of variables
Interface for all concrete MVA method implementations.
Virtual base Class for all MVA method.
const std::vector< Float_t > & GetRegressionValues(const TMVA::Event *const ev)
virtual void DeclareCompatibilityOptions()
options that are used ONLY for the READER to ensure backward compatibility they are hence without any...
TString GetMethodTypeName() const
virtual Double_t GetProba(const Event *ev)
virtual const std::vector< Float_t > & GetMulticlassValues()
void SetupMethod()
setup of methods
const TString & GetMethodName() const
const Event * GetEvent() const
void ReadStateFromXMLString(const char *xmlstr)
for reading from memory
void ReadStateFromFile()
Function to write options and weights to file.
virtual Double_t GetMvaValue(Double_t *errLower=0, Double_t *errUpper=0)=0
virtual Double_t GetRarity(Double_t mvaVal, Types::ESBType reftype=Types::kBackground) const
compute rarity:
Types::EMVA GetMethodType() const
virtual void CheckSetup()
check may be overridden by derived class (sometimes, eg, fitters are used which can only be implement...
Class for categorizing the phase space.
DataSetManager * fDataSetManager
Multivariate optimisation of signal efficiency for given background efficiency, applying rectangular ...
void SetTestSignalEfficiency(Double_t effS)
ostringstream derivative to redirect and format output
const std::vector< Float_t > & EvaluateRegression(const TString &methodTag, Double_t aux=0)
evaluates MVA for given set of input variables
virtual const char * GetName() const
Returns name of object.
Double_t EvaluateMVA(const std::vector< Float_t > &, const TString &methodTag, Double_t aux=0)
Evaluate a std::vector<float> of input data for a given method The parameter aux is obligatory for th...
Double_t GetRarity(const TString &methodTag, Double_t mvaVal=-9999999)
evaluates the MVA's rarity
IMethod * FindMVA(const TString &methodTag)
return pointer to method with tag "methodTag"
void Init(void)
default initialisation (no member variables)
Double_t GetProba(const TString &methodTag, Double_t ap_sig=0.5, Double_t mvaVal=-9999999)
evaluates probability of MVA for given set of input variables
MethodCuts * FindCutsMVA(const TString &methodTag)
special function for Cuts to avoid dynamic_casts in ROOT macros, which are not properly handled by CI...
TString GetMethodTypeFromFile(const TString &filename)
read the method type from the file
DataSetManager * fDataSetManager
IMethod * BookMVA(const TString &methodTag, const TString &weightfile)
read method name from weight file
Reader(const TString &theOption="", Bool_t verbose=0)
constructor
const std::vector< Float_t > & EvaluateMulticlass(const TString &methodTag, Double_t aux=0)
evaluates MVA for given set of input variables
DataInputHandler fDataInputHandler
void DecodeVarNames(const std::string &varNames)
decodes "name1:name2:..." form
void DeclareOptions()
declaration of configuration options
void AddSpectator(const TString &expression, Float_t *)
Add a float spectator or expression to the reader.
void AddVariable(const TString &expression, Float_t *)
Add a float variable or expression to the reader.
virtual ~Reader(void)
destructor
const DataSetInfo & DataInfo() const
static Types & Instance()
the the single instance of "Types" if existing already, or create it (Singleton)
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TString & ReplaceAll(const TString &s1, const TString &s2)
void Resize(Ssiz_t n)
Resize the string. Truncate or add blanks as necessary.
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
void FreeDoc(XMLDocPointer_t xmldoc)
frees allocated document data and deletes document itself
XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc)
returns root node of document
XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf=100000)
Parses content of file and tries to produce xml structures.
MsgLogger & Endl(MsgLogger &ml)