CMS 3D CMS Logo

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

#include <RecoJets/FFTJetProducers/plugins/FFTJetProducer.h>

Inheritance diagram for FFTJetProducer:
edm::EDProducer fftjetcms::FFTJetInterface edm::ProducerBase edm::ProductRegistryHelper

Public Types

typedef fftjet::RecombinedJet
< fftjetcms::VectorLike
RecoFFTJet
 
enum  Resolution { FIXED = 0, MAXIMALLY_STABLE, GLOBALLY_ADAPTIVE, LOCALLY_ADAPTIVE }
 
typedef
fftjet::SparseClusteringTree
< fftjet::Peak, long > 
SparseTree
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from fftjetcms::FFTJetInterface
enum  JetType {
  BASICJET = 0, GENJET, CALOJET, PFJET,
  TRACKJET, JPTJET
}
 

Public Member Functions

 FFTJetProducer (const edm::ParameterSet &)
 
virtual ~FFTJetProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from fftjetcms::FFTJetInterface
virtual ~FFTJetInterface ()
 

Static Public Member Functions

static Resolution parse_resolution (const std::string &name)
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from fftjetcms::FFTJetInterface
static JetType parse_jet_type (const std::string &name)
 

Protected Member Functions

virtual void assignMembershipFunctions (std::vector< fftjet::Peak > *preclusters)
 
virtual void beginJob ()
 
virtual void endJob ()
 
virtual std::auto_ptr
< fftjetcms::AbsBgFunctor
parse_bgMembershipFunction (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor2< double,
RecoFFTJet, RecoFFTJet > > 
parse_jetDistanceCalc (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::ScaleSpaceKernel > 
parse_jetMembershipFunction (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
parse_memberFactorCalcJet (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
parse_memberFactorCalcPeak (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< bool,
fftjet::Peak > > 
parse_peakSelector (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
parse_recoScaleCalcJet (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
parse_recoScaleCalcPeak (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
parse_recoScaleRatioCalcJet (const edm::ParameterSet &)
 
virtual std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
parse_recoScaleRatioCalcPeak (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 
virtual void selectPreclusters (const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
 
void selectTreeNodes (const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelect, std::vector< SparseTree::NodeId > *nodes)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 
- 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
 

Private Types

typedef
fftjet::AbsRecombinationAlg
< fftjetcms::Real,
fftjetcms::VectorLike,
fftjetcms::BgData
GridAlg
 
typedef
fftjet::AbsVectorRecombinationAlg
< fftjetcms::VectorLike,
fftjetcms::BgData
RecoAlg
 

Private Member Functions

void buildGridAlg ()
 
bool checkConvergence (const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
 
void determineGriddedConstituents ()
 
void determineVectorConstituents ()
 
 FFTJetProducer ()
 
 FFTJetProducer (const FFTJetProducer &)
 
unsigned iterateJetReconstruction ()
 
void loadEnergyFlow (const edm::Event &iEvent)
 
template<class Real >
void loadSparseTreeData (const edm::Event &)
 
template<typename Jet >
void makeProduces (const std::string &alias, const std::string &tag)
 
FFTJetProduceroperator= (const FFTJetProducer &)
 
void prepareRecombinationScales ()
 
void saveResults (edm::Event &iEvent, const edm::EventSetup &)
 
template<typename Jet >
void writeJets (edm::Event &iEvent, const edm::EventSetup &)
 

Private Attributes

const bool assignConstituents
 
std::auto_ptr
< fftjetcms::AbsBgFunctor
bgMembershipFunction
 
std::vector< std::vector
< reco::CandidatePtr > > 
constituents
 
const double convergenceDistance
 
const double fixedScale
 
std::auto_ptr< GridAlggridAlg
 
const double gridScanMaxEta
 
std::auto_ptr< std::vector
< double > > 
iniScales
 
const bool isCrisp
 
unsigned iterationsPerformed
 
std::vector< RecoFFTJetiterJets
 
std::vector< fftjet::Peak > iterPreclusters
 
std::auto_ptr
< fftjet::Functor2< double,
RecoFFTJet, RecoFFTJet > > 
jetDistanceCalc
 
std::auto_ptr
< fftjet::ScaleSpaceKernel > 
jetMembershipFunction
 
const unsigned maxIterations
 
unsigned maxLevel
 
const double maxStableScale
 
std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
memberFactorCalcJet
 
std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
memberFactorCalcPeak
 
unsigned minLevel
 
const double minStableScale
 
const edm::ParameterSet myConfiguration
 
const unsigned nClustersRequested
 
const unsigned nJetsRequiredToConverge
 
std::vector< SparseTree::NodeId > nodes
 
const double noiseLevel
 
std::vector< unsigned > occupancy
 
std::auto_ptr
< fftjet::Functor1< bool,
fftjet::Peak > > 
peakSelector
 
std::vector< fftjet::Peak > preclusters
 
std::auto_ptr< RecoAlgrecoAlg
 
std::vector< RecoFFTJetrecoJets
 
const std::string recombinationAlgorithm
 
const double recombinationDataCutoff
 
std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
recoScaleCalcJet
 
std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
recoScaleCalcPeak
 
std::auto_ptr
< fftjet::Functor1< double,
RecoFFTJet > > 
recoScaleRatioCalcJet
 
std::auto_ptr
< fftjet::Functor1< double,
fftjet::Peak > > 
recoScaleRatioCalcPeak
 
Resolution resolution
 
const bool resumConstituents
 
const bool reuseExistingGrid
 
SparseTree sparseTree
 
const double stabilityAlpha
 
std::vector< double > thresholds
 
const edm::InputTag treeLabel
 
fftjetcms::VectorLike unclustered
 
const double unlikelyBgWeight
 
double unused
 
unsigned usedLevel
 
const bool useGriddedAlgorithm
 

Additional Inherited Members

- 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
 

Detailed Description

Description: makes jets using FFTJet clustering tree

Implementation: [Notes on implementation]

Description: makes jets using FFTJet clustering tree

Implementation: If you want to change the jet algorithm functionality (for example, by providing your own jet membership function), derive from this class and override the appropriate parser method (for example, parse_jetMembershipFunction). At the end of your own parser, don't forget to call the parser of the base class in order to get the default behavior when your special configuration is not provided (this is known as the "chain-of-responsibility" design pattern). If you also need to override "beginJob" and/or "produce" methods, the first thing to do in your method is to call the corresponding method of this base.

Definition at line 57 of file FFTJetProducer.h.

Member Typedef Documentation

typedef fftjet::AbsRecombinationAlg< fftjetcms::Real,fftjetcms::VectorLike,fftjetcms::BgData> FFTJetProducer::GridAlg
private

Definition at line 150 of file FFTJetProducer.h.

typedef fftjet::AbsVectorRecombinationAlg< fftjetcms::VectorLike,fftjetcms::BgData> FFTJetProducer::RecoAlg
private

Definition at line 148 of file FFTJetProducer.h.

typedef fftjet::RecombinedJet<fftjetcms::VectorLike> FFTJetProducer::RecoFFTJet

Definition at line 61 of file FFTJetProducer.h.

typedef fftjet::SparseClusteringTree<fftjet::Peak,long> FFTJetProducer::SparseTree

Definition at line 62 of file FFTJetProducer.h.

Member Enumeration Documentation

Enumerator
FIXED 
MAXIMALLY_STABLE 
GLOBALLY_ADAPTIVE 
LOCALLY_ADAPTIVE 

Definition at line 64 of file FFTJetProducer.h.

Constructor & Destructor Documentation

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

Definition at line 123 of file FFTJetProducer.cc.

References assignConstituents, fftjetcms::FFTJetInterface::checkConfig(), edm::hlt::Exception, fftjetcms::fftjet_ScaleSet_parser(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), iniScales, jet_type_switch, makeProduces(), fftjetcms::FFTJetInterface::outputLabel, resumConstituents, and python.multivaluedict::sort().

124  : FFTJetInterface(ps),
125  myConfiguration(ps),
129  init_param(unsigned, maxIterations),
134  init_param(double, fixedScale),
135  init_param(double, minStableScale),
136  init_param(double, maxStableScale),
137  init_param(double, stabilityAlpha),
138  init_param(double, noiseLevel),
139  init_param(unsigned, nClustersRequested),
140  init_param(double, gridScanMaxEta),
141  init_param(std::string, recombinationAlgorithm),
142  init_param(bool, isCrisp),
143  init_param(double, unlikelyBgWeight),
145  resolution(parse_resolution(ps.getParameter<std::string>("resolution"))),
146 
147  minLevel(0),
148  maxLevel(0),
149  usedLevel(0),
150  unused(0.0),
152  constituents(200)
153 {
154  // Check that the settings make sense
156  throw cms::Exception("FFTJetBadConfig")
157  << "Can't resum constituents if they are not assigned"
158  << std::endl;
159 
160  produces<reco::FFTJetProducerSummary>(outputLabel);
161  const std::string alias(ps.getUntrackedParameter<std::string>(
162  "alias", outputLabel));
164 
165  // Build the set of pattern recognition scales.
166  // This is needed in order to read the clustering tree
167  // from the event record.
169  ps.getParameter<edm::ParameterSet>("InitialScales"));
170  checkConfig(iniScales, "invalid set of scales");
171  std::sort(iniScales->begin(), iniScales->end(), std::greater<double>());
172 
173  // Most of the configuration has to be performed inside
174  // the "beginJob" method. This is because chaining of the
175  // parsers between this base class and the derived classes
176  // can not work from the constructor of the base class.
177 }
std::vector< std::vector< reco::CandidatePtr > > constituents
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
unsigned iterationsPerformed
const bool useGriddedAlgorithm
static Resolution parse_resolution(const std::string &name)
const bool resumConstituents
const double gridScanMaxEta
const std::string recombinationAlgorithm
const double fixedScale
void checkConfig(const Ptr &ptr, const char *message)
const double unlikelyBgWeight
void makeProduces(const std::string &alias, const std::string &tag)
const unsigned nJetsRequiredToConverge
Resolution resolution
const bool isCrisp
const double recombinationDataCutoff
const double minStableScale
const double maxStableScale
#define init_param(type, varname)
const bool reuseExistingGrid
const unsigned nClustersRequested
std::auto_ptr< std::vector< double > > iniScales
unsigned usedLevel
const double noiseLevel
const bool assignConstituents
const edm::InputTag treeLabel
const edm::ParameterSet myConfiguration
const double stabilityAlpha
const double convergenceDistance
#define jet_type_switch(method, arg1, arg2)
const std::string outputLabel
std::auto_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
const unsigned maxIterations
FFTJetProducer::~FFTJetProducer ( )
virtual

Definition at line 180 of file FFTJetProducer.cc.

181 {
182 }
FFTJetProducer::FFTJetProducer ( )
private
FFTJetProducer::FFTJetProducer ( const FFTJetProducer )
private

Member Function Documentation

void FFTJetProducer::assignMembershipFunctions ( std::vector< fftjet::Peak > *  preclusters)
protectedvirtual

Definition at line 804 of file FFTJetProducer.cc.

Referenced by produce().

805 {
806 }
void FFTJetProducer::beginJob ( void  )
protectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 810 of file FFTJetProducer.cc.

References assignConstituents, bgMembershipFunction, buildGridAlg(), fftjetcms::FFTJetInterface::checkConfig(), fftjetcms::FFTJetInterface::energyFlow, reco::tau::disc::Eta(), edm::hlt::Exception, fftjetcms::fftjet_Grid2d_parser(), edm::ParameterSet::getParameter(), isCrisp, jetDistanceCalc, jetMembershipFunction, maxIterations, memberFactorCalcJet, memberFactorCalcPeak, myConfiguration, NULL, parse_bgMembershipFunction(), parse_jetDistanceCalc(), parse_jetMembershipFunction(), parse_memberFactorCalcJet(), parse_memberFactorCalcPeak(), parse_peakSelector(), parse_recoScaleCalcJet(), parse_recoScaleCalcPeak(), parse_recoScaleRatioCalcJet(), parse_recoScaleRatioCalcPeak(), peakSelector, colinearityKinematic::Phi, recoAlg, recombinationAlgorithm, recoScaleCalcJet, recoScaleCalcPeak, recoScaleRatioCalcJet, recoScaleRatioCalcPeak, reuseExistingGrid, unlikelyBgWeight, and useGriddedAlgorithm.

811 {
813 
814  // Parse the peak selector definition
816  checkConfig(peakSelector, "invalid peak selector");
817 
819  checkConfig(jetMembershipFunction, "invalid jet membership function");
820 
822  checkConfig(bgMembershipFunction, "invalid noise membership function");
823 
824  // Build the energy recombination algorithm
825  if (!useGriddedAlgorithm)
826  {
827  fftjet::DefaultVectorRecombinationAlgFactory<
828  VectorLike,BgData,VBuilder> factory;
829  if (factory[recombinationAlgorithm] == NULL)
830  throw cms::Exception("FFTJetBadConfig")
831  << "Invalid vector recombination algorithm \""
832  << recombinationAlgorithm << "\"" << std::endl;
833  recoAlg = std::auto_ptr<RecoAlg>(
834  factory[recombinationAlgorithm]->create(
835  jetMembershipFunction.get(),
836  &VectorLike::Et, &VectorLike::Eta, &VectorLike::Phi,
837  bgMembershipFunction.get(),
839  }
840  else if (!reuseExistingGrid)
841  {
843  ps.getParameter<edm::ParameterSet>("GridConfiguration"));
844  checkConfig(energyFlow, "invalid discretization grid");
845  buildGridAlg();
846  }
847 
848  // Parse the calculator of the recombination scale
850  checkConfig(recoScaleCalcPeak, "invalid spec for the "
851  "reconstruction scale calculator from peaks");
852 
853  // Parse the calculator of the recombination scale ratio
855  checkConfig(recoScaleRatioCalcPeak, "invalid spec for the "
856  "reconstruction scale ratio calculator from peaks");
857 
858  // Calculator for the membership function factor
860  checkConfig(memberFactorCalcPeak, "invalid spec for the "
861  "membership function factor calculator from peaks");
862 
863  if (maxIterations > 1)
864  {
865  // We are going to run iteratively. Make required objects.
867  checkConfig(recoScaleCalcJet, "invalid spec for the "
868  "reconstruction scale calculator from jets");
869 
871  checkConfig(recoScaleRatioCalcJet, "invalid spec for the "
872  "reconstruction scale ratio calculator from jets");
873 
875  checkConfig(memberFactorCalcJet, "invalid spec for the "
876  "membership function factor calculator from jets");
877 
879  checkConfig(memberFactorCalcJet, "invalid spec for the "
880  "jet distance calculator");
881  }
882 }
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::auto_ptr< RecoAlg > recoAlg
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
const bool useGriddedAlgorithm
std::auto_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector(const edm::ParameterSet &)
double BgData
const std::string recombinationAlgorithm
virtual std::auto_ptr< fftjetcms::AbsBgFunctor > parse_bgMembershipFunction(const edm::ParameterSet &)
#define NULL
Definition: scimark2.h:8
void checkConfig(const Ptr &ptr, const char *message)
const double unlikelyBgWeight
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
const bool isCrisp
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak(const edm::ParameterSet &)
std::auto_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
const bool reuseExistingGrid
math::XYZTLorentzVector VectorLike
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc(const edm::ParameterSet &)
const bool assignConstituents
const edm::ParameterSet myConfiguration
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet(const edm::ParameterSet &)
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::auto_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
std::auto_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
const unsigned maxIterations
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
void FFTJetProducer::buildGridAlg ( )
private

Definition at line 361 of file FFTJetProducer.cc.

References assignConstituents, bgMembershipFunction, fftjetcms::FFTJetInterface::energyFlow, edm::hlt::Exception, gridAlg, gridScanMaxEta, isCrisp, jetMembershipFunction, NULL, recombinationAlgorithm, recombinationDataCutoff, and unlikelyBgWeight.

Referenced by beginJob(), and loadEnergyFlow().

362 {
363  int minBin = energyFlow->getEtaBin(-gridScanMaxEta);
364  if (minBin < 0)
365  minBin = 0;
366  int maxBin = energyFlow->getEtaBin(gridScanMaxEta) + 1;
367  if (maxBin < 0)
368  maxBin = 0;
369 
370  fftjet::DefaultRecombinationAlgFactory<
371  Real,VectorLike,BgData,VBuilder> factory;
372  if (factory[recombinationAlgorithm] == NULL)
373  throw cms::Exception("FFTJetBadConfig")
374  << "Invalid grid recombination algorithm \""
375  << recombinationAlgorithm << "\"" << std::endl;
376  gridAlg = std::auto_ptr<GridAlg>(
377  factory[recombinationAlgorithm]->create(
378  jetMembershipFunction.get(),
379  bgMembershipFunction.get(),
381  isCrisp, false, assignConstituents, minBin, maxBin));
382 }
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
const double gridScanMaxEta
std::auto_ptr< GridAlg > gridAlg
double BgData
const std::string recombinationAlgorithm
#define NULL
Definition: scimark2.h:8
const double unlikelyBgWeight
const bool isCrisp
const double recombinationDataCutoff
std::auto_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
math::XYZTLorentzVector VectorLike
const bool assignConstituents
double Real
std::auto_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
bool FFTJetProducer::checkConvergence ( const std::vector< RecoFFTJet > &  previousIterResult,
std::vector< RecoFFTJet > &  thisIterResult 
)
private

Definition at line 412 of file FFTJetProducer.cc.

References convergenceDistance, i, and jetDistanceCalc.

Referenced by iterateJetReconstruction().

414 {
415  fftjet::Functor2<double,RecoFFTJet,RecoFFTJet>&
416  distanceCalc(*jetDistanceCalc);
417 
418  const unsigned nJets = previous.size();
419  const RecoFFTJet* prev = &previous[0];
420  RecoFFTJet* next = &nextSet[0];
421 
422  // Calculate convergence distances for all jets
423  bool converged = true;
424  for (unsigned i=0; i<nJets; ++i)
425  {
426  const double d = distanceCalc(prev[i], next[i]);
427  next[i].setConvergenceDistance(d);
428  if (i < nJetsRequiredToConverge && d > convergenceDistance)
429  converged = false;
430  }
431 
432  return converged;
433 }
int i
Definition: DBlmapReader.cc:9
fftjet::RecombinedJet< VectorLike > RecoFFTJet
const double convergenceDistance
std::auto_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
void FFTJetProducer::determineGriddedConstituents ( )
private

Definition at line 504 of file FFTJetProducer.cc.

References fftjetcms::FFTJetInterface::candidateIndex, constituents, fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, g, gridAlg, i, fftjetcms::FFTJetInterface::inputCollection, and recoJets.

Referenced by produce().

505 {
506  const unsigned nJets = recoJets.size();
507  const unsigned* clusterMask = gridAlg->getClusterMask();
508  const int nEta = gridAlg->getLastNEta();
509  const int nPhi = gridAlg->getLastNPhi();
510  const fftjet::Grid2d<Real>& g(*energyFlow);
511 
512  const unsigned nInputs = eventData.size();
513  const VectorLike* inp = nInputs ? &eventData[0] : 0;
514  const unsigned* candIdx = nInputs ? &candidateIndex[0] : 0;
515  for (unsigned i=0; i<nInputs; ++i)
516  {
517  const VectorLike& item(inp[i]);
518  const int iPhi = g.getPhiBin(item.Phi());
519  const int iEta = g.getEtaBin(item.Eta());
520  const unsigned mask = iEta >= 0 && iEta < nEta ?
521  clusterMask[iEta*nPhi + iPhi] : 0;
522  assert(mask <= nJets);
523  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
524  }
525 }
std::vector< std::vector< reco::CandidatePtr > > constituents
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
edm::Handle< reco::CandidateView > inputCollection
std::auto_ptr< GridAlg > gridAlg
std::vector< RecoFFTJet > recoJets
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
std::vector< unsigned > candidateIndex
math::XYZTLorentzVector VectorLike
std::vector< fftjetcms::VectorLike > eventData
void FFTJetProducer::determineVectorConstituents ( )
private

Definition at line 528 of file FFTJetProducer.cc.

References fftjetcms::FFTJetInterface::candidateIndex, constituents, fftjetcms::FFTJetInterface::eventData, i, fftjetcms::FFTJetInterface::inputCollection, recoAlg, and recoJets.

Referenced by produce().

529 {
530  const unsigned nJets = recoJets.size();
531  const unsigned* clusterMask = recoAlg->getClusterMask();
532  const unsigned maskLength = recoAlg->getLastNData();
533  assert(maskLength == eventData.size());
534 
535  const unsigned* candIdx = maskLength ? &candidateIndex[0] : 0;
536  for (unsigned i=0; i<maskLength; ++i)
537  {
538  // In FFTJet, the mask value of 0 corresponds to unclustered
539  // energy. We will do the same here. Jet numbers are therefore
540  // shifted by 1 wrt constituents vector, and constituents[1]
541  // corresponds to jet number 0.
542  const unsigned mask = clusterMask[i];
543  assert(mask <= nJets);
544  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
545  }
546 }
std::vector< std::vector< reco::CandidatePtr > > constituents
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< RecoAlg > recoAlg
edm::Handle< reco::CandidateView > inputCollection
std::vector< RecoFFTJet > recoJets
std::vector< unsigned > candidateIndex
std::vector< fftjetcms::VectorLike > eventData
void FFTJetProducer::endJob ( void  )
protectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 886 of file FFTJetProducer.cc.

887 {
888 }
unsigned FFTJetProducer::iterateJetReconstruction ( )
private

Definition at line 436 of file FFTJetProducer.cc.

References checkConvergence(), fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, edm::hlt::Exception, gridAlg, i, iterJets, iterPreclusters, metsig::jet, analyzePatCleaning_cfg::jets, maxIterations, memberFactorCalcJet, noiseLevel, L1TEmulatorMonitor_cff::p, preclusters, recoAlg, recoJets, recoScaleCalcJet, recoScaleRatioCalcJet, ntuplemaker::status, unclustered, unused, and useGriddedAlgorithm.

Referenced by produce().

437 {
438  fftjet::Functor1<double,RecoFFTJet>& scaleCalc(*recoScaleCalcJet);
439  fftjet::Functor1<double,RecoFFTJet>& ratioCalc(*recoScaleRatioCalcJet);
440  fftjet::Functor1<double,RecoFFTJet>& factorCalc(*memberFactorCalcJet);
441 
442  const unsigned nJets = recoJets.size();
443 
444  unsigned iterNum = 1U;
445  bool converged = false;
446  for (; iterNum<maxIterations && !converged; ++iterNum)
447  {
448  // Recreate the vector of preclusters using the jets
449  const RecoFFTJet* jets = &recoJets[0];
450  iterPreclusters.clear();
451  iterPreclusters.reserve(nJets);
452  for (unsigned i=0; i<nJets; ++i)
453  {
454  const RecoFFTJet& jet(jets[i]);
455  fftjet::Peak p(jet.precluster());
456  p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
457  p.setRecoScale(scaleCalc(jet));
458  p.setRecoScaleRatio(ratioCalc(jet));
459  p.setMembershipFactor(factorCalc(jet));
460  iterPreclusters.push_back(p);
461  }
462 
463  // Run the algorithm
464  int status = 0;
466  status = gridAlg->run(iterPreclusters, *energyFlow,
467  &noiseLevel, 1U, 1U,
469  else
470  status = recoAlg->run(iterPreclusters, eventData, &noiseLevel, 1U,
472  if (status)
473  throw cms::Exception("FFTJetInterface")
474  << "FFTJet algorithm failed" << std::endl;
475  assert(iterJets.size() == nJets);
476 
477  // Figure out if the iterations have converged
478  converged = checkConvergence(recoJets, iterJets);
479 
480  // Prepare for the next cycle
481  iterJets.swap(recoJets);
482  }
483 
484  // Plug in the original precluster coordinates into the result
485  assert(preclusters.size() == nJets);
486  RecoFFTJet* jets = &recoJets[0];
487  for (unsigned i=0; i<nJets; ++i)
488  {
489  const fftjet::Peak& oldp(preclusters[i]);
490  jets[i].setPeakEtaPhi(oldp.eta(), oldp.phi());
491  }
492 
493  // If we have converged on the last cycle, the result
494  // would be indistinguishable from no convergence.
495  // Because of this, raise the counter by one to indicate
496  // the case when the convergence is not achieved.
497  if (!converged)
498  ++iterNum;
499 
500  return iterNum;
501 }
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::auto_ptr< RecoAlg > recoAlg
const bool useGriddedAlgorithm
std::auto_ptr< GridAlg > gridAlg
std::vector< RecoFFTJet > recoJets
std::vector< fftjet::Peak > preclusters
fftjet::RecombinedJet< VectorLike > RecoFFTJet
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
const double noiseLevel
std::vector< RecoFFTJet > iterJets
bool checkConvergence(const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
tuple status
Definition: ntuplemaker.py:245
std::vector< fftjetcms::VectorLike > eventData
fftjetcms::VectorLike unclustered
std::vector< fftjet::Peak > iterPreclusters
const unsigned maxIterations
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
void FFTJetProducer::loadEnergyFlow ( const edm::Event iEvent)
private

Definition at line 385 of file FFTJetProducer.cc.

References buildGridAlg(), fftjetcms::FFTJetInterface::energyFlow, edm::Event::getByLabel(), collect_tpl::input, NULL, and treeLabel.

Referenced by produce().

386 {
388  iEvent.getByLabel(treeLabel, input);
389 
390  // Make sure that the grid is compatible with the stored one
391  bool rebuildGrid = energyFlow.get() == NULL;
392  if (!rebuildGrid)
393  rebuildGrid =
394  !(energyFlow->nEta() == input->nEtaBins() &&
395  energyFlow->nPhi() == input->nPhiBins() &&
396  energyFlow->etaMin() == input->etaMin() &&
397  energyFlow->etaMax() == input->etaMax() &&
398  energyFlow->phiBin0Edge() == input->phiBin0Edge());
399  if (rebuildGrid)
400  {
401  // We should not get here very often...
402  energyFlow = std::auto_ptr<fftjet::Grid2d<Real> >(
403  new fftjet::Grid2d<Real>(
404  input->nEtaBins(), input->etaMin(), input->etaMax(),
405  input->nPhiBins(), input->phiBin0Edge(), input->title()));
406  buildGridAlg();
407  }
408  energyFlow->blockSet(input->data(), input->nEtaBins(), input->nPhiBins());
409 }
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
#define NULL
Definition: scimark2.h:8
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
tuple input
Definition: collect_tpl.py:10
const edm::InputTag treeLabel
template<class Real >
void FFTJetProducer::loadSparseTreeData ( const edm::Event iEvent)
private

Definition at line 188 of file FFTJetProducer.cc.

References edm::Event::getByLabel(), fftjetcms::FFTJetInterface::getEventScale(), iniScales, collect_tpl::input, fftjetcms::sparsePeakTreeFromStorable(), sparseTree, and treeLabel.

189 {
191 
192  // Get the input
194  iEvent.getByLabel(treeLabel, input);
195 
196  if (!input->isSparse())
197  throw cms::Exception("FFTJetBadConfig")
198  << "The stored clustering tree is not sparse" << std::endl;
199 
201  sparseTree.sortNodes();
202 }
Class for storing FFTJet sparse clustering trees.
Definition: PattRecoTree.h:19
std::auto_ptr< std::vector< double > > iniScales
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
tuple input
Definition: collect_tpl.py:10
const edm::InputTag treeLabel
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
SparseTree sparseTree
template<typename T >
void FFTJetProducer::makeProduces ( const std::string &  alias,
const std::string &  tag 
)
private

Definition at line 114 of file FFTJetProducer.cc.

References GlobalPosition_Frontier_DevDB_cff::tag.

Referenced by FFTJetProducer().

116 {
117  produces<std::vector<reco::FFTAnyJet<T> > >(tag).setBranchAlias(alias);
118 }
FFTJetProducer& FFTJetProducer::operator= ( const FFTJetProducer )
private
std::auto_ptr< AbsBgFunctor > FFTJetProducer::parse_bgMembershipFunction ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 737 of file FFTJetProducer.cc.

References fftjetcms::fftjet_BgFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

738 {
740  ps.getParameter<edm::ParameterSet>("bgMembershipFunction"));
741 }
T getParameter(std::string const &) const
std::auto_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor2< double, FFTJetProducer::RecoFFTJet, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_jetDistanceCalc ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 797 of file FFTJetProducer.cc.

References fftjetcms::fftjet_JetDistance_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

798 {
800  ps.getParameter<edm::ParameterSet>("jetDistanceCalc"));
801 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::ScaleSpaceKernel > FFTJetProducer::parse_jetMembershipFunction ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 728 of file FFTJetProducer.cc.

References fftjetcms::fftjet_MembershipFunction_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

729 {
731  ps.getParameter<edm::ParameterSet>("jetMembershipFunction"));
732 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_memberFactorCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 788 of file FFTJetProducer.cc.

References fftjetcms::fftjet_JetFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

789 {
791  ps.getParameter<edm::ParameterSet>("memberFactorCalcJet"));
792 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_memberFactorCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 764 of file FFTJetProducer.cc.

References fftjetcms::fftjet_PeakFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

765 {
767  ps.getParameter<edm::ParameterSet>("memberFactorCalcPeak"));
768 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > FFTJetProducer::parse_peakSelector ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 719 of file FFTJetProducer.cc.

References fftjetcms::fftjet_PeakSelector_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

720 {
722  ps.getParameter<edm::ParameterSet>("PeakSelectorConfiguration"));
723 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_recoScaleCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 772 of file FFTJetProducer.cc.

References fftjetcms::fftjet_JetFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

773 {
775  ps.getParameter<edm::ParameterSet>("recoScaleCalcJet"));
776 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_recoScaleCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 746 of file FFTJetProducer.cc.

References fftjetcms::fftjet_PeakFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

747 {
749  ps.getParameter<edm::ParameterSet>("recoScaleCalcPeak"));
750 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_recoScaleRatioCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 780 of file FFTJetProducer.cc.

References fftjetcms::fftjet_JetFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

781 {
783  ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcJet"));
784 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_recoScaleRatioCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 755 of file FFTJetProducer.cc.

References fftjetcms::fftjet_PeakFunctor_parser(), and edm::ParameterSet::getParameter().

Referenced by beginJob().

756 {
758  ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcPeak"));
759 }
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
FFTJetProducer::Resolution FFTJetProducer::parse_resolution ( const std::string &  name)
static

Definition at line 95 of file FFTJetProducer.cc.

References edm::hlt::Exception.

97 {
98  if (!name.compare("fixed"))
99  return FIXED;
100  else if (!name.compare("maximallyStable"))
101  return MAXIMALLY_STABLE;
102  else if (!name.compare("globallyAdaptive"))
103  return GLOBALLY_ADAPTIVE;
104  else if (!name.compare("locallyAdaptive"))
105  return LOCALLY_ADAPTIVE;
106  else
107  throw cms::Exception("FFTJetBadConfig")
108  << "Invalid resolution specification \""
109  << name << "\"" << std::endl;
110 }
void FFTJetProducer::prepareRecombinationScales ( )
private

Definition at line 338 of file FFTJetProducer.cc.

References i, memberFactorCalcPeak, preclusters, recoScaleCalcPeak, and recoScaleRatioCalcPeak.

Referenced by produce().

339 {
340  const unsigned nClus = preclusters.size();
341  if (nClus)
342  {
343  fftjet::Peak* clus = &preclusters[0];
344  fftjet::Functor1<double,fftjet::Peak>&
345  scaleCalc(*recoScaleCalcPeak);
346  fftjet::Functor1<double,fftjet::Peak>&
347  ratioCalc(*recoScaleRatioCalcPeak);
348  fftjet::Functor1<double,fftjet::Peak>&
349  factorCalc(*memberFactorCalcPeak);
350 
351  for (unsigned i=0; i<nClus; ++i)
352  {
353  clus[i].setRecoScale(scaleCalc(clus[i]));
354  clus[i].setRecoScaleRatio(ratioCalc(clus[i]));
355  clus[i].setMembershipFactor(factorCalc(clus[i]));
356  }
357  }
358 }
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
std::vector< fftjet::Peak > preclusters
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
void FFTJetProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
protectedvirtual

Implements edm::EDProducer.

Definition at line 642 of file FFTJetProducer.cc.

References assignConstituents, assignMembershipFunctions(), constituents, determineGriddedConstituents(), determineVectorConstituents(), fftjetcms::FFTJetInterface::discretizeEnergyFlow(), fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, edm::hlt::Exception, gridAlg, i, iEvent, iterateJetReconstruction(), iterationsPerformed, loadEnergyFlow(), fftjetcms::FFTJetInterface::loadInputCollection(), maxIterations, noiseLevel, occupancy, peakSelector, preclusters, prepareRecombinationScales(), recoAlg, recoJets, reuseExistingGrid, saveResults(), selectPreclusters(), sparseTree, ntuplemaker::status, fftjetcms::FFTJetInterface::storeInSinglePrecision(), unclustered, unused, and useGriddedAlgorithm.

644 {
645  // Load the clustering tree made by FFTJetPatRecoProducer
647  loadSparseTreeData<float>(iEvent);
648  else
649  loadSparseTreeData<double>(iEvent);
650 
651  // Do we need to load the candidate collection?
653  loadInputCollection(iEvent);
654 
655  // Do we need to have discretized energy flow?
657  {
658  if (reuseExistingGrid)
659  loadEnergyFlow(iEvent);
660  else
662  }
663 
664  // Calculate cluster occupancy as a function of level number
665  sparseTree.occupancyInScaleSpace(*peakSelector, &occupancy);
666 
667  // Select the preclusters using the requested resolution scheme
668  preclusters.clear();
670 
671  // Prepare to run the jet recombination procedure
673 
674  // Assign membership functions to preclusters. If this function
675  // is not overriden in a derived class, default algorithm membership
676  // function will be used for every cluster.
678 
679  // Run the recombination algorithm once
680  int status = 0;
682  status = gridAlg->run(preclusters, *energyFlow,
683  &noiseLevel, 1U, 1U,
685  else
686  status = recoAlg->run(preclusters, eventData, &noiseLevel, 1U,
688  if (status)
689  throw cms::Exception("FFTJetInterface")
690  << "FFTJet algorithm failed (first iteration)" << std::endl;
691 
692  // If requested, iterate the jet recombination procedure
693  if (maxIterations > 1U && !recoJets.empty())
695  else
696  iterationsPerformed = 1U;
697 
698  // Determine jet constituents. FFTJet returns a map
699  // of constituents which is inverse to what we need here.
700  const unsigned nJets = recoJets.size();
701  if (constituents.size() <= nJets)
702  constituents.resize(nJets + 1U);
703  if (assignConstituents)
704  {
705  for (unsigned i=0; i<=nJets; ++i)
706  constituents[i].clear();
709  else
711  }
712 
713  // Write out the results
714  saveResults(iEvent, iSetup);
715 }
std::vector< std::vector< reco::CandidatePtr > > constituents
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::auto_ptr< RecoAlg > recoAlg
unsigned iterationsPerformed
const bool useGriddedAlgorithm
std::auto_ptr< GridAlg > gridAlg
virtual void assignMembershipFunctions(std::vector< fftjet::Peak > *preclusters)
void loadInputCollection(const edm::Event &)
std::vector< RecoFFTJet > recoJets
std::vector< unsigned > occupancy
void loadEnergyFlow(const edm::Event &iEvent)
std::vector< fftjet::Peak > preclusters
void determineVectorConstituents()
const bool reuseExistingGrid
int iEvent
Definition: GenABIO.cc:243
const double noiseLevel
unsigned iterateJetReconstruction()
void saveResults(edm::Event &iEvent, const edm::EventSetup &)
const bool assignConstituents
bool storeInSinglePrecision() const
virtual void selectPreclusters(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
SparseTree sparseTree
void determineGriddedConstituents()
tuple status
Definition: ntuplemaker.py:245
std::vector< fftjetcms::VectorLike > eventData
fftjetcms::VectorLike unclustered
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
const unsigned maxIterations
void prepareRecombinationScales()
void FFTJetProducer::saveResults ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
private

Definition at line 607 of file FFTJetProducer.cc.

References constituents, i, iterationsPerformed, jet_type_switch, maxIterations, maxLevel, minLevel, occupancy, fftjetcms::FFTJetInterface::outputLabel, p4, preclusters, edm::Event::put(), resumConstituents, sparseTree, summarizeEdmComparisonLogfiles::summary, thresholds, unclustered, unused, usedLevel, and writeJets().

Referenced by produce().

608 {
609  // Write recombined jets
610  jet_type_switch(writeJets, ev, iSetup);
611 
612  // Check if we should resum unclustered energy constituents
613  VectorLike unclusE(unclustered);
614  if (resumConstituents)
615  {
616  VectorLike sum(0.0, 0.0, 0.0, 0.0);
617  const unsigned nCon = constituents[0].size();
618  const reco::CandidatePtr* cn = nCon ? &constituents[0][0] : 0;
619  for (unsigned i=0; i<nCon; ++i)
620  sum += cn[i]->p4();
621  unclusE = sum;
622  }
623 
624  // Write the jet reconstruction summary
625  const double minScale = minLevel ? sparseTree.getScale(minLevel) : 0.0;
626  const double maxScale = maxLevel ? sparseTree.getScale(maxLevel) : 0.0;
627  const double scaleUsed = usedLevel ? sparseTree.getScale(usedLevel) : 0.0;
628 
629  std::auto_ptr<reco::FFTJetProducerSummary> summary(
631  thresholds, occupancy, unclusE,
632  constituents[0], unused,
633  minScale, maxScale, scaleUsed,
635  iterationsPerformed == 1U ||
636  iterationsPerformed <= maxIterations));
637  ev.put(summary, outputLabel);
638 }
std::vector< std::vector< reco::CandidatePtr > > constituents
int i
Definition: DBlmapReader.cc:9
unsigned iterationsPerformed
const bool resumConstituents
Data processing summary generated by FFTJetProducer.
std::vector< unsigned > occupancy
std::vector< fftjet::Peak > preclusters
math::XYZTLorentzVector VectorLike
unsigned usedLevel
double p4[4]
Definition: TauolaWrapper.h:92
std::vector< double > thresholds
SparseTree sparseTree
void writeJets(edm::Event &iEvent, const edm::EventSetup &)
#define jet_type_switch(method, arg1, arg2)
const std::string outputLabel
fftjetcms::VectorLike unclustered
const unsigned maxIterations
void FFTJetProducer::selectPreclusters ( const SparseTree tree,
const fftjet::Functor1< bool, fftjet::Peak > &  peakSelector,
std::vector< fftjet::Peak > *  preclusters 
)
protectedvirtual

Definition at line 205 of file FFTJetProducer.cc.

References i, nodes, resolution, selectTreeNodes(), and sparseTree.

Referenced by produce().

209 {
210  nodes.clear();
212 
213  // Fill out the vector of preclusters using the tree node ids
214  const unsigned nNodes = nodes.size();
215  const SparseTree::NodeId* pnodes = nNodes ? &nodes[0] : 0;
216  preclusters->reserve(nNodes);
217  for (unsigned i=0; i<nNodes; ++i)
218  preclusters->push_back(
219  sparseTree.uncheckedNode(pnodes[i]).getCluster());
220 
221  // Set the status word to indicate the resolution scheme used
222  fftjet::Peak* clusters = nNodes ? &(*preclusters)[0] : 0;
223  for (unsigned i=0; i<nNodes; ++i)
224  clusters[i].setStatus(resolution);
225 }
int i
Definition: DBlmapReader.cc:9
void selectTreeNodes(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelect, std::vector< SparseTree::NodeId > *nodes)
Resolution resolution
std::vector< fftjet::Peak > preclusters
SparseTree sparseTree
std::vector< SparseTree::NodeId > nodes
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
void FFTJetProducer::selectTreeNodes ( const SparseTree tree,
const fftjet::Functor1< bool, fftjet::Peak > &  peakSelect,
std::vector< SparseTree::NodeId > *  nodes 
)
protected

Definition at line 228 of file FFTJetProducer.cc.

References delta, FIXED, fixedScale, GLOBALLY_ADAPTIVE, testEve_cfg::level, LOCALLY_ADAPTIVE, MAXIMALLY_STABLE, maxLevel, maxStableScale, minLevel, minStableScale, n, nClustersRequested, occupancy, resolution, stabilityAlpha, TopDecayID::stable, thresholds, and usedLevel.

Referenced by selectPreclusters().

232 {
233  minLevel = maxLevel = usedLevel = 0;
234 
235  // Get the tree nodes which pass the cuts
236  // (according to the selected resolution strategy)
237  switch (resolution)
238  {
239  case FIXED:
240  {
241  usedLevel = tree.getLevel(fixedScale);
242  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
243  }
244  break;
245 
246  case MAXIMALLY_STABLE:
247  {
248  const unsigned minStartingLevel = maxStableScale > 0.0 ?
249  tree.getLevel(maxStableScale) : 0;
250  const unsigned maxStartingLevel = minStableScale > 0.0 ?
251  tree.getLevel(minStableScale) : UINT_MAX;
252 
253  if (tree.stableClusterCount(
254  peakSelect, &minLevel, &maxLevel, stabilityAlpha,
255  minStartingLevel, maxStartingLevel))
256  {
257  usedLevel = (minLevel + maxLevel)/2;
258  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
259  }
260  }
261  break;
262 
263  case GLOBALLY_ADAPTIVE:
264  {
265  const bool stable = tree.clusterCountLevels(
266  nClustersRequested, peakSelect, &minLevel, &maxLevel);
267  if (minLevel || maxLevel)
268  {
269  usedLevel = (minLevel + maxLevel)/2;
270  if (!stable)
271  {
272  const int maxlev = tree.maxStoredLevel();
273  bool levelFound = false;
274  for (int delta=0; delta<=maxlev && !levelFound; ++delta)
275  for (int ifac=1; ifac>-2 && !levelFound; ifac-=2)
276  {
277  const int level = usedLevel + ifac*delta;
278  if (level > 0 && level <= maxlev)
279  if (occupancy[level] == nClustersRequested)
280  {
281  usedLevel = level;
282  levelFound = true;
283  }
284  }
285  assert(levelFound);
286  }
287  }
288  else
289  {
290  // Can't find that exact number of preclusters.
291  // Try to get the next best thing.
292  usedLevel = 1;
293  const unsigned occ1 = occupancy[1];
294  if (nClustersRequested >= occ1)
295  {
296  const unsigned maxlev = tree.maxStoredLevel();
297  if (nClustersRequested > occupancy[maxlev])
298  usedLevel = maxlev;
299  else
300  {
301  // It would be nice to use "lower_bound" here,
302  // but the occupancy is not necessarily monotonous.
303  unsigned bestDelta = nClustersRequested > occ1 ?
304  nClustersRequested - occ1 : occ1 - nClustersRequested;
305  for (unsigned level=2; level<=maxlev; ++level)
306  {
307  const unsigned n = occupancy[level];
308  const unsigned d = nClustersRequested > n ?
309  nClustersRequested - n : n - nClustersRequested;
310  if (d < bestDelta)
311  {
312  bestDelta = d;
313  usedLevel = level;
314  }
315  }
316  }
317  }
318  }
319  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
320  }
321  break;
322 
323  case LOCALLY_ADAPTIVE:
324  {
325  usedLevel = tree.getLevel(fixedScale);
326  tree.getMagS2OptimalNodes(peakSelect, nClustersRequested,
327  usedLevel, mynodes, &thresholds);
328  }
329  break;
330 
331  default:
332  assert(!"ERROR in FFTJetProducer::selectTreeNodes : "
333  "should never get here! This is a bug. Please report.");
334  }
335 }
dbl * delta
Definition: mlp_gen.cc:36
static const int stable
Definition: TopGenEvent.h:11
const double fixedScale
Resolution resolution
std::vector< unsigned > occupancy
const double minStableScale
const double maxStableScale
const unsigned nClustersRequested
unsigned usedLevel
std::vector< double > thresholds
const double stabilityAlpha
tuple level
Definition: testEve_cfg.py:34
template<typename T >
void FFTJetProducer::writeJets ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
private

Definition at line 552 of file FFTJetProducer.cc.

References constituents, fftjetcms::FFTJetInterface::energyFlow, i, metsig::jet, analyzePatCleaning_cfg::jets, fftjetcms::FFTJetInterface::outputLabel, p4, edm::Event::put(), dt_dqm_sourceclient_common_cff::reco, recoJets, recombinationDataCutoff, resumConstituents, useGriddedAlgorithm, fftjetcms::FFTJetInterface::vertexUsed(), and reco::writeSpecific().

Referenced by saveResults().

554 {
555  using namespace reco;
556 
557  typedef FFTAnyJet<T> OutputJet;
558  typedef std::vector<OutputJet> OutputCollection;
559 
560  // Area of a single eta-phi cell for jet area calculations.
561  // Set it to 0 in case the module configuration does not allow
562  // us to calculate jet areas reliably.
563  const double cellArea = useGriddedAlgorithm &&
565  energyFlow->etaBinWidth() * energyFlow->phiBinWidth() : 0.0;
566 
567  // allocate output jet collection
568  std::auto_ptr<OutputCollection> jets(new OutputCollection());
569  const unsigned nJets = recoJets.size();
570  jets->reserve(nJets);
571 
572  for (unsigned ijet=0; ijet<nJets; ++ijet)
573  {
574  const RecoFFTJet& myjet(recoJets[ijet]);
575 
576  // Check if we should resum jet constituents
577  VectorLike jet4vec(myjet.vec());
578  if (resumConstituents)
579  {
580  VectorLike sum(0.0, 0.0, 0.0, 0.0);
581  const unsigned nCon = constituents[ijet+1].size();
582  const reco::CandidatePtr* cn = nCon ? &constituents[ijet+1][0] : 0;
583  for (unsigned i=0; i<nCon; ++i)
584  sum += cn[i]->p4();
585  jet4vec = sum;
586  }
587 
588  // Write the specifics to the jet (simultaneously sets 4-vector,
589  // vertex, constituents). These are overridden functions that will
590  // call the appropriate specific code.
591  T jet;
592  writeSpecific(jet, jet4vec, vertexUsed(),
593  constituents[ijet+1], iSetup);
594 
595  // calcuate the jet area
596  jet.setJetArea(cellArea*myjet.ncells());
597 
598  // add jet to the list
599  jets->push_back(OutputJet(jet, jetToStorable<float>(myjet)));
600  }
601 
602  // put the collection into the event
603  iEvent.put(jets, outputLabel);
604 }
std::vector< std::vector< reco::CandidatePtr > > constituents
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::vector< ProtoJet > OutputCollection
Definition: JetRecoTypes.h:63
const bool useGriddedAlgorithm
const bool resumConstituents
const reco::Particle::Point & vertexUsed() const
std::vector< RecoFFTJet > recoJets
const double recombinationDataCutoff
fftjet::RecombinedJet< VectorLike > RecoFFTJet
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
math::XYZTLorentzVector VectorLike
double p4[4]
Definition: TauolaWrapper.h:92
Implements inheritance relationships for FFTJet jets.
Definition: FFTAnyJet.h:17
long double T
const std::string outputLabel
void writeSpecific(reco::CaloJet &jet, reco::Particle::LorentzVector const &p4, reco::Particle::Point const &point, std::vector< reco::CandidatePtr > const &constituents, edm::EventSetup const &c)
Definition: JetSpecific.cc:41

Member Data Documentation

const bool FFTJetProducer::assignConstituents
private

Definition at line 211 of file FFTJetProducer.h.

Referenced by beginJob(), buildGridAlg(), FFTJetProducer(), and produce().

std::auto_ptr<fftjetcms::AbsBgFunctor> FFTJetProducer::bgMembershipFunction
private

Definition at line 262 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

std::vector<std::vector<reco::CandidatePtr> > FFTJetProducer::constituents
private
const double FFTJetProducer::convergenceDistance
private

Definition at line 208 of file FFTJetProducer.h.

Referenced by checkConvergence().

const double FFTJetProducer::fixedScale
private

Definition at line 219 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

std::auto_ptr<GridAlg> FFTJetProducer::gridAlg
private
const double FFTJetProducer::gridScanMaxEta
private

Definition at line 236 of file FFTJetProducer.h.

Referenced by buildGridAlg().

std::auto_ptr<std::vector<double> > FFTJetProducer::iniScales
private

Definition at line 250 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and loadSparseTreeData().

const bool FFTJetProducer::isCrisp
private

Definition at line 240 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

unsigned FFTJetProducer::iterationsPerformed
private

Definition at line 309 of file FFTJetProducer.h.

Referenced by produce(), and saveResults().

std::vector<RecoFFTJet> FFTJetProducer::iterJets
private

Definition at line 308 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction().

std::vector<fftjet::Peak> FFTJetProducer::iterPreclusters
private

Definition at line 307 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction().

std::auto_ptr<fftjet::Functor2<double,RecoFFTJet,RecoFFTJet> > FFTJetProducer::jetDistanceCalc
private

Definition at line 282 of file FFTJetProducer.h.

Referenced by beginJob(), and checkConvergence().

std::auto_ptr<fftjet::ScaleSpaceKernel> FFTJetProducer::jetMembershipFunction
private

Definition at line 261 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

const unsigned FFTJetProducer::maxIterations
private

Definition at line 204 of file FFTJetProducer.h.

Referenced by beginJob(), iterateJetReconstruction(), produce(), and saveResults().

unsigned FFTJetProducer::maxLevel
private

Definition at line 300 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

const double FFTJetProducer::maxStableScale
private

Definition at line 223 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

std::auto_ptr<fftjet::Functor1<double,RecoFFTJet> > FFTJetProducer::memberFactorCalcJet
private

Definition at line 277 of file FFTJetProducer.h.

Referenced by beginJob(), and iterateJetReconstruction().

std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> > FFTJetProducer::memberFactorCalcPeak
private

Definition at line 272 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

unsigned FFTJetProducer::minLevel
private

Definition at line 300 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

const double FFTJetProducer::minStableScale
private

Definition at line 222 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

const edm::ParameterSet FFTJetProducer::myConfiguration
private

Definition at line 190 of file FFTJetProducer.h.

Referenced by beginJob().

const unsigned FFTJetProducer::nClustersRequested
private

Definition at line 233 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

const unsigned FFTJetProducer::nJetsRequiredToConverge
private

Definition at line 207 of file FFTJetProducer.h.

std::vector<SparseTree::NodeId> FFTJetProducer::nodes
private

Definition at line 285 of file FFTJetProducer.h.

Referenced by selectPreclusters().

const double FFTJetProducer::noiseLevel
private

Definition at line 230 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction(), and produce().

std::vector<unsigned> FFTJetProducer::occupancy
private

Definition at line 294 of file FFTJetProducer.h.

Referenced by produce(), saveResults(), and selectTreeNodes().

std::auto_ptr<fftjet::Functor1<bool,fftjet::Peak> > FFTJetProducer::peakSelector
private

Definition at line 256 of file FFTJetProducer.h.

Referenced by beginJob(), and produce().

std::vector<fftjet::Peak> FFTJetProducer::preclusters
private
std::auto_ptr<RecoAlg> FFTJetProducer::recoAlg
private
std::vector<RecoFFTJet> FFTJetProducer::recoJets
private
const std::string FFTJetProducer::recombinationAlgorithm
private

Definition at line 239 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

const double FFTJetProducer::recombinationDataCutoff
private

Definition at line 242 of file FFTJetProducer.h.

Referenced by buildGridAlg(), and writeJets().

std::auto_ptr<fftjet::Functor1<double,RecoFFTJet> > FFTJetProducer::recoScaleCalcJet
private

Definition at line 275 of file FFTJetProducer.h.

Referenced by beginJob(), and iterateJetReconstruction().

std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> > FFTJetProducer::recoScaleCalcPeak
private

Definition at line 265 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

std::auto_ptr<fftjet::Functor1<double,RecoFFTJet> > FFTJetProducer::recoScaleRatioCalcJet
private

Definition at line 276 of file FFTJetProducer.h.

Referenced by beginJob(), and iterateJetReconstruction().

std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> > FFTJetProducer::recoScaleRatioCalcPeak
private

Definition at line 269 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

Resolution FFTJetProducer::resolution
private

Definition at line 247 of file FFTJetProducer.h.

Referenced by selectPreclusters(), and selectTreeNodes().

const bool FFTJetProducer::resumConstituents
private

Definition at line 216 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), saveResults(), and writeJets().

const bool FFTJetProducer::reuseExistingGrid
private

Definition at line 201 of file FFTJetProducer.h.

Referenced by beginJob(), and produce().

SparseTree FFTJetProducer::sparseTree
private

Definition at line 253 of file FFTJetProducer.h.

Referenced by loadSparseTreeData(), produce(), saveResults(), and selectPreclusters().

const double FFTJetProducer::stabilityAlpha
private

Definition at line 226 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

std::vector<double> FFTJetProducer::thresholds
private

Definition at line 297 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

const edm::InputTag FFTJetProducer::treeLabel
private

Definition at line 193 of file FFTJetProducer.h.

Referenced by loadEnergyFlow(), and loadSparseTreeData().

fftjetcms::VectorLike FFTJetProducer::unclustered
private

Definition at line 303 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction(), produce(), and saveResults().

const double FFTJetProducer::unlikelyBgWeight
private

Definition at line 241 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

double FFTJetProducer::unused
private

Definition at line 304 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction(), produce(), and saveResults().

unsigned FFTJetProducer::usedLevel
private

Definition at line 300 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

const bool FFTJetProducer::useGriddedAlgorithm
private

Definition at line 197 of file FFTJetProducer.h.

Referenced by beginJob(), iterateJetReconstruction(), produce(), and writeJets().