ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MPIAnalyzer/src/MPIntuple.cc
Revision: 1.3
Committed: Sat May 22 00:51:59 2010 UTC (14 years, 11 months ago) by andrey
Content type: text/plain
Branch: MAIN
Changes since 1.2: +134 -1 lines
Log Message:
Add trigger menu

File Contents

# User Rev Content
1 naodell 1.1 /*
2     Description: <one line class summary>
3    
4     Implementation:
5     n-tuple creator for jet studies
6     */
7     //
8     // Original Author: "Nathaniel Odell"
9     // Secondary Author: Steven Won
10 andrey 1.2 // With contributions from: Andrey Pozdnyakov
11 naodell 1.1 // Created: Thurs April 22 2010
12 andrey 1.3 // $Id: MPIntuple.cc,v 1.2 2010/05/21 22:30:38 andrey Exp $
13 naodell 1.1 //
14     //
15    
16    
17     // system include files
18     #include <memory>
19     #include <string>
20    
21     // user include files
22     #include "FWCore/Framework/interface/Frameworkfwd.h"
23     #include "FWCore/Framework/interface/EDAnalyzer.h"
24     #include "FWCore/Framework/interface/ESHandle.h"
25     #include "FWCore/Framework/interface/EventSetup.h"
26     #include "FWCore/Framework/interface/Event.h"
27     #include "FWCore/Framework/interface/MakerMacros.h"
28    
29     #include "FWCore/ParameterSet/interface/ParameterSet.h"
30    
31     #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
32     #include "Geometry/Records/interface/CaloGeometryRecord.h"
33    
34     #include "DataFormats/JetReco/interface/CaloJet.h"
35     #include "DataFormats/JetReco/interface/CaloJetCollection.h"
36     #include "DataFormats/JetReco/interface/PFJet.h"
37     #include "DataFormats/JetReco/interface/PFJetCollection.h"
38     #include "DataFormats/JetReco/interface/GenJet.h"
39     #include "DataFormats/JetReco/interface/GenJetCollection.h"
40     #include "DataFormats/JetReco/interface/Jet.h"
41     #include "DataFormats/VertexReco/interface/Vertex.h"
42     #include "DataFormats/VertexReco/interface/VertexFwd.h"
43    
44 andrey 1.2 // Need for HLT trigger info:
45     #include "FWCore/Common/interface/TriggerNames.h"
46     #include "DataFormats/Common/interface/TriggerResults.h"
47     #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
48     //
49    
50 naodell 1.1 #include "TROOT.h"
51     #include "TFile.h"
52     #include "TTree.h"
53     #include "TString.h"
54     #include "TObject.h"
55     #include "TObjArray.h"
56     #include "TClonesArray.h"
57     #include "TRefArray.h"
58     #include "TLorentzVector.h"
59     #include "TVector3.h"
60    
61     using namespace edm;
62     using namespace std;
63     using namespace reco;
64    
65     //
66     // class declaration
67     //
68    
69     class MPIntuple : public edm::EDAnalyzer {
70     public:
71     explicit MPIntuple(const edm::ParameterSet&);
72     ~MPIntuple();
73    
74    
75     private:
76     virtual void beginJob() ;
77     virtual void analyze(const edm::Event&, const edm::EventSetup&);
78     virtual void endJob() ;
79    
80 andrey 1.2 bool triggerDecision(edm::Handle<edm::TriggerResults> &hltR, int iTrigger);
81    
82 naodell 1.1 // ----------member data ---------------------------
83    
84     edm::InputTag PFJetHandle_;
85     edm::InputTag CaloJetHandle_;
86     edm::InputTag PFJetHandle_corr;
87     edm::InputTag CaloJetHandle_corr;
88     edm::InputTag GenJetHandle_;
89     edm::InputTag PrimaryVtxHandle_;
90    
91    
92     // Counting variables //
93    
94     int eventNumber, runNumber, lumiSection;
95    
96     TTree *sTree;
97     TFile* ntupleFile;
98    
99     TClonesArray* jetP4_ak5PF;
100     TClonesArray* jetP4_ak5PF_corr;
101     TClonesArray* jetVtx3_ak5PF;
102     TClonesArray* jetVtx3_ak5PF_corr;
103     TClonesArray* jetP4_ak5Calo;
104     TClonesArray* jetP4_ak5Calo_corr;
105     TClonesArray* jetVtx3_ak5Calo;
106     TClonesArray* jetVtx3_ak5Calo_corr;
107     TClonesArray* jetP4_ak5Gen;
108     TClonesArray* jetVtx3_ak5Gen;
109     TClonesArray* PrimaryVtx3;
110    
111     bool doGenJets_;
112     bool doCaloJets_;
113     bool doPFJets_;
114    
115     string rootfilename;
116    
117 andrey 1.2 //Triggers
118     std::string hlTriggerResults_;
119     edm::TriggerNames triggerNames;
120     std::string hltName_;
121     std::string triggerName_;
122     HLTConfigProvider hltConfig_;
123     edm::InputTag triggerResultsTag_;
124     std::vector<std::string> hlNames;
125    
126    
127 naodell 1.1 };
128    
129     MPIntuple::MPIntuple(const edm::ParameterSet& iConfig):
130    
131     PFJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag")),
132     CaloJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag")),
133     PFJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag_corr")),
134     CaloJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag_corr")),
135     GenJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag")),
136     PrimaryVtxHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag")),
137     doGenJets_(iConfig.getUntrackedParameter<bool>("doGenJets")),
138     doCaloJets_(iConfig.getUntrackedParameter<bool>("doCaloJets")),
139     doPFJets_(iConfig.getUntrackedParameter<bool>("doPFJets")),
140 andrey 1.2 rootfilename(iConfig.getUntrackedParameter<string>("rootfilename")),
141     hlTriggerResults_(iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults")),
142     hltName_(iConfig.getUntrackedParameter<string>("hltName","HLT"))
143 naodell 1.1 {
144 andrey 1.2 //edm::TriggerNames
145     // triggerNames(iConfig);
146 naodell 1.1
147     }
148    
149    
150     MPIntuple::~MPIntuple()
151     {
152    
153     }
154    
155    
156     //
157     // member functions
158     //
159    
160     // ------------ method called to for each event ------------
161     void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
162     {
163    
164     eventNumber = iEvent.id().event();
165     runNumber = iEvent.id().run();
166     lumiSection = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock();
167    
168     int PFcount = 0;
169     int Calocount = 0;
170     int PFcount_corr = 0;
171     int Calocount_corr = 0;
172     int Gencount = 0;
173     int Vtxcount = 0;
174    
175     if(doPFJets_){
176    
177     Handle<reco::PFJetCollection> PFJets;
178     iEvent.getByLabel(PFJetHandle_, PFJets);
179    
180     PFcount = 0;
181    
182     for(PFJetCollection::const_iterator jet_iter = PFJets->begin(); jet_iter!= PFJets->end(); ++jet_iter){
183    
184     reco::PFJet myJet = reco::PFJet(*jet_iter);
185    
186     if(myJet.et() > 5){
187    
188     new ((*jetP4_ak5PF)[PFcount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
189     new ((*jetVtx3_ak5PF)[PFcount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
190    
191     ++PFcount;
192     }
193    
194     }
195    
196    
197     PFcount_corr = 0;
198    
199     Handle<reco::PFJetCollection> PFJets_corr;
200     iEvent.getByLabel(PFJetHandle_corr, PFJets_corr);
201    
202     for(PFJetCollection::const_iterator jet_iter = PFJets_corr->begin(); jet_iter!= PFJets_corr->end(); ++jet_iter){
203    
204     reco::PFJet myJet = reco::PFJet(*jet_iter);
205    
206     if(myJet.et() > 5){
207    
208     new ((*jetP4_ak5PF_corr)[PFcount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
209     new ((*jetVtx3_ak5PF_corr)[PFcount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
210    
211     ++PFcount_corr;
212     }
213     }
214     }
215    
216     if(doCaloJets_){
217    
218     Calocount = 0;
219    
220     Handle<reco::CaloJetCollection> CaloJets;
221     iEvent.getByLabel(CaloJetHandle_, CaloJets);
222    
223     for(CaloJetCollection::const_iterator jet_iter = CaloJets->begin(); jet_iter!= CaloJets->end(); ++jet_iter){
224    
225     reco::CaloJet myJet = reco::CaloJet(*jet_iter);
226    
227     if(myJet.et() > 5){
228    
229     new ((*jetP4_ak5Calo)[Calocount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
230     new ((*jetVtx3_ak5Calo)[Calocount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
231    
232     ++Calocount;
233    
234     }
235     }
236    
237     Handle<reco::CaloJetCollection> CaloJets_corr;
238     iEvent.getByLabel(CaloJetHandle_corr, CaloJets_corr);
239    
240     Calocount_corr = 0;
241    
242     for(CaloJetCollection::const_iterator jet_iter = CaloJets_corr->begin(); jet_iter!= CaloJets_corr->end(); ++jet_iter){
243    
244     reco::CaloJet myJet = reco::CaloJet(*jet_iter);
245    
246     if(myJet.et() > 5){
247    
248     new ((*jetP4_ak5Calo_corr)[Calocount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
249     new ((*jetVtx3_ak5Calo_corr)[Calocount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
250    
251     ++Calocount_corr;
252     }
253     }
254     }
255    
256     if(doGenJets_){
257    
258     Handle<reco::GenJetCollection> GenJets;
259     iEvent.getByLabel(GenJetHandle_, GenJets);
260    
261    
262     for(GenJetCollection::const_iterator jet_iter = GenJets->begin(); jet_iter!= GenJets->end(); ++jet_iter){
263    
264     reco::GenJet myJet = reco::GenJet(*jet_iter);
265    
266     if(myJet.et() > 5){
267    
268     new ((*jetP4_ak5Gen)[Gencount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
269     new ((*jetVtx3_ak5Gen)[Gencount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
270    
271     ++Gencount;
272    
273     }
274     }
275     }
276    
277    
278     Handle<reco::VertexCollection> primaryVtx;
279     iEvent.getByLabel(PrimaryVtxHandle_, primaryVtx);
280    
281     for(VertexCollection::const_iterator vtx_iter = primaryVtx->begin(); vtx_iter!= primaryVtx->end(); ++vtx_iter){
282    
283     reco::Vertex myVtx = reco::Vertex(*vtx_iter);
284    
285     new ((*PrimaryVtx3)[Vtxcount]) TVector3(myVtx.x(), myVtx.y(), myVtx.z());
286    
287     ++Vtxcount;
288    
289     }
290    
291    
292     if(Calocount > 0 || Calocount_corr >0 || PFcount_corr > 0 || PFcount > 0 || Gencount > 0) sTree -> Fill();
293    
294     jetP4_ak5PF->Clear();
295     jetP4_ak5PF_corr->Clear();
296     jetVtx3_ak5PF->Clear();
297     jetP4_ak5Calo->Clear();
298     jetP4_ak5Calo_corr->Clear();
299     jetVtx3_ak5Calo->Clear();
300     jetP4_ak5Gen->Clear();
301     jetVtx3_ak5Gen->Clear();
302    
303 andrey 1.2
304    
305     //---------- Filling HLT trigger bits! ------------
306    
307     edm::Handle<TriggerResults> hltR;
308     triggerResultsTag_ = InputTag(hlTriggerResults_,"",hltName_);
309     iEvent.getByLabel(triggerResultsTag_,hltR);
310     const edm::TriggerNames & triggerNames = iEvent.triggerNames(*hltR);
311     hlNames=triggerNames.triggerNames();
312     bool triggerPassed = false;
313    
314     for (uint iT=0; iT<hlNames.size(); ++iT)
315     {
316     triggerPassed = triggerDecision(hltR, iT);
317 andrey 1.3
318     if (hlNames[iT]=="HLT_PixelTracks_Multiplicity70")
319     {
320     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
321     //And fill the bit here
322     }
323    
324     if (hlNames[iT]=="HLT_MinBiasBSC_NoBPTX")
325     {
326     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
327     //And fill the bit here
328     }
329    
330     if (hlNames[iT]=="HLT_PixelTracks_Multiplicity40")
331     {
332     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
333     }
334     if (hlNames[iT]=="HLT_L1Tech_HCAL_HF")
335     {
336     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
337     }
338     if (hlNames[iT]=="HLT_IsoTrackHB_8E29")
339     {
340     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
341     }
342     if (hlNames[iT]=="HLT_IsoTrackHE_8E29")
343     {
344     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
345     }
346     if (hlNames[iT]=="HLT_L1Tech_RPC_TTU_RBst1_collisions")
347     {
348     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
349     }
350     if (hlNames[iT]=="HLT_L1_BscMinBiasOR_BptxPlusORMinus")
351     {
352 andrey 1.2 cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
353 andrey 1.3 }
354     if (hlNames[iT]=="HLT_L1Tech_BSC_halo_forPhysicsBackground")
355     {
356     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
357     }
358     if (hlNames[iT]=="HLT_L1Tech_BSC_HighMultiplicity")
359     {
360     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
361     }
362     if (hlNames[iT]=="HLT_MinBiasPixel_DoubleIsoTrack5")
363     {
364     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
365     }
366     if (hlNames[iT]=="HLT_MinBiasPixel_DoubleTrack")
367     {
368     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
369     }
370     if (hlNames[iT]=="HLT_MinBiasPixel_SingleTrack")
371     {
372     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
373     }
374     if (hlNames[iT]=="HLT_ZeroBiasPixel_SingleTrack")
375     {
376     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
377     }
378     if (hlNames[iT]=="HLT_MinBiasBSC")
379     {
380     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
381     }
382     if (hlNames[iT]=="HLT_StoppedHSCP_8E29")
383     {
384     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
385     }
386     if (hlNames[iT]=="HLT_Jet15U_HcalNoiseFiltered")
387     {
388     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
389     }
390     if (hlNames[iT]=="HLT_QuadJet15U")
391     {
392     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
393     }
394     if (hlNames[iT]=="HLT_DiJetAve30U_8E29")
395     {
396     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
397     }
398     if (hlNames[iT]=="HLT_DiJetAve15U_8E29")
399     {
400     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
401     }
402     if (hlNames[iT]=="HLT_FwdJet20U")
403     {
404     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
405     }
406     if (hlNames[iT]=="HLT_Jet50U")
407     {
408     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
409     }
410     if (hlNames[iT]=="HLT_Jet30U")
411     {
412     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
413     }
414     if (hlNames[iT]=="HLT_Jet15U")
415     {
416     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
417     }
418     if (hlNames[iT]=="HLT_BTagMu_Jet10U")
419     {
420     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
421     }
422     if (hlNames[iT]=="HLT_DoubleJet15U_ForwardBackward")
423     {
424     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
425     }
426     if (hlNames[iT]=="HLT_BTagIP_Jet50U")
427     {
428     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
429     }
430     if (hlNames[iT]=="HLT_DoubleLooseIsoTau15")
431     {
432     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
433     }
434     if (hlNames[iT]=="HLT_SingleLooseIsoTau20")
435     {
436     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
437     }
438     if (hlNames[iT]=="HLT_HT100U")
439     {
440     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
441     }
442     if (hlNames[iT]=="HLT_MET100")
443     {
444     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
445     }
446     if (hlNames[iT]=="HLT_MET45")
447     {
448     cout<<"trigger name: "<<hlNames[iT]<<" status: "<<triggerPassed<<endl;
449     }
450    
451 andrey 1.2
452     // ----------->> Fill them Here! <<----------------------
453     }
454     //---------- ------------------ ---------------
455    
456    
457    
458 naodell 1.1 }
459    
460    
461     // ------------ method called once each job just before starting event loop ------------
462     void MPIntuple::beginJob()
463     {
464    
465     ntupleFile = new TFile(rootfilename.c_str(), "RECREATE");
466     sTree = new TTree("dpsTree", "Tree for Jets");
467    
468     jetP4_ak5PF = new TClonesArray("TLorentzVector");
469     jetVtx3_ak5PF = new TClonesArray("TVector3");
470     jetP4_ak5Calo = new TClonesArray("TLorentzVector");
471     jetVtx3_ak5Calo = new TClonesArray("TVector3");
472     jetP4_ak5PF_corr = new TClonesArray("TLorentzVector");
473     jetVtx3_ak5PF_corr = new TClonesArray("TVector3");
474     jetP4_ak5Calo_corr = new TClonesArray("TLorentzVector");
475     jetVtx3_ak5Calo_corr = new TClonesArray("TVector3");
476     jetP4_ak5Gen = new TClonesArray("TLorentzVector");
477     jetVtx3_ak5Gen = new TClonesArray("TVector3");
478     PrimaryVtx3 = new TClonesArray("TVector3");
479    
480     sTree->Branch("jetP4_ak5PF",&jetP4_ak5PF, 6400, 0);
481     sTree->Branch("jetP4_ak5PF_corr",&jetP4_ak5PF_corr, 6400, 0);
482     sTree->Branch("jetVtx3_ak5PF",&jetVtx3_ak5PF, 6400, 0);
483     sTree->Branch("jetVtx3_ak5PF_corr",&jetVtx3_ak5PF, 6400, 0);
484     sTree->Branch("jetP4_ak5Calo",&jetP4_ak5Calo, 6400, 0);
485     sTree->Branch("jetP4_ak5Calo_corr",&jetP4_ak5Calo_corr, 6400, 0);
486     sTree->Branch("jetVtx3_ak5Calo",&jetVtx3_ak5Calo, 6400, 0);
487     sTree->Branch("jetVtx3_ak5Calo_corr",&jetVtx3_ak5Calo, 6400, 0);
488     sTree->Branch("jetP4_ak5Gen",&jetP4_ak5Gen, 6400, 0);
489     sTree->Branch("jetVtx3_ak5Gen",&jetVtx3_ak5Gen, 6400, 0);
490     sTree->Branch("PrimaryVtx",&PrimaryVtx3, 6400, 0);
491    
492     sTree->Branch("eventNumber",&eventNumber, "eventNumber/I");
493     sTree->Branch("runNumber",&runNumber, "runNumber/I");
494     sTree->Branch("lumiSection",&lumiSection, "lumiSection/I");
495    
496     }
497    
498     // ------------ method called once each job just after ending the event loop ------------
499     void MPIntuple::endJob()
500     {
501     ntupleFile->Write();
502     ntupleFile->Close();
503    
504     }
505    
506    
507 andrey 1.2 bool MPIntuple::triggerDecision(edm::Handle<edm::TriggerResults> &hltR, int iTrigger)
508     {
509     bool triggerPassed = false;
510     if(hltR->wasrun(iTrigger) &&
511     hltR->accept(iTrigger) &&
512     !hltR->error(iTrigger) ){
513     triggerPassed = true;
514     }
515     return triggerPassed;
516     }
517    
518    
519 naodell 1.1 //define this as a plug-in
520     DEFINE_FWK_MODULE(MPIntuple);