CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
FFTJetPileupEstimator Class Reference

#include <RecoJets/FFTJetProducers/plugins/FFTJetPileupEstimator.cc>

Inheritance diagram for FFTJetPileupEstimator:
edm::stream::EDProducer<>

Public Member Functions

 FFTJetPileupEstimator (const edm::ParameterSet &)
 
 FFTJetPileupEstimator ()=delete
 
 FFTJetPileupEstimator (const FFTJetPileupEstimator &)=delete
 
FFTJetPileupEstimatoroperator= (const FFTJetPileupEstimator &)=delete
 
 ~FFTJetPileupEstimator () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Protected Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Member Functions

std::unique_ptr< reco::FFTJetPileupSummarycalibrateFromConfig (double uncalibrated) const
 
std::unique_ptr< reco::FFTJetPileupSummarycalibrateFromDB (double uncalibrated, const edm::EventSetup &iSetup) const
 
template<class Ptr >
void checkConfig (const Ptr &ptr, const char *message)
 

Private Attributes

std::unique_ptr< fftjet::Functor1< double, double > > calibrationCurve
 
std::string calibrationCurveName
 
std::string calibTableCategory
 
std::string calibTableRecord
 
double cdfvalue
 
FFTJetLookupTableSequenceLoader esLoader
 
unsigned filterNumber
 
edm::InputTag inputLabel
 
edm::EDGetTokenT< reco::DiscretizedEnergyFlowinputToken
 
bool loadCalibFromDB
 
std::string outputLabel
 
double ptToDensityFactor
 
std::unique_ptr< fftjet::Functor1< double, double > > uncertaintyCurve
 
std::string uncertaintyCurveName
 
std::vector< double > uncertaintyZones
 
std::string uncertaintyZonesName
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: applies calibration curve and estimates the actual pileup

Implementation: [Notes on implementation]

Definition at line 46 of file FFTJetPileupEstimator.cc.

Constructor & Destructor Documentation

◆ FFTJetPileupEstimator() [1/3]

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

Definition at line 106 of file FFTJetPileupEstimator.cc.

References DefaultFFTJetRcdMapper< DataType >::acquireToken(), calibrationCurve, calibTableRecord, checkConfig(), esLoader, fftjetcms::fftjet_Function_parser(), edm::ParameterSet::getParameter(), inputLabel, inputToken, outputLabel, and uncertaintyCurve.

109  init_param(double, cdfvalue),
110  init_param(double, ptToDensityFactor),
111  init_param(unsigned, filterNumber),
112  init_param(std::vector<double>, uncertaintyZones),
118  init_param(bool, loadCalibFromDB) {
120  checkConfig(calibrationCurve, "bad calibration curve definition");
121 
123  checkConfig(uncertaintyCurve, "bad uncertainty curve definition");
124 
125  inputToken = consumes<reco::DiscretizedEnergyFlow>(inputLabel);
126 
127  produces<reco::FFTJetPileupSummary>(outputLabel);
128 
129  esLoader.acquireToken(calibTableRecord, consumesCollector());
130 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
FFTJetLookupTableSequenceLoader esLoader
void acquireToken(const std::string &record, edm::ConsumesCollector iC)
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > inputToken
std::unique_ptr< fftjet::Functor1< double, double > > calibrationCurve
std::vector< double > uncertaintyZones
std::unique_ptr< fftjet::Functor1< double, double > > fftjet_Function_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::Functor1< double, double > > uncertaintyCurve
#define init_param(type, varname)
void checkConfig(const Ptr &ptr, const char *message)

◆ FFTJetPileupEstimator() [2/3]

FFTJetPileupEstimator::FFTJetPileupEstimator ( )
delete

◆ FFTJetPileupEstimator() [3/3]

FFTJetPileupEstimator::FFTJetPileupEstimator ( const FFTJetPileupEstimator )
delete

◆ ~FFTJetPileupEstimator()

FFTJetPileupEstimator::~FFTJetPileupEstimator ( )
override

Definition at line 132 of file FFTJetPileupEstimator.cc.

132 {}

Member Function Documentation

◆ calibrateFromConfig()

std::unique_ptr< reco::FFTJetPileupSummary > FFTJetPileupEstimator::calibrateFromConfig ( double  uncalibrated) const
private

Definition at line 166 of file FFTJetPileupEstimator.cc.

References mps_fire::i, ptToDensityFactor, mitigatedMETSequence_cff::U, and uncertaintyZones.

Referenced by produce().

166  {
167  const double pileupRho = ptToDensityFactor * (*calibrationCurve)(curve);
168  const double rhoUncert = ptToDensityFactor * (*uncertaintyCurve)(curve);
169 
170  // Determine the uncertainty zone of the estimate. The "curve"
171  // has to be above or equal to uncertaintyZones[i] but below
172  // uncertaintyZones[i + 1] (the second condition is also satisfied
173  // by i == uncertaintyZones.size() - 1). Of course, it is assumed
174  // that the vector of zones is configured appropriately -- the zone
175  // boundaries must be presented in the increasing order.
176  int uncertaintyCode = -1;
177  if (!uncertaintyZones.empty()) {
178  const unsigned nZones = uncertaintyZones.size();
179  for (unsigned i = 0; i < nZones; ++i)
180  if (curve >= uncertaintyZones[i]) {
181  if (i == nZones - 1U) {
182  uncertaintyCode = i;
183  break;
184  } else if (curve < uncertaintyZones[i + 1]) {
185  uncertaintyCode = i;
186  break;
187  }
188  }
189  }
190 
191  return std::make_unique<reco::FFTJetPileupSummary>(curve, pileupRho, rhoUncert, uncertaintyCode);
192 }
std::vector< double > uncertaintyZones

◆ calibrateFromDB()

std::unique_ptr< reco::FFTJetPileupSummary > FFTJetPileupEstimator::calibrateFromDB ( double  uncalibrated,
const edm::EventSetup iSetup 
) const
private

Definition at line 194 of file FFTJetPileupEstimator.cc.

References calibrationCurveName, calibTableCategory, calibTableRecord, esLoader, h, DefaultFFTJetRcdMapper< DataType >::load(), ptToDensityFactor, mitigatedMETSequence_cff::U, uncertaintyCurveName, and uncertaintyZonesName.

Referenced by produce().

195  {
197  std::shared_ptr<npstat::StorableMultivariateFunctor> uz = (*h)[calibTableCategory][uncertaintyZonesName];
198  std::shared_ptr<npstat::StorableMultivariateFunctor> cc = (*h)[calibTableCategory][calibrationCurveName];
199  std::shared_ptr<npstat::StorableMultivariateFunctor> uc = (*h)[calibTableCategory][uncertaintyCurveName];
200 
201  const double pileupRho = ptToDensityFactor * (*cc)(&curve, 1U);
202  const double rhoUncert = ptToDensityFactor * (*uc)(&curve, 1U);
203  const int uncertaintyCode = round((*uz)(&curve, 1U));
204 
205  return std::make_unique<reco::FFTJetPileupSummary>(curve, pileupRho, rhoUncert, uncertaintyCode);
206 }
edm::ESHandle< DataType > load(const std::string &record, const edm::EventSetup &iSetup) const
FFTJetLookupTableSequenceLoader esLoader
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

◆ checkConfig()

template<class Ptr >
void FFTJetPileupEstimator::checkConfig ( const Ptr &  ptr,
const char *  message 
)
inlineprivate

Definition at line 64 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator().

64  {
65  if (ptr.get() == nullptr)
66  throw cms::Exception("FFTJetBadConfig") << message << std::endl;
67  }

◆ operator=()

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

◆ produce()

void FFTJetPileupEstimator::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprotected

Definition at line 139 of file FFTJetPileupEstimator.cc.

References calibrateFromConfig(), calibrateFromDB(), cdfvalue, Exception, filterNumber, h, iEvent, input, inputToken, loadCalibFromDB, eostools::move(), fftjetcommon_cfi::nScales, outputLabel, and edmLumisInFiles::summary.

139  {
141  iEvent.getByToken(inputToken, input);
142 
144  const unsigned nScales = h.nEtaBins();
145  const unsigned nCdfvalues = h.nPhiBins();
146 
147  const unsigned fixedCdfvalueBin = static_cast<unsigned>(std::floor(cdfvalue * nCdfvalues));
148  if (fixedCdfvalueBin >= nCdfvalues) {
149  throw cms::Exception("FFTJetBadConfig") << "Bad cdf value" << std::endl;
150  }
151  if (filterNumber >= nScales) {
152  throw cms::Exception("FFTJetBadConfig") << "Bad filter number" << std::endl;
153  }
154 
155  // Simple fixed-point pile-up estimate
156  const double curve = h.data()[filterNumber * nCdfvalues + fixedCdfvalueBin];
157 
158  std::unique_ptr<reco::FFTJetPileupSummary> summary;
159  if (loadCalibFromDB)
160  summary = calibrateFromDB(curve, iSetup);
161  else
162  summary = calibrateFromConfig(curve);
164 }
std::unique_ptr< reco::FFTJetPileupSummary > calibrateFromConfig(double uncalibrated) const
static std::string const input
Definition: EdmProvDump.cc:50
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > inputToken
int iEvent
Definition: GenABIO.cc:224
std::unique_ptr< reco::FFTJetPileupSummary > calibrateFromDB(double uncalibrated, const edm::EventSetup &iSetup) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ calibrationCurve

std::unique_ptr<fftjet::Functor1<double, double> > FFTJetPileupEstimator::calibrationCurve
private

Definition at line 77 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator().

◆ calibrationCurveName

std::string FFTJetPileupEstimator::calibrationCurveName
private

Definition at line 96 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB().

◆ calibTableCategory

std::string FFTJetPileupEstimator::calibTableCategory
private

Definition at line 94 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB().

◆ calibTableRecord

std::string FFTJetPileupEstimator::calibTableRecord
private

Definition at line 93 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB(), and FFTJetPileupEstimator().

◆ cdfvalue

double FFTJetPileupEstimator::cdfvalue
private

Definition at line 73 of file FFTJetPileupEstimator.cc.

Referenced by produce().

◆ esLoader

FFTJetLookupTableSequenceLoader FFTJetPileupEstimator::esLoader
private

Definition at line 100 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB(), and FFTJetPileupEstimator().

◆ filterNumber

unsigned FFTJetPileupEstimator::filterNumber
private

Definition at line 75 of file FFTJetPileupEstimator.cc.

Referenced by produce().

◆ inputLabel

edm::InputTag FFTJetPileupEstimator::inputLabel
private

Definition at line 69 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator().

◆ inputToken

edm::EDGetTokenT<reco::DiscretizedEnergyFlow> FFTJetPileupEstimator::inputToken
private

Definition at line 70 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator(), and produce().

◆ loadCalibFromDB

bool FFTJetPileupEstimator::loadCalibFromDB
private

Definition at line 98 of file FFTJetPileupEstimator.cc.

Referenced by produce().

◆ outputLabel

std::string FFTJetPileupEstimator::outputLabel
private

Definition at line 72 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator(), and produce().

◆ ptToDensityFactor

double FFTJetPileupEstimator::ptToDensityFactor
private

Definition at line 74 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromConfig(), and calibrateFromDB().

◆ uncertaintyCurve

std::unique_ptr<fftjet::Functor1<double, double> > FFTJetPileupEstimator::uncertaintyCurve
private

Definition at line 78 of file FFTJetPileupEstimator.cc.

Referenced by FFTJetPileupEstimator().

◆ uncertaintyCurveName

std::string FFTJetPileupEstimator::uncertaintyCurveName
private

Definition at line 97 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB().

◆ uncertaintyZones

std::vector<double> FFTJetPileupEstimator::uncertaintyZones
private

Definition at line 76 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromConfig().

◆ uncertaintyZonesName

std::string FFTJetPileupEstimator::uncertaintyZonesName
private

Definition at line 95 of file FFTJetPileupEstimator.cc.

Referenced by calibrateFromDB().