Produces the pat::MET. More...
#include <PhysicsTools/PatAlgos/interface/PATMETProducer.h>
Public Member Functions | |
PATMETProducer (const edm::ParameterSet &iConfig) | |
virtual void | produce (edm::Event &iEvent, const edm::EventSetup &iSetup) |
~PATMETProducer () | |
Static Public Member Functions | |
static void | fillDescriptions (edm::ConfigurationDescriptions &descriptions) |
Private Attributes | |
bool | addEfficiencies_ |
bool | addGenMET_ |
bool | addMuonCorr_ |
bool | addResolutions_ |
pat::helper::EfficiencyLoader | efficiencyLoader_ |
GreaterByEt< MET > | eTComparator_ |
edm::InputTag | genMETSrc_ |
edm::InputTag | metSrc_ |
edm::InputTag | muonSrc_ |
pat::helper::KinResolutionsLoader | resolutionLoader_ |
pat::PATUserDataHelper< pat::MET > | userDataHelper_ |
bool | useUserData_ |
Produces the pat::MET.
The PATMETProducer produces the analysis-level pat::MET starting from a collection of objects of METType.
Definition at line 37 of file PATMETProducer.h.
PATMETProducer::PATMETProducer | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 19 of file PATMETProducer.cc.
References addEfficiencies_, addGenMET_, addResolutions_, efficiencyLoader_, genMETSrc_, edm::ParameterSet::getParameter(), metSrc_, resolutionLoader_, userDataHelper_, and useUserData_.
: useUserData_(iConfig.exists("userData")) { // initialize the configurables metSrc_ = iConfig.getParameter<edm::InputTag>("metSource"); addGenMET_ = iConfig.getParameter<bool> ("addGenMET"); genMETSrc_ = iConfig.getParameter<edm::InputTag>("genMETSource"); addResolutions_ = iConfig.getParameter<bool> ("addResolutions"); // Efficiency configurables addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies"); if (addEfficiencies_) { efficiencyLoader_ = pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies")); } // Resolution configurables addResolutions_ = iConfig.getParameter<bool>("addResolutions"); if (addResolutions_) { resolutionLoader_ = pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions")); } // Check to see if the user wants to add user data if ( useUserData_ ) { userDataHelper_ = PATUserDataHelper<MET>(iConfig.getParameter<edm::ParameterSet>("userData")); } // produces vector of mets produces<std::vector<MET> >(); }
PATMETProducer::~PATMETProducer | ( | ) |
Definition at line 51 of file PATMETProducer.cc.
{ }
void PATMETProducer::fillDescriptions | ( | edm::ConfigurationDescriptions & | descriptions | ) | [static] |
Reimplemented from edm::EDProducer.
Definition at line 111 of file PATMETProducer.cc.
References edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), pat::helper::KinResolutionsLoader::fillDescription(), edm::ParameterSetDescription::setAllowAnything(), and edm::ParameterSetDescription::setComment().
{ edm::ParameterSetDescription iDesc; iDesc.setComment("PAT MET producer module"); // input source iDesc.add<edm::InputTag>("metSource", edm::InputTag("no default"))->setComment("input collection"); // MC configurations iDesc.add<bool>("addGenMET", false); iDesc.add<edm::InputTag>("genMETSource", edm::InputTag("genMetCalo")); pat::helper::KinResolutionsLoader::fillDescription(iDesc); // Efficiency configurables edm::ParameterSetDescription efficienciesPSet; efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description. iDesc.add("efficiencies", efficienciesPSet); iDesc.add<bool>("addEfficiencies", false); // Check to see if the user wants to add user data edm::ParameterSetDescription userDataPSet; PATUserDataHelper<MET>::fillDescription(userDataPSet); iDesc.addOptional("userData", userDataPSet); // muon correction iDesc.add<bool>("addMuonCorrections", false); iDesc.add<edm::InputTag>("muonSource", edm::InputTag("muons")); }
void PATMETProducer::produce | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [virtual] |
Implements edm::EDProducer.
Definition at line 55 of file PATMETProducer.cc.
References pat::PATUserDataHelper< ObjectType >::add(), addGenMET_, efficiencyLoader_, pat::helper::KinResolutionsLoader::enabled(), pat::helper::EfficiencyLoader::enabled(), edm::InputTag::encode(), genMETSrc_, edm::Event::getByLabel(), UserOptions_cff::idx, metSrc_, pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), metProducer_cfi::patMETs, edm::Event::put(), resolutionLoader_, pat::helper::EfficiencyLoader::setEfficiencies(), pat::MET::setGenMET(), pat::helper::KinResolutionsLoader::setResolutions(), userDataHelper_, and useUserData_.
{ // Get the vector of MET's from the event edm::Handle<edm::View<reco::MET> > mets; iEvent.getByLabel(metSrc_, mets); if (mets->size() != 1) throw cms::Exception("Corrupt Data") << "The input MET collection " << metSrc_.encode() << " has size " << mets->size() << " instead of 1 as it should.\n"; if (efficiencyLoader_.enabled()) efficiencyLoader_.newEvent(iEvent); if (resolutionLoader_.enabled()) resolutionLoader_.newEvent(iEvent, iSetup); // Get the vector of generated met from the event if needed edm::Handle<edm::View<reco::GenMET> > genMETs; if (addGenMET_) { iEvent.getByLabel(genMETSrc_, genMETs); } // loop over mets std::vector<MET> * patMETs = new std::vector<MET>(); for (edm::View<reco::MET>::const_iterator itMET = mets->begin(); itMET != mets->end(); itMET++) { // construct the MET from the ref -> save ref to original object unsigned int idx = itMET - mets->begin(); edm::RefToBase<reco::MET> metsRef = mets->refAt(idx); edm::Ptr<reco::MET> metsPtr = mets->ptrAt(idx); MET amet(metsRef); // add the generated MET if (addGenMET_) amet.setGenMET((*genMETs)[idx]); if (efficiencyLoader_.enabled()) { efficiencyLoader_.setEfficiencies( amet, metsRef ); } if (resolutionLoader_.enabled()) { resolutionLoader_.setResolutions(amet); } if ( useUserData_ ) { userDataHelper_.add( amet, iEvent, iSetup ); } // correct for muons if demanded... never more: it's now done by JetMETCorrections // add the MET to the vector of METs patMETs->push_back(amet); } // sort MET in ET .. don't mess with this // std::sort(patMETs->begin(), patMETs->end(), eTComparator_); // put genEvt object in Event std::auto_ptr<std::vector<MET> > myMETs(patMETs); iEvent.put(myMETs); }
bool pat::PATMETProducer::addEfficiencies_ [private] |
Definition at line 61 of file PATMETProducer.h.
Referenced by PATMETProducer().
bool pat::PATMETProducer::addGenMET_ [private] |
Definition at line 52 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
bool pat::PATMETProducer::addMuonCorr_ [private] |
Definition at line 56 of file PATMETProducer.h.
bool pat::PATMETProducer::addResolutions_ [private] |
Definition at line 54 of file PATMETProducer.h.
Referenced by PATMETProducer().
Definition at line 62 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
GreaterByEt<MET> pat::PATMETProducer::eTComparator_ [private] |
Definition at line 59 of file PATMETProducer.h.
edm::InputTag pat::PATMETProducer::genMETSrc_ [private] |
Definition at line 53 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
edm::InputTag pat::PATMETProducer::metSrc_ [private] |
Definition at line 51 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
edm::InputTag pat::PATMETProducer::muonSrc_ [private] |
Definition at line 57 of file PATMETProducer.h.
Definition at line 55 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
Definition at line 65 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().
bool pat::PATMETProducer::useUserData_ [private] |
Definition at line 64 of file PATMETProducer.h.
Referenced by PATMETProducer(), and produce().