ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc
Revision: 1.18
Committed: Sun Nov 20 15:45:10 2011 UTC (13 years, 5 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
CVS Tags: hi44X_02
Changes since 1.17: +163 -40 lines
Log Message:
RecHit Trees updated for vtx

File Contents

# User Rev Content
1 yilmaz 1.1 // -*- C++ -*-
2     //
3     // Package: RecHitTreeProducer
4     // Class: RecHitTreeProducer
5     //
6     /**\class RecHitTreeProducer RecHitTreeProducer.cc CmsHi/RecHitTreeProducer/src/RecHitTreeProducer.cc
7    
8     Description: [one line class summary]
9    
10     Implementation:
11     [Notes on implementation]
12     */
13     //
14     // Original Author: Yetkin Yilmaz
15 yjlee 1.17 // Modified: Frank Ma, Yen-Jie Lee
16 yilmaz 1.1 // Created: Tue Sep 7 11:38:19 EDT 2010
17 yilmaz 1.18 // $Id: RecHitTreeProducer.cc,v 1.17 2011/11/03 16:12:42 yjlee Exp $
18 yilmaz 1.1 //
19     //
20    
21 yjlee 1.16 #define versionTag "v1"
22 yilmaz 1.1 // system include files
23     #include <memory>
24     #include <vector>
25     #include <iostream>
26    
27     // user include files
28     #include "FWCore/Framework/interface/Frameworkfwd.h"
29     #include "FWCore/Framework/interface/EDAnalyzer.h"
30    
31     #include "FWCore/Framework/interface/Event.h"
32     #include "FWCore/Framework/interface/MakerMacros.h"
33     #include "FWCore/Framework/interface/ESHandle.h"
34     #include "FWCore/ParameterSet/interface/ParameterSet.h"
35    
36     #include "DataFormats/DetId/interface/DetId.h"
37     #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
38     #include "Geometry/Records/interface/IdealGeometryRecord.h"
39     #include "Geometry/Records/interface/CaloGeometryRecord.h"
40     #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
41    
42     #include "CommonTools/UtilAlgos/interface/TFileService.h"
43     #include "FWCore/ServiceRegistry/interface/Service.h"
44    
45     #include "DataFormats/Math/interface/deltaR.h"
46    
47     #include "DataFormats/Common/interface/Handle.h"
48     #include "DataFormats/FWLite/interface/ChainEvent.h"
49     #include "FWCore/Utilities/interface/InputTag.h"
50     #include "DataFormats/HeavyIonEvent/interface/CentralityBins.h"
51     #include "DataFormats/CaloTowers/interface/CaloTower.h"
52     #include "DataFormats/HeavyIonEvent/interface/Centrality.h"
53     #include "SimDataFormats/HiGenData/interface/GenHIEvent.h"
54     #include "DataFormats/PatCandidates/interface/Jet.h"
55     #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
56    
57     #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
58     #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
59     #include "DataFormats/HcalDetId/interface/HcalDetId.h"
60     #include "DataFormats/EcalDetId/interface/EcalDetIdCollections.h"
61 yilmaz 1.6 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
62 yilmaz 1.1 #include "DataFormats/DetId/interface/DetId.h"
63    
64 frankma 1.14 #include "DataFormats/VertexReco/interface/Vertex.h"
65     #include "DataFormats/VertexReco/interface/VertexFwd.h"
66    
67 yilmaz 1.1
68     #include "TNtuple.h"
69    
70     using namespace std;
71    
72 nart 1.3 #define MAXHITS 1000000
73 yilmaz 1.1
74     struct MyRecHit{
75 yilmaz 1.9 int depth[MAXHITS];
76 yilmaz 1.1 int n;
77    
78     float e[MAXHITS];
79     float et[MAXHITS];
80     float eta[MAXHITS];
81     float phi[MAXHITS];
82 yilmaz 1.18 float perp[MAXHITS];
83     float emEt[MAXHITS];
84     float hadEt[MAXHITS];
85    
86 nart 1.3 bool isjet[MAXHITS];
87 yilmaz 1.18 float etVtx[MAXHITS];
88     float etaVtx[MAXHITS];
89     float phiVtx[MAXHITS];
90     float perpVtx[MAXHITS];
91 frankma 1.14 float emEtVtx[MAXHITS];
92     float hadEtVtx[MAXHITS];
93 yilmaz 1.1
94 yilmaz 1.6 float jtpt;
95     float jteta;
96     float jtphi;
97    
98 yilmaz 1.1 };
99    
100    
101 yilmaz 1.7 struct MyBkg{
102     int n;
103     float rho[50];
104     float sigma[50];
105     };
106    
107 yilmaz 1.1
108     //
109     // class declaration
110     //
111    
112     class RecHitTreeProducer : public edm::EDAnalyzer {
113     public:
114     explicit RecHitTreeProducer(const edm::ParameterSet&);
115     ~RecHitTreeProducer();
116 yilmaz 1.18 double getEt(const DetId &id, double energy, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
117     double getEta(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
118     double getPhi(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
119     double getPerp(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
120    
121     math::XYZPoint getPosition(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
122     double getEt(math::XYZPoint pos, double energy);
123    
124 frankma 1.14 reco::Vertex::Point getVtx(const edm::Event& ev);
125    
126 yilmaz 1.1
127    
128     private:
129     virtual void beginJob() ;
130     virtual void analyze(const edm::Event&, const edm::EventSetup&);
131     virtual void endJob() ;
132    
133     // ----------member data ---------------------------
134    
135     edm::Handle<reco::Centrality> cent;
136     edm::Handle<vector<double> > ktRhos;
137     edm::Handle<vector<double> > akRhos;
138    
139 yilmaz 1.2 edm::Handle<edm::SortedCollection<EcalRecHit,edm::StrictWeakOrdering<EcalRecHit> > > ebHits;
140     edm::Handle<edm::SortedCollection<EcalRecHit,edm::StrictWeakOrdering<EcalRecHit> > > eeHits;
141    
142     edm::Handle<HFRecHitCollection> hfHits;
143     edm::Handle<HBHERecHitCollection> hbheHits;
144 yilmaz 1.1
145 yilmaz 1.6 edm::Handle<reco::BasicClusterCollection> bClusters;
146     edm::Handle<CaloTowerCollection> towers;
147 frankma 1.14 edm::Handle<reco::VertexCollection> vtxs;
148 yilmaz 1.6
149 nart 1.3 typedef vector<EcalRecHit>::const_iterator EcalIterator;
150    
151     edm::Handle<reco::CaloJetCollection> jets;
152 yilmaz 1.7
153     edm::Handle<std::vector<double> > rhos;
154     edm::Handle<std::vector<double> > sigmas;
155 nart 1.3
156 yilmaz 1.1 MyRecHit hbheRecHit;
157     MyRecHit hfRecHit;
158 yilmaz 1.2 MyRecHit ebRecHit;
159     MyRecHit eeRecHit;
160 yilmaz 1.6 MyRecHit myBC;
161     MyRecHit myTowers;
162 yilmaz 1.7 MyBkg bkg;
163    
164 yilmaz 1.9 TNtuple* nt;
165 yilmaz 1.1 TTree* hbheTree;
166     TTree* hfTree;
167 yilmaz 1.2 TTree* ebTree;
168     TTree* eeTree;
169 yilmaz 1.6 TTree* bcTree;
170     TTree* towerTree;
171 yilmaz 1.7 TTree* bkgTree;
172 yilmaz 1.6
173 yilmaz 1.2 double cone;
174 yilmaz 1.9 double hfTowerThreshold_;
175     double hfLongThreshold_;
176     double hfShortThreshold_;
177     double hbheThreshold_;
178     double ebThreshold_;
179     double eeThreshold_;
180 frankma 1.13
181     double hbhePtMin_;
182     double hfPtMin_;
183     double ebPtMin_;
184     double eePtMin_;
185     double towerPtMin_;
186    
187 yilmaz 1.1 edm::Service<TFileService> fs;
188     const CentralityBins * cbins_;
189     const CaloGeometry *geo;
190    
191     edm::InputTag HcalRecHitHFSrc_;
192     edm::InputTag HcalRecHitHBHESrc_;
193 yilmaz 1.2 edm::InputTag EBSrc_;
194     edm::InputTag EESrc_;
195 yilmaz 1.6 edm::InputTag BCSrc_;
196     edm::InputTag TowerSrc_;
197 frankma 1.14 edm::InputTag VtxSrc_;
198 yilmaz 1.6
199 nart 1.3 edm::InputTag JetSrc_;
200 yilmaz 1.6
201 yilmaz 1.7 edm::InputTag FastJetTag_;
202    
203 yilmaz 1.6 bool useJets_;
204     bool doBasicClusters_;
205 yilmaz 1.7 bool doTowers_;
206     bool doEcal_;
207     bool doHcal_;
208 yjlee 1.17 bool doHF_;
209 frankma 1.15 bool hasVtx_;
210 yilmaz 1.18 bool saveBothVtx_;
211 yilmaz 1.1
212 yilmaz 1.7 bool doFastJet_;
213 yilmaz 1.9
214     bool doEbyEonly_;
215 yilmaz 1.18
216 yilmaz 1.1 };
217    
218     //
219     // constants, enums and typedefs
220     //
221    
222     //
223     // static data member definitions
224     //
225    
226     //
227     // constructors and destructor
228     //
229     RecHitTreeProducer::RecHitTreeProducer(const edm::ParameterSet& iConfig) :
230     cbins_(0),
231     geo(0),
232     cone(0.5)
233     {
234     //now do what ever initialization is needed
235 yilmaz 1.2 EBSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("EBRecHitSrc",edm::InputTag("ecalRecHit","EcalRecHitsEB"));
236     EESrc_ = iConfig.getUntrackedParameter<edm::InputTag>("EERecHitSrc",edm::InputTag("ecalRecHit","EcalRecHitsEE"));
237 yilmaz 1.1 HcalRecHitHFSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("hcalHFRecHitSrc",edm::InputTag("hfreco"));
238     HcalRecHitHBHESrc_ = iConfig.getUntrackedParameter<edm::InputTag>("hcalHBHERecHitSrc",edm::InputTag("hbhereco"));
239 yilmaz 1.6 BCSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("BasicClusterSrc1",edm::InputTag("ecalRecHit","EcalRecHitsEB","RECO"));
240     TowerSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("towersSrc",edm::InputTag("towerMaker"));
241 frankma 1.14 VtxSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("vtxSrc",edm::InputTag("hiSelectedVertex"));
242 yilmaz 1.10 JetSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("JetSrc",edm::InputTag("iterativeConePu5CaloJets"));
243 yilmaz 1.7 useJets_ = iConfig.getUntrackedParameter<bool>("useJets",true);
244 yilmaz 1.6 doBasicClusters_ = iConfig.getUntrackedParameter<bool>("doBasicClusters",false);
245 yilmaz 1.7 doTowers_ = iConfig.getUntrackedParameter<bool>("doTowers",true);
246     doEcal_ = iConfig.getUntrackedParameter<bool>("doEcal",true);
247     doHcal_ = iConfig.getUntrackedParameter<bool>("doHcal",true);
248 yjlee 1.17 doHF_ = iConfig.getUntrackedParameter<bool>("doHF",true);
249 yilmaz 1.18 hasVtx_ = iConfig.getUntrackedParameter<bool>("hasVtx",true);
250     saveBothVtx_ = iConfig.getUntrackedParameter<bool>("saveBothVtx",false);
251    
252 yilmaz 1.7 doFastJet_ = iConfig.getUntrackedParameter<bool>("doFastJet",true);
253     FastJetTag_ = iConfig.getUntrackedParameter<edm::InputTag>("FastJetTag",edm::InputTag("kt4CaloJets"));
254 yilmaz 1.9 doEbyEonly_ = iConfig.getUntrackedParameter<bool>("doEbyEonly",false);
255     hfTowerThreshold_ = iConfig.getUntrackedParameter<double>("HFtowerMin",3.);
256 yilmaz 1.11 hfLongThreshold_ = iConfig.getUntrackedParameter<double>("HFlongMin",0.5);
257     hfShortThreshold_ = iConfig.getUntrackedParameter<double>("HFshortMin",0.85);
258 frankma 1.13 hbhePtMin_ = iConfig.getUntrackedParameter<double>("HBHETreePtMin",0);
259     hfPtMin_ = iConfig.getUntrackedParameter<double>("HFTreePtMin",0);
260     ebPtMin_ = iConfig.getUntrackedParameter<double>("EBTreePtMin",0);
261     eePtMin_ = iConfig.getUntrackedParameter<double>("EETreePtMin",0.);
262     towerPtMin_ = iConfig.getUntrackedParameter<double>("TowerTreePtMin",0.);
263 yilmaz 1.18
264    
265 yilmaz 1.1 }
266    
267    
268     RecHitTreeProducer::~RecHitTreeProducer()
269     {
270    
271     // do anything here that needs to be done at desctruction time
272     // (e.g. close files, deallocate resources etc.)
273    
274     }
275    
276    
277     //
278     // member functions
279     //
280    
281     // ------------ method called to for each event ------------
282     void
283     RecHitTreeProducer::analyze(const edm::Event& ev, const edm::EventSetup& iSetup)
284     {
285    
286     hfRecHit.n = 0;
287     hbheRecHit.n = 0;
288 yilmaz 1.2 ebRecHit.n = 0;
289     eeRecHit.n = 0;
290 yilmaz 1.7 myBC.n = 0;
291     myTowers.n = 0;
292     bkg.n = 0;
293 yilmaz 1.1
294 frankma 1.14 // get vertex
295 yilmaz 1.18 reco::Vertex::Point vtx(0,0,0);
296 frankma 1.15 if (hasVtx_) vtx = getVtx(ev);
297 frankma 1.14
298 yjlee 1.17 if(doEcal_){
299     ev.getByLabel(EBSrc_,ebHits);
300     ev.getByLabel(EESrc_,eeHits);
301 yilmaz 1.7 }
302 yjlee 1.17
303 yilmaz 1.7 if(doHcal_){
304 yjlee 1.17 ev.getByLabel(HcalRecHitHBHESrc_,hbheHits);
305     }
306     if(doHF_){
307     ev.getByLabel(HcalRecHitHFSrc_,hfHits);
308 yilmaz 1.7 }
309 yjlee 1.17
310 yilmaz 1.6 if(useJets_) {
311     ev.getByLabel(JetSrc_,jets);
312     }
313 nart 1.3
314 yilmaz 1.6 if(doBasicClusters_){
315     ev.getByLabel(BCSrc_,bClusters);
316 nart 1.3 }
317 yilmaz 1.6
318 yilmaz 1.7 if(doTowers_){
319     ev.getByLabel(TowerSrc_,towers);
320     }
321 yilmaz 1.6
322 yilmaz 1.7 if(doFastJet_){
323     ev.getByLabel(edm::InputTag(FastJetTag_.label(),"rhos",FastJetTag_.process()),rhos);
324     ev.getByLabel(edm::InputTag(FastJetTag_.label(),"sigmas",FastJetTag_.process()),sigmas);
325     bkg.n = rhos->size();
326     for(unsigned int i = 0; i < rhos->size(); ++i){
327     bkg.rho[i] = (*rhos)[i];
328     bkg.sigma[i] = (*sigmas)[i];
329     }
330     }
331 nart 1.3
332 yilmaz 1.6 if(0 && !cbins_) cbins_ = getCentralityBinsFromDB(iSetup);
333 yilmaz 1.1
334     if(!geo){
335     edm::ESHandle<CaloGeometry> pGeo;
336     iSetup.get<CaloGeometryRecord>().get(pGeo);
337     geo = pGeo.product();
338     }
339 yilmaz 1.9
340 yilmaz 1.12 int nHFlongPlus = 0;
341     int nHFshortPlus = 0;
342     int nHFtowerPlus = 0;
343     int nHFlongMinus = 0;
344     int nHFshortMinus = 0;
345     int nHFtowerMinus = 0;
346 yilmaz 1.18
347 yjlee 1.17 if(doHF_){
348 yilmaz 1.1 for(unsigned int i = 0; i < hfHits->size(); ++i){
349     const HFRecHit & hit= (*hfHits)[i];
350     hfRecHit.e[hfRecHit.n] = hit.energy();
351 yilmaz 1.18 math::XYZPoint pos = getPosition(hit.id(),vtx);
352    
353     if(!saveBothVtx_){
354     hfRecHit.et[hfRecHit.n] = getEt(pos,hit.energy());
355     hfRecHit.eta[hfRecHit.n] = pos.eta();
356     hfRecHit.phi[hfRecHit.n] = pos.phi();
357     hfRecHit.perp[hfRecHit.n] = pos.rho();
358     }else{
359     hfRecHit.et[hfRecHit.n] = getEt(hit.id(),hit.energy());
360     hfRecHit.eta[hfRecHit.n] = getEta(hit.id());
361     hfRecHit.phi[hfRecHit.n] = getPhi(hit.id());
362     hfRecHit.perp[hfRecHit.n] = getPerp(hit.id());
363    
364     hfRecHit.etVtx[hfRecHit.n] = getEt(pos,hit.energy());
365     hfRecHit.etaVtx[hfRecHit.n] = pos.eta();
366     hfRecHit.phiVtx[hfRecHit.n] = pos.phi();
367     hfRecHit.perpVtx[hfRecHit.n] = pos.rho();
368    
369     }
370    
371 nart 1.3 hfRecHit.isjet[hfRecHit.n] = false;
372 yilmaz 1.9 hfRecHit.depth[hfRecHit.n] = hit.id().depth();
373 yilmaz 1.12
374     if(hit.id().ieta() > 0){
375 yjlee 1.17 if(hit.energy() > hfShortThreshold_ && hit.id().depth() != 1) nHFshortPlus++;
376     if(hit.energy() > hfLongThreshold_ && hit.id().depth() == 1) nHFlongPlus++;
377 yilmaz 1.12 }else{
378     if(hit.energy() > hfShortThreshold_ && hit.id().depth() != 1) nHFshortMinus++;
379     if(hit.energy() > hfLongThreshold_ && hit.id().depth() == 1) nHFlongMinus++;
380     }
381 yilmaz 1.9
382 yilmaz 1.7 if(useJets_){
383 nart 1.3 for(unsigned int j = 0 ; j < jets->size(); ++j){
384     const reco::Jet& jet = (*jets)[j];
385     double dr = reco::deltaR(hfRecHit.eta[hfRecHit.n],hfRecHit.phi[hfRecHit.n],jet.eta(),jet.phi());
386     if(dr < cone){ hfRecHit.isjet[hfRecHit.n] = true; }
387     }
388     }
389 frankma 1.13 if (hfRecHit.et[hfRecHit.n]>=hfPtMin_) hfRecHit.n++;
390 yilmaz 1.1 }
391 yjlee 1.17
392     if(doHcal_ && !doEbyEonly_){
393 yilmaz 1.1 for(unsigned int i = 0; i < hbheHits->size(); ++i){
394     const HBHERecHit & hit= (*hbheHits)[i];
395 frankma 1.13 if (getEt(hit.id(),hit.energy())<hbhePtMin_) continue;
396 yilmaz 1.18
397 nart 1.3 hbheRecHit.e[hbheRecHit.n] = hit.energy();
398 yilmaz 1.18 math::XYZPoint pos = getPosition(hit.id(),vtx);
399    
400     if(!saveBothVtx_){
401     hbheRecHit.et[hbheRecHit.n] = getEt(pos,hit.energy());
402     hbheRecHit.eta[hbheRecHit.n] = pos.eta();
403     hbheRecHit.phi[hbheRecHit.n] = pos.phi();
404     hbheRecHit.perp[hbheRecHit.n] = pos.rho();
405     }else{
406     hbheRecHit.et[hbheRecHit.n] = getEt(hit.id(),hit.energy());
407     hbheRecHit.eta[hbheRecHit.n] = getEta(hit.id());
408     hbheRecHit.phi[hbheRecHit.n] = getPhi(hit.id());
409     hbheRecHit.perp[hbheRecHit.n] = getPerp(hit.id());
410    
411     hbheRecHit.etVtx[hbheRecHit.n] = getEt(pos,hit.energy());
412     hbheRecHit.etaVtx[hbheRecHit.n] = pos.eta();
413     hbheRecHit.phiVtx[hbheRecHit.n] = pos.phi();
414     hbheRecHit.perpVtx[hbheRecHit.n] = pos.rho();
415    
416     }
417    
418     hbheRecHit.isjet[hbheRecHit.n] = false;
419     hbheRecHit.depth[hbheRecHit.n] = hit.id().depth();
420    
421 yilmaz 1.7 if(useJets_){
422 nart 1.3 for(unsigned int j = 0 ; j < jets->size(); ++j){
423     const reco::Jet& jet = (*jets)[j];
424     double dr = reco::deltaR(hbheRecHit.eta[hbheRecHit.n],hbheRecHit.phi[hbheRecHit.n],jet.eta(),jet.phi());
425     if(dr < cone){ hbheRecHit.isjet[hbheRecHit.n] = true; }
426     }
427     }
428 yilmaz 1.2 hbheRecHit.n++;
429     }
430 yilmaz 1.7 }
431 yilmaz 1.9 }
432     if(doEcal_ && !doEbyEonly_){
433 yilmaz 1.2 for(unsigned int i = 0; i < ebHits->size(); ++i){
434     const EcalRecHit & hit= (*ebHits)[i];
435 frankma 1.13 if (getEt(hit.id(),hit.energy())<ebPtMin_) continue;
436 yilmaz 1.18
437 yilmaz 1.2 ebRecHit.e[ebRecHit.n] = hit.energy();
438 yilmaz 1.18 math::XYZPoint pos = getPosition(hit.id(),vtx);
439    
440     if(!saveBothVtx_){
441     ebRecHit.et[ebRecHit.n] = getEt(pos,hit.energy());
442     ebRecHit.eta[ebRecHit.n] = pos.eta();
443     ebRecHit.phi[ebRecHit.n] = pos.phi();
444     ebRecHit.perp[ebRecHit.n] = pos.rho();
445     }else{
446     ebRecHit.et[ebRecHit.n] = getEt(hit.id(),hit.energy());
447     ebRecHit.eta[ebRecHit.n] = getEta(hit.id());
448     ebRecHit.phi[ebRecHit.n] = getPhi(hit.id());
449     ebRecHit.perp[ebRecHit.n] = getPerp(hit.id());
450     ebRecHit.etVtx[ebRecHit.n] = getEt(pos,hit.energy());
451     ebRecHit.etaVtx[ebRecHit.n] = pos.eta();
452     ebRecHit.phiVtx[ebRecHit.n] = pos.phi();
453     ebRecHit.perpVtx[ebRecHit.n] = pos.rho();
454    
455     }
456    
457 nart 1.3 ebRecHit.isjet[ebRecHit.n] = false;
458 yilmaz 1.7 if(useJets_){
459 nart 1.3 for(unsigned int j = 0 ; j < jets->size(); ++j){
460     const reco::Jet& jet = (*jets)[j];
461     double dr = reco::deltaR(ebRecHit.eta[ebRecHit.n],ebRecHit.phi[ebRecHit.n],jet.eta(),jet.phi());
462     if(dr < cone){ ebRecHit.isjet[ebRecHit.n] = true; }
463     }
464     }
465 yilmaz 1.2 ebRecHit.n++;
466     }
467 nart 1.3
468 yilmaz 1.2 for(unsigned int i = 0; i < eeHits->size(); ++i){
469     const EcalRecHit & hit= (*eeHits)[i];
470 frankma 1.13 if (getEt(hit.id(),hit.energy())<eePtMin_) continue;
471 yilmaz 1.18
472 yilmaz 1.2 eeRecHit.e[eeRecHit.n] = hit.energy();
473 yilmaz 1.18 math::XYZPoint pos = getPosition(hit.id(),vtx);
474    
475     if(!saveBothVtx_){
476     eeRecHit.et[eeRecHit.n] = getEt(pos,hit.energy());
477     eeRecHit.eta[eeRecHit.n] = pos.eta();
478     eeRecHit.phi[eeRecHit.n] = pos.phi();
479     eeRecHit.perp[eeRecHit.n] = pos.rho();
480     }else{
481     eeRecHit.et[eeRecHit.n] = getEt(hit.id(),hit.energy());
482     eeRecHit.eta[eeRecHit.n] = getEta(hit.id());
483     eeRecHit.phi[eeRecHit.n] = getPhi(hit.id());
484     eeRecHit.perp[eeRecHit.n] = getPerp(hit.id());
485     eeRecHit.etVtx[eeRecHit.n] = getEt(pos,hit.energy());
486     eeRecHit.etaVtx[eeRecHit.n] = pos.eta();
487     eeRecHit.phiVtx[eeRecHit.n] = pos.phi();
488     eeRecHit.perpVtx[eeRecHit.n] = pos.rho();
489    
490     }
491    
492 nart 1.3 eeRecHit.isjet[eeRecHit.n] = false;
493 yilmaz 1.18
494 yilmaz 1.7 if(useJets_){
495 nart 1.3 for(unsigned int j = 0 ; j < jets->size(); ++j){
496     const reco::Jet& jet = (*jets)[j];
497     double dr = reco::deltaR(eeRecHit.eta[eeRecHit.n],eeRecHit.phi[eeRecHit.n],jet.eta(),jet.phi());
498     if(dr < cone){ eeRecHit.isjet[eeRecHit.n] = true; }
499     }
500     }
501 yilmaz 1.2 eeRecHit.n++;
502 yilmaz 1.1 }
503 yilmaz 1.7 }
504    
505     if(doTowers_){
506    
507     for(unsigned int i = 0; i < towers->size(); ++i){
508     const CaloTower & hit= (*towers)[i];
509 frankma 1.13 if (getEt(hit.id(),hit.energy())<towerPtMin_) continue;
510 yilmaz 1.18
511     myTowers.et[myTowers.n] = hit.p4(vtx).Et();
512     myTowers.eta[myTowers.n] = hit.p4(vtx).Eta();
513     myTowers.emEt[myTowers.n] = hit.emEt(vtx);
514     myTowers.hadEt[myTowers.n] = hit.hadEt(vtx);
515    
516     if (saveBothVtx_) {
517     myTowers.e[myTowers.n] = hit.energy();
518     myTowers.et[myTowers.n] = getEt(hit.id(),hit.energy());
519     myTowers.eta[myTowers.n] = getEta(hit.id());
520     myTowers.phi[myTowers.n] = getPhi(hit.id());
521     myTowers.isjet[myTowers.n] = false;
522     myTowers.etVtx[myTowers.n] = hit.p4(vtx).Et();
523     myTowers.etaVtx[myTowers.n] = hit.p4(vtx).Eta();
524 frankma 1.15 myTowers.emEtVtx[myTowers.n] = hit.emEt(vtx);
525     myTowers.hadEtVtx[myTowers.n] = hit.hadEt(vtx);
526     }
527 yilmaz 1.9
528 yilmaz 1.18 myTowers.isjet[myTowers.n] = false;
529    
530 yilmaz 1.12 if(hit.ieta() > 29 && hit.energy() > hfTowerThreshold_) nHFtowerPlus++;
531     if(hit.ieta() < -29 && hit.energy() > hfTowerThreshold_) nHFtowerMinus++;
532 yilmaz 1.9
533 yilmaz 1.7 if(useJets_){
534     for(unsigned int j = 0 ; j < jets->size(); ++j){
535     const reco::Jet& jet = (*jets)[j];
536     double dr = reco::deltaR(myTowers.eta[myTowers.n],myTowers.phi[myTowers.n],jet.eta(),jet.phi());
537     if(dr < cone){ myTowers.isjet[myTowers.n] = true; }
538     }
539     }
540     myTowers.n++;
541     }
542 yilmaz 1.6
543 yilmaz 1.7 }
544 yilmaz 1.6
545 yilmaz 1.9 if(doBasicClusters_ && !doEbyEonly_){
546 yilmaz 1.6 for(unsigned int j = 0 ; j < jets->size(); ++j){
547     const reco::Jet& jet = (*jets)[j];
548     myBC.n = 0;
549     myBC.jtpt = jet.pt();
550     myBC.jteta = jet.eta();
551     myBC.jtphi = jet.phi();
552    
553     for(unsigned int i = 0; i < bClusters->size(); ++i){
554     const reco::BasicCluster & bc= (*bClusters)[i];
555     double dr = reco::deltaR(bc.eta(),bc.phi(),jet.eta(),jet.phi());
556     if(dr < cone){
557     myBC.e[myBC.n] = bc.energy();
558     myBC.et[myBC.n] = bc.energy()*sin(bc.position().theta());
559     myBC.eta[myBC.n] = bc.eta();
560     myBC.phi[myBC.n] = bc.phi();
561     myBC.n++;
562     }
563     }
564     bcTree->Fill();
565     }
566     }
567 yilmaz 1.7
568 yilmaz 1.9 if(!doEbyEonly_){
569     towerTree->Fill();
570    
571     eeTree->Fill();
572     ebTree->Fill();
573    
574     hbheTree->Fill();
575     hfTree->Fill();
576    
577     if (doFastJet_) {
578     bkgTree->Fill();
579     }
580     }
581    
582 yilmaz 1.12 nt->Fill(nHFtowerPlus,nHFtowerMinus,nHFlongPlus,nHFlongMinus,nHFshortPlus,nHFshortMinus);
583 nart 1.3
584 yilmaz 1.1 }
585    
586    
587     // ------------ method called once each job just before starting event loop ------------
588     void
589     RecHitTreeProducer::beginJob()
590     {
591 nart 1.3
592 yjlee 1.16 hbheTree = fs->make<TTree>("hbhe",versionTag);
593 yilmaz 1.1 hbheTree->Branch("n",&hbheRecHit.n,"n/I");
594     hbheTree->Branch("e",hbheRecHit.e,"e[n]/F");
595     hbheTree->Branch("et",hbheRecHit.et,"et[n]/F");
596     hbheTree->Branch("eta",hbheRecHit.eta,"eta[n]/F");
597     hbheTree->Branch("phi",hbheRecHit.phi,"phi[n]/F");
598 yilmaz 1.18 hbheTree->Branch("perp",hbheRecHit.perp,"perp[n]/F");
599    
600 yilmaz 1.5 hbheTree->Branch("isjet",hbheRecHit.isjet,"isjet[n]/O");
601 yilmaz 1.18 hbheTree->Branch("depth",hfRecHit.depth,"depth[n]/I");
602    
603 yjlee 1.16 hfTree = fs->make<TTree>("hf",versionTag);
604 yilmaz 1.1 hfTree->Branch("n",&hfRecHit.n,"n/I");
605     hfTree->Branch("e",hfRecHit.e,"e[n]/F");
606     hfTree->Branch("et",hfRecHit.et,"et[n]/F");
607     hfTree->Branch("eta",hfRecHit.eta,"eta[n]/F");
608     hfTree->Branch("phi",hfRecHit.phi,"phi[n]/F");
609 yilmaz 1.18 hfTree->Branch("perp",hfRecHit.perp,"perp[n]/F");
610 yilmaz 1.9 hfTree->Branch("depth",hfRecHit.depth,"depth[n]/I");
611 yilmaz 1.5 hfTree->Branch("isjet",hfRecHit.isjet,"isjet[n]/O");
612 yilmaz 1.1
613 yjlee 1.16 eeTree = fs->make<TTree>("ee",versionTag);
614 yilmaz 1.2 eeTree->Branch("n",&eeRecHit.n,"n/I");
615     eeTree->Branch("e",eeRecHit.e,"e[n]/F");
616     eeTree->Branch("et",eeRecHit.et,"et[n]/F");
617     eeTree->Branch("eta",eeRecHit.eta,"eta[n]/F");
618     eeTree->Branch("phi",eeRecHit.phi,"phi[n]/F");
619 yilmaz 1.18 eeTree->Branch("perp",eeRecHit.perp,"perp[n]/F");
620    
621 yilmaz 1.5 eeTree->Branch("isjet",eeRecHit.isjet,"isjet[n]/O");
622 nart 1.3
623 yjlee 1.16 ebTree = fs->make<TTree>("eb",versionTag);
624 yilmaz 1.2 ebTree->Branch("n",&ebRecHit.n,"n/I");
625     ebTree->Branch("e",ebRecHit.e,"e[n]/F");
626     ebTree->Branch("et",ebRecHit.et,"et[n]/F");
627     ebTree->Branch("eta",ebRecHit.eta,"eta[n]/F");
628     ebTree->Branch("phi",ebRecHit.phi,"phi[n]/F");
629 yilmaz 1.18 ebTree->Branch("perp",ebRecHit.perp,"perp[n]/F");
630    
631 yilmaz 1.4 ebTree->Branch("isjet",ebRecHit.isjet,"isjet[n]/O");
632 yilmaz 1.2
633 yjlee 1.16 towerTree = fs->make<TTree>("tower",versionTag);
634 yilmaz 1.7 towerTree->Branch("n",&myTowers.n,"n/I");
635     towerTree->Branch("e",myTowers.e,"e[n]/F");
636     towerTree->Branch("et",myTowers.et,"et[n]/F");
637     towerTree->Branch("eta",myTowers.eta,"eta[n]/F");
638     towerTree->Branch("phi",myTowers.phi,"phi[n]/F");
639     towerTree->Branch("isjet",myTowers.isjet,"isjet[n]/O");
640 yilmaz 1.18 towerTree->Branch("emEt",myTowers.emEt,"emEt[n]/F");
641     towerTree->Branch("hadEt",myTowers.hadEt,"hadEt[n]/F");
642    
643     if (saveBothVtx_) {
644     towerTree->Branch("etVtx",myTowers.etVtx,"etvtx[n]/F");
645     towerTree->Branch("etaVtx",myTowers.etaVtx,"etavtx[n]/F");
646 frankma 1.15 towerTree->Branch("emEtVtx",myTowers.emEtVtx,"emEtVtx[n]/F");
647     towerTree->Branch("hadEtVtx",myTowers.hadEtVtx,"hadEtVtx[n]/F");
648     }
649 yilmaz 1.7
650    
651 yilmaz 1.6 if(doBasicClusters_){
652 yjlee 1.16 bcTree = fs->make<TTree>("bc",versionTag);
653 yilmaz 1.6 bcTree->Branch("n",&myBC.n,"n/I");
654     bcTree->Branch("e",myBC.e,"e[n]/F");
655     bcTree->Branch("et",myBC.et,"et[n]/F");
656     bcTree->Branch("eta",myBC.eta,"eta[n]/F");
657     bcTree->Branch("phi",myBC.phi,"phi[n]/F");
658     bcTree->Branch("jtpt",&myBC.jtpt,"jtpt/F");
659     bcTree->Branch("jteta",&myBC.jteta,"jteta/F");
660     bcTree->Branch("jtphi",&myBC.jtphi,"jtphi/F");
661     // bcTree->Branch("isjet",bcRecHit.isjet,"isjet[n]/O");
662     }
663    
664 yilmaz 1.7 if(doFastJet_){
665 yjlee 1.16 bkgTree = fs->make<TTree>("bkg",versionTag);
666 yilmaz 1.7 bkgTree->Branch("n",&bkg.n,"n/I");
667     bkgTree->Branch("rho",bkg.rho,"rho[n]/F");
668     bkgTree->Branch("sigma",bkg.sigma,"sigma[n]/F");
669     }
670 yilmaz 1.9
671 yilmaz 1.12 nt = fs->make<TNtuple>("ntEvent","","nHFplus:nHFminus:nHFlongPlus:nHFlongMinus:nHFshortPlus:nHFshortMinus");
672 yilmaz 1.6
673 yilmaz 1.1 }
674    
675     // ------------ method called once each job just after ending the event loop ------------
676     void
677     RecHitTreeProducer::endJob() {
678     }
679    
680 yilmaz 1.18 math::XYZPoint RecHitTreeProducer::getPosition(const DetId &id, reco::Vertex::Point vtx){
681     const GlobalPoint& pos=geo->getPosition(id);
682     math::XYZPoint posV(pos.x() - vtx.x(),pos.y() - vtx.y(),pos.z() - vtx.z());
683     return posV;
684     }
685    
686     double RecHitTreeProducer::getEt(math::XYZPoint pos, double energy){
687     double et = energy*sin(pos.theta());
688     return et;
689     }
690    
691     double RecHitTreeProducer::getEt(const DetId &id, double energy, reco::Vertex::Point vtx){
692 yilmaz 1.1 const GlobalPoint& pos=geo->getPosition(id);
693     double et = energy*sin(pos.theta());
694     return et;
695     }
696 nart 1.3
697 yilmaz 1.18 double RecHitTreeProducer::getEta(const DetId &id, reco::Vertex::Point vtx){
698 yilmaz 1.1 const GlobalPoint& pos=geo->getPosition(id);
699     double et = pos.eta();
700     return et;
701     }
702    
703 yilmaz 1.18 double RecHitTreeProducer::getPhi(const DetId &id, reco::Vertex::Point vtx){
704 yilmaz 1.1 const GlobalPoint& pos=geo->getPosition(id);
705     double et = pos.phi();
706     return et;
707     }
708    
709 yilmaz 1.18 double RecHitTreeProducer::getPerp(const DetId &id, reco::Vertex::Point vtx){
710     const GlobalPoint& pos=geo->getPosition(id);
711     double et = pos.perp();
712     return et;
713     }
714    
715 frankma 1.14 reco::Vertex::Point RecHitTreeProducer::getVtx(const edm::Event& ev)
716     {
717     ev.getByLabel(VtxSrc_,vtxs);
718     int greatestvtx = 0;
719     int nVertex = vtxs->size();
720    
721     for (unsigned int i = 0 ; i< vtxs->size(); ++i){
722     unsigned int daughter = (*vtxs)[i].tracksSize();
723     if( daughter > (*vtxs)[greatestvtx].tracksSize()) greatestvtx = i;
724     //cout <<"Vertex: "<< (*vtxs)[i].position().z()<<" "<<daughter<<endl;
725     }
726    
727     if(nVertex<=0){
728 yilmaz 1.18 return reco::Vertex::Point(0,0,0);
729 frankma 1.14 }
730     return (*vtxs)[greatestvtx].position();
731     }
732 yilmaz 1.1
733     //define this as a plug-in
734     DEFINE_FWK_MODULE(RecHitTreeProducer);