CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PhiSymmetryCalibration.cc
Go to the documentation of this file.
2 
3 // System include files
4 #include <memory>
5 
6 // Framework
9 
15 
16 // Geometry
19 
20 //Channel status
22 
24 
25 using namespace std;
26 #include <fstream>
27 #include <iostream>
28 #include "TH2F.h"
29 #include "TFile.h"
30 #include "TTree.h"
31 #include "TH1F.h"
32 #include "TF1.h"
33 #include "TGraph.h"
34 #include "TCanvas.h"
35 
38 
39 //_____________________________________________________________________________
40 // Class constructor
41 
43  : ecalHitsProducer_(iConfig.getParameter<std::string>("ecalRecHitsProducer")),
44  barrelHits_(iConfig.getParameter<std::string>("barrelHitCollection")),
45  endcapHits_(iConfig.getParameter<std::string>("endcapHitCollection")),
46  ebRecHitToken_(consumes<EBRecHitCollection>(edm::InputTag(ecalHitsProducer_, barrelHits_))),
47  eeRecHitToken_(consumes<EERecHitCollection>(edm::InputTag(ecalHitsProducer_, endcapHits_))),
48  channelStatusToken_(esConsumes()),
49  geometryToken_(esConsumes()),
50  eCut_barl_(iConfig.getParameter<double>("eCut_barrel")),
51  ap_(iConfig.getParameter<double>("ap")),
52  b_(iConfig.getParameter<double>("b")),
53  eventSet_(iConfig.getParameter<int>("eventSet")),
54  statusThreshold_(iConfig.getUntrackedParameter<int>("statusThreshold", 3)),
55  reiteration_(iConfig.getUntrackedParameter<bool>("reiteration", false)),
56  oldcalibfile_(iConfig.getUntrackedParameter<std::string>("oldcalibfile", "EcalintercalibConstants.xml")) {
57  isfirstpass_ = true;
58 
63 
64  spectra = true;
65 
66  nevents_ = 0;
67  eventsinrun_ = 0;
68  eventsinlb_ = 0;
69 
70  // because ROOT draws something
71  usesResource();
72 }
73 
74 //_____________________________________________________________________________
75 // Close files, etc.
76 
78  for (Int_t i = 0; i < kBarlRings; i++) {
79  delete et_spectrum_b_histos[i];
80  delete e_spectrum_b_histos[i];
81  }
82  for (Int_t i = 0; i < kEndcEtaRings; i++) {
83  delete et_spectrum_e_histos[i];
84  delete e_spectrum_e_histos[i];
85  }
86 }
87 
88 //_____________________________________________________________________________
89 // Initialize algorithm
90 
92  // initialize arrays
93  for (int sign = 0; sign < kSides; sign++) {
94  for (int ieta = 0; ieta < kBarlRings; ieta++) {
95  for (int iphi = 0; iphi < kBarlWedges; iphi++) {
96  etsum_barl_[ieta][iphi][sign] = 0.;
97  nhits_barl_[ieta][iphi][sign] = 0;
98  }
99  }
100  for (int ix = 0; ix < kEndcWedgesX; ix++) {
101  for (int iy = 0; iy < kEndcWedgesY; iy++) {
102  etsum_endc_[ix][iy][sign] = 0.;
103  nhits_endc_[ix][iy][sign] = 0;
104  }
105  }
106  }
107 
108  for (int imiscal = 0; imiscal < kNMiscalBinsEB; imiscal++) {
109  miscalEB_[imiscal] = (1 - kMiscalRangeEB) + float(imiscal) * (2 * kMiscalRangeEB / (kNMiscalBinsEB - 1));
110  for (int ieta = 0; ieta < kBarlRings; ieta++)
111  etsum_barl_miscal_[imiscal][ieta] = 0.;
112  }
113 
114  for (int imiscal = 0; imiscal < kNMiscalBinsEE; imiscal++) {
115  miscalEE_[imiscal] = (1 - kMiscalRangeEE) + float(imiscal) * (2 * kMiscalRangeEE / (kNMiscalBinsEE - 1));
116  for (int ring = 0; ring < kEndcEtaRings; ring++)
117  etsum_endc_miscal_[imiscal][ring] = 0.;
118  }
119 
120  // start spectra stuff
121  if (eventSet_ != 1)
122  spectra = false;
123 
124  if (spectra) {
125  ostringstream t;
126  for (Int_t i = 0; i < kBarlRings; i++) {
127  t << "et_spectrum_b_" << i + 1;
128  et_spectrum_b_histos[i] = new TH1F(t.str().c_str(), ";E_{T} [MeV]", 50, 0., 500.);
129  t.str("");
130 
131  t << "e_spectrum_b_" << i + 1;
132  e_spectrum_b_histos[i] = new TH1F(t.str().c_str(), ";E [MeV]", 50, 0., 500.);
133  t.str("");
134  }
135  for (Int_t i = 0; i < kEndcEtaRings; i++) {
136  t << "et_spectrum_e_" << i + 1;
137  et_spectrum_e_histos[i] = new TH1F(t.str().c_str(), ";E_{T} [MeV]", 75, 0., 1500.);
138  t.str("");
139 
140  t << "e_spectrum_e_" << i + 1;
141  e_spectrum_e_histos[i] = new TH1F(t.str().c_str(), ";E [MeV]", 75, 0., 1500.);
142  t.str("");
143  }
144  }
145  // end spectra stuff
146 }
147 
148 //_____________________________________________________________________________
149 // Terminate algorithm
150 
152  edm::LogInfo("Calibration") << "[PhiSymmetryCalibration] At end of job";
153 
154  // start spectra stuff
155  if (spectra) {
156  TFile f("Espectra_plus.root", "recreate");
157 
158  for (int i = 0; i < kBarlRings; i++) {
159  et_spectrum_b_histos[i]->Write();
160  e_spectrum_b_histos[i]->Write();
161  }
162 
163  for (int i = 0; i < kEndcEtaRings; i++) {
164  et_spectrum_e_histos[i]->Write();
165  e_spectrum_e_histos[i]->Write();
166  }
167 
168  f.Close();
169  }
170 
171  if (eventSet_ == 1) {
172  // calculate factors to convert from fractional deviation of ET sum from
173  // the mean to the estimate of the miscalibration factor
174  getKfactors();
175 
176  std::ofstream k_barl_out("k_barl.dat", ios::out);
177  for (int ieta = 0; ieta < kBarlRings; ieta++)
178  k_barl_out << ieta << " " << k_barl_[ieta] << endl;
179  k_barl_out.close();
180 
181  std::ofstream k_endc_out("k_endc.dat", ios::out);
182  for (int ring = 0; ring < kEndcEtaRings; ring++)
183  k_endc_out << ring << " " << k_endc_[ring] << endl;
184  k_endc_out.close();
185  }
186 
187  if (eventSet_ != 0) {
188  // output ET sums
189 
190  stringstream etsum_file_barl;
191  etsum_file_barl << "etsum_barl_" << eventSet_ << ".dat";
192 
193  std::ofstream etsum_barl_out(etsum_file_barl.str().c_str(), ios::out);
194 
195  for (int ieta = 0; ieta < kBarlRings; ieta++) {
196  for (int iphi = 0; iphi < kBarlWedges; iphi++) {
197  for (int sign = 0; sign < kSides; sign++) {
198  etsum_barl_out << eventSet_ << " " << ieta << " " << iphi << " " << sign << " "
199  << etsum_barl_[ieta][iphi][sign] << " " << nhits_barl_[ieta][iphi][sign] << endl;
200  }
201  }
202  }
203  etsum_barl_out.close();
204 
205  stringstream etsum_file_endc;
206  etsum_file_endc << "etsum_endc_" << eventSet_ << ".dat";
207 
208  std::ofstream etsum_endc_out(etsum_file_endc.str().c_str(), ios::out);
209  for (int ix = 0; ix < kEndcWedgesX; ix++) {
210  for (int iy = 0; iy < kEndcWedgesY; iy++) {
211  int ring = e_.endcapRing_[ix][iy];
212  if (ring != -1) {
213  for (int sign = 0; sign < kSides; sign++) {
214  etsum_endc_out << eventSet_ << " " << ix << " " << iy << " " << sign << " " << etsum_endc_[ix][iy][sign]
215  << " " << nhits_endc_[ix][iy][sign] << " " << e_.endcapRing_[ix][iy] << endl;
216  }
217  }
218  }
219  }
220  etsum_endc_out.close();
221  }
222  cout << "Events processed " << nevents_ << endl;
223 }
224 
225 //_____________________________________________________________________________
226 // Called at each event
227 
229  using namespace edm;
230  using namespace std;
231 
232  if (isfirstpass_) {
233  setUp(setup);
234  isfirstpass_ = false;
235  }
236 
237  Handle<EBRecHitCollection> barrelRecHitsHandle;
238  Handle<EERecHitCollection> endcapRecHitsHandle;
239 
240  event.getByToken(ebRecHitToken_, barrelRecHitsHandle);
241  if (!barrelRecHitsHandle.isValid()) {
242  LogError("") << "[PhiSymmetryCalibration] Error! Can't get product!" << std::endl;
243  }
244 
245  event.getByToken(ebRecHitToken_, endcapRecHitsHandle);
246  if (!endcapRecHitsHandle.isValid()) {
247  LogError("") << "[PhiSymmetryCalibration] Error! Can't get product!" << std::endl;
248  }
249 
250  // get the ecal geometry
251  const auto& geometry = setup.getData(geometryToken_);
252  const auto* barrelGeometry = geometry.getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
253  const auto* endcapGeometry = geometry.getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
254 
255  bool pass = false;
256  // select interesting EcalRecHits (barrel)
258  for (itb = barrelRecHitsHandle->begin(); itb != barrelRecHitsHandle->end(); itb++) {
259  EBDetId hit = EBDetId(itb->id());
260  float eta = barrelGeometry->getGeometry(hit)->getPosition().eta();
261  float et = itb->energy() / cosh(eta);
262  float e = itb->energy();
263 
264  // if iterating, correct by the previous calib constants found,
265  // which are supplied in the form of correction
266  if (reiteration_) {
267  et = et * oldCalibs_[hit];
268  e = e * oldCalibs_[hit];
269  }
270 
271  float et_thr = eCut_barl_ / cosh(eta) + 1.;
272 
273  int sign = hit.ieta() > 0 ? 1 : 0;
274 
275  if (e > eCut_barl_ && et < et_thr && e_.goodCell_barl[abs(hit.ieta()) - 1][hit.iphi() - 1][sign]) {
276  etsum_barl_[abs(hit.ieta()) - 1][hit.iphi() - 1][sign] += et;
277  nhits_barl_[abs(hit.ieta()) - 1][hit.iphi() - 1][sign]++;
278  pass = true;
279  } //if energy
280 
281  if (eventSet_ == 1) {
282  // apply a miscalibration to all crystals and increment the
283  // ET sum, combined for all crystals
284  for (int imiscal = 0; imiscal < kNMiscalBinsEB; imiscal++) {
285  if (miscalEB_[imiscal] * e > eCut_barl_ && miscalEB_[imiscal] * et < et_thr &&
286  e_.goodCell_barl[abs(hit.ieta()) - 1][hit.iphi() - 1][sign]) {
287  etsum_barl_miscal_[imiscal][abs(hit.ieta()) - 1] += miscalEB_[imiscal] * et;
288  }
289  }
290 
291  // spectra stuff
292  if (spectra && hit.ieta() > 0) //POSITIVE!!!
293  // if(spectra && hit.ieta()<0) //NEGATIVE!!!
294  {
295  et_spectrum_b_histos[abs(hit.ieta()) - 1]->Fill(et * 1000.);
296  e_spectrum_b_histos[abs(hit.ieta()) - 1]->Fill(e * 1000.);
297  } //if spectra
298 
299  } //if eventSet_==1
300  } //for barl
301 
302  // select interesting EcalRecHits (endcaps)
304  for (ite = endcapRecHitsHandle->begin(); ite != endcapRecHitsHandle->end(); ite++) {
305  EEDetId hit = EEDetId(ite->id());
306  float eta = abs(endcapGeometry->getGeometry(hit)->getPosition().eta());
307  //float phi = endcapGeometry->getGeometry(hit)->getPosition().phi();
308 
309  float et = ite->energy() / cosh(eta);
310  float e = ite->energy();
311 
312  // if iterating, multiply by the previous correction factor
313  if (reiteration_) {
314  et = et * oldCalibs_[hit];
315  e = e * oldCalibs_[hit];
316  }
317 
318  int sign = hit.zside() > 0 ? 1 : 0;
319 
320  // changes of eCut_endc_ -> variable linearthr
321  // e_cut = ap + eta_ring*b
322 
323  double eCut_endc = 0;
324  for (int ring = 0; ring < kEndcEtaRings; ring++) {
325  if (eta > e_.etaBoundary_[ring] && eta < e_.etaBoundary_[ring + 1]) {
326  float eta_ring = abs(e_.cellPos_[ring][50].eta());
327  eCut_endc = ap_ + eta_ring * b_;
328  }
329  }
330 
331  float et_thr = eCut_endc / cosh(eta) + 1.;
332 
333  if (e > eCut_endc && et < et_thr && e_.goodCell_endc[hit.ix() - 1][hit.iy() - 1][sign]) {
334  etsum_endc_[hit.ix() - 1][hit.iy() - 1][sign] += et;
335  nhits_endc_[hit.ix() - 1][hit.iy() - 1][sign]++;
336  pass = true;
337  }
338 
339  if (eventSet_ == 1) {
340  // apply a miscalibration to all crystals and increment the
341  // ET sum, combined for all crystals
342  for (int imiscal = 0; imiscal < kNMiscalBinsEE; imiscal++) {
343  if (miscalEE_[imiscal] * e > eCut_endc && et * miscalEE_[imiscal] < et_thr &&
344  e_.goodCell_endc[hit.ix() - 1][hit.iy() - 1][sign]) {
345  int ring = e_.endcapRing_[hit.ix() - 1][hit.iy() - 1];
346  etsum_endc_miscal_[imiscal][ring] += miscalEE_[imiscal] * et;
347  }
348  }
349 
350  // spectra stuff
351  if (spectra && hit.zside() > 0) //POSITIVE!!!
352 
353  {
354  int ring = e_.endcapRing_[hit.ix() - 1][hit.iy() - 1];
355 
356  et_spectrum_e_histos[ring]->Fill(et * 1000.);
357  e_spectrum_e_histos[ring]->Fill(e * 1000.);
358 
359  if (ring == 16) {
360  //int iphi_endc = 0;
361  for (int ip = 0; ip < e_.nRing_[ring]; ip++) {
362  //if (phi==e_.phi_endc_[ip][ring]) iphi_endc=ip;
363  }
364  }
365  } //if spectra
366 
367  } //if eventSet_==1
368  } //for endc
369 
370  if (pass) {
371  nevents_++;
372  eventsinrun_++;
373  eventsinlb_++;
374  }
375 }
376 
378 
380  std::cout << "PHIREPRT : run " << run.run() << " start " << (run.beginTime().value() >> 32) << " end "
381  << (run.endTime().value() >> 32) << " dur "
382  << (run.endTime().value() >> 32) - (run.beginTime().value() >> 32)
383 
384  << " npass " << eventsinrun_ << std::endl;
385  eventsinrun_ = 0;
386 
387  return;
388 }
389 
390 //_____________________________________________________________________________
391 
393  float epsilon_T_eb[kNMiscalBinsEB];
394  float epsilon_M_eb[kNMiscalBinsEB];
395 
396  float epsilon_T_ee[kNMiscalBinsEE];
397  float epsilon_M_ee[kNMiscalBinsEE];
398 
399  std::vector<TGraph*> k_barl_graph(kBarlRings);
400  std::vector<TCanvas*> k_barl_plot(kBarlRings);
401 
402  //Create our own TF1 to avoid threading problems
403  TF1 mypol1("mypol1", "pol1");
404  for (int ieta = 0; ieta < kBarlRings; ieta++) {
405  for (int imiscal = 0; imiscal < kNMiscalBinsEB; imiscal++) {
406  int middlebin = int(kNMiscalBinsEB / 2);
407  epsilon_T_eb[imiscal] = etsum_barl_miscal_[imiscal][ieta] / etsum_barl_miscal_[middlebin][ieta] - 1.;
408  epsilon_M_eb[imiscal] = miscalEB_[imiscal] - 1.;
409  }
410  k_barl_graph[ieta] = new TGraph(kNMiscalBinsEB, epsilon_M_eb, epsilon_T_eb);
411  k_barl_graph[ieta]->Fit(&mypol1);
412 
413  ostringstream t;
414  t << "k_barl_" << ieta + 1;
415  k_barl_plot[ieta] = new TCanvas(t.str().c_str(), "");
416  k_barl_plot[ieta]->SetFillColor(10);
417  k_barl_plot[ieta]->SetGrid();
418  k_barl_graph[ieta]->SetMarkerSize(1.);
419  k_barl_graph[ieta]->SetMarkerColor(4);
420  k_barl_graph[ieta]->SetMarkerStyle(20);
421  k_barl_graph[ieta]->GetXaxis()->SetLimits(-1. * kMiscalRangeEB, kMiscalRangeEB);
422  k_barl_graph[ieta]->GetXaxis()->SetTitleSize(.05);
423  k_barl_graph[ieta]->GetYaxis()->SetTitleSize(.05);
424  k_barl_graph[ieta]->GetXaxis()->SetTitle("#epsilon_{M}");
425  k_barl_graph[ieta]->GetYaxis()->SetTitle("#epsilon_{T}");
426  k_barl_graph[ieta]->Draw("AP");
427 
428  k_barl_[ieta] = k_barl_graph[ieta]->GetFunction("pol1")->GetParameter(1);
429  std::cout << "k_barl_[" << ieta << "]=" << k_barl_[ieta] << std::endl;
430  }
431 
432  std::vector<TGraph*> k_endc_graph(kEndcEtaRings);
433  std::vector<TCanvas*> k_endc_plot(kEndcEtaRings);
434 
435  for (int ring = 0; ring < kEndcEtaRings; ring++) {
436  for (int imiscal = 0; imiscal < kNMiscalBinsEE; imiscal++) {
437  int middlebin = int(kNMiscalBinsEE / 2);
438  epsilon_T_ee[imiscal] = etsum_endc_miscal_[imiscal][ring] / etsum_endc_miscal_[middlebin][ring] - 1.;
439  epsilon_M_ee[imiscal] = miscalEE_[imiscal] - 1.;
440  }
441  k_endc_graph[ring] = new TGraph(kNMiscalBinsEE, epsilon_M_ee, epsilon_T_ee);
442  k_endc_graph[ring]->Fit(&mypol1);
443 
444  ostringstream t;
445  t << "k_endc_" << ring + 1;
446  k_endc_plot[ring] = new TCanvas(t.str().c_str(), "");
447  k_endc_plot[ring]->SetFillColor(10);
448  k_endc_plot[ring]->SetGrid();
449  k_endc_graph[ring]->SetMarkerSize(1.);
450  k_endc_graph[ring]->SetMarkerColor(4);
451  k_endc_graph[ring]->SetMarkerStyle(20);
452  k_endc_graph[ring]->GetXaxis()->SetLimits(-1 * kMiscalRangeEE, kMiscalRangeEE);
453  k_endc_graph[ring]->GetXaxis()->SetTitleSize(.05);
454  k_endc_graph[ring]->GetYaxis()->SetTitleSize(.05);
455  k_endc_graph[ring]->GetXaxis()->SetTitle("#epsilon_{M}");
456  k_endc_graph[ring]->GetYaxis()->SetTitle("#epsilon_{T}");
457  k_endc_graph[ring]->Draw("AP");
458 
459  k_endc_[ring] = k_endc_graph[ring]->GetFunction("pol1")->GetParameter(1);
460  std::cout << "k_endc_[" << ring << "]=" << k_endc_[ring] << std::endl;
461  }
462 
463  TFile f("PhiSymmetryCalibration_kFactors.root", "recreate");
464  for (int ieta = 0; ieta < kBarlRings; ieta++) {
465  k_barl_plot[ieta]->Write();
466  delete k_barl_plot[ieta];
467  delete k_barl_graph[ieta];
468  }
469  for (int ring = 0; ring < kEndcEtaRings; ring++) {
470  k_endc_plot[ring]->Write();
471  delete k_endc_plot[ring];
472  delete k_endc_graph[ring];
473  }
474  f.Close();
475 }
476 
477 //_____________________________________________________________________________
478 
480  const auto& chStatus = setup.getData(channelStatusToken_);
481 
482  const auto& geometry = setup.getData(geometryToken_);
483 
484  e_.setup(&geometry, &chStatus, statusThreshold_);
485 
486  if (reiteration_) {
488  // namespace fs = boost::filesystem;
489  // fs::path p(oldcalibfile_.c_str(),fs::native);
490  // if (!fs::exists(p)) edm::LogError("PhiSym") << "File not found: "
491  // << oldcalibfile_ <<endl;
492 
493  edm::FileInPath fip("Calibration/EcalCalibAlgos/data/" + oldcalibfile_);
494 
496  if (ret)
497  edm::LogError("PhiSym") << "Error reading XML files" << endl;
498  }
499 }
500 
502 
504  if ((lb.endTime().value() >> 32) - (lb.beginTime().value() >> 32) < 60)
505  return;
506 
507  std::cout << "PHILB : run " << lb.run() << " id " << lb.id() << " start " << (lb.beginTime().value() >> 32) << " end "
508  << (lb.endTime().value() >> 32) << " dur " << (lb.endTime().value() >> 32) - (lb.beginTime().value() >> 32)
509 
510  << " npass " << eventsinlb_ << std::endl;
511 
512  eventsinlb_ = 0;
513 }
LuminosityBlockID id() const
~PhiSymmetryCalibration() override
Destructor.
static const float kMiscalRangeEB
tuple ret
prodAgent to be discontinued
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:77
Timestamp const & endTime() const
Definition: RunBase.h:42
void setUp(const edm::EventSetup &setup)
RunNumber_t run() const
Definition: RunBase.h:40
int nRing_[kEndcEtaRings]
static const int kBarlRings
bool goodCell_barl[kBarlRings][kBarlWedges][kSides]
std::vector< TH1F * > et_spectrum_b_histos
double sign(double x)
std::vector< EcalRecHit >::const_iterator const_iterator
GlobalPoint cellPos_[kEndcWedgesX][kEndcWedgesY]
static const int kSides
Timestamp const & beginTime() const
std::vector< TH1F * > e_spectrum_b_histos
Log< level::Error, false > LogError
static int readXML(const std::string &filename, EcalCondHeader &header, EcalFloatCondObjectContainer &record)
EcalIntercalibConstants oldCalibs_
the old calibration constants (when reiterating, the last ones derived)
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
static const int kBarlWedges
bool getData(T &iHolder) const
Definition: EventSetup.h:128
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
const edm::EDGetTokenT< EBRecHitCollection > ebRecHitToken_
double etsum_barl_miscal_[kNMiscalBinsEB][kBarlRings]
double k_endc_[kEndcEtaRings]
int zside() const
Definition: EEDetId.h:71
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int nhits_barl_[kBarlRings][kBarlWedges][kSides]
RunNumber_t run() const
int iy() const
Definition: EEDetId.h:83
unsigned int nhits_endc_[kEndcWedgesX][kEndcWedgesX][kSides]
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
PhiSymmetryCalibration(const edm::ParameterSet &iConfig)
Constructor.
void beginRun(edm::Run const &, const edm::EventSetup &) override
Log< level::Info, false > LogInfo
void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
double etsum_barl_[kBarlRings][kBarlWedges][kSides]
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
double miscalEB_[kNMiscalBinsEB]
Timestamp const & beginTime() const
Definition: RunBase.h:41
const int statusThreshold_
threshold in channel status beyond which channel is marked bad
T eta() const
Definition: PV3DBase.h:73
std::vector< TH1F * > e_spectrum_e_histos
std::string fullPath() const
Definition: FileInPath.cc:161
tuple cout
Definition: gather_cfg.py:144
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.
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
double miscalEE_[kNMiscalBinsEE]
static const float kMiscalRangeEE
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
TimeValue_t value() const
Definition: Timestamp.h:45
const edm::ESGetToken< EcalChannelStatus, EcalChannelStatusRcd > channelStatusToken_
Definition: Run.h:45
bool goodCell_endc[kEndcWedgesX][kEndcWedgesX][kSides]
double etaBoundary_[kEndcEtaRings+1]
static const int kEndcWedgesY