CMS 3D CMS Logo

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

Classes

struct  CleanerEntryType
 
class  RemoveDuplicateJets
 

Public Member Functions

template<>
void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
template<>
void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
void produce (edm::Event &evt, const edm::EventSetup &es) override
 
 RecoTauCleanerImpl (const edm::ParameterSet &pset)
 
 ~RecoTauCleanerImpl () 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 reco::tau::RecoTauCleanerPlugin Cleaner
 
typedef std::vector< std::unique_ptr< CleanerEntryType > > CleanerList
 
typedef Prod::value_type output_type
 

Private Attributes

CleanerList cleaners_
 
std::unique_ptr< const StringCutObjectSelector< reco::PFTau > > outputSelector_
 
edm::EDGetTokenT< reco::PFTauCollectiontau_token
 
edm::InputTag tauSrc_
 
int verbosity_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

template<typename Prod>
class RecoTauCleanerImpl< Prod >

Definition at line 44 of file RecoTauCleaner.cc.

Member Typedef Documentation

◆ Cleaner

template<typename Prod >
typedef reco::tau::RecoTauCleanerPlugin RecoTauCleanerImpl< Prod >::Cleaner
private

Definition at line 45 of file RecoTauCleaner.cc.

◆ CleanerList

template<typename Prod >
typedef std::vector<std::unique_ptr<CleanerEntryType> > RecoTauCleanerImpl< Prod >::CleanerList
private

Definition at line 50 of file RecoTauCleaner.cc.

◆ output_type

template<typename Prod >
typedef Prod::value_type RecoTauCleanerImpl< Prod >::output_type
private

Definition at line 52 of file RecoTauCleaner.cc.

Constructor & Destructor Documentation

◆ RecoTauCleanerImpl()

template<typename Prod >
RecoTauCleanerImpl< Prod >::RecoTauCleanerImpl ( const edm::ParameterSet pset)
explicit

Definition at line 77 of file RecoTauCleaner.cc.

77  {
78  tauSrc_ = pset.getParameter<edm::InputTag>("src");
79  tau_token = consumes<reco::PFTauCollection>(tauSrc_);
80  // Build our list of quality plugins
81  typedef std::vector<edm::ParameterSet> VPSet;
82  // Get each of our tau builders
83  const VPSet& cleaners = pset.getParameter<VPSet>("cleaners");
84  for (VPSet::const_iterator cleanerPSet = cleaners.begin(); cleanerPSet != cleaners.end(); ++cleanerPSet) {
85  auto cleanerEntry = std::make_unique<CleanerEntryType>();
86  // Get plugin name
87  const std::string& pluginType = cleanerPSet->getParameter<std::string>("plugin");
88  // Build the plugin
89  cleanerEntry->plugin_ = RecoTauCleanerPluginFactory::get()->create(pluginType, *cleanerPSet, consumesCollector());
90  cleanerEntry->tolerance_ = cleanerPSet->getParameter<double>("tolerance");
91  cleaners_.emplace_back(std::move(cleanerEntry));
92  }
93 
94  // Check if we want to apply a final output selection
95  std::string selection = pset.getParameter<std::string>("outputSelection");
96  if (!selection.empty()) {
97  outputSelector_ = std::make_unique<StringCutObjectSelector<reco::PFTau>>(selection);
98  }
99 
100  // Enable/disable debug output
101  verbosity_ = pset.getParameter<int>("verbosity");
102 
103  // Build the predicate that ranks our taus.
104  produces<Prod>();
105 }

References HLT_2018_cff::cleaners, get, eostools::move(), muonDTDigis_cfi::pset, corrVsCorr::selection, AlCaHLTBitMon_QueryRunRegistry::string, and HistogramManager_cfi::VPSet().

◆ ~RecoTauCleanerImpl()

template<typename Prod >
RecoTauCleanerImpl< Prod >::~RecoTauCleanerImpl ( )
override

Definition at line 108 of file RecoTauCleaner.cc.

108 {}

Member Function Documentation

◆ fillDescriptions() [1/3]

template<typename Prod >
static void RecoTauCleanerImpl< Prod >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

◆ fillDescriptions() [2/3]

template<>
void RecoTauCleanerImpl< reco::PFTauCollection >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)

Definition at line 297 of file RecoTauCleaner.cc.

297  {
298  // RecoTauCleaner
300  desc.add<std::string>("outputSelection", "");
301  {
302  // this description is the validator for all PSets in the cleaners VPSet passed to the plugin from the python configuration
303  edm::ParameterSetDescription vps_description_for_cleaners;
304  // the common parameters for all cleaners
305  // no default value is provided -- the user has to provide the values for these parameters
306  vps_description_for_cleaners.add<std::string>("plugin");
307  vps_description_for_cleaners.add<double>("tolerance", 0);
308  vps_description_for_cleaners.add<std::string>("name");
309 
310  // the following parameters are not common for all cleaners, they are needed for few PSets, therefore they are added as optional
311  // these optional parameters are used in the default cleaners vector
312  vps_description_for_cleaners.addOptional<int>("passForCharge");
313  vps_description_for_cleaners.addOptional<double>("selectionFailValue");
314  vps_description_for_cleaners.addOptional<std::vector<unsigned int>>("nprongs");
315  vps_description_for_cleaners.addOptional<edm::InputTag>("src");
316  vps_description_for_cleaners.addOptional<double>("minTrackPt");
317  vps_description_for_cleaners.addOptional<std::string>("selection");
318  vps_description_for_cleaners.addOptional<std::string>("selectionPassFunction");
319  // more PSets for cleaners can be found in
320  // RecoTauTag/RecoTau/python/RecoTauCleanerPlugins.py
321  // however, at this moment (2018-11-09) they do not have any new optional parameters
322 
323  // the cleaner defaults, as in RecoTauTag/RecoTau/python/RecoTauCleaner_cfi.py
324  std::vector<edm::ParameterSet> default_cleaners;
325  default_cleaners.reserve(7);
326  {
327  edm::ParameterSet cleaner_Charge;
328  cleaner_Charge.addParameter<std::string>("name", "Charge");
329  cleaner_Charge.addParameter<std::string>("plugin", "RecoTauChargeCleanerPlugin");
330  cleaner_Charge.addParameter<int>("passForCharge", 1);
331  cleaner_Charge.addParameter<double>("selectionFailValue", 0);
332  cleaner_Charge.addParameter<std::vector<unsigned int>>("nprongs",
333  {
334  1,
335  3,
336  });
337  cleaner_Charge.addParameter<double>("tolerance", 0);
338  default_cleaners.push_back(cleaner_Charge);
339  }
340  {
341  edm::ParameterSet temp2;
342  temp2.addParameter<std::string>("name", "HPS_Select");
343  temp2.addParameter<std::string>("plugin", "RecoTauDiscriminantCleanerPlugin");
344  temp2.addParameter<edm::InputTag>("src", edm::InputTag("hpsSelectionDiscriminator"));
345  temp2.addParameter<double>("tolerance", 0);
346  default_cleaners.push_back(temp2);
347  }
348  {
349  edm::ParameterSet temp2;
350  temp2.addParameter<std::string>("name", "killSoftTwoProngTaus");
351  temp2.addParameter<std::string>("plugin", "RecoTauSoftTwoProngTausCleanerPlugin");
352  temp2.addParameter<double>("minTrackPt", 5.0);
353  temp2.addParameter<double>("tolerance", 0);
354  default_cleaners.push_back(temp2);
355  }
356  {
357  edm::ParameterSet temp2;
358  temp2.addParameter<std::string>("name", "ChargedHadronMultiplicity");
359  temp2.addParameter<std::string>("plugin", "RecoTauChargedHadronMultiplicityCleanerPlugin");
360  temp2.addParameter<double>("tolerance", 0);
361  default_cleaners.push_back(temp2);
362  }
363  {
364  edm::ParameterSet temp2;
365  temp2.addParameter<std::string>("name", "Pt");
366  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
367  temp2.addParameter<std::string>("selectionPassFunction", "-pt()");
368  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
369  temp2.addParameter<double>("selectionFailValue", 1000.0);
370  temp2.addParameter<double>("tolerance", 0.01);
371  default_cleaners.push_back(temp2);
372  }
373  {
374  edm::ParameterSet temp2;
375  temp2.addParameter<std::string>("name", "StripMultiplicity");
376  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
377  temp2.addParameter<std::string>("selectionPassFunction", "-signalPiZeroCandidates().size()");
378  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
379  temp2.addParameter<double>("selectionFailValue", 1000.0);
380  temp2.addParameter<double>("tolerance", 0);
381  default_cleaners.push_back(temp2);
382  }
383  {
384  edm::ParameterSet temp2;
385  temp2.addParameter<std::string>("name", "CombinedIsolation");
386  temp2.addParameter<std::string>("plugin", "RecoTauStringCleanerPlugin");
387  temp2.addParameter<std::string>("selectionPassFunction",
388  "isolationPFChargedHadrCandsPtSum() + isolationPFGammaCandsEtSum()");
389  temp2.addParameter<std::string>("selection", "leadPFCand().isNonnull()");
390  temp2.addParameter<double>("selectionFailValue", 1000.0);
391  temp2.addParameter<double>("tolerance", 0);
392  default_cleaners.push_back(temp2);
393  }
394 
395  desc.addVPSet("cleaners", vps_description_for_cleaners, default_cleaners);
396  }
397 
398  desc.add<int>("verbosity", 0);
399  desc.add<edm::InputTag>("src", edm::InputTag("combinatoricRecoTaus"));
400  descriptions.add("RecoTauCleaner", desc);
401 }

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

◆ fillDescriptions() [3/3]

template<>
void RecoTauCleanerImpl< reco::PFTauRefVector >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)

Definition at line 404 of file RecoTauCleaner.cc.

404  {
405  // there was no cfi file for this plugin
406 }

◆ produce()

template<typename Prod >
void RecoTauCleanerImpl< Prod >::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 221 of file RecoTauCleaner.cc.

221  {
222  if (verbosity_) {
223  std::cout << "<RecoTauCleanerImpl::produce>:" << std::endl;
224  }
225 
226  // Update all our cleaners with the event info if they need it
227  for (typename CleanerList::iterator cleaner = cleaners_.begin(); cleaner != cleaners_.end(); ++cleaner) {
228  (*cleaner)->plugin_->setup(evt, es);
229  }
230 
231  // Get the input collection of all taus. Some are from the same PFJet. We must clean them.
233  evt.getByToken(tau_token, inputTaus);
234 
235  // Sort the input tau refs according to our predicate
236  std::list<PFTauRankType*> rankedTaus;
237  size_t N = inputTaus->size();
238  for (size_t idx = 0; idx < N; ++idx) {
239  reco::PFTauRef inputRef(inputTaus, idx);
240  PFTauRankType* rankedTau = new PFTauRankType(inputRef);
241  rankedTau->N_ = cleaners_.size();
242  rankedTau->ranks_.reserve(rankedTau->N_);
243  rankedTau->tolerances_.reserve(rankedTau->N_);
244  for (typename CleanerList::const_iterator cleaner = cleaners_.begin(); cleaner != cleaners_.end(); ++cleaner) {
245  rankedTau->ranks_.push_back((*(*cleaner)->plugin_)(inputRef));
246  rankedTau->tolerances_.push_back((*cleaner)->tolerance_);
247  }
248  if (verbosity_) {
249  std::ostringstream os;
250  os << "rankedTau #" << idx;
251  rankedTau->print(os.str());
252  }
253  rankedTaus.push_back(rankedTau);
254  }
255  rankedTaus.sort(isHigherRank);
256 
257  // Make an STL algorithm friendly vector of refs
258  typedef std::vector<reco::PFTauRef> PFTauRefs;
259  PFTauRefs dirty(inputTaus->size());
260  size_t idx_sorted = 0;
261  for (std::list<PFTauRankType*>::const_iterator rankedTau = rankedTaus.begin(); rankedTau != rankedTaus.end();
262  ++rankedTau) {
263  dirty[idx_sorted] = (*rankedTau)->tauRef_;
264  if (verbosity_) {
265  std::cout << "dirty[" << idx_sorted << "] = " << dirty[idx_sorted].id() << ":" << dirty[idx_sorted].key()
266  << std::endl;
267  }
268  delete (*rankedTau);
269  ++idx_sorted;
270  }
271 
272  // Clean the taus, ensuring that only one tau per jet is produced
273  PFTauRefs cleanTaus = reco::tau::cleanOverlaps<PFTauRefs, RemoveDuplicateJets>(dirty);
274 
275  // create output collection
276  auto output = std::make_unique<Prod>();
277  //output->reserve(cleanTaus.size());
278 
279  // Copy clean refs into output
280  for (PFTauRefs::const_iterator tau = cleanTaus.begin(); tau != cleanTaus.end(); ++tau) {
281  // If we are applying an output selection, check if it passes
282  bool selected = true;
283  if (outputSelector_.get() && !(*outputSelector_)(**tau)) {
284  selected = false;
285  }
286  if (selected) {
287  output->push_back(convert<output_type>(*tau));
288  }
289  }
290  evt.put(std::move(output));
291 }

References gather_cfg::cout, edm::Event::getByToken(), charmTagsComputerCvsB_cfi::idx, eostools::move(), N, convertSQLitetoXML_cfg::output, edm::Event::put(), and metsig::tau.

Member Data Documentation

◆ cleaners_

template<typename Prod >
CleanerList RecoTauCleanerImpl< Prod >::cleaners_
private

Definition at line 69 of file RecoTauCleaner.cc.

◆ outputSelector_

template<typename Prod >
std::unique_ptr<const StringCutObjectSelector<reco::PFTau> > RecoTauCleanerImpl< Prod >::outputSelector_
private

Definition at line 71 of file RecoTauCleaner.cc.

◆ tau_token

template<typename Prod >
edm::EDGetTokenT<reco::PFTauCollection> RecoTauCleanerImpl< Prod >::tau_token
private

Definition at line 72 of file RecoTauCleaner.cc.

◆ tauSrc_

template<typename Prod >
edm::InputTag RecoTauCleanerImpl< Prod >::tauSrc_
private

Definition at line 68 of file RecoTauCleaner.cc.

◆ verbosity_

template<typename Prod >
int RecoTauCleanerImpl< Prod >::verbosity_
private

Definition at line 73 of file RecoTauCleaner.cc.

edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
metsig::tau
Definition: SignAlgoResolutions.h:49
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:32
RecoTauCleanerImpl::tau_token
edm::EDGetTokenT< reco::PFTauCollection > tau_token
Definition: RecoTauCleaner.cc:72
gather_cfg.cout
cout
Definition: gather_cfg.py:144
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
charmTagsComputerCvsB_cfi.idx
idx
Definition: charmTagsComputerCvsB_cfi.py:108
RecoTauCleanerImpl::verbosity_
int verbosity_
Definition: RecoTauCleaner.cc:73
edm::Handle
Definition: AssociativeIterator.h:50
edm::ParameterSetDescription::addOptional
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:105
edm::Ref< PFTauCollection >
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
N
#define N
Definition: blowfish.cc:9
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
RecoTauCleanerImpl::cleaners_
CleanerList cleaners_
Definition: RecoTauCleaner.cc:69
edm::ParameterSetDescription::addVPSet
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
Definition: ParameterSetDescription.h:149
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:132
get
#define get
HLT_2018_cff.cleaners
cleaners
Definition: HLT_2018_cff.py:32002
HistogramManager_cfi.VPSet
def VPSet(*args)
Definition: HistogramManager_cfi.py:401
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::InputTag
Definition: InputTag.h:15
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
RecoTauCleanerImpl::outputSelector_
std::unique_ptr< const StringCutObjectSelector< reco::PFTau > > outputSelector_
Definition: RecoTauCleaner.cc:71
RecoTauCleanerImpl::tauSrc_
edm::InputTag tauSrc_
Definition: RecoTauCleaner.cc:68