CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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;
267  m_barrelMap[*barrelIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
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;
280  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
281  EEPcoeffEnd->Fill(m_endcapMap[*endcapIt]);
282  EEPcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
283  } else {
284  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
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;
519  if (m_phiStartEE > m_phiEndEE && (phi > m_phiStartEE || phi < m_phiEndEE))
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
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
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
int ix() const
Definition: EEDetId.h:77
const edm::EDGetTokenT< EERecHitCollection > m_eeRecHitToken
double giveLimit(int)
copes with the infinitives of the tangent
const int m_radStart
DS For the EE.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
int EEregionsNum() const
DS Number of regions in EE.
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
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
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
const int m_etaEnd
eta end of the region of interest
bool getData(T &iHolder) const
Definition: EventSetup.h:128
double Mod(double phi)
autoexplaining
int iEvent
Definition: GenABIO.cc:224
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
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
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 iy() const
Definition: EEDetId.h:83
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
void endOfJob() override
bool isValid() const
Definition: HandleBase.h:70
Status duringLoop(const edm::Event &, const edm::EventSetup &) override
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
Log< level::Info, false > LogInfo
T Max(T a, T b)
Definition: MathUtil.h:44
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.
T const * product() const
Definition: Handle.h:70
int EERegionId(const int, const int) const
Gives the id of the region.
const int m_etaWidth
eta size of the sub-matrix
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const edm::EDGetTokenT< reco::GsfElectronCollection > m_gsfElectronToken
std::map< int, int > m_xtalNumOfHits
std::vector< int > m_regions
int etaShifter(const int) const
LP Change the coordinate system.
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.
void startingNewLoop(unsigned int) override
tuple filename
Definition: lut2db_cfg.py:20
EcalIntercalibConstantMap m_endcapMap
EcalEleCalibLooper(const edm::ParameterSet &)
ctor
double radiants(int degrees)
DS def radiants.
int EBRegionId(const int, const int) const
Reg Id generator EB --— for the barrel.
void beginOfJob() override
BeginOfJob.
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
const double m_maxEnergyPerCrystal
maximum energy per crystal cut
const double m_minCoeff
minimum coefficient accepted (RAW)
int EBregionsNum() const
DS number of regions in EB.