CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
SmearedJetProducerT< T, Textractor > Class Template Reference

#include <SmearedJetProducerT.h>

Inheritance diagram for SmearedJetProducerT< T, Textractor >:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 SmearedJetProducerT (const edm::ParameterSet &cfg)
 
 ~SmearedJetProducerT ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Types

typedef std::vector< TJetCollection
 

Private Member Functions

virtual void produce (edm::Event &evt, const edm::EventSetup &es)
 

Private Attributes

SmearedJetProducer_namespace::GenJetMatcherT
< T
genJetMatcher_
 
TFile * inputFile_
 
double jetCorrEtaMax_
 
Textractor jetCorrExtractor_
 
edm::InputTag jetCorrLabel_
 
edm::EDGetTokenT
< reco::JetCorrector
jetCorrToken_
 
SmearedJetProducer_namespace::JetResolutionExtractorT
< T
jetResolutionExtractor_
 
TH2 * lut_
 
std::string moduleLabel_
 
TRandom3 rnd_
 
double shiftBy_
 
double sigmaMaxGenJetMatch_
 
double skipCorrJetPtThreshold_
 
StringCutObjectSelector< T > * skipJetSelection_
 
double skipRawJetPtThreshold_
 
double smearBy_
 
edm::InputTag src_
 
edm::EDGetTokenT< JetCollectionsrcToken_
 
int verbosity_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

template<typename T, typename Textractor>
class SmearedJetProducerT< T, Textractor >

Produce collection of "smeared" jets. The aim of this correction is to account for the difference in jet energy resolution between Monte Carlo simulation and Data. The jet energy resolutions have been measured in QCD di-jet and gamma + jets events selected in 2010 data, as documented in the PAS JME-10-014.

Author
Christian Veelken, LLR

Definition at line 146 of file SmearedJetProducerT.h.

Member Typedef Documentation

template<typename T , typename Textractor >
typedef std::vector<T> SmearedJetProducerT< T, Textractor >::JetCollection
private

Definition at line 148 of file SmearedJetProducerT.h.

Constructor & Destructor Documentation

template<typename T , typename Textractor >
SmearedJetProducerT< T, Textractor >::SmearedJetProducerT ( const edm::ParameterSet cfg)
inlineexplicit

Definition at line 152 of file SmearedJetProducerT.h.

References edm::hlt::Exception, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), SmearedJetProducerT< T, Textractor >::inputFile_, SmearedJetProducerT< T, Textractor >::jetCorrEtaMax_, SmearedJetProducerT< T, Textractor >::jetCorrLabel_, SmearedJetProducerT< T, Textractor >::jetCorrToken_, SmearedJetProducerT< T, Textractor >::lut_, SmearedJetProducerT< T, Textractor >::shiftBy_, SmearedJetProducerT< T, Textractor >::sigmaMaxGenJetMatch_, SmearedJetProducerT< T, Textractor >::skipCorrJetPtThreshold_, SmearedJetProducerT< T, Textractor >::skipJetSelection_, SmearedJetProducerT< T, Textractor >::skipRawJetPtThreshold_, SmearedJetProducerT< T, Textractor >::smearBy_, SmearedJetProducerT< T, Textractor >::src_, SmearedJetProducerT< T, Textractor >::srcToken_, AlCaHLTBitMon_QueryRunRegistry::string, edm::FileInPath::Unknown, and SmearedJetProducerT< T, Textractor >::verbosity_.

153  : moduleLabel_(cfg.getParameter<std::string>("@module_label")),
156  jetCorrLabel_(""),
158  {
159  //std::cout << "<SmearedJetProducer::SmearedJetProducer>:" << std::endl;
160  //std::cout << " moduleLabel = " << moduleLabel_ << std::endl;
161 
162  src_ = cfg.getParameter<edm::InputTag>("src");
163  srcToken_ = consumes<JetCollection>(src_);
164 
165  edm::FileInPath inputFileName = cfg.getParameter<edm::FileInPath>("inputFileName");
166  std::string lutName = cfg.getParameter<std::string>("lutName");
167  if (inputFileName.location() == edm::FileInPath::Unknown)
168  throw cms::Exception("JetMETsmearInputProducer")
169  << " Failed to find File = " << inputFileName << " !!\n";
170 
171  inputFile_ = new TFile(inputFileName.fullPath().data());
172  lut_ = dynamic_cast<TH2*>(inputFile_->Get(lutName.data()));
173  if ( !lut_ )
174  throw cms::Exception("SmearedJetProducer")
175  << " Failed to load LUT = " << lutName.data() << " from file = " << inputFileName.fullPath().data() << " !!\n";
176 
177  if ( cfg.exists("jetCorrLabel") ) {
178  jetCorrLabel_ = cfg.getParameter<edm::InputTag>("jetCorrLabel");
179  jetCorrToken_ = consumes<reco::JetCorrector>(jetCorrLabel_);
180  }
181 
182  jetCorrEtaMax_ = ( cfg.exists("jetCorrEtaMax") ) ?
183  cfg.getParameter<double>("jetCorrEtaMax") : 9.9;
184 
185  sigmaMaxGenJetMatch_ = cfg.getParameter<double>("sigmaMaxGenJetMatch");
186 
187  smearBy_ = ( cfg.exists("smearBy") ) ? cfg.getParameter<double>("smearBy") : 1.0;
188  //std::cout << "smearBy = " << smearBy_ << std::endl;
189 
190  shiftBy_ = ( cfg.exists("shiftBy") ) ? cfg.getParameter<double>("shiftBy") : 0.;
191  //std::cout << "shiftBy = " << shiftBy_ << std::endl;
192 
193  if ( cfg.exists("skipJetSelection") ) {
194  std::string skipJetSelection_string = cfg.getParameter<std::string>("skipJetSelection");
195  skipJetSelection_ = new StringCutObjectSelector<T>(skipJetSelection_string);
196  }
197 
198  skipRawJetPtThreshold_ = ( cfg.exists("skipRawJetPtThreshold") ) ?
199  cfg.getParameter<double>("skipRawJetPtThreshold") : 1.e-2;
200  skipCorrJetPtThreshold_ = ( cfg.exists("skipCorrJetPtThreshold") ) ?
201  cfg.getParameter<double>("skipCorrJetPtThreshold") : 1.e-2;
202 
203  verbosity_ = ( cfg.exists("verbosity") ) ?
204  cfg.getParameter<int>("verbosity") : 0;
205 
206  produces<JetCollection>();
207  }
T getParameter(std::string const &) const
edm::EDGetTokenT< JetCollection > srcToken_
StringCutObjectSelector< T > * skipJetSelection_
bool exists(std::string const &parameterName) const
checks if a parameter exists
SmearedJetProducer_namespace::GenJetMatcherT< T > genJetMatcher_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
edm::EDGetTokenT< reco::JetCorrector > jetCorrToken_
SmearedJetProducer_namespace::JetResolutionExtractorT< T > jetResolutionExtractor_
template<typename T , typename Textractor >
SmearedJetProducerT< T, Textractor >::~SmearedJetProducerT ( )
inline

Member Function Documentation

template<typename T , typename Textractor >
virtual void SmearedJetProducerT< T, Textractor >::produce ( edm::Event evt,
const edm::EventSetup es 
)
inlineprivatevirtual

Implements edm::stream::EDProducerBase.

Definition at line 217 of file SmearedJetProducerT.h.

References funct::abs(), gather_cfg::cout, reco::LeafCandidate::energy(), reco::LeafCandidate::eta(), SmearedJetProducerT< T, Textractor >::genJetMatcher_, edm::Event::getByToken(), metsig::jet, SmearedJetProducerT< T, Textractor >::jetCorrEtaMax_, SmearedJetProducerT< T, Textractor >::jetCorrExtractor_, SmearedJetProducerT< T, Textractor >::jetCorrLabel_, SmearedJetProducerT< T, Textractor >::jetCorrToken_, SmearedJetProducerT< T, Textractor >::jetResolutionExtractor_, fwrapper::jets, edm::InputTag::label(), SmearedJetProducerT< T, Textractor >::lut_, bookConverter::max, SmearedJetProducerT< T, Textractor >::moduleLabel_, reco::LeafCandidate::phi(), edm::Handle< T >::product(), reco::LeafCandidate::pt(), edm::Event::put(), SmearedJetProducerT< T, Textractor >::rnd_, SmearedJetProducerT< T, Textractor >::shiftBy_, SmearedJetProducerT< T, Textractor >::sigmaMaxGenJetMatch_, SmearedJetProducerT< T, Textractor >::skipCorrJetPtThreshold_, SmearedJetProducerT< T, Textractor >::skipJetSelection_, SmearedJetProducerT< T, Textractor >::skipRawJetPtThreshold_, SmearedJetProducerT< T, Textractor >::smearBy_, mathSSE::sqrt(), SmearedJetProducerT< T, Textractor >::src_, SmearedJetProducerT< T, Textractor >::srcToken_, relativeConstraints::value, SmearedJetProducerT< T, Textractor >::verbosity_, x, and detailsBasic3DVector::y.

218  {
219  if ( verbosity_ ) {
220  std::cout << "<SmearedJetProducerT::produce>:" << std::endl;
221  std::cout << " moduleLabel = " << moduleLabel_ << std::endl;
222  std::cout << " src = " << src_.label() << std::endl;
223  }
224 
225  std::auto_ptr<JetCollection> smearedJets(new JetCollection);
226 
228  evt.getByToken(srcToken_, jets);
229 
230  int numJets = jets->size();
231  for ( int jetIndex = 0; jetIndex < numJets; ++jetIndex ) {
232  const T& jet = jets->at(jetIndex);
233 
234  static const SmearedJetProducer_namespace::RawJetExtractorT<T> rawJetExtractor;
235  reco::Candidate::LorentzVector rawJetP4 = rawJetExtractor(jet);
236  if ( verbosity_ ) {
237  std::cout << "rawJet: Pt = " << rawJetP4.pt() << ", eta = " << rawJetP4.eta() << ", phi = " << rawJetP4.phi() << std::endl;
238  }
239 
240  reco::Candidate::LorentzVector corrJetP4 = jet.p4();
241  if ( !jetCorrLabel_.label().empty() ) {
243  evt.getByToken(jetCorrToken_, jetCorr);
244  corrJetP4 =
247  jetCorrExtractor_(jet, jetCorr.product(), jetCorrEtaMax_, &rawJetP4);
248  }
249  if ( verbosity_ ) {
250  std::cout << "corrJet: Pt = " << corrJetP4.pt() << ", eta = " << corrJetP4.eta() << ", phi = " << corrJetP4.phi() << std::endl;
251  }
252 
253  double smearFactor = 1.;
254  double x = std::abs(corrJetP4.eta());
255  double y = corrJetP4.pt();
256  if ( x > lut_->GetXaxis()->GetXmin() && x < lut_->GetXaxis()->GetXmax() &&
257  y > lut_->GetYaxis()->GetXmin() && y < lut_->GetYaxis()->GetXmax() ) {
258  int binIndex = lut_->FindBin(x, y);
259 
260  if ( smearBy_ > 0. ) smearFactor += smearBy_*(lut_->GetBinContent(binIndex) - 1.);
261  double smearFactorErr = lut_->GetBinError(binIndex);
262  if ( verbosity_ ) std::cout << "smearFactor = " << smearFactor << " +/- " << smearFactorErr << std::endl;
263 
264  if ( shiftBy_ != 0. ) {
265  smearFactor += (shiftBy_*smearFactorErr);
266  if ( verbosity_ ) std::cout << "smearFactor(shifted) = " << smearFactor << std::endl;
267  }
268  }
269 
270  double smearedJetEn = jet.energy();
271  double sigmaEn = jetResolutionExtractor_(jet)*sqrt(smearFactor*smearFactor - 1.);
272  const reco::GenJet* genJet = genJetMatcher_(jet, &evt);
273  bool isGenMatched = false;
274  if ( genJet ) {
275  if ( verbosity_ ) {
276  std::cout << "genJet: Pt = " << genJet->pt() << ", eta = " << genJet->eta() << ", phi = " << genJet->phi() << std::endl;
277  }
278  double dEn = corrJetP4.E() - genJet->energy();
279  if ( dEn < (sigmaMaxGenJetMatch_*sigmaEn) ) {
280 //--- case 1: reconstructed jet matched to generator level jet,
281 // smear difference between reconstructed and "true" jet energy
282 
283  if ( verbosity_ ) {
284  std::cout << " successfully matched to genJet" << std::endl;
285  std::cout << "corrJetEn = " << corrJetP4.E() << ", genJetEn = " << genJet->energy() << " --> dEn = " << dEn << std::endl;
286  }
287 
288  smearedJetEn = jet.energy()*(1. + (smearFactor - 1.)*dEn/std::max( rawJetP4.E(), corrJetP4.E()));
289  isGenMatched = true;
290  }
291  }
292  if ( !isGenMatched ) {
293 //--- case 2: reconstructed jet **not** matched to generator level jet,
294 // smear jet energy using MC resolution functions implemented in PFMEt significance algorithm (CMS AN-10/400)
295 
296  if ( verbosity_ ) {
297  std::cout << " not matched to genJet" << std::endl;
298  std::cout << "corrJetEn = " << corrJetP4.E() << ", sigmaEn = " << sigmaEn << std::endl;
299  }
300 
301  if ( smearFactor > 1. ) {
302  // CV: MC resolution already accounted for in reconstructed jet,
303  // add additional Gaussian smearing of width = sqrt(smearFactor^2 - 1)
304  // to account for Data/MC **difference** in jet resolutions.
305  // Take maximum(rawJetEn, corrJetEn) to avoid pathological cases
306  // (e.g. corrJetEn << rawJetEn, due to L1Fastjet corrections)
307 
308  smearedJetEn = jet.energy()*(1. + rnd_.Gaus(0., sigmaEn)/std::max( rawJetP4.E(), corrJetP4.E()) );
309  }
310  }
311 
312  // CV: keep minimum jet energy, in order not to loose direction information
313  const double minJetEn = 1.e-2;
314  if ( smearedJetEn < minJetEn ) smearedJetEn = minJetEn;
315 
316  // CV: skip smearing in case either "raw" or "corrected" jet energy is very low
317  // or jet passes selection configurable via python
318  // (allows for protection against "pathological cases",
319  // cf. PhysicsTools/PatUtils/python/tools/metUncertaintyTools.py)
320  reco::Candidate::LorentzVector smearedJetP4 = jet.p4();
321  if ( !((skipJetSelection_ && (*skipJetSelection_)(jet)) ||
322  rawJetP4.pt() < skipRawJetPtThreshold_ ||
323  corrJetP4.pt() < skipCorrJetPtThreshold_ ) ) {
324  if ( verbosity_ ) {
325  std::cout << " smearing jetP4 by factor = " << (smearedJetEn/jet.energy()) << " --> smearedJetEn = " << smearedJetEn << std::endl;
326  }
327  smearedJetP4 *= (smearedJetEn/jet.energy());
328  }
329 
330  if ( verbosity_ ) {
331  std::cout << "smearedJet: Pt = " << smearedJetP4.pt() << ", eta = " << smearedJetP4.eta() << ", phi = " << smearedJetP4.phi() << std::endl;
332  std::cout << " dPt = " << (smearedJetP4.pt() - jet.pt())
333  << " (Px = " << (smearedJetP4.px() - jet.px()) << ", Py = " << (smearedJetP4.py() - jet.py()) << ")" << std::endl;
334  }
335 
336  T smearedJet = (jet);
337  smearedJet.setP4(smearedJetP4);
338 
339  smearedJets->push_back(smearedJet);
340  }
341 
342 //--- add collection of "smeared" jets to the event
343  evt.put(smearedJets);
344  }
edm::EDGetTokenT< JetCollection > srcToken_
StringCutObjectSelector< T > * skipJetSelection_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
virtual double eta() const
momentum pseudorapidity
virtual double pt() const
transverse momentum
SmearedJetProducer_namespace::GenJetMatcherT< T > genJetMatcher_
virtual double energy() const
energy
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
T sqrt(T t)
Definition: SSEVec.h:48
vector< PseudoJet > jets
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Jets made from MC generator particles.
Definition: GenJet.h:24
edm::EDGetTokenT< reco::JetCorrector > jetCorrToken_
T const * product() const
Definition: Handle.h:81
SmearedJetProducer_namespace::JetResolutionExtractorT< T > jetResolutionExtractor_
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
std::string const & label() const
Definition: InputTag.h:42
tuple cout
Definition: gather_cfg.py:121
Definition: DDAxes.h:10
long double T
std::vector< T > JetCollection
virtual double phi() const
momentum azimuthal angle

Member Data Documentation

template<typename T , typename Textractor >
SmearedJetProducer_namespace::GenJetMatcherT<T> SmearedJetProducerT< T, Textractor >::genJetMatcher_
private
template<typename T , typename Textractor >
TFile* SmearedJetProducerT< T, Textractor >::inputFile_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::jetCorrEtaMax_
private
template<typename T , typename Textractor >
Textractor SmearedJetProducerT< T, Textractor >::jetCorrExtractor_
private
template<typename T , typename Textractor >
edm::InputTag SmearedJetProducerT< T, Textractor >::jetCorrLabel_
private
template<typename T , typename Textractor >
edm::EDGetTokenT<reco::JetCorrector> SmearedJetProducerT< T, Textractor >::jetCorrToken_
private
template<typename T , typename Textractor >
SmearedJetProducer_namespace::JetResolutionExtractorT<T> SmearedJetProducerT< T, Textractor >::jetResolutionExtractor_
private
template<typename T , typename Textractor >
TH2* SmearedJetProducerT< T, Textractor >::lut_
private
template<typename T , typename Textractor >
std::string SmearedJetProducerT< T, Textractor >::moduleLabel_
private
template<typename T , typename Textractor >
TRandom3 SmearedJetProducerT< T, Textractor >::rnd_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::shiftBy_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::sigmaMaxGenJetMatch_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::skipCorrJetPtThreshold_
private
template<typename T , typename Textractor >
StringCutObjectSelector<T>* SmearedJetProducerT< T, Textractor >::skipJetSelection_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::skipRawJetPtThreshold_
private
template<typename T , typename Textractor >
double SmearedJetProducerT< T, Textractor >::smearBy_
private
template<typename T , typename Textractor >
edm::InputTag SmearedJetProducerT< T, Textractor >::src_
private
template<typename T , typename Textractor >
edm::EDGetTokenT<JetCollection> SmearedJetProducerT< T, Textractor >::srcToken_
private
template<typename T , typename Textractor >
int SmearedJetProducerT< T, Textractor >::verbosity_
private