Go to the documentation of this file.00001
00002 #include "HLTrigger/JetMET/interface/HLTHtMhtProducer.h"
00003
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005 #include "FWCore/Framework/interface/ESHandle.h"
00006 #include "FWCore/Framework/interface/EventSetup.h"
00007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00009 #include "FWCore/Utilities/interface/InputTag.h"
00010 #include "DataFormats/Common/interface/Handle.h"
00011
00012 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00013 #include "DataFormats/METReco/interface/METCollection.h"
00014 #include "DataFormats/METReco/interface/MET.h"
00015 #include "DataFormats/TrackReco/interface/Track.h"
00016
00017
00018 HLTHtMhtProducer::HLTHtMhtProducer(const edm::ParameterSet & iConfig) :
00019 usePt_ ( iConfig.getParameter<bool>("usePt") ),
00020 useTracks_ ( iConfig.getParameter<bool>("useTracks") ),
00021 minNJetHt_ ( iConfig.getParameter<int>("minNJetHt") ),
00022 minNJetMht_ ( iConfig.getParameter<int>("minNJetMht") ),
00023 minPtJetHt_ ( iConfig.getParameter<double>("minPtJetHt") ),
00024 minPtJetMht_ ( iConfig.getParameter<double>("minPtJetMht") ),
00025 maxEtaJetHt_ ( iConfig.getParameter<double>("maxEtaJetHt") ),
00026 maxEtaJetMht_ ( iConfig.getParameter<double>("maxEtaJetMht") ),
00027 jetsLabel_ ( iConfig.getParameter<edm::InputTag>("jetsLabel") ),
00028 tracksLabel_ ( iConfig.getParameter<edm::InputTag>("tracksLabel") )
00029 {
00030 produces<reco::METCollection>();
00031 }
00032
00033
00034 HLTHtMhtProducer::~HLTHtMhtProducer() {
00035 }
00036
00037
00038 void HLTHtMhtProducer::fillDescriptions(edm::ConfigurationDescriptions & descriptions) {
00039 edm::ParameterSetDescription desc;
00040 desc.add<edm::InputTag>("jetsLabel", edm::InputTag("hltCaloJetCorrected"));
00041 desc.add<bool>("usePt", true);
00042 desc.add<int>("minNJetHt", 0);
00043 desc.add<int>("minNJetMht", 0);
00044 desc.add<double>("minPtJetHt", 40);
00045 desc.add<double>("minPtJetMht", 30);
00046 desc.add<double>("maxEtaJetHt", 3);
00047 desc.add<double>("maxEtaJetMht", 999);
00048 desc.add<bool>("useTracks", false);
00049 desc.add<edm::InputTag>("tracksLabel", edm::InputTag("hltL3Muons"));
00050 descriptions.add("hltHtMhtProducer", desc);
00051 }
00052
00053
00054 void HLTHtMhtProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
00055
00056 std::auto_ptr<reco::METCollection> metobject(new reco::METCollection());
00057
00058 edm::Handle<reco::CaloJetCollection> jets;
00059 iEvent.getByLabel(jetsLabel_, jets);
00060 edm::Handle<reco::TrackCollection> tracks;
00061 if (useTracks_) iEvent.getByLabel(tracksLabel_, tracks);
00062
00063 int nj_ht = 0, nj_mht = 0;
00064 double ht=0.;
00065 double mhtx=0., mhty=0.;
00066
00067 for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet != jets->end(); jet++) {
00068 double mom = (usePt_ ? jet->pt() : jet->et());
00069 if (mom > minPtJetHt_ and fabs(jet->eta()) < maxEtaJetHt_) {
00070 ht += mom;
00071 ++nj_ht;
00072 }
00073 if (mom > minPtJetMht_ and fabs(jet->eta()) < maxEtaJetMht_) {
00074 mhtx -= mom*cos(jet->phi());
00075 mhty -= mom*sin(jet->phi());
00076 ++nj_mht;
00077 }
00078 }
00079 if (useTracks_) {
00080 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); track++) {
00081 if (track->pt() > minPtJetHt_ and fabs(track->eta()) < maxEtaJetHt_) {
00082 ht += track->pt();
00083 }
00084 if (track->pt() > minPtJetMht_ and fabs(track->eta()) < maxEtaJetMht_) {
00085 mhtx -= track->px();
00086 mhty -= track->py();
00087 }
00088 }
00089 }
00090
00091 if (nj_ht < minNJetHt_ ) { ht = 0; }
00092 if (nj_mht < minNJetMht_) { mhtx = 0; mhty = 0; }
00093
00094 metobject->push_back(
00095 reco::MET(
00096 ht,
00097 reco::MET::LorentzVector(mhtx, mhty, 0, sqrt(mhtx*mhtx + mhty*mhty)),
00098 reco::MET::Point()
00099 )
00100 );
00101
00102 iEvent.put(metobject);
00103 }