DESY Hbb Analysis Framework
JetResolution.cc
Go to the documentation of this file.
1 // Original code: CMSSW_10_2_22 - JetMETCorrections/Modules/src/JetResolution.cc
2 
4 
5 // These two includes are needed to run standalone
6 #include <algorithm>
7 #include <iostream>
8 
9 namespace JME {
10 
11  JetResolution::JetResolution(const std::string& filename) {
12  m_object = std::make_shared<JetResolutionObject>(filename);
13  }
14 
16  m_object = std::make_shared<JetResolutionObject>(object);
17  }
18 
19  float JetResolution::getResolution(const JetParameters& parameters) const {
20  const JetResolutionObject::Record* record = m_object->getRecord(parameters);
21  if (! record)
22  return 1;
23 
24  return m_object->evaluateFormula(*record, parameters);
25  }
26 
28  m_object = std::make_shared<JetResolutionObject>(filename);
29  }
30 
32  m_object = std::make_shared<JetResolutionObject>(object);
33  }
34 
36  Variation variation /* = Variation::NOMINAL*/,
37  std::string uncertaintySource /* = ""*/) const {
38  const JetResolutionObject::Record* record = m_object->getRecord(parameters);
39  if (! record)
40  return 1;
41 
42  const std::vector<float>& parameters_values = record->getParametersValues();
43  const std::vector<std::string>& parameter_names = m_object->getDefinition().getParametersName();
44  size_t parameter = static_cast<size_t>(variation);
45  if (!uncertaintySource.empty()) {
46  if (variation == Variation::DOWN)
47  parameter = std::distance(parameter_names.begin(),
48  std::find(parameter_names.begin(), parameter_names.end(), uncertaintySource + "Down"));
49  else if (variation == Variation::UP)
50  parameter = std::distance(parameter_names.begin(),
51  std::find(parameter_names.begin(), parameter_names.end(), uncertaintySource + "Up"));
52  if (parameter >= parameter_names.size()) {
53  std::string s;
54  for (const auto& piece : parameter_names)
55  s += piece + " ";
56  // Replacing the throw cms::Exception below
57  std::cerr << "ERROR in JetResolution: "
58  << "Invalid value for 'uncertaintySource' parameter. Only " + s + " are supported.\n" ;
59  throw std::exception();
60 // throw cms::Exception("InvalidParameter") << "Invalid value for 'uncertaintySource' parameter. Only " + s + " are supported.\n";
61  }
62  }
63  return parameters_values[parameter];
64  }
65 
66 }
std::shared_ptr< JetResolutionObject > m_object
Definition: JetResolution.h:33
float getResolution(const JetParameters &parameters) const
float getScaleFactor(const JetParameters &parameters, Variation variation=Variation::NOMINAL, std::string uncertaintySource="") const
const std::vector< float > & getParametersValues() const