Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:47

0001 /**
0002   \class    pat::GenMETExtractor GenMETExtractor.h "PhysicsTools/PatAlgos/interface/GenMETExtractor.h"
0003   \brief    Retrieves the genMET from a pat::MET
0004 
0005    The GenMETExtractor produces the analysis-level pat::MET starting from
0006    a collection of objects of METType.
0007 
0008   \author   Matthieu Marionneau
0009   \version  $Id: GenMETExtractor.h,v 1.0 2015/07/22 mmarionn Exp $
0010 */
0011 
0012 #include "DataFormats/METReco/interface/GenMET.h"
0013 #include "DataFormats/PatCandidates/interface/MET.h"
0014 #include "FWCore/Framework/interface/ConsumesCollector.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/global/EDProducer.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0021 #include "FWCore/Utilities/interface/InputTag.h"
0022 
0023 #include <memory>
0024 
0025 namespace pat {
0026 
0027   class GenMETExtractor : public edm::global::EDProducer<> {
0028   public:
0029     explicit GenMETExtractor(const edm::ParameterSet &iConfig);
0030     ~GenMETExtractor() override;
0031 
0032     void produce(edm::StreamID streamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const override;
0033 
0034   private:
0035     edm::EDGetTokenT<std::vector<pat::MET> > metSrcToken_;
0036   };
0037 
0038 }  // namespace pat
0039 
0040 using namespace pat;
0041 
0042 GenMETExtractor::GenMETExtractor(const edm::ParameterSet &iConfig) {
0043   edm::InputTag metIT = iConfig.getParameter<edm::InputTag>("metSource");
0044   metSrcToken_ = consumes<pat::METCollection>(metIT);
0045 
0046   // produces vector of genMet
0047   produces<std::vector<reco::GenMET> >();
0048 }
0049 
0050 GenMETExtractor::~GenMETExtractor() {}
0051 
0052 void GenMETExtractor::produce(edm::StreamID streamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const {
0053   edm::Handle<std::vector<pat::MET> > src;
0054   iEvent.getByToken(metSrcToken_, src);
0055   if (src->empty())
0056     edm::LogError("GenMETExtractor::produce") << "input genMET collection is empty";
0057 
0058   const reco::GenMET *genMet = src->front().genMET();
0059 
0060   std::vector<reco::GenMET> *genMetCol = new std::vector<reco::GenMET>();
0061   genMetCol->push_back((*genMet));
0062 
0063   std::unique_ptr<std::vector<reco::GenMET> > genMETs(genMetCol);
0064   iEvent.put(std::move(genMETs));
0065 }
0066 
0067 #include "FWCore/Framework/interface/MakerMacros.h"
0068 
0069 DEFINE_FWK_MODULE(GenMETExtractor);