24 #include "fftjet/FrequencyKernelConvolver.hh"
25 #include "fftjet/DiscreteGauss2d.hh"
26 #include "fftjet/EquidistantSequence.hh"
27 #include "fftjet/interpolate.hh"
47 using namespace fftjetcms;
76 std::auto_ptr<fftjet::AbsFrequencyKernel>
kernel2d;
79 std::auto_ptr<fftjet::AbsConvolverBase<Real> >
convolver;
112 etaFlatteningFactors(
113 ps.getParameter<std::vector<double> >(
"etaFlatteningFactors")),
114 nPercentiles(ps.getParameter<unsigned>(
"nPercentiles")),
115 convolverMinBin(ps.getParameter<unsigned>(
"convolverMinBin")),
116 convolverMaxBin(ps.getParameter<unsigned>(
"convolverMaxBin")),
117 pileupEtaPhiArea(ps.getParameter<double>(
"pileupEtaPhiArea")),
118 externalGridFiles(ps.getParameter<std::vector<std::string> >(
"externalGridFiles")),
119 currentFileNum(externalGridFiles.
size() + 1U)
127 convolvedFlow = std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >(
128 new fftjet::Grid2d<fftjetcms::Real>(*energyFlow));
135 <<
"ERROR in FFTJetPileupProcessor constructor:"
136 " number of elements in the \"etaFlatteningFactors\""
137 " vector is inconsistent with the iscretization grid binning"
146 const unsigned nScales = ps.
getParameter<
unsigned>(
"nScales");
147 const double minScale = ps.
getParameter<
double>(
"minScale");
148 const double maxScale = ps.
getParameter<
double>(
"maxScale");
149 if (minScale <= 0.0 || maxScale < minScale || nScales == 0U)
151 <<
"invalid filter scales" << std::endl;
153 filterScales = std::auto_ptr<fftjet::EquidistantInLogSpace>(
154 new fftjet::EquidistantInLogSpace(minScale, maxScale, nScales));
164 double kernelEtaScale = ps.
getParameter<
double>(
"kernelEtaScale");
165 const double kernelPhiScale = ps.
getParameter<
double>(
"kernelPhiScale");
166 if (kernelEtaScale <= 0.0 || kernelPhiScale <= 0.0)
168 <<
"invalid kernel scales" << std::endl;
174 <<
"invalid convolver bin range" << std::endl;
181 engine = std::auto_ptr<MyFFTEngine>(
185 kernel2d = std::auto_ptr<fftjet::AbsFrequencyKernel>(
186 new fftjet::DiscreteGauss2d(
187 kernelEtaScale, kernelPhiScale,
191 convolver = std::auto_ptr<fftjet::AbsConvolverBase<Real> >(
192 new fftjet::FrequencyKernelConvolver<Real,Complex>(
216 double densityAfterMixing = -1.0;
225 const double* scales = &(*filterScales)[0];
233 std::auto_ptr<TH2D> pTable(
new TH2D(
"FFTJetPileupProcessor",
234 "FFTJetPileupProcessor",
235 nScales, -0.5, nScales-0.5,
237 pTable->SetDirectory(0);
238 pTable->GetXaxis()->SetTitle(
"Filter Number");
239 pTable->GetYaxis()->SetTitle(
"Et CDF");
240 pTable->GetZaxis()->SetTitle(
"Et Density");
243 convolver->setEventData(g.data(), g.nEta(), g.nPhi());
244 for (
unsigned iscale=0; iscale<nScales; ++iscale)
248 scales[iscale], convData,
265 const double dindex = q*(dataLen-1U);
266 const unsigned ilow =
static_cast<unsigned>(std::floor(dindex));
267 const double percentile = fftjet::lin_interpolate_1d(
268 ilow, ilow+1U, sortData[ilow], sortData[ilow+1U], dindex);
271 pTable->SetBinContent(iscale+1U, iper+1U, percentile);
277 std::auto_ptr<std::pair<double,double> > etSum(
278 new std::pair<double,double>(densityBeforeMixing, densityAfterMixing));
294 <<
"ERROR in FFTJetPileupProcessor::mixExtraGrid():"
295 " failed to open external grid file "
302 for (
unsigned ntries=0; ntries<nFiles && g == 0; ++ntries)
310 <<
"ERROR in FFTJetPileupProcessor::mixExtraGrid():"
311 " failed to open external grid file "
325 <<
"ERROR in FFTJetPileupProcessor::mixExtraGrid():"
326 " no valid grid records found" << std::endl;
nocap nocap const skelname & operator=(const skelname &)
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::vector< std::string > externalGridFiles
void produce(edm::Event &, const edm::EventSetup &)
std::auto_ptr< fftjet::EquidistantInLogSpace > filterScales
std::auto_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::AbsConvolverBase< Real > > convolver
#define DEFINE_FWK_MODULE(type)
void loadInputCollection(const edm::Event &)
void checkConfig(const Ptr &ptr, const char *message)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > convolvedFlow
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
std::auto_ptr< fftjet::AbsFrequencyKernel > kernel2d
void buildKernelConvolver(const edm::ParameterSet &)
std::vector< double > etaFlatteningFactors
void discretizeEnergyFlow()
std::auto_ptr< MyFFTEngine > engine
fftjet::FFTWDoubleEngine MyFFTEngine
void add_Grid2d_data(fftjet::Grid2d< F2 > *to, const fftjet::Grid2d< F1 > &from)
tuple size
Write out results.
const std::string outputLabel