22 #include "fftjet/FrequencyKernelConvolver.hh"
23 #include "fftjet/DiscreteGauss2d.hh"
24 #include "fftjet/EquidistantSequence.hh"
25 #include "fftjet/interpolate.hh"
26 #include "fftjet/FrequencyKernelConvolver.hh"
27 #include "fftjet/FrequencySequentialConvolver.hh"
28 #include "fftjet/DiscreteGauss1d.hh"
29 #include "fftjet/DiscreteGauss2d.hh"
59 void endJob()
override;
79 std::unique_ptr<fftjet::AbsFrequencyKernel>
kernel2d;
80 std::unique_ptr<fftjet::AbsFrequencyKernel1d>
etaKernel;
81 std::unique_ptr<fftjet::AbsFrequencyKernel1d>
phiKernel;
84 std::unique_ptr<fftjet::AbsConvolverBase<Real> >
convolver;
98 scalePower(ps.getParameter<double>(
"scalePower")),
105 convolvedFlow = std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >(
new fftjet::Grid2d<fftjetcms::Real>(*
energyFlow));
128 throw cms::Exception(
"FFTJetBadConfig") <<
"invalid number of eta-dependent scale factors" << std::endl;
134 throw cms::Exception(
"FFTJetBadConfig") <<
"invalid kernel scale" << std::endl;
155 kernel2d = std::unique_ptr<fftjet::AbsFrequencyKernel>(
159 convolver = std::unique_ptr<fftjet::AbsConvolverBase<Real> >(
new fftjet::FrequencyKernelConvolver<Real, Complex>(
174 convolver = std::unique_ptr<fftjet::AbsConvolverBase<Real> >(
175 new fftjet::FrequencySequentialConvolver<Real, Complex>(
engine.get(),
196 const double* scales = &(*iniScales)[0];
198 const unsigned nEta =
g.nEta();
199 const unsigned nPhi =
g.nPhi();
200 const double bin0edge =
g.phiBin0Edge();
203 auto pTable = std::make_unique<TH3F>(
"FFTJetEFlowSmoother",
204 "FFTJetEFlowSmoother",
213 bin0edge + 2.0 *
M_PI);
214 TH3F*
h = pTable.get();
215 h->SetDirectory(
nullptr);
216 h->GetXaxis()->SetTitle(
"Scale");
217 h->GetYaxis()->SetTitle(
"Eta");
218 h->GetZaxis()->SetTitle(
"Phi");
228 for (
unsigned iscale = 0; iscale <
nScales; ++iscale) {