ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc
Revision: 1.27
Committed: Tue Jan 22 16:36:27 2013 UTC (12 years, 3 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
CVS Tags: HiForest_V02_85, HiForest_V02_84, HiForest_V02_83, HiForest_V02_82, HiForest_V02_81, HiForest_V02_80, HiForest_V02_79, HiForest_V02_78, HiForest_V02_77, HiForest_V02_76, HiForest_V02_75, HiForest_V02_74, HiForest_V02_73, HiForest_V02_72, HiForest_V02_71, HiForest_V02_70, HiForest_V02_69, HiForest_V02_68, HiForest_V02_67, HiForest_V02_66, HiForest_V02_65, HiForest_V02_64, HiForest_V02_63, HiForest_V02_62, HiForest_V02_61, HiForest_V02_60, HiForest_V02_59, HiForest_V02_58, HiForest_V02_57, HiForest_V02_56, HiForest_V02_55, HiForest_V02_54, HiForest_V02_53, HiForest_V02_52, HiForest_V02_51, HiForest_V02_50, HiForest_V02_49, HiForest_V02_48, HiForest_V02_47, HiForest_V02_46, HEAD
Changes since 1.26: +6 -1 lines
Log Message:
castor saturation

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