CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends
SiPixelGainCalibration Class Reference

#include <CondFormats/SiPixelObjects/src/SiPixelGainCalibration.cc>

Classes

struct  DecodingStructure
 
struct  DetRegistry
 
class  StrictWeakOrdering
 

Public Types

typedef std::vector< char >::const_iterator ContainerIterator
 
typedef std::pair< ContainerIterator, ContainerIteratorRange
 
typedef std::vector< DetRegistryRegistry
 
typedef Registry::const_iterator RegistryIterator
 

Public Member Functions

void getDetIds (std::vector< uint32_t > &DetIds_) const
 
float getGain (const int &col, const int &row, const Range &range, const int &nCols, bool &isDead, bool &isNoisy) const
 
double getGainHigh () const
 
double getGainLow () const
 
const int getNCols (const uint32_t &detID) const
 
unsigned int getNumberOfRowsToAverageOver () const
 
float getPed (const int &col, const int &row, const Range &range, const int &nCols, bool &isDead, bool &isNoisy) const
 
double getPedHigh () const
 
double getPedLow () const
 
const Range getRange (const uint32_t &detID) const
 
const std::pair< const Range, const int > getRangeAndNCols (const uint32_t &detID) const
 
void initialize ()
 
bool put (const uint32_t &detID, Range input, const int &nCols)
 
void setData (float ped, float gain, std::vector< char > &vped, bool thisPixelIsDead=false, bool thisPixelIsNoisy=false)
 
void setDeadPixel (std::vector< char > &vped)
 
void setNoisyPixel (std::vector< char > &vped)
 
 SiPixelGainCalibration ()
 
 SiPixelGainCalibration (float minPed, float maxPed, float minGain, float maxGain)
 
 ~SiPixelGainCalibration ()
 

Private Member Functions

float decodeGain (unsigned int gain) const
 
float decodePed (unsigned int ped) const
 
float encodeGain (const float &gain)
 
float encodePed (const float &ped)
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Private Attributes

unsigned int deadFlag_
 
std::vector< DetRegistryindexes
 
float maxGain_
 
float maxPed_
 
float minGain_
 
float minPed_
 
unsigned int nBinsToUseForEncoding_
 
unsigned int noisyFlag_
 
unsigned int numberOfRowsToAverageOver_
 
std::vector< char > v_pedestals
 

Friends

class boost::serialization::access
 
template<typename CondSerializationT , typename Enabled >
struct cond::serialization::access
 

Detailed Description

Description: Gain calibration object for the Silicon Pixel detector. Store gain/pedestal information at pixel granularity

Implementation: <Notes on="" implementation>="">

Definition at line 29 of file SiPixelGainCalibration.h.

Member Typedef Documentation

typedef std::vector<char>::const_iterator SiPixelGainCalibration::ContainerIterator

Definition at line 50 of file SiPixelGainCalibration.h.

Definition at line 51 of file SiPixelGainCalibration.h.

Definition at line 52 of file SiPixelGainCalibration.h.

typedef Registry::const_iterator SiPixelGainCalibration::RegistryIterator

Definition at line 53 of file SiPixelGainCalibration.h.

Constructor & Destructor Documentation

SiPixelGainCalibration::SiPixelGainCalibration ( )

Definition at line 9 of file SiPixelGainCalibration.cc.

References deadFlag_, and Exception.

10  : minPed_(0.),
11  maxPed_(255.),
12  minGain_(0.),
13  maxGain_(255.),
16  deadFlag_(255),
17  noisyFlag_(254) {
18  if (deadFlag_ > 0xFF)
19  throw cms::Exception("GainCalibration Payload configuration error")
20  << "[SiPixelGainCalibration::SiPixelGainCalibration] Dead flag was set to " << deadFlag_
21  << ", and it must be set less than or equal to 255";
22 }
SiPixelGainCalibration::SiPixelGainCalibration ( float  minPed,
float  maxPed,
float  minGain,
float  maxGain 
)

Definition at line 24 of file SiPixelGainCalibration.cc.

References deadFlag_, and Exception.

25  : minPed_(minPed),
26  maxPed_(maxPed),
27  minGain_(minGain),
28  maxGain_(maxGain),
31  deadFlag_(255),
32  noisyFlag_(254) {
33  if (deadFlag_ > 0xFF)
34  throw cms::Exception("GainCalibration Payload configuration error")
35  << "[SiPixelGainCalibration::SiPixelGainCalibration] Dead flag was set to " << deadFlag_
36  << ", and it must be set less than or equal to 255";
37 }
SiPixelGainCalibration::~SiPixelGainCalibration ( )
inline

Definition at line 58 of file SiPixelGainCalibration.h.

58 {}

Member Function Documentation

float SiPixelGainCalibration::decodeGain ( unsigned int  gain) const
private

Definition at line 184 of file SiPixelGainCalibration.cc.

References dqmMemoryStats::float, maxGain_, minGain_, nBinsToUseForEncoding_, and common_cff::precision.

Referenced by getGain(), and setNoisyPixel().

184  {
185  double precision = (maxGain_ - minGain_) / static_cast<float>(nBinsToUseForEncoding_);
186  float decodedGain = (float)(gain * precision + minGain_);
187  return decodedGain;
188 }
float SiPixelGainCalibration::decodePed ( unsigned int  ped) const
private

Definition at line 178 of file SiPixelGainCalibration.cc.

References dqmMemoryStats::float, maxPed_, minPed_, nBinsToUseForEncoding_, and common_cff::precision.

Referenced by getPed(), and setNoisyPixel().

178  {
179  double precision = (maxPed_ - minPed_) / static_cast<float>(nBinsToUseForEncoding_);
180  float decodedPed = (float)(ped * precision + minPed_);
181  return decodedPed;
182 }
float SiPixelGainCalibration::encodeGain ( const float &  gain)
private

Definition at line 156 of file SiPixelGainCalibration.cc.

References Exception, dqmMemoryStats::float, maxGain_, minGain_, nBinsToUseForEncoding_, and common_cff::precision.

Referenced by setData(), and setNoisyPixel().

156  {
157  if (gain < minGain_ || gain > maxGain_) {
158  throw cms::Exception("InsertFailure") << "[SiPixelGainCalibration::encodeGain] Trying to encode gain (" << gain
159  << ") out of range [" << minGain_ << "," << maxGain_ << "]\n";
160  } else {
161  double precision = (maxGain_ - minGain_) / static_cast<float>(nBinsToUseForEncoding_);
162  float encodedGain = (float)((gain - minGain_) / precision);
163  return encodedGain;
164  }
165 }
float SiPixelGainCalibration::encodePed ( const float &  ped)
private

Definition at line 167 of file SiPixelGainCalibration.cc.

References Exception, dqmMemoryStats::float, maxPed_, minPed_, nBinsToUseForEncoding_, and common_cff::precision.

Referenced by setData(), and setNoisyPixel().

167  {
168  if (ped < minPed_ || ped > maxPed_) {
169  throw cms::Exception("InsertFailure") << "[SiPixelGainCalibration::encodePed] Trying to encode pedestal (" << ped
170  << ") out of range [" << minPed_ << "," << maxPed_ << "]\n";
171  } else {
172  double precision = (maxPed_ - minPed_) / static_cast<float>(nBinsToUseForEncoding_);
173  float encodedPed = (float)((ped - minPed_) / precision);
174  return encodedPed;
175  }
176 }
void SiPixelGainCalibration::getDetIds ( std::vector< uint32_t > &  DetIds_) const

Definition at line 91 of file SiPixelGainCalibration.cc.

References begin, end, indexes, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by initialize().

91  {
92  // returns vector of DetIds in map
95  for (SiPixelGainCalibration::RegistryIterator p = begin; p != end; ++p) {
96  DetIds_.push_back(p->detid);
97  }
98 }
std::vector< DetRegistry > indexes
#define end
Definition: vmac.h:39
Registry::const_iterator RegistryIterator
#define begin
Definition: vmac.h:32
float SiPixelGainCalibration::getGain ( const int &  col,
const int &  row,
const Range range,
const int &  nCols,
bool &  isDead,
bool &  isNoisy 
) const

Definition at line 141 of file SiPixelGainCalibration.cc.

References deadFlag_, decodeGain(), Exception, PedestalClient_cfi::gain, noisyFlag_, and hgcaltilesconstants::nRows.

Referenced by setNoisyPixel().

142  {
143  int nRows = (range.second - range.first) / 2 / nCols;
144  const unsigned int gain = *(range.first + (col * nRows + row) * 2) & 0xFF;
145  if (col >= nCols || row >= nRows) {
146  throw cms::Exception("CorruptedData")
147  << "[SiPixelGainCalibration::getPed] Pixel out of range: col " << col << " row " << row;
148  }
149  if (gain == deadFlag_)
150  isDead = true;
151  if (gain == noisyFlag_)
152  isNoisy = true;
153  return decodeGain(gain);
154 }
float decodeGain(unsigned int gain) const
col
Definition: cuy.py:1010
double SiPixelGainCalibration::getGainHigh ( ) const
inline

Definition at line 70 of file SiPixelGainCalibration.h.

References maxGain_.

double SiPixelGainCalibration::getGainLow ( ) const
inline

Definition at line 69 of file SiPixelGainCalibration.h.

References minGain_.

const int SiPixelGainCalibration::getNCols ( const uint32_t &  detID) const

Definition at line 59 of file SiPixelGainCalibration.cc.

References indexes, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by initialize().

59  {
60  // get number of columns of DetId
62  std::lower_bound(indexes.begin(), indexes.end(), DetId, SiPixelGainCalibration::StrictWeakOrdering());
63  if (p == indexes.end() || p->detid != DetId)
64  return 0;
65  else
66  return p->ncols;
67 }
std::vector< DetRegistry > indexes
Definition: DetId.h:17
Registry::const_iterator RegistryIterator
unsigned int SiPixelGainCalibration::getNumberOfRowsToAverageOver ( ) const
inline

Definition at line 68 of file SiPixelGainCalibration.h.

References numberOfRowsToAverageOver_.

float SiPixelGainCalibration::getPed ( const int &  col,
const int &  row,
const Range range,
const int &  nCols,
bool &  isDead,
bool &  isNoisy 
) const

Definition at line 126 of file SiPixelGainCalibration.cc.

References deadFlag_, decodePed(), Exception, noisyFlag_, and hgcaltilesconstants::nRows.

Referenced by setNoisyPixel().

127  {
128  int nRows = (range.second - range.first) / 2 / nCols;
129  const unsigned int ped = *(range.first + 1 + (col * nRows + row) * 2) & 0xFF;
130  if (col >= nCols || row >= nRows) {
131  throw cms::Exception("CorruptedData")
132  << "[SiPixelGainCalibration::getPed] Pixel out of range: col " << col << " row " << row;
133  }
134  if (ped == deadFlag_)
135  isDead = true;
136  if (ped == noisyFlag_)
137  isNoisy = true;
138  return decodePed(ped);
139 }
col
Definition: cuy.py:1010
float decodePed(unsigned int ped) const
double SiPixelGainCalibration::getPedHigh ( ) const
inline
double SiPixelGainCalibration::getPedLow ( ) const
inline

Definition at line 71 of file SiPixelGainCalibration.h.

References minPed_.

const SiPixelGainCalibration::Range SiPixelGainCalibration::getRange ( const uint32_t &  detID) const

Definition at line 69 of file SiPixelGainCalibration.cc.

References indexes, AlCaHLTBitMon_ParallelJobs::p, and v_pedestals.

Referenced by initialize().

69  {
70  // get SiPixelGainCalibration Range of DetId
71 
73  std::lower_bound(indexes.begin(), indexes.end(), DetId, SiPixelGainCalibration::StrictWeakOrdering());
74  if (p == indexes.end() || p->detid != DetId)
76  else
77  return SiPixelGainCalibration::Range(v_pedestals.begin() + p->ibegin, v_pedestals.begin() + p->iend);
78 }
std::vector< char > v_pedestals
std::vector< DetRegistry > indexes
Definition: DetId.h:17
Registry::const_iterator RegistryIterator
std::pair< ContainerIterator, ContainerIterator > Range
const std::pair< const SiPixelGainCalibration::Range, const int > SiPixelGainCalibration::getRangeAndNCols ( const uint32_t &  detID) const

Definition at line 80 of file SiPixelGainCalibration.cc.

References indexes, AlCaHLTBitMon_ParallelJobs::p, and v_pedestals.

Referenced by initialize().

81  {
83  std::lower_bound(indexes.begin(), indexes.end(), DetId, SiPixelGainCalibration::StrictWeakOrdering());
84  if (p == indexes.end() || p->detid != DetId)
85  return std::make_pair(SiPixelGainCalibration::Range(v_pedestals.end(), v_pedestals.end()), 0);
86  else
87  return std::make_pair(SiPixelGainCalibration::Range(v_pedestals.begin() + p->ibegin, v_pedestals.begin() + p->iend),
88  p->ncols);
89 }
std::vector< char > v_pedestals
std::vector< DetRegistry > indexes
Definition: DetId.h:17
Registry::const_iterator RegistryIterator
std::pair< ContainerIterator, ContainerIterator > Range
void SiPixelGainCalibration::initialize ( )
inline

Definition at line 60 of file SiPixelGainCalibration.h.

References getDetIds(), getNCols(), getRange(), getRangeAndNCols(), input, and put().

60 {}
bool SiPixelGainCalibration::put ( const uint32_t &  detID,
Range  input,
const int &  nCols 
)

Definition at line 39 of file SiPixelGainCalibration.cc.

References SiPixelGainCalibration::DetRegistry::detid, SiPixelGainCalibration::DetRegistry::ibegin, SiPixelGainCalibration::DetRegistry::iend, indexes, SiPixelGainCalibration::DetRegistry::ncols, AlCaHLTBitMon_ParallelJobs::p, sd, and v_pedestals.

Referenced by initialize(), and SiPixelFakeGainESSource::produce().

39  {
40  // put in SiPixelGainCalibration of DetId
41 
42  Registry::iterator p =
43  std::lower_bound(indexes.begin(), indexes.end(), DetId, SiPixelGainCalibration::StrictWeakOrdering());
44  if (p != indexes.end() && p->detid == DetId)
45  return false;
46 
47  size_t sd = input.second - input.first;
48  DetRegistry detregistry;
49  detregistry.detid = DetId;
50  detregistry.ncols = nCols;
51  detregistry.ibegin = v_pedestals.size();
52  detregistry.iend = v_pedestals.size() + sd;
53  indexes.insert(p, detregistry);
54 
55  v_pedestals.insert(v_pedestals.end(), input.first, input.second);
56  return true;
57 }
std::vector< char > v_pedestals
std::vector< DetRegistry > indexes
static std::string const input
Definition: EdmProvDump.cc:48
Definition: DetId.h:17
double sd
template<class Archive >
void SiPixelGainCalibration::serialize ( Archive &  ar,
const unsigned int  version 
)
private
void SiPixelGainCalibration::setData ( float  ped,
float  gain,
std::vector< char > &  vped,
bool  thisPixelIsDead = false,
bool  thisPixelIsNoisy = false 
)

Definition at line 100 of file SiPixelGainCalibration.cc.

References data, deadFlag_, encodeGain(), encodePed(), sistrip::extrainfo::gain_, and noisyFlag_.

Referenced by getPedHigh(), SiPixelFakeGainESSource::produce(), setDeadPixel(), and setNoisyPixel().

101  {
102  float theEncodedGain = 0;
103  float theEncodedPed = 0;
104  if (!isDeadPixel && !isNoisyPixel) {
105  theEncodedGain = encodeGain(gain);
106  theEncodedPed = encodePed(ped);
107  }
108 
109  unsigned int ped_ = (static_cast<unsigned int>(theEncodedPed)) & 0xFF;
110  unsigned int gain_ = (static_cast<unsigned int>(theEncodedGain)) & 0xFF;
111 
112  if (isDeadPixel) {
113  ped_ = deadFlag_ & 0xFF;
114  gain_ = deadFlag_ & 0xFF;
115  }
116  if (isNoisyPixel) {
117  ped_ = noisyFlag_ & 0xFF;
118  gain_ = noisyFlag_ & 0xFF;
119  }
120  unsigned int data = (ped_ << 8) | gain_;
121  vped.resize(vped.size() + 2);
122  // insert in vector of char
123  ::memcpy((void*)(&vped[vped.size() - 2]), (void*)(&data), 2);
124 }
float encodePed(const float &ped)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
static const char gain_[]
float encodeGain(const float &gain)
void SiPixelGainCalibration::setDeadPixel ( std::vector< char > &  vped)
inline

Definition at line 78 of file SiPixelGainCalibration.h.

References setData().

78 { setData(0, 0, /*dummy values, not used*/ vped, true, false); }
void setData(float ped, float gain, std::vector< char > &vped, bool thisPixelIsDead=false, bool thisPixelIsNoisy=false)
void SiPixelGainCalibration::setNoisyPixel ( std::vector< char > &  vped)
inline

Definition at line 79 of file SiPixelGainCalibration.h.

References cuy::col, decodeGain(), decodePed(), encodeGain(), encodePed(), getGain(), getPed(), FastTimerService_cff::range, and setData().

79 { setData(0, 0, /*dummy values, not used*/ vped, false, true); }
void setData(float ped, float gain, std::vector< char > &vped, bool thisPixelIsDead=false, bool thisPixelIsNoisy=false)

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Definition at line 101 of file SiPixelGainCalibration.h.

template<typename CondSerializationT , typename Enabled >
friend struct cond::serialization::access
friend

Definition at line 101 of file SiPixelGainCalibration.h.

Member Data Documentation

unsigned int SiPixelGainCalibration::deadFlag_
private

Definition at line 98 of file SiPixelGainCalibration.h.

Referenced by getGain(), getPed(), setData(), and SiPixelGainCalibration().

std::vector<DetRegistry> SiPixelGainCalibration::indexes
private

Definition at line 91 of file SiPixelGainCalibration.h.

Referenced by getDetIds(), getNCols(), getRange(), getRangeAndNCols(), and put().

float SiPixelGainCalibration::maxGain_
private

Definition at line 92 of file SiPixelGainCalibration.h.

Referenced by decodeGain(), encodeGain(), and getGainHigh().

float SiPixelGainCalibration::maxPed_
private

Definition at line 92 of file SiPixelGainCalibration.h.

Referenced by decodePed(), encodePed(), and getPedHigh().

float SiPixelGainCalibration::minGain_
private

Definition at line 92 of file SiPixelGainCalibration.h.

Referenced by decodeGain(), encodeGain(), and getGainLow().

float SiPixelGainCalibration::minPed_
private

Definition at line 92 of file SiPixelGainCalibration.h.

Referenced by decodePed(), encodePed(), and getPedLow().

unsigned int SiPixelGainCalibration::nBinsToUseForEncoding_
private

Definition at line 97 of file SiPixelGainCalibration.h.

Referenced by decodeGain(), decodePed(), encodeGain(), and encodePed().

unsigned int SiPixelGainCalibration::noisyFlag_
private

Definition at line 99 of file SiPixelGainCalibration.h.

Referenced by getGain(), getPed(), and setData().

unsigned int SiPixelGainCalibration::numberOfRowsToAverageOver_
private

Definition at line 95 of file SiPixelGainCalibration.h.

Referenced by getNumberOfRowsToAverageOver().

std::vector<char> SiPixelGainCalibration::v_pedestals
private

Definition at line 90 of file SiPixelGainCalibration.h.

Referenced by getRange(), getRangeAndNCols(), and put().