ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc
Revision: 1.21
Committed: Wed Jan 16 17:18:20 2013 UTC (12 years, 3 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
CVS Tags: HiForest_V02_35
Changes since 1.20: +52 -1 lines
Log Message:
castor variables added

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