CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
pat::PATJetProducer Class Reference

Produces pat::Jet's. More...

Inheritance diagram for pat::PATJetProducer:
edm::stream::EDProducer<>

Public Member Functions

 PATJetProducer (const edm::ParameterSet &iConfig)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 ~PATJetProducer () 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
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

bool addAssociatedTracks_
 
bool addBTagInfo_
 
bool addDiscriminators_
 
bool addEfficiencies_
 
bool addGenJetMatch_
 
bool addGenPartonMatch_
 
bool addJetCharge_
 
bool addJetCorrFactors_
 
bool addJetFlavourInfo_
 
bool addJetID_
 
bool addPartonJetMatch_
 
bool addResolutions_
 
bool addTagInfos_
 
GreaterByPt< CaloTowercaloPTComparator_
 
std::vector< std::string > discriminatorLabels_
 
std::vector< edm::InputTagdiscriminatorTags_
 
std::vector< edm::EDGetTokenT< reco::JetFloatAssociation::Container > > discriminatorTokens_
 
pat::helper::EfficiencyLoader efficiencyLoader_
 
bool embedCaloTowers_
 
bool embedGenJetMatch_
 
bool embedGenPartonMatch_
 
bool embedPFCandidates_
 
edm::EDGetTokenT< edm::Association< reco::GenJetCollection > > genJetToken_
 
edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > genPartonToken_
 
bool getJetMCFlavour_
 
edm::EDGetTokenT< reco::JetFloatAssociation::ContainerjetChargeToken_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< JetCorrFactors > > > jetCorrFactorsTokens_
 
edm::EDGetTokenT< reco::JetFlavourInfoMatchingCollectionjetFlavourInfoToken_
 
edm::EDGetTokenT< reco::JetIDValueMapjetIDMapToken_
 
edm::EDGetTokenT< reco::JetFlavourMatchingCollectionjetPartonMapToken_
 
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken_
 
bool printWarning_
 
GreaterByPt< JetpTComparator_
 
pat::helper::KinResolutionsLoader resolutionLoader_
 
std::vector< std::string > tagInfoLabels_
 
std::vector< edm::InputTagtagInfoTags_
 
std::vector< edm::EDGetTokenT< edm::View< reco::BaseTagInfo > > > tagInfoTokens_
 
edm::EDGetTokenT< reco::JetTracksAssociation::ContainertrackAssociationToken_
 
bool useLegacyJetMCFlavour_
 
pat::PATUserDataHelper< pat::JetuserDataHelper_
 
bool useUserData_
 

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

Produces pat::Jet's.

The PATJetProducer produces analysis-level pat::Jet's starting from a collection of objects of JetType.

Author
Steven Lowette, Jeremy Andrea
Version
Id
PATJetProducer.h,v 1.26 2010/08/09 18:13:54 srappocc Exp

Definition at line 56 of file PATJetProducer.cc.

Constructor & Destructor Documentation

◆ PATJetProducer()

PATJetProducer::PATJetProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 121 of file PATJetProducer.cc.

References addAssociatedTracks_, addBTagInfo_, addDiscriminators_, addEfficiencies_, addGenJetMatch_, addGenPartonMatch_, addJetCharge_, addJetCorrFactors_, addJetFlavourInfo_, addJetID_, addPartonJetMatch_, addResolutions_, addTagInfos_, discriminatorLabels_, discriminatorTags_, discriminatorTokens_, efficiencyLoader_, embedCaloTowers_, embedGenJetMatch_, embedGenPartonMatch_, embedPFCandidates_, edm::ParameterSet::exists(), funct::false, genJetToken_, genPartonToken_, getJetMCFlavour_, edm::ParameterSet::getParameter(), jetChargeToken_, jetCorrFactorsTokens_, jetFlavourInfoToken_, jetIDMapToken_, jetPartonMapToken_, jetsToken_, label, resolutionLoader_, AlCaHLTBitMon_QueryRunRegistry::string, makeGlobalPositionRcd_cfg::tag, tagInfoLabels_, tagInfoTags_, tagInfoTokens_, trackAssociationToken_, useLegacyJetMCFlavour_, userDataHelper_, useUserData_, and edm::vector_transform().

122  : useUserData_(iConfig.exists("userData")), printWarning_(true) {
123  // initialize configurables
124  jetsToken_ = consumes<edm::View<reco::Jet>>(iConfig.getParameter<edm::InputTag>("jetSource"));
125  embedCaloTowers_ = false; // parameter is optional
126  if (iConfig.exists("embedCaloTowers")) {
127  embedCaloTowers_ = iConfig.getParameter<bool>("embedCaloTowers");
128  }
129  embedPFCandidates_ = iConfig.getParameter<bool>("embedPFCandidates");
130  getJetMCFlavour_ = iConfig.getParameter<bool>("getJetMCFlavour");
131  useLegacyJetMCFlavour_ = iConfig.getParameter<bool>("useLegacyJetMCFlavour");
132  addJetFlavourInfo_ = (useLegacyJetMCFlavour_ ? false : iConfig.getParameter<bool>("addJetFlavourInfo"));
135  consumes<reco::JetFlavourMatchingCollection>(iConfig.getParameter<edm::InputTag>("JetPartonMapSource"));
138  consumes<reco::JetFlavourInfoMatchingCollection>(iConfig.getParameter<edm::InputTag>("JetFlavourInfoSource"));
139  addGenPartonMatch_ = iConfig.getParameter<bool>("addGenPartonMatch");
140  embedGenPartonMatch_ = iConfig.getParameter<bool>("embedGenPartonMatch");
141  if (addGenPartonMatch_)
143  consumes<edm::Association<reco::GenParticleCollection>>(iConfig.getParameter<edm::InputTag>("genPartonMatch"));
144  addGenJetMatch_ = iConfig.getParameter<bool>("addGenJetMatch");
145  embedGenJetMatch_ = iConfig.getParameter<bool>("embedGenJetMatch");
146  if (addGenJetMatch_)
147  genJetToken_ =
148  consumes<edm::Association<reco::GenJetCollection>>(iConfig.getParameter<edm::InputTag>("genJetMatch"));
149  addPartonJetMatch_ = iConfig.getParameter<bool>("addPartonJetMatch");
150  // partonJetToken_ = mayConsume<reco::SomePartonJetType>(iConfig.getParameter<edm::InputTag>( "partonJetSource" ));
151  addJetCorrFactors_ = iConfig.getParameter<bool>("addJetCorrFactors");
152  if (addJetCorrFactors_) {
154  iConfig.getParameter<std::vector<edm::InputTag>>("jetCorrFactorsSource"),
155  [this](edm::InputTag const &tag) { return consumes<edm::ValueMap<JetCorrFactors>>(tag); });
156  }
157  addBTagInfo_ = iConfig.getParameter<bool>("addBTagInfo");
158  addDiscriminators_ = iConfig.getParameter<bool>("addDiscriminators");
159  discriminatorTags_ = iConfig.getParameter<std::vector<edm::InputTag>>("discriminatorSources");
161  return mayConsume<reco::JetFloatAssociation::Container>(tag);
162  });
163  addTagInfos_ = iConfig.getParameter<bool>("addTagInfos");
164  tagInfoTags_ = iConfig.getParameter<std::vector<edm::InputTag>>("tagInfoSources");
166  tagInfoTags_, [this](edm::InputTag const &tag) { return mayConsume<edm::View<reco::BaseTagInfo>>(tag); });
167  addAssociatedTracks_ = iConfig.getParameter<bool>("addAssociatedTracks");
170  consumes<reco::JetTracksAssociation::Container>(iConfig.getParameter<edm::InputTag>("trackAssociationSource"));
171  addJetCharge_ = iConfig.getParameter<bool>("addJetCharge");
172  if (addJetCharge_)
174  consumes<reco::JetFloatAssociation::Container>(iConfig.getParameter<edm::InputTag>("jetChargeSource"));
175  addJetID_ = iConfig.getParameter<bool>("addJetID");
176  if (addJetID_)
177  jetIDMapToken_ = consumes<reco::JetIDValueMap>(iConfig.getParameter<edm::InputTag>("jetIDMap"));
178  // Efficiency configurables
179  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
180  if (addEfficiencies_) {
182  pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
183  }
184  // Resolution configurables
185  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
186  if (addResolutions_) {
188  pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions"), consumesCollector());
189  }
190  if (discriminatorTags_.empty()) {
191  addDiscriminators_ = false;
192  } else {
193  for (std::vector<edm::InputTag>::const_iterator it = discriminatorTags_.begin(), ed = discriminatorTags_.end();
194  it != ed;
195  ++it) {
196  std::string label = it->label();
197  std::string::size_type pos = label.find("JetTags");
198  if ((pos != std::string::npos) && (pos != label.length() - 7)) {
199  label.erase(pos + 7); // trim a tail after "JetTags"
200  }
201  if (!it->instance().empty()) {
202  label = (label + std::string(":") + it->instance());
203  }
204  discriminatorLabels_.push_back(label);
205  }
206  }
207  if (tagInfoTags_.empty()) {
208  addTagInfos_ = false;
209  } else {
210  for (std::vector<edm::InputTag>::const_iterator it = tagInfoTags_.begin(), ed = tagInfoTags_.end(); it != ed;
211  ++it) {
212  std::string label = it->label();
213  std::string::size_type pos = label.find("TagInfos");
214  if ((pos != std::string::npos) && (pos != label.length() - 8)) {
215  label.erase(pos + 8); // trim a tail after "TagInfos"
216  }
217  tagInfoLabels_.push_back(label);
218  }
219  }
220  if (!addBTagInfo_) {
221  addDiscriminators_ = false;
222  addTagInfos_ = false;
223  }
224  // Check to see if the user wants to add user data
225  if (useUserData_) {
226  userDataHelper_ = PATUserDataHelper<Jet>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
227  }
228  // produces vector of jets
229  produces<std::vector<Jet>>();
230  produces<reco::GenJetCollection>("genJets");
231  produces<std::vector<CaloTower>>("caloTowers");
232  produces<reco::PFCandidateCollection>("pfCandidates");
233  produces<edm::OwnVector<reco::BaseTagInfo>>("tagInfos");
234 }
pat::helper::EfficiencyLoader efficiencyLoader_
Assists in assimilating all pat::UserData into pat objects.
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken_
std::vector< edm::EDGetTokenT< edm::View< reco::BaseTagInfo > > > tagInfoTokens_
edm::EDGetTokenT< reco::JetTracksAssociation::Container > trackAssociationToken_
std::vector< std::string > tagInfoLabels_
std::vector< edm::EDGetTokenT< edm::ValueMap< JetCorrFactors > > > jetCorrFactorsTokens_
std::vector< edm::InputTag > tagInfoTags_
pat::helper::KinResolutionsLoader resolutionLoader_
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::vector< std::string > discriminatorLabels_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
edm::EDGetTokenT< reco::JetFlavourInfoMatchingCollection > jetFlavourInfoToken_
uint16_t size_type
edm::EDGetTokenT< reco::JetFloatAssociation::Container > jetChargeToken_
char const * label
edm::EDGetTokenT< reco::JetIDValueMap > jetIDMapToken_
std::vector< edm::InputTag > discriminatorTags_
pat::PATUserDataHelper< pat::Jet > userDataHelper_
edm::EDGetTokenT< reco::JetFlavourMatchingCollection > jetPartonMapToken_
edm::EDGetTokenT< edm::Association< reco::GenJetCollection > > genJetToken_
std::vector< edm::EDGetTokenT< reco::JetFloatAssociation::Container > > discriminatorTokens_
edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > genPartonToken_

◆ ~PATJetProducer()

PATJetProducer::~PATJetProducer ( )
override

Definition at line 236 of file PATJetProducer.cc.

236 {}

Member Function Documentation

◆ fillDescriptions()

void PATJetProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 544 of file PATJetProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), pat::helper::KinResolutionsLoader::fillDescription(), pat::PATUserDataHelper< ObjectType >::fillDescription(), HLT_2022v12_cff::InputTag, edm::ParameterSetDescription::setAllowAnything(), and edm::ParameterSetDescription::setComment().

544  {
546  iDesc.setComment("PAT jet producer module");
547 
548  // input source
549  iDesc.add<edm::InputTag>("jetSource", edm::InputTag("no default"))->setComment("input collection");
550 
551  // embedding
552  iDesc.addOptional<bool>("embedCaloTowers", false)
553  ->setComment("embed external CaloTowers (not to be used on AOD input)");
554  iDesc.add<bool>("embedPFCandidates", true)->setComment("embed external PFCandidates");
555 
556  // MC matching configurables
557  iDesc.add<bool>("addGenPartonMatch", true)->setComment("add MC matching");
558  iDesc.add<bool>("embedGenPartonMatch", false)->setComment("embed MC matched MC information");
559  iDesc.add<edm::InputTag>("genPartonMatch", edm::InputTag())->setComment("input with MC match information");
560 
561  iDesc.add<bool>("addGenJetMatch", true)->setComment("add MC matching");
562  iDesc.add<bool>("embedGenJetMatch", false)->setComment("embed MC matched MC information");
563  iDesc.add<edm::InputTag>("genJetMatch", edm::InputTag())->setComment("input with MC match information");
564 
565  iDesc.add<bool>("addJetCharge", true);
566  iDesc.add<edm::InputTag>("jetChargeSource", edm::InputTag("patJetCharge"));
567 
568  // jet id
569  iDesc.add<bool>("addJetID", true)->setComment("Add jet ID information");
570  iDesc.add<edm::InputTag>("jetIDMap", edm::InputTag())->setComment("jet id map");
571 
572  iDesc.add<bool>("addPartonJetMatch", false);
573  iDesc.add<edm::InputTag>("partonJetSource", edm::InputTag("NOT IMPLEMENTED"));
574 
575  // track association
576  iDesc.add<bool>("addAssociatedTracks", true);
577  iDesc.add<edm::InputTag>("trackAssociationSource", edm::InputTag("ak4JTA"));
578 
579  // tag info
580  iDesc.add<bool>("addTagInfos", true);
581  std::vector<edm::InputTag> emptyVInputTags;
582  iDesc.add<std::vector<edm::InputTag>>("tagInfoSources", emptyVInputTags);
583 
584  // jet energy corrections
585  iDesc.add<bool>("addJetCorrFactors", true);
586  iDesc.add<std::vector<edm::InputTag>>("jetCorrFactorsSource", emptyVInputTags);
587 
588  // btag discriminator tags
589  iDesc.add<bool>("addBTagInfo", true);
590  iDesc.add<bool>("addDiscriminators", true);
591  iDesc.add<std::vector<edm::InputTag>>("discriminatorSources", emptyVInputTags);
592 
593  // jet flavour idetification configurables
594  iDesc.add<bool>("getJetMCFlavour", true);
595  iDesc.add<bool>("useLegacyJetMCFlavour", false);
596  iDesc.add<bool>("addJetFlavourInfo", false);
597  iDesc.add<edm::InputTag>("JetPartonMapSource", edm::InputTag("jetFlavourAssociationLegacy"));
598  iDesc.add<edm::InputTag>("JetFlavourInfoSource", edm::InputTag("jetFlavourAssociation"));
599 
601 
602  // Efficiency configurables
603  edm::ParameterSetDescription efficienciesPSet;
604  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
605  iDesc.add("efficiencies", efficienciesPSet);
606  iDesc.add<bool>("addEfficiencies", false);
607 
608  // Check to see if the user wants to add user data
609  edm::ParameterSetDescription userDataPSet;
611  iDesc.addOptional("userData", userDataPSet);
612 
613  descriptions.add("PATJetProducer", iDesc);
614 }
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
void setAllowAnything()
allow any parameter label/value pairs
static void fillDescription(edm::ParameterSetDescription &iDesc)
void setComment(std::string const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ produce()

void PATJetProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 238 of file PATJetProducer.cc.

References pat::PATUserDataHelper< ObjectType >::add(), addAssociatedTracks_, pat::Jet::addBDiscriminatorPair(), addBTagInfo_, addDiscriminators_, addGenJetMatch_, addGenPartonMatch_, pat::Jet::addJECFactors(), addJetCharge_, addJetCorrFactors_, addJetFlavourInfo_, addJetID_, addPartonJetMatch_, pat::Jet::addTagInfo(), addTagInfos_, edm::View< T >::begin(), discriminatorLabels_, discriminatorTokens_, efficiencyLoader_, embedCaloTowers_, embedGenPartonMatch_, embedPFCandidates_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), edm::View< T >::end(), spr::find(), jetProducer_cfi::genJetMatch, genJetToken_, genPartonToken_, edm::RefToBase< T >::get(), reco::CaloJet::getCaloConstituents(), reco::JPTJet::getCaloJetRef(), getJetMCFlavour_, reco::PFJet::getPFConstituents(), mps_fire::i, heavyIonCSV_trainingSettings::idx, iEvent, pat::Jet::initializeJEC(), edm::Ref< C, T, F >::isAvailable(), pat::Jet::isCaloJet(), pat::Jet::isJPTJet(), edm::Ref< C, T, F >::isNonnull(), pat::Jet::isPFJet(), metsig::jet, jetChargeToken_, jetCorrFactorsTokens_, jetFlavourInfoToken_, PhotonMonitor_cff::jetId, jetIDMapToken_, jetPartonMapToken_, PDWG_EXODelayedJetMET_cff::jets, jetsToken_, dqmdumpme::k, jetsAK4_CHS_cff::levels, match(), eostools::move(), pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), hemisphereProducer_cfi::patJets, printWarning_, pTComparator_, edm::View< T >::ptrAt(), resolutionLoader_, pat::Jet::setAssociatedTracks(), pat::Jet::setCaloTowers(), pat::helper::EfficiencyLoader::setEfficiencies(), pat::Jet::setGenJetRef(), pat::Jet::setGenParton(), pat::Jet::setHadronFlavour(), pat::Jet::setJetCharge(), pat::Jet::setJetFlavourInfo(), pat::Jet::setJetID(), pat::Jet::setPartonFlavour(), pat::Jet::setPFCandidates(), pat::helper::KinResolutionsLoader::setResolutions(), edm::View< T >::size(), jetUpdater_cfi::sort, tagInfoLabels_, tagInfoTokens_, trackAssociationToken_, useLegacyJetMCFlavour_, userDataHelper_, and useUserData_.

238  {
239  // check whether dealing with MC or real data
240  if (iEvent.isRealData()) {
241  getJetMCFlavour_ = false;
242  useLegacyJetMCFlavour_ = false;
243  addJetFlavourInfo_ = false;
244  addGenPartonMatch_ = false;
245  addGenJetMatch_ = false;
246  addPartonJetMatch_ = false;
247  }
248 
249  // Get the vector of jets
251  iEvent.getByToken(jetsToken_, jets);
252 
257 
258  // for jet flavour
262  iEvent.getByToken(jetPartonMapToken_, jetFlavMatch);
264  iEvent.getByToken(jetFlavourInfoToken_, jetFlavInfoMatch);
265 
266  // Get the vector of generated particles from the event if needed
268  if (addGenPartonMatch_)
269  iEvent.getByToken(genPartonToken_, partonMatch);
270  // Get the vector of GenJets from the event if needed
272  if (addGenJetMatch_)
273  iEvent.getByToken(genJetToken_, genJetMatch);
274  /* TO BE IMPLEMENTED FOR >= 1_5_X
275  // Get the vector of PartonJets from the event if needed
276  edm::Handle<edm::View<reco::SomePartonJetType> > partonJets;
277  if (addPartonJetMatch_) iEvent.getByToken(partonJetToken_, partonJets);
278 */
279 
280  // read in the jet correction factors ValueMap
281  std::vector<edm::ValueMap<JetCorrFactors>> jetCorrs;
282  if (addJetCorrFactors_) {
283  for (size_t i = 0; i < jetCorrFactorsTokens_.size(); ++i) {
285  iEvent.getByToken(jetCorrFactorsTokens_[i], jetCorr);
286  jetCorrs.push_back(*jetCorr);
287  }
288  }
289 
290  // Get the vector of jet tags with b-tagging info
291  std::vector<edm::Handle<reco::JetFloatAssociation::Container>> jetDiscriminators;
293  jetDiscriminators.resize(discriminatorTokens_.size());
294  for (size_t i = 0; i < discriminatorTokens_.size(); ++i) {
295  iEvent.getByToken(discriminatorTokens_[i], jetDiscriminators[i]);
296  }
297  }
298  std::vector<edm::Handle<edm::View<reco::BaseTagInfo>>> jetTagInfos;
299  if (addBTagInfo_ && addTagInfos_) {
300  jetTagInfos.resize(tagInfoTokens_.size());
301  for (size_t i = 0; i < tagInfoTokens_.size(); ++i) {
302  iEvent.getByToken(tagInfoTokens_[i], jetTagInfos[i]);
303  }
304  }
305 
306  // tracks Jet Track Association
309  iEvent.getByToken(trackAssociationToken_, hTrackAss);
311  if (addJetCharge_)
312  iEvent.getByToken(jetChargeToken_, hJetChargeAss);
313 
314  // jet ID handle
316  if (addJetID_)
317  iEvent.getByToken(jetIDMapToken_, hJetIDMap);
318 
319  // loop over jets
320  auto patJets = std::make_unique<std::vector<Jet>>();
321 
322  auto genJetsOut = std::make_unique<reco::GenJetCollection>();
323  auto caloTowersOut = std::make_unique<std::vector<CaloTower>>();
324  auto pfCandidatesOut = std::make_unique<reco::PFCandidateCollection>();
325  auto tagInfosOut = std::make_unique<edm::OwnVector<reco::BaseTagInfo>>();
326 
327  edm::RefProd<reco::GenJetCollection> h_genJetsOut = iEvent.getRefBeforePut<reco::GenJetCollection>("genJets");
328  edm::RefProd<std::vector<CaloTower>> h_caloTowersOut = iEvent.getRefBeforePut<std::vector<CaloTower>>("caloTowers");
330  iEvent.getRefBeforePut<reco::PFCandidateCollection>("pfCandidates");
332  iEvent.getRefBeforePut<edm::OwnVector<reco::BaseTagInfo>>("tagInfos");
333 
334  for (edm::View<reco::Jet>::const_iterator itJet = jets->begin(); itJet != jets->end(); itJet++) {
335  // construct the Jet from the ref -> save ref to original object
336  unsigned int idx = itJet - jets->begin();
337  edm::RefToBase<reco::Jet> jetRef = jets->refAt(idx);
338  edm::Ptr<reco::Jet> jetPtr = jets->ptrAt(idx);
339  Jet ajet(jetRef);
340 
341  // add the FwdPtrs to the CaloTowers
342  if ((ajet.isCaloJet() || ajet.isJPTJet()) && embedCaloTowers_) {
343  const reco::CaloJet *cj = nullptr;
344  const reco::JPTJet *jptj = nullptr;
345  if (ajet.isCaloJet())
346  cj = dynamic_cast<const reco::CaloJet *>(jetRef.get());
347  else {
348  jptj = dynamic_cast<const reco::JPTJet *>(jetRef.get());
349  cj = dynamic_cast<const reco::CaloJet *>(jptj->getCaloJetRef().get());
350  }
352  std::vector<CaloTowerPtr> itowers = cj->getCaloConstituents();
353  for (std::vector<CaloTowerPtr>::const_iterator towBegin = itowers.begin(),
354  towEnd = itowers.end(),
355  itow = towBegin;
356  itow != towEnd;
357  ++itow) {
358  if (itow->isAvailable() && itow->isNonnull()) {
359  caloTowersOut->push_back(**itow);
360  // set the "forward" ref to the thinned collection
361  edm::Ref<std::vector<CaloTower>> caloTowerRef(h_caloTowersOut, caloTowersOut->size() - 1);
362  edm::Ptr<CaloTower> caloForwardRef(h_caloTowersOut.id(), caloTowerRef.key(), h_caloTowersOut.productGetter());
363  // set the "backward" ref to the original collection for association
364  edm::Ptr<CaloTower> caloBackRef(*itow);
365  // add to the list of FwdPtr's
366  itowersRef.push_back(pat::CaloTowerFwdPtrCollection::value_type(caloForwardRef, caloBackRef));
367  }
368  }
369  ajet.setCaloTowers(itowersRef);
370  }
371 
372  // add the FwdPtrs to the PFCandidates
373  if (ajet.isPFJet() && embedPFCandidates_) {
374  const reco::PFJet *cj = dynamic_cast<const reco::PFJet *>(jetRef.get());
375  pat::PFCandidateFwdPtrCollection iparticlesRef;
376  std::vector<reco::PFCandidatePtr> iparticles = cj->getPFConstituents();
377  for (std::vector<reco::PFCandidatePtr>::const_iterator partBegin = iparticles.begin(),
378  partEnd = iparticles.end(),
379  ipart = partBegin;
380  ipart != partEnd;
381  ++ipart) {
382  pfCandidatesOut->push_back(**ipart);
383  // set the "forward" ref to the thinned collection
384  edm::Ref<reco::PFCandidateCollection> pfCollectionRef(h_pfCandidatesOut, pfCandidatesOut->size() - 1);
385  edm::Ptr<reco::PFCandidate> pfForwardRef(
386  h_pfCandidatesOut.id(), pfCollectionRef.key(), h_pfCandidatesOut.productGetter());
387  // set the "backward" ref to the original collection for association
388  edm::Ptr<reco::PFCandidate> pfBackRef(*ipart);
389  // add to the list of FwdPtr's
390  iparticlesRef.push_back(pat::PFCandidateFwdPtrCollection::value_type(pfForwardRef, pfBackRef));
391  }
392  ajet.setPFCandidates(iparticlesRef);
393  }
394 
395  if (addJetCorrFactors_) {
396  // add additional JetCorrs to the jet
397  for (unsigned int i = 0; i < jetCorrFactorsTokens_.size(); ++i) {
398  const JetCorrFactors &jcf = jetCorrs[i][jetRef];
399  // uncomment for debugging
400  // jcf.print();
401  ajet.addJECFactors(jcf);
402  }
403  std::vector<std::string> levels = jetCorrs[0][jetRef].correctionLabels();
404  if (std::find(levels.begin(), levels.end(), "L2L3Residual") != levels.end()) {
405  ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel("L2L3Residual"));
406  } else if (std::find(levels.begin(), levels.end(), "L3Absolute") != levels.end()) {
407  ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel("L3Absolute"));
408  } else {
409  ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel("Uncorrected"));
410  if (printWarning_) {
411  edm::LogWarning("L3Absolute not found")
412  << "L2L3Residual and L3Absolute are not part of the jetCorrFactors\n"
413  << "of module " << jetCorrs[0][jetRef].jecSet() << ". Jets will remain"
414  << " uncorrected.";
415  printWarning_ = false;
416  }
417  }
418  }
419 
420  // get the MC flavour information for this jet
422  ajet.setPartonFlavour((*jetFlavMatch)[edm::RefToBase<reco::Jet>(jetRef)].getFlavour());
423  } else if (getJetMCFlavour_ && !useLegacyJetMCFlavour_) {
424  if (addJetFlavourInfo_)
425  ajet.setJetFlavourInfo((*jetFlavInfoMatch)[edm::RefToBase<reco::Jet>(jetRef)]);
426  else {
427  ajet.setPartonFlavour((*jetFlavInfoMatch)[edm::RefToBase<reco::Jet>(jetRef)].getPartonFlavour());
428  ajet.setHadronFlavour((*jetFlavInfoMatch)[edm::RefToBase<reco::Jet>(jetRef)].getHadronFlavour());
429  }
430  }
431  // store the match to the generated partons
432  if (addGenPartonMatch_) {
433  reco::GenParticleRef parton = (*partonMatch)[jetRef];
434  if (parton.isNonnull() && parton.isAvailable()) {
435  ajet.setGenParton(parton, embedGenPartonMatch_);
436  } // leave empty if no match found
437  }
438  // store the match to the GenJets
439  if (addGenJetMatch_) {
440  reco::GenJetRef genjet = (*genJetMatch)[jetRef];
441  if (genjet.isNonnull() && genjet.isAvailable()) {
442  genJetsOut->push_back(*genjet);
443  // set the "forward" ref to the thinned collection
444  edm::Ref<reco::GenJetCollection> genForwardRef(h_genJetsOut, genJetsOut->size() - 1);
445  // set the "backward" ref to the original collection
446  const edm::Ref<reco::GenJetCollection> &genBackRef(genjet);
447  // make the FwdPtr
448  edm::FwdRef<reco::GenJetCollection> genjetFwdRef(genForwardRef, genBackRef);
449  ajet.setGenJetRef(genjetFwdRef);
450  } // leave empty if no match found
451  }
452 
453  if (efficiencyLoader_.enabled()) {
454  efficiencyLoader_.setEfficiencies(ajet, jetRef);
455  }
456 
457  // IMPORTANT: DO THIS AFTER JES CORRECTIONS
458  if (resolutionLoader_.enabled()) {
460  }
461 
462  // TO BE IMPLEMENTED FOR >=1_5_X: do the PartonJet matching
463  if (addPartonJetMatch_) {
464  }
465 
466  // add b-tag info if available & required
467  if (addBTagInfo_) {
468  if (addDiscriminators_) {
469  for (size_t k = 0; k < jetDiscriminators.size(); ++k) {
470  float value = (*jetDiscriminators[k])[jetRef];
471  ajet.addBDiscriminatorPair(std::make_pair(discriminatorLabels_[k], value));
472  }
473  }
474  if (addTagInfos_) {
475  for (size_t k = 0; k < jetTagInfos.size(); ++k) {
476  const edm::View<reco::BaseTagInfo> &taginfos = *jetTagInfos[k];
477  // This is not associative, so we have to search the jet
479  // Try first by 'same index'
480  if ((idx < taginfos.size()) && (taginfos[idx].jet() == jetRef)) {
481  match = taginfos.ptrAt(idx);
482  } else {
483  // otherwise fail back to a simple search
484  for (edm::View<reco::BaseTagInfo>::const_iterator itTI = taginfos.begin(), edTI = taginfos.end();
485  itTI != edTI;
486  ++itTI) {
487  if (itTI->jet() == jetRef) {
488  match = taginfos.ptrAt(itTI - taginfos.begin());
489  break;
490  }
491  }
492  }
493  if (match.isNonnull()) {
494  tagInfosOut->push_back(match->clone());
495  // set the "forward" ptr to the thinned collection
496  edm::Ptr<reco::BaseTagInfo> tagInfoForwardPtr(
497  h_tagInfosOut.id(), &tagInfosOut->back(), tagInfosOut->size() - 1);
498  // set the "backward" ptr to the original collection for association
499  const edm::Ptr<reco::BaseTagInfo> &tagInfoBackPtr(match);
500  // make FwdPtr
501  TagInfoFwdPtrCollection::value_type tagInfoFwdPtr(tagInfoForwardPtr, tagInfoBackPtr);
502  ajet.addTagInfo(tagInfoLabels_[k], tagInfoFwdPtr);
503  }
504  }
505  }
506  }
507 
509  ajet.setAssociatedTracks((*hTrackAss)[jetRef]);
510 
511  if (addJetCharge_)
512  ajet.setJetCharge((*hJetChargeAss)[jetRef]);
513 
514  // add jet ID for calo jets
515  if (addJetID_ && ajet.isCaloJet()) {
516  reco::JetID jetId = (*hJetIDMap)[jetRef];
517  ajet.setJetID(jetId);
518  }
519  // add jet ID jpt jets
520  else if (addJetID_ && ajet.isJPTJet()) {
521  const reco::JPTJet *jptj = dynamic_cast<const reco::JPTJet *>(jetRef.get());
522  reco::JetID jetId = (*hJetIDMap)[jptj->getCaloJetRef()];
523  ajet.setJetID(jetId);
524  }
525  if (useUserData_) {
526  userDataHelper_.add(ajet, iEvent, iSetup);
527  }
528  patJets->push_back(ajet);
529  }
530 
531  // sort jets in pt
532  std::sort(patJets->begin(), patJets->end(), pTComparator_);
533 
534  // put genEvt in Event
535  iEvent.put(std::move(patJets));
536 
537  iEvent.put(std::move(genJetsOut), "genJets");
538  iEvent.put(std::move(caloTowersOut), "caloTowers");
539  iEvent.put(std::move(pfCandidatesOut), "pfCandidates");
540  iEvent.put(std::move(tagInfosOut), "tagInfos");
541 }
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
pat::helper::EfficiencyLoader efficiencyLoader_
virtual std::vector< CaloTowerPtr > getCaloConstituents() const
get all constituents
Definition: CaloJet.cc:78
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken_
std::vector< edm::EDGetTokenT< edm::View< reco::BaseTagInfo > > > tagInfoTokens_
edm::EDGetTokenT< reco::JetTracksAssociation::Container > trackAssociationToken_
Jets made from CaloTowers.
Definition: CaloJet.h:27
Ptr< value_type > ptrAt(size_type i) const
std::vector< std::string > tagInfoLabels_
std::vector< edm::EDGetTokenT< edm::ValueMap< JetCorrFactors > > > jetCorrFactorsTokens_
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
pat::helper::KinResolutionsLoader resolutionLoader_
std::vector< GenJet > GenJetCollection
collection of GenJet objects
std::vector< std::string > discriminatorLabels_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
Jet ID object.
Definition: JetID.h:16
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::EDGetTokenT< reco::JetFlavourInfoMatchingCollection > jetFlavourInfoToken_
Jets made from PFObjects.
Definition: PFJet.h:20
GreaterByPt< Jet > pTComparator_
size_type size() const
virtual std::vector< reco::PFCandidatePtr > getPFConstituents() const
get all constituents
Definition: PFJet.cc:41
edm::EDGetTokenT< reco::JetFloatAssociation::Container > jetChargeToken_
int iEvent
Definition: GenABIO.cc:224
Definition: Jet.py:1
void newEvent(const edm::Event &event, const edm::EventSetup &setup)
To be called for each new event, reads in the EventSetup object.
Jets made from CaloJets corrected for ZSP and tracks.
Definition: JPTJet.h:28
Class for the storage of jet correction factors.
bool isAvailable() const
Definition: Ref.h:537
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
edm::EDGetTokenT< reco::JetIDValueMap > jetIDMapToken_
genJetMatch
switch on/off embedding of matched genJet&#39;s
Definition: value.py:1
const edm::RefToBase< reco::Jet > & getCaloJetRef() const
Definition: JPTJet.h:133
void add(ObjectType &patObject, edm::Event const &iEvent, edm::EventSetup const &iSetup)
pat::PATUserDataHelper< pat::Jet > userDataHelper_
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
edm::EDGetTokenT< reco::JetFlavourMatchingCollection > jetPartonMapToken_
std::vector< edm::FwdPtr< CaloTower > > CaloTowerFwdPtrCollection
Definition: Jet.h:74
std::vector< edm::FwdPtr< reco::PFCandidate > > PFCandidateFwdPtrCollection
Definition: Jet.h:73
edm::EDGetTokenT< edm::Association< reco::GenJetCollection > > genJetToken_
std::vector< edm::EDGetTokenT< reco::JetFloatAssociation::Container > > discriminatorTokens_
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > genPartonToken_
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
const_iterator begin() const
Log< level::Warning, false > LogWarning
value_type const * get() const
Definition: RefToBase.h:209
const_iterator end() const
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ addAssociatedTracks_

bool pat::PATJetProducer::addAssociatedTracks_
private

Definition at line 95 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addBTagInfo_

bool pat::PATJetProducer::addBTagInfo_
private

Definition at line 86 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addDiscriminators_

bool pat::PATJetProducer::addDiscriminators_
private

Definition at line 87 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addEfficiencies_

bool pat::PATJetProducer::addEfficiencies_
private

Definition at line 105 of file PATJetProducer.cc.

Referenced by PATJetProducer().

◆ addGenJetMatch_

bool pat::PATJetProducer::addGenJetMatch_
private

Definition at line 78 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addGenPartonMatch_

bool pat::PATJetProducer::addGenPartonMatch_
private

Definition at line 75 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addJetCharge_

bool pat::PATJetProducer::addJetCharge_
private

Definition at line 97 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addJetCorrFactors_

bool pat::PATJetProducer::addJetCorrFactors_
private

Definition at line 83 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addJetFlavourInfo_

bool pat::PATJetProducer::addJetFlavourInfo_
private

Definition at line 72 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addJetID_

bool pat::PATJetProducer::addJetID_
private

Definition at line 99 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addPartonJetMatch_

bool pat::PATJetProducer::addPartonJetMatch_
private

Definition at line 81 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ addResolutions_

bool pat::PATJetProducer::addResolutions_
private

Definition at line 108 of file PATJetProducer.cc.

Referenced by PATJetProducer().

◆ addTagInfos_

bool pat::PATJetProducer::addTagInfos_
private

Definition at line 91 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ caloPTComparator_

GreaterByPt<CaloTower> pat::PATJetProducer::caloPTComparator_
private

Definition at line 103 of file PATJetProducer.cc.

◆ discriminatorLabels_

std::vector<std::string> pat::PATJetProducer::discriminatorLabels_
private

Definition at line 90 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ discriminatorTags_

std::vector<edm::InputTag> pat::PATJetProducer::discriminatorTags_
private

Definition at line 88 of file PATJetProducer.cc.

Referenced by PATJetProducer().

◆ discriminatorTokens_

std::vector<edm::EDGetTokenT<reco::JetFloatAssociation::Container> > pat::PATJetProducer::discriminatorTokens_
private

Definition at line 89 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ efficiencyLoader_

pat::helper::EfficiencyLoader pat::PATJetProducer::efficiencyLoader_
private

Definition at line 106 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ embedCaloTowers_

bool pat::PATJetProducer::embedCaloTowers_
private

Definition at line 68 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ embedGenJetMatch_

bool pat::PATJetProducer::embedGenJetMatch_
private

Definition at line 79 of file PATJetProducer.cc.

Referenced by PATJetProducer().

◆ embedGenPartonMatch_

bool pat::PATJetProducer::embedGenPartonMatch_
private

Definition at line 76 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ embedPFCandidates_

bool pat::PATJetProducer::embedPFCandidates_
private

Definition at line 69 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ genJetToken_

edm::EDGetTokenT<edm::Association<reco::GenJetCollection> > pat::PATJetProducer::genJetToken_
private

Definition at line 80 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ genPartonToken_

edm::EDGetTokenT<edm::Association<reco::GenParticleCollection> > pat::PATJetProducer::genPartonToken_
private

Definition at line 77 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ getJetMCFlavour_

bool pat::PATJetProducer::getJetMCFlavour_
private

Definition at line 70 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetChargeToken_

edm::EDGetTokenT<reco::JetFloatAssociation::Container> pat::PATJetProducer::jetChargeToken_
private

Definition at line 98 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetCorrFactorsTokens_

std::vector<edm::EDGetTokenT<edm::ValueMap<JetCorrFactors> > > pat::PATJetProducer::jetCorrFactorsTokens_
private

Definition at line 84 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetFlavourInfoToken_

edm::EDGetTokenT<reco::JetFlavourInfoMatchingCollection> pat::PATJetProducer::jetFlavourInfoToken_
private

Definition at line 74 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetIDMapToken_

edm::EDGetTokenT<reco::JetIDValueMap> pat::PATJetProducer::jetIDMapToken_
private

Definition at line 100 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetPartonMapToken_

edm::EDGetTokenT<reco::JetFlavourMatchingCollection> pat::PATJetProducer::jetPartonMapToken_
private

Definition at line 73 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ jetsToken_

edm::EDGetTokenT<edm::View<reco::Jet> > pat::PATJetProducer::jetsToken_
private

Definition at line 67 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ printWarning_

bool pat::PATJetProducer::printWarning_
private

Definition at line 114 of file PATJetProducer.cc.

Referenced by produce().

◆ pTComparator_

GreaterByPt<Jet> pat::PATJetProducer::pTComparator_
private

Definition at line 102 of file PATJetProducer.cc.

Referenced by produce().

◆ resolutionLoader_

pat::helper::KinResolutionsLoader pat::PATJetProducer::resolutionLoader_
private

Definition at line 109 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ tagInfoLabels_

std::vector<std::string> pat::PATJetProducer::tagInfoLabels_
private

Definition at line 94 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ tagInfoTags_

std::vector<edm::InputTag> pat::PATJetProducer::tagInfoTags_
private

Definition at line 92 of file PATJetProducer.cc.

Referenced by PATJetProducer().

◆ tagInfoTokens_

std::vector<edm::EDGetTokenT<edm::View<reco::BaseTagInfo> > > pat::PATJetProducer::tagInfoTokens_
private

Definition at line 93 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ trackAssociationToken_

edm::EDGetTokenT<reco::JetTracksAssociation::Container> pat::PATJetProducer::trackAssociationToken_
private

Definition at line 96 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ useLegacyJetMCFlavour_

bool pat::PATJetProducer::useLegacyJetMCFlavour_
private

Definition at line 71 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ userDataHelper_

pat::PATUserDataHelper<pat::Jet> pat::PATJetProducer::userDataHelper_
private

Definition at line 112 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().

◆ useUserData_

bool pat::PATJetProducer::useUserData_
private

Definition at line 111 of file PATJetProducer.cc.

Referenced by PATJetProducer(), and produce().