22 #include "fftjet/ProximityClusteringTree.hh"
23 #include "fftjet/ClusteringSequencer.hh"
24 #include "fftjet/ClusteringTreeSparsifier.hh"
25 #include "fftjet/FrequencyKernelConvolver.hh"
26 #include "fftjet/FrequencySequentialConvolver.hh"
27 #include "fftjet/DiscreteGauss1d.hh"
28 #include "fftjet/DiscreteGauss2d.hh"
58 using namespace fftjetcms;
72 typedef fftjet::SparseClusteringTree<fftjet::Peak,long>
SparseTree;
73 typedef fftjet::ClusteringSequencer<Real>
Sequencer;
74 typedef fftjet::ClusteringTreeSparsifier<fftjet::Peak,long>
Sparsifier;
104 std::auto_ptr<fftjet::AbsFrequencyKernel>
kernel2d;
109 std::auto_ptr<fftjet::AbsConvolverBase<Real> >
convolver;
115 std::auto_ptr<fftjet::AbsDistanceCalculator<fftjet::Peak> >
distanceCalc;
150 completeEventDataCutoff(ps.getParameter<double>(
"completeEventDataCutoff")),
151 makeClusteringTree(ps.getParameter<bool>(
"makeClusteringTree")),
152 verifyDataConversion(ps.getUntrackedParameter<bool>(
"verifyDataConversion",
false)),
153 storeDiscretizationGrid(ps.getParameter<bool>(
"storeDiscretizationGrid")),
154 sparsify(ps.getParameter<bool>(
"sparsify"))
160 produces<reco::PattRecoTree<float,reco::PattRecoPeak<float> > >(
outputLabel);
162 produces<reco::PattRecoTree<double,reco::PattRecoPeak<double> > >(
outputLabel);
170 <<
"FFTJetPatRecoProducer is not configured to produce anything"
196 const unsigned maxAdaptiveScales =
198 const double minAdaptiveRatioLog =
200 if (minAdaptiveRatioLog <= 0.0)
202 <<
"bad adaptive ratio logarithm limit" << std::endl;
209 const unsigned nscales = iniScales->size();
210 for (
unsigned i=0;
i<nscales; ++
i)
211 if (cs >= (*iniScales)[
i])
213 <<
"incompatible scale for complete event" << std::endl;
219 *iniScales, maxAdaptiveScales, minAdaptiveRatioLog));
225 SparsifierConfiguration);
243 const std::vector<double> etaDependentScaleFactors(
244 ps.
getParameter<std::vector<double> >(
"etaDependentScaleFactors"));
247 const bool use2dKernel = etaDependentScaleFactors.empty();
249 if (etaDependentScaleFactors.size() !=
energyFlow->nEta())
251 <<
"invalid number of eta-dependent scale factors"
255 double kernelEtaScale = ps.
getParameter<
double>(
"kernelEtaScale");
256 const double kernelPhiScale = ps.
getParameter<
double>(
"kernelPhiScale");
257 if (kernelEtaScale <= 0.0 || kernelPhiScale <= 0.0)
259 <<
"invalid kernel scale" << std::endl;
266 const bool fixEfficiency = ps.
getParameter<
bool>(
"fixEfficiency");
269 unsigned convolverMinBin = 0, convolverMaxBin = 0;
270 if (fixEfficiency || !use2dKernel)
272 convolverMinBin = ps.
getParameter<
unsigned>(
"convolverMinBin");
273 convolverMaxBin = ps.
getParameter<
unsigned>(
"convolverMaxBin");
279 engine = std::auto_ptr<MyFFTEngine>(
283 kernel2d = std::auto_ptr<fftjet::AbsFrequencyKernel>(
284 new fftjet::DiscreteGauss2d(
285 kernelEtaScale, kernelPhiScale,
289 convolver = std::auto_ptr<fftjet::AbsConvolverBase<Real> >(
290 new fftjet::FrequencyKernelConvolver<Real,Complex>(
292 convolverMinBin, convolverMaxBin));
297 engine = std::auto_ptr<MyFFTEngine>(
303 etaKernel = std::auto_ptr<fftjet::AbsFrequencyKernel1d>(
304 new fftjet::DiscreteGauss1d(kernelEtaScale,
energyFlow->nEta()));
306 phiKernel = std::auto_ptr<fftjet::AbsFrequencyKernel1d>(
307 new fftjet::DiscreteGauss1d(kernelPhiScale,
energyFlow->nPhi()));
310 convolver = std::auto_ptr<fftjet::AbsConvolverBase<Real> >(
311 new fftjet::FrequencySequentialConvolver<Real,Complex>(
314 etaDependentScaleFactors, convolverMinBin,
315 convolverMaxBin, fixEfficiency));
322 const double peakFinderMaxEta = ps.
getParameter<
double>(
"peakFinderMaxEta");
323 if (peakFinderMaxEta <= 0.0)
325 <<
"invalid peak finder eta cut" << std::endl;
326 const double maxMagnitude = ps.
getParameter<
double>(
"peakFinderMaxMagnitude");
327 int minBin =
energyFlow->getEtaBin(-peakFinderMaxEta);
330 int maxBin =
energyFlow->getEtaBin(peakFinderMaxEta) + 1;
333 return fftjet::PeakFinder(maxMagnitude,
true, minBin, maxBin);
353 std::auto_ptr<StoredTree>
tree(
new StoredTree());
363 const std::vector<double>& scalesUsed(
sequencer->getInitialScales());
367 <<
"Data conversion failed for sparse clustering tree"
380 std::auto_ptr<StoredTree>
tree(
new StoredTree());
390 const std::vector<double>& scalesUsed(
sequencer->getInitialScales());
394 <<
"Data conversion failed for dense clustering tree"
426 buildSparseProduct<float>(
iEvent);
428 buildSparseProduct<double>(
iEvent);
433 buildDenseProduct<float>(iEvent);
435 buildDenseProduct<double>(
iEvent);
443 std::auto_ptr<DiscretizedEnergyFlow> flow(
445 g.data(), g.title(), g.etaMin(), g.etaMax(),
446 g.phiBin0Edge(), g.nEta(), g.nPhi()));
450 fftjet::Grid2d<Real>
check(
451 flow->nEtaBins(), flow->etaMin(), flow->etaMax(),
452 flow->nPhiBins(), flow->phiBin0Edge(), flow->title());
453 check.blockSet(flow->data(), flow->nEtaBins(), flow->nPhiBins());
nocap nocap const skelname & operator=(const skelname &)
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
Class for storing FFTJet sparse clustering trees.
std::auto_ptr< fftjet::AbsFrequencyKernel1d > phiKernel
std::auto_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
#define DEFINE_FWK_MODULE(type)
void loadInputCollection(const edm::Event &)
void buildSparseProduct(edm::Event &) const
void buildKernelConvolver(const edm::ParameterSet &)
void checkConfig(const Ptr &ptr, const char *message)
void buildDenseProduct(edm::Event &) const
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
const bool storeDiscretizationGrid
std::auto_ptr< MyFFTEngine > anotherEngine
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
double getEventScale() const
std::auto_ptr< fftjet::AbsFrequencyKernel > kernel2d
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
void sparsePeakTreeToStorable(const fftjet::SparseClusteringTree< fftjet::Peak, long > &in, bool writeOutScaleInfo, reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > *out)
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
ClusteringTree * clusteringTree
fftjet::ClusteringSequencer< Real > Sequencer
std::auto_ptr< MyFFTEngine > engine
void produce(edm::Event &, const edm::EventSetup &)
std::auto_ptr< Sparsifier > sparsifier
std::auto_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > distanceCalc
bool storeInSinglePrecision() const
void densePeakTreeToStorable(const fftjet::AbsClusteringTree< fftjet::Peak, long > &in, bool writeOutScaleInfo, reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > *out)
const double completeEventDataCutoff
const bool makeClusteringTree
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
void densePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::AbsClusteringTree< fftjet::Peak, long > *out)
fftjet::ClusteringTreeSparsifier< fftjet::Peak, long > Sparsifier
std::auto_ptr< fftjet::AbsFrequencyKernel1d > etaKernel
void discretizeEnergyFlow()
std::auto_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > fftjet_DistanceCalculator_parser(const edm::ParameterSet &ps)
fftjet::PeakFinder buildPeakFinder(const edm::ParameterSet &)
std::auto_ptr< Sequencer > sequencer
std::auto_ptr< fftjet::AbsConvolverBase< Real > > convolver
std::auto_ptr< fftjet::ClusteringTreeSparsifier< fftjet::Peak, long > > fftjet_ClusteringTreeSparsifier_parser(const edm::ParameterSet &ps)
fftjet::FFTWDoubleEngine MyFFTEngine
fftjet::ProximityClusteringTree< fftjet::Peak, long > ClusteringTree
const bool verifyDataConversion
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
const std::string outputLabel
std::auto_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)