CMS 3D CMS Logo

TauDiscriminantCutMultiplexer.cc
Go to the documentation of this file.
1 /*
2  * TauDiscriminantCutMultiplexerT
3  *
4  * Authors: Evan K. Friis, UW; Sebastian Wozniewski, KIT
5  *
6  * Takes a PFTauDiscriminatorContainer with two raw values: The toMultiplex diescriminator is expected at rawValues[0] and the key (needed by certain discriminators) is expected at rawValues[1].
7  *
8  * The "key" discriminantor is rounded to the nearest integer.
9  *
10  * A set of cuts for different keys on the "toMultiplex" discriminantor is
11  * provided in the config file.
12  *
13  * Both the key and toMultiplex discriminators should map to the same PFTau
14  * collection.
15  *
16  */
17 #include <boost/foreach.hpp>
23 
26 
31 
32 #include "TGraph.h"
33 #include "TFormula.h"
34 #include "TFile.h"
35 
36 template <class TauType, class TauTypeRef, class ParentClass>
37 class TauDiscriminantCutMultiplexerT : public ParentClass {
38 public:
40 
42  reco::SingleTauDiscriminatorContainer discriminate(const TauTypeRef&) const override;
43  void beginEvent(const edm::Event& event, const edm::EventSetup& eventSetup) override;
44 
45  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
46 
47 private:
49 
52 
56  double cutValue_;
58  std::unique_ptr<StringObjectFunction<TauType>> cutVariable_;
59  std::unique_ptr<const TGraph> cutFunction_;
61  int mode_;
62  };
63  typedef std::map<int, std::vector<std::unique_ptr<DiscriminantCutEntry>>> DiscriminantCutMap;
68 
70  std::unique_ptr<const TFormula> mvaOutput_normalization_;
71 
73 
77 
79 };
80 
81 namespace {
82  std::unique_ptr<TFile> openInputFile(const edm::FileInPath& inputFileName) {
83  if (inputFileName.location() == edm::FileInPath::Unknown) {
84  throw cms::Exception("TauDiscriminantCutMultiplexerT::loadObjectFromFile")
85  << " Failed to find File = " << inputFileName << " !!\n";
86  }
87  return std::unique_ptr<TFile>{new TFile(inputFileName.fullPath().data())};
88  }
89 
90  template <typename T>
91  std::unique_ptr<const T> loadObjectFromFile(TFile& inputFile, const std::string& objectName) {
92  const T* object = dynamic_cast<T*>(inputFile.Get(objectName.data()));
93  if (!object)
94  throw cms::Exception("TauDiscriminantCutMultiplexerT::loadObjectFromFile")
95  << " Failed to load Object = " << objectName.data() << " from file = " << inputFile.GetName() << " !!\n";
96  //Need to use TObject::Clone since the type T might be a base class
97  return std::unique_ptr<const T>{static_cast<T*>(object->Clone())};
98  }
99 
100  std::unique_ptr<const TGraph> loadTGraphFromDB(const edm::EventSetup& es,
101  const std::string& graphName,
102  const int& verbosity_ = 0) {
103  if (verbosity_) {
104  std::cout << "<loadTGraphFromDB>:" << std::endl;
105  std::cout << " graphName = " << graphName << std::endl;
106  }
108  es.get<PhysicsTGraphPayloadRcd>().get(graphName, graphPayload);
109  return std::unique_ptr<const TGraph>{new TGraph(*graphPayload.product())};
110  }
111 
112  std::unique_ptr<TFormula> loadTFormulaFromDB(const edm::EventSetup& es,
113  const std::string& formulaName,
114  const TString& newName,
115  const int& verbosity_ = 0) {
116  if (verbosity_) {
117  std::cout << "<loadTFormulaFromDB>:" << std::endl;
118  std::cout << " formulaName = " << formulaName << std::endl;
119  }
121  es.get<PhysicsTFormulaPayloadRcd>().get(formulaName, formulaPayload);
122 
123  if (formulaPayload->formulas().size() == 1 && formulaPayload->limits().size() == 1) {
124  return std::unique_ptr<TFormula>{new TFormula(newName, formulaPayload->formulas().at(0).data())};
125  } else {
126  throw cms::Exception("TauDiscriminantCutMultiplexerT::loadTFormulaFromDB")
127  << "Failed to load TFormula = " << formulaName << " from Database !!\n";
128  }
129  return std::unique_ptr<TFormula>{};
130  }
131 } // namespace
132 
133 template <class TauType, class TauTypeRef, class ParentClass>
135  const edm::ParameterSet& cfg)
136  : ParentClass(cfg),
137  moduleLabel_(cfg.getParameter<std::string>("@module_label")),
138  mvaOutput_normalization_(),
139  isInitialized_(false) {
140  toMultiplex_ = cfg.getParameter<edm::InputTag>("toMultiplex");
141  toMultiplex_token = this->template consumes<reco::TauDiscriminatorContainer>(toMultiplex_);
142 
143  verbosity_ = cfg.getParameter<int>("verbosity");
144 
145  loadMVAfromDB_ = cfg.getParameter<bool>("loadMVAfromDB");
146  if (!loadMVAfromDB_) {
147  inputFileName_ = cfg.getParameter<edm::FileInPath>("inputFileName");
148  }
149  if (verbosity_)
150  std::cout << moduleLabel_ << " loadMVA = " << loadMVAfromDB_ << std::endl;
151  mvaOutputNormalizationName_ = cfg.getParameter<std::string>("mvaOutput_normalization");
152 
153  // Setup our cut map, first raw values then working points
154  typedef std::vector<edm::ParameterSet> VPSet;
155  typedef std::vector<std::string> VString;
156  typedef std::vector<double> VDouble;
157  VString rawValueConfig = cfg.getParameter<VString>("rawValues");
158  for (uint i = 0; i < rawValueConfig.size(); i++) {
159  if (rawValueConfig[i] == "discriminator")
161  else if (rawValueConfig[i] == "category")
163  else
164  throw cms::Exception("TauDiscriminantCutMultiplexerT")
165  << " Configuration Parameter 'rawValues' containes unknown values. Must be 'discriminator' or 'category'!!\n";
166  }
167  n_raws_ = rawValueConfig.size();
168  VPSet mapping = cfg.getParameter<VPSet>("mapping");
169  for (auto const& mappingEntry : mapping) {
170  unsigned category = mappingEntry.getParameter<uint32_t>("category");
171  std::vector<std::unique_ptr<DiscriminantCutEntry>> cutWPs;
172  std::string categoryname = mappingEntry.getParameter<std::string>("cut");
173  bool localWPs = false;
174  bool wpsAsDouble = false;
175  if (mappingEntry.exists("workingPoints")) {
176  localWPs = true;
177  if (mappingEntry.existsAs<VDouble>("workingPoints")) {
178  wpsAsDouble = true;
179  } else if (mappingEntry.existsAs<VString>("workingPoints")) {
180  wpsAsDouble = false;
181  } else {
182  throw cms::Exception("TauDiscriminantCutMultiplexerT")
183  << " Configuration Parameter 'workingPoints' must be filled with cms.string or cms.double!!\n";
184  }
185  } else if (cfg.exists("workingPoints")) {
186  localWPs = false;
187  if (cfg.existsAs<VDouble>("workingPoints")) {
188  wpsAsDouble = true;
189  } else if (cfg.existsAs<VString>("workingPoints")) {
190  wpsAsDouble = false;
191  } else {
192  throw cms::Exception("TauDiscriminantCutMultiplexerT")
193  << " Configuration Parameter 'workingPoints' must be filled with cms.string or cms.double!!\n";
194  }
195  } else {
196  throw cms::Exception("TauDiscriminantCutMultiplexerT")
197  << " Undefined Configuration Parameter 'workingPoints' !!\n";
198  }
199  if (wpsAsDouble) {
200  VDouble workingPoints;
201  if (localWPs)
202  workingPoints = mappingEntry.getParameter<VDouble>("workingPoints");
203  else
204  workingPoints = cfg.getParameter<VDouble>("workingPoints");
205  for (auto const& wp : workingPoints) {
206  std::unique_ptr<DiscriminantCutEntry> cut{new DiscriminantCutEntry()};
207  cut->cutValue_ = wp;
209  cutWPs.push_back(std::move(cut));
210  }
211  } else {
212  VString workingPoints;
213  if (localWPs)
214  workingPoints = mappingEntry.getParameter<VString>("workingPoints");
215  else
216  workingPoints = cfg.getParameter<VString>("workingPoints");
217  for (auto const& wp : workingPoints) {
218  std::unique_ptr<DiscriminantCutEntry> cut{new DiscriminantCutEntry()};
219  cut->cutName_ = categoryname + wp;
220  std::string cutVariable_string = mappingEntry.getParameter<std::string>("variable");
221  cut->cutVariable_.reset(new StringObjectFunction<TauType>(cutVariable_string));
223  cutWPs.push_back(std::move(cut));
224  }
225  }
226  cuts_[category] = std::move(cutWPs);
227  }
228 
229  verbosity_ = cfg.getParameter<int>("verbosity");
230  if (verbosity_)
231  std::cout << "constructed " << moduleLabel_ << std::endl;
232 }
233 
234 template <class TauType, class TauTypeRef, class ParentClass>
236 
237 template <class TauType, class TauTypeRef, class ParentClass>
239  const edm::EventSetup& es) {
240  if (verbosity_)
241  std::cout << " begin! " << moduleLabel_ << " " << isInitialized_ << std::endl;
242  if (!isInitialized_) {
243  //Only open the file once and we can close it when this routine is done
244  // since all objects gotten from the file will have been copied
245  std::unique_ptr<TFile> inputFile;
246  if (!mvaOutputNormalizationName_.empty()) {
247  if (!loadMVAfromDB_) {
248  inputFile = openInputFile(inputFileName_);
249  mvaOutput_normalization_ = loadObjectFromFile<TFormula>(*inputFile, mvaOutputNormalizationName_);
250  } else {
251  auto temp = loadTFormulaFromDB(
252  es, mvaOutputNormalizationName_, Form("%s_mvaOutput_normalization", moduleLabel_.data()), verbosity_);
253  mvaOutput_normalization_ = std::move(temp);
254  }
255  }
256  for (auto const& cutWPs : cuts_) {
257  for (auto const& cut : cutWPs.second) {
258  if (cut->mode_ == DiscriminantCutEntry::kVariableCut) {
259  if (!loadMVAfromDB_) {
260  if (not inputFile) {
261  inputFile = openInputFile(inputFileName_);
262  }
263  if (verbosity_)
264  std::cout << "Loading from file" << inputFileName_ << std::endl;
265  cut->cutFunction_ = loadObjectFromFile<TGraph>(*inputFile, cut->cutName_);
266  } else {
267  if (verbosity_)
268  std::cout << "Loading from DB" << std::endl;
269  cut->cutFunction_ = loadTGraphFromDB(es, cut->cutName_, verbosity_);
270  }
271  }
272  }
273  }
274  isInitialized_ = true;
275  }
276 
277  evt.getByToken(toMultiplex_token, toMultiplexHandle_);
278 }
279 
280 template <class TauType, class TauTypeRef, class ParentClass>
282  const TauTypeRef& tau) const {
283  if (verbosity_) {
284  std::cout << "<TauDiscriminantCutMultiplexerT::discriminate>:" << std::endl;
285  std::cout << " moduleLabel = " << moduleLabel_ << std::endl;
286  }
287 
289  result.rawValues.resize(n_raws_);
290  double disc_result = (*toMultiplexHandle_)[tau].rawValues.at(0);
291  if (verbosity_) {
292  std::cout << "disc_result = " << disc_result << std::endl;
293  }
294  if (raw_discriminator_idx_ >= 0)
295  result.rawValues[raw_discriminator_idx_] = disc_result;
296  if (mvaOutput_normalization_) {
297  disc_result = mvaOutput_normalization_->Eval(disc_result);
298  if (verbosity_) {
299  std::cout << "disc_result (normalized) = " << disc_result << std::endl;
300  }
301  }
302  double key_result = 0.0;
303  if ((*toMultiplexHandle_)[tau].rawValues.size() == 2) {
304  key_result = (*toMultiplexHandle_)[tau].rawValues.at(1);
305  if (raw_category_idx_ >= 0)
306  result.rawValues[raw_category_idx_] = key_result;
307  }
308  typename DiscriminantCutMap::const_iterator cutWPsIter = cuts_.find(std::round(key_result));
309 
310  // Return null if it doesn't exist
311  if (cutWPsIter == cuts_.end()) {
312  return result;
313  }
314  // See if the discriminator passes our cuts
315  for (auto const& cutIter : cutWPsIter->second) {
316  bool passesCuts = false;
317  if (cutIter->mode_ == DiscriminantCutEntry::kFixedCut) {
318  passesCuts = (disc_result > cutIter->cutValue_);
319  if (verbosity_) {
320  std::cout << "cutValue (fixed) = " << cutIter->cutValue_ << " --> passesCuts = " << passesCuts << std::endl;
321  }
322  } else if (cutIter->mode_ == DiscriminantCutEntry::kVariableCut) {
323  double cutVariable = (*cutIter->cutVariable_)(*tau);
324  double xMin, xMax, dummy;
325  cutIter->cutFunction_->GetPoint(0, xMin, dummy);
326  cutIter->cutFunction_->GetPoint(cutIter->cutFunction_->GetN() - 1, xMax, dummy);
327  const double epsilon = 1.e-3;
328  if (cutVariable < (xMin + epsilon))
329  cutVariable = xMin + epsilon;
330  else if (cutVariable > (xMax - epsilon))
331  cutVariable = xMax - epsilon;
332  double cutValue = cutIter->cutFunction_->Eval(cutVariable);
333  passesCuts = (disc_result > cutValue);
334  if (verbosity_) {
335  std::cout << "cutValue (@" << cutVariable << ") = " << cutValue << " --> passesCuts = " << passesCuts
336  << std::endl;
337  }
338  }
339  result.workingPoints.push_back(passesCuts);
340  }
341  return result;
342 }
343 
344 // template specialization to get the correct default config names in the following fillDescriptions
345 template <class TauType>
347  // this generic one shoudl never be called.
348  // these are specialized in TauDiscriminationProducerBase.cc
349  throw cms::Exception("TauDiscriminantCutMultiplexerT")
350  << "Unsupported TauType used. You must use either PFTau or PATTau.";
351 }
352 
353 template <>
354 std::string getDefaultConfigString<reco::PFTau>() {
355  return "recoTauDiscriminantCutMultiplexerDefault";
356 }
357 template <>
358 std::string getDefaultConfigString<pat::Tau>() {
359  return "patTauDiscriminantCutMultiplexerDefault";
360 }
361 
362 template <class TauType, class TauTypeRef, class ParentClass>
364  edm::ConfigurationDescriptions& descriptions) {
365  // recoTauDiscriminantCutMultiplexer
367  desc.add<edm::InputTag>("toMultiplex", edm::InputTag("fixme"));
368  desc.add<int>("verbosity", 0);
369 
370  {
371  edm::ParameterSet pset_mapping;
372  pset_mapping.addParameter<unsigned int>("category", 0);
373  pset_mapping.addParameter<std::string>("cut", "fixme");
374  edm::ParameterSetDescription desc_mapping;
375  desc_mapping.add<unsigned int>("category", 0);
376  desc_mapping.add<std::string>("cut");
377  // it seems the parameter string "variable" exists only when workingPoints are string
378  // see hpsPFTauDiscriminationByVLooseIsolationMVArun2v1DBdR03oldDMwLT in RecoTauTag/Configuration/python/HPSPFTaus_cff.py
379  desc_mapping.addOptional<std::string>("variable")
380  ->setComment("the parameter is required when \"workingPoints\" are string");
381  std::vector<edm::ParameterSet> vpsd_mapping;
382  vpsd_mapping.push_back(pset_mapping);
383  desc.addVPSet("mapping", desc_mapping, vpsd_mapping);
384  }
385 
386  std::vector<std::string> defaultRaws{"discriminator"};
387  desc.add<std::vector<std::string>>("rawValues", defaultRaws);
388  std::vector<double> defaultWP{0.0};
389  desc.addNode(edm::ParameterDescription<std::vector<double>>("workingPoints", defaultWP, true) xor
390  edm::ParameterDescription<std::vector<std::string>>("workingPoints", true));
391  desc.add<edm::FileInPath>("inputFileName", edm::FileInPath("RecoTauTag/RecoTau/data/emptyMVAinputFile"));
392  desc.add<bool>("loadMVAfromDB", true);
393  ParentClass::fillProducerDescriptions(desc); // inherited from the base
394  desc.add<std::string>("mvaOutput_normalization", "");
395  descriptions.add(getDefaultConfigString<TauType>(), desc);
396 }
397 
398 // define our implementations
403 
ConfigurationDescriptions.h
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
TauDiscriminantCutMultiplexerT::raw_category_idx_
int raw_category_idx_
Definition: TauDiscriminantCutMultiplexer.cc:67
taus_updatedMVAIds_cff.category
category
Definition: taus_updatedMVAIds_cff.py:30
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::cutName_
std::string cutName_
Definition: TauDiscriminantCutMultiplexer.cc:57
PhysicsTFormulaPayload.h
PDWG_TauSkim_cff.rawValues
rawValues
Definition: PDWG_TauSkim_cff.py:13
resolutioncreator_cfi.object
object
Definition: resolutioncreator_cfi.py:4
mps_fire.i
i
Definition: mps_fire.py:355
TauDiscriminantCutMultiplexerT::isInitialized_
bool isInitialized_
Definition: TauDiscriminantCutMultiplexer.cc:72
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
StringObjectFunction
Definition: StringObjectFunction.h:16
PhysicsTGraphPayload.h
funct::false
false
Definition: Factorize.h:34
TauDiscriminationProducerBase.h
TauDiscriminantCutMultiplexerT::cuts_
DiscriminantCutMap cuts_
Definition: TauDiscriminantCutMultiplexer.cc:64
TkAlMuonSelectors_cfi.cut
cut
Definition: TkAlMuonSelectors_cfi.py:5
metsig::tau
Definition: SignAlgoResolutions.h:49
pfClustersFromHGC3DClusters_cfi.wp
wp
Definition: pfClustersFromHGC3DClusters_cfi.py:20
edm::EDGetTokenT
Definition: EDGetToken.h:33
TauDiscriminantCutMultiplexerT::DiscriminantCutMap
std::map< int, std::vector< std::unique_ptr< DiscriminantCutEntry > > > DiscriminantCutMap
Definition: TauDiscriminantCutMultiplexer.cc:63
gather_cfg.cout
cout
Definition: gather_cfg.py:144
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TauDiscriminantCutMultiplexerT::inputFileName_
edm::FileInPath inputFileName_
Definition: TauDiscriminantCutMultiplexer.cc:51
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry
Definition: TauDiscriminantCutMultiplexer.cc:53
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::DiscriminantCutEntry
DiscriminantCutEntry()
Definition: TauDiscriminantCutMultiplexer.cc:54
TauDiscriminantCutMultiplexerT::loadMVAfromDB_
bool loadMVAfromDB_
Definition: TauDiscriminantCutMultiplexer.cc:50
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::kVariableCut
Definition: TauDiscriminantCutMultiplexer.cc:60
PhysicsTFormulaPayload::limits
const std::vector< std::pair< float, float > > & limits() const
Definition: PhysicsTFormulaPayload.h:14
edm::Handle
Definition: AssociativeIterator.h:50
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
parallelization.uint
uint
Definition: parallelization.py:124
getDefaultConfigString
std::string getDefaultConfigString()
Definition: TauDiscriminantCutMultiplexer.cc:346
geometryDiff.epsilon
int epsilon
Definition: geometryDiff.py:26
FileInPath.h
photonAnalyzer_cfi.xMin
xMin
Definition: photonAnalyzer_cfi.py:82
TauDiscriminantCutMultiplexerT
Definition: TauDiscriminantCutMultiplexer.cc:37
edm::FileInPath
Definition: FileInPath.h:64
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
TauDiscriminantCutMultiplexerT::toMultiplex_token
edm::EDGetTokenT< reco::TauDiscriminatorContainer > toMultiplex_token
Definition: TauDiscriminantCutMultiplexer.cc:76
InefficientDoubleROC.inputFileName
inputFileName
Definition: InefficientDoubleROC.py:437
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::kFixedCut
Definition: TauDiscriminantCutMultiplexer.cc:60
edm::ESHandle
Definition: DTSurvey.h:22
PhysicsTFormulaPayloadRcd
Definition: PhysicsTFormulaPayloadRcd.h:23
RecoTauDiscriminantCutMultiplexer
TauDiscriminantCutMultiplexerT< reco::PFTau, reco::PFTauRef, PFTauDiscriminationContainerProducerBase > RecoTauDiscriminantCutMultiplexer
Definition: TauDiscriminantCutMultiplexer.cc:400
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
TauDiscriminantCutMultiplexerT::raw_discriminator_idx_
int raw_discriminator_idx_
Definition: TauDiscriminantCutMultiplexer.cc:66
ParameterSetDescription.h
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
TauDiscriminantCutMultiplexerT::mvaOutput_normalization_
std::unique_ptr< const TFormula > mvaOutput_normalization_
Definition: TauDiscriminantCutMultiplexer.cc:70
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
PhysicsTGraphPayloadRcd.h
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
PDWG_TauSkim_cff.workingPoints
workingPoints
Definition: PDWG_TauSkim_cff.py:15
TauDiscriminantCutMultiplexerT::moduleLabel_
std::string moduleLabel_
Definition: TauDiscriminantCutMultiplexer.cc:48
edm::ParameterSetDescription::addVPSet
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
Definition: ParameterSetDescription.h:149
TauDiscriminantCutMultiplexerT::TauDiscriminantCutMultiplexerT
TauDiscriminantCutMultiplexerT(const edm::ParameterSet &pset)
Definition: TauDiscriminantCutMultiplexer.cc:134
TauDiscriminantCutMultiplexerT::toMultiplex_
edm::InputTag toMultiplex_
Definition: TauDiscriminantCutMultiplexer.cc:74
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
dtResolutionTest_cfi.inputFile
inputFile
Definition: dtResolutionTest_cfi.py:14
TauDiscriminantCutMultiplexerT::~TauDiscriminantCutMultiplexerT
~TauDiscriminantCutMultiplexerT() override
Definition: TauDiscriminantCutMultiplexer.cc:235
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::~DiscriminantCutEntry
~DiscriminantCutEntry()
Definition: TauDiscriminantCutMultiplexer.cc:55
TauDiscriminantCutMultiplexerT::discriminate
reco::SingleTauDiscriminatorContainer discriminate(const TauTypeRef &) const override
Definition: TauDiscriminantCutMultiplexer.cc:281
edm::EventSetup
Definition: EventSetup.h:57
edm::ParameterSetDescription::addNode
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
Definition: ParameterSetDescription.cc:41
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::kUndefined
Definition: TauDiscriminantCutMultiplexer.cc:60
get
#define get
TauDiscriminantCutMultiplexerT::mvaOutputNormalizationName_
std::string mvaOutputNormalizationName_
Definition: TauDiscriminantCutMultiplexer.cc:69
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::mode_
int mode_
Definition: TauDiscriminantCutMultiplexer.cc:61
TauDiscriminantCutMultiplexerT::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TauDiscriminantCutMultiplexer.cc:363
mps_merge.newName
string newName
Definition: mps_merge.py:86
InputTag.h
looper.cfg
cfg
Definition: looper.py:297
TauDiscriminantCutMultiplexerT::toMultiplexHandle_
edm::Handle< reco::TauDiscriminatorContainer > toMultiplexHandle_
Definition: TauDiscriminantCutMultiplexer.cc:75
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::cutVariable_
std::unique_ptr< StringObjectFunction< TauType > > cutVariable_
Definition: TauDiscriminantCutMultiplexer.cc:58
PhysicsTGraphPayloadRcd
Definition: PhysicsTGraphPayloadRcd.h:23
TauDiscriminantCutMultiplexerT::beginEvent
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup) override
Definition: TauDiscriminantCutMultiplexer.cc:238
HistogramManager_cfi.VPSet
def VPSet(*args)
Definition: HistogramManager_cfi.py:401
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::FileInPath::Unknown
Definition: FileInPath.h:66
T
long double T
Definition: Basic3DVectorLD.h:48
Exception
Definition: hltDiff.cc:246
PFTau.h
multiplicitycorr_cfi.xMax
xMax
Definition: multiplicitycorr_cfi.py:5
TauDiscriminantCutMultiplexerT::verbosity_
int verbosity_
Definition: TauDiscriminantCutMultiplexer.cc:78
mps_fire.result
result
Definition: mps_fire.py:303
dummy
Definition: DummySelector.h:38
PhysicsTFormulaPayloadRcd.h
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
StringObjectFunction.h
edm::ParameterDescription
Definition: ParameterDescription.h:110
taus_updatedMVAIds_cff.mapping
mapping
Definition: taus_updatedMVAIds_cff.py:28
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::cutValue_
double cutValue_
Definition: TauDiscriminantCutMultiplexer.cc:56
edm::InputTag
Definition: InputTag.h:15
TauDiscriminantCutMultiplexerT::n_raws_
uint n_raws_
Definition: TauDiscriminantCutMultiplexer.cc:65
PATTauDiscriminantCutMultiplexer
TauDiscriminantCutMultiplexerT< pat::Tau, pat::TauRef, PATTauDiscriminationContainerProducerBase > PATTauDiscriminantCutMultiplexer
Definition: TauDiscriminantCutMultiplexer.cc:402
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
PhysicsTFormulaPayload::formulas
const std::vector< std::string > & formulas() const
Definition: PhysicsTFormulaPayload.h:15
summarizeEdmComparisonLogfiles.objectName
objectName
Definition: summarizeEdmComparisonLogfiles.py:105
TauDiscriminantCutMultiplexerT::DiscriminantCutEntry::cutFunction_
std::unique_ptr< const TGraph > cutFunction_
Definition: TauDiscriminantCutMultiplexer.cc:59
reco::SingleTauDiscriminatorContainer
Definition: TauDiscriminatorContainer.h:9