CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SiPixelGainCalibrationForHLTService.cc
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: SiPixelGainCalibrationForHLT.cc
5  *
6  * Description:
7  *
8  * Version: 1.0 (some functionality moved from ../interface/SiPixelGainCalibrationForHLT.h)
9  * Created: 04/16/2008 10:35:35 AM
10  *
11  * Author: Evan Friis (evan.klose.friis@cern.ch)
12  * University of California, Davis
13  *
14  * =====================================================================================
15  */
16 
18 #include <tuple>
19 
21  uint32_t detID, DigiIterator b, DigiIterator e, float conversionFactor, float offset, int* electron) {
23  int cols;
24  std::tie(range, cols) = ped->getRangeAndNCols(detID);
25  float pedestal = 0, gain = 0;
26  int i = 0;
27  bool isDeadColumn = false, isNoisyColumn = false;
28  int oldCol = -1, oldAveragedBlock = -1;
29  for (DigiIterator di = b; di != e; ++di) {
30  int row = di->row();
31  int col = di->column();
32  int averagedBlock = row / numberOfRowsAveragedOver_;
33  if ((col != oldCol) | (averagedBlock != oldAveragedBlock)) {
34  oldCol = col;
35  oldAveragedBlock = averagedBlock;
36  std::tie(pedestal, gain) = ped->getPedAndGain(col, row, range, cols, isDeadColumn, isNoisyColumn);
37  }
38  if (isDeadColumn | isNoisyColumn)
39  electron[i++] = 0;
40  else {
41  float vcal = float(di->adc()) * gain - pedestal * gain;
42  electron[i++] = int(vcal * conversionFactor + offset);
43  }
44  }
45  assert(i == (e - b));
46 }
47 
48 float SiPixelGainCalibrationForHLTService::getPedestal(const uint32_t& detID, const int& col, const int& row) {
49  bool isDead = false;
50  bool isNoisy = false;
51  float pedestalValue = this->getPedestalByColumn(detID, col, row, isDead, isNoisy);
52  if (isDead || isNoisy) {
53  this->throwExepctionForBadRead("HLT getPedestal()", detID, col, row, pedestalValue);
54  return 0.0;
55  }
56  return pedestalValue;
57 }
58 
59 float SiPixelGainCalibrationForHLTService::getGain(const uint32_t& detID, const int& col, const int& row) {
60  bool isDead = false;
61  bool isNoisy = false;
62  float gainValue = this->getGainByColumn(detID, col, row, isDead, isNoisy);
63  if (isDead || isNoisy) {
64  this->throwExepctionForBadRead("HLT getGain()", detID, col, row, gainValue);
65  return 0.0;
66  }
67  return gainValue;
68 }
69 
70 bool SiPixelGainCalibrationForHLTService::isDead(const uint32_t& detID, const int& col, const int& row) {
71  bool isDead = false;
72  bool isNoisy = false;
73  try {
74  this->getPedestalByColumn(detID, col, row, isDead, isNoisy); //pedestal stores dead column value as well
75  } catch (cms::Exception& e) {
76  // Do not stop processing if you check if a nonexistant pixel is dead
77  edm::LogInfo("SiPixelGainCalibrationForHLTService")
78  << "Attempting to check if nonexistant pixel is dead. Exception message: " << e.what();
79  isDead = false;
80  }
81  return isDead;
82 }
83 
84 bool SiPixelGainCalibrationForHLTService::isNoisy(const uint32_t& detID, const int& col, const int& row) {
85  bool isDead = false;
86  bool isNoisy = false;
87  try {
88  this->getPedestalByColumn(detID, col, row, isDead, isNoisy); //pedestal stores noisy column value as well
89  } catch (cms::Exception& e) {
90  // Do not stop processing if you check if a nonexistant pixel is noisy
91  edm::LogInfo("SiPixelGainCalibrationForHLTService")
92  << "Attempting to check if nonexistant pixel is noisy. Exception message: " << e.what();
93  isNoisy = false;
94  }
95  return isNoisy;
96 }
97 
98 bool SiPixelGainCalibrationForHLTService::isDeadColumn(const uint32_t& detID, const int& col, const int& row) {
99  bool isDead = false;
100  bool isNoisy = false;
101  try {
102  this->getGainByColumn(detID, col, row, isDead, isNoisy);
103  } catch (cms::Exception& e) {
104  // Do not stop processing if you check if a nonexistant pixel is dead
105  edm::LogInfo("SiPixelGainCalibrationForHLTService")
106  << "Attempting to check if nonexistant pixel is dead. Exception message: " << e.what();
107  isDead = false;
108  }
109  return isDead;
110 }
111 
112 bool SiPixelGainCalibrationForHLTService::isNoisyColumn(const uint32_t& detID, const int& col, const int& row) {
113  bool isDead = false;
114  bool isNoisy = false;
115  try {
116  this->getGainByColumn(detID, col, row, isDead, isNoisy);
117  } catch (cms::Exception& e) {
118  // Do not stop processing if you check if a nonexistant pixel is noisy
119  edm::LogInfo("SiPixelGainCalibrationForHLTService")
120  << "Attempting to check if nonexistant pixel is noisy. Exception message: " << e.what();
121  isNoisy = false;
122  }
123  return isNoisy;
124 }
std::pair< float, float > getPedAndGain(const int &col, const int &row, const Range &range, const int &nCols, bool &isDeadColumn, bool &isNoisyColumn) const
edm::DetSet< PixelDigi >::const_iterator DigiIterator
void calibrate(uint32_t detID, DigiIterator b, DigiIterator e, float conversionFactor, float offset, int *electron) override
float getPedestal(const uint32_t &detID, const int &col, const int &row) override
bool isNoisy(const uint32_t &detID, const int &col, const int &row) override
const std::pair< const Range, const int > getRangeAndNCols(const uint32_t &detID) const
assert(be >=bs)
std::pair< ContainerIterator, ContainerIterator > Range
const uint16_t range(const Frame &aFrame)
float getPedestalByColumn(const uint32_t &detID, const int &col, const int &row, bool &isDeadColumn, bool &isNoisyColumn)
float getGainByColumn(const uint32_t &detID, const int &col, const int &row, bool &isDeadColumn, bool &isNoisyColumn)
void throwExepctionForBadRead(std::string payload, const uint32_t &detID, const int &col, const int &row, double value=-1) const
float getGain(const uint32_t &detID, const int &col, const int &row) override
char const * what() const noexceptoverride
Definition: Exception.cc:103
bool isDead(const uint32_t &detID, const int &col, const int &row) override
Log< level::Info, false > LogInfo
double b
Definition: hdecay.h:118
bool isDeadColumn(const uint32_t &detID, const int &col, const int &row) override
bool isNoisyColumn(const uint32_t &detID, const int &col, const int &row) override
int col
Definition: cuy.py:1009