CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
BaseMVAValueMapProducer< T > Class Template Reference

#include <PhysicsTools/PatAlgos/plugins/BaseMVAValueMapProducer.cc>

Inheritance diagram for BaseMVAValueMapProducer< T >:
edm::stream::EDProducer<>

Public Member Functions

 BaseMVAValueMapProducer (const edm::ParameterSet &iConfig)
 
void setValue (const std::string var, float val)
 
 ~BaseMVAValueMapProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
static edm::ParameterSetDescription getDescription ()
 

Private Member Functions

void beginStream (edm::StreamID) override
 
void endStream () override
 
virtual void fillAdditionalVariables (const T &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
virtual void readAdditionalCollections (edm::Event &, const edm::EventSetup &)
 to be implemented in derived classes, filling values for additional variables More...
 

Private Attributes

std::string backend_
 
std::vector< std::pair< std::string, StringObjectFunction< T, true > > > funcs_
 
tensorflow::GraphDef * graph_
 
std::string inputTensorName_
 
bool isClassifier_
 
std::string name_
 
std::vector< StringObjectFunction< std::vector< float > > > output_formulas_
 
std::vector< std::string > output_names_
 
std::string outputTensorName_
 
std::map< std::string, size_t > positions_
 
TMVA::Reader * reader_
 
tensorflow::Session * session_
 
std::string singleThreadPool_
 
edm::EDGetTokenT< edm::View< T > > src_
 
bool tf_
 
bool tmva_
 
std::vector< float > values_
 
std::vector< std::string > variablesOrder_
 
std::string weightfilename_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

template<typename T>
class BaseMVAValueMapProducer< T >

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 56 of file BaseMVAValueMapProducer.h.

Constructor & Destructor Documentation

◆ BaseMVAValueMapProducer()

template<typename T>
BaseMVAValueMapProducer< T >::BaseMVAValueMapProducer ( const edm::ParameterSet iConfig)
inlineexplicit

Definition at line 58 of file BaseMVAValueMapProducer.h.

59  : src_(consumes<edm::View<T>>(iConfig.getParameter<edm::InputTag>("src"))),
60  variablesOrder_(iConfig.getParameter<std::vector<std::string>>("variablesOrder")),
61  singleThreadPool_(iConfig.getParameter<std::string>("singleThreadPool")),
62  name_(iConfig.getParameter<std::string>("name")),
63  backend_(iConfig.getParameter<std::string>("backend")),
64  weightfilename_(iConfig.getParameter<edm::FileInPath>("weightFile").fullPath()),
65  isClassifier_(iConfig.getParameter<bool>("isClassifier")),
66  tmva_(backend_ == "TMVA"),
67  tf_(backend_ == "TF") {
68  if (tmva_)
69  reader_ = new TMVA::Reader();
70  edm::ParameterSet const& varsPSet = iConfig.getParameter<edm::ParameterSet>("variables");
71  for (const std::string& vname : varsPSet.getParameterNamesForType<std::string>()) {
72  funcs_.emplace_back(
73  std::pair<std::string, StringObjectFunction<T, true>>(vname, varsPSet.getParameter<std::string>(vname)));
74  }
75 
76  values_.resize(variablesOrder_.size());
77  size_t i = 0;
78  for (const auto& v : variablesOrder_) {
79  positions_[v] = i;
80  if (tmva_)
81  reader_->AddVariable(v, (&values_.front()) + i);
82  i++;
83  }
84  // reader_.BookMVA(name_,iConfig.getParameter<edm::FileInPath>("weightFile").fullPath() );
85  if (tmva_) {
87  } else if (tf_) {
90  inputTensorName_ = iConfig.getParameter<std::string>("inputTensorName");
91  outputTensorName_ = iConfig.getParameter<std::string>("outputTensorName");
92  output_names_ = iConfig.getParameter<std::vector<std::string>>("outputNames");
93  for (const auto& s : iConfig.getParameter<std::vector<std::string>>("outputFormulas")) {
94  output_formulas_.push_back(StringObjectFunction<std::vector<float>>(s));
95  }
96  size_t nThreads = iConfig.getParameter<unsigned int>("nThreads");
98 
99  } else {
100  throw cms::Exception("ConfigError") << "Only 'TF' and 'TMVA' backends are supported\n";
101  }
102  if (tmva_)
103  produces<edm::ValueMap<float>>();
104  else {
105  for (const auto& n : output_names_) {
106  produces<edm::ValueMap<float>>(n);
107  }
108  }
109  }

◆ ~BaseMVAValueMapProducer()

template<typename T>
BaseMVAValueMapProducer< T >::~BaseMVAValueMapProducer ( )
inlineoverride

Definition at line 110 of file BaseMVAValueMapProducer.h.

110 {}

Member Function Documentation

◆ beginStream()

template<typename T>
void BaseMVAValueMapProducer< T >::beginStream ( edm::StreamID  )
inlineoverrideprivate

Definition at line 121 of file BaseMVAValueMapProducer.h.

121 {};

◆ endStream()

template<typename T>
void BaseMVAValueMapProducer< T >::endStream ( )
inlineoverrideprivate

Definition at line 123 of file BaseMVAValueMapProducer.h.

123 {};

◆ fillAdditionalVariables()

template<typename T>
virtual void BaseMVAValueMapProducer< T >::fillAdditionalVariables ( const T )
inlineprivatevirtual

Reimplemented in BJetEnergyRegressionMVA.

Definition at line 127 of file BaseMVAValueMapProducer.h.

127 {}

◆ fillDescriptions()

template<typename T >
void BaseMVAValueMapProducer< T >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 225 of file BaseMVAValueMapProducer.h.

225  {
228  if (typeid(T) == typeid(pat::Jet))
229  modname += "Jet";
230  else if (typeid(T) == typeid(pat::Muon))
231  modname += "Muon";
232  else if (typeid(T) == typeid(pat::Electron))
233  modname += "Ele";
234  modname += "BaseMVAValueMapProducer";
235  descriptions.add(modname, desc);
236 }

◆ getDescription()

template<typename T >
edm::ParameterSetDescription BaseMVAValueMapProducer< T >::getDescription ( )
static

Definition at line 201 of file BaseMVAValueMapProducer.h.

201  {
203  desc.add<edm::InputTag>("src")->setComment("input physics object collection");
204  desc.add<std::vector<std::string>>("variablesOrder")->setComment("ordered list of MVA input variable names");
205  desc.add<std::string>("name")->setComment("output score variable name");
206  desc.add<bool>("isClassifier")->setComment("is a classifier discriminator");
208  variables.setAllowAnything();
209  desc.add<edm::ParameterSetDescription>("variables", variables)->setComment("list of input variable definitions");
210  desc.add<edm::FileInPath>("weightFile")->setComment("xml weight file");
211  desc.add<std::string>("backend", "TMVA")->setComment("TMVA or TF");
212  desc.add<std::string>("inputTensorName", "")->setComment("Name of tensorflow input tensor in the model");
213  desc.add<std::string>("outputTensorName", "")->setComment("Name of tensorflow output tensor in the model");
214  desc.add<std::vector<std::string>>("outputNames", std::vector<std::string>())
215  ->setComment("Names of the output values to be used in the output valuemap");
216  desc.add<std::vector<std::string>>("outputFormulas", std::vector<std::string>())
217  ->setComment("Formulas to be used to post process the output");
218  desc.add<unsigned int>("nThreads", 1)->setComment("number of threads");
219  desc.add<std::string>("singleThreadPool", "no_threads");
220 
221  return desc;
222 }

Referenced by BJetEnergyRegressionMVA::fillDescriptions().

◆ produce()

template<typename T >
void BaseMVAValueMapProducer< T >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 152 of file BaseMVAValueMapProducer.h.

152  {
154  iEvent.getByToken(src_, src);
156  std::vector<std::vector<float>> mvaOut((tmva_) ? 1 : output_names_.size());
157  for (auto& v : mvaOut)
158  v.reserve(src->size());
159 
160  for (auto const& o : *src) {
161  for (auto const& p : funcs_) {
162  setValue(p.first, p.second(o));
163  }
165  if (tmva_) {
166  mvaOut[0].push_back(isClassifier_ ? reader_->EvaluateMVA(name_) : reader_->EvaluateRegression(name_)[0]);
167  }
168  if (tf_) {
169  //currently support only one input sensor to reuse the TMVA like config
170  tensorflow::TensorShape input_size{1, (long long int)positions_.size()};
171  tensorflow::NamedTensorList input_tensors;
172  input_tensors.resize(1);
173  input_tensors[0] =
174  tensorflow::NamedTensor(inputTensorName_, tensorflow::Tensor(tensorflow::DT_FLOAT, input_size));
175  for (size_t j = 0; j < values_.size(); j++) {
176  input_tensors[0].second.matrix<float>()(0, j) = values_[j];
177  }
178  std::vector<tensorflow::Tensor> outputs;
179  std::vector<std::string> names;
180  names.push_back(outputTensorName_);
182  std::vector<float> tmpOut;
183  for (int k = 0; k < outputs.at(0).matrix<float>().dimension(1); k++)
184  tmpOut.push_back(outputs.at(0).matrix<float>()(0, k));
185  for (size_t k = 0; k < output_names_.size(); k++)
186  mvaOut[k].push_back(output_formulas_[k](tmpOut));
187  }
188  }
189  size_t k = 0;
190  for (auto& m : mvaOut) {
191  std::unique_ptr<edm::ValueMap<float>> mvaV(new edm::ValueMap<float>());
193  filler.insert(src, m.begin(), m.end());
194  filler.fill();
195  iEvent.put(std::move(mvaV), (tmva_) ? "" : output_names_[k]);
196  k++;
197  }
198 }

◆ readAdditionalCollections()

template<typename T>
virtual void BaseMVAValueMapProducer< T >::readAdditionalCollections ( edm::Event ,
const edm::EventSetup  
)
inlineprivatevirtual

to be implemented in derived classes, filling values for additional variables

Reimplemented in BJetEnergyRegressionMVA.

Definition at line 126 of file BaseMVAValueMapProducer.h.

126 {}

◆ setValue()

template<typename T>
void BaseMVAValueMapProducer< T >::setValue ( const std::string  var,
float  val 
)
inline

Definition at line 112 of file BaseMVAValueMapProducer.h.

112  {
113  if (positions_.find(var) != positions_.end())
115  }

Member Data Documentation

◆ backend_

template<typename T>
std::string BaseMVAValueMapProducer< T >::backend_
private

Definition at line 140 of file BaseMVAValueMapProducer.h.

◆ funcs_

template<typename T>
std::vector<std::pair<std::string, StringObjectFunction<T, true> > > BaseMVAValueMapProducer< T >::funcs_
private

◆ graph_

template<typename T>
tensorflow::GraphDef* BaseMVAValueMapProducer< T >::graph_
private

◆ inputTensorName_

template<typename T>
std::string BaseMVAValueMapProducer< T >::inputTensorName_
private

◆ isClassifier_

template<typename T>
bool BaseMVAValueMapProducer< T >::isClassifier_
private

Definition at line 142 of file BaseMVAValueMapProducer.h.

◆ name_

template<typename T>
std::string BaseMVAValueMapProducer< T >::name_
private

◆ output_formulas_

template<typename T>
std::vector<StringObjectFunction<std::vector<float> > > BaseMVAValueMapProducer< T >::output_formulas_
private

◆ output_names_

template<typename T>
std::vector<std::string> BaseMVAValueMapProducer< T >::output_names_
private

◆ outputTensorName_

template<typename T>
std::string BaseMVAValueMapProducer< T >::outputTensorName_
private

◆ positions_

template<typename T>
std::map<std::string, size_t> BaseMVAValueMapProducer< T >::positions_
private

◆ reader_

template<typename T>
TMVA::Reader* BaseMVAValueMapProducer< T >::reader_
private

◆ session_

template<typename T>
tensorflow::Session* BaseMVAValueMapProducer< T >::session_
private

◆ singleThreadPool_

template<typename T>
std::string BaseMVAValueMapProducer< T >::singleThreadPool_
private

Definition at line 137 of file BaseMVAValueMapProducer.h.

◆ src_

template<typename T>
edm::EDGetTokenT<edm::View<T> > BaseMVAValueMapProducer< T >::src_
private

Definition at line 129 of file BaseMVAValueMapProducer.h.

◆ tf_

template<typename T>
bool BaseMVAValueMapProducer< T >::tf_
private

◆ tmva_

template<typename T>
bool BaseMVAValueMapProducer< T >::tmva_
private

◆ values_

template<typename T>
std::vector<float> BaseMVAValueMapProducer< T >::values_
private

◆ variablesOrder_

template<typename T>
std::vector<std::string> BaseMVAValueMapProducer< T >::variablesOrder_
private

◆ weightfilename_

template<typename T>
std::string BaseMVAValueMapProducer< T >::weightfilename_
private
BaseMVAValueMapProducer::output_names_
std::vector< std::string > output_names_
Definition: BaseMVAValueMapProducer.h:147
tensorflow::createSession
Session * createSession(SessionOptions &sessionOptions)
Definition: TensorFlow.cc:85
pat::helper::ParametrizationHelper::dimension
uint32_t dimension(pat::CandKinResolution::Parametrization parametrization)
Returns the number of free parameters in a parametrization (3 or 4)
Definition: ParametrizationHelper.h:12
BaseMVAValueMapProducer::readAdditionalCollections
virtual void readAdditionalCollections(edm::Event &, const edm::EventSetup &)
to be implemented in derived classes, filling values for additional variables
Definition: BaseMVAValueMapProducer.h:126
BaseMVAValueMapProducer::backend_
std::string backend_
Definition: BaseMVAValueMapProducer.h:140
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
StringObjectFunction< T, true >
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
BaseMVAValueMapProducer::output_formulas_
std::vector< StringObjectFunction< std::vector< float > > > output_formulas_
Definition: BaseMVAValueMapProducer.h:148
L1TEGammaDiff_cfi.variables
variables
Definition: L1TEGammaDiff_cfi.py:5
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
tensorflow::NamedTensor
std::pair< std::string, Tensor > NamedTensor
Definition: TensorFlow.h:29
BaseMVAValueMapProducer::setValue
void setValue(const std::string var, float val)
Definition: BaseMVAValueMapProducer.h:112
BaseMVAValueMapProducer::values_
std::vector< float > values_
Definition: BaseMVAValueMapProducer.h:133
PatBasicFWLiteJetAnalyzer_Selector_cfg.outputs
outputs
Definition: PatBasicFWLiteJetAnalyzer_Selector_cfg.py:48
BaseMVAValueMapProducer::outputTensorName_
std::string outputTensorName_
Definition: BaseMVAValueMapProducer.h:146
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
BaseMVAValueMapProducer::tmva_
bool tmva_
Definition: BaseMVAValueMapProducer.h:143
pat::Muon
Analysis-level muon class.
Definition: Muon.h:51
findQualityFiles.v
v
Definition: findQualityFiles.py:179
BaseMVAValueMapProducer::inputTensorName_
std::string inputTensorName_
Definition: BaseMVAValueMapProducer.h:145
edm::Handle
Definition: AssociativeIterator.h:50
BaseMVAValueMapProducer::graph_
tensorflow::GraphDef * graph_
Definition: BaseMVAValueMapProducer.h:135
BaseMVAValueMapProducer::weightfilename_
std::string weightfilename_
Definition: BaseMVAValueMapProducer.h:141
EcalTangentSkim_cfg.o
o
Definition: EcalTangentSkim_cfg.py:36
BaseMVAValueMapProducer::funcs_
std::vector< std::pair< std::string, StringObjectFunction< T, true > > > funcs_
Definition: BaseMVAValueMapProducer.h:131
trigObjTnPSource_cfi.var
var
Definition: trigObjTnPSource_cfi.py:21
edm::FileInPath
Definition: FileInPath.h:64
alignCSCRings.s
s
Definition: alignCSCRings.py:92
pat::Jet
Analysis-level calorimeter jet class.
Definition: Jet.h:77
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
names
const std::string names[nVars_]
Definition: PhotonIDValueMapProducer.cc:122
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
BaseMVAValueMapProducer::variablesOrder_
std::vector< std::string > variablesOrder_
Definition: BaseMVAValueMapProducer.h:132
dqmdumpme.k
k
Definition: dqmdumpme.py:60
runTheMatrix.nThreads
nThreads
Definition: runTheMatrix.py:344
BaseMVAValueMapProducer::src_
edm::EDGetTokenT< edm::View< T > > src_
Definition: BaseMVAValueMapProducer.h:129
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::View
Definition: CaloClusterFwd.h:14
edm::ParameterSet
Definition: ParameterSet.h:36
BaseMVAValueMapProducer::singleThreadPool_
std::string singleThreadPool_
Definition: BaseMVAValueMapProducer.h:137
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
trigObjTnPSource_cfi.filler
filler
Definition: trigObjTnPSource_cfi.py:21
tensorflow::NamedTensorList
std::vector< NamedTensor > NamedTensorList
Definition: TensorFlow.h:30
createfilelist.int
int
Definition: createfilelist.py:10
edm::ParameterSet::getParameterNamesForType
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:168
iEvent
int iEvent
Definition: GenABIO.cc:224
tensorflow::setLogging
void setLogging(const std::string &level="3")
Definition: TensorFlow.cc:15
BaseMVAValueMapProducer::session_
tensorflow::Session * session_
Definition: BaseMVAValueMapProducer.h:136
tensorflow::loadGraphDef
GraphDef * loadGraphDef(const std::string &pbFile)
Definition: TensorFlow.cc:68
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
BaseMVAValueMapProducer::name_
std::string name_
Definition: BaseMVAValueMapProducer.h:139
heppy_batch.val
val
Definition: heppy_batch.py:351
eostools.move
def move(src, dest)
Definition: eostools.py:511
BaseMVAValueMapProducer::positions_
std::map< std::string, size_t > positions_
Definition: BaseMVAValueMapProducer.h:130
T
long double T
Definition: Basic3DVectorLD.h:48
edm::ValueMap< float >
Exception
Definition: hltDiff.cc:246
reco::details::loadTMVAWeights
TMVA::IMethod * loadTMVAWeights(TMVA::Reader *reader, const std::string &method, const std::string &weightFile, bool verbose=false)
Definition: TMVAZipReader.cc:52
tensorflow::run
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:211
BaseMVAValueMapProducer::getDescription
static edm::ParameterSetDescription getDescription()
Definition: BaseMVAValueMapProducer.h:201
BaseMVAValueMapProducer::tf_
bool tf_
Definition: BaseMVAValueMapProducer.h:144
edm::helper::Filler
Definition: ValueMap.h:22
pat::Electron
Analysis-level electron class.
Definition: Electron.h:51
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
timingPdfMaker.modname
modname
Definition: timingPdfMaker.py:218
edm::InputTag
Definition: InputTag.h:15
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
BaseMVAValueMapProducer::isClassifier_
bool isClassifier_
Definition: BaseMVAValueMapProducer.h:142
BaseMVAValueMapProducer::fillAdditionalVariables
virtual void fillAdditionalVariables(const T &)
Definition: BaseMVAValueMapProducer.h:127
BaseMVAValueMapProducer::reader_
TMVA::Reader * reader_
Definition: BaseMVAValueMapProducer.h:134