CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes
pat::helper::MultiIsolator Class Reference

#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, edm::ConsumesCollector &iC, 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. More...
 
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. More...
 
 MultiIsolator ()
 
 MultiIsolator (const edm::ParameterSet &conf, edm::ConsumesCollector &&iC, bool cuts=true)
 
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 BaseIsolatormake (const edm::ParameterSet &conf, edm::ConsumesCollector &iC, bool withCut)
 

Private Attributes

boost::ptr_vector< BaseIsolatorisolators_
 
std::vector< pat::IsolationKeyskeys_
 
std::vector< uint32_t > masks_
 

Detailed Description

Definition at line 14 of file MultiIsolator.h.

Member Typedef Documentation

Definition at line 16 of file MultiIsolator.h.

Constructor & Destructor Documentation

pat::helper::MultiIsolator::MultiIsolator ( )
inline

Definition at line 17 of file MultiIsolator.h.

References egammaForCoreTracking_cff::cuts.

17 {}
MultiIsolator::MultiIsolator ( const edm::ParameterSet conf,
edm::ConsumesCollector &&  iC,
bool  cuts = true 
)

Definition at line 9 of file MultiIsolator.cc.

References addIsolator(), pat::Flags::Isolation::Calo, pat::CaloIso, egammaForCoreTracking_cff::cuts, 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, pat::Flags::Isolation::Tracker, pat::TrackIso, pat::Flags::Isolation::User1, and pat::UserBaseIso.

9  {
10  using pat::Flags;
11  if (conf.exists("tracker")) addIsolator(conf.getParameter<edm::ParameterSet>("tracker"), iC, cuts, Flags::Isolation::Tracker, pat::TrackIso);
15  if (conf.exists("calo") && (conf.exists("ecal") || conf.exists("hcal"))) {
16  throw cms::Exception("Configuration") <<
17  "MultiIsolator: you can't specify both 'calo' isolation and 'ecal'/'hcal', " <<
18  "as the 'calo' isolation flag is just the logical OR of 'ecal' and 'hcal'.\n";
19  }
20  if (conf.exists("pfAllParticles")) addIsolator(conf.getParameter<edm::ParameterSet>("pfAllParticles"), iC, cuts,Flags::Isolation::Calo, pat::PfAllParticleIso);
21  if (conf.exists("pfChargedHadron")) addIsolator(conf.getParameter<edm::ParameterSet>("pfChargedHadron"), iC, cuts,Flags::Isolation::Calo, pat::PfChargedHadronIso);
22  if (conf.exists("pfNeutralHadron")) addIsolator(conf.getParameter<edm::ParameterSet>("pfNeutralHadron"), iC, cuts,Flags::Isolation::Calo, pat::PfNeutralHadronIso);
23  if (conf.exists("pfGamma")) addIsolator(conf.getParameter<edm::ParameterSet>("pfGamma"), iC, cuts,Flags::Isolation::Calo, pat::PfGammaIso);
24  if (conf.exists("user")) {
25 
26  std::vector<edm::ParameterSet> psets = conf.getParameter<std::vector<edm::ParameterSet> >("user");
27  if (psets.size() > 5) {
28  throw cms::Exception("Configuration") <<
29  "MultiIsolator: you can specify at most 5 user isolation collections.\n";
30  }
31  uint32_t bit = Flags::Isolation::User1;
32  for (std::vector<edm::ParameterSet>::const_iterator it = psets.begin(), ed = psets.end(); it != ed; ++it, bit <<= 1) {
33  addIsolator(*it, iC, cuts, bit, pat::IsolationKeys(pat::UserBaseIso + (it - psets.begin())));
34  }
35  }
36 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
IsolationKeys
Enum defining isolation keys.
Definition: Isolation.h:9
Flags used in PAT, and static translator from flags to strings.
Definition: Flags.h:19
void addIsolator(BaseIsolator *iso, uint32_t mask, pat::IsolationKeys key)
pat::helper::MultiIsolator::~MultiIsolator ( )
inline

Member Function Documentation

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(), MultiIsolator(), and ~MultiIsolator().

40  {
41  isolators_.push_back(iso);
42  masks_.push_back(mask);
43  keys_.push_back(key);
44 }
std::vector< uint32_t > masks_
Definition: MultiIsolator.h:53
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
std::vector< pat::IsolationKeys > keys_
Definition: MultiIsolator.h:54
void MultiIsolator::addIsolator ( const edm::ParameterSet conf,
edm::ConsumesCollector iC,
bool  withCut,
uint32_t  mask,
pat::IsolationKeys  key 
)

Definition at line 59 of file MultiIsolator.cc.

References addIsolator(), and make().

59  {
60  BaseIsolator * iso = make(conf, iC, withCut);
61  if (iso) addIsolator(iso, mask, key);
62 }
static BaseIsolator * make(const edm::ParameterSet &conf, edm::ConsumesCollector &iC, bool withCut)
void addIsolator(BaseIsolator *iso, uint32_t mask, pat::IsolationKeys 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::PATGenericParticleProducer::produce(), pat::PATTauProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATElectronProducer::produce(), pat::PATMuonProducer::produce(), and ~MultiIsolator().

66  {
67  for (boost::ptr_vector<BaseIsolator>::iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) {
68  it->beginEvent(event, eventSetup);
69  }
70 }
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
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::PATGenericParticleProducer::produce(), pat::PATTauProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATElectronProducer::produce(), and pat::PATMuonProducer::produce().

50 { return !isolators_.empty(); }
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
void MultiIsolator::endEvent ( )

Definition at line 73 of file MultiIsolator.cc.

References isolators_.

Referenced by pat::PATGenericParticleProducer::produce(), pat::PATTauProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATElectronProducer::produce(), pat::PATMuonProducer::produce(), and ~MultiIsolator().

73  {
74  for (boost::ptr_vector<BaseIsolator>::iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) {
75  it->endEvent();
76  }
77 }
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
template<typename T >
void pat::helper::MultiIsolator::fill ( const edm::View< T > &  coll,
int  idx,
IsolationValuePairs isolations 
) const

Definition at line 82 of file MultiIsolator.h.

Referenced by pat::PATGenericParticleProducer::produce(), pat::PATTauProducer::produce(), pat::PATPhotonProducer::produce(), pat::PATElectronProducer::produce(), pat::PATMuonProducer::produce(), and ~MultiIsolator().

83  {
84  edm::RefToBase<T> rb = coll.refAt(idx);
85  fill(rb, isolations);
86  }
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:82
template<typename RefType >
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 mps_fire::i, isolators_, keys_, and gen::n.

71  {
72  isolations.resize(isolators_.size());
73  for (size_t i = 0, n = isolators_.size(); i < n; ++i) {
74  isolations[i].first = keys_[i];
75  isolations[i].second = isolators_[i].getValue(rb);
76  }
77  }
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
std::vector< pat::IsolationKeys > keys_
Definition: MultiIsolator.h:54
BaseIsolator * MultiIsolator::make ( const edm::ParameterSet conf,
edm::ConsumesCollector iC,
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(), and ~MultiIsolator().

47  {
48  if (conf.empty()) return nullptr;
49  if (conf.exists("placeholder") && conf.getParameter<bool>("placeholder")) return nullptr;
50  if (conf.exists("deltaR")) {
51  return new IsoDepositIsolator(conf, iC, withCut);
52  } else {
53  return new SimpleIsolator(conf, iC, withCut);
54  }
55 }
T getParameter(std::string const &) const
bool empty() const
Definition: ParameterSet.h:191
bool exists(std::string const &parameterName) const
checks if a parameter exists
void MultiIsolator::print ( std::ostream &  out) const

Definition at line 80 of file MultiIsolator.cc.

References pat::Flags::bitToString(), isolators_, masks_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by printSummary(), and ~MultiIsolator().

80  {
81  for (boost::ptr_vector<BaseIsolator>::const_iterator it = isolators_.begin(), ed = isolators_.end(); it != ed; ++it) {
82  out << " * ";
83  it->print(out);
84  out << ": Flag " << pat::Flags::bitToString( masks_[it - isolators_.begin()] ) << "\n";
85  }
86  out << "\n";
87 }
std::vector< uint32_t > masks_
Definition: MultiIsolator.h:53
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
static const std::string & bitToString(uint32_t bit)
Definition: Flags.cc:6
std::string MultiIsolator::printSummary ( ) const

Definition at line 90 of file MultiIsolator.cc.

References print().

Referenced by ~MultiIsolator().

90  {
91  std::ostringstream isoSumm;
92  print(isoSumm);
93  return isoSumm.str();
94 }
void print(std::ostream &out) const
template<typename T >
uint32_t pat::helper::MultiIsolator::test ( const edm::View< T > &  coll,
int  idx 
) const

Definition at line 59 of file MultiIsolator.h.

References mps_fire::i, isolators_, masks_, and gen::n.

Referenced by ~MultiIsolator().

59  {
60  uint32_t retval = 0;
61  edm::RefToBase<T> rb = coll.refAt(idx); // edm::Ptr<T> in a shiny new future to come one remote day ;-)
62  for (size_t i = 0, n = isolators_.size(); i < n; ++i) {
63  if (!isolators_[i].test(rb)) retval |= masks_[i];
64  }
65  return retval;
66  }
std::vector< uint32_t > masks_
Definition: MultiIsolator.h:53
boost::ptr_vector< BaseIsolator > isolators_
Definition: MultiIsolator.h:52
uint32_t test(const edm::View< T > &coll, int idx) const
Definition: MultiIsolator.h:59

Member Data Documentation

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().