ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc
Revision: 1.23
Committed: Sat Jan 19 16:25:13 2013 UTC (12 years, 3 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
Changes since 1.22: +132 -5 lines
Log Message:
Hijng centrality

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