4 #include <boost/foreach.hpp>
5 #include <boost/bind.hpp>
14 namespace reco {
namespace tau {
17 const std::string& eslabel,
19 name_(name), eslabel_(eslabel), pluginOptions_(pluginOptions) {}
31 const MVAComputerContainer *container = handle.
product();
39 plugin.second->setup(evt, es);
45 typedef std::vector<PhysicsTools::Calibration::Variable> VarList;
51 if (std::strncmp(var.name.c_str(),
"__", 2) != 0) {
60 if (!options.
exists(
"name"))
69 if (options.
exists(
"plugin")) {
70 pluginName = options.
getParameter<std::string>(
"plugin");
74 pluginName, options));
85 std::vector<double> pluginOutput = (
plugin->second)->
operator()(
tau);
87 for(
size_t instance = 0; instance < pluginOutput.size(); ++instance) {
89 std::ostringstream
error;
90 error <<
"A nan was detected in"
91 <<
" the tau MVA variable " <<
id <<
" returning zero instead!"
92 <<
" The PFTau: " << *tau << std::endl;
95 pluginOutput[instance] = 0.0;
100 std::for_each(pluginOutput.begin(), pluginOutput.end(),
T getParameter(std::string const &) const
void setEvent(const edm::Event &evt, const edm::EventSetup &es)
void fillValues(const reco::PFTauRef &tau) const
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::string discPluginName(const std::string &mvaName)
PhysicsTools::Variable::ValueList values_
void addParameter(std::string const &name, T const &value)
double operator()(const PFTauRef &tau) const
edm::ParameterSet pluginOptions_
const PhysicsTools::Variable::ValueList & discriminants(const PFTauRef &tau) const
Container::value_type value_type
RecoTauMVAHelper(const std::string &name, const std::string &eslabel, const edm::ParameterSet &pluginOptions)
void train(const PFTauRef &tau, bool target, double weight=1.0) const
T const * product() const
PhysicsTools::MVAComputerCache computer_
void loadDiscriminantPlugins(const PhysicsTools::Calibration::MVAComputer &computer)
T get(const Candidate &c)