CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/HLTrigger/JetMET/src/HLTHtMhtProducer.cc

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 }