CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Member Functions | Private Attributes

pat::helper::MultiIsolator Class Reference

#include <MultiIsolator.h>

List of all members.

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 BaseIsolatormake (const edm::ParameterSet &conf, 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.

{}
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.

{}

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(), 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]
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();
    }
}
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 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); 
        }
    }
template<typename T >
void pat::helper::MultiIsolator::fill ( const edm::View< T > &  coll,
int  idx,
IsolationValuePairs isolations 
) const
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();
}
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 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;
    }

Member Data Documentation

Definition at line 52 of file MultiIsolator.h.

Referenced by addIsolator(), beginEvent(), enabled(), endEvent(), fill(), print(), and test().

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