CMS 3D CMS Logo

PFRecoTauChargedHadronProducer.cc
Go to the documentation of this file.
1 /*
2  * PFRecoTauChargedHadronProducer
3  *
4  * Author: Christian Veelken, LLR
5  *
6  * Associates reconstructed ChargedHadrons to PFJets. The ChargedHadrons are built using one
7  * or more RecoTauBuilder plugins. Any overlaps (ChargedHadrons sharing tracks)
8  * are removed, with the best ChargedHadron candidates taken. The 'best' are defined
9  * via the input list of PFRecoTauChargedHadronQualityPlugins, which form a
10  * lexicograpical ranking.
11  *
12  */
13 
18 
21 
24 
29 
40 
42 
43 #include <boost/ptr_container/ptr_vector.hpp>
44 #include <boost/ptr_container/ptr_list.hpp>
45 
46 #include <string>
47 #include <vector>
48 #include <list>
49 #include <set>
50 #include <algorithm>
51 #include <functional>
52 #include <cmath>
53 
55 public:
58 
61  void produce(edm::Event& evt, const edm::EventSetup& es) override;
62  template <typename T>
63  void print(const T& chargedHadrons);
64 
65  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
66 
67 private:
68  typedef boost::ptr_vector<Builder> builderList;
69  typedef boost::ptr_vector<Ranker> rankerList;
70  typedef boost::ptr_vector<reco::PFRecoTauChargedHadron> ChargedHadronVector;
71  typedef boost::ptr_list<reco::PFRecoTauChargedHadron> ChargedHadronList;
72 
74 
76 
77  // input jet collection
80  double minJetPt_;
81  double maxJetAbsEta_;
82 
83  // plugins for building and ranking ChargedHadron candidates
86 
87  std::unique_ptr<ChargedHadronPredicate> predicate_;
88 
89  // output selector
90  std::unique_ptr<StringCutObjectSelector<reco::PFRecoTauChargedHadron>> outputSelector_;
91 
92  // flag to enable/disable debug print-out
94 };
95 
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 }
134 
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 }
320 
321 template <typename T>
322 void PFRecoTauChargedHadronProducer::print(const T& chargedHadrons) {
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 }
335 
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 }
455 
457 
ConfigurationDescriptions.h
reco::PFCandidate::trackRef
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:408
ApeEstimator_cff.width
width
Definition: ApeEstimator_cff.py:24
reco::tau::PFRecoTauChargedHadronBuilderPlugin
Definition: PFRecoTauChargedHadronPlugins.h:35
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
Muon.h
PFRecoTauChargedHadronProducer::verbosity_
int verbosity_
Definition: PFRecoTauChargedHadronProducer.cc:93
MessageLogger.h
PFRecoTauChargedHadronPlugins.h
PFCandidate.h
muons2muons_cfi.chargedHadron
chargedHadron
Definition: muons2muons_cfi.py:26
edm::EDGetTokenT
Definition: EDGetToken.h:33
PFRecoTauChargedHadronProducer::Ranker
reco::tau::PFRecoTauChargedHadronQualityPlugin Ranker
Definition: PFRecoTauChargedHadronProducer.cc:57
PFJetChargedHadronAssociation.h
PFJetCollection.h
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
EDProducer.h
singleTopDQM_cfi.jets
jets
Definition: singleTopDQM_cfi.py:42
beamerCreator.create
def create(alignables, pedeDump, additionalData, outputFile, config)
Definition: beamerCreator.py:44
Association.h
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
deltaR.h
PFRecoTauChargedHadronProducer::ChargedHadronPredicate
reco::tau::RecoTauLexicographicalRanking< rankerList, reco::PFRecoTauChargedHadron > ChargedHadronPredicate
Definition: PFRecoTauChargedHadronProducer.cc:73
PFRecoTauChargedHadronProducer::moduleLabel_
std::string moduleLabel_
Definition: PFRecoTauChargedHadronProducer.cc:75
MakerMacros.h
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
Track.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
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
PFRecoTauChargedHadronProducer::produce
void produce(edm::Event &evt, const edm::EventSetup &es) override
Definition: PFRecoTauChargedHadronProducer.cc:135
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
RecoTauCommonUtilities.h
ParameterSetDescription.h
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
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
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
Event.h
edm::ParameterSetDescription::addVPSet
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
Definition: ParameterSetDescription.h:149
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
reco::tau::RecoTauLexicographicalRanking
Definition: RecoTauCleaningTools.h:9
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
PFRecoTauChargedHadronProducer::rankers_
rankerList rankers_
Definition: PFRecoTauChargedHadronProducer.cc:85
PFRecoTauChargedHadronProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: PFRecoTauChargedHadronProducer.cc:336
PFRecoTauChargedHadronProducer::~PFRecoTauChargedHadronProducer
~PFRecoTauChargedHadronProducer() override
Definition: PFRecoTauChargedHadronProducer.cc:60
PFRecoTauChargedHadronProducer::Builder
reco::tau::PFRecoTauChargedHadronBuilderPlugin Builder
Definition: PFRecoTauChargedHadronProducer.cc:56
GsfTrack.h
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
edm::stream::EDProducer
Definition: EDProducer.h:38
PFRecoTauChargedHadronProducer::PFRecoTauChargedHadronProducer
PFRecoTauChargedHadronProducer(const edm::ParameterSet &cfg)
Definition: PFRecoTauChargedHadronProducer.cc:96
edm::EventSetup
Definition: EventSetup.h:57
PFRecoTauChargedHadronProducer
Definition: PFRecoTauChargedHadronProducer.cc:54
get
#define get
edm::RefToBaseVector< reco::Jet >
looper.cfg
cfg
Definition: looper.py:297
RecoTauCleaningTools.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
StringCutObjectSelector.h
reco::PFRecoTauChargedHadron::kPFNeutralHadron
Definition: PFRecoTauChargedHadron.h:32
reco::tau::PFRecoTauChargedHadronQualityPlugin
Definition: PFRecoTauChargedHadronPlugins.h:51
T
long double T
Definition: Basic3DVectorLD.h:48
PFRecoTauChargedHadronProducer::builderList
boost::ptr_vector< Builder > builderList
Definition: PFRecoTauChargedHadronProducer.cc:68
StringCutObjectSelector< reco::PFRecoTauChargedHadron >
EventSetup.h
Exception.h
pfRecoTauChargedHadronAuxFunctions.h
PFRecoTauChargedHadron.h
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
ParameterSet.h
PFRecoTauChargedHadronProducer::predicate_
std::unique_ptr< ChargedHadronPredicate > predicate_
Definition: PFRecoTauChargedHadronProducer.cc:87
edm::Event
Definition: Event.h:73
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
PFRecoTauChargedHadronProducer::rankerList
boost::ptr_vector< Ranker > rankerList
Definition: PFRecoTauChargedHadronProducer.cc:69
PFCandidateFwd.h
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:115