CMS 3D CMS Logo

EcalEleCalibLooper.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <cmath>
3 #include <iostream>
26 #include "TH1.h"
27 #include "TH2.h"
28 #include "TFile.h"
29 
30 //----------------------------------------------------------------
31 
34  : m_barrelAlCa(iConfig.getParameter<edm::InputTag>("alcaBarrelHitCollection")),
35  m_endcapAlCa(iConfig.getParameter<edm::InputTag>("alcaEndcapHitCollection")),
36  m_recoWindowSidex(iConfig.getParameter<int>("recoWindowSidex")),
37  m_recoWindowSidey(iConfig.getParameter<int>("recoWindowSidey")),
38  m_etaWidth(iConfig.getParameter<int>("etaWidth")),
39  m_phiWidthEB(iConfig.getParameter<int>("phiWidthEB")),
40  m_etaStart(etaShifter(iConfig.getParameter<int>("etaStart"))),
41  m_etaEnd(etaShifter(iConfig.getParameter<int>("etaEnd"))),
42  m_phiStartEB(iConfig.getParameter<int>("phiStartEB")),
43  m_phiEndEB(iConfig.getParameter<int>("phiEndEB")),
44  m_radStart(iConfig.getParameter<int>("radStart")),
45  m_radEnd(iConfig.getParameter<int>("radEnd")),
46  m_radWidth(iConfig.getParameter<int>("radWidth")),
47  m_phiStartEE(iConfig.getParameter<int>("phiStartEE")),
48  m_phiEndEE(iConfig.getParameter<int>("phiEndEE")),
49  m_phiWidthEE(iConfig.getParameter<int>("phiWidthEE")),
50  m_maxSelectedNumPerXtal(iConfig.getParameter<int>("maxSelectedNumPerCrystal")),
51  m_minEnergyPerCrystal(iConfig.getParameter<double>("minEnergyPerCrystal")),
52  m_maxEnergyPerCrystal(iConfig.getParameter<double>("maxEnergyPerCrystal")),
53  m_minCoeff(iConfig.getParameter<double>("minCoeff")),
54  m_maxCoeff(iConfig.getParameter<double>("maxCoeff")),
55  m_usingBlockSolver(iConfig.getParameter<int>("usingBlockSolver")),
56  m_loops(iConfig.getParameter<int>("loops")),
57  m_ElectronLabel(iConfig.getParameter<edm::InputTag>("electronLabel")) {
58  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] asserts";
59  assert(!((m_etaEnd - m_etaStart) % m_etaWidth));
60 
61  assert(m_etaStart >= 0 && m_etaStart <= 171);
62  assert(m_etaEnd >= m_etaStart && m_etaEnd <= 171);
63  assert((m_radEnd - m_radStart) % m_radWidth == 0);
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  edm::ESHandle<CaloGeometry> geoHandle;
172  iSetup.get<CaloGeometryRecord>().get(geoHandle);
173  const CaloGeometry& geometry = *geoHandle;
176  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
177  ++barrelIt) {
178  m_barrelMap[*barrelIt] = 1;
179  m_xtalNumOfHits[barrelIt->rawId()] = 0;
180  }
181  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
182  ++endcapIt) {
183  m_endcapMap[*endcapIt] = 1;
184  m_xtalNumOfHits[endcapIt->rawId()] = 0;
185  }
186 
187  isfirstcall_ = false;
188  }
189 
190  //take the collection of recHits in the barrel
191  const EBRecHitCollection* barrelHitsCollection = nullptr;
192  edm::Handle<EBRecHitCollection> barrelRecHitsHandle;
193  iEvent.getByLabel(m_barrelAlCa, barrelRecHitsHandle);
194  barrelHitsCollection = barrelRecHitsHandle.product();
195  if (!barrelRecHitsHandle.isValid()) {
196  edm::LogError("reading") << "[EcalEleCalibLooper] barrel rec hits not found";
197  return kContinue;
198  }
199 
200  //take the collection of rechis in the endcap
201  const EERecHitCollection* endcapHitsCollection = nullptr;
202  edm::Handle<EERecHitCollection> endcapRecHitsHandle;
203  iEvent.getByLabel(m_endcapAlCa, endcapRecHitsHandle);
204  endcapHitsCollection = endcapRecHitsHandle.product();
205  if (!endcapRecHitsHandle.isValid()) {
206  edm::LogError("reading") << "[EcalEleCalibLooper] endcap rec hits not found";
207  return kContinue;
208  }
209 
210  //Takes the electron collection of the pixel detector
212  iEvent.getByLabel(m_ElectronLabel, pElectrons);
213  if (!pElectrons.isValid()) {
214  edm::LogError("reading") << "[EcalEleCalibLooper] electrons not found";
215  return kContinue;
216  }
217 
218  //Start the loop over the electrons
219  for (reco::GsfElectronCollection::const_iterator eleIt = pElectrons->begin(); eleIt != pElectrons->end(); ++eleIt) {
220  double pSubtract = 0;
221  double pTk = 0;
222  std::map<int, double> xtlMap;
223  DetId Max = 0;
224  if (std::abs(eleIt->eta()) < 1.49)
225  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), barrelHitsCollection).first;
226  else
227  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), endcapHitsCollection).first;
228  if (Max.det() == 0)
229  continue;
231  eleIt->superCluster()->hitsAndFractions(), Max, barrelHitsCollection, endcapHitsCollection, xtlMap, pSubtract);
233  continue;
234  ++m_xtalNumOfHits[Max.rawId()];
235  if (m_xtalRegionId[Max.rawId()] == -1)
236  continue;
237  pTk = eleIt->trackMomentumAtVtx().R();
238  m_EcalCalibBlocks.at(m_xtalRegionId[Max.rawId()])->Fill(xtlMap.begin(), xtlMap.end(), pTk, pSubtract);
239  } //End of the loop over the electron collection
240 
241  return kContinue;
242 } //end of duringLoop
243 
244 //----------------------------------------------------------------------
245 
250  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] entering...";
251  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
252  calibBlock != m_EcalCalibBlocks.end();
253  ++calibBlock)
254  (*calibBlock)->solve(m_usingBlockSolver, m_minCoeff, m_maxCoeff);
255 
256  TH1F* EBcoeffEnd = new TH1F("EBRegion", "EBRegion", 100, 0.5, 2.1);
257  TH2F* EBcoeffMap = new TH2F("EBcoeff", "EBcoeff", 171, -85, 85, 360, 1, 361);
258  TH1F* EEPcoeffEnd = new TH1F("EEPRegion", "EEPRegion", 100, 0.5, 2.1);
259  TH1F* EEMcoeffEnd = new TH1F("EEMRegion", "EEMRegion", 100, 0.5, 2.1);
260  TH2F* EEPcoeffMap = new TH2F("EEPcoeffMap", "EEPcoeffMap", 101, 1, 101, 101, 0, 101);
261  TH2F* EEMcoeffMap = new TH2F("EEMcoeffMap", "EEMcoeffMap", 101, 1, 101, 101, 0, 101);
262  //loop over the barrel xtals to get the coeffs
263  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
264  ++barrelIt) {
265  EBDetId ee(*barrelIt);
266  int index = barrelIt->rawId();
267  if (m_xtalRegionId[index] == -1)
268  continue;
269  m_barrelMap[*barrelIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
270  EBcoeffEnd->Fill(m_barrelMap[*barrelIt]);
271  EBcoeffMap->Fill(ee.ieta(), ee.iphi(), m_barrelMap[*barrelIt]);
272  } //PG loop over phi
273 
274  // loop over the EndCap to get the recalib coefficients
275  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
276  ++endcapIt) {
277  EEDetId ee(*endcapIt);
278  int index = endcapIt->rawId();
279  if (ee.zside() > 0) {
280  if (m_xtalRegionId[index] == -1)
281  continue;
282  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
283  EEPcoeffEnd->Fill(m_endcapMap[*endcapIt]);
284  EEPcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
285  } else {
286  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
287  EEMcoeffEnd->Fill(m_endcapMap[*endcapIt]);
288  EEMcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
289  }
290  } // loop over the EndCap to get the recalib coefficients
291 
292  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] End of endOfLoop";
293 
294  char filename[80];
295  sprintf(filename, "coeffs%d.root", iCounter);
296  TFile zout(filename, "recreate");
297  EBcoeffEnd->Write();
298  EBcoeffMap->Write();
299  EEPcoeffEnd->Write();
300  EEPcoeffMap->Write();
301  EEMcoeffEnd->Write();
302  EEMcoeffMap->Write();
303  zout.Close();
304  delete EBcoeffEnd;
305  delete EBcoeffMap;
306  delete EEPcoeffEnd;
307  delete EEMcoeffEnd;
308  delete EEPcoeffMap;
309  delete EEMcoeffMap;
310  if (iCounter < m_loops - 1)
311  return kContinue;
312  else
313  return kStop;
314 }
315 
316 //-------------------------------------------------------------------
317 
321  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] saving calib coeffs";
322 
323  //Writes the coeffs
324  calibXMLwriter barrelWriter(EcalBarrel);
325  calibXMLwriter endcapWriter(EcalEndcap);
326  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
327  ++barrelIt) {
328  EBDetId eb(*barrelIt);
329  barrelWriter.writeLine(eb, m_barrelMap[*barrelIt]);
330  }
331  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
332  ++endcapIt) {
333  EEDetId ee(*endcapIt);
334  endcapWriter.writeLine(ee, m_endcapMap[*endcapIt]);
335  }
336  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] Exiting";
337 }
338 
339 //------------------------------------//
340 // definition of functions //
341 //------------------------------------//
342 
344 int EcalEleCalibLooper::EBregionCheck(const int eta, const int phi) const {
345  if (eta < m_etaStart)
346  return 1;
347  if (eta >= m_etaEnd)
348  return 2;
349  if (phi < m_phiStartEB)
350  return 3;
351  if (phi >= m_phiEndEB)
352  return 4;
353  return 0;
354 }
355 
356 //--------------------------------------------
357 
359 inline double degrees(double radiants) { return radiants * 180 * (1 / M_PI); }
360 
361 //--------------------------------------------
362 
364 inline double radiants(int degrees) { return degrees * M_PI * (1 / 180); }
365 
366 //--------------------------------------------
367 
370  //PG 200 > atan (50/0.5)
371  if (degrees == 90)
372  return 90;
373  return tan(radiants(degrees));
374 }
375 
376 //--------------------------------------------
377 
379 inline double Mod(double phi) {
380  if (phi >= 360 && phi < 720)
381  return phi - 360;
382  if (phi >= 720)
383  return phi - 720;
384  return phi;
385 }
386 
387 //----------------------------------------
388 
390 int EcalEleCalibLooper::EBRegionId(const int etaXtl, const int phiXtl) const {
391  if (EBregionCheck(etaXtl, phiXtl))
392  return -1;
393  int phifake = m_phiStartEB;
394  if (m_phiStartEB > m_phiEndEB)
395  phifake = m_phiStartEB - 360;
396  int Nphi = (m_phiEndEB - phifake) / m_phiWidthEB;
397  int etaI = (etaXtl - m_etaStart) / m_etaWidth;
398  int phiI = (phiXtl - m_phiStartEB) / m_phiWidthEB;
399  int regionNumEB = phiI + Nphi * etaI;
400  return (int)regionNumEB;
401 }
402 
403 //----------------------------------------
404 
406 int EcalEleCalibLooper::EERegionId(const int ics, const int ips) const {
407  if (EEregionCheck(ics, ips))
408  return -1;
409  int phifake = m_phiStartEE;
410  if (m_phiStartEE > m_phiEndEE)
411  phifake = m_phiStartEE - 360;
412  double radius = (ics - 50) * (ics - 50) + (ips - 50) * (ips - 50);
413  radius = sqrt(radius);
414  int Nphi = (m_phiEndEE - phifake) / m_phiWidthEE;
415  double phi = atan2(static_cast<double>(ips - 50), static_cast<double>(ics - 50));
416  phi = degrees(phi);
417  if (phi < 0)
418  phi += 360;
419  int radI = static_cast<int>((radius - m_radStart) / m_radWidth);
420  int phiI = static_cast<int>((m_phiEndEE - phi) / m_phiWidthEE);
421  int regionNumEE = phiI + Nphi * radI;
422  return regionNumEE;
423 }
424 
425 //----------------------------------------
426 
429  int phifake = m_phiStartEE;
430  if (m_phiStartEE > m_phiEndEE)
431  phifake = m_phiStartEE - 360;
432  return ((m_radEnd - m_radStart) / m_radWidth) * ((m_phiEndEE - phifake) / m_phiWidthEE);
433 }
434 
435 //----------------------------------------
436 
439  int phi = m_phiStartEB;
440  if (m_phiStartEB > m_phiEndEB)
441  phi = m_phiStartEB - 360;
442  return ((m_etaEnd - m_etaStart) / m_etaWidth) * ((m_phiEndEB - phi) / m_phiWidthEB);
443 }
444 
445 //----------------------------------------
446 
449  int reg = -1;
450  for (int it = 0; it < EBregionsNum(); ++it)
451  m_regions.push_back(0);
452  for (int eta = 0; eta < 170; ++eta)
453  for (int phi = 0; phi < 360; ++phi) {
454  reg = EBRegionId(eta, phi);
455  m_xtalRegionId[EBDetId::unhashIndex(eta * 360 + phi).rawId()] = reg;
456  if (reg == -1)
457  continue;
459  ++m_regions.at(reg);
460  }
461 }
462 
463 //----------------------------------------
464 
465 //DS EE Region Definition
467  // reset
468  int EBnum = EBregionsNum();
469  int EEnum = EEregionsNum();
470  for (int it = 0; it < 2 * EEnum; ++it)
471  m_regions.push_back(0);
472  // loop sui xtl
473  int reg = -1;
474  for (int ics = 0; ics < 100; ++ics)
475  for (int ips = 0; ips < 100; ++ips) {
476  int ireg = EERegionId(ics, ips);
477  if (ireg == -1)
478  reg = -1;
479  else
480  reg = EBnum + ireg;
481  if (EEDetId::validDetId(ics + 1, ips + 1, 1)) {
482  m_xtalRegionId[EEDetId(ics + 1, ips + 1, 1).rawId()] = reg;
483  if (reg == -1)
484  continue;
485  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, 1).rawId()] = m_regions.at(reg);
486  ++m_regions.at(reg);
487  }
488  if (reg != -1)
489  reg += EEnum;
490  if (EEDetId::validDetId(ics + 1, ips + 1, -1)) {
491  m_xtalRegionId[EEDetId(ics + 1, ips + 1, -1).rawId()] = reg;
492  if (reg == -1)
493  continue;
494  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, -1).rawId()] = m_regions.at(reg);
495  ++m_regions.at(reg);
496  }
497  }
498 }
499 
500 //-----------------------------------------
501 
503 int EcalEleCalibLooper::EEregionCheck(const int ics, const int ips) const {
504  int x = ics - 50;
505  int y = ips - 50;
506  double radius2 = x * x + y * y;
507  if (radius2 < 10 * 10)
508  return 1; //center of the donut
509  if (radius2 > 50 * 50)
510  return 1; //outer part of the donut
511  if (radius2 < m_radStart * m_radStart)
512  return 2;
513  if (radius2 >= m_radEnd * m_radEnd)
514  return 2;
515  double phi = atan2(static_cast<double>(y), static_cast<double>(x));
516  phi = degrees(phi);
517  if (phi < 0)
518  phi += 360;
519  if (m_phiStartEE < m_phiEndEE && phi > m_phiStartEE && phi < m_phiEndEE)
520  return 0;
521  if (m_phiStartEE > m_phiEndEE && (phi > m_phiStartEE || phi < m_phiEndEE))
522  return 0;
523  return 3;
524 }
525 
526 //--------------------------------------------
527 
528 //Shifts eta in other coordinates (from 0 to 170)
529 int EcalEleCalibLooper::etaShifter(const int etaOld) const {
530  if (etaOld < 0)
531  return etaOld + 85;
532  else if (etaOld > 0)
533  return etaOld + 84;
534  assert(0 != etaOld); // etaOld = 0, apparently not a foreseen value, so fail
535  return 999; // dummy statement to silence compiler warning
536 }
537 
538 //--------------------------------------------
T getParameter(std::string const &) const
double degrees(double radiants)
def degrees
T getUntrackedParameter(std::string const &, T const &) const
~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.
std::vector< DetId > m_barrelCells
int ix() const
Definition: EEDetId.h:77
double giveLimit(int)
copes with the infinitives of the tangent
int EEregionsNum() const
DS Number of regions in EE.
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
edm::InputTag m_endcapAlCa
EcalEndcap Input Collection name.
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
Status endOfLoop(const edm::EventSetup &, unsigned int iCounter) override
unsigned int m_loops
DS sets the number of loops to do.
int EBregionCheck(const int eta, const int phi) const
Tells if you are in the region to be calibrated.
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
double Mod(double phi)
autoexplaining
int m_phiWidthEB
eta size of the additive border to the sub-matrix
int m_maxSelectedNumPerXtal
maximum number of events per crystal
int iEvent
Definition: GenABIO.cc:224
double m_minEnergyPerCrystal
minimum energy per crystal cut
double m_maxCoeff
maximum coefficient accepted (RAW)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< DetId > m_endcapCells
interface to the L3Univ class for testing
Definition: L3CalibBlock.h:24
int zside() const
Definition: EEDetId.h:71
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int m_usingBlockSolver
to exclude the blocksolver
int m_radStart
DS For the EE.
int iy() const
Definition: EEDetId.h:83
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
edm::InputTag m_ElectronLabel
To take the electrons.
void endOfJob() override
bool isValid() const
Definition: HandleBase.h:70
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:488
Status duringLoop(const edm::Event &, const edm::EventSetup &) override
int m_etaStart
phi size of the additive border to the sub-matrix
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
int EEregionCheck(const int, const int) const
returns zero if the coordinates are in the right place.
#define M_PI
T Max(T a, T b)
Definition: MathUtil.h:44
int m_recoWindowSidex
reconstruction window size
std::map< int, int > m_xtalRegionId
Definition: DetId.h:17
void EBRegionDefinition()
DS EB Region Definition.
T const * product() const
Definition: Handle.h:69
int EERegionId(const int, const int) const
Gives the id of the region.
double m_minCoeff
minimum coefficient accepted (RAW)
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
int m_etaWidth
eta size of the sub-matrix
std::map< int, int > m_xtalNumOfHits
std::vector< int > m_regions
int etaShifter(const int) const
LP Change the coordinate system.
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:75
static EBDetId unhashIndex(int hi)
get a DetId from a compact index for arrays
Definition: EBDetId.h:110
int m_phiEndEB
phi end of the region of interest
std::map< int, int > m_xtalPositionInRegion
void writeLine(EBDetId const &, float)
HLT enums.
int m_phiStartEB
phi start of the region of interest
void startingNewLoop(unsigned int) override
T get() const
Definition: EventSetup.h:73
EcalIntercalibConstantMap m_endcapMap
edm::InputTag m_barrelAlCa
EcalBarrel Input Collection name.
EcalEleCalibLooper(const edm::ParameterSet &)
ctor
double radiants(int degrees)
DS def radiants.
int m_etaEnd
eta end of the region of interest
int EBRegionId(const int, const int) const
Reg Id generator EB --— for the barrel.
void beginOfJob() override
BeginOfJob.
def exit(msg="")
int EBregionsNum() const
DS number of regions in EB.
double m_maxEnergyPerCrystal
maximum energy per crystal cut