CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes
PFRecoTauChargedHadronProducer Class Reference
Inheritance diagram for PFRecoTauChargedHadronProducer:
edm::stream::EDProducer<>

Public Types

typedef reco::tau::PFRecoTauChargedHadronBuilderPlugin Builder
 
typedef reco::tau::PFRecoTauChargedHadronQualityPlugin Ranker
 
- 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, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

 PFRecoTauChargedHadronProducer (const edm::ParameterSet &cfg)
 
template<typename T >
void print (const T &chargedHadrons)
 
void produce (edm::Event &evt, const edm::EventSetup &es) override
 
 ~PFRecoTauChargedHadronProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Types

typedef boost::ptr_vector< BuilderbuilderList
 
typedef boost::ptr_list< reco::PFRecoTauChargedHadronChargedHadronList
 
typedef reco::tau::RecoTauLexicographicalRanking< rankerList, reco::PFRecoTauChargedHadronChargedHadronPredicate
 
typedef boost::ptr_vector< reco::PFRecoTauChargedHadronChargedHadronVector
 
typedef boost::ptr_vector< RankerrankerList
 

Private Attributes

builderList builders_
 
edm::EDGetTokenT< reco::JetViewJets_token
 
double maxJetAbsEta_
 
double minJetPt_
 
std::string moduleLabel_
 
std::unique_ptr< StringCutObjectSelector< reco::PFRecoTauChargedHadron > > outputSelector_
 
std::unique_ptr< ChargedHadronPredicatepredicate_
 
rankerList rankers_
 
edm::InputTag srcJets_
 
int verbosity_
 

Detailed Description

Definition at line 54 of file PFRecoTauChargedHadronProducer.cc.

Member Typedef Documentation

◆ Builder

Definition at line 56 of file PFRecoTauChargedHadronProducer.cc.

◆ builderList

typedef boost::ptr_vector<Builder> PFRecoTauChargedHadronProducer::builderList
private

Definition at line 68 of file PFRecoTauChargedHadronProducer.cc.

◆ ChargedHadronList

Definition at line 71 of file PFRecoTauChargedHadronProducer.cc.

◆ ChargedHadronPredicate

Definition at line 73 of file PFRecoTauChargedHadronProducer.cc.

◆ ChargedHadronVector

Definition at line 70 of file PFRecoTauChargedHadronProducer.cc.

◆ Ranker

Definition at line 57 of file PFRecoTauChargedHadronProducer.cc.

◆ rankerList

typedef boost::ptr_vector<Ranker> PFRecoTauChargedHadronProducer::rankerList
private

Definition at line 69 of file PFRecoTauChargedHadronProducer.cc.

Constructor & Destructor Documentation

◆ PFRecoTauChargedHadronProducer()

PFRecoTauChargedHadronProducer::PFRecoTauChargedHadronProducer ( const edm::ParameterSet cfg)
explicit

Definition at line 96 of file PFRecoTauChargedHadronProducer.cc.

97  : moduleLabel_(cfg.getParameter<std::string>("@module_label")) {
98  srcJets_ = cfg.getParameter<edm::InputTag>("jetSrc");
99  Jets_token = consumes<reco::JetView>(srcJets_);
100  minJetPt_ = cfg.getParameter<double>("minJetPt");
101  maxJetAbsEta_ = cfg.getParameter<double>("maxJetAbsEta");
102  verbosity_ = cfg.getParameter<int>("verbosity");
103 
104  // get set of ChargedHadron builder plugins
105  edm::VParameterSet psets_builders = cfg.getParameter<edm::VParameterSet>("builders");
106  for (edm::VParameterSet::const_iterator pset = psets_builders.begin(); pset != psets_builders.end(); ++pset) {
107  std::string pluginType = pset->getParameter<std::string>("plugin");
108  edm::ParameterSet pset_modified = (*pset);
109  pset_modified.addParameter<int>("verbosity", verbosity_);
110  builders_.push_back(
111  PFRecoTauChargedHadronBuilderPluginFactory::get()->create(pluginType, pset_modified, consumesCollector()));
112  }
113 
114  // get set of plugins for ranking ChargedHadrons in quality
115  edm::VParameterSet psets_rankers = cfg.getParameter<edm::VParameterSet>("ranking");
116  for (edm::VParameterSet::const_iterator pset = psets_rankers.begin(); pset != psets_rankers.end(); ++pset) {
117  std::string pluginType = pset->getParameter<std::string>("plugin");
118  edm::ParameterSet pset_modified = (*pset);
119  pset_modified.addParameter<int>("verbosity", verbosity_);
120  rankers_.push_back(PFRecoTauChargedHadronQualityPluginFactory::get()->create(pluginType, pset_modified));
121  }
122 
123  // build the sorting predicate
124  predicate_ = std::unique_ptr<ChargedHadronPredicate>(new ChargedHadronPredicate(rankers_));
125 
126  // check if we want to apply a final output selection
127  std::string selection = cfg.getParameter<std::string>("outputSelection");
128  if (!selection.empty()) {
130  }
131 
132  produces<reco::PFJetChargedHadronAssociation>();
133 }

References edm::ParameterSet::addParameter(), builders_, looper::cfg, beamerCreator::create(), get, Jets_token, maxJetAbsEta_, minJetPt_, outputSelector_, predicate_, muonDTDigis_cfi::pset, rankers_, corrVsCorr::selection, srcJets_, AlCaHLTBitMon_QueryRunRegistry::string, and verbosity_.

◆ ~PFRecoTauChargedHadronProducer()

PFRecoTauChargedHadronProducer::~PFRecoTauChargedHadronProducer ( )
inlineoverride

Definition at line 60 of file PFRecoTauChargedHadronProducer.cc.

60 {}

Member Function Documentation

◆ fillDescriptions()

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

Definition at line 336 of file PFRecoTauChargedHadronProducer.cc.

336  {
337  // ak4PFJetsRecoTauChargedHadrons
339  {
340  edm::ParameterSetDescription desc_ranking;
341  desc_ranking.add<std::string>("selectionPassFunction", "-pt");
342  desc_ranking.add<double>("selectionFailValue", 1000.0);
343  desc_ranking.add<std::string>("selection", "algoIs(\"kChargedPFCandidate\")");
344  desc_ranking.add<std::string>("name", "ChargedPFCandidate");
345  desc_ranking.add<std::string>("plugin", "PFRecoTauChargedHadronStringQuality");
346 
347  edm::ParameterSet pset_ranking;
348  pset_ranking.addParameter<std::string>("selectionPassFunction", "-pt");
349  pset_ranking.addParameter<double>("selectionFailValue", 1000.0);
350  pset_ranking.addParameter<std::string>("selection", "algoIs(\"kChargedPFCandidate\")");
351  pset_ranking.addParameter<std::string>("name", "ChargedPFCandidate");
352  pset_ranking.addParameter<std::string>("plugin", "PFRecoTauChargedHadronStringQuality");
353  std::vector<edm::ParameterSet> vpsd_ranking;
354  vpsd_ranking.push_back(pset_ranking);
355 
356  desc.addVPSet("ranking", desc_ranking, vpsd_ranking);
357  }
358 
359  desc.add<int>("verbosity", 0);
360  desc.add<double>("maxJetAbsEta", 2.5);
361  desc.add<std::string>("outputSelection", "pt > 0.5");
362  desc.add<double>("minJetPt", 14.0);
363  desc.add<edm::InputTag>("jetSrc", edm::InputTag("ak4PFJets"));
364 
365  {
366  edm::ParameterSetDescription desc_builders;
367  desc_builders.add<double>("minMergeChargedHadronPt");
368  desc_builders.add<std::string>("name");
369  desc_builders.add<std::string>("plugin");
370  desc_builders.addOptional<double>("dRcone");
371  desc_builders.addOptional<bool>("dRconeLimitedToJetArea");
372  desc_builders.addOptional<double>("dRmergeNeutralHadron");
373  desc_builders.addOptional<double>("dRmergePhoton");
374  desc_builders.addOptional<edm::InputTag>("srcTracks");
375 
376  {
377  edm::ParameterSetDescription pset_signalQualityCuts;
378  pset_signalQualityCuts.add<double>("maxDeltaZ", 0.4);
379  pset_signalQualityCuts.add<double>("minTrackPt", 0.5);
380  pset_signalQualityCuts.add<double>("minTrackVertexWeight", -1.0);
381  pset_signalQualityCuts.add<double>("maxTrackChi2", 100.0);
382  pset_signalQualityCuts.add<unsigned int>("minTrackPixelHits", 0);
383  pset_signalQualityCuts.add<double>("minGammaEt", 1.0);
384  pset_signalQualityCuts.add<unsigned int>("minTrackHits", 3);
385  pset_signalQualityCuts.add<double>("minNeutralHadronEt", 30.0);
386  pset_signalQualityCuts.add<double>("maxTransverseImpactParameter", 0.1);
387  pset_signalQualityCuts.addOptional<bool>("useTracksInsteadOfPFHadrons");
388 
389  edm::ParameterSetDescription pset_vxAssocQualityCuts;
390  pset_vxAssocQualityCuts.add<double>("minTrackPt", 0.5);
391  pset_vxAssocQualityCuts.add<double>("minTrackVertexWeight", -1.0);
392  pset_vxAssocQualityCuts.add<double>("maxTrackChi2", 100.0);
393  pset_vxAssocQualityCuts.add<unsigned int>("minTrackPixelHits", 0);
394  pset_vxAssocQualityCuts.add<double>("minGammaEt", 1.0);
395  pset_vxAssocQualityCuts.add<unsigned int>("minTrackHits", 3);
396  pset_vxAssocQualityCuts.add<double>("maxTransverseImpactParameter", 0.1);
397  pset_vxAssocQualityCuts.addOptional<bool>("useTracksInsteadOfPFHadrons");
398 
399  edm::ParameterSetDescription pset_isolationQualityCuts;
400  pset_isolationQualityCuts.add<double>("maxDeltaZ", 0.2);
401  pset_isolationQualityCuts.add<double>("minTrackPt", 1.0);
402  pset_isolationQualityCuts.add<double>("minTrackVertexWeight", -1.0);
403  pset_isolationQualityCuts.add<double>("maxTrackChi2", 100.0);
404  pset_isolationQualityCuts.add<unsigned int>("minTrackPixelHits", 0);
405  pset_isolationQualityCuts.add<double>("minGammaEt", 1.5);
406  pset_isolationQualityCuts.add<unsigned int>("minTrackHits", 8);
407  pset_isolationQualityCuts.add<double>("maxTransverseImpactParameter", 0.03);
408  pset_isolationQualityCuts.addOptional<bool>("useTracksInsteadOfPFHadrons");
409 
410  edm::ParameterSetDescription pset_qualityCuts;
411  pset_qualityCuts.add<edm::ParameterSetDescription>("signalQualityCuts", pset_signalQualityCuts);
412  pset_qualityCuts.add<edm::ParameterSetDescription>("vxAssocQualityCuts", pset_vxAssocQualityCuts);
413  pset_qualityCuts.add<edm::ParameterSetDescription>("isolationQualityCuts", pset_isolationQualityCuts);
414  pset_qualityCuts.add<std::string>("leadingTrkOrPFCandOption", "leadPFCand");
415  pset_qualityCuts.add<std::string>("pvFindingAlgo", "closestInDeltaZ");
416  pset_qualityCuts.add<edm::InputTag>("primaryVertexSrc", edm::InputTag("offlinePrimaryVertices"));
417  pset_qualityCuts.add<bool>("vertexTrackFiltering", false);
418  pset_qualityCuts.add<bool>("recoverLeadingTrk", false);
419 
420  desc_builders.add<edm::ParameterSetDescription>("qualityCuts", pset_qualityCuts);
421  }
422 
423  desc_builders.add<double>("minMergeGammaEt");
424  desc_builders.add<int>("verbosity", 0);
425  desc_builders.add<double>("minMergeNeutralHadronEt");
426 
427  desc_builders.addOptional<double>("dRmergePhotonWrtChargedHadron");
428  desc_builders.addOptional<double>("dRmergePhotonWrtNeutralHadron");
429  desc_builders.addOptional<int>("maxUnmatchedBlockElementsNeutralHadron");
430  desc_builders.addOptional<double>("dRmergePhotonWrtElectron");
431  desc_builders.addOptional<std::vector<int>>("chargedHadronCandidatesParticleIds");
432  desc_builders.addOptional<int>("minBlockElementMatchesPhoton");
433  desc_builders.addOptional<double>("dRmergeNeutralHadronWrtNeutralHadron");
434  desc_builders.addOptional<int>("maxUnmatchedBlockElementsPhoton");
435  desc_builders.addOptional<double>("dRmergeNeutralHadronWrtOther");
436  desc_builders.addOptional<double>("dRmergeNeutralHadronWrtElectron");
437  desc_builders.addOptional<int>("minBlockElementMatchesNeutralHadron");
438  desc_builders.addOptional<double>("dRmergePhotonWrtOther");
439  desc_builders.addOptional<double>("dRmergeNeutralHadronWrtChargedHadron");
440 
441  edm::ParameterSet pset_builders;
442  pset_builders.addParameter<std::string>("name", "");
443  pset_builders.addParameter<std::string>("plugin", "");
445  pset_builders.addParameter<edm::ParameterSet>("qualityCuts", qualityCuts);
446  pset_builders.addParameter<int>("verbosity", 0);
447  std::vector<edm::ParameterSet> vpsd_builders;
448  vpsd_builders.push_back(pset_builders);
449 
450  desc.addVPSet("builders", desc_builders, vpsd_builders);
451  }
452 
453  descriptions.add("pfRecoTauChargedHadronProducer", desc);
454 }

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), edm::ParameterSet::addParameter(), edm::ParameterSetDescription::addVPSet(), HLT_2018_cff::InputTag, beam_dqm_sourceclient-live_cfg::qualityCuts, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ print()

template<typename T >
void PFRecoTauChargedHadronProducer::print ( const T chargedHadrons)

Definition at line 322 of file PFRecoTauChargedHadronProducer.cc.

322  {
323  for (typename T::const_iterator chargedHadron = chargedHadrons.begin(); chargedHadron != chargedHadrons.end();
324  ++chargedHadron) {
325  edm::LogPrint("PFRecoTauChHProducer") << (*chargedHadron);
326  edm::LogPrint("PFRecoTauChHProducer") << "Rankers:";
327  for (rankerList::const_iterator ranker = rankers_.begin(); ranker != rankers_.end(); ++ranker) {
328  const unsigned width = 25;
329  edm::LogPrint("PFRecoTauChHProducer")
330  << " " << std::setiosflags(std::ios::left) << std::setw(width) << ranker->name() << " "
331  << std::resetiosflags(std::ios::left) << std::setprecision(3) << (*ranker)(*chargedHadron) << std::endl;
332  }
333  }
334 }

References muons2muons_cfi::chargedHadron, rankers_, and ApeEstimator_cff::width.

Referenced by produce().

◆ produce()

void PFRecoTauChargedHadronProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 135 of file PFRecoTauChargedHadronProducer.cc.

135  {
136  if (verbosity_) {
137  edm::LogPrint("PFRecoTauChHProducer") << "<PFRecoTauChargedHadronProducer::produce>:";
138  edm::LogPrint("PFRecoTauChHProducer") << " moduleLabel = " << moduleLabel_;
139  }
140 
141  // give each of our plugins a chance at doing something with the edm::Event
142  for (auto& builder : builders_) {
143  builder.setup(evt, es);
144  }
145 
146  // get a view of our jets via the base candidates
148  evt.getByToken(Jets_token, jets);
149 
150  // convert the view to a RefVector of actual PFJets
152  size_t nElements = jets->size();
153  for (size_t i = 0; i < nElements; ++i) {
154  pfJets.push_back(jets->refAt(i));
155  }
156 
157  // make our association
158  std::unique_ptr<reco::PFJetChargedHadronAssociation> pfJetChargedHadronAssociations;
159 
160  if (!pfJets.empty()) {
161  pfJetChargedHadronAssociations = std::make_unique<reco::PFJetChargedHadronAssociation>(reco::JetRefBaseProd(jets));
162  } else {
163  pfJetChargedHadronAssociations = std::make_unique<reco::PFJetChargedHadronAssociation>();
164  }
165 
166  // loop over our jets
167  for (const auto& pfJet : pfJets) {
168  if (pfJet->pt() - minJetPt_ < 1e-5)
169  continue;
170  if (std::abs(pfJet->eta()) - maxJetAbsEta_ > -1e-5)
171  continue;
172 
173  // build global list of ChargedHadron candidates for each jet
174  ChargedHadronList uncleanedChargedHadrons;
175 
176  // merge candidates reconstructed by all desired algorithm plugins
177  for (auto const& builder : builders_) {
178  try {
179  ChargedHadronVector result(builder(*pfJet));
180  if (verbosity_) {
181  edm::LogPrint("PFRecoTauChHProducer") << "result of builder = " << builder.name() << ":";
182  print(result);
183  }
184  uncleanedChargedHadrons.transfer(uncleanedChargedHadrons.end(), result);
185  } catch (cms::Exception& exception) {
186  edm::LogError("BuilderPluginException")
187  << "Exception caught in builder plugin " << builder.name() << ", rethrowing" << std::endl;
188  throw exception;
189  }
190  }
191 
192  // rank the candidates according to our quality plugins
193  uncleanedChargedHadrons.sort(*predicate_);
194 
195  // define collection of cleaned ChargedHadrons;
196  std::vector<reco::PFRecoTauChargedHadron> cleanedChargedHadrons;
197 
198  // keep track of neutral PFCandidates, charged PFCandidates and tracks "used" by ChargedHadron candidates in the clean collection
199  typedef std::pair<double, double> etaPhiPair;
200  std::list<etaPhiPair> tracksInCleanCollection;
201  std::set<reco::CandidatePtr> neutralPFCandsInCleanCollection;
202 
203  while (!uncleanedChargedHadrons.empty()) {
204  // get next best ChargedHadron candidate
205  std::unique_ptr<reco::PFRecoTauChargedHadron> nextChargedHadron(uncleanedChargedHadrons.pop_front().release());
206  if (verbosity_) {
207  edm::LogPrint("PFRecoTauChHProducer") << "processing nextChargedHadron:";
208  edm::LogPrint("PFRecoTauChHProducer") << (*nextChargedHadron);
209  }
210 
211  // discard candidates which fail final output selection
212  if (!(*outputSelector_)(*nextChargedHadron))
213  continue;
214 
215  const reco::Track* track = nullptr;
216  if (nextChargedHadron->getChargedPFCandidate().isNonnull()) {
217  const reco::PFCandidate* chargedPFCand =
218  dynamic_cast<const reco::PFCandidate*>(&*nextChargedHadron->getChargedPFCandidate());
219  if (chargedPFCand) {
220  if (chargedPFCand->trackRef().isNonnull())
221  track = chargedPFCand->trackRef().get();
222  else if (chargedPFCand->muonRef().isNonnull() && chargedPFCand->muonRef()->innerTrack().isNonnull())
223  track = chargedPFCand->muonRef()->innerTrack().get();
224  else if (chargedPFCand->muonRef().isNonnull() && chargedPFCand->muonRef()->globalTrack().isNonnull())
225  track = chargedPFCand->muonRef()->globalTrack().get();
226  else if (chargedPFCand->muonRef().isNonnull() && chargedPFCand->muonRef()->outerTrack().isNonnull())
227  track = chargedPFCand->muonRef()->outerTrack().get();
228  else if (chargedPFCand->gsfTrackRef().isNonnull())
229  track = chargedPFCand->gsfTrackRef().get();
230  }
231  }
232  if (nextChargedHadron->getTrack().isNonnull() && !track) {
233  track = nextChargedHadron->getTrack().get();
234  }
235 
236  // discard candidate in case its track is "used" by any ChargedHadron in the clean collection
237  bool isTrack_overlap = false;
238  if (track) {
239  double track_eta = track->eta();
240  double track_phi = track->phi();
241  for (std::list<etaPhiPair>::const_iterator trackInCleanCollection = tracksInCleanCollection.begin();
242  trackInCleanCollection != tracksInCleanCollection.end();
243  ++trackInCleanCollection) {
244  double dR = deltaR(track_eta, track_phi, trackInCleanCollection->first, trackInCleanCollection->second);
245  if (dR < 1.e-4)
246  isTrack_overlap = true;
247  }
248  }
249  if (verbosity_) {
250  edm::LogPrint("PFRecoTauChHProducer") << "isTrack_overlap = " << isTrack_overlap;
251  }
252  if (isTrack_overlap)
253  continue;
254 
255  // discard ChargedHadron candidates without track in case they are close to neutral PFCandidates "used" by ChargedHadron candidates in the clean collection
256  bool isNeutralPFCand_overlap = false;
257  if (nextChargedHadron->algoIs(reco::PFRecoTauChargedHadron::kPFNeutralHadron)) {
258  for (std::set<reco::CandidatePtr>::const_iterator neutralPFCandInCleanCollection =
259  neutralPFCandsInCleanCollection.begin();
260  neutralPFCandInCleanCollection != neutralPFCandsInCleanCollection.end();
261  ++neutralPFCandInCleanCollection) {
262  if ((*neutralPFCandInCleanCollection) == nextChargedHadron->getChargedPFCandidate())
263  isNeutralPFCand_overlap = true;
264  }
265  }
266  if (verbosity_) {
267  edm::LogPrint("PFRecoTauChHProducer") << "isNeutralPFCand_overlap = " << isNeutralPFCand_overlap;
268  }
269  if (isNeutralPFCand_overlap)
270  continue;
271 
272  // find neutral PFCandidates that are not "used" by any ChargedHadron in the clean collection
273  std::vector<reco::CandidatePtr> uniqueNeutralPFCands;
274  std::set_difference(nextChargedHadron->getNeutralPFCandidates().begin(),
275  nextChargedHadron->getNeutralPFCandidates().end(),
276  neutralPFCandsInCleanCollection.begin(),
277  neutralPFCandsInCleanCollection.end(),
278  std::back_inserter(uniqueNeutralPFCands));
279 
280  if (uniqueNeutralPFCands.size() ==
281  nextChargedHadron->getNeutralPFCandidates()
282  .size()) { // all neutral PFCandidates are unique, add ChargedHadron candidate to clean collection
283  if (track)
284  tracksInCleanCollection.push_back(std::make_pair(track->eta(), track->phi()));
285  neutralPFCandsInCleanCollection.insert(nextChargedHadron->getNeutralPFCandidates().begin(),
286  nextChargedHadron->getNeutralPFCandidates().end());
287  if (verbosity_) {
288  edm::LogPrint("PFRecoTauChHProducer") << "--> adding nextChargedHadron to output collection.";
289  }
290  cleanedChargedHadrons.push_back(*nextChargedHadron);
291  } else { // remove overlapping neutral PFCandidates, reevaluate ranking criterion and process ChargedHadron candidate again
292  nextChargedHadron->neutralPFCandidates_.clear();
293  for (auto const& neutralPFCand : uniqueNeutralPFCands) {
294  nextChargedHadron->neutralPFCandidates_.push_back(neutralPFCand);
295  }
296  // update ChargedHadron four-momentum
297  reco::tau::setChargedHadronP4(*nextChargedHadron);
298  // reinsert ChargedHadron candidate into list of uncleaned candidates,
299  // at position according to new rank
300  ChargedHadronList::iterator insertionPoint = std::lower_bound(
301  uncleanedChargedHadrons.begin(), uncleanedChargedHadrons.end(), *nextChargedHadron, *predicate_);
302  if (verbosity_) {
303  edm::LogPrint("PFRecoTauChHProducer") << "--> removing non-unique neutral PFCandidates and reinserting "
304  "nextChargedHadron in uncleaned collection.";
305  }
306  uncleanedChargedHadrons.insert(insertionPoint, std::move(nextChargedHadron));
307  }
308  }
309 
310  if (verbosity_) {
311  print(cleanedChargedHadrons);
312  }
313 
314  // add ChargedHadron-to-jet association
315  pfJetChargedHadronAssociations->setValue(pfJet.key(), cleanedChargedHadrons);
316  }
317 
318  evt.put(std::move(pfJetChargedHadronAssociations));
319 }

References funct::abs(), builders_, PbPb_ZMuSkimMuonDPG_cff::deltaR, HGC3DClusterGenMatchSelector_cfi::dR, MillePedeFileConverter_cfg::e, cppFunctionSkipper::exception, edm::Ref< C, T, F >::get(), edm::Event::getByToken(), reco::PFCandidate::gsfTrackRef(), mps_fire::i, edm::Ref< C, T, F >::isNonnull(), singleTopDQM_cfi::jets, Jets_token, reco::PFRecoTauChargedHadron::kPFNeutralHadron, cuda_std::lower_bound(), maxJetAbsEta_, minJetPt_, moduleLabel_, eostools::move(), reco::PFCandidate::muonRef(), outputSelector_, pfJetBenchmark_cfi::pfJets, predicate_, print(), edm::Event::put(), mps_fire::result, reco::tau::setChargedHadronP4(), HLT_2018_cff::track, reco::PFCandidate::trackRef(), and verbosity_.

Member Data Documentation

◆ builders_

builderList PFRecoTauChargedHadronProducer::builders_
private

Definition at line 84 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ Jets_token

edm::EDGetTokenT<reco::JetView> PFRecoTauChargedHadronProducer::Jets_token
private

Definition at line 79 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ maxJetAbsEta_

double PFRecoTauChargedHadronProducer::maxJetAbsEta_
private

Definition at line 81 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ minJetPt_

double PFRecoTauChargedHadronProducer::minJetPt_
private

Definition at line 80 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ moduleLabel_

std::string PFRecoTauChargedHadronProducer::moduleLabel_
private

◆ outputSelector_

std::unique_ptr<StringCutObjectSelector<reco::PFRecoTauChargedHadron> > PFRecoTauChargedHadronProducer::outputSelector_
private

Definition at line 90 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ predicate_

std::unique_ptr<ChargedHadronPredicate> PFRecoTauChargedHadronProducer::predicate_
private

Definition at line 87 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

◆ rankers_

rankerList PFRecoTauChargedHadronProducer::rankers_
private

Definition at line 85 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and print().

◆ srcJets_

edm::InputTag PFRecoTauChargedHadronProducer::srcJets_
private

Definition at line 78 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer().

◆ verbosity_

int PFRecoTauChargedHadronProducer::verbosity_
private

Definition at line 93 of file PFRecoTauChargedHadronProducer.cc.

Referenced by PFRecoTauChargedHadronProducer(), and produce().

reco::PFCandidate::trackRef
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:408
ApeEstimator_cff.width
width
Definition: ApeEstimator_cff.py:24
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
PFRecoTauChargedHadronProducer::verbosity_
int verbosity_
Definition: PFRecoTauChargedHadronProducer.cc:93
muons2muons_cfi.chargedHadron
chargedHadron
Definition: muons2muons_cfi.py:26
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
edm::Ref::get
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
edm::VParameterSet
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:33
singleTopDQM_cfi.jets
jets
Definition: singleTopDQM_cfi.py:42
beamerCreator.create
def create(alignables, pedeDump, additionalData, outputFile, config)
Definition: beamerCreator.py:44
edm::Handle
Definition: AssociativeIterator.h:50
edm::ParameterSetDescription::addOptional
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:105
PFRecoTauChargedHadronProducer::Jets_token
edm::EDGetTokenT< reco::JetView > Jets_token
Definition: PFRecoTauChargedHadronProducer.cc:79
PFRecoTauChargedHadronProducer::builders_
builderList builders_
Definition: PFRecoTauChargedHadronProducer.cc:84
PFRecoTauChargedHadronProducer::ChargedHadronVector
boost::ptr_vector< reco::PFRecoTauChargedHadron > ChargedHadronVector
Definition: PFRecoTauChargedHadronProducer.cc:70
PFRecoTauChargedHadronProducer::ChargedHadronPredicate
reco::tau::RecoTauLexicographicalRanking< rankerList, reco::PFRecoTauChargedHadron > ChargedHadronPredicate
Definition: PFRecoTauChargedHadronProducer.cc:73
PFRecoTauChargedHadronProducer::moduleLabel_
std::string moduleLabel_
Definition: PFRecoTauChargedHadronProducer.cc:75
reco::PFCandidate::muonRef
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:421
reco::tau::setChargedHadronP4
void setChargedHadronP4(reco::PFRecoTauChargedHadron &chargedHadron, double scaleFactor_neutralPFCands=1.0)
Definition: pfRecoTauChargedHadronAuxFunctions.cc:31
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
PFRecoTauChargedHadronProducer::minJetPt_
double minJetPt_
Definition: PFRecoTauChargedHadronProducer.cc:80
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
PFRecoTauChargedHadronProducer::srcJets_
edm::InputTag srcJets_
Definition: PFRecoTauChargedHadronProducer.cc:78
reco::Track
Definition: Track.h:27
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
PFRecoTauChargedHadronProducer::outputSelector_
std::unique_ptr< StringCutObjectSelector< reco::PFRecoTauChargedHadron > > outputSelector_
Definition: PFRecoTauChargedHadronProducer.cc:90
cuda_std::lower_bound
__host__ constexpr __device__ RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
Definition: cudastdAlgorithm.h:27
PbPb_ZMuSkimMuonDPG_cff.deltaR
deltaR
Definition: PbPb_ZMuSkimMuonDPG_cff.py:63
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
cppFunctionSkipper.exception
exception
Definition: cppFunctionSkipper.py:10
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
reco::PFCandidate::gsfTrackRef
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:440
edm::LogError
Definition: MessageLogger.h:183
PFRecoTauChargedHadronProducer::print
void print(const T &chargedHadrons)
Definition: PFRecoTauChargedHadronProducer.cc:322
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
PFRecoTauChargedHadronProducer::rankers_
rankerList rankers_
Definition: PFRecoTauChargedHadronProducer.cc:85
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:132
edm::LogPrint
Definition: MessageLogger.h:342
get
#define get
edm::RefToBaseVector< reco::Jet >
looper.cfg
cfg
Definition: looper.py:297
eostools.move
def move(src, dest)
Definition: eostools.py:511
reco::PFRecoTauChargedHadron::kPFNeutralHadron
Definition: PFRecoTauChargedHadron.h:32
StringCutObjectSelector< reco::PFRecoTauChargedHadron >
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
mps_fire.result
result
Definition: mps_fire.py:303
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HGC3DClusterGenMatchSelector_cfi.dR
dR
Definition: HGC3DClusterGenMatchSelector_cfi.py:7
PFRecoTauChargedHadronProducer::predicate_
std::unique_ptr< ChargedHadronPredicate > predicate_
Definition: PFRecoTauChargedHadronProducer.cc:87
edm::InputTag
Definition: InputTag.h:15
PFRecoTauChargedHadronProducer::maxJetAbsEta_
double maxJetAbsEta_
Definition: PFRecoTauChargedHadronProducer.cc:81
pfJetBenchmark_cfi.pfJets
pfJets
Definition: pfJetBenchmark_cfi.py:4
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
PFRecoTauChargedHadronProducer::ChargedHadronList
boost::ptr_list< reco::PFRecoTauChargedHadron > ChargedHadronList
Definition: PFRecoTauChargedHadronProducer.cc:71
edm::RefToBaseProd
Definition: RefToBase.h:65
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
beam_dqm_sourceclient-live_cfg.qualityCuts
qualityCuts
Definition: beam_dqm_sourceclient-live_cfg.py:118