CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
FFTJetProducer Class Reference

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

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

Public Types

typedef fftjet::RecombinedJet< fftjetcms::VectorLikeRecoFFTJet
 
enum  Resolution {
  FIXED = 0, MAXIMALLY_STABLE, GLOBALLY_ADAPTIVE, LOCALLY_ADAPTIVE,
  FROM_GENJETS
}
 
typedef fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
 
enum  StatusBits {
  RESOLUTION = 0xff, CONSTITUENTS_RESUMMED = 0x100, PILEUP_CALCULATED = 0x200, PILEUP_SUBTRACTED_4VEC = 0x400,
  PILEUP_SUBTRACTED_PT = 0x800
}
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 FFTJetProducer (const edm::ParameterSet &)
 
 FFTJetProducer ()=delete
 
 FFTJetProducer (const FFTJetProducer &)=delete
 
FFTJetProduceroperator= (const FFTJetProducer &)=delete
 
 ~FFTJetProducer () override
 
- Public Member Functions inherited from fftjetcms::FFTJetInterface
 FFTJetInterface ()=delete
 
 FFTJetInterface (const FFTJetInterface &)=delete
 
FFTJetInterfaceoperator= (const FFTJetInterface &)=delete
 
 ~FFTJetInterface () override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

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 void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 

Protected Member Functions

virtual void assignMembershipFunctions (std::vector< fftjet::Peak > *preclusters)
 
void beginJob () override
 
void endJob () override
 
virtual void genJetPreclusters (const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
 
virtual std::unique_ptr< fftjetcms::AbsBgFunctorparse_bgMembershipFunction (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjetcms::AbsPileupCalculatorparse_pileupDensityCalc (const edm::ParameterSet &ps)
 
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet (const edm::ParameterSet &)
 
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
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 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 Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 

Private Types

typedef fftjet::AbsRecombinationAlg< fftjetcms::Real, fftjetcms::VectorLike, fftjetcms::BgDataGridAlg
 
typedef fftjet::AbsVectorRecombinationAlg< fftjetcms::VectorLike, fftjetcms::BgDataRecoAlg
 

Private Member Functions

void buildGridAlg ()
 
bool checkConvergence (const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
 
void determineGriddedConstituents ()
 
void determinePileup ()
 
virtual void determinePileupDensityFromConfig (const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
 
virtual void determinePileupDensityFromDB (const edm::Event &iEvent, const edm::EventSetup &iSetup, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
 
void determineVectorConstituents ()
 
unsigned iterateJetReconstruction ()
 
bool loadEnergyFlow (const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
 
template<class Real >
void loadSparseTreeData (const edm::Event &)
 
template<typename Jet >
void makeProduces (const std::string &alias, const std::string &tag)
 
void prepareRecombinationScales ()
 
void removeFakePreclusters ()
 
void saveResults (edm::Event &iEvent, const edm::EventSetup &, unsigned nPreclustersFound)
 
template<typename Jet >
void writeJets (edm::Event &iEvent, const edm::EventSetup &)
 

Static Private Member Functions

static void setJetStatusBit (RecoFFTJet *jet, int mask, bool value)
 

Private Attributes

const bool assignConstituents
 
std::unique_ptr< fftjetcms::AbsBgFunctorbgMembershipFunction
 
const bool calculatePileup
 
std::vector< unsigned > cellCountsVec
 
std::vector< std::vector< reco::CandidatePtr > > constituents
 
const double convergenceDistance
 
std::vector< double > doubleBuf
 
const double fixedScale
 
const edm::InputTag genJetsLabel
 
edm::ESGetToken< CaloGeometry, CaloGeometryRecordgeometry_token_
 
std::unique_ptr< GridAlggridAlg
 
const double gridScanMaxEta
 
std::unique_ptr< std::vector< double > > iniScales
 
edm::EDGetTokenT< reco::DiscretizedEnergyFlowinput_energyflow_token_
 
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_
 
edm::EDGetTokenT< reco::FFTJetPileupSummaryinput_pusummary_token_
 
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
 
const bool isCrisp
 
unsigned iterationsPerformed
 
std::vector< RecoFFTJetiterJets
 
std::vector< fftjet::Peak > iterPreclusters
 
std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
 
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
 
bool loadPileupFromDB
 
const unsigned maxInitialPreclusters
 
const unsigned maxIterations
 
unsigned maxLevel
 
const double maxStableScale
 
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
 
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
 
std::vector< fftjet::AbsKernel2d * > memFcns2dVec
 
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::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
 
std::vector< fftjetcms::VectorLikepileup
 
std::unique_ptr< fftjetcms::AbsPileupCalculatorpileupDensityCalc
 
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
 
const edm::InputTag pileupLabel
 
std::string pileupTableCategory
 
std::string pileupTableName
 
std::string pileupTableRecord
 
std::vector< fftjet::Peak > preclusters
 
std::unique_ptr< RecoAlgrecoAlg
 
std::vector< RecoFFTJetrecoJets
 
const std::string recombinationAlgorithm
 
const double recombinationDataCutoff
 
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
 
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
 
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
 
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
 
Resolution resolution
 
const bool resumConstituents
 
const bool reuseExistingGrid
 
SparseTree sparseTree
 
const double stabilityAlpha
 
const bool subtractPileup
 
const bool subtractPileupAs4Vec
 
std::vector< double > thresholds
 
edm::ESGetToken< HcalTopology, HcalRecNumberingRecordtopology_token_
 
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::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
 
const std::vector< double > etaDependentMagnutideFactors
 
std::vector< fftjetcms::VectorLikeeventData
 
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 82 of file FFTJetProducer.h.

Member Typedef Documentation

◆ GridAlg

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

Definition at line 182 of file FFTJetProducer.h.

◆ RecoAlg

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

Definition at line 181 of file FFTJetProducer.h.

◆ RecoFFTJet

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

Definition at line 84 of file FFTJetProducer.h.

◆ SparseTree

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

Definition at line 85 of file FFTJetProducer.h.

Member Enumeration Documentation

◆ Resolution

◆ StatusBits

Enumerator
RESOLUTION 
CONSTITUENTS_RESUMMED 
PILEUP_CALCULATED 
PILEUP_SUBTRACTED_4VEC 
PILEUP_SUBTRACTED_PT 

Definition at line 90 of file FFTJetProducer.h.

Constructor & Destructor Documentation

◆ FFTJetProducer() [1/3]

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

Definition at line 116 of file FFTJetProducer.cc.

References SiStripOfflineCRack_cfg::alias, assignConstituents, fftjetcms::CALOJET, fftjetcms::FFTJetInterface::checkConfig(), edm::EDConsumerBase::esConsumes(), Exception, fftjetcms::fftjet_ScaleSet_parser(), genJetsLabel, geometry_token_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), iniScales, input_energyflow_token_, input_genjet_token_, input_pusummary_token_, input_recotree_token_, jet_type_switch, fftjetcms::FFTJetInterface::jetType, makeProduces(), fftjetcms::FFTJetInterface::outputLabel, pileupLabel, resumConstituents, jetUpdater_cfi::sort, AlCaHLTBitMon_QueryRunRegistry::string, topology_token_, and treeLabel.

117  : FFTJetInterface(ps),
118  myConfiguration(ps),
122  init_param(unsigned, maxIterations),
128  init_param(bool, subtractPileup),
131  init_param(double, fixedScale),
132  init_param(double, minStableScale),
133  init_param(double, maxStableScale),
134  init_param(double, stabilityAlpha),
135  init_param(double, noiseLevel),
136  init_param(unsigned, nClustersRequested),
137  init_param(double, gridScanMaxEta),
139  init_param(bool, isCrisp),
140  init_param(double, unlikelyBgWeight),
149 
150  minLevel(0),
151  maxLevel(0),
152  usedLevel(0),
153  unused(0.0),
155  constituents(200) {
156  // Check that the settings make sense
158  throw cms::Exception("FFTJetBadConfig") << "Can't resum constituents if they are not assigned" << std::endl;
159 
160  produces<reco::FFTJetProducerSummary>(outputLabel);
163 
164  if (jetType == CALOJET) {
167  }
168 
169  // Build the set of pattern recognition scales.
170  // This is needed in order to read the clustering tree
171  // from the event record.
173  checkConfig(iniScales, "invalid set of scales");
174  std::sort(iniScales->begin(), iniScales->end(), std::greater<double>());
175 
177  consumes<reco::PattRecoTree<fftjetcms::Real, reco::PattRecoPeak<fftjetcms::Real> > >(treeLabel);
178  input_genjet_token_ = consumes<std::vector<reco::FFTAnyJet<reco::GenJet> > >(genJetsLabel);
179  input_energyflow_token_ = consumes<reco::DiscretizedEnergyFlow>(treeLabel);
180  input_pusummary_token_ = consumes<reco::FFTJetPileupSummary>(pileupLabel);
181 
182  // Most of the configuration has to be performed inside
183  // the "beginJob" method. This is because chaining of the
184  // parsers between this base class and the derived classes
185  // can not work from the constructor of the base class.
186 }
std::vector< std::vector< reco::CandidatePtr > > constituents
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
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
const bool subtractPileupAs4Vec
void checkConfig(const Ptr &ptr, const char *message)
const double unlikelyBgWeight
void makeProduces(const std::string &alias, const std::string &tag)
const bool subtractPileup
const unsigned nJetsRequiredToConverge
Resolution resolution
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometry_token_
const bool isCrisp
const double recombinationDataCutoff
const double minStableScale
const double maxStableScale
#define init_param(type, varname)
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
T getUntrackedParameter(std::string const &, T const &) const
const bool reuseExistingGrid
const unsigned nClustersRequested
std::unique_ptr< std::vector< double > > iniScales
unsigned usedLevel
const double noiseLevel
std::string pileupTableRecord
std::string pileupTableName
const bool calculatePileup
const bool assignConstituents
const edm::InputTag treeLabel
const edm::InputTag genJetsLabel
const edm::ParameterSet myConfiguration
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > input_energyflow_token_
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topology_token_
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
const double stabilityAlpha
const unsigned maxInitialPreclusters
std::string pileupTableCategory
const double convergenceDistance
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_
const edm::InputTag pileupLabel
#define jet_type_switch(method, arg1, arg2)
std::unique_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
const std::string outputLabel
const unsigned maxIterations

◆ FFTJetProducer() [2/3]

FFTJetProducer::FFTJetProducer ( )
delete

◆ FFTJetProducer() [3/3]

FFTJetProducer::FFTJetProducer ( const FFTJetProducer )
delete

◆ ~FFTJetProducer()

FFTJetProducer::~FFTJetProducer ( )
override

Definition at line 188 of file FFTJetProducer.cc.

188 {}

Member Function Documentation

◆ assignMembershipFunctions()

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

Definition at line 810 of file FFTJetProducer.cc.

Referenced by produce().

810 {}

◆ beginJob()

void FFTJetProducer::beginJob ( void  )
overrideprotectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 813 of file FFTJetProducer.cc.

References assignConstituents, bgMembershipFunction, buildGridAlg(), calculatePileup, fftjetcms::FFTJetInterface::checkConfig(), fftjetcms::FFTJetInterface::energyFlow, Exception, fftjetcms::fftjet_Grid2d_parser(), edm::ParameterSet::getParameter(), isCrisp, jetDistanceCalc, jetMembershipFunction, loadPileupFromDB, maxIterations, memberFactorCalcJet, memberFactorCalcPeak, myConfiguration, parse_bgMembershipFunction(), parse_jetDistanceCalc(), parse_jetMembershipFunction(), parse_memberFactorCalcJet(), parse_memberFactorCalcPeak(), parse_peakSelector(), parse_pileupDensityCalc(), parse_recoScaleCalcJet(), parse_recoScaleCalcPeak(), parse_recoScaleRatioCalcJet(), parse_recoScaleRatioCalcPeak(), peakSelector, VtxSmearedParameters_cfi::Phi, pileupDensityCalc, pileupEnergyFlow, recoAlg, recombinationAlgorithm, recoScaleCalcJet, recoScaleCalcPeak, recoScaleRatioCalcJet, recoScaleRatioCalcPeak, reuseExistingGrid, unlikelyBgWeight, and useGriddedAlgorithm.

813  {
815 
816  // Parse the peak selector definition
818  checkConfig(peakSelector, "invalid peak selector");
819 
821  checkConfig(jetMembershipFunction, "invalid jet membership function");
822 
824  checkConfig(bgMembershipFunction, "invalid noise membership function");
825 
826  // Build the energy recombination algorithm
827  if (!useGriddedAlgorithm) {
828  fftjet::DefaultVectorRecombinationAlgFactory<VectorLike, BgData, VBuilder> factory;
829  if (factory[recombinationAlgorithm] == nullptr)
830  throw cms::Exception("FFTJetBadConfig")
831  << "Invalid vector recombination algorithm \"" << recombinationAlgorithm << "\"" << std::endl;
832  recoAlg = std::unique_ptr<RecoAlg>(factory[recombinationAlgorithm]->create(jetMembershipFunction.get(),
833  &VectorLike::Et,
834  &VectorLike::Eta,
836  bgMembershipFunction.get(),
838  isCrisp,
839  false,
841  } else if (!reuseExistingGrid) {
842  energyFlow = fftjet_Grid2d_parser(ps.getParameter<edm::ParameterSet>("GridConfiguration"));
843  checkConfig(energyFlow, "invalid discretization grid");
844  buildGridAlg();
845  }
846 
847  // Create the grid subsequently used for pile-up subtraction
848  if (calculatePileup) {
849  pileupEnergyFlow = fftjet_Grid2d_parser(ps.getParameter<edm::ParameterSet>("PileupGridConfiguration"));
850  checkConfig(pileupEnergyFlow, "invalid pileup density grid");
851 
852  if (!loadPileupFromDB) {
854  checkConfig(pileupDensityCalc, "invalid pile-up density calculator");
855  }
856  }
857 
858  // Parse the calculator of the recombination scale
861  "invalid spec for the "
862  "reconstruction scale calculator from peaks");
863 
864  // Parse the calculator of the recombination scale ratio
867  "invalid spec for the "
868  "reconstruction scale ratio calculator from peaks");
869 
870  // Calculator for the membership function factor
873  "invalid spec for the "
874  "membership function factor calculator from peaks");
875 
876  if (maxIterations > 1) {
877  // We are going to run iteratively. Make required objects.
880  "invalid spec for the "
881  "reconstruction scale calculator from jets");
882 
885  "invalid spec for the "
886  "reconstruction scale ratio calculator from jets");
887 
890  "invalid spec for the "
891  "membership function factor calculator from jets");
892 
895  "invalid spec for the "
896  "jet distance calculator");
897  }
898 }
virtual std::unique_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction(const edm::ParameterSet &)
std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
const bool useGriddedAlgorithm
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
const std::string recombinationAlgorithm
virtual std::unique_ptr< fftjetcms::AbsBgFunctor > parse_bgMembershipFunction(const edm::ParameterSet &)
void checkConfig(const Ptr &ptr, const char *message)
const double unlikelyBgWeight
std::unique_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
const bool isCrisp
const bool reuseExistingGrid
virtual std::unique_ptr< fftjetcms::AbsPileupCalculator > parse_pileupDensityCalc(const edm::ParameterSet &ps)
std::unique_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet(const edm::ParameterSet &)
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak(const edm::ParameterSet &)
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
const bool calculatePileup
const bool assignConstituents
const edm::ParameterSet myConfiguration
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet(const edm::ParameterSet &)
std::unique_ptr< fftjetcms::AbsPileupCalculator > pileupDensityCalc
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
virtual std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector(const edm::ParameterSet &)
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
std::unique_ptr< RecoAlg > recoAlg
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak(const edm::ParameterSet &)
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak(const edm::ParameterSet &)
const unsigned maxIterations
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet(const edm::ParameterSet &)
virtual std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc(const edm::ParameterSet &)

◆ buildGridAlg()

void FFTJetProducer::buildGridAlg ( )
private

Definition at line 352 of file FFTJetProducer.cc.

References assignConstituents, bgMembershipFunction, fftjetcms::FFTJetInterface::energyFlow, Exception, gridAlg, gridScanMaxEta, isCrisp, jetMembershipFunction, cms::cuda::allocator::maxBin, cms::cuda::allocator::minBin, recombinationAlgorithm, recombinationDataCutoff, and unlikelyBgWeight.

Referenced by beginJob(), and produce().

352  {
353  int minBin = energyFlow->getEtaBin(-gridScanMaxEta);
354  if (minBin < 0)
355  minBin = 0;
356  int maxBin = energyFlow->getEtaBin(gridScanMaxEta) + 1;
357  if (maxBin < 0)
358  maxBin = 0;
359 
360  fftjet::DefaultRecombinationAlgFactory<Real, VectorLike, BgData, VBuilder> factory;
361  if (factory[recombinationAlgorithm] == nullptr)
362  throw cms::Exception("FFTJetBadConfig")
363  << "Invalid grid recombination algorithm \"" << recombinationAlgorithm << "\"" << std::endl;
364  gridAlg = std::unique_ptr<GridAlg>(factory[recombinationAlgorithm]->create(jetMembershipFunction.get(),
365  bgMembershipFunction.get(),
368  isCrisp,
369  false,
371  minBin,
372  maxBin));
373 }
const double gridScanMaxEta
constexpr unsigned int maxBin
const std::string recombinationAlgorithm
const double unlikelyBgWeight
std::unique_ptr< GridAlg > gridAlg
const bool isCrisp
const double recombinationDataCutoff
std::unique_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
const bool assignConstituents
constexpr unsigned int minBin

◆ checkConvergence()

bool FFTJetProducer::checkConvergence ( const std::vector< RecoFFTJet > &  previousIterResult,
std::vector< RecoFFTJet > &  thisIterResult 
)
private

Definition at line 394 of file FFTJetProducer.cc.

References convergenceDistance, ztail::d, mps_fire::i, jetDistanceCalc, GetRecoTauVFromDQM_MC_cff::next, and callgraph::previous.

Referenced by iterateJetReconstruction().

394  {
395  fftjet::Functor2<double, RecoFFTJet, RecoFFTJet>& distanceCalc(*jetDistanceCalc);
396 
397  const unsigned nJets = previous.size();
398  if (nJets != nextSet.size())
399  return false;
400 
401  const RecoFFTJet* prev = &previous[0];
402  RecoFFTJet* next = &nextSet[0];
403 
404  // Calculate convergence distances for all jets
405  bool converged = true;
406  for (unsigned i = 0; i < nJets; ++i) {
407  const double d = distanceCalc(prev[i], next[i]);
408  next[i].setConvergenceDistance(d);
409  if (i < nJetsRequiredToConverge && d > convergenceDistance)
410  converged = false;
411  }
412 
413  return converged;
414 }
std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
fftjet::RecombinedJet< VectorLike > RecoFFTJet
d
Definition: ztail.py:151
const double convergenceDistance

◆ determineGriddedConstituents()

void FFTJetProducer::determineGriddedConstituents ( )
private

Definition at line 483 of file FFTJetProducer.cc.

References cms::cuda::assert(), fftjetcms::FFTJetInterface::candidateIndex, constituents, fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, g, gridAlg, mps_fire::i, L1TowerCalibrationProducer_cfi::iEta, fftjetcms::FFTJetInterface::inputCollection, B2GTnPMonitor_cfi::item, gpuClustering::pixelStatus::mask, HLT_2022v12_cff::nEta, HLT_2022v12_cff::nPhi, and recoJets.

Referenced by produce().

483  {
484  const unsigned nJets = recoJets.size();
485  const unsigned* clusterMask = gridAlg->getClusterMask();
486  const int nEta = gridAlg->getLastNEta();
487  const int nPhi = gridAlg->getLastNPhi();
488  const fftjet::Grid2d<Real>& g(*energyFlow);
489 
490  const unsigned nInputs = eventData.size();
491  const VectorLike* inp = nInputs ? &eventData[0] : nullptr;
492  const unsigned* candIdx = nInputs ? &candidateIndex[0] : nullptr;
493  for (unsigned i = 0; i < nInputs; ++i) {
494  const VectorLike& item(inp[i]);
495  const int iPhi = g.getPhiBin(item.Phi());
496  const int iEta = g.getEtaBin(item.Eta());
497  const unsigned mask = iEta >= 0 && iEta < nEta ? clusterMask[iEta * nPhi + iPhi] : 0;
498  assert(mask <= nJets);
499  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
500  }
501 }
std::vector< std::vector< reco::CandidatePtr > > constituents
edm::Handle< reco::CandidateView > inputCollection
std::vector< RecoFFTJet > recoJets
std::unique_ptr< GridAlg > gridAlg
assert(be >=bs)
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
constexpr uint32_t mask
Definition: gpuClustering.h:24
std::vector< unsigned > candidateIndex
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
math::XYZTLorentzVector VectorLike
std::vector< fftjetcms::VectorLike > eventData

◆ determinePileup()

void FFTJetProducer::determinePileup ( )
private

Definition at line 1001 of file FFTJetProducer.cc.

References cms::cuda::assert(), cellCountsVec, HLT_2022v12_cff::dEta, doubleBuf, HLT_2022v12_cff::dPhi, PVValHelper::eta, f, g, mps_fire::i, LEDCalibrationChannels::ieta, LEDCalibrationChannels::iphi, isCrisp, metsig::jet, jetMembershipFunction, reco::btau::jetPhi, M_PI, memberFactorCalcJet, memFcns2dVec, HLT_2022v12_cff::nEta, HLT_2022v12_cff::nPhi, pileup, pileupEnergyFlow, recoJets, recoScaleCalcJet, recoScaleRatioCalcJet, mitigatedMETSequence_cff::U, and SiPixelPI::zero.

Referenced by produce().

1001  {
1002  // This function works with crisp clustering only
1003  if (!isCrisp)
1004  assert(!"Pile-up subtraction for fuzzy clustering "
1005  "is not implemented yet");
1006 
1007  // Clear the pileup vector
1008  const unsigned nJets = recoJets.size();
1009  pileup.resize(nJets);
1010  if (nJets == 0)
1011  return;
1012  const VectorLike zero;
1013  for (unsigned i = 0; i < nJets; ++i)
1014  pileup[i] = zero;
1015 
1016  // Pileup energy flow grid
1017  const fftjet::Grid2d<Real>& g(*pileupEnergyFlow);
1018  const unsigned nEta = g.nEta();
1019  const unsigned nPhi = g.nPhi();
1020  const double cellArea = g.etaBinWidth() * g.phiBinWidth();
1021 
1022  // Various calculators
1023  fftjet::Functor1<double, RecoFFTJet>& scaleCalc(*recoScaleCalcJet);
1024  fftjet::Functor1<double, RecoFFTJet>& ratioCalc(*recoScaleRatioCalcJet);
1025  fftjet::Functor1<double, RecoFFTJet>& factorCalc(*memberFactorCalcJet);
1026 
1027  // Make sure we have enough memory
1028  memFcns2dVec.resize(nJets);
1029  fftjet::AbsKernel2d** memFcns2d = &memFcns2dVec[0];
1030 
1031  doubleBuf.resize(nJets * 4U + nJets * nPhi);
1032  double* recoScales = &doubleBuf[0];
1033  double* recoScaleRatios = recoScales + nJets;
1034  double* memFactors = recoScaleRatios + nJets;
1035  double* dEta = memFactors + nJets;
1036  double* dPhiBuf = dEta + nJets;
1037 
1038  cellCountsVec.resize(nJets);
1039  unsigned* cellCounts = &cellCountsVec[0];
1040 
1041  // Go over jets and collect the necessary info
1042  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
1043  const RecoFFTJet& jet(recoJets[ijet]);
1044  const fftjet::Peak& peak(jet.precluster());
1045 
1046  // Make sure we are using 2-d membership functions.
1047  // Pile-up subtraction scheme for 3-d functions should be different.
1048  fftjet::AbsMembershipFunction* m3d = dynamic_cast<fftjet::AbsMembershipFunction*>(peak.membershipFunction());
1049  if (m3d == nullptr)
1050  m3d = dynamic_cast<fftjet::AbsMembershipFunction*>(jetMembershipFunction.get());
1051  if (m3d) {
1052  assert(!"Pile-up subtraction for 3-d membership functions "
1053  "is not implemented yet");
1054  } else {
1055  fftjet::AbsKernel2d* m2d = dynamic_cast<fftjet::AbsKernel2d*>(peak.membershipFunction());
1056  if (m2d == nullptr)
1057  m2d = dynamic_cast<fftjet::AbsKernel2d*>(jetMembershipFunction.get());
1058  assert(m2d);
1059  memFcns2d[ijet] = m2d;
1060  }
1061  recoScales[ijet] = scaleCalc(jet);
1062  recoScaleRatios[ijet] = ratioCalc(jet);
1063  memFactors[ijet] = factorCalc(jet);
1064  cellCounts[ijet] = 0U;
1065 
1066  const double jetPhi = jet.vec().Phi();
1067  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
1068  double dphi = g.phiBinCenter(iphi) - jetPhi;
1069  while (dphi > M_PI)
1070  dphi -= (2.0 * M_PI);
1071  while (dphi < -M_PI)
1072  dphi += (2.0 * M_PI);
1073  dPhiBuf[iphi * nJets + ijet] = dphi;
1074  }
1075  }
1076 
1077  // Go over all grid points and integrate
1078  // the pile-up energy density
1079  VBuilder vMaker;
1080  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
1081  const double eta(g.etaBinCenter(ieta));
1082  const Real* databuf = g.data() + ieta * nPhi;
1083 
1084  // Figure out dEta for each jet
1085  for (unsigned ijet = 0; ijet < nJets; ++ijet)
1086  dEta[ijet] = eta - recoJets[ijet].vec().Eta();
1087 
1088  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
1089  double maxW(0.0);
1090  unsigned maxWJet(nJets);
1091  const double* dPhi = dPhiBuf + iphi * nJets;
1092 
1093  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
1094  if (recoScaleRatios[ijet] > 0.0)
1095  memFcns2d[ijet]->setScaleRatio(recoScaleRatios[ijet]);
1096  const double f = memFactors[ijet] * (*memFcns2d[ijet])(dEta[ijet], dPhi[ijet], recoScales[ijet]);
1097  if (f > maxW) {
1098  maxW = f;
1099  maxWJet = ijet;
1100  }
1101  }
1102 
1103  if (maxWJet < nJets) {
1104  pileup[maxWJet] += vMaker(cellArea * databuf[iphi], eta, g.phiBinCenter(iphi));
1105  cellCounts[maxWJet]++;
1106  }
1107  }
1108  }
1109 }
std::vector< fftjetcms::VectorLike > pileup
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
std::vector< double > doubleBuf
std::vector< fftjet::AbsKernel2d * > memFcns2dVec
std::vector< RecoFFTJet > recoJets
const bool isCrisp
assert(be >=bs)
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
fftjet::RecombinedJet< VectorLike > RecoFFTJet
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
math::XYZTLorentzVector VectorLike
double f[11][100]
std::vector< unsigned > cellCountsVec
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
#define M_PI
double Real
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow

◆ determinePileupDensityFromConfig()

void FFTJetProducer::determinePileupDensityFromConfig ( const edm::Event iEvent,
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &  density 
)
privatevirtual

Definition at line 932 of file FFTJetProducer.cc.

References fastSimProducer_cff::density, PVValHelper::eta, g, LEDCalibrationChannels::ieta, iEvent, input_pusummary_token_, LEDCalibrationChannels::iphi, fftjetcms::AbsPileupCalculator::isPhiDependent(), HLT_2022v12_cff::nEta, HLT_2022v12_cff::nPhi, phi, pileupDensityCalc, alignCSCRings::s, and edmLumisInFiles::summary.

Referenced by produce().

933  {
936 
939  const bool phiDependent = calc.isPhiDependent();
940 
941  fftjet::Grid2d<Real>& g(*density);
942  const unsigned nEta = g.nEta();
943  const unsigned nPhi = g.nPhi();
944 
945  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
946  const double eta(g.etaBinCenter(ieta));
947 
948  if (phiDependent) {
949  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
950  const double phi(g.phiBinCenter(iphi));
951  g.uncheckedSetBin(ieta, iphi, calc(eta, phi, s));
952  }
953  } else {
954  const double pil = calc(eta, 0.0, s);
955  for (unsigned iphi = 0; iphi < nPhi; ++iphi)
956  g.uncheckedSetBin(ieta, iphi, pil);
957  }
958  }
959 }
Summary info for pile-up determined by Gaussian filtering.
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:224
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
std::unique_ptr< fftjetcms::AbsPileupCalculator > pileupDensityCalc

◆ determinePileupDensityFromDB()

void FFTJetProducer::determinePileupDensityFromDB ( const edm::Event iEvent,
const edm::EventSetup iSetup,
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &  density 
)
privatevirtual

Definition at line 961 of file FFTJetProducer.cc.

References fastSimProducer_cff::density, PVValHelper::eta, f, g, h, LEDCalibrationChannels::ieta, iEvent, input_pusummary_token_, StaticFFTJetRcdMapper< Mapper >::instance(), LEDCalibrationChannels::iphi, HLT_2022v12_cff::nEta, HLT_2022v12_cff::nPhi, pileupTableCategory, pileupTableName, pileupTableRecord, rho, edmLumisInFiles::summary, and mitigatedMETSequence_cff::U.

Referenced by produce().

963  {
966  std::shared_ptr<npstat::StorableMultivariateFunctor> f = (*h)[pileupTableCategory][pileupTableName];
967 
970 
971  const float rho = summary->pileupRho();
972  const bool phiDependent = f->minDim() == 3U;
973 
974  fftjet::Grid2d<Real>& g(*density);
975  const unsigned nEta = g.nEta();
976  const unsigned nPhi = g.nPhi();
977 
978  double functorArg[3] = {0.0, 0.0, 0.0};
979  if (phiDependent)
980  functorArg[2] = rho;
981  else
982  functorArg[1] = rho;
983 
984  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
985  const double eta(g.etaBinCenter(ieta));
986  functorArg[0] = eta;
987 
988  if (phiDependent) {
989  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
990  functorArg[1] = g.phiBinCenter(iphi);
991  g.uncheckedSetBin(ieta, iphi, (*f)(functorArg, 3U));
992  }
993  } else {
994  const double pil = (*f)(functorArg, 2U);
995  for (unsigned iphi = 0; iphi < nPhi; ++iphi)
996  g.uncheckedSetBin(ieta, iphi, pil);
997  }
998  }
999 }
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:224
double f[11][100]
std::string pileupTableRecord
std::string pileupTableName
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
std::string pileupTableCategory
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
static const Mapper & instance()

◆ determineVectorConstituents()

void FFTJetProducer::determineVectorConstituents ( )
private

Definition at line 503 of file FFTJetProducer.cc.

References cms::cuda::assert(), fftjetcms::FFTJetInterface::candidateIndex, constituents, fftjetcms::FFTJetInterface::eventData, mps_fire::i, fftjetcms::FFTJetInterface::inputCollection, gpuClustering::pixelStatus::mask, recoAlg, and recoJets.

Referenced by produce().

503  {
504  const unsigned nJets = recoJets.size();
505  const unsigned* clusterMask = recoAlg->getClusterMask();
506  const unsigned maskLength = recoAlg->getLastNData();
507  assert(maskLength == eventData.size());
508 
509  const unsigned* candIdx = maskLength ? &candidateIndex[0] : nullptr;
510  for (unsigned i = 0; i < maskLength; ++i) {
511  // In FFTJet, the mask value of 0 corresponds to unclustered
512  // energy. We will do the same here. Jet numbers are therefore
513  // shifted by 1 wrt constituents vector, and constituents[1]
514  // corresponds to jet number 0.
515  const unsigned mask = clusterMask[i];
516  assert(mask <= nJets);
517  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
518  }
519 }
std::vector< std::vector< reco::CandidatePtr > > constituents
edm::Handle< reco::CandidateView > inputCollection
std::vector< RecoFFTJet > recoJets
assert(be >=bs)
constexpr uint32_t mask
Definition: gpuClustering.h:24
std::vector< unsigned > candidateIndex
std::unique_ptr< RecoAlg > recoAlg
std::vector< fftjetcms::VectorLike > eventData

◆ endJob()

void FFTJetProducer::endJob ( void  )
overrideprotectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 1112 of file FFTJetProducer.cc.

1112 {}

◆ genJetPreclusters()

void FFTJetProducer::genJetPreclusters ( const SparseTree tree,
edm::Event iEvent,
const edm::EventSetup ,
const fftjet::Functor1< bool, fftjet::Peak > &  peakSelector,
std::vector< fftjet::Peak > *  preclusters 
)
protectedvirtual

Definition at line 209 of file FFTJetProducer.cc.

References mps_fire::i, iEvent, input, input_genjet_token_, SimL1EmulatorRepack_Full_cff::InputCollection, metsig::jet, fftjetcms::jetFromStorable(), AlCaHLTBitMon_ParallelJobs::p, preclusters, resolution, and L1EGammaClusterEmuProducer_cfi::scale.

Referenced by produce().

213  {
214  typedef reco::FFTAnyJet<reco::GenJet> InputJet;
215  typedef std::vector<InputJet> InputCollection;
216 
218  iEvent.getByToken(input_genjet_token_, input);
219 
220  const unsigned sz = input->size();
221  preclusters->reserve(sz);
222  for (unsigned i = 0; i < sz; ++i) {
223  const RecoFFTJet& jet(jetFromStorable((*input)[i].getFFTSpecific()));
224  fftjet::Peak p(jet.precluster());
225  const double scale(p.scale());
226  p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
227  p.setMagnitude(jet.vec().Pt() / scale / scale);
228  p.setStatus(resolution);
229  if (peakSelect(p))
230  preclusters->push_back(p);
231  }
232 }
fftjet::RecombinedJet< VectorLike > jetFromStorable(const reco::FFTJet< Real > &jet)
Definition: jetConverters.h:65
Resolution resolution
std::vector< fftjet::Peak > preclusters
static std::string const input
Definition: EdmProvDump.cc:47
fftjet::RecombinedJet< VectorLike > RecoFFTJet
int iEvent
Definition: GenABIO.cc:224
Implements inheritance relationships for FFTJet jets.
Definition: FFTAnyJet.h:16
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_

◆ iterateJetReconstruction()

unsigned FFTJetProducer::iterateJetReconstruction ( )
private

Definition at line 416 of file FFTJetProducer.cc.

References cms::cuda::assert(), checkConvergence(), fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, Exception, gridAlg, mps_fire::i, iterJets, iterPreclusters, metsig::jet, PDWG_EXODelayedJetMET_cff::jets, maxIterations, memberFactorCalcJet, noiseLevel, AlCaHLTBitMon_ParallelJobs::p, preclusters, recoAlg, recoJets, recoScaleCalcJet, recoScaleRatioCalcJet, removeFakePreclusters(), mps_update::status, mitigatedMETSequence_cff::U, unclustered, unused, and useGriddedAlgorithm.

Referenced by produce().

416  {
417  fftjet::Functor1<double, RecoFFTJet>& scaleCalc(*recoScaleCalcJet);
418  fftjet::Functor1<double, RecoFFTJet>& ratioCalc(*recoScaleRatioCalcJet);
419  fftjet::Functor1<double, RecoFFTJet>& factorCalc(*memberFactorCalcJet);
420 
421  unsigned nJets = recoJets.size();
422  unsigned iterNum = 1U;
423  bool converged = false;
424  for (; iterNum < maxIterations && !converged; ++iterNum) {
425  // Recreate the vector of preclusters using the jets
426  const RecoFFTJet* jets = &recoJets[0];
427  iterPreclusters.clear();
428  iterPreclusters.reserve(nJets);
429  for (unsigned i = 0; i < nJets; ++i) {
430  const RecoFFTJet& jet(jets[i]);
431  fftjet::Peak p(jet.precluster());
432  p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
433  p.setRecoScale(scaleCalc(jet));
434  p.setRecoScaleRatio(ratioCalc(jet));
435  p.setMembershipFactor(factorCalc(jet));
436  iterPreclusters.push_back(p);
437  }
438 
439  // Run the algorithm
440  int status = 0;
443  else
445  if (status)
446  throw cms::Exception("FFTJetInterface") << "FFTJet algorithm failed" << std::endl;
447 
448  // As it turns out, it is possible, in very rare cases,
449  // to have iterJets.size() != nJets at this point
450 
451  // Figure out if the iterations have converged
452  converged = checkConvergence(recoJets, iterJets);
453 
454  // Prepare for the next cycle
455  iterJets.swap(recoJets);
456  nJets = recoJets.size();
457  }
458 
459  // Check that we have the correct number of preclusters
460  if (preclusters.size() != nJets) {
461  assert(nJets < preclusters.size());
463  assert(preclusters.size() == nJets);
464  }
465 
466  // Plug in the original precluster coordinates into the result
467  RecoFFTJet* jets = &recoJets[0];
468  for (unsigned i = 0; i < nJets; ++i) {
469  const fftjet::Peak& oldp(preclusters[i]);
470  jets[i].setPeakEtaPhi(oldp.eta(), oldp.phi());
471  }
472 
473  // If we have converged on the last cycle, the result
474  // would be indistinguishable from no convergence.
475  // Because of this, raise the counter by one to indicate
476  // the case when the convergence is not achieved.
477  if (!converged)
478  ++iterNum;
479 
480  return iterNum;
481 }
const bool useGriddedAlgorithm
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
std::vector< RecoFFTJet > recoJets
std::unique_ptr< GridAlg > gridAlg
assert(be >=bs)
std::vector< fftjet::Peak > preclusters
fftjet::RecombinedJet< VectorLike > RecoFFTJet
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
const double noiseLevel
std::vector< RecoFFTJet > iterJets
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
bool checkConvergence(const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
std::unique_ptr< RecoAlg > recoAlg
std::vector< fftjetcms::VectorLike > eventData
fftjetcms::VectorLike unclustered
std::vector< fftjet::Peak > iterPreclusters
void removeFakePreclusters()
const unsigned maxIterations

◆ loadEnergyFlow()

bool FFTJetProducer::loadEnergyFlow ( const edm::Event iEvent,
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &  flow 
)
private

Definition at line 375 of file FFTJetProducer.cc.

References fftjetcommon_cfi::flow, iEvent, input, and input_energyflow_token_.

Referenced by produce().

375  {
377  iEvent.getByToken(input_energyflow_token_, input);
378 
379  // Make sure that the grid is compatible with the stored one
380  bool rebuildGrid = flow.get() == nullptr;
381  if (!rebuildGrid)
382  rebuildGrid =
383  !(flow->nEta() == input->nEtaBins() && flow->nPhi() == input->nPhiBins() && flow->etaMin() == input->etaMin() &&
384  flow->etaMax() == input->etaMax() && flow->phiBin0Edge() == input->phiBin0Edge());
385  if (rebuildGrid) {
386  // We should not get here very often...
387  flow = std::make_unique<fftjet::Grid2d<Real> >(
388  input->nEtaBins(), input->etaMin(), input->etaMax(), input->nPhiBins(), input->phiBin0Edge(), input->title());
389  }
390  flow->blockSet(input->data(), input->nEtaBins(), input->nPhiBins());
391  return rebuildGrid;
392 }
static std::string const input
Definition: EdmProvDump.cc:47
int iEvent
Definition: GenABIO.cc:224
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > input_energyflow_token_

◆ loadSparseTreeData()

template<class Real >
void FFTJetProducer::loadSparseTreeData ( const edm::Event iEvent)
private

Definition at line 194 of file FFTJetProducer.cc.

References fftjetcms::FFTJetInterface::getEventScale(), iEvent, iniScales, input, input_recotree_token_, fftjetcms::sparsePeakTreeFromStorable(), and sparseTree.

194  {
196 
197  // Get the input
199  iEvent.getByToken(input_recotree_token_, input);
200 
201  if (!input->isSparse())
202  throw cms::Exception("FFTJetBadConfig") << "The stored clustering tree is not sparse" << std::endl;
203 
205  sparseTree.sortNodes();
206  fftjet::updateSplitMergeTimes(sparseTree, sparseTree.minScale(), sparseTree.maxScale());
207 }
Class for storing FFTJet sparse clustering trees.
Definition: PattRecoTree.h:20
static std::string const input
Definition: EdmProvDump.cc:47
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
std::unique_ptr< std::vector< double > > iniScales
int iEvent
Definition: GenABIO.cc:224
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

◆ makeProduces()

template<typename T >
void FFTJetProducer::makeProduces ( const std::string &  alias,
const std::string &  tag 
)
private

Definition at line 109 of file FFTJetProducer.cc.

References SiStripOfflineCRack_cfg::alias, and makeGlobalPositionRcd_cfg::tag.

Referenced by FFTJetProducer().

109  {
110  produces<std::vector<reco::FFTAnyJet<T> > >(tag).setBranchAlias(alias);
111 }

◆ operator=()

FFTJetProducer& FFTJetProducer::operator= ( const FFTJetProducer )
delete

◆ parse_bgMembershipFunction()

std::unique_ptr< AbsBgFunctor > FFTJetProducer::parse_bgMembershipFunction ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 763 of file FFTJetProducer.cc.

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

Referenced by beginJob().

763  {
764  return fftjet_BgFunctor_parser(ps.getParameter<edm::ParameterSet>("bgMembershipFunction"));
765 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)

◆ parse_jetDistanceCalc()

std::unique_ptr< fftjet::Functor2< double, FFTJetProducer::RecoFFTJet, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_jetDistanceCalc ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 806 of file FFTJetProducer.cc.

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

Referenced by beginJob().

806  {
807  return fftjet_JetDistance_parser(ps.getParameter<edm::ParameterSet>("jetDistanceCalc"));
808 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)

◆ parse_jetMembershipFunction()

std::unique_ptr< fftjet::ScaleSpaceKernel > FFTJetProducer::parse_jetMembershipFunction ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 758 of file FFTJetProducer.cc.

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

Referenced by beginJob().

758  {
759  return fftjet_MembershipFunction_parser(ps.getParameter<edm::ParameterSet>("jetMembershipFunction"));
760 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)

◆ parse_memberFactorCalcJet()

std::unique_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_memberFactorCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 800 of file FFTJetProducer.cc.

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

Referenced by beginJob().

801  {
802  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("memberFactorCalcJet"));
803 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)

◆ parse_memberFactorCalcPeak()

std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_memberFactorCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 785 of file FFTJetProducer.cc.

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

Referenced by beginJob().

786  {
787  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("memberFactorCalcPeak"));
788 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)

◆ parse_peakSelector()

std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > FFTJetProducer::parse_peakSelector ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 753 of file FFTJetProducer.cc.

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

Referenced by beginJob().

753  {
754  return fftjet_PeakSelector_parser(ps.getParameter<edm::ParameterSet>("PeakSelectorConfiguration"));
755 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)

◆ parse_pileupDensityCalc()

std::unique_ptr< fftjetcms::AbsPileupCalculator > FFTJetProducer::parse_pileupDensityCalc ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 774 of file FFTJetProducer.cc.

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

Referenced by beginJob().

774  {
775  return fftjet_PileupCalculator_parser(ps.getParameter<edm::ParameterSet>("pileupDensityCalc"));
776 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< AbsPileupCalculator > fftjet_PileupCalculator_parser(const edm::ParameterSet &ps)

◆ parse_recoScaleCalcJet()

std::unique_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_recoScaleCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 790 of file FFTJetProducer.cc.

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

Referenced by beginJob().

791  {
792  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleCalcJet"));
793 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)

◆ parse_recoScaleCalcPeak()

std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_recoScaleCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 768 of file FFTJetProducer.cc.

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

Referenced by beginJob().

769  {
770  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleCalcPeak"));
771 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)

◆ parse_recoScaleRatioCalcJet()

std::unique_ptr< fftjet::Functor1< double, FFTJetProducer::RecoFFTJet > > FFTJetProducer::parse_recoScaleRatioCalcJet ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 795 of file FFTJetProducer.cc.

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

Referenced by beginJob().

796  {
797  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcJet"));
798 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)

◆ parse_recoScaleRatioCalcPeak()

std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > FFTJetProducer::parse_recoScaleRatioCalcPeak ( const edm::ParameterSet ps)
protectedvirtual

Definition at line 779 of file FFTJetProducer.cc.

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

Referenced by beginJob().

780  {
781  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcPeak"));
782 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)

◆ parse_resolution()

FFTJetProducer::Resolution FFTJetProducer::parse_resolution ( const std::string &  name)
static

Definition at line 93 of file FFTJetProducer.cc.

References Exception, and Skims_PA_cff::name.

93  {
94  if (!name.compare("fixed"))
95  return FIXED;
96  else if (!name.compare("maximallyStable"))
97  return MAXIMALLY_STABLE;
98  else if (!name.compare("globallyAdaptive"))
99  return GLOBALLY_ADAPTIVE;
100  else if (!name.compare("locallyAdaptive"))
101  return LOCALLY_ADAPTIVE;
102  else if (!name.compare("fromGenJets"))
103  return FROM_GENJETS;
104  else
105  throw cms::Exception("FFTJetBadConfig") << "Invalid resolution specification \"" << name << "\"" << std::endl;
106 }

◆ prepareRecombinationScales()

void FFTJetProducer::prepareRecombinationScales ( )
private

Definition at line 336 of file FFTJetProducer.cc.

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

Referenced by produce().

336  {
337  const unsigned nClus = preclusters.size();
338  if (nClus) {
339  fftjet::Peak* clus = &preclusters[0];
340  fftjet::Functor1<double, fftjet::Peak>& scaleCalc(*recoScaleCalcPeak);
341  fftjet::Functor1<double, fftjet::Peak>& ratioCalc(*recoScaleRatioCalcPeak);
342  fftjet::Functor1<double, fftjet::Peak>& factorCalc(*memberFactorCalcPeak);
343 
344  for (unsigned i = 0; i < nClus; ++i) {
345  clus[i].setRecoScale(scaleCalc(clus[i]));
346  clus[i].setRecoScaleRatio(ratioCalc(clus[i]));
347  clus[i].setMembershipFactor(factorCalc(clus[i]));
348  }
349  }
350 }
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
std::vector< fftjet::Peak > preclusters
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak

◆ produce()

void FFTJetProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Implements edm::EDProducer.

Definition at line 651 of file FFTJetProducer.cc.

References cms::cuda::assert(), assignConstituents, assignMembershipFunctions(), buildGridAlg(), calculatePileup, clear(), constituents, determineGriddedConstituents(), determinePileup(), determinePileupDensityFromConfig(), determinePileupDensityFromDB(), determineVectorConstituents(), fftjetcms::FFTJetInterface::discretizeEnergyFlow(), fftjetcms::FFTJetInterface::energyFlow, fftjetcms::FFTJetInterface::eventData, Exception, FROM_GENJETS, genJetPreclusters(), gridAlg, mps_fire::i, iEvent, iterateJetReconstruction(), iterationsPerformed, loadEnergyFlow(), fftjetcms::FFTJetInterface::loadInputCollection(), loadPileupFromDB, maxInitialPreclusters, maxIterations, noiseLevel, occupancy, peakSelector, pileup, pileupEnergyFlow, preclusters, prepareRecombinationScales(), recoAlg, recoJets, removeFakePreclusters(), resolution, reuseExistingGrid, saveResults(), selectPreclusters(), jetUpdater_cfi::sort, sparseTree, mps_update::status, fftjetcms::FFTJetInterface::storeInSinglePrecision(), mitigatedMETSequence_cff::U, unclustered, unused, and useGriddedAlgorithm.

651  {
652  // Load the clustering tree made by FFTJetPatRecoProducer
654  loadSparseTreeData<float>(iEvent);
655  else
656  loadSparseTreeData<double>(iEvent);
657 
658  // Do we need to load the candidate collection?
661 
662  // Do we need to have discretized energy flow?
663  if (useGriddedAlgorithm) {
664  if (reuseExistingGrid) {
666  buildGridAlg();
667  } else
669  }
670 
671  // Calculate cluster occupancy as a function of level number
672  sparseTree.occupancyInScaleSpace(*peakSelector, &occupancy);
673 
674  // Select the preclusters using the requested resolution scheme
675  preclusters.clear();
676  if (resolution == FROM_GENJETS)
678  else
680  if (preclusters.size() > maxInitialPreclusters) {
681  std::sort(preclusters.begin(), preclusters.end(), std::greater<fftjet::Peak>());
683  }
684 
685  // Prepare to run the jet recombination procedure
687 
688  // Assign membership functions to preclusters. If this function
689  // is not overriden in a derived class, default algorithm membership
690  // function will be used for every cluster.
692 
693  // Count the preclusters going in
694  unsigned nPreclustersFound = 0U;
695  const unsigned npre = preclusters.size();
696  for (unsigned i = 0; i < npre; ++i)
697  if (preclusters[i].membershipFactor() > 0.0)
698  ++nPreclustersFound;
699 
700  // Run the recombination algorithm once
701  int status = 0;
704  else
706  if (status)
707  throw cms::Exception("FFTJetInterface") << "FFTJet algorithm failed (first iteration)" << std::endl;
708 
709  // If requested, iterate the jet recombination procedure
710  if (maxIterations > 1U && !recoJets.empty()) {
711  // It is possible to have a smaller number of jets than we had
712  // preclusters. Fake preclusters are possible, but for a good
713  // choice of pattern recognition kernel their presence should
714  // be infrequent. However, any fake preclusters will throw the
715  // iterative reconstruction off balance. Deal with the problem now.
716  const unsigned nJets = recoJets.size();
717  if (preclusters.size() != nJets) {
718  assert(nJets < preclusters.size());
720  }
722  } else
724 
725  // Determine jet constituents. FFTJet returns a map
726  // of constituents which is inverse to what we need here.
727  const unsigned nJets = recoJets.size();
728  if (constituents.size() <= nJets)
729  constituents.resize(nJets + 1U);
730  if (assignConstituents) {
731  for (unsigned i = 0; i <= nJets; ++i)
732  constituents[i].clear();
735  else
737  }
738 
739  // Figure out the pile-up
740  if (calculatePileup) {
741  if (loadPileupFromDB)
743  else
745  determinePileup();
746  assert(pileup.size() == recoJets.size());
747  }
748 
749  // Write out the results
750  saveResults(iEvent, iSetup, nPreclustersFound);
751 }
std::vector< std::vector< reco::CandidatePtr > > constituents
unsigned iterationsPerformed
const bool useGriddedAlgorithm
std::vector< fftjetcms::VectorLike > pileup
void saveResults(edm::Event &iEvent, const edm::EventSetup &, unsigned nPreclustersFound)
virtual void assignMembershipFunctions(std::vector< fftjet::Peak > *preclusters)
void loadInputCollection(const edm::Event &)
Resolution resolution
std::vector< RecoFFTJet > recoJets
std::unique_ptr< GridAlg > gridAlg
std::vector< unsigned > occupancy
assert(be >=bs)
std::vector< fftjet::Peak > preclusters
void determineVectorConstituents()
const bool reuseExistingGrid
int iEvent
Definition: GenABIO.cc:224
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
const double noiseLevel
virtual void determinePileupDensityFromDB(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
unsigned iterateJetReconstruction()
const bool calculatePileup
const bool assignConstituents
virtual void selectPreclusters(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
const unsigned maxInitialPreclusters
SparseTree sparseTree
void clear(HadCaloObj &c)
Definition: data.h:124
void determineGriddedConstituents()
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
virtual void genJetPreclusters(const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
bool loadEnergyFlow(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
std::unique_ptr< RecoAlg > recoAlg
std::vector< fftjetcms::VectorLike > eventData
fftjetcms::VectorLike unclustered
virtual void determinePileupDensityFromConfig(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
void removeFakePreclusters()
const unsigned maxIterations
void prepareRecombinationScales()

◆ removeFakePreclusters()

void FFTJetProducer::removeFakePreclusters ( )
private

Definition at line 900 of file FFTJetProducer.cc.

References cms::cuda::assert(), mps_fire::i, iterPreclusters, fftjetcms::matchOneToOne(), preclusters, and recoJets.

Referenced by iterateJetReconstruction(), and produce().

900  {
901  // There are two possible reasons for fake preclusters:
902  // 1. Membership factor was set to 0
903  // 2. Genuine problem with pattern recognition
904  //
905  // Anyway, we need to match jets to preclusters and keep
906  // only those preclusters that have been matched
907  //
908  std::vector<int> matchTable;
909  const unsigned nmatched = matchOneToOne(recoJets, preclusters, JetToPeakDistance(), &matchTable);
910 
911  // Ensure that all jets have been matched.
912  // If not, we must have a bug somewhere.
913  assert(nmatched == recoJets.size());
914 
915  // Collect all matched preclusters
916  iterPreclusters.clear();
917  iterPreclusters.reserve(nmatched);
918  for (unsigned i = 0; i < nmatched; ++i)
919  iterPreclusters.push_back(preclusters[matchTable[i]]);
921 }
unsigned matchOneToOne(const std::vector< T1 > &v1, const std::vector< T2 > &v2, const DistanceCalculator &calc, std::vector< int > *matchFrom1To2, const double maxMatchingDistance=1.0e300)
Definition: matchOneToOne.h:38
std::vector< RecoFFTJet > recoJets
assert(be >=bs)
std::vector< fftjet::Peak > preclusters
std::vector< fftjet::Peak > iterPreclusters

◆ saveResults()

void FFTJetProducer::saveResults ( edm::Event iEvent,
const edm::EventSetup iSetup,
unsigned  nPreclustersFound 
)
private

Definition at line 615 of file FFTJetProducer.cc.

References constituents, makeMEIFBenchmarkPlots::ev, mps_fire::i, iterationsPerformed, jet_type_switch, maxIterations, maxLevel, fftjetcommon_cfi::maxScale, minLevel, fftjetcommon_cfi::minScale, occupancy, fftjetcms::FFTJetInterface::outputLabel, resumConstituents, sparseTree, thresholds, mitigatedMETSequence_cff::U, unclustered, unused, usedLevel, and writeJets().

Referenced by produce().

615  {
616  // Write recombined jets
617  jet_type_switch(writeJets, ev, iSetup);
618 
619  // Check if we should resum unclustered energy constituents
620  VectorLike unclusE(unclustered);
621  if (resumConstituents) {
622  VectorLike sum(0.0, 0.0, 0.0, 0.0);
623  const unsigned nCon = constituents[0].size();
624  const reco::CandidatePtr* cn = nCon ? &constituents[0][0] : nullptr;
625  for (unsigned i = 0; i < nCon; ++i)
626  sum += cn[i]->p4();
627  unclusE = sum;
628  }
629 
630  // Write the jet reconstruction summary
631  const double minScale = minLevel ? sparseTree.getScale(minLevel) : 0.0;
632  const double maxScale = maxLevel ? sparseTree.getScale(maxLevel) : 0.0;
633  const double scaleUsed = usedLevel ? sparseTree.getScale(usedLevel) : 0.0;
634 
635  ev.put(
636  std::make_unique<reco::FFTJetProducerSummary>(thresholds,
637  occupancy,
638  unclusE,
639  constituents[0],
640  unused,
641  minScale,
642  maxScale,
643  scaleUsed,
644  nPreclustersFound,
647  outputLabel);
648 }
std::vector< std::vector< reco::CandidatePtr > > constituents
unsigned iterationsPerformed
const bool resumConstituents
std::vector< unsigned > occupancy
math::XYZTLorentzVector VectorLike
unsigned usedLevel
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

◆ selectPreclusters()

void FFTJetProducer::selectPreclusters ( const SparseTree tree,
const fftjet::Functor1< bool, fftjet::Peak > &  peakSelector,
std::vector< fftjet::Peak > *  preclusters 
)
protectedvirtual

Definition at line 234 of file FFTJetProducer.cc.

References bsc_activity_cfg::clusters, mps_fire::i, nodes, preclusters, resolution, selectTreeNodes(), and sparseTree.

Referenced by produce().

236  {
237  nodes.clear();
238  selectTreeNodes(tree, peakSelect, &nodes);
239 
240  // Fill out the vector of preclusters using the tree node ids
241  const unsigned nNodes = nodes.size();
242  const SparseTree::NodeId* pnodes = nNodes ? &nodes[0] : nullptr;
243  preclusters->reserve(nNodes);
244  for (unsigned i = 0; i < nNodes; ++i)
245  preclusters->push_back(sparseTree.uncheckedNode(pnodes[i]).getCluster());
246 
247  // Remember the node id in the precluster and set
248  // the status word to indicate the resolution scheme used
249  fftjet::Peak* clusters = nNodes ? &(*preclusters)[0] : nullptr;
250  for (unsigned i = 0; i < nNodes; ++i) {
251  clusters[i].setCode(pnodes[i]);
252  clusters[i].setStatus(resolution);
253  }
254 }
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
Definition: tree.py:1

◆ selectTreeNodes()

void FFTJetProducer::selectTreeNodes ( const SparseTree tree,
const fftjet::Functor1< bool, fftjet::Peak > &  peakSelect,
std::vector< SparseTree::NodeId > *  nodes 
)
protected

Definition at line 256 of file FFTJetProducer.cc.

References cms::cuda::assert(), ztail::d, dumpMFGeometry_cfg::delta, FIXED, fixedScale, GLOBALLY_ADAPTIVE, personalPlayback::level, LOCALLY_ADAPTIVE, MAXIMALLY_STABLE, maxLevel, maxStableScale, minLevel, minStableScale, dqmiodumpmetadata::n, nClustersRequested, occupancy, resolution, stabilityAlpha, TopDecayID::stable, thresholds, and usedLevel.

Referenced by selectPreclusters().

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

◆ setJetStatusBit()

void FFTJetProducer::setJetStatusBit ( RecoFFTJet jet,
int  mask,
bool  value 
)
staticprivate

Definition at line 923 of file FFTJetProducer.cc.

References metsig::jet, gpuClustering::pixelStatus::mask, and mps_update::status.

Referenced by writeJets().

923  {
924  int status = jet->status();
925  if (value)
926  status |= mask;
927  else
928  status &= ~mask;
929  jet->setStatus(status);
930 }
constexpr uint32_t mask
Definition: gpuClustering.h:24
Definition: value.py:1

◆ writeJets()

template<typename T >
void FFTJetProducer::writeJets ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
private

Definition at line 524 of file FFTJetProducer.cc.

References fftjetcms::adjustForPileup(), calculatePileup, cellCountsVec, constituents, CONSTITUENTS_RESUMMED, fftjetcms::FFTJetInterface::energyFlow, geometry_token_, edm::EventSetup::getData(), mps_fire::i, iEvent, metsig::jet, PDWG_EXODelayedJetMET_cff::jets, eostools::move(), HLTTauReferences_cfi::OutputCollection, fftjetcms::FFTJetInterface::outputLabel, pileup, PILEUP_CALCULATED, PILEUP_SUBTRACTED_4VEC, PILEUP_SUBTRACTED_PT, pileupEnergyFlow, DiDispStaMuonMonitor_cfi::pt, recoJets, recombinationDataCutoff, resumConstituents, reco::FFTJet< Real >::setFourVec(), setJetStatusBit(), reco::FFTJet< Real >::setNCells(), reco::FFTJet< Real >::setPileup(), jetUpdater_cfi::sort, subtractPileup, subtractPileupAs4Vec, topology_token_, useGriddedAlgorithm, fftjetcms::FFTJetInterface::vertexUsed(), and reco::writeSpecific().

Referenced by saveResults().

524  {
525  using namespace reco;
526 
527  typedef FFTAnyJet<T> OutputJet;
528  typedef std::vector<OutputJet> OutputCollection;
529 
530  // Area of a single eta-phi cell for jet area calculations.
531  // Set it to 0 in case the module configuration does not allow
532  // us to calculate jet areas reliably.
533  double cellArea = useGriddedAlgorithm && recombinationDataCutoff < 0.0
534  ? energyFlow->etaBinWidth() * energyFlow->phiBinWidth()
535  : 0.0;
536 
537  if (calculatePileup)
538  cellArea = pileupEnergyFlow->etaBinWidth() * pileupEnergyFlow->phiBinWidth();
539 
540  // allocate output jet collection
541  auto jets = std::make_unique<OutputCollection>();
542  const unsigned nJets = recoJets.size();
543  jets->reserve(nJets);
544 
545  bool sorted = true;
546  double previousPt = DBL_MAX;
547  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
548  RecoFFTJet& myjet(recoJets[ijet]);
549 
550  // Check if we should resum jet constituents
551  VectorLike jet4vec(myjet.vec());
552  if (resumConstituents) {
553  VectorLike sum(0.0, 0.0, 0.0, 0.0);
554  const unsigned nCon = constituents[ijet + 1].size();
555  const reco::CandidatePtr* cn = nCon ? &constituents[ijet + 1][0] : nullptr;
556  for (unsigned i = 0; i < nCon; ++i)
557  sum += cn[i]->p4();
558  jet4vec = sum;
559  setJetStatusBit(&myjet, CONSTITUENTS_RESUMMED, true);
560  }
561 
562  // Subtract the pile-up
564  jet4vec = adjustForPileup(jet4vec, pileup[ijet], subtractPileupAs4Vec);
567  else
568  setJetStatusBit(&myjet, PILEUP_SUBTRACTED_PT, true);
569  }
570 
571  // Write the specifics to the jet (simultaneously sets 4-vector,
572  // vertex, constituents). These are overridden functions that will
573  // call the appropriate specific code.
574  T jet;
575  if constexpr (std::is_same_v<T, reco::CaloJet>) {
576  const CaloGeometry& geometry = iSetup.getData(geometry_token_);
577  const HcalTopology& topology = iSetup.getData(topology_token_);
578  writeSpecific(jet, jet4vec, vertexUsed(), constituents[ijet + 1], geometry, topology);
579  } else {
580  writeSpecific(jet, jet4vec, vertexUsed(), constituents[ijet + 1]);
581  }
582 
583  // calcuate the jet area
584  double ncells = myjet.ncells();
585  if (calculatePileup) {
586  ncells = cellCountsVec[ijet];
587  setJetStatusBit(&myjet, PILEUP_CALCULATED, true);
588  }
589  jet.setJetArea(cellArea * ncells);
590 
591  // add jet to the list
592  FFTJet<float> fj(jetToStorable<float>(myjet));
593  fj.setFourVec(jet4vec);
594  if (calculatePileup) {
595  fj.setPileup(pileup[ijet]);
596  fj.setNCells(ncells);
597  }
598  jets->push_back(OutputJet(jet, fj));
599 
600  // Check whether the sequence remains sorted by pt
601  const double pt = jet.pt();
602  if (pt > previousPt)
603  sorted = false;
604  previousPt = pt;
605  }
606 
607  // Sort the collection
608  if (!sorted)
609  std::sort(jets->begin(), jets->end(), LocalSortByPt());
610 
611  // put the collection into the event
613 }
std::vector< std::vector< reco::CandidatePtr > > constituents
const bool useGriddedAlgorithm
std::vector< fftjetcms::VectorLike > pileup
const bool resumConstituents
const bool subtractPileupAs4Vec
const reco::Particle::Point & vertexUsed() const
void writeSpecific(reco::CaloJet &jet, reco::Particle::LorentzVector const &p4, reco::Particle::Point const &point, std::vector< reco::CandidatePtr > const &constituents, CaloGeometry const &geometry, HcalTopology const &topology)
Definition: JetSpecific.cc:32
const bool subtractPileup
std::vector< RecoFFTJet > recoJets
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometry_token_
const double recombinationDataCutoff
fftjet::RecombinedJet< VectorLike > RecoFFTJet
int iEvent
Definition: GenABIO.cc:224
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
math::XYZTLorentzVector VectorLike
Implements inheritance relationships for FFTJet jets.
Definition: FFTAnyJet.h:16
static void setJetStatusBit(RecoFFTJet *jet, int mask, bool value)
std::vector< unsigned > cellCountsVec
bool getData(T &iHolder) const
Definition: EventSetup.h:122
const bool calculatePileup
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topology_token_
fixed size matrix
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
long double T
const std::string outputLabel
math::XYZTLorentzVector adjustForPileup(const math::XYZTLorentzVector &jet, const math::XYZTLorentzVector &pileup, bool subtractPileupAs4Vec)
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ assignConstituents

const bool FFTJetProducer::assignConstituents
private

Definition at line 258 of file FFTJetProducer.h.

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

◆ bgMembershipFunction

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

Definition at line 334 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

◆ calculatePileup

const bool FFTJetProducer::calculatePileup
private

Definition at line 267 of file FFTJetProducer.h.

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

◆ cellCountsVec

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

Definition at line 399 of file FFTJetProducer.h.

Referenced by determinePileup(), and writeJets().

◆ constituents

std::vector<std::vector<reco::CandidatePtr> > FFTJetProducer::constituents
private

◆ convergenceDistance

const double FFTJetProducer::convergenceDistance
private

Definition at line 255 of file FFTJetProducer.h.

Referenced by checkConvergence().

◆ doubleBuf

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

Definition at line 398 of file FFTJetProducer.h.

Referenced by determinePileup().

◆ fixedScale

const double FFTJetProducer::fixedScale
private

Definition at line 276 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

◆ genJetsLabel

const edm::InputTag FFTJetProducer::genJetsLabel
private

Definition at line 302 of file FFTJetProducer.h.

Referenced by FFTJetProducer().

◆ geometry_token_

edm::ESGetToken<CaloGeometry, CaloGeometryRecord> FFTJetProducer::geometry_token_
private

Definition at line 407 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and writeJets().

◆ gridAlg

std::unique_ptr<GridAlg> FFTJetProducer::gridAlg
private

◆ gridScanMaxEta

const double FFTJetProducer::gridScanMaxEta
private

Definition at line 293 of file FFTJetProducer.h.

Referenced by buildGridAlg().

◆ iniScales

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

Definition at line 322 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and loadSparseTreeData().

◆ input_energyflow_token_

edm::EDGetTokenT<reco::DiscretizedEnergyFlow> FFTJetProducer::input_energyflow_token_
private

Definition at line 404 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and loadEnergyFlow().

◆ input_genjet_token_

edm::EDGetTokenT<std::vector<reco::FFTAnyJet<reco::GenJet> > > FFTJetProducer::input_genjet_token_
private

Definition at line 403 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and genJetPreclusters().

◆ input_pusummary_token_

edm::EDGetTokenT<reco::FFTJetPileupSummary> FFTJetProducer::input_pusummary_token_
private

◆ input_recotree_token_

edm::EDGetTokenT<reco::PattRecoTree<fftjetcms::Real, reco::PattRecoPeak<fftjetcms::Real> > > FFTJetProducer::input_recotree_token_
private

Definition at line 402 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and loadSparseTreeData().

◆ isCrisp

const bool FFTJetProducer::isCrisp
private

Definition at line 297 of file FFTJetProducer.h.

Referenced by beginJob(), buildGridAlg(), and determinePileup().

◆ iterationsPerformed

unsigned FFTJetProducer::iterationsPerformed
private

Definition at line 379 of file FFTJetProducer.h.

Referenced by produce(), and saveResults().

◆ iterJets

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

Definition at line 378 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction().

◆ iterPreclusters

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

Definition at line 377 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction(), and removeFakePreclusters().

◆ jetDistanceCalc

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

Definition at line 352 of file FFTJetProducer.h.

Referenced by beginJob(), and checkConvergence().

◆ jetMembershipFunction

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

Definition at line 333 of file FFTJetProducer.h.

Referenced by beginJob(), buildGridAlg(), and determinePileup().

◆ loadPileupFromDB

bool FFTJetProducer::loadPileupFromDB
private

Definition at line 319 of file FFTJetProducer.h.

Referenced by beginJob(), and produce().

◆ maxInitialPreclusters

const unsigned FFTJetProducer::maxInitialPreclusters
private

Definition at line 307 of file FFTJetProducer.h.

Referenced by produce().

◆ maxIterations

const unsigned FFTJetProducer::maxIterations
private

Definition at line 251 of file FFTJetProducer.h.

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

◆ maxLevel

unsigned FFTJetProducer::maxLevel
private

Definition at line 370 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

◆ maxStableScale

const double FFTJetProducer::maxStableScale
private

Definition at line 280 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

◆ memberFactorCalcJet

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

Definition at line 348 of file FFTJetProducer.h.

Referenced by beginJob(), determinePileup(), and iterateJetReconstruction().

◆ memberFactorCalcPeak

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

Definition at line 343 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

◆ memFcns2dVec

std::vector<fftjet::AbsKernel2d*> FFTJetProducer::memFcns2dVec
private

Definition at line 397 of file FFTJetProducer.h.

Referenced by determinePileup().

◆ minLevel

unsigned FFTJetProducer::minLevel
private

Definition at line 370 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

◆ minStableScale

const double FFTJetProducer::minStableScale
private

Definition at line 279 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

◆ myConfiguration

const edm::ParameterSet FFTJetProducer::myConfiguration
private

Definition at line 237 of file FFTJetProducer.h.

Referenced by beginJob().

◆ nClustersRequested

const unsigned FFTJetProducer::nClustersRequested
private

Definition at line 290 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

◆ nJetsRequiredToConverge

const unsigned FFTJetProducer::nJetsRequiredToConverge
private

Definition at line 254 of file FFTJetProducer.h.

◆ nodes

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

Definition at line 355 of file FFTJetProducer.h.

Referenced by selectPreclusters().

◆ noiseLevel

const double FFTJetProducer::noiseLevel
private

Definition at line 287 of file FFTJetProducer.h.

Referenced by iterateJetReconstruction(), and produce().

◆ occupancy

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

Definition at line 364 of file FFTJetProducer.h.

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

◆ peakSelector

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

Definition at line 328 of file FFTJetProducer.h.

Referenced by beginJob(), and produce().

◆ pileup

std::vector<fftjetcms::VectorLike> FFTJetProducer::pileup
private

Definition at line 386 of file FFTJetProducer.h.

Referenced by determinePileup(), produce(), and writeJets().

◆ pileupDensityCalc

std::unique_ptr<fftjetcms::AbsPileupCalculator> FFTJetProducer::pileupDensityCalc
private

Definition at line 394 of file FFTJetProducer.h.

Referenced by beginJob(), and determinePileupDensityFromConfig().

◆ pileupEnergyFlow

std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> > FFTJetProducer::pileupEnergyFlow
private

Definition at line 391 of file FFTJetProducer.h.

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

◆ pileupLabel

const edm::InputTag FFTJetProducer::pileupLabel
private

Definition at line 273 of file FFTJetProducer.h.

Referenced by FFTJetProducer().

◆ pileupTableCategory

std::string FFTJetProducer::pileupTableCategory
private

Definition at line 318 of file FFTJetProducer.h.

Referenced by determinePileupDensityFromDB().

◆ pileupTableName

std::string FFTJetProducer::pileupTableName
private

Definition at line 317 of file FFTJetProducer.h.

Referenced by determinePileupDensityFromDB().

◆ pileupTableRecord

std::string FFTJetProducer::pileupTableRecord
private

Definition at line 316 of file FFTJetProducer.h.

Referenced by determinePileupDensityFromDB().

◆ preclusters

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

◆ recoAlg

std::unique_ptr<RecoAlg> FFTJetProducer::recoAlg
private

◆ recoJets

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

◆ recombinationAlgorithm

const std::string FFTJetProducer::recombinationAlgorithm
private

Definition at line 296 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

◆ recombinationDataCutoff

const double FFTJetProducer::recombinationDataCutoff
private

Definition at line 299 of file FFTJetProducer.h.

Referenced by buildGridAlg(), and writeJets().

◆ recoScaleCalcJet

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

Definition at line 346 of file FFTJetProducer.h.

Referenced by beginJob(), determinePileup(), and iterateJetReconstruction().

◆ recoScaleCalcPeak

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

Definition at line 337 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

◆ recoScaleRatioCalcJet

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

Definition at line 347 of file FFTJetProducer.h.

Referenced by beginJob(), determinePileup(), and iterateJetReconstruction().

◆ recoScaleRatioCalcPeak

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

Definition at line 340 of file FFTJetProducer.h.

Referenced by beginJob(), and prepareRecombinationScales().

◆ resolution

Resolution FFTJetProducer::resolution
private

Definition at line 312 of file FFTJetProducer.h.

Referenced by genJetPreclusters(), produce(), selectPreclusters(), and selectTreeNodes().

◆ resumConstituents

const bool FFTJetProducer::resumConstituents
private

Definition at line 263 of file FFTJetProducer.h.

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

◆ reuseExistingGrid

const bool FFTJetProducer::reuseExistingGrid
private

Definition at line 248 of file FFTJetProducer.h.

Referenced by beginJob(), and produce().

◆ sparseTree

SparseTree FFTJetProducer::sparseTree
private

Definition at line 325 of file FFTJetProducer.h.

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

◆ stabilityAlpha

const double FFTJetProducer::stabilityAlpha
private

Definition at line 283 of file FFTJetProducer.h.

Referenced by selectTreeNodes().

◆ subtractPileup

const bool FFTJetProducer::subtractPileup
private

Definition at line 268 of file FFTJetProducer.h.

Referenced by writeJets().

◆ subtractPileupAs4Vec

const bool FFTJetProducer::subtractPileupAs4Vec
private

Definition at line 269 of file FFTJetProducer.h.

Referenced by writeJets().

◆ thresholds

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

Definition at line 367 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

◆ topology_token_

edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> FFTJetProducer::topology_token_
private

Definition at line 408 of file FFTJetProducer.h.

Referenced by FFTJetProducer(), and writeJets().

◆ treeLabel

const edm::InputTag FFTJetProducer::treeLabel
private

Definition at line 240 of file FFTJetProducer.h.

Referenced by FFTJetProducer().

◆ unclustered

fftjetcms::VectorLike FFTJetProducer::unclustered
private

Definition at line 373 of file FFTJetProducer.h.

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

◆ unlikelyBgWeight

const double FFTJetProducer::unlikelyBgWeight
private

Definition at line 298 of file FFTJetProducer.h.

Referenced by beginJob(), and buildGridAlg().

◆ unused

double FFTJetProducer::unused
private

Definition at line 374 of file FFTJetProducer.h.

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

◆ usedLevel

unsigned FFTJetProducer::usedLevel
private

Definition at line 370 of file FFTJetProducer.h.

Referenced by saveResults(), and selectTreeNodes().

◆ useGriddedAlgorithm

const bool FFTJetProducer::useGriddedAlgorithm
private

Definition at line 244 of file FFTJetProducer.h.

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