CMS 3D CMS Logo

fPoly.cc
Go to the documentation of this file.
3 #include <algorithm>
4 #include <map>
5 namespace lumi {
6  class fPoly : public NormFunctor {
7  public:
8  fPoly() {}
9  ~fPoly() override {}
10  void initialize(const std::map<std::string, float>& coeffmap, const std::map<unsigned int, float>& afterglowmap);
11  float getCorrection(float luminonorm, float intglumi, unsigned int nBXs) const override;
12  };
13 } // namespace lumi
14 
15 void lumi::fPoly::initialize(const std::map<std::string, float>& coeffmap,
16  const std::map<unsigned int, float>& afterglowmap) {
17  m_coeffmap = coeffmap;
18  m_afterglowmap = afterglowmap;
19 }
20 float lumi::fPoly::getCorrection(float luminonorm, float intglumi, unsigned int nBXs) const {
21  float result = 1.0;
22  float avglumi = 0.;
23  float c1 = 0.;
24  std::map<std::string, float>::const_iterator coeffIt = m_coeffmap.find("C1");
25  if (coeffIt != m_coeffmap.end()) {
26  c1 = coeffIt->second;
27  }
28  if (c1 != 0. && nBXs > 0) {
29  avglumi = c1 * luminonorm / nBXs;
30  }
31  float Afterglow = 1.0;
32  if (!m_afterglowmap.empty()) {
33  std::map<unsigned int, float>::const_iterator afterglowit = m_afterglowmap.lower_bound(nBXs + 1);
34  if (afterglowit != m_afterglowmap.begin()) {
35  Afterglow = (--afterglowit)->second;
36  }
37  }
38  float driftterm = 1.0;
39  coeffIt = m_coeffmap.find("DRIFT");
40  if (coeffIt != m_coeffmap.end()) {
41  driftterm = 1.0 + coeffIt->second * intglumi;
42  }
43  float a0 = 1.0;
44  coeffIt = m_coeffmap.find("A0");
45  if (coeffIt != m_coeffmap.end()) {
46  a0 = coeffIt->second;
47  }
48  float a1 = 0.;
49  coeffIt = m_coeffmap.find("A1");
50  if (coeffIt != m_coeffmap.end()) {
51  a1 = coeffIt->second;
52  }
53  float a2 = 0.;
54  coeffIt = m_coeffmap.find("A2");
55  if (coeffIt != m_coeffmap.end()) {
56  a2 = coeffIt->second;
57  }
58  result = a0 * Afterglow / (1. + a1 * avglumi + a2 * avglumi * avglumi) * driftterm;
59  return result;
60 }
float getCorrection(float luminonorm, float intglumi, unsigned int nBXs) const override
Definition: fPoly.cc:20
U second(std::pair< T, U > const &p)
fPoly()
Definition: fPoly.cc:8
~fPoly() override
Definition: fPoly.cc:9
std::map< std::string, float > m_coeffmap
Definition: NormFunctor.h:14
std::map< unsigned int, float > m_afterglowmap
Definition: NormFunctor.h:15
void initialize(const std::map< std::string, float > &coeffmap, const std::map< unsigned int, float > &afterglowmap)
Definition: fPoly.cc:15
#define DEFINE_EDM_PLUGIN(factory, type, name)