CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
RecoTauCleaner.cc
Go to the documentation of this file.
1 /*
2  * RecoTauCleaner
3  *
4  * Author: Evan K. Friis, UC Davis
5  *
6  * Given a input collection of PFTaus, produces an output collection of PFTaus
7  * such that no two PFTaus come from the same PFJet. If multiple taus in the
8  * collection come from the same PFJet, (dirty) they are ordered according to a
9  * list of cleaners. Each cleaner is a RecoTauCleanerPlugin, and returns a
10  * double corresponding to the 'quality' for a given tau - an example would be
11  * the level of isolation. The set of dirty taus is then ranked
12  * lexicographically by these cleaners, and the best one is placed in the
13  * output collection.
14  *
15  */
16 
17 #include <boost/ptr_container/ptr_vector.hpp>
18 #include <algorithm>
19 #include <memory>
20 
25 
28 
32 
39 
41 
42 template <typename Prod>
46  std::shared_ptr<Cleaner> plugin_;
47  float tolerance_;
48  };
49  typedef std::vector<std::unique_ptr<CleanerEntryType>> CleanerList;
50  // Define our output type - i.e. reco::PFTau OR reco::PFTauRef
51  typedef typename Prod::value_type output_type;
52 
53  // Predicate that determines if two taus 'overlap' i.e. share a base PFJet
55  public:
56  bool operator()(const reco::PFTauRef& a, const reco::PFTauRef& b) const { return (a->jetRef() == b->jetRef()); }
57  };
58 
59 public:
60  explicit RecoTauCleanerImpl(const edm::ParameterSet& pset);
61  ~RecoTauCleanerImpl() override;
62  void produce(edm::Event& evt, const edm::EventSetup& es) override;
63 
64  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
65 
66 private:
69  // Optional selection on the output of the taus
70  std::unique_ptr<const StringCutObjectSelector<reco::PFTau>> outputSelector_;
73 };
74 
75 template <typename Prod>
77  tauSrc_ = pset.getParameter<edm::InputTag>("src");
78  tau_token = consumes<reco::PFTauCollection>(tauSrc_);
79  // Build our list of quality plugins
80  typedef std::vector<edm::ParameterSet> VPSet;
81  // Get each of our tau builders
82  const VPSet& cleaners = pset.getParameter<VPSet>("cleaners");
83  for (VPSet::const_iterator cleanerPSet = cleaners.begin(); cleanerPSet != cleaners.end(); ++cleanerPSet) {
84  auto cleanerEntry = std::make_unique<CleanerEntryType>();
85  // Get plugin name
86  const std::string& pluginType = cleanerPSet->getParameter<std::string>("plugin");
87  // Build the plugin
88  cleanerEntry->plugin_ = RecoTauCleanerPluginFactory::get()->create(pluginType, *cleanerPSet, consumesCollector());
89  cleanerEntry->tolerance_ = cleanerPSet->getParameter<double>("tolerance");
90  cleaners_.emplace_back(std::move(cleanerEntry));
91  }
92 
93  // Check if we want to apply a final output selection
94  std::string selection = pset.getParameter<std::string>("outputSelection");
95  if (!selection.empty()) {
96  outputSelector_ = std::make_unique<StringCutObjectSelector<reco::PFTau>>(selection);
97  }
98 
99  // Enable/disable debug output
100  verbosity_ = pset.getParameter<int>("verbosity");
101 
102  // Build the predicate that ranks our taus.
103  produces<Prod>();
104 }
105 
106 template <typename Prod>
108 
109 namespace {
110  // Template to convert a ref to desired output type
111  template <typename T>
112  const T convert(const reco::PFTauRef& tau);
113 
114  //template<> const edm::RefToBase<reco::PFTau>
115  //convert<edm::RefToBase<reco::PFTau> >(const reco::PFTauRef &tau) {
116  // return edm::RefToBase<reco::PFTau>(tau);
117  //}
118 
119  template <>
120  const reco::PFTauRef convert<reco::PFTauRef>(const reco::PFTauRef& tau) {
121  return tau;
122  }
123 
124  template <>
125  const reco::PFTau convert<reco::PFTau>(const reco::PFTauRef& tau) {
126  return *tau;
127  }
128 } // namespace
129 
130 namespace {
131  template <typename T>
132  std::string format_vT(const std::vector<T>& vT) {
133  std::ostringstream os;
134  os << "{ ";
135  unsigned numEntries = vT.size();
136  for (unsigned iEntry = 0; iEntry < numEntries; ++iEntry) {
137  os << vT[iEntry];
138  if (iEntry < (numEntries - 1))
139  os << ", ";
140  }
141  os << " }";
142  return os.str();
143  }
144 
145  struct PFTauRankType {
146  PFTauRankType(const reco::PFTauRef& tauRef) : idx_(tauRef.key()), tauRef_(tauRef) {}
147  ~PFTauRankType() {}
148  void print(const std::string& label) const {
149  std::cout << label << " (" << tauRef_.id() << ":" << tauRef_.key() << ", idx = " << idx_ << "):";
150  assert(tauRef_.key() == idx_);
151  std::cout << " Pt = " << tauRef_->pt() << ", eta = " << tauRef_->eta() << ", phi = " << tauRef_->phi()
152  << ", mass = " << tauRef_->mass() << " (decayMode = " << tauRef_->decayMode() << ")";
153  std::cout << std::endl;
154  std::cout << "associated jet:";
155  if (tauRef_->jetRef().isNonnull()) {
156  std::cout << " Pt = " << tauRef_->jetRef()->pt() << ", eta = " << tauRef_->jetRef()->eta()
157  << ", phi = " << tauRef_->jetRef()->phi() << ", mass = " << tauRef_->jetRef()->mass()
158  << ", area = " << tauRef_->jetRef()->jetArea();
159  } else
160  std::cout << " N/A";
161  std::cout << std::endl;
162  const std::vector<reco::PFRecoTauChargedHadron>& signalTauChargedHadronCandidates =
163  tauRef_->signalTauChargedHadronCandidates();
164  size_t numChargedHadrons = signalTauChargedHadronCandidates.size();
165  for (size_t iChargedHadron = 0; iChargedHadron < numChargedHadrons; ++iChargedHadron) {
166  const reco::PFRecoTauChargedHadron& chargedHadron = signalTauChargedHadronCandidates.at(iChargedHadron);
167  std::cout << " chargedHadron #" << iChargedHadron << ":" << std::endl;
168  chargedHadron.print(std::cout);
169  }
170  const std::vector<reco::RecoTauPiZero>& signalPiZeroCandidates = tauRef_->signalPiZeroCandidates();
171  size_t numPiZeros = signalPiZeroCandidates.size();
172  std::cout << "signalPiZeroCandidates = " << numPiZeros << std::endl;
173  for (size_t iPiZero = 0; iPiZero < numPiZeros; ++iPiZero) {
174  const reco::RecoTauPiZero& piZero = signalPiZeroCandidates.at(iPiZero);
175  std::cout << " piZero #" << iPiZero << ": Pt = " << piZero.pt() << ", eta = " << piZero.eta()
176  << ", phi = " << piZero.phi() << ", mass = " << piZero.mass() << std::endl;
177  }
178  const auto& isolationCands = tauRef_->isolationCands();
179  size_t numCands = isolationCands.size();
180  std::cout << "isolationCands = " << numCands << std::endl;
181  for (size_t iCand = 0; iCand < numCands; ++iCand) {
182  const auto& cand = isolationCands.at(iCand);
183  std::cout << " pfCand #" << iCand << " (" << cand.id() << ":" << cand.key() << "):"
184  << " Pt = " << cand->pt() << ", eta = " << cand->eta() << ", phi = " << cand->phi() << std::endl;
185  }
186  std::cout << " ranks = " << format_vT(ranks_) << std::endl;
187  std::cout << " tolerances = " << format_vT(tolerances_) << std::endl;
188  }
189  size_t idx_;
190  reco::PFTauRef tauRef_;
191  size_t N_;
192  std::vector<float> ranks_;
193  std::vector<float> tolerances_;
194  };
195 
196  bool isHigherRank(const PFTauRankType* tau1, const PFTauRankType* tau2) {
197  //std::cout << "<isHigherRank>:" << std::endl;
198  //std::cout << "tau1 @ " << tau1;
199  //tau1->print("");
200  //std::cout << "tau2 @ " << tau2;
201  //tau2->print("");
202  assert(tau1->N_ == tau1->ranks_.size());
203  assert(tau1->N_ == tau2->ranks_.size());
204  assert(tau1->N_ == tau1->tolerances_.size());
205  for (size_t i = 0; i < tau1->N_; ++i) {
206  const float& val1 = tau1->ranks_[i];
207  const float& val2 = tau2->ranks_[i];
208  double av = 0.5 * (val1 + val2);
209  double thresh = av * tau1->tolerances_[i];
210  if (val1 < (val2 - thresh))
211  return true;
212  else if (val2 < (val1 - thresh))
213  return false;
214  }
215  return true;
216  }
217 } // namespace
218 
219 template <typename Prod>
221  if (verbosity_) {
222  std::cout << "<RecoTauCleanerImpl::produce>:" << std::endl;
223  }
224 
225  // Update all our cleaners with the event info if they need it
226  for (typename CleanerList::iterator cleaner = cleaners_.begin(); cleaner != cleaners_.end(); ++cleaner) {
227  (*cleaner)->plugin_->setup(evt, es);
228  }
229 
230  // Get the input collection of all taus. Some are from the same PFJet. We must clean them.
232  evt.getByToken(tau_token, inputTaus);
233 
234  // Sort the input tau refs according to our predicate
235  std::list<PFTauRankType*> rankedTaus;
236  size_t N = inputTaus->size();
237  for (size_t idx = 0; idx < N; ++idx) {
238  reco::PFTauRef inputRef(inputTaus, idx);
239  PFTauRankType* rankedTau = new PFTauRankType(inputRef);
240  rankedTau->N_ = cleaners_.size();
241  rankedTau->ranks_.reserve(rankedTau->N_);
242  rankedTau->tolerances_.reserve(rankedTau->N_);
243  for (typename CleanerList::const_iterator cleaner = cleaners_.begin(); cleaner != cleaners_.end(); ++cleaner) {
244  rankedTau->ranks_.push_back((*(*cleaner)->plugin_)(inputRef));
245  rankedTau->tolerances_.push_back((*cleaner)->tolerance_);
246  }
247  if (verbosity_) {
248  std::ostringstream os;
249  os << "rankedTau #" << idx;
250  rankedTau->print(os.str());
251  }
252  rankedTaus.push_back(rankedTau);
253  }
254  rankedTaus.sort(isHigherRank);
255 
256  // Make an STL algorithm friendly vector of refs
257  typedef std::vector<reco::PFTauRef> PFTauRefs;
258  PFTauRefs dirty(inputTaus->size());
259  size_t idx_sorted = 0;
260  for (std::list<PFTauRankType*>::const_iterator rankedTau = rankedTaus.begin(); rankedTau != rankedTaus.end();
261  ++rankedTau) {
262  dirty[idx_sorted] = (*rankedTau)->tauRef_;
263  if (verbosity_) {
264  std::cout << "dirty[" << idx_sorted << "] = " << dirty[idx_sorted].id() << ":" << dirty[idx_sorted].key()
265  << std::endl;
266  }
267  delete (*rankedTau);
268  ++idx_sorted;
269  }
270 
271  // Clean the taus, ensuring that only one tau per jet is produced
272  PFTauRefs cleanTaus = reco::tau::cleanOverlaps<PFTauRefs, RemoveDuplicateJets>(dirty);
273 
274  // create output collection
275  auto output = std::make_unique<Prod>();
276  //output->reserve(cleanTaus.size());
277 
278  // Copy clean refs into output
279  for (PFTauRefs::const_iterator tau = cleanTaus.begin(); tau != cleanTaus.end(); ++tau) {
280  // If we are applying an output selection, check if it passes
281  bool selected = true;
282  if (outputSelector_.get() && !(*outputSelector_)(**tau)) {
283  selected = false;
284  }
285  if (selected) {
286  output->push_back(convert<output_type>(*tau));
287  }
288  }
289  evt.put(std::move(output));
290 }
291 
294 
295 template <>
297  // RecoTauCleaner
299  desc.add<std::string>("outputSelection", "");
300  {
301  // this description is the validator for all PSets in the cleaners VPSet passed to the plugin from the python configuration
302  edm::ParameterSetDescription vps_description_for_cleaners;
303  // the common parameters for all cleaners
304  // no default value is provided -- the user has to provide the values for these parameters
305  vps_description_for_cleaners.add<std::string>("plugin");
306  vps_description_for_cleaners.add<double>("tolerance", 0);
307  vps_description_for_cleaners.add<std::string>("name");
308 
309  // the following parameters are not common for all cleaners, they are needed for few PSets, therefore they are added as optional
310  // these optional parameters are used in the default cleaners vector
311  vps_description_for_cleaners.addOptional<int>("passForCharge");
312  vps_description_for_cleaners.addOptional<double>("selectionFailValue");
313  vps_description_for_cleaners.addOptional<std::vector<unsigned int>>("nprongs");
314  vps_description_for_cleaners.addOptional<edm::InputTag>("src");
315  vps_description_for_cleaners.addOptional<double>("minTrackPt");
316  vps_description_for_cleaners.addOptional<std::string>("selection");
317  vps_description_for_cleaners.addOptional<std::string>("selectionPassFunction");
318  // more PSets for cleaners can be found in
319  // RecoTauTag/RecoTau/python/RecoTauCleanerPlugins.py
320  // however, at this moment (2018-11-09) they do not have any new optional parameters
321 
322  // the cleaner defaults, as in RecoTauTag/RecoTau/python/RecoTauCleaner_cfi.py
323  std::vector<edm::ParameterSet> default_cleaners;
324  default_cleaners.reserve(7);
325  {
326  edm::ParameterSet cleaner_Charge;
327  cleaner_Charge.addParameter<std::string>("name", "Charge");
328  cleaner_Charge.addParameter<std::string>("plugin", "RecoTauChargeCleanerPlugin");
329  cleaner_Charge.addParameter<int>("passForCharge", 1);
330  cleaner_Charge.addParameter<double>("selectionFailValue", 0);
331  cleaner_Charge.addParameter<std::vector<unsigned int>>("nprongs",
332  {
333  1,
334  3,
335  });
336  cleaner_Charge.addParameter<double>("tolerance", 0);
337  default_cleaners.push_back(cleaner_Charge);
338  }
339  {
340  edm::ParameterSet temp2;
341  temp2.addParameter<std::string>("name", "HPS_Select");
342  temp2.addParameter<std::string>("plugin", "RecoTauDiscriminantCleanerPlugin");
343  temp2.addParameter<edm::InputTag>("src", edm::InputTag("hpsSelectionDiscriminator"));
344  temp2.addParameter<double>("tolerance", 0);
345  default_cleaners.push_back(temp2);
346  }
347  {
348  edm::ParameterSet temp2;
349  temp2.addParameter<std::string>("name", "killSoftTwoProngTaus");
350  temp2.addParameter<std::string>("plugin", "RecoTauSoftTwoProngTausCleanerPlugin");
351  temp2.addParameter<double>("minTrackPt", 5.0);
352  temp2.addParameter<double>("tolerance", 0);
353  default_cleaners.push_back(temp2);
354  }
355  {
356  edm::ParameterSet temp2;
357  temp2.addParameter<std::string>("name", "ChargedHadronMultiplicity");
358  temp2.addParameter<std::string>("plugin", "RecoTauChargedHadronMultiplicityCleanerPlugin");
359  temp2.addParameter<double>("tolerance", 0);
360  default_cleaners.push_back(temp2);
361  }
362  {
363  edm::ParameterSet temp2;
364  temp2.addParameter<std::string>("name", "Pt");
365  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
366  temp2.addParameter<std::string>("selectionPassFunction", "-pt()");
367  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
368  temp2.addParameter<double>("selectionFailValue", 1000.0);
369  temp2.addParameter<double>("tolerance", 0.01);
370  default_cleaners.push_back(temp2);
371  }
372  {
373  edm::ParameterSet temp2;
374  temp2.addParameter<std::string>("name", "StripMultiplicity");
375  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
376  temp2.addParameter<std::string>("selectionPassFunction", "-signalPiZeroCandidates().size()");
377  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
378  temp2.addParameter<double>("selectionFailValue", 1000.0);
379  temp2.addParameter<double>("tolerance", 0);
380  default_cleaners.push_back(temp2);
381  }
382  {
383  edm::ParameterSet temp2;
384  temp2.addParameter<std::string>("name", "CombinedIsolation");
385  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
386  temp2.addParameter<std::string>("selectionPassFunction",
387  "isolationPFChargedHadrCandsPtSum() + isolationPFGammaCandsEtSum()");
388  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
389  temp2.addParameter<double>("selectionFailValue", 1000.0);
390  temp2.addParameter<double>("tolerance", 0);
391  default_cleaners.push_back(temp2);
392  }
393 
394  desc.addVPSet("cleaners", vps_description_for_cleaners, default_cleaners);
395  }
396 
397  desc.add<int>("verbosity", 0);
398  desc.add<edm::InputTag>("src", edm::InputTag("combinatoricRecoTaus"));
399  descriptions.add("RecoTauCleaner", desc);
400 }
401 
402 template <>
404  // there was no cfi file for this plugin
405 }
406 
408 
ConfigurationDescriptions.h
RecoTauCleanerImpl::Cleaner
reco::tau::RecoTauCleanerPlugin Cleaner
Definition: RecoTauCleaner.cc:44
mps_fire.i
i
Definition: mps_fire.py:428
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
PFTauFwd.h
metsig::tau
Definition: SignAlgoResolutions.h:49
PFCandidate.h
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
RecoTauCleanerImpl::tau_token
edm::EDGetTokenT< reco::PFTauCollection > tau_token
Definition: RecoTauCleaner.cc:71
edm::EDGetTokenT< reco::PFTauCollection >
gather_cfg.cout
cout
Definition: gather_cfg.py:144
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
cms::cuda::assert
assert(be >=bs)
EDProducer.h
reco::PFTau
Definition: PFTau.h:36
reco::LeafCandidate::pt
double pt() const final
transverse momentum
Definition: LeafCandidate.h:146
RecoTauCleanerImpl::verbosity_
int verbosity_
Definition: RecoTauCleaner.cc:72
edm::Handle
Definition: AssociativeIterator.h:50
RecoTauPiZero.h
edm::ParameterSetDescription::addOptional
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:105
HPSPFTauProducerPuppi_cfi.chargedHadron
chargedHadron
Definition: HPSPFTauProducerPuppi_cfi.py:7
reco::PFRecoTauChargedHadron
Definition: PFRecoTauChargedHadron.h:23
edm::Ref< PFTauCollection >
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
RecoTauRefCleaner
RecoTauCleanerImpl< reco::PFTauRefVector > RecoTauRefCleaner
Definition: RecoTauCleaner.cc:293
MakerMacros.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
RecoTauCleanerImpl::CleanerEntryType::plugin_
std::shared_ptr< Cleaner > plugin_
Definition: RecoTauCleaner.cc:46
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
N
#define N
Definition: blowfish.cc:9
RecoTauCleanerImpl::CleanerEntryType::tolerance_
float tolerance_
Definition: RecoTauCleaner.cc:47
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
RecoTauCommonUtilities.h
ParameterSetDescription.h
b
double b
Definition: hdecay.h:118
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
edm::numEntries
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
RecoTauCleanerImpl::RemoveDuplicateJets
Definition: RecoTauCleaner.cc:54
fileCollector.convert
def convert(infile, ofile)
Definition: fileCollector.py:47
edm::ParameterSet
Definition: ParameterSet.h:47
a
double a
Definition: hdecay.h:119
RecoTauCleanerImpl::RemoveDuplicateJets::operator()
bool operator()(const reco::PFTauRef &a, const reco::PFTauRef &b) const
Definition: RecoTauCleaner.cc:56
RecoTauCleanerImpl::cleaners_
CleanerList cleaners_
Definition: RecoTauCleaner.cc:68
reco::LeafCandidate::mass
double mass() const final
mass
Definition: LeafCandidate.h:131
Event.h
reco::LeafCandidate::eta
double eta() const final
momentum pseudorapidity
Definition: LeafCandidate.h:152
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:135
cand
Definition: decayParser.h:32
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::stream::EDProducer
Definition: EDProducer.h:36
edm::EventSetup
Definition: EventSetup.h:58
RecoTauCleanerImpl::produce
void produce(edm::Event &evt, const edm::EventSetup &es) override
Definition: RecoTauCleaner.cc:220
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
get
#define get
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
GOODCOLL_filter_cfg.thresh
thresh
Definition: GOODCOLL_filter_cfg.py:74
RecoTauBuilderPlugins.h
RecoTauCleaningTools.h
reco::RecoTauPiZero
Definition: RecoTauPiZero.h:7
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
HistogramManager_cfi.VPSet
def VPSet(*args)
Definition: HistogramManager_cfi.py:404
eostools.move
def move(src, dest)
Definition: eostools.py:511
RecoTauCleanerImpl::CleanerEntryType
Definition: RecoTauCleaner.cc:45
StringCutObjectSelector.h
reco::LeafCandidate::phi
double phi() const final
momentum azimuthal angle
Definition: LeafCandidate.h:148
RecoTauCleanerImpl::output_type
Prod::value_type output_type
Definition: RecoTauCleaner.cc:51
RecoTauCleanerImpl::~RecoTauCleanerImpl
~RecoTauCleanerImpl() override
Definition: RecoTauCleaner.cc:107
T
long double T
Definition: Basic3DVectorLD.h:48
jets_cff.tau1
tau1
Definition: jets_cff.py:439
jets_cff.tau2
tau2
Definition: jets_cff.py:440
RecoTauCleanerImpl::RecoTauCleanerImpl
RecoTauCleanerImpl(const edm::ParameterSet &pset)
Definition: RecoTauCleaner.cc:76
PFTau.h
RecoTauCleanerImpl
Definition: RecoTauCleaner.cc:43
EventSetup.h
reco::tau::RecoTauCleanerPlugin
Definition: RecoTauBuilderPlugins.h:116
PFRecoTauChargedHadron.h
ParameterSet.h
edm::Event
Definition: Event.h:73
crabWrapper.key
key
Definition: crabWrapper.py:19
RecoTauCleanerImpl::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::InputTag
Definition: InputTag.h:15
label
const char * label
Definition: PFTauDecayModeTools.cc:11
HLT_FULL_cff.cleaners
cleaners
Definition: HLT_FULL_cff.py:33470
RecoTauCleaner
RecoTauCleanerImpl< reco::PFTauCollection > RecoTauCleaner
Definition: RecoTauCleaner.cc:292
RecoTauCleanerImpl::CleanerList
std::vector< std::unique_ptr< CleanerEntryType > > CleanerList
Definition: RecoTauCleaner.cc:49
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
PFCandidateFwd.h
RecoTauCleanerImpl::outputSelector_
std::unique_ptr< const StringCutObjectSelector< reco::PFTau > > outputSelector_
Definition: RecoTauCleaner.cc:70
RecoTauCleanerImpl::tauSrc_
edm::InputTag tauSrc_
Definition: RecoTauCleaner.cc:67