ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/csander/MyAnalysis/AnalysisSkeleton/src/AnalysisSkeleton.cc
Revision: 1.2
Committed: Tue Apr 17 13:25:03 2012 UTC (13 years ago) by csander
Content type: text/plain
Branch: MAIN
Changes since 1.1: +138 -116 lines
Log Message:
added trigger turn on curves

File Contents

# User Rev Content
1 csander 1.1 // -*- C++ -*-
2     //
3     // Package: AnalysisSkeleton
4     // Class: AnalysisSkeleton
5     //
6     /**\class AnalysisSkeleton AnalysisSkeleton.cc MyAnalysis/AnalysisSkeleton/src/AnalysisSkeleton.cc
7    
8     Description: [one line class summary]
9    
10     Implementation:
11 csander 1.2 [Notes on implementation]
12     */
13 csander 1.1 //
14     // Original Author: Christian Sander,,,
15     // Created: Wed Jun 30 13:55:44 CEST 2010
16 csander 1.2 // $Id: AnalysisSkeleton.cc,v 1.1.1.1 2010/07/02 05:51:15 csander Exp $
17 csander 1.1 //
18     //
19     // system include files
20     #include <memory>
21    
22     // user include files
23     #include "FWCore/Framework/interface/Frameworkfwd.h"
24     #include "FWCore/Utilities/interface/EDMException.h"
25     #include "FWCore/ServiceRegistry/interface/Service.h"
26     #include "CommonTools/UtilAlgos/interface/TFileService.h"
27     #include "FWCore/MessageLogger/interface/MessageLogger.h"
28     #include "FWCore/Framework/interface/EDAnalyzer.h"
29    
30     #include "FWCore/Framework/interface/Event.h"
31     #include "FWCore/Framework/interface/MakerMacros.h"
32    
33     #include "FWCore/ParameterSet/interface/ParameterSet.h"
34    
35     #include "DataFormats/PatCandidates/interface/Jet.h"
36     #include "DataFormats/PatCandidates/interface/MET.h"
37     #include "DataFormats/PatCandidates/interface/Electron.h"
38     #include "DataFormats/PatCandidates/interface/Muon.h"
39     #include "DataFormats/PatCandidates/interface/Photon.h"
40    
41     #include "DataFormats/VertexReco/interface/Vertex.h"
42     #include "DataFormats/VertexReco/interface/VertexFwd.h"
43    
44 csander 1.2 #include "PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h"
45     #include "DataFormats/BTauReco/interface/JetTag.h"
46     #include "DataFormats/Common/interface/TriggerResults.h"
47     #include "FWCore/Common/interface/TriggerNames.h"
48    
49 csander 1.1 #include "TH1F.h"
50     #include "TFile.h"
51    
52     //
53     // class declaration
54     //
55     using namespace edm;
56     using namespace std;
57     using namespace reco;
58    
59 csander 1.2 class AnalysisSkeleton: public edm::EDAnalyzer {
60 csander 1.1 public:
61     explicit AnalysisSkeleton(const edm::ParameterSet&);
62     ~AnalysisSkeleton();
63     bool goodElectron(const pat::Electron* ele);
64     bool goodMuon(const pat::Muon* mu);
65     bool goodJet(const pat::Jet* jet);
66    
67     private:
68 csander 1.2 virtual void beginJob();
69 csander 1.1 virtual void analyze(const edm::Event&, const edm::EventSetup&);
70 csander 1.2 virtual void endJob();
71 csander 1.1
72     // ----------member data ---------------------------
73     };
74    
75     //
76     // constants, enums and typedefs
77     //
78    
79     //
80     // static data member definitions
81     //
82 csander 1.2 edm::InputTag jets_;
83     edm::InputTag met_;
84     edm::InputTag electrons_;
85     edm::InputTag muons_;
86     edm::InputTag photons_;
87     edm::InputTag vertex_;
88     edm::InputTag triggerTag_;
89    
90     double elec_pt_cut_;
91     double elec_eta_cut_;
92    
93     double muon_pt_cut_;
94     double muon_eta_cut_;
95    
96     double jet_pt_cut_;
97     double jet_eta_cut_;
98     bool jet_useJetID_;
99    
100     math::XYZPoint bs;
101    
102     TH1F* h_met;
103     TH1F* h_jetpt;
104     TH1F* h_jetphi;
105     TH1F* h_jeteta;
106    
107     TH1F* h_HTtag;
108     TH1F* h_HTprobe;
109     TH1F* h_HTturnon;
110     TH1F* h_MHTtag;
111     TH1F* h_MHTprobe;
112     TH1F* h_MHTturnon;
113    
114 csander 1.1 //
115     // constructors and destructor
116     //
117     AnalysisSkeleton::AnalysisSkeleton(const edm::ParameterSet& pset)
118    
119     {
120     //now do what ever initialization is needed
121 csander 1.2 jets_ = pset.getParameter < edm::InputTag > ("jetCollection");
122     met_ = pset.getParameter < edm::InputTag > ("metCollection");
123     electrons_ = pset.getParameter < edm::InputTag > ("electronCollection");
124     muons_ = pset.getParameter < edm::InputTag > ("muonCollection");
125     photons_ = pset.getParameter < edm::InputTag > ("photonCollection");
126     vertex_ = pset.getParameter < edm::InputTag > ("vertexCollection");
127     triggerTag_ = pset.getParameter < edm::InputTag > ("TriggerTag");
128    
129     muon_pt_cut_ = pset.getParameter<double>("muon_pt_cut");
130     muon_eta_cut_ = pset.getParameter<double>("muon_eta_cut");
131    
132     elec_pt_cut_ = pset.getParameter<double>("elec_pt_cut");
133     elec_eta_cut_ = pset.getParameter<double>("elec_eta_cut");
134    
135     jet_pt_cut_ = pset.getParameter<double>("jet_pt_cut");
136     jet_eta_cut_ = pset.getParameter<double>("jet_eta_cut");
137     jet_useJetID_ = pset.getParameter<bool>("jet_useJetID");
138 csander 1.1 }
139    
140 csander 1.2 AnalysisSkeleton::~AnalysisSkeleton() {
141 csander 1.1
142     // do anything here that needs to be done at destruction time
143     // (e.g. close files, deallocate resources etc.)
144    
145     }
146    
147     //
148     // member functions
149     //
150    
151     // ------------ method called to for each event ------------
152 csander 1.2 void AnalysisSkeleton::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
153 csander 1.1
154     //// Load all the PAT collections
155 csander 1.2
156     //Jets
157     Handle < edm::View<pat::Jet> > Jets;
158 csander 1.1 bool isFound = iEvent.getByLabel(jets_, Jets);
159     if (!isFound)
160     return;
161 csander 1.2 edm::View < pat::Jet > Jets_rec = *Jets;
162 csander 1.1
163     //MET
164 csander 1.2 Handle < edm::View<pat::MET> > Met;
165 csander 1.1 isFound = iEvent.getByLabel(met_, Met);
166     if (!isFound)
167     return;
168 csander 1.2 edm::View < pat::MET > Met_rec = *Met;
169 csander 1.1
170     //Electrons
171 csander 1.2 Handle < edm::View<pat::Electron> > Electrons;
172 csander 1.1 isFound = iEvent.getByLabel(electrons_, Electrons);
173     if (!isFound)
174     return;
175 csander 1.2 edm::View < pat::Electron > Electrons_rec = *Electrons;
176 csander 1.1
177     //Muons
178 csander 1.2 Handle < edm::View<pat::Muon> > Muons;
179 csander 1.1 isFound = iEvent.getByLabel(muons_, Muons);
180     if (!isFound)
181     return;
182 csander 1.2 edm::View < pat::Muon > Muons_rec = *Muons;
183 csander 1.1
184     //Photons
185 csander 1.2 Handle < edm::View<pat::Photon> > Photons;
186 csander 1.1 isFound = iEvent.getByLabel(photons_, Photons);
187     if (!isFound)
188     return;
189 csander 1.2 edm::View < pat::Photon > Photons_rec = *Photons;
190 csander 1.1
191     //Vertex
192 csander 1.2 edm::Handle < reco::VertexCollection > vertices;
193 csander 1.1 isFound = iEvent.getByLabel(vertex_, vertices);
194     if (!isFound)
195     return;
196    
197     for (reco::VertexCollection::const_iterator vertex = vertices->begin(); vertex != vertices->end(); ++vertex) {
198     bs = vertex->position();
199     break;
200     }
201    
202 csander 1.2 // trigger info
203     edm::Handle < edm::TriggerResults > hltresults;
204     iEvent.getByLabel(triggerTag_, hltresults);
205    
206     const edm::TriggerNames & triggerNames_ = iEvent.triggerNames(*hltresults);
207     bool triggered_probe = false;
208     for (unsigned int itrig = 0; itrig != hltresults->size(); ++itrig) {
209     std::string trigName = triggerNames_.triggerName(itrig);
210     // std::cout<<" trigger name = " << trigName << std::endl;
211     bool thistrig = false;
212     if (trigName.find("HLT_PFHT350_PFMET100_v") != std::string::npos)
213     thistrig = hltresults->accept(itrig);
214     if (thistrig)
215     triggered_probe = true;
216     }
217     bool triggered_tag = false;
218     for (unsigned int itrig = 0; itrig != hltresults->size(); ++itrig) {
219     std::string trigName = triggerNames_.triggerName(itrig);
220     // std::cout<<" trigger name = " << trigName << std::endl;
221     bool thistrig = false;
222     if (trigName.find("HLT_PFHT350_v") != std::string::npos)
223     thistrig = hltresults->accept(itrig);
224     if (thistrig)
225     triggered_tag = true;
226     }
227    
228 csander 1.1 //// Fill the histograms
229    
230 csander 1.2 double HT = 0;
231     math::PtEtaPhiMLorentzVector MHT(0., 0., 0., 0.);
232 csander 1.1 for (edm::View<pat::Jet>::const_iterator it = Jets_rec.begin(); it != Jets_rec.end(); ++it) {
233     if (goodJet(&(*it))) {
234     h_jetpt->Fill(it->pt());
235     h_jeteta->Fill(it->eta());
236     h_jetphi->Fill(it->phi());
237 csander 1.2 HT += it->pt();
238     MHT -= it->p4();
239 csander 1.1 }
240     }
241 csander 1.2 if (triggered_tag)
242     h_MHTtag->Fill(MHT.pt());
243     if (triggered_probe && triggered_tag)
244     h_MHTprobe->Fill(MHT.pt());
245 csander 1.1
246     for (edm::View<pat::MET>::const_iterator it = Met_rec.begin(); it != Met_rec.end(); ++it) {
247     h_met->Fill(it->pt());
248     break;
249     }
250    
251     }
252    
253     // ------------ method called once each job just before starting event loop ------------
254 csander 1.2 void AnalysisSkeleton::beginJob() {
255     edm::Service < TFileService > fs;
256 csander 1.1 if (!fs) {
257     throw edm::Exception(edm::errors::Configuration, "TFile Service is not registered in cfg file");
258     }
259 csander 1.2 h_met = fs->make < TH1F > ("met", "Met (Type I)", 100, 0., 1000.);
260 csander 1.1 h_met->Sumw2();
261 csander 1.2 h_jetpt = fs->make < TH1F > ("jetpt", "Jet Pt", 100, 0., 1000.);
262 csander 1.1 h_jetpt->Sumw2();
263 csander 1.2 h_jeteta = fs->make < TH1F > ("jeteta", "Jet Eta", 100, -5., 5.);
264 csander 1.1 h_jeteta->Sumw2();
265 csander 1.2 h_jetphi = fs->make < TH1F > ("jetphi", "Jet Phi", 100, -TMath::Pi(), -TMath::Pi());
266 csander 1.1 h_jetphi->Sumw2();
267 csander 1.2
268     h_HTtag = fs->make < TH1F > ("HTtag", "HTtag", 100, 0., 2000.);
269     h_HTtag->Sumw2();
270     h_HTprobe = fs->make < TH1F > ("HTprobe", "HTprobe", 100, 0., 2000.);
271     h_HTprobe->Sumw2();
272     h_HTturnon = fs->make < TH1F > ("HTturnon", "HTturnon", 100, 0., 2000.);
273     h_HTturnon->Sumw2();
274    
275     h_MHTtag = fs->make < TH1F > ("MHTtag", "MHTtag", 100, 0., 500.);
276     h_MHTtag->Sumw2();
277     h_MHTprobe = fs->make < TH1F > ("MHTprobe", "MHTprobe", 100, 0., 500.);
278     h_MHTprobe->Sumw2();
279     h_MHTturnon = fs->make < TH1F > ("MHTturnon", "MHTturnon", 100, 0., 500.);
280     h_MHTturnon->Sumw2();
281 csander 1.1 }
282    
283     // ------------ method called once each job just after ending the event loop ------------
284 csander 1.2 void AnalysisSkeleton::endJob() {
285 csander 1.1 }
286    
287     bool AnalysisSkeleton::goodElectron(const pat::Electron* ele) {
288     if (ele->pt() < elec_pt_cut_)
289     return false;
290     if (fabs(ele->eta()) > elec_eta_cut_)
291     return false;
292     return true;
293     }
294    
295     bool AnalysisSkeleton::goodMuon(const pat::Muon* mu) {
296     if (mu->pt() < muon_pt_cut_)
297     return false;
298     if (fabs(mu->eta()) > muon_eta_cut_)
299     return false;
300     return true;
301     }
302    
303     bool AnalysisSkeleton::goodJet(const pat::Jet* jet) {
304     if (jet->pt() < jet_pt_cut_)
305     return false;
306     if (fabs(jet->eta()) > jet_eta_cut_)
307     return false;
308 csander 1.2
309     PFJetIDSelectionFunctor jetIDLoosePF(PFJetIDSelectionFunctor::FIRSTDATA, PFJetIDSelectionFunctor::LOOSE);
310     pat::strbitset ret = jetIDLoosePF.getBitTemplate();
311     ret.set(false);
312     bool loose = jetIDLoosePF(*jet, ret);
313     if (!loose)
314 csander 1.1 return false;
315 csander 1.2
316 csander 1.1 return true;
317     }
318    
319     //define this as a plug-in
320 csander 1.2 DEFINE_FWK_MODULE (AnalysisSkeleton);