7 #include "TMVA/MethodBDT.h"
24 const std::vector<std::string> &
variables,
const std::vector<std::string> & spectators,
bool useGBRForest,
bool useAdaBoost)
27 mReader.reset(
new TMVA::Reader(options.c_str()));
32 for(std::vector<std::string>::const_iterator it = variables.begin(); it!=variables.end(); ++it)
34 mVariables.insert( std::make_pair( *it, std::make_pair( it - variables.begin(), 0. ) ) );
39 for(std::vector<std::string>::const_iterator it = spectators.begin(); it!=spectators.end(); ++it)
41 mSpectators.insert( std::make_pair( *it, std::make_pair( it - spectators.begin(), 0. ) ) );
65 const std::vector<std::string> & spectators,
bool useAdaBoost)
68 for(std::vector<std::string>::const_iterator it = variables.begin(); it!=variables.end(); ++it)
69 mVariables.insert( std::make_pair( *it, std::make_pair( it - variables.begin(), 0. ) ) );
72 for(std::vector<std::string>::const_iterator it = spectators.begin(); it!=spectators.end(); ++it)
73 mSpectators.insert( std::make_pair( *it, std::make_pair( it - spectators.begin(), 0. ) ) );
85 const std::vector<std::string> &
variables,
const std::vector<std::string> & spectators,
bool useAdaBoost)
106 if (inputs.count(it->first)>0)
107 it->second.second = inputs.at(it->first);
109 edm::LogError(
"MissingInputVariable") <<
"Input variable " << it->first <<
" is missing from the list of inputs. The returned discriminator value might not be sensible.";
118 if (inputs.count(it->first)>0)
119 it->second.second = inputs.at(it->first);
121 edm::LogError(
"MissingSpectatorVariable") <<
"Spectator variable " << it->first <<
" is missing from the list of inputs. The returned discriminator value might not be sensible.";
137 std::unique_ptr<float[]> vars(
new float[
mVariables.size()]);
142 if (inputs.count(it->first)>0)
143 vars[it->second.first] = inputs.at(it->first);
145 edm::LogError(
"MissingInputVariable") <<
"Input variable " << it->first <<
" is missing from the list of inputs. The returned discriminator value might not be sensible.";
150 value =
mGBRForest->GetAdaBoostClassifier(vars.get());
152 value =
mGBRForest->GetGradBoostClassifier(vars.get());
164 edm::LogError(
"InitializationError") <<
"TMVAEvaluator not properly initialized.";
170 edm::LogError(
"MissingInputs") <<
"Too few inputs provided (" << inputs.size() <<
" provided but " <<
mVariables.size() <<
" input and " <<
mSpectators.size() <<
" spectator variables expected).";
175 edm::LogError(
"MissingInputVariable(s)") <<
"Too few input variables provided (" << inputs.size() <<
" provided but " <<
mVariables.size() <<
" expected).";
182 edm::LogWarning(
"UnsupportedFunctionality") <<
"Use of spectator variables with GBRForest is not supported. Spectator variables will be ignored.";
std::map< std::string, std::pair< size_t, float > > mVariables
void initializeGBRForest(const GBRForest *gbrForest, const std::vector< std::string > &variables, const std::vector< std::string > &spectators, bool useAdaBoost=false)
void initialize(const std::string &options, const std::string &method, const std::string &weightFile, const std::vector< std::string > &variables, const std::vector< std::string > &spectators, bool useGBRForest=false, bool useAdaBoost=false)
std::map< std::string, std::pair< size_t, float > > mSpectators
float evaluateTMVA(const std::map< std::string, float > &inputs, bool useSpectators) const
T const * product() const
TMVA::IMethod * loadTMVAWeights(TMVA::Reader *reader, const std::string &method, const std::string &weightFile, bool verbose=false)
std::unique_ptr< TMVA::Reader > mReader
std::unique_ptr< const GBRForest > mGBRForest
float evaluate(const std::map< std::string, float > &inputs, bool useSpectators=false) const
volatile std::atomic< bool > shutdown_flag false
float evaluateGBRForest(const std::map< std::string, float > &inputs) const
std::unique_ptr< TMVA::IMethod > mIMethod