ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc
(Generate patch)

Comparing UserCode/CmsHi/JetAnalysis/src/RecHitTreeProducer.cc (file contents):
Revision 1.7 by yilmaz, Tue Nov 2 12:58:33 2010 UTC vs.
Revision 1.26 by mojoe137, Tue Jan 22 11:26:52 2013 UTC

# Line 12 | Line 12
12   */
13   //
14   // Original Author:  Yetkin Yilmaz
15 + // Modified: Frank Ma, Yen-Jie Lee
16   //         Created:  Tue Sep  7 11:38:19 EDT 2010
17   // $Id$
18   //
19   //
20  
21 <
21 > #define versionTag "v1"
22   // system include files
23   #include <memory>
24   #include <vector>
# Line 55 | Line 56
56  
57   #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
58   #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
59 + #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
60   #include "DataFormats/HcalDetId/interface/HcalDetId.h"
61   #include "DataFormats/EcalDetId/interface/EcalDetIdCollections.h"
62   #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
63   #include "DataFormats/DetId/interface/DetId.h"
64  
65 + #include "DataFormats/VertexReco/interface/Vertex.h"
66 + #include "DataFormats/VertexReco/interface/VertexFwd.h"
67 +
68 + #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  
73   #include "TNtuple.h"
74  
75   using namespace std;
76  
77 < #define MAXHITS 1000000
77 > #define MAXHITS 100000
78  
70 struct MyRecHit{
79  
80 + struct MyRecHit{
81 +  int depth[MAXHITS];
82    int n;
83  
84 +  int ieta[MAXHITS];
85 +  int iphi[MAXHITS];
86 +
87    float e[MAXHITS];
88    float et[MAXHITS];
89    float eta[MAXHITS];
90    float phi[MAXHITS];
91 +  float perp[MAXHITS];
92 +  float emEt[MAXHITS];
93 +  float hadEt[MAXHITS];
94 +
95    bool isjet[MAXHITS];
96 +  float etVtx[MAXHITS];
97 +  float etaVtx[MAXHITS];
98 +  float phiVtx[MAXHITS];
99 +  float perpVtx[MAXHITS];
100 +  float emEtVtx[MAXHITS];
101 +  float hadEtVtx[MAXHITS];
102  
103     float jtpt;
104     float jteta;
# Line 83 | Line 106 | struct MyRecHit{
106  
107   };
108  
109 + struct MyZDCRecHit{  
110 +  int n;
111 +  float  e[18];
112 +  int    zside[18];
113 +  int    section [18];
114 +  int    channel[18];
115 +  int    saturation[18];
116 + };
117 +
118 + struct MyZDCDigi{  
119 +  int    n;
120 +  float  chargefC[10][18];
121 +  int    adc[10][18];
122 +  int    zside[18];
123 +  int    section [18];
124 +  int    channel[18];
125 + };
126  
127   struct MyBkg{
128     int n;
# Line 99 | Line 139 | class RecHitTreeProducer : public edm::E
139     public:
140        explicit RecHitTreeProducer(const edm::ParameterSet&);
141        ~RecHitTreeProducer();
142 <  double       getEt(const DetId &id, double energy);
143 <  double       getEta(const DetId &id);
144 <  double       getPhi(const DetId &id);
142 >  double       getEt(const DetId &id, double energy, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
143 >  double       getEta(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
144 >  double       getPhi(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
145 >  double       getPerp(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
146 >
147 >  math::XYZPoint getPosition(const DetId &id, reco::Vertex::Point vtx = reco::Vertex::Point(0,0,0));
148 >  double getEt(math::XYZPoint pos, double energy);
149 >
150 >  reco::Vertex::Point getVtx(const edm::Event& ev);
151 >
152  
153  
154     private:
# Line 123 | Line 170 | class RecHitTreeProducer : public edm::E
170  
171     edm::Handle<reco::BasicClusterCollection> bClusters;
172     edm::Handle<CaloTowerCollection> towers;
173 <
173 >  edm::Handle<reco::VertexCollection> vtxs;
174  
175    typedef vector<EcalRecHit>::const_iterator EcalIterator;
176    
# Line 136 | Line 183 | class RecHitTreeProducer : public edm::E
183    MyRecHit hfRecHit;
184    MyRecHit ebRecHit;
185    MyRecHit eeRecHit;
186 <   MyRecHit myBC;
187 <   MyRecHit myTowers;
188 <   MyBkg bkg;
186 >  MyRecHit myBC;
187 >  MyRecHit myTowers;
188 >  MyRecHit castorRecHit;
189 >
190 >  MyZDCRecHit zdcRecHit;
191 >  MyZDCDigi zdcDigi;
192  
193 +  MyBkg bkg;
194  
195 +  TNtuple* nt;
196    TTree* hbheTree;
197    TTree* hfTree;
198    TTree* ebTree;
# Line 148 | Line 200 | class RecHitTreeProducer : public edm::E
200     TTree* bcTree;
201     TTree* towerTree;
202     TTree* bkgTree;
203 +  TTree* castorTree;
204 +  TTree* zdcRecHitTree;
205 +  TTree* zdcDigiTree;
206  
207    double cone;
208 +  double hfTowerThreshold_;
209 +  double hfLongThreshold_;
210 +  double hfShortThreshold_;
211 +  double hbheThreshold_;
212 +  double ebThreshold_;
213 +  double eeThreshold_;
214 +  
215 +  double hbhePtMin_;
216 +  double hfPtMin_;
217 +  double ebPtMin_;
218 +  double eePtMin_;
219 +  double towerPtMin_;
220  
221 +  int nZdcTs_;
222 +  bool calZDCDigi_;
223 +  
224     edm::Service<TFileService> fs;
225     const CentralityBins * cbins_;
226     const CaloGeometry *geo;
# Line 161 | Line 231 | class RecHitTreeProducer : public edm::E
231    edm::InputTag EESrc_;
232     edm::InputTag BCSrc_;
233     edm::InputTag TowerSrc_;
234 +  edm::InputTag VtxSrc_;
235  
236    edm::InputTag JetSrc_;
237  
# Line 171 | Line 242 | class RecHitTreeProducer : public edm::E
242     bool doTowers_;
243     bool doEcal_;
244     bool doHcal_;
245 +   bool doHF_;
246 +  bool doCastor_;
247 +  bool doZDCRecHit_;
248 +  bool doZDCDigi_;
249 +
250 +   bool hasVtx_;
251 +  bool saveBothVtx_;
252  
253     bool doFastJet_;
254 +
255 +  bool doEbyEonly_;
256 +
257   };
258  
259   //
# Line 198 | Line 279 | RecHitTreeProducer::RecHitTreeProducer(c
279    HcalRecHitHBHESrc_ = iConfig.getUntrackedParameter<edm::InputTag>("hcalHBHERecHitSrc",edm::InputTag("hbhereco"));
280    BCSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("BasicClusterSrc1",edm::InputTag("ecalRecHit","EcalRecHitsEB","RECO"));
281    TowerSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("towersSrc",edm::InputTag("towerMaker"));
282 <  JetSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("JetSrc",edm::InputTag("iterativeCone5CaloJets"));
282 >  VtxSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("vtxSrc",edm::InputTag("hiSelectedVertex"));
283 >  JetSrc_ = iConfig.getUntrackedParameter<edm::InputTag>("JetSrc",edm::InputTag("iterativeConePu5CaloJets"));
284    useJets_ = iConfig.getUntrackedParameter<bool>("useJets",true);
285    doBasicClusters_ = iConfig.getUntrackedParameter<bool>("doBasicClusters",false);
286    doTowers_ = iConfig.getUntrackedParameter<bool>("doTowers",true);
287    doEcal_ = iConfig.getUntrackedParameter<bool>("doEcal",true);
288    doHcal_ = iConfig.getUntrackedParameter<bool>("doHcal",true);
289 +  doHF_ = iConfig.getUntrackedParameter<bool>("doHF",true);
290 +  doCastor_ = iConfig.getUntrackedParameter<bool>("doCASTOR",true);
291 +  doZDCRecHit_ = iConfig.getUntrackedParameter<bool>("doZDCRecHit",true);
292 +  doZDCDigi_ = iConfig.getUntrackedParameter<bool>("doZDCDigi",true);
293 +
294 +  hasVtx_ = iConfig.getUntrackedParameter<bool>("hasVtx",true);
295 +  saveBothVtx_ = iConfig.getUntrackedParameter<bool>("saveBothVtx",false);
296 +
297    doFastJet_ = iConfig.getUntrackedParameter<bool>("doFastJet",true);
298    FastJetTag_ = iConfig.getUntrackedParameter<edm::InputTag>("FastJetTag",edm::InputTag("kt4CaloJets"));
299 <
299 >  doEbyEonly_ = iConfig.getUntrackedParameter<bool>("doEbyEonly",false);
300 >  hfTowerThreshold_ = iConfig.getUntrackedParameter<double>("HFtowerMin",3.);
301 >  hfLongThreshold_ = iConfig.getUntrackedParameter<double>("HFlongMin",0.5);
302 >  hfShortThreshold_ = iConfig.getUntrackedParameter<double>("HFshortMin",0.85);
303 >  hbhePtMin_ = iConfig.getUntrackedParameter<double>("HBHETreePtMin",0);
304 >  hfPtMin_ = iConfig.getUntrackedParameter<double>("HFTreePtMin",0);
305 >  ebPtMin_ = iConfig.getUntrackedParameter<double>("EBTreePtMin",0);
306 >  eePtMin_ = iConfig.getUntrackedParameter<double>("EETreePtMin",0.);
307 >  towerPtMin_ = iConfig.getUntrackedParameter<double>("TowerTreePtMin",0.);
308 >  nZdcTs_=iConfig.getUntrackedParameter<int>("nZdcTs",10);
309 >  calZDCDigi_=iConfig.getUntrackedParameter<bool>("calZDCDigi",true);
310   }
311  
312  
# Line 236 | Line 336 | RecHitTreeProducer::analyze(const edm::E
336     myTowers.n = 0;
337     bkg.n = 0;
338  
339 <   if(doEcal_){
340 <  ev.getByLabel(EBSrc_,ebHits);
341 <  ev.getByLabel(EESrc_,eeHits);
339 >  // get vertex
340 >   reco::Vertex::Point vtx(0,0,0);
341 >  if (hasVtx_) vtx = getVtx(ev);
342 >
343 >  if(doEcal_){
344 >    ev.getByLabel(EBSrc_,ebHits);
345 >    ev.getByLabel(EESrc_,eeHits);
346     }
347 +
348    if(doHcal_){
349 <  ev.getByLabel(HcalRecHitHFSrc_,hfHits);
350 <  ev.getByLabel(HcalRecHitHBHESrc_,hbheHits);
349 >    ev.getByLabel(HcalRecHitHBHESrc_,hbheHits);
350 >  }
351 >  if(doHF_){
352 >    ev.getByLabel(HcalRecHitHFSrc_,hfHits);
353    }
354 +
355    if(useJets_) {
356      ev.getByLabel(JetSrc_,jets);
357    }
# Line 273 | Line 381 | RecHitTreeProducer::analyze(const edm::E
381        iSetup.get<CaloGeometryRecord>().get(pGeo);
382        geo = pGeo.product();
383     }
384 <  
385 <   if(doHcal_){
384 >
385 >   int nHFlongPlus = 0;
386 >   int nHFshortPlus = 0;
387 >   int nHFtowerPlus = 0;
388 >   int nHFlongMinus = 0;
389 >   int nHFshortMinus = 0;
390 >   int nHFtowerMinus = 0;
391 >
392 >   if(doHF_){
393     for(unsigned int i = 0; i < hfHits->size(); ++i){
394       const HFRecHit & hit= (*hfHits)[i];
395       hfRecHit.e[hfRecHit.n] = hit.energy();
396 <     hfRecHit.et[hfRecHit.n] = getEt(hit.id(),hit.energy());
397 <     hfRecHit.eta[hfRecHit.n] = getEta(hit.id());
398 <     hfRecHit.phi[hfRecHit.n] = getPhi(hit.id());
396 >     math::XYZPoint pos = getPosition(hit.id(),vtx);
397 >
398 >     if(!saveBothVtx_){
399 >       hfRecHit.et[hfRecHit.n] = getEt(pos,hit.energy());
400 >       hfRecHit.eta[hfRecHit.n] = pos.eta();
401 >       hfRecHit.phi[hfRecHit.n] = pos.phi();
402 >       hfRecHit.perp[hfRecHit.n] = pos.rho();
403 >     }else{
404 >       hfRecHit.et[hfRecHit.n] = getEt(hit.id(),hit.energy());
405 >       hfRecHit.eta[hfRecHit.n] = getEta(hit.id());
406 >       hfRecHit.phi[hfRecHit.n] = getPhi(hit.id());
407 >       hfRecHit.perp[hfRecHit.n] = getPerp(hit.id());
408 >
409 >       hfRecHit.etVtx[hfRecHit.n] = getEt(pos,hit.energy());
410 >       hfRecHit.etaVtx[hfRecHit.n] = pos.eta();
411 >       hfRecHit.phiVtx[hfRecHit.n] = pos.phi();
412 >       hfRecHit.perpVtx[hfRecHit.n] = pos.rho();
413 >
414 >     }
415 >
416       hfRecHit.isjet[hfRecHit.n] = false;
417 +     hfRecHit.depth[hfRecHit.n] = hit.id().depth();
418 +
419 +     if(hit.id().ieta() > 0){
420 +       if(hit.energy() > hfShortThreshold_ && hit.id().depth() != 1) nHFshortPlus++;
421 +       if(hit.energy() > hfLongThreshold_ && hit.id().depth() == 1) nHFlongPlus++;
422 +     }else{
423 +       if(hit.energy() > hfShortThreshold_ && hit.id().depth() != 1) nHFshortMinus++;
424 +       if(hit.energy() > hfLongThreshold_ && hit.id().depth() == 1) nHFlongMinus++;
425 +     }
426 +
427       if(useJets_){
428         for(unsigned int j = 0 ; j < jets->size(); ++j){
429           const reco::Jet& jet = (*jets)[j];
# Line 289 | Line 431 | RecHitTreeProducer::analyze(const edm::E
431           if(dr < cone){ hfRecHit.isjet[hfRecHit.n] = true; }
432         }
433       }
434 <     hfRecHit.n++;
434 >     if (hfRecHit.et[hfRecHit.n]>=hfPtMin_) hfRecHit.n++;
435     }
436 <  
436 >
437 >   if(doHcal_ && !doEbyEonly_){
438     for(unsigned int i = 0; i < hbheHits->size(); ++i){
439       const HBHERecHit & hit= (*hbheHits)[i];
440 +     if (getEt(hit.id(),hit.energy())<hbhePtMin_) continue;
441 +
442       hbheRecHit.e[hbheRecHit.n] = hit.energy();
443 <     hbheRecHit.et[hbheRecHit.n] = getEt(hit.id(),hit.energy());
444 <     hbheRecHit.eta[hbheRecHit.n] = getEta(hit.id());
445 <     hbheRecHit.phi[hbheRecHit.n] = getPhi(hit.id());
446 <     hbheRecHit.isjet[hbheRecHit.n] = false;
443 >     math::XYZPoint pos = getPosition(hit.id(),vtx);
444 >    
445 >     if(!saveBothVtx_){
446 >       hbheRecHit.et[hbheRecHit.n] = getEt(pos,hit.energy());
447 >       hbheRecHit.eta[hbheRecHit.n] = pos.eta();
448 >       hbheRecHit.phi[hbheRecHit.n] = pos.phi();
449 >       hbheRecHit.perp[hbheRecHit.n] = pos.rho();
450 >     }else{
451 >       hbheRecHit.et[hbheRecHit.n] = getEt(hit.id(),hit.energy());
452 >       hbheRecHit.eta[hbheRecHit.n] = getEta(hit.id());
453 >       hbheRecHit.phi[hbheRecHit.n] = getPhi(hit.id());
454 >       hbheRecHit.perp[hbheRecHit.n] = getPerp(hit.id());
455 >
456 >       hbheRecHit.etVtx[hbheRecHit.n] = getEt(pos,hit.energy());
457 >       hbheRecHit.etaVtx[hbheRecHit.n] = pos.eta();
458 >       hbheRecHit.phiVtx[hbheRecHit.n] = pos.phi();
459 >       hbheRecHit.perpVtx[hbheRecHit.n] = pos.rho();
460 >
461 >     }
462 >
463 >     hbheRecHit.isjet[hbheRecHit.n] = false;
464 >     hbheRecHit.depth[hbheRecHit.n] = hit.id().depth();
465 >
466       if(useJets_){
467         for(unsigned int j = 0 ; j < jets->size(); ++j){
468           const reco::Jet& jet = (*jets)[j];
# Line 309 | Line 473 | RecHitTreeProducer::analyze(const edm::E
473       hbheRecHit.n++;
474     }
475     }
476 <   if(doEcal_){
476 >   }
477 >   if(doEcal_ && !doEbyEonly_){
478     for(unsigned int i = 0; i < ebHits->size(); ++i){
479       const EcalRecHit & hit= (*ebHits)[i];
480 +     if (getEt(hit.id(),hit.energy())<ebPtMin_) continue;
481 +
482       ebRecHit.e[ebRecHit.n] = hit.energy();
483 <     ebRecHit.et[ebRecHit.n] = getEt(hit.id(),hit.energy());
484 <     ebRecHit.eta[ebRecHit.n] = getEta(hit.id());
485 <     ebRecHit.phi[ebRecHit.n] = getPhi(hit.id());
483 >     math::XYZPoint pos = getPosition(hit.id(),vtx);
484 >
485 >     if(!saveBothVtx_){
486 >       ebRecHit.et[ebRecHit.n] = getEt(pos,hit.energy());
487 >       ebRecHit.eta[ebRecHit.n] = pos.eta();
488 >       ebRecHit.phi[ebRecHit.n] = pos.phi();
489 >       ebRecHit.perp[ebRecHit.n] = pos.rho();
490 >     }else{
491 >       ebRecHit.et[ebRecHit.n] = getEt(hit.id(),hit.energy());
492 >       ebRecHit.eta[ebRecHit.n] = getEta(hit.id());
493 >       ebRecHit.phi[ebRecHit.n] = getPhi(hit.id());
494 >       ebRecHit.perp[ebRecHit.n] = getPerp(hit.id());
495 >       ebRecHit.etVtx[ebRecHit.n] = getEt(pos,hit.energy());
496 >       ebRecHit.etaVtx[ebRecHit.n] = pos.eta();
497 >       ebRecHit.phiVtx[ebRecHit.n] = pos.phi();
498 >       ebRecHit.perpVtx[ebRecHit.n] = pos.rho();
499 >
500 >     }
501 >
502       ebRecHit.isjet[ebRecHit.n] = false;
503       if(useJets_){
504         for(unsigned int j = 0 ; j < jets->size(); ++j){
# Line 329 | Line 512 | RecHitTreeProducer::analyze(const edm::E
512    
513     for(unsigned int i = 0; i < eeHits->size(); ++i){
514       const EcalRecHit & hit= (*eeHits)[i];
515 +     if (getEt(hit.id(),hit.energy())<eePtMin_) continue;
516 +
517       eeRecHit.e[eeRecHit.n] = hit.energy();
518 <     eeRecHit.et[eeRecHit.n] = getEt(hit.id(),hit.energy());
519 <     eeRecHit.eta[eeRecHit.n] = getEta(hit.id());
520 <     eeRecHit.phi[eeRecHit.n] = getPhi(hit.id());
518 >     math::XYZPoint pos = getPosition(hit.id(),vtx);
519 >
520 >     if(!saveBothVtx_){
521 >       eeRecHit.et[eeRecHit.n] = getEt(pos,hit.energy());
522 >       eeRecHit.eta[eeRecHit.n] = pos.eta();
523 >       eeRecHit.phi[eeRecHit.n] = pos.phi();
524 >       eeRecHit.perp[eeRecHit.n] = pos.rho();
525 >     }else{
526 >       eeRecHit.et[eeRecHit.n] = getEt(hit.id(),hit.energy());
527 >       eeRecHit.eta[eeRecHit.n] = getEta(hit.id());
528 >       eeRecHit.phi[eeRecHit.n] = getPhi(hit.id());
529 >       eeRecHit.perp[eeRecHit.n] = getPerp(hit.id());
530 >       eeRecHit.etVtx[eeRecHit.n] = getEt(pos,hit.energy());
531 >       eeRecHit.etaVtx[eeRecHit.n] = pos.eta();
532 >       eeRecHit.phiVtx[eeRecHit.n] = pos.phi();
533 >       eeRecHit.perpVtx[eeRecHit.n] = pos.rho();
534 >
535 >     }
536 >
537       eeRecHit.isjet[eeRecHit.n] = false;
538 +
539       if(useJets_){
540         for(unsigned int j = 0 ; j < jets->size(); ++j){
541           const reco::Jet& jet = (*jets)[j];
# Line 349 | Line 551 | RecHitTreeProducer::analyze(const edm::E
551  
552        for(unsigned int i = 0; i < towers->size(); ++i){
553        const CaloTower & hit= (*towers)[i];
554 <      myTowers.e[myTowers.n] = hit.energy();
555 <      myTowers.et[myTowers.n] = getEt(hit.id(),hit.energy());
556 <      myTowers.eta[myTowers.n] = getEta(hit.id());
557 <      myTowers.phi[myTowers.n] = getPhi(hit.id());
554 >      if (getEt(hit.id(),hit.energy())<towerPtMin_) continue;
555 >
556 >      myTowers.et[myTowers.n] = hit.p4(vtx).Et();
557 >      myTowers.eta[myTowers.n] = hit.p4(vtx).Eta();
558 >      myTowers.phi[myTowers.n] = hit.p4(vtx).Phi();
559 >      myTowers.emEt[myTowers.n] = hit.emEt(vtx);
560 >      myTowers.hadEt[myTowers.n] = hit.hadEt(vtx);
561 >
562 >      if (saveBothVtx_) {
563 >        myTowers.e[myTowers.n] = hit.energy();
564 >        myTowers.et[myTowers.n] = getEt(hit.id(),hit.energy());
565 >        myTowers.eta[myTowers.n] = getEta(hit.id());
566 >        myTowers.phi[myTowers.n] = getPhi(hit.id());
567 >        myTowers.isjet[myTowers.n] = false;
568 >        myTowers.etVtx[myTowers.n] = hit.p4(vtx).Et();
569 >        myTowers.etaVtx[myTowers.n] = hit.p4(vtx).Eta();
570 >        myTowers.emEtVtx[myTowers.n] = hit.emEt(vtx);
571 >        myTowers.hadEtVtx[myTowers.n] = hit.hadEt(vtx);
572 >      }
573 >
574        myTowers.isjet[myTowers.n] = false;
575 +
576 +      if(hit.ieta() > 29 && hit.energy() > hfTowerThreshold_) nHFtowerPlus++;
577 +      if(hit.ieta() < -29 && hit.energy() > hfTowerThreshold_) nHFtowerMinus++;
578 +
579        if(useJets_){
580           for(unsigned int j = 0 ; j < jets->size(); ++j){
581              const reco::Jet& jet = (*jets)[j];
# Line 366 | Line 588 | RecHitTreeProducer::analyze(const edm::E
588  
589     }
590  
591 <   if(doBasicClusters_){
591 >   if(doBasicClusters_ && !doEbyEonly_){
592        for(unsigned int j = 0 ; j < jets->size(); ++j){
593           const reco::Jet& jet = (*jets)[j];
594           myBC.n = 0;
# Line 389 | Line 611 | RecHitTreeProducer::analyze(const edm::E
611        }
612     }
613  
614 <   towerTree->Fill();
615 <  
616 <   eeTree->Fill();
617 <   ebTree->Fill();
614 >   if(doCastor_){
615 >
616 >     edm::Handle<CastorRecHitCollection> casrechits;    
617 >     try{ ev.getByLabel("castorreco",casrechits); }
618 >     catch(...) { edm::LogWarning(" CASTOR ") << " Cannot get Castor RecHits " << std::endl; }
619 >
620 >     int nhits = 0;
621 >     double energyCastor = 0;
622 >
623 >     if(casrechits.failedToGet()!=0 || !casrechits.isValid()) {      
624 >       edm::LogWarning(" CASTOR ") << " Cannot read CastorRecHitCollection" << std::endl;
625 >     } else {      
626 >       for(size_t i1 = 0; i1 < casrechits->size(); ++i1) {      
627 >         const CastorRecHit & rh = (*casrechits)[i1];    
628 >         HcalCastorDetId castorid = rh.id();    
629 >         energyCastor += rh.energy();
630 >         if (nhits  < 224) {      
631 >           castorRecHit.e[nhits] = rh.energy();    
632 >           castorRecHit.iphi[nhits] = castorid.sector();          
633 >           castorRecHit.depth[nhits] = castorid.module();          
634 >           castorRecHit.phi[nhits] = getPhi(castorid);
635 >       }
636 >
637 >       nhits++;
638 >
639 >       } // end loop castor rechits
640 >     }
641 >    
642 >     castorRecHit.n = nhits;        
643 >     castorTree->Fill();
644 >   }
645 >
646 >   if(doZDCRecHit_){
647 >
648 >     edm::Handle<ZDCRecHitCollection> zdcrechits;    
649 >
650 >     try{ ev.getByLabel("zdcreco",zdcrechits); }
651 >     catch(...) { edm::LogWarning(" ZDC ") << " Cannot get ZDC RecHits " << std::endl; }
652 >
653 >     int nhits = 0;
654 >
655 >     if (zdcrechits.failedToGet()!=0 || !zdcrechits.isValid()) {      
656 >       edm::LogWarning(" ZDC ") << " Cannot read ZDCRecHitCollection" << std::endl;
657 >     } else {      
658 >       for(size_t i1 = 0; i1 < zdcrechits->size(); ++i1) {      
659 >         const ZDCRecHit & rh = (*zdcrechits)[i1];      
660 >         HcalZDCDetId zdcid = rh.id();  
661 >         if (nhits  < 18) {        
662 >           zdcRecHit.e[nhits] = rh.energy();      
663 >           zdcRecHit.zside[nhits] = zdcid.zside();        
664 >           zdcRecHit.section[nhits] = zdcid.section();    
665 >           zdcRecHit.channel[nhits] = zdcid.channel();
666 >           zdcRecHit.saturation[nhits] = static_cast<int>( rh.flagField(HcalCaloFlagLabels::ADCSaturationBit) );
667 >         }
668 >
669 >         nhits++;
670 >
671 >       } // end loop zdc rechits
672 >     }
673 >    
674 >     zdcRecHit.n = nhits;        
675 >     zdcRecHitTree->Fill();
676 >
677 >   }
678 >
679 >   if(doZDCDigi_){
680 >
681 >     edm::Handle<ZDCDigiCollection> zdcdigis;
682 >    
683 >     try{ ev.getByLabel("hcalDigis",zdcdigis); }
684 >     catch(...) { edm::LogWarning(" ZDC ") << " Cannot get ZDC Digis " << std::endl; }
685 >
686 >     int nhits = 0;    
687 >
688 >     if (zdcdigis.failedToGet()!=0 || !zdcdigis.isValid()) {      
689 >       edm::LogWarning(" ZDC ") << " Cannot read ZDCDigiCollection" << std::endl;
690 >     } else {  
691 >  
692 >       edm::ESHandle<HcalDbService> conditions;
693 >       iSetup.get<HcalDbRecord>().get(conditions);
694 >
695 >       for(size_t i1 = 0; i1 < zdcdigis->size(); ++i1) {        
696 >         CaloSamples caldigi;
697 >         const ZDCDataFrame & rh = (*zdcdigis)[i1];      
698 >         HcalZDCDetId zdcid = rh.id();
699 >        
700 >         if(calZDCDigi_){
701 >           const HcalQIEShape* qieshape=conditions->getHcalShape();
702 >           const HcalQIECoder* qiecoder=conditions->getHcalCoder(zdcid);
703 >           HcalCoderDb coder(*qiecoder,*qieshape);
704 >           coder.adc2fC(rh,caldigi);
705 >         }
706 >
707 >         if (nhits  < 18) {        
708 >           int ts = 0;  
709 >           zdcDigi.zside[nhits] = zdcid.zside();          
710 >           zdcDigi.section[nhits] = zdcid.section();      
711 >           zdcDigi.channel[nhits] = zdcid.channel();
712 >
713 >           for(int j1 = 0; j1 < rh.size(); j1++){
714 >             zdcDigi.chargefC[ts][nhits]=calZDCDigi_?caldigi[ts]:rh[ts].nominal_fC();
715 >             zdcDigi.adc[ts][nhits]= rh[ts].adc();        
716 >             ts++;
717 >           }
718 >         }
719 >         nhits++;
720 >       } // end loop zdc rechits
721 >     }
722 >    
723 >     zdcDigi.n = nhits;
724 >     zdcDigiTree->Fill();
725 >
726 >   }
727 >
728 >   if(!doEbyEonly_){
729 >     towerTree->Fill();
730 >    
731 >     eeTree->Fill();
732 >     ebTree->Fill();
733 >    
734 >     hbheTree->Fill();
735 >     hfTree->Fill();
736 >      
737 >     if (doFastJet_) {
738 >       bkgTree->Fill();
739 >     }
740 >   }
741 >
742 >   nt->Fill(nHFtowerPlus,nHFtowerMinus,nHFlongPlus,nHFlongMinus,nHFshortPlus,nHFshortMinus);
743    
397   hbheTree->Fill();
398   hfTree->Fill();
399   bkgTree->Fill();  
744   }
745  
746  
# Line 405 | Line 749 | void
749   RecHitTreeProducer::beginJob()
750   {
751    
752 <  hbheTree = fs->make<TTree>("hbhe","");
752 >  hbheTree = fs->make<TTree>("hbhe",versionTag);
753    hbheTree->Branch("n",&hbheRecHit.n,"n/I");
754    hbheTree->Branch("e",hbheRecHit.e,"e[n]/F");
755    hbheTree->Branch("et",hbheRecHit.et,"et[n]/F");
756    hbheTree->Branch("eta",hbheRecHit.eta,"eta[n]/F");
757    hbheTree->Branch("phi",hbheRecHit.phi,"phi[n]/F");
758 +  hbheTree->Branch("perp",hbheRecHit.perp,"perp[n]/F");
759 +
760    hbheTree->Branch("isjet",hbheRecHit.isjet,"isjet[n]/O");
761 <  
762 <  hfTree = fs->make<TTree>("hf","");
761 >  hbheTree->Branch("depth",hfRecHit.depth,"depth[n]/I");
762 >
763 >  hfTree = fs->make<TTree>("hf",versionTag);
764    hfTree->Branch("n",&hfRecHit.n,"n/I");
765    hfTree->Branch("e",hfRecHit.e,"e[n]/F");
766    hfTree->Branch("et",hfRecHit.et,"et[n]/F");
767    hfTree->Branch("eta",hfRecHit.eta,"eta[n]/F");
768    hfTree->Branch("phi",hfRecHit.phi,"phi[n]/F");
769 +  hfTree->Branch("perp",hfRecHit.perp,"perp[n]/F");
770 +  hfTree->Branch("depth",hfRecHit.depth,"depth[n]/I");
771    hfTree->Branch("isjet",hfRecHit.isjet,"isjet[n]/O");
772  
773 <  eeTree = fs->make<TTree>("ee","");
773 >  eeTree = fs->make<TTree>("ee",versionTag);
774    eeTree->Branch("n",&eeRecHit.n,"n/I");
775    eeTree->Branch("e",eeRecHit.e,"e[n]/F");
776    eeTree->Branch("et",eeRecHit.et,"et[n]/F");
777    eeTree->Branch("eta",eeRecHit.eta,"eta[n]/F");
778    eeTree->Branch("phi",eeRecHit.phi,"phi[n]/F");
779 +  eeTree->Branch("perp",eeRecHit.perp,"perp[n]/F");
780 +
781    eeTree->Branch("isjet",eeRecHit.isjet,"isjet[n]/O");
782  
783 <  ebTree = fs->make<TTree>("eb","");
783 >  ebTree = fs->make<TTree>("eb",versionTag);
784    ebTree->Branch("n",&ebRecHit.n,"n/I");
785    ebTree->Branch("e",ebRecHit.e,"e[n]/F");
786    ebTree->Branch("et",ebRecHit.et,"et[n]/F");
787    ebTree->Branch("eta",ebRecHit.eta,"eta[n]/F");
788    ebTree->Branch("phi",ebRecHit.phi,"phi[n]/F");
789 +  ebTree->Branch("perp",ebRecHit.perp,"perp[n]/F");
790 +
791    ebTree->Branch("isjet",ebRecHit.isjet,"isjet[n]/O");
792  
793 <  towerTree = fs->make<TTree>("tower","");
793 >  towerTree = fs->make<TTree>("tower",versionTag);
794    towerTree->Branch("n",&myTowers.n,"n/I");
795    towerTree->Branch("e",myTowers.e,"e[n]/F");
796    towerTree->Branch("et",myTowers.et,"et[n]/F");
797    towerTree->Branch("eta",myTowers.eta,"eta[n]/F");
798    towerTree->Branch("phi",myTowers.phi,"phi[n]/F");
799    towerTree->Branch("isjet",myTowers.isjet,"isjet[n]/O");
800 +  towerTree->Branch("emEt",myTowers.emEt,"emEt[n]/F");
801 +  towerTree->Branch("hadEt",myTowers.hadEt,"hadEt[n]/F");
802 +
803  
804 +  if(doCastor_){
805 +    castorTree = fs->make<TTree>("castor",versionTag);
806 +    castorTree->Branch("n",&castorRecHit.n,"n/I");
807 +    castorTree->Branch("e",castorRecHit.e,"e[n]/F");
808 +    castorTree->Branch("iphi",castorRecHit.iphi,"iphi[n]/I");
809 +    castorTree->Branch("phi",castorRecHit.phi,"phi[n]/F");
810 +    castorTree->Branch("depth",castorRecHit.depth,"depth[n]/I");
811 +  }
812 +
813 +  if(doZDCRecHit_){
814 +    zdcRecHitTree = fs->make<TTree>("zdcrechit",versionTag);
815 +    zdcRecHitTree->Branch("n",&zdcRecHit.n,"n/I");
816 +    zdcRecHitTree->Branch("e",zdcRecHit.e,"e[n]/F");
817 +    zdcRecHitTree->Branch("saturation",zdcRecHit.saturation,"saturation[n]/F");
818 +    zdcRecHitTree->Branch("zside",zdcRecHit.zside,"zside[n]/I");
819 +    zdcRecHitTree->Branch("section",zdcRecHit.section,"section[n]/I");
820 +    zdcRecHitTree->Branch("channel",zdcRecHit.channel,"channel[n]/I");
821 +  }
822 +
823 +  if(doZDCDigi_){
824 +    TString nZdcTsSt="";
825 +    nZdcTsSt+=nZdcTs_;
826 +
827 +    zdcDigiTree = fs->make<TTree>("zdcdigi",versionTag);
828 +    zdcDigiTree->Branch("n",&zdcDigi.n,"n/I");
829 +    zdcDigiTree->Branch("zside",zdcDigi.zside,"zside[n]/I");
830 +    zdcDigiTree->Branch("section",zdcDigi.section,"section[n]/I");
831 +    zdcDigiTree->Branch("channel",zdcDigi.channel,"channel[n]/I");
832 +    
833 +    for( int i=0; i<nZdcTs_;i++){
834 +      TString adcTsSt("adcTs"), chargefCTsSt("chargefCTs");
835 +      adcTsSt+=i; chargefCTsSt+=i;
836 +
837 +      zdcDigiTree->Branch(adcTsSt,zdcDigi.adc[i],adcTsSt+"[n]/I");
838 +      zdcDigiTree->Branch(chargefCTsSt,zdcDigi.chargefC[i],chargefCTsSt+"[n]/F");
839 +    }
840 +  }
841 +
842 +  if (saveBothVtx_) {
843 +    towerTree->Branch("etVtx",myTowers.etVtx,"etvtx[n]/F");
844 +    towerTree->Branch("etaVtx",myTowers.etaVtx,"etavtx[n]/F");
845 +    towerTree->Branch("emEtVtx",myTowers.emEtVtx,"emEtVtx[n]/F");
846 +    towerTree->Branch("hadEtVtx",myTowers.hadEtVtx,"hadEtVtx[n]/F");
847 +  }
848  
849    if(doBasicClusters_){
850 <     bcTree = fs->make<TTree>("bc","");
850 >     bcTree = fs->make<TTree>("bc",versionTag);
851       bcTree->Branch("n",&myBC.n,"n/I");
852       bcTree->Branch("e",myBC.e,"e[n]/F");
853       bcTree->Branch("et",myBC.et,"et[n]/F");
# Line 460 | Line 860 | RecHitTreeProducer::beginJob()
860    }
861  
862    if(doFastJet_){
863 <     bkgTree = fs->make<TTree>("bkg","");
863 >     bkgTree = fs->make<TTree>("bkg",versionTag);
864       bkgTree->Branch("n",&bkg.n,"n/I");
865       bkgTree->Branch("rho",bkg.rho,"rho[n]/F");
866       bkgTree->Branch("sigma",bkg.sigma,"sigma[n]/F");
867    }
868 +  
869 +  nt = fs->make<TNtuple>("ntEvent","","nHFplus:nHFminus:nHFlongPlus:nHFlongMinus:nHFshortPlus:nHFshortMinus");
870  
871   }
872  
# Line 473 | Line 875 | void
875   RecHitTreeProducer::endJob() {
876   }
877  
878 < double RecHitTreeProducer::getEt(const DetId &id, double energy){
878 > math::XYZPoint RecHitTreeProducer::getPosition(const DetId &id, reco::Vertex::Point vtx){
879 >  const GlobalPoint& pos=geo->getPosition(id);
880 >  math::XYZPoint posV(pos.x() - vtx.x(),pos.y() - vtx.y(),pos.z() - vtx.z());
881 >  return posV;
882 > }
883 >
884 > double RecHitTreeProducer::getEt(math::XYZPoint pos, double energy){
885 >  double et = energy*sin(pos.theta());
886 >  return et;
887 > }
888 >
889 > double RecHitTreeProducer::getEt(const DetId &id, double energy, reco::Vertex::Point vtx){
890    const GlobalPoint& pos=geo->getPosition(id);
891    double et = energy*sin(pos.theta());
892    return et;
893   }
894  
895 < double RecHitTreeProducer::getEta(const DetId &id){
895 > double RecHitTreeProducer::getEta(const DetId &id, reco::Vertex::Point vtx){
896    const GlobalPoint& pos=geo->getPosition(id);
897    double et = pos.eta();
898    return et;
899   }
900  
901 < double RecHitTreeProducer::getPhi(const DetId &id){
901 > double RecHitTreeProducer::getPhi(const DetId &id, reco::Vertex::Point vtx){
902    const GlobalPoint& pos=geo->getPosition(id);
903    double et = pos.phi();
904    return et;
905   }
906  
907 + double RecHitTreeProducer::getPerp(const DetId &id, reco::Vertex::Point vtx){
908 +  const GlobalPoint& pos=geo->getPosition(id);
909 +  double et = pos.perp();
910 +  return et;
911 + }
912  
913 + reco::Vertex::Point RecHitTreeProducer::getVtx(const edm::Event& ev)
914 + {
915 +  ev.getByLabel(VtxSrc_,vtxs);
916 +  int greatestvtx = 0;
917 +  int nVertex = vtxs->size();
918 +  
919 +  for (unsigned int i = 0 ; i< vtxs->size(); ++i){
920 +    unsigned int daughter = (*vtxs)[i].tracksSize();
921 +    if( daughter > (*vtxs)[greatestvtx].tracksSize()) greatestvtx = i;
922 +    //cout <<"Vertex: "<< (*vtxs)[i].position().z()<<" "<<daughter<<endl;
923 +  }
924 +  
925 +  if(nVertex<=0){
926 +    return reco::Vertex::Point(0,0,0);
927 +  }
928 +  return (*vtxs)[greatestvtx].position();
929 + }
930  
931   //define this as a plug-in
932   DEFINE_FWK_MODULE(RecHitTreeProducer);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines