CMS 3D CMS Logo

EcalEleCalibLooper.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <cmath>
22 #include "TH1.h"
23 #include "TH2.h"
24 #include "TFile.h"
25 
26 //----------------------------------------------------------------
27 
30  : m_barrelAlCa(iConfig.getParameter<edm::InputTag>("alcaBarrelHitCollection")),
31  m_endcapAlCa(iConfig.getParameter<edm::InputTag>("alcaEndcapHitCollection")),
32  m_ElectronLabel(iConfig.getParameter<edm::InputTag>("electronLabel")),
33  m_recoWindowSidex(iConfig.getParameter<int>("recoWindowSidex")),
34  m_recoWindowSidey(iConfig.getParameter<int>("recoWindowSidey")),
35  m_etaWidth(iConfig.getParameter<int>("etaWidth")),
36  m_phiWidthEB(iConfig.getParameter<int>("phiWidthEB")),
37  m_etaStart(etaShifter(iConfig.getParameter<int>("etaStart"))),
38  m_etaEnd(etaShifter(iConfig.getParameter<int>("etaEnd"))),
39  m_phiStartEB(iConfig.getParameter<int>("phiStartEB")),
40  m_phiEndEB(iConfig.getParameter<int>("phiEndEB")),
41  m_radStart(iConfig.getParameter<int>("radStart")),
42  m_radEnd(iConfig.getParameter<int>("radEnd")),
43  m_radWidth(iConfig.getParameter<int>("radWidth")),
44  m_phiStartEE(iConfig.getParameter<int>("phiStartEE")),
45  m_phiEndEE(iConfig.getParameter<int>("phiEndEE")),
46  m_phiWidthEE(iConfig.getParameter<int>("phiWidthEE")),
47  m_maxSelectedNumPerXtal(iConfig.getParameter<int>("maxSelectedNumPerCrystal")),
48  m_minEnergyPerCrystal(iConfig.getParameter<double>("minEnergyPerCrystal")),
49  m_maxEnergyPerCrystal(iConfig.getParameter<double>("maxEnergyPerCrystal")),
50  m_minCoeff(iConfig.getParameter<double>("minCoeff")),
51  m_maxCoeff(iConfig.getParameter<double>("maxCoeff")),
52  m_usingBlockSolver(iConfig.getParameter<int>("usingBlockSolver")),
53  m_loops(iConfig.getParameter<int>("loops")),
54  m_ebRecHitToken(consumes<EBRecHitCollection>(m_barrelAlCa)),
55  m_eeRecHitToken(consumes<EERecHitCollection>(m_endcapAlCa)),
56  m_gsfElectronToken(consumes<reco::GsfElectronCollection>(m_ElectronLabel)),
57  m_geometryToken(esConsumes()) {
58  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] asserts";
60 
61  assert(m_etaStart >= 0 && m_etaStart <= 171);
62  assert(m_etaEnd >= m_etaStart && m_etaEnd <= 171);
64  assert(m_radStart >= 0 && m_radStart <= 50);
65  assert(m_radEnd >= m_radStart && m_radEnd <= 50);
66  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] entering ";
67  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] region definition";
71  TH2F* EBRegion = new TH2F("EBRegion", "EBRegion", 170, 0, 170, 360, 0, 360);
72  for (int eta = 0; eta < 170; ++eta)
73  for (int phi = 0; phi < 360; ++phi) {
74  EBRegion->Fill(eta, phi, m_xtalRegionId[EBDetId::unhashIndex(eta * 360 + phi).rawId()]);
75  }
76  TH2F* EERegion = new TH2F("EERegion", "EERegion", 100, 0, 100, 100, 0, 100);
77  for (int x = 0; x < 100; ++x)
78  for (int y = 0; y < 100; ++y) {
79  if (EEDetId::validDetId(x + 1, y + 1, 1))
80  EERegion->Fill(x, y, m_xtalRegionId[EEDetId(x + 1, y + 1, -1).rawId()]);
81  }
82 
83  TFile out("EBZone.root", "recreate");
84  EBRegion->Write();
85  EERegion->Write();
86  out.Close();
87  delete EERegion;
88  delete EBRegion;
90 
91  //PG build the calibration algorithms for the regions
92  //PG ------------------------------------------------
93 
94  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] Calib Block";
95  std::string algorithm = iConfig.getParameter<std::string>("algorithm");
96  int eventWeight = iConfig.getUntrackedParameter<int>("L3EventWeight", 1);
97 
98  //PG loop over the regions set
99  for (int region = 0; region < EBregionsNum() + 2 * EEregionsNum(); ++region) {
100  if (algorithm == "IMA")
101  m_EcalCalibBlocks.push_back(new IMACalibBlock(m_regions.at(region)));
102  else if (algorithm == "L3")
103  m_EcalCalibBlocks.push_back(new L3CalibBlock(m_regions.at(region), eventWeight));
104  else {
105  edm::LogError("building") << algorithm << " is not a valid calibration algorithm";
106  exit(1);
107  }
108  } //PG loop over the regions set
109  std::string mapFiller = iConfig.getParameter<std::string>("FillType");
110  if (mapFiller == "Cluster")
117  &m_barrelMap,
118  &m_endcapMap);
119  if (mapFiller == "Matrix")
126  &m_barrelMap,
127  &m_endcapMap);
128 } //end ctor
129 
130 //---------------------------------------------------------------------------
131 
134  edm::LogInfo("IML") << "[EcalEleCalibLooper][dtor]";
135  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
136  calibBlock != m_EcalCalibBlocks.end();
137  ++calibBlock)
138  delete (*calibBlock);
139 }
140 
141 //---------------------------------------------------------------------------
142 
145 
146 //----------------------------------------------------------------------
147 
150 void EcalEleCalibLooper::startingNewLoop(unsigned int ciclo) {
151  edm::LogInfo("IML") << "[InvMatrixCalibLooper][Start] entering loop " << ciclo;
152 
153  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
154  calibBlock != m_EcalCalibBlocks.end();
155  ++calibBlock)
156  (*calibBlock)->reset();
157  for (std::map<int, int>::iterator it = m_xtalNumOfHits.begin(); it != m_xtalNumOfHits.end(); ++it)
158  it->second = 0;
159  return;
160 }
161 
162 //----------------------------------------------------------------------
163 
167  // this chunk used to belong to beginJob(isetup). Moved here
168  // with the beginJob without arguments migration
169 
170  if (isfirstcall_) {
171  const auto& geometry = iSetup.getData(m_geometryToken);
172  m_barrelCells = geometry.getValidDetIds(DetId::Ecal, EcalBarrel);
173  m_endcapCells = geometry.getValidDetIds(DetId::Ecal, EcalEndcap);
174  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
175  ++barrelIt) {
176  m_barrelMap[*barrelIt] = 1;
177  m_xtalNumOfHits[barrelIt->rawId()] = 0;
178  }
179  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
180  ++endcapIt) {
181  m_endcapMap[*endcapIt] = 1;
182  m_xtalNumOfHits[endcapIt->rawId()] = 0;
183  }
184 
185  isfirstcall_ = false;
186  }
187 
188  //take the collection of recHits in the barrel
189  const EBRecHitCollection* barrelHitsCollection = nullptr;
190  edm::Handle<EBRecHitCollection> barrelRecHitsHandle;
191  iEvent.getByToken(m_ebRecHitToken, barrelRecHitsHandle);
192  barrelHitsCollection = barrelRecHitsHandle.product();
193  if (!barrelRecHitsHandle.isValid()) {
194  edm::LogError("reading") << "[EcalEleCalibLooper] barrel rec hits not found";
195  return kContinue;
196  }
197 
198  //take the collection of rechis in the endcap
199  const EERecHitCollection* endcapHitsCollection = nullptr;
200  edm::Handle<EERecHitCollection> endcapRecHitsHandle;
201  iEvent.getByToken(m_eeRecHitToken, endcapRecHitsHandle);
202  endcapHitsCollection = endcapRecHitsHandle.product();
203  if (!endcapRecHitsHandle.isValid()) {
204  edm::LogError("reading") << "[EcalEleCalibLooper] endcap rec hits not found";
205  return kContinue;
206  }
207 
208  //Takes the electron collection of the pixel detector
210  iEvent.getByToken(m_gsfElectronToken, pElectrons);
211  if (!pElectrons.isValid()) {
212  edm::LogError("reading") << "[EcalEleCalibLooper] electrons not found";
213  return kContinue;
214  }
215 
216  //Start the loop over the electrons
217  for (reco::GsfElectronCollection::const_iterator eleIt = pElectrons->begin(); eleIt != pElectrons->end(); ++eleIt) {
218  double pSubtract = 0;
219  double pTk = 0;
220  std::map<int, double> xtlMap;
221  DetId Max = 0;
222  if (std::abs(eleIt->eta()) < 1.49)
223  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), barrelHitsCollection).first;
224  else
225  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), endcapHitsCollection).first;
226  if (Max.det() == 0)
227  continue;
229  eleIt->superCluster()->hitsAndFractions(), Max, barrelHitsCollection, endcapHitsCollection, xtlMap, pSubtract);
231  continue;
232  ++m_xtalNumOfHits[Max.rawId()];
233  if (m_xtalRegionId[Max.rawId()] == -1)
234  continue;
235  pTk = eleIt->trackMomentumAtVtx().R();
236  m_EcalCalibBlocks.at(m_xtalRegionId[Max.rawId()])->Fill(xtlMap.begin(), xtlMap.end(), pTk, pSubtract);
237  } //End of the loop over the electron collection
238 
239  return kContinue;
240 } //end of duringLoop
241 
242 //----------------------------------------------------------------------
243 
248  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] entering...";
249  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
250  calibBlock != m_EcalCalibBlocks.end();
251  ++calibBlock)
252  (*calibBlock)->solve(m_usingBlockSolver, m_minCoeff, m_maxCoeff);
253 
254  TH1F* EBcoeffEnd = new TH1F("EBRegion", "EBRegion", 100, 0.5, 2.1);
255  TH2F* EBcoeffMap = new TH2F("EBcoeff", "EBcoeff", 171, -85, 85, 360, 1, 361);
256  TH1F* EEPcoeffEnd = new TH1F("EEPRegion", "EEPRegion", 100, 0.5, 2.1);
257  TH1F* EEMcoeffEnd = new TH1F("EEMRegion", "EEMRegion", 100, 0.5, 2.1);
258  TH2F* EEPcoeffMap = new TH2F("EEPcoeffMap", "EEPcoeffMap", 101, 1, 101, 101, 0, 101);
259  TH2F* EEMcoeffMap = new TH2F("EEMcoeffMap", "EEMcoeffMap", 101, 1, 101, 101, 0, 101);
260  //loop over the barrel xtals to get the coeffs
261  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
262  ++barrelIt) {
263  EBDetId ee(*barrelIt);
264  int index = barrelIt->rawId();
265  if (m_xtalRegionId[index] == -1)
266  continue;
268  EBcoeffEnd->Fill(m_barrelMap[*barrelIt]);
269  EBcoeffMap->Fill(ee.ieta(), ee.iphi(), m_barrelMap[*barrelIt]);
270  } //PG loop over phi
271 
272  // loop over the EndCap to get the recalib coefficients
273  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
274  ++endcapIt) {
275  EEDetId ee(*endcapIt);
276  int index = endcapIt->rawId();
277  if (ee.zside() > 0) {
278  if (m_xtalRegionId[index] == -1)
279  continue;
281  EEPcoeffEnd->Fill(m_endcapMap[*endcapIt]);
282  EEPcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
283  } else {
285  EEMcoeffEnd->Fill(m_endcapMap[*endcapIt]);
286  EEMcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
287  }
288  } // loop over the EndCap to get the recalib coefficients
289 
290  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] End of endOfLoop";
291 
292  char filename[80];
293  sprintf(filename, "coeffs%d.root", iCounter);
294  TFile zout(filename, "recreate");
295  EBcoeffEnd->Write();
296  EBcoeffMap->Write();
297  EEPcoeffEnd->Write();
298  EEPcoeffMap->Write();
299  EEMcoeffEnd->Write();
300  EEMcoeffMap->Write();
301  zout.Close();
302  delete EBcoeffEnd;
303  delete EBcoeffMap;
304  delete EEPcoeffEnd;
305  delete EEMcoeffEnd;
306  delete EEPcoeffMap;
307  delete EEMcoeffMap;
308  if (iCounter < m_loops - 1)
309  return kContinue;
310  else
311  return kStop;
312 }
313 
314 //-------------------------------------------------------------------
315 
319  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] saving calib coeffs";
320 
321  //Writes the coeffs
322  calibXMLwriter barrelWriter(EcalBarrel);
323  calibXMLwriter endcapWriter(EcalEndcap);
324  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
325  ++barrelIt) {
326  EBDetId eb(*barrelIt);
327  barrelWriter.writeLine(eb, m_barrelMap[*barrelIt]);
328  }
329  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
330  ++endcapIt) {
331  EEDetId ee(*endcapIt);
332  endcapWriter.writeLine(ee, m_endcapMap[*endcapIt]);
333  }
334  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] Exiting";
335 }
336 
337 //------------------------------------//
338 // definition of functions //
339 //------------------------------------//
340 
342 int EcalEleCalibLooper::EBregionCheck(const int eta, const int phi) const {
343  if (eta < m_etaStart)
344  return 1;
345  if (eta >= m_etaEnd)
346  return 2;
347  if (phi < m_phiStartEB)
348  return 3;
349  if (phi >= m_phiEndEB)
350  return 4;
351  return 0;
352 }
353 
354 //--------------------------------------------
355 
357 inline double degrees(double radiants) { return radiants * 180 * (1 / M_PI); }
358 
359 //--------------------------------------------
360 
362 inline double radiants(int degrees) { return degrees * M_PI * (1 / 180); }
363 
364 //--------------------------------------------
365 
368  //PG 200 > atan (50/0.5)
369  if (degrees == 90)
370  return 90;
371  return tan(radiants(degrees));
372 }
373 
374 //--------------------------------------------
375 
377 inline double Mod(double phi) {
378  if (phi >= 360 && phi < 720)
379  return phi - 360;
380  if (phi >= 720)
381  return phi - 720;
382  return phi;
383 }
384 
385 //----------------------------------------
386 
388 int EcalEleCalibLooper::EBRegionId(const int etaXtl, const int phiXtl) const {
389  if (EBregionCheck(etaXtl, phiXtl))
390  return -1;
391  int phifake = m_phiStartEB;
392  if (m_phiStartEB > m_phiEndEB)
393  phifake = m_phiStartEB - 360;
394  int Nphi = (m_phiEndEB - phifake) / m_phiWidthEB;
395  int etaI = (etaXtl - m_etaStart) / m_etaWidth;
396  int phiI = (phiXtl - m_phiStartEB) / m_phiWidthEB;
397  int regionNumEB = phiI + Nphi * etaI;
398  return (int)regionNumEB;
399 }
400 
401 //----------------------------------------
402 
404 int EcalEleCalibLooper::EERegionId(const int ics, const int ips) const {
405  if (EEregionCheck(ics, ips))
406  return -1;
407  int phifake = m_phiStartEE;
408  if (m_phiStartEE > m_phiEndEE)
409  phifake = m_phiStartEE - 360;
410  double radius = (ics - 50) * (ics - 50) + (ips - 50) * (ips - 50);
411  radius = sqrt(radius);
412  int Nphi = (m_phiEndEE - phifake) / m_phiWidthEE;
413  double phi = atan2(static_cast<double>(ips - 50), static_cast<double>(ics - 50));
414  phi = degrees(phi);
415  if (phi < 0)
416  phi += 360;
417  int radI = static_cast<int>((radius - m_radStart) / m_radWidth);
418  int phiI = static_cast<int>((m_phiEndEE - phi) / m_phiWidthEE);
419  int regionNumEE = phiI + Nphi * radI;
420  return regionNumEE;
421 }
422 
423 //----------------------------------------
424 
427  int phifake = m_phiStartEE;
428  if (m_phiStartEE > m_phiEndEE)
429  phifake = m_phiStartEE - 360;
430  return ((m_radEnd - m_radStart) / m_radWidth) * ((m_phiEndEE - phifake) / m_phiWidthEE);
431 }
432 
433 //----------------------------------------
434 
437  int phi = m_phiStartEB;
438  if (m_phiStartEB > m_phiEndEB)
439  phi = m_phiStartEB - 360;
440  return ((m_etaEnd - m_etaStart) / m_etaWidth) * ((m_phiEndEB - phi) / m_phiWidthEB);
441 }
442 
443 //----------------------------------------
444 
447  int reg = -1;
448  for (int it = 0; it < EBregionsNum(); ++it)
449  m_regions.push_back(0);
450  for (int eta = 0; eta < 170; ++eta)
451  for (int phi = 0; phi < 360; ++phi) {
452  reg = EBRegionId(eta, phi);
453  m_xtalRegionId[EBDetId::unhashIndex(eta * 360 + phi).rawId()] = reg;
454  if (reg == -1)
455  continue;
457  ++m_regions.at(reg);
458  }
459 }
460 
461 //----------------------------------------
462 
463 //DS EE Region Definition
465  // reset
466  int EBnum = EBregionsNum();
467  int EEnum = EEregionsNum();
468  for (int it = 0; it < 2 * EEnum; ++it)
469  m_regions.push_back(0);
470  // loop sui xtl
471  int reg = -1;
472  for (int ics = 0; ics < 100; ++ics)
473  for (int ips = 0; ips < 100; ++ips) {
474  int ireg = EERegionId(ics, ips);
475  if (ireg == -1)
476  reg = -1;
477  else
478  reg = EBnum + ireg;
479  if (EEDetId::validDetId(ics + 1, ips + 1, 1)) {
480  m_xtalRegionId[EEDetId(ics + 1, ips + 1, 1).rawId()] = reg;
481  if (reg == -1)
482  continue;
483  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, 1).rawId()] = m_regions.at(reg);
484  ++m_regions.at(reg);
485  }
486  if (reg != -1)
487  reg += EEnum;
488  if (EEDetId::validDetId(ics + 1, ips + 1, -1)) {
489  m_xtalRegionId[EEDetId(ics + 1, ips + 1, -1).rawId()] = reg;
490  if (reg == -1)
491  continue;
492  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, -1).rawId()] = m_regions.at(reg);
493  ++m_regions.at(reg);
494  }
495  }
496 }
497 
498 //-----------------------------------------
499 
501 int EcalEleCalibLooper::EEregionCheck(const int ics, const int ips) const {
502  int x = ics - 50;
503  int y = ips - 50;
504  double radius2 = x * x + y * y;
505  if (radius2 < 10 * 10)
506  return 1; //center of the donut
507  if (radius2 > 50 * 50)
508  return 1; //outer part of the donut
509  if (radius2 < m_radStart * m_radStart)
510  return 2;
511  if (radius2 >= m_radEnd * m_radEnd)
512  return 2;
513  double phi = atan2(static_cast<double>(y), static_cast<double>(x));
514  phi = degrees(phi);
515  if (phi < 0)
516  phi += 360;
517  if (m_phiStartEE < m_phiEndEE && phi > m_phiStartEE && phi < m_phiEndEE)
518  return 0;
520  return 0;
521  return 3;
522 }
523 
524 //--------------------------------------------
525 
526 //Shifts eta in other coordinates (from 0 to 170)
527 int EcalEleCalibLooper::etaShifter(const int etaOld) const {
528  if (etaOld < 0)
529  return etaOld + 85;
530  else if (etaOld > 0)
531  return etaOld + 84;
532  assert(0 != etaOld); // etaOld = 0, apparently not a foreseen value, so fail
533  return 999; // dummy statement to silence compiler warning
534 }
535 
536 //--------------------------------------------
double degrees(double radiants)
def degrees
~EcalEleCalibLooper() override
dtor
virtual void fillMap(const std::vector< std::pair< DetId, float > > &, const DetId, const EcalRecHitCollection *, const EcalRecHitCollection *, std::map< int, double > &xtlMap, double &)=0
The Map filler.
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
std::vector< DetId > m_barrelCells
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
const int m_phiStartEB
phi start of the region of interest
const int m_usingBlockSolver
to exclude the blocksolver
const double m_maxCoeff
maximum coefficient accepted (RAW)
const int m_phiEndEB
phi end of the region of interest
const int m_phiWidthEB
eta size of the additive border to the sub-matrix
const edm::EDGetTokenT< EERecHitCollection > m_eeRecHitToken
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
double giveLimit(int)
copes with the infinitives of the tangent
const int m_radStart
DS For the EE.
int EERegionId(const int, const int) const
Gives the id of the region.
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
T const * product() const
Definition: Handle.h:70
int ix() const
Definition: EEDetId.h:77
Status endOfLoop(const edm::EventSetup &, unsigned int iCounter) override
const int m_etaStart
phi size of the additive border to the sub-matrix
Log< level::Error, false > LogError
assert(be >=bs)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
double getMaximum(TObjArray *array)
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
const int m_etaEnd
eta end of the region of interest
T getUntrackedParameter(std::string const &, T const &) const
int EBregionCheck(const int eta, const int phi) const
Tells if you are in the region to be calibrated.
double Mod(double phi)
autoexplaining
int iEvent
Definition: GenABIO.cc:224
int etaShifter(const int) const
LP Change the coordinate system.
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int EEregionCheck(const int, const int) const
returns zero if the coordinates are in the right place.
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< DetId > m_endcapCells
const double m_minEnergyPerCrystal
minimum energy per crystal cut
interface to the L3Univ class for testing
Definition: L3CalibBlock.h:24
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void endOfJob() override
Status duringLoop(const edm::Event &, const edm::EventSetup &) override
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
#define M_PI
Log< level::Info, false > LogInfo
const int m_recoWindowSidex
reconstruction window size
std::map< int, int > m_xtalRegionId
Definition: DetId.h:17
void EBRegionDefinition()
DS EB Region Definition.
const edm::EDGetTokenT< EBRecHitCollection > m_ebRecHitToken
ED token.
int zside() const
Definition: EEDetId.h:71
const int m_etaWidth
eta size of the sub-matrix
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
const edm::EDGetTokenT< reco::GsfElectronCollection > m_gsfElectronToken
std::map< int, int > m_xtalNumOfHits
std::vector< int > m_regions
int EBregionsNum() const
DS number of regions in EB.
bool isValid() const
Definition: HandleBase.h:70
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > m_geometryToken
ES token.
static EBDetId unhashIndex(int hi)
get a DetId from a compact index for arrays
Definition: EBDetId.h:110
std::map< int, int > m_xtalPositionInRegion
void writeLine(EBDetId const &, float)
const int m_maxSelectedNumPerXtal
maximum number of events per crystal
const unsigned int m_loops
DS sets the number of loops to do.
fixed size matrix
HLT enums.
void startingNewLoop(unsigned int) override
EcalIntercalibConstantMap m_endcapMap
int EEregionsNum() const
DS Number of regions in EE.
int EBRegionId(const int, const int) const
Reg Id generator EB --— for the barrel.
EcalEleCalibLooper(const edm::ParameterSet &)
ctor
double radiants(int degrees)
DS def radiants.
void beginOfJob() override
BeginOfJob.
const double m_maxEnergyPerCrystal
maximum energy per crystal cut
const double m_minCoeff
minimum coefficient accepted (RAW)
int iy() const
Definition: EEDetId.h:83
def exit(msg="")