![]() |
![]() |
#include <MultiIsolator.h>
Public Types | |
typedef std::vector< std::pair < pat::IsolationKeys, float > > | IsolationValuePairs |
Public Member Functions | |
void | addIsolator (BaseIsolator *iso, uint32_t mask, pat::IsolationKeys key) |
void | addIsolator (const edm::ParameterSet &conf, bool withCut, uint32_t mask, pat::IsolationKeys key) |
void | beginEvent (const edm::Event &event, const edm::EventSetup &eventSetup) |
bool | enabled () const |
True if it has a non null configuration. | |
void | endEvent () |
template<typename T > | |
void | fill (const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const |
template<typename RefType > | |
void | fill (const RefType &ref, IsolationValuePairs &isolations) const |
Fill Isolation from a Ref, Ptr or RefToBase to the object. | |
MultiIsolator (const edm::ParameterSet &conf, bool cuts=true) | |
MultiIsolator () | |
void | print (std::ostream &out) const |
std::string | printSummary () const |
template<typename T > | |
uint32_t | test (const edm::View< T > &coll, int idx) const |
~MultiIsolator () | |
Static Public Member Functions | |
static BaseIsolator * | make (const edm::ParameterSet &conf, bool withCut) |
Private Attributes | |
boost::ptr_vector< BaseIsolator > | isolators_ |
std::vector< pat::IsolationKeys > | keys_ |
std::vector< uint32_t > | masks_ |
Definition at line 14 of file MultiIsolator.h.
typedef std::vector<std::pair<pat::IsolationKeys,float> > pat::helper::MultiIsolator::IsolationValuePairs |
Definition at line 16 of file MultiIsolator.h.
pat::helper::MultiIsolator::MultiIsolator | ( | ) | [inline] |
Definition at line 17 of file MultiIsolator.h.
{}
MultiIsolator::MultiIsolator | ( | const edm::ParameterSet & | conf, |
bool | cuts = true |
||
) |
Definition at line 9 of file MultiIsolator.cc.
References addIsolator(), pat::Flags::Isolation::Calo, pat::CaloIso, pat::Flags::Isolation::ECal, pat::EcalIso, Exception, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), pat::Flags::Isolation::HCal, pat::HcalIso, pat::PfAllParticleIso, pat::PfChargedHadronIso, pat::PfGammaIso, pat::PfNeutralHadronIso, align::Tracker, pat::TrackIso, pat::Flags::Isolation::User1, and pat::UserBaseIso.
{ using pat::Flags; if (conf.exists("tracker")) addIsolator(conf.getParameter<edm::ParameterSet>("tracker"), cuts, Flags::Isolation::Tracker, pat::TrackIso); if (conf.exists("ecal")) addIsolator(conf.getParameter<edm::ParameterSet>("ecal"), cuts, Flags::Isolation::ECal, pat::EcalIso); if (conf.exists("hcal")) addIsolator(conf.getParameter<edm::ParameterSet>("hcal"), cuts, Flags::Isolation::HCal, pat::HcalIso); if (conf.exists("calo")) addIsolator(conf.getParameter<edm::ParameterSet>("calo"), cuts, Flags::Isolation::Calo, pat::CaloIso); if (conf.exists("calo") && (conf.exists("ecal") || conf.exists("hcal"))) { throw cms::Exception("Configuration") << "MultiIsolator: you can't specify both 'calo' isolation and 'ecal'/'hcal', " << "as the 'calo' isolation flag is just the logical OR of 'ecal' and 'hcal'.\n"; } if (conf.exists("pfAllParticles")) addIsolator(conf.getParameter<edm::ParameterSet>("pfAllParticles"), cuts,Flags::Isolation::Calo, pat::PfAllParticleIso); if (conf.exists("pfChargedHadron")) addIsolator(conf.getParameter<edm::ParameterSet>("pfChargedHadron"), cuts,Flags::Isolation::Calo, pat::PfChargedHadronIso); if (conf.exists("pfNeutralHadron")) addIsolator(conf.getParameter<edm::ParameterSet>("pfNeutralHadron"), cuts,Flags::Isolation::Calo, pat::PfNeutralHadronIso); if (conf.exists("pfGamma")) addIsolator(conf.getParameter<edm::ParameterSet>("pfGamma"), cuts,Flags::Isolation::Calo, pat::PfGammaIso); if (conf.exists("user")) { std::vector<edm::ParameterSet> psets = conf.getParameter<std::vector<edm::ParameterSet> >("user"); if (psets.size() > 5) { throw cms::Exception("Configuration") << "MultiIsolator: you can specify at most 5 user isolation collections.\n"; } uint32_t bit = Flags::Isolation::User1; for (std::vector<edm::ParameterSet>::const_iterator it = psets.begin(), ed = psets.end(); it != ed; ++it, bit <<= 1) { addIsolator(*it, cuts, bit, pat::IsolationKeys(pat::UserBaseIso + (it - psets.begin()))); } } }
pat::helper::MultiIsolator::~MultiIsolator | ( | ) | [inline] |
Definition at line 19 of file MultiIsolator.h.
{}
void MultiIsolator::addIsolator | ( | BaseIsolator * | iso, |
uint32_t | mask, | ||
pat::IsolationKeys | key | ||
) |
Definition at line 40 of file MultiIsolator.cc.
References isolators_, keys_, and masks_.
Referenced by addIsolator(), and MultiIsolator().
{ isolators_.push_back(iso); masks_.push_back(mask); keys_.push_back(key); }
void MultiIsolator::addIsolator | ( | const edm::ParameterSet & | conf, |
bool | withCut, | ||
uint32_t | mask, | ||
pat::IsolationKeys | key | ||
) |
Definition at line 59 of file MultiIsolator.cc.
References addIsolator(), and make().
{ BaseIsolator * iso = make(conf, withCut); if (iso) addIsolator(iso, mask, key); }
void MultiIsolator::beginEvent | ( | const edm::Event & | event, |
const edm::EventSetup & | eventSetup | ||
) |
Definition at line 66 of file MultiIsolator.cc.
References isolators_.
Referenced by pat::PATElectronProducer::produce(), pat::PATMuonProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATTauProducer::produce(), and pat::PATGenericParticleProducer::produce().
{ for (boost::ptr_vector<BaseIsolator>::iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) { it->beginEvent(event, eventSetup); } }
bool pat::helper::MultiIsolator::enabled | ( | ) | const [inline] |
True if it has a non null configuration.
Definition at line 50 of file MultiIsolator.h.
References isolators_.
Referenced by pat::PATElectronProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATMuonProducer::produce(), pat::PATTauProducer::produce(), and pat::PATGenericParticleProducer::produce().
{ return !isolators_.empty(); }
void MultiIsolator::endEvent | ( | ) |
Definition at line 73 of file MultiIsolator.cc.
References isolators_.
Referenced by pat::PATElectronProducer::produce(), pat::PATMuonProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATTauProducer::produce(), and pat::PATGenericParticleProducer::produce().
{ for (boost::ptr_vector<BaseIsolator>::iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) { it->endEvent(); } }
void pat::helper::MultiIsolator::fill | ( | const RefType & | ref, |
IsolationValuePairs & | isolations | ||
) | const |
Fill Isolation from a Ref, Ptr or RefToBase to the object.
Definition at line 70 of file MultiIsolator.h.
References i, isolators_, keys_, and n.
{ isolations.resize(isolators_.size()); for (size_t i = 0, n = isolators_.size(); i < n; ++i) { isolations[i].first = keys_[i]; isolations[i].second = isolators_[i].getValue(rb); } }
void pat::helper::MultiIsolator::fill | ( | const edm::View< T > & | coll, |
int | idx, | ||
IsolationValuePairs & | isolations | ||
) | const |
Definition at line 82 of file MultiIsolator.h.
References edm::View< T >::refAt().
Referenced by pat::PATElectronProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATMuonProducer::produce(), pat::PATTauProducer::produce(), and pat::PATGenericParticleProducer::produce().
{ edm::RefToBase<T> rb = coll.refAt(idx); fill(rb, isolations); }
BaseIsolator * MultiIsolator::make | ( | const edm::ParameterSet & | conf, |
bool | withCut | ||
) | [static] |
Definition at line 47 of file MultiIsolator.cc.
References edm::ParameterSet::empty(), edm::ParameterSet::exists(), and edm::ParameterSet::getParameter().
Referenced by addIsolator().
{ if (conf.empty()) return 0; if (conf.exists("placeholder") && conf.getParameter<bool>("placeholder")) return 0; if (conf.exists("deltaR")) { return new IsoDepositIsolator(conf, withCut); } else { return new SimpleIsolator(conf, withCut); } }
void MultiIsolator::print | ( | std::ostream & | out | ) | const |
Definition at line 80 of file MultiIsolator.cc.
References pat::Flags::bitToString(), isolators_, and masks_.
Referenced by printSummary().
{ for (boost::ptr_vector<BaseIsolator>::const_iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) { out << " * "; it->print(out); out << ": Flag " << pat::Flags::bitToString( masks_[it - isolators_.begin()] ) << "\n"; } out << "\n"; }
std::string MultiIsolator::printSummary | ( | ) | const |
Definition at line 90 of file MultiIsolator.cc.
References print().
{ std::ostringstream isoSumm; print(isoSumm); return isoSumm.str(); }
uint32_t pat::helper::MultiIsolator::test | ( | const edm::View< T > & | coll, |
int | idx | ||
) | const |
Definition at line 59 of file MultiIsolator.h.
References i, isolators_, masks_, n, and edm::View< T >::refAt().
{ uint32_t retval = 0; edm::RefToBase<T> rb = coll.refAt(idx); // edm::Ptr<T> in a shiny new future to come one remote day ;-) for (size_t i = 0, n = isolators_.size(); i < n; ++i) { if (!isolators_[i].test(rb)) retval |= masks_[i]; } return retval; }
boost::ptr_vector<BaseIsolator> pat::helper::MultiIsolator::isolators_ [private] |
Definition at line 52 of file MultiIsolator.h.
Referenced by addIsolator(), beginEvent(), enabled(), endEvent(), fill(), print(), and test().
std::vector<pat::IsolationKeys> pat::helper::MultiIsolator::keys_ [private] |
Definition at line 54 of file MultiIsolator.h.
Referenced by addIsolator(), and fill().
std::vector<uint32_t> pat::helper::MultiIsolator::masks_ [private] |
Definition at line 53 of file MultiIsolator.h.
Referenced by addIsolator(), print(), and test().