CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
FFTJetPatRecoProducer Class Reference

#include <RecoJets/FFTJetProducer/plugins/FFTJetPatRecoProducer.cc>

Inheritance diagram for FFTJetPatRecoProducer:
edm::EDProducer fftjetcms::FFTJetInterface edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 FFTJetPatRecoProducer (const edm::ParameterSet &)
 
 ~FFTJetPatRecoProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 
- Public Member Functions inherited from fftjetcms::FFTJetInterface
virtual ~FFTJetInterface ()
 

Protected Types

typedef
fftjet::ProximityClusteringTree
< fftjet::Peak, long > 
ClusteringTree
 
typedef
fftjet::ClusteringSequencer
< Real
Sequencer
 
typedef
fftjet::SparseClusteringTree
< fftjet::Peak, long > 
SparseTree
 
typedef
fftjet::ClusteringTreeSparsifier
< fftjet::Peak, long > 
Sparsifier
 

Protected Member Functions

void beginJob () override
 
template<class Real >
void buildDenseProduct (edm::Event &) const
 
void buildKernelConvolver (const edm::ParameterSet &)
 
fftjet::PeakFinder buildPeakFinder (const edm::ParameterSet &)
 
template<class Real >
void buildSparseProduct (edm::Event &) const
 
void endJob () override
 
void produce (edm::Event &, const edm::EventSetup &) override
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Member Functions inherited from fftjetcms::FFTJetInterface
template<class Ptr >
void checkConfig (const Ptr &ptr, const char *message)
 
void discretizeEnergyFlow ()
 
 FFTJetInterface (const edm::ParameterSet &)
 
double getEventScale () const
 
void loadInputCollection (const edm::Event &)
 
bool storeInSinglePrecision () const
 
const reco::Particle::PointvertexUsed () const
 

Protected Attributes

std::auto_ptr< MyFFTEngineanotherEngine
 
ClusteringTreeclusteringTree
 
const double completeEventDataCutoff
 
std::auto_ptr
< fftjet::AbsConvolverBase
< Real > > 
convolver
 
std::auto_ptr
< fftjet::AbsDistanceCalculator
< fftjet::Peak > > 
distanceCalc
 
std::auto_ptr< MyFFTEngineengine
 
std::auto_ptr
< fftjet::AbsFrequencyKernel1d > 
etaKernel
 
std::auto_ptr
< fftjet::AbsFrequencyKernel > 
kernel2d
 
const bool makeClusteringTree
 
std::auto_ptr
< fftjet::Functor1< bool,
fftjet::Peak > > 
peakSelector
 
std::auto_ptr
< fftjet::AbsFrequencyKernel1d > 
phiKernel
 
std::auto_ptr< Sequencersequencer
 
SparseTree sparseTree
 
std::auto_ptr< Sparsifiersparsifier
 
const bool sparsify
 
const bool storeDiscretizationGrid
 
const bool verifyDataConversion
 
- Protected Attributes inherited from fftjetcms::FFTJetInterface
const AnomalousTower anomalous
 
std::vector< unsigned > candidateIndex
 
const bool doPVCorrection
 
std::auto_ptr< fftjet::Grid2d
< fftjetcms::Real > > 
energyFlow
 
const std::vector< double > etaDependentMagnutideFactors
 
std::vector
< fftjetcms::VectorLike
eventData
 
edm::Handle< reco::CandidateViewinputCollection
 
const edm::InputTag inputLabel
 
const JetType jetType
 
const std::string outputLabel
 
const edm::InputTag srcPVs
 

Private Member Functions

 FFTJetPatRecoProducer ()
 
 FFTJetPatRecoProducer (const FFTJetPatRecoProducer &)
 
FFTJetPatRecoProduceroperator= (const FFTJetPatRecoProducer &)
 

Private Attributes

std::ofstream externalGridStream
 
fftjet::Grid2d< float > * extGrid
 
bool storeGridsExternally
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Detailed Description

Description: Runs FFTJet pattern recognition stage and saves the results

Implementation: [Notes on implementation]

Definition at line 66 of file FFTJetPatRecoProducer.cc.

Member Typedef Documentation

typedef fftjet::ProximityClusteringTree<fftjet::Peak,long> FFTJetPatRecoProducer::ClusteringTree
protected

Definition at line 74 of file FFTJetPatRecoProducer.cc.

typedef fftjet::ClusteringSequencer<Real> FFTJetPatRecoProducer::Sequencer
protected

Definition at line 76 of file FFTJetPatRecoProducer.cc.

typedef fftjet::SparseClusteringTree<fftjet::Peak,long> FFTJetPatRecoProducer::SparseTree
protected

Definition at line 75 of file FFTJetPatRecoProducer.cc.

typedef fftjet::ClusteringTreeSparsifier<fftjet::Peak,long> FFTJetPatRecoProducer::Sparsifier
protected

Definition at line 77 of file FFTJetPatRecoProducer.cc.

Constructor & Destructor Documentation

FFTJetPatRecoProducer::FFTJetPatRecoProducer ( const edm::ParameterSet ps)
explicit

Definition at line 155 of file FFTJetPatRecoProducer.cc.

References buildKernelConvolver(), buildPeakFinder(), fftjetcms::FFTJetInterface::checkConfig(), clusteringTree, convolver, fwrapper::cs, distanceCalc, fftjetcms::FFTJetInterface::energyFlow, edm::hlt::Exception, externalGridStream, fftjetcms::fftjet_ClusteringTreeSparsifier_parser(), fftjetcms::fftjet_DistanceCalculator_parser(), fftjetcms::fftjet_Grid2d_parser(), fftjetcms::fftjet_PeakSelector_parser(), fftjetcms::fftjet_ScaleSet_parser(), fftjetcms::FFTJetInterface::getEventScale(), edm::ParameterSet::getParameter(), i, makeClusteringTree, dbtoconf::out, fftjetcms::FFTJetInterface::outputLabel, peakSelector, sequencer, sparsifier, storeDiscretizationGrid, storeGridsExternally, fftjetcms::FFTJetInterface::storeInSinglePrecision(), and AlCaHLTBitMon_QueryRunRegistry::string.

156  : FFTJetInterface(ps),
157  clusteringTree(0),
158  completeEventDataCutoff(ps.getParameter<double>("completeEventDataCutoff")),
159  makeClusteringTree(ps.getParameter<bool>("makeClusteringTree")),
160  verifyDataConversion(ps.getUntrackedParameter<bool>("verifyDataConversion",false)),
161  storeDiscretizationGrid(ps.getParameter<bool>("storeDiscretizationGrid")),
162  sparsify(ps.getParameter<bool>("sparsify")),
163  extGrid(0)
164 {
165  // register your products
166  if (makeClusteringTree)
167  {
169  produces<reco::PattRecoTree<float,reco::PattRecoPeak<float> > >(outputLabel);
170  else
171  produces<reco::PattRecoTree<double,reco::PattRecoPeak<double> > >(outputLabel);
172  }
174  produces<reco::DiscretizedEnergyFlow>(outputLabel);
175 
176  // Check if we want to write the grids into an external file
177  const std::string externalGridFile(ps.getParameter<std::string>("externalGridFile"));
178  storeGridsExternally = externalGridFile.size() > 0;
180  {
181  externalGridStream.open(externalGridFile.c_str(), std::ios_base::out |
182  std::ios_base::binary);
183  if (!externalGridStream.is_open())
184  throw cms::Exception("FFTJetBadConfig")
185  << "FFTJetPatRecoProducer failed to open file "
186  << externalGridFile << std::endl;
187  }
188 
190  {
191  throw cms::Exception("FFTJetBadConfig")
192  << "FFTJetPatRecoProducer is not configured to produce anything"
193  << std::endl;
194  }
195 
196  // now do whatever other initialization is needed
197 
198  // Build the discretization grid
200  ps.getParameter<edm::ParameterSet>("GridConfiguration"));
201  checkConfig(energyFlow, "invalid discretization grid");
202 
203  // Build the FFT engine(s), pattern recognition kernel(s),
204  // and the kernel convolver
206 
207  // Build the peak selector
209  ps.getParameter<edm::ParameterSet>("PeakSelectorConfiguration"));
210  checkConfig(peakSelector, "invalid peak selector");
211 
212  // Build the initial set of pattern recognition scales
213  std::auto_ptr<std::vector<double> > iniScales = fftjet_ScaleSet_parser(
214  ps.getParameter<edm::ParameterSet>("InitialScales"));
215  checkConfig(iniScales, "invalid set of scales");
216 
217  // Do we want to use the adaptive clustering tree algorithm?
218  const unsigned maxAdaptiveScales =
219  ps.getParameter<unsigned>("maxAdaptiveScales");
220  const double minAdaptiveRatioLog =
221  ps.getParameter<double>("minAdaptiveRatioLog");
222  if (minAdaptiveRatioLog <= 0.0)
223  throw cms::Exception("FFTJetBadConfig")
224  << "bad adaptive ratio logarithm limit" << std::endl;
225 
226  // Make sure that all standard scales are larger than the
227  // complete event scale
228  if (getEventScale() > 0.0)
229  {
230  const double cs = getEventScale();
231  const unsigned nscales = iniScales->size();
232  for (unsigned i=0; i<nscales; ++i)
233  if (cs >= (*iniScales)[i])
234  throw cms::Exception("FFTJetBadConfig")
235  << "incompatible scale for complete event" << std::endl;
236  }
237 
238  // At this point we are ready to build the clustering sequencer
239  sequencer = std::auto_ptr<Sequencer>(new Sequencer(
240  convolver.get(), peakSelector.get(), buildPeakFinder(ps),
241  *iniScales, maxAdaptiveScales, minAdaptiveRatioLog));
242 
243  // Build the clustering tree sparsifier
244  const edm::ParameterSet& SparsifierConfiguration(
245  ps.getParameter<edm::ParameterSet>("SparsifierConfiguration"));
247  SparsifierConfiguration);
248  checkConfig(sparsifier, "invalid sparsifier parameters");
249 
250  // Build the distance calculator for the clustering tree
251  const edm::ParameterSet& TreeDistanceCalculator(
252  ps.getParameter<edm::ParameterSet>("TreeDistanceCalculator"));
253  distanceCalc = fftjet_DistanceCalculator_parser(TreeDistanceCalculator);
254  checkConfig(distanceCalc, "invalid tree distance calculator");
255 
256  // Build the clustering tree itself
258 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
auto_ptr< ClusterSequence > cs
std::auto_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
void buildKernelConvolver(const edm::ParameterSet &)
void checkConfig(const Ptr &ptr, const char *message)
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
ClusteringTree * clusteringTree
fftjet::ClusteringSequencer< Real > Sequencer
std::auto_ptr< Sparsifier > sparsifier
std::auto_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > distanceCalc
bool storeInSinglePrecision() const
tuple out
Definition: dbtoconf.py:99
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::ProximityClusteringTree< fftjet::Peak, long > ClusteringTree
fftjet::Grid2d< float > * extGrid
const std::string outputLabel
std::auto_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
FFTJetPatRecoProducer::~FFTJetPatRecoProducer ( )

Definition at line 359 of file FFTJetPatRecoProducer.cc.

References clusteringTree, and extGrid.

360 {
361  // do anything here that needs to be done at desctruction time
362  // (e.g. close files, deallocate resources etc.)
363  delete clusteringTree;
364  delete extGrid;
365 }
ClusteringTree * clusteringTree
fftjet::Grid2d< float > * extGrid
FFTJetPatRecoProducer::FFTJetPatRecoProducer ( )
private
FFTJetPatRecoProducer::FFTJetPatRecoProducer ( const FFTJetPatRecoProducer )
private

Member Function Documentation

void FFTJetPatRecoProducer::beginJob ( void  )
overrideprotectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 500 of file FFTJetPatRecoProducer.cc.

501 {
502 }
template<class Real >
void FFTJetPatRecoProducer::buildDenseProduct ( edm::Event ev) const
protected

Definition at line 399 of file FFTJetPatRecoProducer.cc.

References CastorDataFrameFilter_impl::check(), clusteringTree, fftjetcms::densePeakTreeFromStorable(), fftjetcms::densePeakTreeToStorable(), distanceCalc, edm::hlt::Exception, fftjetcms::FFTJetInterface::getEventScale(), fftjetcms::FFTJetInterface::outputLabel, edm::Event::put(), sequencer, fftjetcms::FFTJetInterface::storeInSinglePrecision(), diffTreeTool::tree, and verifyDataConversion.

400 {
402 
403  std::auto_ptr<StoredTree> tree(new StoredTree());
404 
406  sequencer->maxAdaptiveScales(),
407  tree.get());
408 
409  // Check that we can restore the tree
411  {
413  const std::vector<double>& scalesUsed(sequencer->getInitialScales());
415  if (*clusteringTree != check)
416  throw cms::Exception("FFTJetInterface")
417  << "Data conversion failed for dense clustering tree"
418  << std::endl;
419  }
420 
421  ev.put(tree, outputLabel);
422 }
Class for storing FFTJet sparse clustering trees.
Definition: PattRecoTree.h:18
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
ClusteringTree * clusteringTree
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)
void densePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::AbsClusteringTree< fftjet::Peak, long > *out)
std::auto_ptr< Sequencer > sequencer
fftjet::ProximityClusteringTree< fftjet::Peak, long > ClusteringTree
const std::string outputLabel
void FFTJetPatRecoProducer::buildKernelConvolver ( const edm::ParameterSet ps)
protected

Definition at line 261 of file FFTJetPatRecoProducer.cc.

References anotherEngine, convolver, fftjetcms::FFTJetInterface::energyFlow, engine, etaKernel, edm::hlt::Exception, edm::ParameterSet::getParameter(), kernel2d, M_PI, and phiKernel.

Referenced by FFTJetPatRecoProducer().

262 {
263  // Check the parameter named "etaDependentScaleFactors". If the vector
264  // of scales is empty we will use 2d kernel, otherwise use 1d kernels
265  const std::vector<double> etaDependentScaleFactors(
266  ps.getParameter<std::vector<double> >("etaDependentScaleFactors"));
267 
268  // Make sure that the number of scale factors provided is correct
269  const bool use2dKernel = etaDependentScaleFactors.empty();
270  if (!use2dKernel)
271  if (etaDependentScaleFactors.size() != energyFlow->nEta())
272  throw cms::Exception("FFTJetBadConfig")
273  << "invalid number of eta-dependent scale factors"
274  << std::endl;
275 
276  // Get the eta and phi scales for the kernel(s)
277  double kernelEtaScale = ps.getParameter<double>("kernelEtaScale");
278  const double kernelPhiScale = ps.getParameter<double>("kernelPhiScale");
279  if (kernelEtaScale <= 0.0 || kernelPhiScale <= 0.0)
280  throw cms::Exception("FFTJetBadConfig")
281  << "invalid kernel scale" << std::endl;
282 
283  // FFT assumes that the grid extent in eta is 2*Pi. Adjust the
284  // kernel scale in eta to compensate.
285  kernelEtaScale *= (2.0*M_PI/(energyFlow->etaMax() - energyFlow->etaMin()));
286 
287  // Are we going to try to fix the efficiency near detector edges?
288  const bool fixEfficiency = ps.getParameter<bool>("fixEfficiency");
289 
290  // Minimum and maximum eta bin for the convolver
291  unsigned convolverMinBin = 0, convolverMaxBin = 0;
292  if (fixEfficiency || !use2dKernel)
293  {
294  convolverMinBin = ps.getParameter<unsigned>("convolverMinBin");
295  convolverMaxBin = ps.getParameter<unsigned>("convolverMaxBin");
296  }
297 
298  if (use2dKernel)
299  {
300  // Build the FFT engine
301  engine = std::auto_ptr<MyFFTEngine>(
302  new MyFFTEngine(energyFlow->nEta(), energyFlow->nPhi()));
303 
304  // 2d kernel
305  kernel2d = std::auto_ptr<fftjet::AbsFrequencyKernel>(
306  new fftjet::DiscreteGauss2d(
307  kernelEtaScale, kernelPhiScale,
308  energyFlow->nEta(), energyFlow->nPhi()));
309 
310  // 2d convolver
311  convolver = std::auto_ptr<fftjet::AbsConvolverBase<Real> >(
312  new fftjet::FrequencyKernelConvolver<Real,Complex>(
313  engine.get(), kernel2d.get(),
314  convolverMinBin, convolverMaxBin));
315  }
316  else
317  {
318  // Need separate FFT engines for eta and phi
319  engine = std::auto_ptr<MyFFTEngine>(
320  new MyFFTEngine(1, energyFlow->nEta()));
321  anotherEngine = std::auto_ptr<MyFFTEngine>(
322  new MyFFTEngine(1, energyFlow->nPhi()));
323 
324  // 1d kernels
325  etaKernel = std::auto_ptr<fftjet::AbsFrequencyKernel1d>(
326  new fftjet::DiscreteGauss1d(kernelEtaScale, energyFlow->nEta()));
327 
328  phiKernel = std::auto_ptr<fftjet::AbsFrequencyKernel1d>(
329  new fftjet::DiscreteGauss1d(kernelPhiScale, energyFlow->nPhi()));
330 
331  // Sequential convolver
332  convolver = std::auto_ptr<fftjet::AbsConvolverBase<Real> >(
333  new fftjet::FrequencySequentialConvolver<Real,Complex>(
334  engine.get(), anotherEngine.get(),
335  etaKernel.get(), phiKernel.get(),
336  etaDependentScaleFactors, convolverMinBin,
337  convolverMaxBin, fixEfficiency));
338  }
339 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::auto_ptr< fftjet::AbsFrequencyKernel1d > phiKernel
std::auto_ptr< MyFFTEngine > anotherEngine
std::auto_ptr< fftjet::AbsFrequencyKernel > kernel2d
std::auto_ptr< MyFFTEngine > engine
#define M_PI
Definition: BFit3D.cc:3
std::auto_ptr< fftjet::AbsFrequencyKernel1d > etaKernel
std::auto_ptr< fftjet::AbsConvolverBase< Real > > convolver
fftjet::FFTWDoubleEngine MyFFTEngine
fftjet::PeakFinder FFTJetPatRecoProducer::buildPeakFinder ( const edm::ParameterSet ps)
protected

Definition at line 342 of file FFTJetPatRecoProducer.cc.

References fftjetcms::FFTJetInterface::energyFlow, edm::hlt::Exception, and edm::ParameterSet::getParameter().

Referenced by FFTJetPatRecoProducer().

343 {
344  const double peakFinderMaxEta = ps.getParameter<double>("peakFinderMaxEta");
345  if (peakFinderMaxEta <= 0.0)
346  throw cms::Exception("FFTJetBadConfig")
347  << "invalid peak finder eta cut" << std::endl;
348  const double maxMagnitude = ps.getParameter<double>("peakFinderMaxMagnitude");
349  int minBin = energyFlow->getEtaBin(-peakFinderMaxEta);
350  if (minBin < 0)
351  minBin = 0;
352  int maxBin = energyFlow->getEtaBin(peakFinderMaxEta) + 1;
353  if (maxBin < 0)
354  maxBin = 0;
355  return fftjet::PeakFinder(maxMagnitude, true, minBin, maxBin);
356 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
template<class Real >
void FFTJetPatRecoProducer::buildSparseProduct ( edm::Event ev) const
protected

Definition at line 372 of file FFTJetPatRecoProducer.cc.

References CastorDataFrameFilter_impl::check(), edm::hlt::Exception, fftjetcms::FFTJetInterface::getEventScale(), fftjetcms::FFTJetInterface::outputLabel, edm::Event::put(), sequencer, fftjetcms::sparsePeakTreeFromStorable(), fftjetcms::sparsePeakTreeToStorable(), sparseTree, fftjetcms::FFTJetInterface::storeInSinglePrecision(), diffTreeTool::tree, and verifyDataConversion.

373 {
375 
376  std::auto_ptr<StoredTree> tree(new StoredTree());
377 
379  sequencer->maxAdaptiveScales(),
380  tree.get());
381 
382  // Check that we can restore the tree
384  {
386  const std::vector<double>& scalesUsed(sequencer->getInitialScales());
387  sparsePeakTreeFromStorable(*tree, &scalesUsed, getEventScale(), &check);
388  if (sparseTree != check)
389  throw cms::Exception("FFTJetInterface")
390  << "Data conversion failed for sparse clustering tree"
391  << std::endl;
392  }
393 
394  ev.put(tree, outputLabel);
395 }
Class for storing FFTJet sparse clustering trees.
Definition: PattRecoTree.h:18
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
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)
bool storeInSinglePrecision() const
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
std::auto_ptr< Sequencer > sequencer
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
const std::string outputLabel
void FFTJetPatRecoProducer::endJob ( void  )
overrideprotectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 506 of file FFTJetPatRecoProducer.cc.

References externalGridStream, and storeGridsExternally.

507 {
509  externalGridStream.close();
510 }
FFTJetPatRecoProducer& FFTJetPatRecoProducer::operator= ( const FFTJetPatRecoProducer )
private
void FFTJetPatRecoProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Implements edm::EDProducer.

Definition at line 426 of file FFTJetPatRecoProducer.cc.

References CastorDataFrameFilter_impl::check(), clusteringTree, completeEventDataCutoff, fftjetcms::convert_Grid2d_to_float(), fftjetcms::copy_Grid2d_data(), fftjetcms::FFTJetInterface::discretizeEnergyFlow(), fftjetcms::FFTJetInterface::energyFlow, edm::hlt::Exception, externalGridStream, extGrid, g, fftjetcms::FFTJetInterface::getEventScale(), iEvent, fftjetcms::FFTJetInterface::loadInputCollection(), makeClusteringTree, fftjetcms::FFTJetInterface::outputLabel, edm::Event::put(), sequencer, sparseTree, sparsifier, sparsify, storeDiscretizationGrid, storeGridsExternally, fftjetcms::FFTJetInterface::storeInSinglePrecision(), and verifyDataConversion.

428 {
429  loadInputCollection(iEvent);
431 
432  if (makeClusteringTree)
433  {
435  if (getEventScale() > 0.0)
436  sequencer->insertCompleteEvent(getEventScale(), *energyFlow,
438 
439  if (sparsify)
440  {
441  sparsifier->sparsify(*clusteringTree, &sparseTree);
442 
443  // Do not call the "sortNodes" method of the sparse tree here.
444  // Currently, the nodes are sorted by daughter number.
445  // This is the way we want it in storage because the stored
446  // tree does not include daughter ordering info explicitly.
447 
449  buildSparseProduct<float>(iEvent);
450  else
451  buildSparseProduct<double>(iEvent);
452  }
453  else
454  {
456  buildDenseProduct<float>(iEvent);
457  else
458  buildDenseProduct<double>(iEvent);
459  }
460  }
461 
463  {
464  const fftjet::Grid2d<Real>& g(*energyFlow);
465 
466  std::auto_ptr<reco::DiscretizedEnergyFlow> flow(
468  g.data(), g.title(), g.etaMin(), g.etaMax(),
469  g.phiBin0Edge(), g.nEta(), g.nPhi()));
470 
472  {
473  fftjet::Grid2d<Real> check(
474  flow->nEtaBins(), flow->etaMin(), flow->etaMax(),
475  flow->nPhiBins(), flow->phiBin0Edge(), flow->title());
476  check.blockSet(flow->data(), flow->nEtaBins(), flow->nPhiBins());
477  assert(g == check);
478  }
479 
480  iEvent.put(flow, outputLabel);
481  }
482 
484  {
485  if (extGrid)
487  else
489  if (!extGrid->write(externalGridStream))
490  {
491  throw cms::Exception("FFTJetPatRecoProducer::produce")
492  << "Failed to write grid data into an external file"
493  << std::endl;
494  }
495  }
496 }
fftjet::Grid2d< float > * convert_Grid2d_to_float(const fftjet::Grid2d< Numeric > &grid)
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
void loadInputCollection(const edm::Event &)
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
Definition: Activities.doc:4
int iEvent
Definition: GenABIO.cc:243
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
ClusteringTree * clusteringTree
std::auto_ptr< Sparsifier > sparsifier
bool storeInSinglePrecision() const
void copy_Grid2d_data(fftjet::Grid2d< F2 > *to, const fftjet::Grid2d< F1 > &from)
std::auto_ptr< Sequencer > sequencer
fftjet::Grid2d< float > * extGrid
const std::string outputLabel

Member Data Documentation

std::auto_ptr<MyFFTEngine> FFTJetPatRecoProducer::anotherEngine
protected

Definition at line 104 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver().

ClusteringTree* FFTJetPatRecoProducer::clusteringTree
protected
const double FFTJetPatRecoProducer::completeEventDataCutoff
protected

Definition at line 126 of file FFTJetPatRecoProducer.cc.

Referenced by produce().

std::auto_ptr<fftjet::AbsConvolverBase<Real> > FFTJetPatRecoProducer::convolver
protected

Definition at line 112 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver(), and FFTJetPatRecoProducer().

std::auto_ptr<fftjet::AbsDistanceCalculator<fftjet::Peak> > FFTJetPatRecoProducer::distanceCalc
protected

Definition at line 118 of file FFTJetPatRecoProducer.cc.

Referenced by buildDenseProduct(), and FFTJetPatRecoProducer().

std::auto_ptr<MyFFTEngine> FFTJetPatRecoProducer::engine
protected

Definition at line 103 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver().

std::auto_ptr<fftjet::AbsFrequencyKernel1d> FFTJetPatRecoProducer::etaKernel
protected

Definition at line 108 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver().

std::ofstream FFTJetPatRecoProducer::externalGridStream
private

Definition at line 147 of file FFTJetPatRecoProducer.cc.

Referenced by endJob(), FFTJetPatRecoProducer(), and produce().

fftjet::Grid2d<float>* FFTJetPatRecoProducer::extGrid
private

Definition at line 149 of file FFTJetPatRecoProducer.cc.

Referenced by produce(), and ~FFTJetPatRecoProducer().

std::auto_ptr<fftjet::AbsFrequencyKernel> FFTJetPatRecoProducer::kernel2d
protected

Definition at line 107 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver().

const bool FFTJetPatRecoProducer::makeClusteringTree
protected

Definition at line 129 of file FFTJetPatRecoProducer.cc.

Referenced by FFTJetPatRecoProducer(), and produce().

std::auto_ptr<fftjet::Functor1<bool,fftjet::Peak> > FFTJetPatRecoProducer::peakSelector
protected

Definition at line 115 of file FFTJetPatRecoProducer.cc.

Referenced by FFTJetPatRecoProducer().

std::auto_ptr<fftjet::AbsFrequencyKernel1d> FFTJetPatRecoProducer::phiKernel
protected

Definition at line 109 of file FFTJetPatRecoProducer.cc.

Referenced by buildKernelConvolver().

std::auto_ptr<Sequencer> FFTJetPatRecoProducer::sequencer
protected
SparseTree FFTJetPatRecoProducer::sparseTree
protected

Definition at line 121 of file FFTJetPatRecoProducer.cc.

Referenced by buildSparseProduct(), and produce().

std::auto_ptr<Sparsifier> FFTJetPatRecoProducer::sparsifier
protected

Definition at line 100 of file FFTJetPatRecoProducer.cc.

Referenced by FFTJetPatRecoProducer(), and produce().

const bool FFTJetPatRecoProducer::sparsify
protected

Definition at line 139 of file FFTJetPatRecoProducer.cc.

Referenced by produce().

const bool FFTJetPatRecoProducer::storeDiscretizationGrid
protected

Definition at line 136 of file FFTJetPatRecoProducer.cc.

Referenced by FFTJetPatRecoProducer(), and produce().

bool FFTJetPatRecoProducer::storeGridsExternally
private

Definition at line 148 of file FFTJetPatRecoProducer.cc.

Referenced by endJob(), FFTJetPatRecoProducer(), and produce().

const bool FFTJetPatRecoProducer::verifyDataConversion
protected

Definition at line 133 of file FFTJetPatRecoProducer.cc.

Referenced by buildDenseProduct(), buildSparseProduct(), and produce().