CMS 3D CMS Logo

EcalEBTrigPrimAnalyzer.cc
Go to the documentation of this file.
1 // system include files
2 #include <memory>
3 #include <utility>
4 
5 // user include files
9 
14 
16 
19 
24 
25 //#include "CalibCalorimetry/EcalTPGTools/interface/EcalEBTPGScale.h"
27 
28 #include "EcalEBTrigPrimAnalyzer.h"
29 
30 #include <TMath.h>
31 
32 using namespace edm;
34 
36 
37 {
38  ecal_parts_.push_back("Barrel");
39 
40  histfile_=new TFile("histos.root","RECREATE");
41  tree_ = new TTree("TPGtree","TPGtree");
42  tree_->Branch("tpIphi",&tpIphi_,"tpIphi/I");
43  tree_->Branch("tpIeta",&tpIeta_,"tpIeta/I");
44  tree_->Branch("rhIphi",&rhIphi_,"rhIphi/I");
45  tree_->Branch("rhIeta",&rhIeta_,"rhIeta/I");
46  tree_->Branch("eRec",&eRec_,"eRec/F");
47  tree_->Branch("tpgADC",&tpgADC_,"tpgADC/I");
48  tree_->Branch("tpgGeV",&tpgGeV_,"tpgGeV/F");
49  tree_->Branch("ttf",&ttf_,"ttf/I");
50  tree_->Branch("fg",&fg_,"fg/I");
51  for (unsigned int i=0;i<ecal_parts_.size();++i) {
52  char title[30];
53  sprintf(title,"%s_Et",ecal_parts_[i].c_str());
54  ecal_et_[i]=new TH1I(title,"Et",255,0,255);
55  sprintf(title,"%s_ttf",ecal_parts_[i].c_str());
56  ecal_tt_[i]=new TH1I(title,"TTF",10,0,10);
57  sprintf(title,"%s_fgvb",ecal_parts_[i].c_str());
58  ecal_fgvb_[i]=new TH1I(title,"FGVB",10,0,10);
59  }
60 
61  recHits_= iConfig.getParameter<bool>("AnalyzeRecHits");
62  debug_= iConfig.getParameter<bool>("Debug");
63  rechits_labelEB_=consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("inputRecHitsEB"));
64  primToken_=consumes<EcalEBTrigPrimDigiCollection>(iConfig.getParameter<edm::InputTag>("inputTP"));
65  tokenEBdigi_=consumes<EBDigiCollection>(iConfig.getParameter<edm::InputTag>("barrelEcalDigis"));
66  nEvents_=0;
67 
68  hTPvsTow_eta_= new TH2F("TP_vs_Tow_eta","TP vs Tow eta ; #eta(tow); #eta(tp)",50,-2.5,2.5,50,-2.5,2.5);
69  hAllTPperEvt_ = new TH1F("AllTPperEvt","TP per Event; N_{TP}; ", 100, 0., 20000.);
70  hTPperEvt_ = new TH1F("TPperEvt","N_{TP} per Event; N_{TP}; ", 100, 0., 500.);
71  hTP_iphiVsieta_= new TH2F("TP_iphiVsieta","TP i#phi vs i#eta ; i#eta(tp); i#phi(tp)",10,70,80,10,340,350);
72  hTP_iphiVsieta_fullrange_= new TH2F("TP_iphiVsieta_fullrange","TP i#phi vs i#eta ; i#eta(tp); i#phi(tp)",200,-100,100,350,0,350);
73 
74  if (recHits_) {
75  hTPvsTow_ieta_= new TH2F("TP_vs_Tow_ieta","TP vs Tow ieta ; i#eta(tow); i#eta(tp)",200,-100,100,200,-100,100);
76 
77  hTPvsRechit_= new TH2F("TP_vs_RecHit","TP vs rechit Et;E_{T}(rh) (GeV);E_{T}(tp) (GeV)",100,0,50,100,0,50);
78  hDeltaEt_ = new TH1F("DeltaEt","[Et(rh)-Et(TP)]/Et(rh); [E_{T}(rh)-E_{T}(tp)]/E_{T}(rh); Counts",200,-1,1);
79  hTPoverRechit_= new TH1F("TP_over_RecHit","Et(TP/rechit); E_{T}(tp)/E_{T}(rh); Counts",200,0,2);
80  hRechitEt_= new TH1F("RecHitEt","E_{T};E_{T}(rh) (GeV);Counts",100,0,50);
81  hTPEt_= new TH1F("TPEt","E_{T}{tp);E_{T}(rh) (GeV);Count",100,0,50);
82  hRatioEt_ = new TH1F("RatioTPoverRH","Et",100,0,50);
83  hAllRechitEt_= new TH1F("AllRecHit","Et",100,0,50);
84 
85  hRH_iphiVsieta_= new TH2F("RH_iphiVsieta","RH i#phi vs i#eta ; i#eta(rh); i#phi(rh)",10,70,80,10,340,350);
86  hRH_iphiVsieta_fullrange_= new TH2F("RH_iphiVsieta_fullrange","RH i#phi vs i#eta ; i#eta(rh); i#phi(rh)",200,-100,100,350,0,350);
87 
88 
89  }
90 }
91 
92 
94 {
95 
96  // do anything here that needs to be done at desctruction time
97  // (e.g. close files, deallocate resources etc.)
98 
99  histfile_->Write();
100  histfile_->Close();
101 
102 }
103 
105  iSetup.get<IdealGeometryRecord>().get(eTTmap_);
106 }
107 
108 //
109 // member functions
110 //
111 
112 // ------------ method called to analyze the data ------------
113 void
115 {
116  using namespace edm;
117  using namespace std;
118  nEvents_++;
119 
120  if ( nEvents_==1) this->init(iSetup);
121 
122  // Get input
124  iEvent.getByToken(primToken_,tp);
125  //
126  /*
127  edm::Handle<EBDigiCollection> barrelDigiHandle;
128  const EBDigiCollection *ebdigi=NULL;
129  iEvent.getByToken(tokenEBdigi_,barrelDigiHandle);
130  ebdigi=barrelDigiHandle.product();
131  */
132 
133 
134 
135  for (unsigned int i=0;i<tp.product()->size();i++) {
137  int subdet=0;
138  if (subdet==0) {
139  ecal_et_[subdet]->Fill(d.encodedEt());
140  }
141  }
142 
143 
144  // if (!recHits_) return;
145 
146  edm::Handle<EcalRecHitCollection> rechit_EB_col;
147  if ( recHits_ ) {
148  // get the RecHits
149  iEvent.getByToken(rechits_labelEB_,rechit_EB_col);
150  }
151 
152  edm::ESHandle<CaloSubdetectorGeometry> theBarrelGeometry_handle;
153  iSetup.get<EcalBarrelGeometryRecord>().get("EcalBarrel",theBarrelGeometry_handle);
154  const CaloSubdetectorGeometry *theBarrelGeometry;
155  theBarrelGeometry = &(*theBarrelGeometry_handle);
156 
157  if (debug_) { std::cout << " TP analyzer =================> Treating event "<<iEvent.id() << " Number of TPs " << tp.product()->size() << std::endl;
158  if ( recHits_ ) std::cout << " Number of EB rechits "<< rechit_EB_col.product()->size() << std::endl;
159  }
160  hAllTPperEvt_->Fill(float(tp.product()->size()));
161 
162  //if ( iEvent.id().event() != 648) return;
163 
164  //EcalEBTPGScale ecalScale ;
165  EcalTPGScale ecalScale ;
166  ecalScale.setEventSetup(iSetup) ;
167 
168 
169  // for(unsigned int iDigi = 0; iDigi < ebdigi->size() ; ++iDigi) {
170  // EBDataFrame myFrame((*ebdigi)[iDigi]);
171  // const EBDetId & myId = myFrame.id();
172 
173  int nTP=0;
174  for (unsigned int i=0;i<tp.product()->size();i++) {
176  const EBDetId TPid= d.id();
177  // if ( myId != TPid ) continue;
178 
179 
180  /*
181  int index=getIndex(ebdigi,coarser);
182  std::cout << " Same xTal " << myId << " " << TPid << " coarser " << coarser << " index " << index << std::endl;
183  double Et = ecalScale.getTPGInGeV(d.encodedEt(), coarser) ;
184  */
185  //this works if the energy is compressed into 8 bits float Et=d.compressedEt()/2.; // 2ADC counts/GeV
186  float Et=d.encodedEt()/8.; // 8 ADCcounts/GeV
187  if ( Et<= 5 ) continue;
188  //if ( Et<= 0 ) continue;
189  nTP++;
190 
191  std::cout << " TP digi size " << d.size() << std::endl;
192  for (int iBx=0;iBx<d.size();iBx++) {
193  std::cout << " TP samples " << d.sample(iBx) << std::endl;
194 
195  }
196 
197  // EcalTrigTowerDetId coarser=(*eTTmap_).towerOf(myId);
198  // does not work float etaTow = theBarrelGeometry->getGeometry(coarser)->getPosition().theta();
199  // float etaTP = theBarrelGeometry->getGeometry(TPid)->getPosition().eta();
200  // does not work hTPvsTow_eta_->Fill ( etaTow, etaTP );
201  // hTPvsTow_ieta_->Fill ( coarser.ieta(), TPid.ieta() );
202 
203 
204  tpIphi_ = TPid.iphi() ;
205  tpIeta_ = TPid.ieta() ;
206  tpgADC_ = d.encodedEt();
207  tpgGeV_ = Et ;
208 
209  hTP_iphiVsieta_->Fill(TPid.ieta(), TPid.iphi(), Et);
210  hTP_iphiVsieta_fullrange_->Fill(TPid.ieta(), TPid.iphi(), Et);
211 
212 
213  if ( recHits_ ) {
214  for (unsigned int j=0;j<rechit_EB_col.product()->size();j++) {
215  const EBDetId & myid1=(*rechit_EB_col.product())[j].id();
216  float theta = theBarrelGeometry->getGeometry(myid1)->getPosition().theta();
217  float rhEt=((*rechit_EB_col.product())[j].energy())*sin(theta);
218  if ( myid1 == TPid ) {
219  if (debug_) std::cout << " Analyzer same cristal " << myid1 << " " << TPid << std::endl;
220  // if ( rhEt < 1.5 && Et > 10 ) {
221  // std::cout << " TP analyzer =================> Treating event "<<iEvent.id()<< ", Number of EB rechits "<< rechit_EB_col.product()->size() << " Number of TPs " << tp.product()->size() << std::endl;
222  //std::cout << " TP compressed et " << d.encodedEt() << " Et in GeV " << Et << " RH Et " << rhEt << " Et/rhEt " << Et/rhEt << std::endl;
223  //}
224 
225  //std::cout << " TP out " << d << std::endl;
226 
227  // for (int isam=0;isam< d.size();++isam) {
228  // std::cout << " d[isam].raw() " << d[isam].raw() << std::endl;
229  //}
230 
231  rhIphi_ = myid1.iphi() ;
232  rhIeta_ = myid1.ieta() ;
233  hRH_iphiVsieta_->Fill(myid1.ieta(), myid1.iphi(), rhEt);
234  hRH_iphiVsieta_fullrange_->Fill(myid1.ieta(), myid1.iphi(), rhEt);
235 
236  hTPvsRechit_->Fill(rhEt,Et);
237  hTPoverRechit_->Fill(Et/rhEt);
238  hDeltaEt_ ->Fill ((rhEt-Et)/rhEt);
239  if (debug_) std::cout << " TP compressed et " << d.encodedEt() << " Et in GeV " << Et << " RH Et " << rhEt << " Et/rhEt " << Et/rhEt << std::endl;
240  hRechitEt_->Fill(rhEt);
241  hTPEt_->Fill(Et);
242  if ( rhEt < 1000000) eRec_ = rhEt;
243  tree_->Fill() ;
244  }
245 
246  } // end loop of recHits
247  } // if recHits
248 
249  } // end loop over TP collection
250 
251  // } // end loop over digi collection
252 
253  hTPperEvt_->Fill(float(nTP));
254 
255  if ( recHits_) {
256  hRatioEt_->Divide( hTPEt_, hRechitEt_);
257  for (unsigned int j=0;j<rechit_EB_col.product()->size();j++) {
258  const EBDetId & myid1=(*rechit_EB_col.product())[j].id();
259  float theta = theBarrelGeometry->getGeometry(myid1)->getPosition().theta();
260  float rhEt=((*rechit_EB_col.product())[j].energy())*sin(theta);
261  if ( rhEt >0 )
262  hAllRechitEt_ ->Fill(rhEt);
263  }
264  }
265 
266 
267 }
268 
269 void
271  for (unsigned int i=0;i<ecal_parts_.size();++i) {
272  ecal_et_[i]->Write();
273  ecal_tt_[i]->Write();
274  ecal_fgvb_[i]->Write();
275  }
276 
277 
278  hAllTPperEvt_->Write();
279  hTPperEvt_->Write();
280 
281  if (recHits_) {
282  hTPvsTow_ieta_->Write();
283  hTPvsTow_eta_->Write();
284  hTPvsRechit_->Write();
285  hTPoverRechit_->Write();
286  hAllRechitEt_->Write();
287  hRechitEt_->Write();
288  hDeltaEt_ ->Write();
289  hTPEt_->Write();
290  hRatioEt_->Write();
291  hTP_iphiVsieta_->Write();
292  hRH_iphiVsieta_->Write();
293  hTP_iphiVsieta_fullrange_->Write();
294  hRH_iphiVsieta_fullrange_->Write();
295 
296  }
297 }
298 
T getParameter(std::string const &) const
void setEventSetup(const edm::EventSetup &evtSetup)
Definition: EcalTPGScale.cc:19
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:508
virtual const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
int init
Definition: HydjetWrapper.h:67
Geom::Theta< T > theta() const
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
int iphi() const
get the crystal iphi
Definition: EBDetId.h:53
int iEvent
Definition: GenABIO.cc:230
const EcalEBTriggerPrimitiveSample & sample(int i) const
int encodedEt() const
get the 10 bits Et of interesting sample
int ieta() const
get the crystal ieta
Definition: EBDetId.h:51
EcalEBTrigPrimAnalyzer(const edm::ParameterSet &)
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:55
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
size_type size() const
void analyze(const edm::Event &, const edm::EventSetup &) override
void init(const edm::EventSetup &)