CMS 3D CMS Logo

EtaDependentPileup.cc
Go to the documentation of this file.
1 #include <fstream>
2 
4 
5 namespace fftjetcms {
6  EtaDependentPileup::EtaDependentPileup(const fftjet::LinearInterpolator2d& interp,
7  const double inputRhoFactor,
8  const double outputRhoFactor)
9  : interp_(interp),
10  inputRhoFactor_(inputRhoFactor),
11  outputRhoFactor_(outputRhoFactor),
12  etaMin_(interp.xMin()),
13  etaMax_(interp.xMax()),
14  rhoMin_(interp.yMin()),
15  rhoMax_(interp.yMax()),
16  rhoStep_((rhoMax_ - rhoMin_) / interp.ny()) {
17  const double etaStep = (etaMax_ - etaMin_) / interp.nx();
18  etaMin_ += etaStep * 0.5;
19  etaMax_ -= etaStep * 0.5;
20  rhoMin_ += rhoStep_ * 0.5;
21  rhoMax_ -= rhoStep_ * 0.5;
22  assert(etaMin_ < etaMax_);
23  assert(rhoMin_ < rhoMax_);
24  }
25 
26  double EtaDependentPileup::operator()(double eta, double /* phi */, const reco::FFTJetPileupSummary& summary) const {
27  double value = 0.0;
28  const double rho = summary.pileupRho() * inputRhoFactor_;
29  if (eta < etaMin_)
30  eta = etaMin_;
31  if (eta > etaMax_)
32  eta = etaMax_;
33  if (rho >= rhoMin_ && rho <= rhoMax_)
34  value = interp_(eta, rho);
35  else {
36  double x0, x1;
37  if (rho < rhoMin_) {
38  x0 = rhoMin_;
39  x1 = rhoMin_ + rhoStep_ * 0.5;
40  } else {
41  x0 = rhoMax_;
42  x1 = rhoMax_ - rhoStep_ * 0.5;
43  }
44  const double z0 = interp_(eta, x0);
45  const double z1 = interp_(eta, x1);
46  value = z0 + (z1 - z0) * ((rho - x0) / (x1 - x0));
47  }
48  return (value > 0.0 ? value : 0.0) * outputRhoFactor_;
49  }
50 } // namespace fftjetcms
double operator()(double eta, double phi, const reco::FFTJetPileupSummary &summary) const override
Summary info for pile-up determined by Gaussian filtering.
fftjet::LinearInterpolator2d interp_
Definition: value.py:1
EtaDependentPileup(const fftjet::LinearInterpolator2d &i, double inputRhoFactor, double outputRhoFactor)