File indexing completed on 2024-04-06 11:59:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h"
0018
0019 void SiPixelGainCalibrationServiceBase::calibrate(
0020 uint32_t detID, DigiIterator b, DigiIterator e, float conversionFactor, float offset, int* electron) {
0021 int i = 0;
0022 for (DigiIterator di = b; di != e; ++di) {
0023 int row = di->row();
0024 int col = di->column();
0025
0026 if (isDead(detID, col, row) || isNoisy(detID, col, row))
0027 electron[i++] = 0;
0028 else {
0029 float DBgain = getGain(detID, col, row);
0030 float DBpedestal = getPedestal(detID, col, row) * DBgain;
0031 float vcal = float(di->adc()) * DBgain - DBpedestal;
0032 electron[i++] = int(vcal * conversionFactor + offset);
0033 }
0034 }
0035 assert(i == (e - b));
0036 }
0037
0038 float SiPixelGainCalibrationService::getPedestal(const uint32_t& detID, const int& col, const int& row) {
0039 bool isDead = false;
0040 bool isNoisy = false;
0041 float pedestalValue = this->getPedestalByPixel(detID, col, row, isDead, isNoisy);
0042 if (isDead || isNoisy) {
0043 this->throwExepctionForBadRead("FullCalibration getPedestal()", detID, col, row, pedestalValue);
0044 return 0.0;
0045 }
0046 return pedestalValue;
0047 }
0048
0049 float SiPixelGainCalibrationService::getGain(const uint32_t& detID, const int& col, const int& row) {
0050 bool isDead = false;
0051 bool isNoisy = false;
0052 float gainValue = this->getGainByColumn(detID, col, row, isDead, isNoisy);
0053 if (isDead || isNoisy) {
0054 this->throwExepctionForBadRead("FullCalibration getGain()", detID, col, row, gainValue);
0055 return 0.0;
0056 }
0057 return gainValue;
0058 }
0059
0060 bool SiPixelGainCalibrationService::isDead(const uint32_t& detID, const int& col, const int& row) {
0061 bool isDead = false;
0062 bool isNoisy = false;
0063 try {
0064 this->getPedestalByPixel(detID, col, row, isDead, isNoisy);
0065 } catch (cms::Exception& e) {
0066
0067 edm::LogInfo("SiPixelGainCalibrationService")
0068 << "Attempting to check if nonexistant pixel is dead. Exception message: " << e.what();
0069 isDead = false;
0070 }
0071 return isDead;
0072 }
0073
0074 bool SiPixelGainCalibrationService::isNoisy(const uint32_t& detID, const int& col, const int& row) {
0075 bool isDead = false;
0076 bool isNoisy = false;
0077 try {
0078 this->getPedestalByPixel(detID, col, row, isDead, isNoisy);
0079 } catch (cms::Exception& e) {
0080
0081 edm::LogInfo("SiPixelGainCalibrationService")
0082 << "Attempting to check if nonexistant pixel is noisy. Exception message: " << e.what();
0083 isNoisy = false;
0084 }
0085 return isNoisy;
0086 }
0087
0088 bool SiPixelGainCalibrationService::isDeadColumn(const uint32_t& detID, const int& col, const int& row) {
0089 edm::LogError("SiPixelGainCalibrationService")
0090 << "You attempted to check if an entire column was dead with a payload that stores information at pixel "
0091 "granularity. Please check by pixel. THANKS!";
0092 return false;
0093 }
0094
0095 bool SiPixelGainCalibrationService::isNoisyColumn(const uint32_t& detID, const int& col, const int& row) {
0096 edm::LogError("SiPixelGainCalibrationService")
0097 << "You attempted to check if an entire column was noisy with a payload that stores information at pixel "
0098 "granularity. Please check by pixel. THANKS!";
0099 return false;
0100 }