File indexing completed on 2024-04-06 12:26:47
0001
0002
0003
0004
0005
0006
0007
0008 #include "RecoMET/METProducers/interface/MuonMET.h"
0009
0010 #include "DataFormats/METReco/interface/METCollection.h"
0011 #include "DataFormats/METReco/interface/CaloMETCollection.h"
0012
0013
0014 namespace cms {
0015
0016
0017 MuonMET::MuonMET(const edm::ParameterSet& iConfig)
0018 : alg_(), metTypeInputTag_(iConfig.getParameter<edm::InputTag>("metTypeInputTag")) {
0019 edm::InputTag muonsInputTag = iConfig.getParameter<edm::InputTag>("muonsInputTag");
0020 inputMuonToken_ = consumes<edm::View<reco::Muon> >(muonsInputTag);
0021
0022 edm::InputTag muonDepValueMap = iConfig.getParameter<edm::InputTag>("muonMETDepositValueMapInputTag");
0023 inputValueMapMuonMetCorrToken_ = consumes<edm::ValueMap<reco::MuonMETCorrectionData> >(muonDepValueMap);
0024
0025 edm::InputTag uncorMETInputTag = iConfig.getParameter<edm::InputTag>("uncorMETInputTag");
0026 if (metTypeInputTag_.label() == "CaloMET") {
0027 inputCaloMETToken_ = consumes<edm::View<reco::CaloMET> >(uncorMETInputTag);
0028 produces<reco::CaloMETCollection>();
0029 } else {
0030 inputMETToken_ = consumes<edm::View<reco::MET> >(uncorMETInputTag);
0031 produces<reco::METCollection>();
0032 }
0033 }
0034
0035 MuonMET::MuonMET() : alg_() {}
0036
0037 void MuonMET::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0038 edm::Handle<edm::View<reco::Muon> > inputMuons;
0039 iEvent.getByToken(inputMuonToken_, inputMuons);
0040
0041 edm::Handle<edm::ValueMap<reco::MuonMETCorrectionData> > vm_muCorrData_h;
0042
0043 iEvent.getByToken(inputValueMapMuonMetCorrToken_, vm_muCorrData_h);
0044
0045 if (metTypeInputTag_.label() == "CaloMET") {
0046 edm::Handle<edm::View<reco::CaloMET> > inputUncorMet;
0047 iEvent.getByToken(inputCaloMETToken_, inputUncorMet);
0048 auto output = std::make_unique<reco::CaloMETCollection>();
0049 alg_.run(*(inputMuons.product()), *(vm_muCorrData_h.product()), *(inputUncorMet.product()), &*output);
0050 iEvent.put(std::move(output));
0051 } else {
0052 edm::Handle<edm::View<reco::MET> > inputUncorMet;
0053 iEvent.getByToken(inputMETToken_, inputUncorMet);
0054 auto output = std::make_unique<reco::METCollection>();
0055 alg_.run(*(inputMuons.product()), *(vm_muCorrData_h.product()), *(inputUncorMet.product()), &*output);
0056 iEvent.put(std::move(output));
0057 }
0058 }
0059
0060 DEFINE_FWK_MODULE(MuonMET);
0061
0062 }
0063
0064