CMS 3D CMS Logo

PhiSymmetryCalibration.cc
Go to the documentation of this file.
2 
3 // System include files
4 #include <memory>
5 
6 // Framework
10 
18 
19 // Geometry
24 
25 //Channel status
29 
31 
32 
33 
34 
35 
36 
37 #include "boost/filesystem/operations.hpp"
38 
39 using namespace std;
40 #include <fstream>
41 #include <iostream>
42 #include "TH2F.h"
43 #include "TFile.h"
44 #include "TTree.h"
45 #include "TH1F.h"
46 #include "TF1.h"
47 #include "TGraph.h"
48 #include "TCanvas.h"
49 
52 
53 
54 
55 
56 //_____________________________________________________________________________
57 // Class constructor
58 
60 
61  ecalHitsProducer_(iConfig.getParameter<std::string>("ecalRecHitsProducer")),
62  barrelHits_( iConfig.getParameter< std::string > ("barrelHitCollection")),
63  endcapHits_( iConfig.getParameter< std::string > ("endcapHitCollection")),
64  eCut_barl_( iConfig.getParameter< double > ("eCut_barrel") ),
65  ap_( iConfig.getParameter<double> ("ap") ),
66  b_( iConfig.getParameter<double> ("b") ),
67  eventSet_( iConfig.getParameter< int > ("eventSet") ),
68  statusThreshold_(iConfig.getUntrackedParameter<int>("statusThreshold",3)),
69  reiteration_(iConfig.getUntrackedParameter< bool > ("reiteration",false)),
70  oldcalibfile_(iConfig.getUntrackedParameter<std::string>("oldcalibfile",
71  "EcalintercalibConstants.xml"))
72 {
73 
74 
75  isfirstpass_=true;
76 
81 
82  spectra=true;
83 
84  nevents_=0;
85  eventsinrun_=0;
86  eventsinlb_=0;
87 }
88 
89 
90 //_____________________________________________________________________________
91 // Close files, etc.
92 
94 {
95 
96 
97  for(Int_t i=0;i<kBarlRings;i++){
98  delete et_spectrum_b_histos[i];
99  delete e_spectrum_b_histos[i];
100 
101  }
102  for(Int_t i=0;i<kEndcEtaRings;i++){
103  delete et_spectrum_e_histos[i];
104  delete e_spectrum_e_histos[i];
105  }
106 
107 
108 }
109 
110 
111 //_____________________________________________________________________________
112 // Initialize algorithm
113 
115 {
116 
117 
118  // initialize arrays
119  for (int sign=0; sign<kSides; sign++) {
120  for (int ieta=0; ieta<kBarlRings; ieta++) {
121  for (int iphi=0; iphi<kBarlWedges; iphi++) {
122  etsum_barl_[ieta][iphi][sign]=0.;
123  nhits_barl_[ieta][iphi][sign]=0;
124 
125  }
126  }
127  for (int ix=0; ix<kEndcWedgesX; ix++) {
128  for (int iy=0; iy<kEndcWedgesY; iy++) {
129  etsum_endc_[ix][iy][sign]=0.;
130  nhits_endc_[ix][iy][sign]=0;
131  }
132  }
133  }
134 
135 
136 
137  for (int imiscal=0; imiscal<kNMiscalBinsEB; imiscal++) {
138  miscalEB_[imiscal]= (1-kMiscalRangeEB) + float(imiscal)* (2*kMiscalRangeEB/(kNMiscalBinsEB-1));
139  for (int ieta=0; ieta<kBarlRings; ieta++) etsum_barl_miscal_[imiscal][ieta]=0.;
140  }
141 
142  for (int imiscal=0; imiscal<kNMiscalBinsEE; imiscal++) {
143  miscalEE_[imiscal]= (1-kMiscalRangeEE) + float(imiscal)* (2*kMiscalRangeEE/(kNMiscalBinsEE-1));
144  for (int ring=0; ring<kEndcEtaRings; ring++) etsum_endc_miscal_[imiscal][ring]=0.;
145  }
146 
147 
148 
149  // start spectra stuff
150  if (eventSet_!=1) spectra = false;
151 
152  if(spectra)
153  {
154  ostringstream t;
155  for(Int_t i=0;i<kBarlRings;i++)
156  {
157  t << "et_spectrum_b_" << i+1;
158  et_spectrum_b_histos[i]=new TH1F(t.str().c_str(),";E_{T} [MeV]",50,0.,500.);
159  t.str("");
160 
161  t << "e_spectrum_b_" << i+1;
162  e_spectrum_b_histos[i]=new TH1F(t.str().c_str(),";E [MeV]",50,0.,500.);
163  t.str("");
164 
165  }
166  for(Int_t i=0;i<kEndcEtaRings;i++)
167  {
168  t << "et_spectrum_e_" << i+1;
169  et_spectrum_e_histos[i]=new TH1F(t.str().c_str(),";E_{T} [MeV]",75,0.,1500.);
170  t.str("");
171 
172  t << "e_spectrum_e_" << i+1;
173  e_spectrum_e_histos[i]=new TH1F(t.str().c_str(),";E [MeV]",75,0.,1500.);
174  t.str("");
175 
176  }
177  }
178  // end spectra stuff
179 }
180 
181 
182 //_____________________________________________________________________________
183 // Terminate algorithm
184 
186 {
187 
188  edm::LogInfo("Calibration") << "[PhiSymmetryCalibration] At end of job";
189 
190  // start spectra stuff
191  if(spectra)
192  {
193  TFile f("Espectra_plus.root","recreate");
194 
195  for(int i=0;i<kBarlRings;i++){
196  et_spectrum_b_histos[i]->Write();
197  e_spectrum_b_histos[i]->Write();
198  }
199 
200  for(int i=0;i<kEndcEtaRings;i++){
201  et_spectrum_e_histos[i]->Write();
202  e_spectrum_e_histos[i]->Write();
203  }
204 
205  f.Close();
206  }
207 
208 
209 
210 
211  if (eventSet_==1) {
212  // calculate factors to convert from fractional deviation of ET sum from
213  // the mean to the estimate of the miscalibration factor
214  getKfactors();
215 
216  std::ofstream k_barl_out("k_barl.dat", ios::out);
217  for (int ieta=0; ieta<kBarlRings; ieta++)
218  k_barl_out << ieta << " " << k_barl_[ieta] << endl;
219  k_barl_out.close();
220 
221  std::ofstream k_endc_out("k_endc.dat", ios::out);
222  for (int ring=0; ring<kEndcEtaRings; ring++)
223  k_endc_out << ring << " " << k_endc_[ring] << endl;
224  k_endc_out.close();
225  }
226 
227 
228  if (eventSet_!=0) {
229  // output ET sums
230 
231  stringstream etsum_file_barl;
232  etsum_file_barl << "etsum_barl_"<<eventSet_<<".dat";
233 
234  std::ofstream etsum_barl_out(etsum_file_barl.str().c_str(),ios::out);
235 
236  for (int ieta=0; ieta<kBarlRings; ieta++) {
237  for (int iphi=0; iphi<kBarlWedges; iphi++) {
238  for (int sign=0; sign<kSides; sign++) {
239  etsum_barl_out << eventSet_ << " " << ieta << " " << iphi << " " << sign
240  << " " << etsum_barl_[ieta][iphi][sign] << " "
241  << nhits_barl_[ieta][iphi][sign] << endl;
242  }
243  }
244  }
245  etsum_barl_out.close();
246 
247  stringstream etsum_file_endc;
248  etsum_file_endc << "etsum_endc_"<<eventSet_<<".dat";
249 
250  std::ofstream etsum_endc_out(etsum_file_endc.str().c_str(),ios::out);
251  for (int ix=0; ix<kEndcWedgesX; ix++) {
252  for (int iy=0; iy<kEndcWedgesY; iy++) {
253  int ring = e_.endcapRing_[ix][iy];
254  if (ring!=-1) {
255  for (int sign=0; sign<kSides; sign++) {
256  etsum_endc_out << eventSet_ << " " << ix << " " << iy << " " << sign
257  << " " << etsum_endc_[ix][iy][sign] << " "
258  << nhits_endc_[ix][iy][sign]<<" "
259  << e_.endcapRing_[ix][iy]<<endl;
260  }
261  }
262  }
263  }
264  etsum_endc_out.close();
265  }
266  cout<<"Events processed " << nevents_<< endl;
267 }
268 
269 
270 //_____________________________________________________________________________
271 // Called at each event
272 
274 {
275  using namespace edm;
276  using namespace std;
277 
278  if (isfirstpass_) {
279  setUp(setup);
280  isfirstpass_=false;
281  }
282 
283 
284  Handle<EBRecHitCollection> barrelRecHitsHandle;
285  Handle<EERecHitCollection> endcapRecHitsHandle;
286 
287  event.getByLabel(ecalHitsProducer_,barrelHits_,barrelRecHitsHandle);
288  if (!barrelRecHitsHandle.isValid()) {
289  LogError("") << "[PhiSymmetryCalibration] Error! Can't get product!" << std::endl;
290  }
291 
292  event.getByLabel(ecalHitsProducer_,endcapHits_,endcapRecHitsHandle);
293  if (!endcapRecHitsHandle.isValid()) {
294  LogError("") << "[PhiSymmetryCalibration] Error! Can't get product!" << std::endl;
295  }
296 
297 
298  // get the ecal geometry
299  edm::ESHandle<CaloGeometry> geoHandle;
300  setup.get<CaloGeometryRecord>().get(geoHandle);
301  const CaloSubdetectorGeometry *barrelGeometry =
303  const CaloSubdetectorGeometry *endcapGeometry =
305 
306  bool pass=false;
307  // select interesting EcalRecHits (barrel)
309  for (itb=barrelRecHitsHandle->begin(); itb!=barrelRecHitsHandle->end(); itb++) {
310  EBDetId hit = EBDetId(itb->id());
311  float eta = barrelGeometry->getGeometry(hit)->getPosition().eta();
312  float et = itb->energy()/cosh(eta);
313  float e = itb->energy();
314 
315 
316 
317  // if iterating, correct by the previous calib constants found,
318  // which are supplied in the form of correction
319  if (reiteration_) {
320  et= et * oldCalibs_[hit];
321  e = e * oldCalibs_[hit];
322  }
323 
324  float et_thr = eCut_barl_/cosh(eta) + 1.;
325 
326  int sign = hit.ieta()>0 ? 1 : 0;
327 
328  if (e > eCut_barl_ && et < et_thr && e_.goodCell_barl[abs(hit.ieta())-1][hit.iphi()-1][sign]) {
329  etsum_barl_[abs(hit.ieta())-1][hit.iphi()-1][sign] += et;
330  nhits_barl_[abs(hit.ieta())-1][hit.iphi()-1][sign] ++;
331  pass =true;
332  }//if energy
333 
334  if (eventSet_==1) {
335  // apply a miscalibration to all crystals and increment the
336  // ET sum, combined for all crystals
337  for (int imiscal=0; imiscal<kNMiscalBinsEB; imiscal++) {
338  if (miscalEB_[imiscal]*e > eCut_barl_&& miscalEB_[imiscal]*et < et_thr && e_.goodCell_barl[abs(hit.ieta())-1][hit.iphi()-1][sign]) {
339  etsum_barl_miscal_[imiscal][abs(hit.ieta())-1] += miscalEB_[imiscal]*et;
340  }
341  }
342 
343  // spectra stuff
344  if(spectra && hit.ieta()>0) //POSITIVE!!!
345  // if(spectra && hit.ieta()<0) //NEGATIVE!!!
346  {
347  et_spectrum_b_histos[abs(hit.ieta())-1]->Fill(et*1000.);
348  e_spectrum_b_histos[abs(hit.ieta())-1]->Fill(e*1000.);
349  }//if spectra
350 
351  }//if eventSet_==1
352  }//for barl
353 
354 
355  // select interesting EcalRecHits (endcaps)
357  for (ite=endcapRecHitsHandle->begin(); ite!=endcapRecHitsHandle->end(); ite++) {
358  EEDetId hit = EEDetId(ite->id());
359  float eta = abs(endcapGeometry->getGeometry(hit)->getPosition().eta());
360  //float phi = endcapGeometry->getGeometry(hit)->getPosition().phi();
361 
362  float et = ite->energy()/cosh(eta);
363  float e = ite->energy();
364 
365  // if iterating, multiply by the previous correction factor
366  if (reiteration_) {
367  et= et * oldCalibs_[hit];
368  e = e * oldCalibs_[hit];
369  }
370 
371  int sign = hit.zside()>0 ? 1 : 0;
372 
373 
374  // changes of eCut_endc_ -> variable linearthr
375  // e_cut = ap + eta_ring*b
376 
377  double eCut_endc=0;
378  for (int ring=0; ring<kEndcEtaRings; ring++) {
379 
380  if(eta>e_.etaBoundary_[ring] && eta<e_.etaBoundary_[ring+1])
381  {
382  float eta_ring= abs(e_.cellPos_[ring][50].eta()) ;
383  eCut_endc = ap_ + eta_ring*b_;
384 
385  }
386  }
387 
388 
389  float et_thr = eCut_endc/cosh(eta) + 1.;
390 
391  if (e > eCut_endc && et < et_thr && e_.goodCell_endc[hit.ix()-1][hit.iy()-1][sign]){
392  etsum_endc_[hit.ix()-1][hit.iy()-1][sign] += et;
393  nhits_endc_[hit.ix()-1][hit.iy()-1][sign] ++;
394  pass=true;
395  }
396 
397 
398 
399  if (eventSet_==1) {
400  // apply a miscalibration to all crystals and increment the
401  // ET sum, combined for all crystals
402  for (int imiscal=0; imiscal<kNMiscalBinsEE; imiscal++) {
403  if (miscalEE_[imiscal]*e> eCut_endc && et*miscalEE_[imiscal] < et_thr && e_.goodCell_endc[hit.ix()-1][hit.iy()-1][sign]){
404  int ring = e_.endcapRing_[hit.ix()-1][hit.iy()-1];
405  etsum_endc_miscal_[imiscal][ring] += miscalEE_[imiscal]*et;
406  }
407  }
408 
409  // spectra stuff
410  if(spectra && hit.zside()>0) //POSITIVE!!!
411 
412  {
413  int ring = e_.endcapRing_[hit.ix()-1][hit.iy()-1];
414 
415  et_spectrum_e_histos[ring]->Fill(et*1000.);
416  e_spectrum_e_histos[ring]->Fill(e*1000.);
417 
418  if(ring==16)
419  {
420  //int iphi_endc = 0;
421  for (int ip=0; ip<e_.nRing_[ring]; ip++) {
422  //if (phi==e_.phi_endc_[ip][ring]) iphi_endc=ip;
423  }
424 
425  }
426  }//if spectra
427 
428  }//if eventSet_==1
429  }//for endc
430 
431  if (pass) {
432  nevents_++;
433  eventsinrun_++;
434  eventsinlb_++;
435  }
436 }
437 
439 
440 
441  std::cout << "PHIREPRT : run "<< run.run()
442  << " start " << (run.beginTime().value()>>32)
443  << " end " << (run.endTime().value()>>32)
444  << " dur " << (run.endTime().value()>>32)- (run.beginTime().value()>>32)
445 
446  << " npass " << eventsinrun_ << std::endl;
447  eventsinrun_=0;
448 
449  return ;
450 
451 }
452 
453 //_____________________________________________________________________________
454 
456 {
457 
458  float epsilon_T_eb[kNMiscalBinsEB];
459  float epsilon_M_eb[kNMiscalBinsEB];
460 
461  float epsilon_T_ee[kNMiscalBinsEE];
462  float epsilon_M_ee[kNMiscalBinsEE];
463 
464  std::vector<TGraph*> k_barl_graph(kBarlRings);
465  std::vector<TCanvas*> k_barl_plot(kBarlRings);
466 
467  //Create our own TF1 to avoid threading problems
468  TF1 mypol1("mypol1","pol1");
469  for (int ieta=0; ieta<kBarlRings; ieta++) {
470  for (int imiscal=0; imiscal<kNMiscalBinsEB; imiscal++) {
471  int middlebin = int (kNMiscalBinsEB/2);
472  epsilon_T_eb[imiscal] = etsum_barl_miscal_[imiscal][ieta]/etsum_barl_miscal_[middlebin][ieta] - 1.;
473  epsilon_M_eb[imiscal] = miscalEB_[imiscal] - 1.;
474  }
475  k_barl_graph[ieta] = new TGraph (kNMiscalBinsEB,epsilon_M_eb,epsilon_T_eb);
476  k_barl_graph[ieta]->Fit(&mypol1);
477 
478  ostringstream t;
479  t<< "k_barl_" << ieta+1;
480  k_barl_plot[ieta] = new TCanvas(t.str().c_str(),"");
481  k_barl_plot[ieta]->SetFillColor(10);
482  k_barl_plot[ieta]->SetGrid();
483  k_barl_graph[ieta]->SetMarkerSize(1.);
484  k_barl_graph[ieta]->SetMarkerColor(4);
485  k_barl_graph[ieta]->SetMarkerStyle(20);
486  k_barl_graph[ieta]->GetXaxis()->SetLimits(-1.*kMiscalRangeEB,kMiscalRangeEB);
487  k_barl_graph[ieta]->GetXaxis()->SetTitleSize(.05);
488  k_barl_graph[ieta]->GetYaxis()->SetTitleSize(.05);
489  k_barl_graph[ieta]->GetXaxis()->SetTitle("#epsilon_{M}");
490  k_barl_graph[ieta]->GetYaxis()->SetTitle("#epsilon_{T}");
491  k_barl_graph[ieta]->Draw("AP");
492 
493  k_barl_[ieta] = k_barl_graph[ieta]->GetFunction("pol1")->GetParameter(1);
494  std::cout << "k_barl_[" << ieta << "]=" << k_barl_[ieta] << std::endl;
495  }
496 
497 
498  std::vector<TGraph*> k_endc_graph(kEndcEtaRings);
499  std::vector<TCanvas*> k_endc_plot(kEndcEtaRings);
500 
501  for (int ring=0; ring<kEndcEtaRings; ring++) {
502  for (int imiscal=0; imiscal<kNMiscalBinsEE; imiscal++) {
503  int middlebin = int (kNMiscalBinsEE/2);
504  epsilon_T_ee[imiscal] = etsum_endc_miscal_[imiscal][ring]/etsum_endc_miscal_[middlebin][ring] - 1.;
505  epsilon_M_ee[imiscal] = miscalEE_[imiscal] - 1.;
506  }
507  k_endc_graph[ring] = new TGraph (kNMiscalBinsEE,epsilon_M_ee,epsilon_T_ee);
508  k_endc_graph[ring]->Fit(&mypol1);
509 
510  ostringstream t;
511  t<< "k_endc_"<< ring+1;
512  k_endc_plot[ring] = new TCanvas(t.str().c_str(),"");
513  k_endc_plot[ring]->SetFillColor(10);
514  k_endc_plot[ring]->SetGrid();
515  k_endc_graph[ring]->SetMarkerSize(1.);
516  k_endc_graph[ring]->SetMarkerColor(4);
517  k_endc_graph[ring]->SetMarkerStyle(20);
518  k_endc_graph[ring]->GetXaxis()->SetLimits(-1*kMiscalRangeEE,kMiscalRangeEE);
519  k_endc_graph[ring]->GetXaxis()->SetTitleSize(.05);
520  k_endc_graph[ring]->GetYaxis()->SetTitleSize(.05);
521  k_endc_graph[ring]->GetXaxis()->SetTitle("#epsilon_{M}");
522  k_endc_graph[ring]->GetYaxis()->SetTitle("#epsilon_{T}");
523  k_endc_graph[ring]->Draw("AP");
524 
525  k_endc_[ring] = k_endc_graph[ring]->GetFunction("pol1")->GetParameter(1);
526  std::cout << "k_endc_[" << ring << "]=" << k_endc_[ring] << std::endl;
527  }
528 
529  TFile f("PhiSymmetryCalibration_kFactors.root","recreate");
530  for (int ieta=0; ieta<kBarlRings; ieta++) {
531  k_barl_plot[ieta]->Write();
532  delete k_barl_plot[ieta];
533  delete k_barl_graph[ieta];
534  }
535  for (int ring=0; ring<kEndcEtaRings; ring++) {
536  k_endc_plot[ring]->Write();
537  delete k_endc_plot[ring];
538  delete k_endc_graph[ring];
539  }
540  f.Close();
541 
542 }
543 
544 
545 
546 
547 
548 //_____________________________________________________________________________
549 
550 
551 
553 
555  setup.get<EcalChannelStatusRcd>().get(chStatus);
556 
557  edm::ESHandle<CaloGeometry> geoHandle;
558  setup.get<CaloGeometryRecord>().get(geoHandle);
559 
560  e_.setup(&(*geoHandle), &(*chStatus), statusThreshold_);
561 
562 
563  if (reiteration_){
564 
566  // namespace fs = boost::filesystem;
567 // fs::path p(oldcalibfile_.c_str(),fs::native);
568 // if (!fs::exists(p)) edm::LogError("PhiSym") << "File not found: "
569 // << oldcalibfile_ <<endl;
570 
571  edm::FileInPath fip("Calibration/EcalCalibAlgos/data/"+oldcalibfile_);
572 
573 
574 
575  int ret=
577  if (ret) edm::LogError("PhiSym")<<"Error reading XML files"<<endl;;
578 
579  } else {
580  // in fact if not reiterating, oldCalibs_ will never be used
582  setup.get<EcalIntercalibConstantsRcd>().get(pIcal);
583  oldCalibs_=*pIcal;
584 
585  }
586 
587 }
588 
589 
591 
592 
593  if ((lb.endTime().value()>>32)- (lb.beginTime().value()>>32) <60 )
594  return;
595 
596  std::cout << "PHILB : run "<< lb.run()
597  << " id " << lb.id()
598  << " start " << (lb.beginTime().value()>>32)
599  << " end " << (lb.endTime().value()>>32)
600  << " dur " << (lb.endTime().value()>>32)- (lb.beginTime().value()>>32)
601 
602  << " npass " << eventsinlb_ << std::endl;
603 
604  eventsinlb_=0;
605 
606 }
LuminosityBlockID id() const
~PhiSymmetryCalibration() override
Destructor.
static const float kMiscalRangeEB
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:49
void beginJob() override
Called at beginning of job.
void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
void setup(const CaloGeometry *geometry, const EcalChannelStatus *chstatus, int statusThreshold)
int ix() const
Definition: EEDetId.h:76
Timestamp const & endTime() const
Definition: RunBase.h:42
void setUp(const edm::EventSetup &setup)
RunNumber_t run() const
Definition: RunBase.h:40
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
int nRing_[kEndcEtaRings]
static const int kBarlRings
bool goodCell_barl[kBarlRings][kBarlWedges][kSides]
std::vector< TH1F * > et_spectrum_b_histos
std::vector< EcalRecHit >::const_iterator const_iterator
GlobalPoint cellPos_[kEndcWedgesX][kEndcWedgesY]
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
static const int kSides
Timestamp const & beginTime() const
std::vector< TH1F * > e_spectrum_b_histos
static int readXML(const std::string &filename, EcalCondHeader &header, EcalFloatCondObjectContainer &record)
EcalIntercalibConstants oldCalibs_
the old calibration constants (when reiterating, the last ones derived)
return((rh^lh)&mask)
int iphi() const
get the crystal iphi
Definition: EBDetId.h:53
static const int kBarlWedges
double etsum_endc_miscal_[kNMiscalBinsEE][kEndcEtaRings]
static const int kEndcWedgesX
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int endcapRing_[kEndcWedgesX][kEndcWedgesY]
static const int kEndcEtaRings
std::vector< TH1F * > et_spectrum_e_histos
Timestamp const & endTime() const
double etsum_barl_miscal_[kNMiscalBinsEB][kBarlRings]
double k_endc_[kEndcEtaRings]
int zside() const
Definition: EEDetId.h:70
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int nhits_barl_[kBarlRings][kBarlWedges][kSides]
RunNumber_t run() const
double f[11][100]
int statusThreshold_
threshold in channel status beyond which channel is marked bad
int iy() const
Definition: EEDetId.h:82
unsigned int nhits_endc_[kEndcWedgesX][kEndcWedgesX][kSides]
int ieta() const
get the crystal ieta
Definition: EBDetId.h:51
PhiSymmetryCalibration(const edm::ParameterSet &iConfig)
Constructor.
bool isValid() const
Definition: HandleBase.h:74
const_iterator end() const
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
double etsum_barl_[kBarlRings][kBarlWedges][kSides]
double miscalEB_[kNMiscalBinsEB]
et
define resolution functions of each parameter
Timestamp const & beginTime() const
Definition: RunBase.h:41
T eta() const
Definition: PV3DBase.h:76
HLT enums.
T get() const
Definition: EventSetup.h:63
std::vector< TH1F * > e_spectrum_e_histos
std::string fullPath() const
Definition: FileInPath.cc:197
void endRun(edm::Run const &, const edm::EventSetup &) override
void analyze(const edm::Event &, const edm::EventSetup &) override
Called at each event.
double etsum_endc_[kEndcWedgesX][kEndcWedgesX][kSides]
void endJob() override
Called at end of job.
double miscalEE_[kNMiscalBinsEE]
static const float kMiscalRangeEE
TimeValue_t value() const
Definition: Timestamp.h:56
const_iterator begin() const
Definition: event.py:1
Definition: Run.h:44
bool goodCell_endc[kEndcWedgesX][kEndcWedgesX][kSides]
double etaBoundary_[kEndcEtaRings+1]
static const int kEndcWedgesY