CMS 3D CMS Logo

Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes

SiPixelGainCalibrationOffline Class Reference

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

List of all members.

Classes

struct  DecodingStructure
struct  DetRegistry
class  StrictWeakOrdering

Public Types

typedef std::vector< char >
::const_iterator 
ContainerIterator
typedef std::pair
< ContainerIterator,
ContainerIterator
Range
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 &isDeadColumn, bool &isNoisyColumn) 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
bool put (const uint32_t &detID, Range input, const int &nCols)
void setDataGain (float gain, const int &nRows, std::vector< char > &vped, bool thisColumnIsDead=false, bool thisColumnIsNoisy=false)
void setDataPedestal (float pedestal, std::vector< char > &vped, bool thisPixelIsDead=false, bool thisPixelIsNoisy=false)
void setDeadColumn (const int &nRows, std::vector< char > &vped)
void setDeadPixel (std::vector< char > &vped)
void setNoisyColumn (const int &nRows, std::vector< char > &vped)
void setNoisyPixel (std::vector< char > &vped)
 SiPixelGainCalibrationOffline (float minPed, float maxPed, float minGain, float maxGain)
 SiPixelGainCalibrationOffline ()
virtual ~SiPixelGainCalibrationOffline ()

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)

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

Detailed Description

Description: Gain calibration object for the Silicon Pixel detector. Stores pedestal at pixel granularity, gain at column granularity.

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

Definition at line 27 of file SiPixelGainCalibrationOffline.h.


Member Typedef Documentation

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

Definition at line 47 of file SiPixelGainCalibrationOffline.h.

Definition at line 48 of file SiPixelGainCalibrationOffline.h.

Definition at line 49 of file SiPixelGainCalibrationOffline.h.

typedef Registry::const_iterator SiPixelGainCalibrationOffline::RegistryIterator

Definition at line 50 of file SiPixelGainCalibrationOffline.h.


Constructor & Destructor Documentation

SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline ( )

Definition at line 9 of file SiPixelGainCalibrationOffline.cc.

References deadFlag_, Exception, and noisyFlag_.

                                                             :
  minPed_(0.),
  maxPed_(255.),
  minGain_(0.),
  maxGain_(255.),
  numberOfRowsToAverageOver_(80),
  nBinsToUseForEncoding_(253),
  deadFlag_(255),
  noisyFlag_(254)
{
   if (deadFlag_ > 0xFF)
      throw cms::Exception("GainCalibration Payload configuration error")
         << "[SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline] Dead flag was set to " << deadFlag_ << ", and it must be set less than or equal to 255";
   if (noisyFlag_ > 0xFF)
      throw cms::Exception("GainCalibration Payload configuration error")
         << "[SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline] Noisy flag was set to " << noisyFlag_ << ", and it must be set less than or equal to 255";
}
SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline ( float  minPed,
float  maxPed,
float  minGain,
float  maxGain 
)

Definition at line 27 of file SiPixelGainCalibrationOffline.cc.

References deadFlag_, Exception, and noisyFlag_.

                                                                                                                     :
  minPed_(minPed),
  maxPed_(maxPed),
  minGain_(minGain),
  maxGain_(maxGain),
  numberOfRowsToAverageOver_(80),
  nBinsToUseForEncoding_(253),
  deadFlag_(255),
  noisyFlag_(254)
{
   if (deadFlag_ > 0xFF)
      throw cms::Exception("GainCalibration Payload configuration error")
         << "[SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline] Dead flag was set to " << deadFlag_ << ", and it must be set less than or equal to 255";
   if (noisyFlag_ > 0xFF)
      throw cms::Exception("GainCalibration Payload configuration error")
         << "[SiPixelGainCalibrationOffline::SiPixelGainCalibrationOffline] Noisy flag was set to " << noisyFlag_ << ", and it must be set less than or equal to 255";
}
virtual SiPixelGainCalibrationOffline::~SiPixelGainCalibrationOffline ( ) [inline, virtual]

Definition at line 55 of file SiPixelGainCalibrationOffline.h.

{};

Member Function Documentation

float SiPixelGainCalibrationOffline::decodeGain ( unsigned int  gain) const [private]

Definition at line 230 of file SiPixelGainCalibrationOffline.cc.

References maxGain_, minGain_, and nBinsToUseForEncoding_.

Referenced by getGain().

                                                                         {

  double precision = (maxGain_-minGain_)/static_cast<float>(nBinsToUseForEncoding_);
  float decodedGain = (float)(gain*precision + minGain_);
  return decodedGain;
}
float SiPixelGainCalibrationOffline::decodePed ( unsigned int  ped) const [private]

Definition at line 222 of file SiPixelGainCalibrationOffline.cc.

References maxPed_, minPed_, and nBinsToUseForEncoding_.

Referenced by getPed().

                                                                       {

  double precision = (maxPed_-minPed_)/static_cast<float>(nBinsToUseForEncoding_);
  float decodedPed = (float)(ped*precision + minPed_);
  return decodedPed;

}
float SiPixelGainCalibrationOffline::encodeGain ( const float &  gain) [private]

Definition at line 196 of file SiPixelGainCalibrationOffline.cc.

References Exception, maxGain_, minGain_, and nBinsToUseForEncoding_.

Referenced by setDataGain().

                                                                   {
  
  if(gain < minGain_ || gain > maxGain_ ) {
    throw cms::Exception("InsertFailure")
      << "[SiPixelGainCalibrationOffline::encodeGain] Trying to encode gain (" << gain << ") out of range [" << minGain_ << "," << maxGain_ << "]\n";
  } else {
    double precision   = (maxGain_-minGain_)/static_cast<float>(nBinsToUseForEncoding_);
    float  encodedGain = (float)((gain-minGain_)/precision);
    return encodedGain;
  }

}
float SiPixelGainCalibrationOffline::encodePed ( const float &  ped) [private]

Definition at line 209 of file SiPixelGainCalibrationOffline.cc.

References Exception, maxPed_, minPed_, and nBinsToUseForEncoding_.

Referenced by setDataPedestal().

                                                                 {

  if(ped < minPed_ || ped > maxPed_ ) {
    throw cms::Exception("InsertFailure")
      << "[SiPixelGainCalibrationOffline::encodePed] Trying to encode pedestal (" << ped << ") out of range [" << minPed_ << "," << maxPed_ << "]\n";
  } else {
    double precision   = (maxPed_-minPed_)/static_cast<float>(nBinsToUseForEncoding_);
    float  encodedPed = (float)((ped-minPed_)/precision);
    return encodedPed;
  }

}
void SiPixelGainCalibrationOffline::getDetIds ( std::vector< uint32_t > &  DetIds_) const

Definition at line 93 of file SiPixelGainCalibrationOffline.cc.

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

                                                                                {
  // returns vector of DetIds in map
  SiPixelGainCalibrationOffline::RegistryIterator begin = indexes.begin();
  SiPixelGainCalibrationOffline::RegistryIterator end   = indexes.end();
  for (SiPixelGainCalibrationOffline::RegistryIterator p=begin; p != end; ++p) {
    DetIds_.push_back(p->detid);
  }
}
float SiPixelGainCalibrationOffline::getGain ( const int &  col,
const int &  row,
const Range range,
const int &  nCols,
bool &  isDeadColumn,
bool &  isNoisyColumn 
) const

Definition at line 173 of file SiPixelGainCalibrationOffline.cc.

References SiPixelGainCalibrationOffline::DecodingStructure::datum, deadFlag_, decodeGain(), Exception, noisyFlag_, numberOfRowsToAverageOver_, and asciidump::s.

                                                                                                                                                                {

  unsigned int lengthOfColumnData = (range.second-range.first)/nCols;
  //determine what row averaged range we are in (i.e. ROC 1 or ROC 2)
  unsigned int lengthOfAveragedDataInEachColumn = numberOfRowsToAverageOver_ + 1;
  unsigned int numberOfAveragedDataBlocksToSkip = row / numberOfRowsToAverageOver_;

  // gain average is stored in the last location of current row averaged column data block
  const DecodingStructure & s = (const DecodingStructure & ) *(range.first+(col)*(lengthOfColumnData) + ( (numberOfAveragedDataBlocksToSkip+1) * lengthOfAveragedDataInEachColumn) - 1);

  if ((s.datum & 0xFF) == deadFlag_)
     isDeadColumn = true;
  if ((s.datum & 0xFF) == noisyFlag_)
     isNoisyColumn = true;

  int maxRow = lengthOfColumnData - (lengthOfColumnData % numberOfRowsToAverageOver_) - 1;
  if (col >= nCols || row > maxRow){
    throw cms::Exception("CorruptedData")
      << "[SiPixelGainCalibrationOffline::getPed] Pixel out of range: col " << col;
  }  
  return decodeGain(s.datum & 0xFF);
}
double SiPixelGainCalibrationOffline::getGainHigh ( ) const [inline]

Definition at line 69 of file SiPixelGainCalibrationOffline.h.

References maxGain_.

{ return maxGain_; }
double SiPixelGainCalibrationOffline::getGainLow ( ) const [inline]

Definition at line 68 of file SiPixelGainCalibrationOffline.h.

References minGain_.

{ return minGain_; }
const int SiPixelGainCalibrationOffline::getNCols ( const uint32_t &  detID) const

Definition at line 64 of file SiPixelGainCalibrationOffline.cc.

References indexes, and L1TEmulatorMonitor_cff::p.

                                                                             {
  // get number of columns of DetId
  RegistryIterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiPixelGainCalibrationOffline::StrictWeakOrdering());
  if (p==indexes.end()|| p->detid!=DetId) 
    return 0;
  else
    return p->ncols; 
}
unsigned int SiPixelGainCalibrationOffline::getNumberOfRowsToAverageOver ( ) const [inline]

Definition at line 67 of file SiPixelGainCalibrationOffline.h.

References numberOfRowsToAverageOver_.

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

Definition at line 149 of file SiPixelGainCalibrationOffline.cc.

References SiPixelGainCalibrationOffline::DecodingStructure::datum, deadFlag_, decodePed(), Exception, noisyFlag_, numberOfRowsToAverageOver_, and asciidump::s.

                                                                                                                                                   {

  unsigned int lengthOfColumnData = (range.second-range.first)/nCols;
  //determine what row averaged range we are in (i.e. ROC 1 or ROC 2)
  unsigned int lengthOfAveragedDataInEachColumn = numberOfRowsToAverageOver_ + 1;
  unsigned int numberOfAveragedDataBlocksToSkip = row / numberOfRowsToAverageOver_;
  unsigned int offSetInCorrectDataBlock         = row % numberOfRowsToAverageOver_;

  const DecodingStructure & s = (const DecodingStructure & ) *(range.first + col*(lengthOfColumnData) + (numberOfAveragedDataBlocksToSkip * lengthOfAveragedDataInEachColumn) + offSetInCorrectDataBlock);

  int maxRow = lengthOfColumnData - (lengthOfColumnData % numberOfRowsToAverageOver_) - 1;
  if (col >= nCols || row > maxRow){
    throw cms::Exception("CorruptedData")
      << "[SiPixelGainCalibrationOffline::getPed] Pixel out of range: col " << col << " row " << row;
  }  

  if ((s.datum & 0xFF) == deadFlag_)
     isDead = true;
  if ((s.datum & 0xFF) == noisyFlag_)
     isNoisy = true;

  return decodePed(s.datum & 0xFF);  
}
double SiPixelGainCalibrationOffline::getPedHigh ( ) const [inline]

Definition at line 71 of file SiPixelGainCalibrationOffline.h.

References maxPed_.

{ return maxPed_; }
double SiPixelGainCalibrationOffline::getPedLow ( ) const [inline]

Definition at line 70 of file SiPixelGainCalibrationOffline.h.

References minPed_.

{ return minPed_; }
const SiPixelGainCalibrationOffline::Range SiPixelGainCalibrationOffline::getRange ( const uint32_t &  detID) const

Definition at line 73 of file SiPixelGainCalibrationOffline.cc.

References indexes, L1TEmulatorMonitor_cff::p, and v_pedestals.

                                                                                                            {
  // get SiPixelGainCalibrationOffline Range of DetId
  
  RegistryIterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiPixelGainCalibrationOffline::StrictWeakOrdering());
  if (p==indexes.end()|| p->detid!=DetId) 
    return SiPixelGainCalibrationOffline::Range(v_pedestals.end(),v_pedestals.end()); 
  else 
    return SiPixelGainCalibrationOffline::Range(v_pedestals.begin()+p->ibegin,v_pedestals.begin()+p->iend);
}
const std::pair< const SiPixelGainCalibrationOffline::Range, const int > SiPixelGainCalibrationOffline::getRangeAndNCols ( const uint32_t &  detID) const

Definition at line 84 of file SiPixelGainCalibrationOffline.cc.

References indexes, L1TEmulatorMonitor_cff::p, and v_pedestals.

                                                                           {
  RegistryIterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiPixelGainCalibrationOffline::StrictWeakOrdering());
  if (p==indexes.end()|| p->detid!=DetId) 
    return std::make_pair(SiPixelGainCalibrationOffline::Range(v_pedestals.end(),v_pedestals.end()), 0); 
  else 
    return std::make_pair(SiPixelGainCalibrationOffline::Range(v_pedestals.begin()+p->ibegin,v_pedestals.begin()+p->iend), p->ncols);
}
bool SiPixelGainCalibrationOffline::put ( const uint32_t &  detID,
Range  input,
const int &  nCols 
)

Definition at line 45 of file SiPixelGainCalibrationOffline.cc.

References SiPixelGainCalibrationOffline::DetRegistry::detid, SiPixelGainCalibrationOffline::DetRegistry::ibegin, SiPixelGainCalibrationOffline::DetRegistry::iend, indexes, SiPixelGainCalibrationOffline::DetRegistry::ncols, L1TEmulatorMonitor_cff::p, and v_pedestals.

                                                                                            {
  // put in SiPixelGainCalibrationOffline of DetId

  Registry::iterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiPixelGainCalibrationOffline::StrictWeakOrdering());
  if (p!=indexes.end() && p->detid==DetId)
    return false;
  
  size_t sd= input.second-input.first;
  DetRegistry detregistry;
  detregistry.detid=DetId;
  detregistry.ncols=nCols;
  detregistry.ibegin=v_pedestals.size();
  detregistry.iend=v_pedestals.size()+sd;
  indexes.insert(p,detregistry);

  v_pedestals.insert(v_pedestals.end(),input.first,input.second);
  return true;
}
void SiPixelGainCalibrationOffline::setDataGain ( float  gain,
const int &  nRows,
std::vector< char > &  vped,
bool  thisColumnIsDead = false,
bool  thisColumnIsNoisy = false 
)

Definition at line 102 of file SiPixelGainCalibrationOffline.cc.

References deadFlag_, encodeGain(), Exception, sistrip::extrainfo::gain_, noisyFlag_, and numberOfRowsToAverageOver_.

Referenced by setDeadColumn(), and setNoisyColumn().

                                                                                                                                                 {
  
  float theEncodedGain=0;
  if(!thisColumnIsDead && !thisColumnIsNoisy)
    theEncodedGain = encodeGain(gain);

  unsigned int gain_  = (static_cast<unsigned int>(theEncodedGain)) & 0xFF;

  // if this whole column is dead, set a char based dead flag in the blob.
  if (thisColumnIsDead)
     gain_ = deadFlag_ & 0xFF;
  if (thisColumnIsNoisy)
     gain_ = noisyFlag_ & 0xFF;

  vped.resize(vped.size()+1);
  //check to make sure the column is being placed in the right place in the blob
  if (nRows != (int)numberOfRowsToAverageOver_)
  {
    throw cms::Exception("GainCalibration Payload configuration error")
      << "[SiPixelGainCalibrationOffline::setDataGain] You are setting a gain averaged over nRows = " << nRows << " where this payload is set ONLY to average over " << numberOfRowsToAverageOver_ << " nRows";
  }

  if (vped.size() % (nRows + 1) != 0) 
  {
    throw cms::Exception("FillError")
      << "[SiPixelGainCalibrationOffline::setDataGain] Column gain average (OR SETTING AN ENTIRE COLUMN DEAD/NOISY) must be filled after the pedestal for each row has been added. An additional source of this error would be setting a pixel dead/noisy AND setting its pedestal";
  }  
  // insert in vector of char
  ::memcpy((void*)(&vped[vped.size()-1]),(void*)(&gain_),1);
}
void SiPixelGainCalibrationOffline::setDataPedestal ( float  pedestal,
std::vector< char > &  vped,
bool  thisPixelIsDead = false,
bool  thisPixelIsNoisy = false 
)

Definition at line 133 of file SiPixelGainCalibrationOffline.cc.

References deadFlag_, encodePed(), and noisyFlag_.

Referenced by setDeadPixel(), and setNoisyPixel().

                                                                                                                                      {

  float theEncodedPedestal  = encodePed(pedestal);

  unsigned int ped_  = (static_cast<unsigned int>(theEncodedPedestal)) & 0xFF;

  if (thisPixelIsDead)
     ped_ = deadFlag_ & 0xFF;
  if (thisPixelIsNoisy)
     ped_ = noisyFlag_ & 0xFF;

  vped.resize(vped.size()+1);
  // insert in vector of char
  ::memcpy((void*)(&vped[vped.size()-1]),(void*)(&ped_),1);
}
void SiPixelGainCalibrationOffline::setDeadColumn ( const int &  nRows,
std::vector< char > &  vped 
) [inline]

Definition at line 75 of file SiPixelGainCalibrationOffline.h.

References setDataGain().

{ setDataGain(0 /*dummy value, not used*/, nRows, vped,  true ); }
void SiPixelGainCalibrationOffline::setDeadPixel ( std::vector< char > &  vped) [inline]

Definition at line 74 of file SiPixelGainCalibrationOffline.h.

References setDataPedestal().

{ setDataPedestal(0 /*dummy value, not used*/,    vped,  true ); }
void SiPixelGainCalibrationOffline::setNoisyColumn ( const int &  nRows,
std::vector< char > &  vped 
) [inline]

Definition at line 79 of file SiPixelGainCalibrationOffline.h.

References setDataGain().

{ setDataGain(0 /*dummy value, not used*/, nRows, vped,  false, true ); }
void SiPixelGainCalibrationOffline::setNoisyPixel ( std::vector< char > &  vped) [inline]

Definition at line 78 of file SiPixelGainCalibrationOffline.h.

References setDataPedestal().

{ setDataPedestal(0 /*dummy value, not used*/,    vped,  false, true ); }

Member Data Documentation

Definition at line 94 of file SiPixelGainCalibrationOffline.h.

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

Definition at line 95 of file SiPixelGainCalibrationOffline.h.

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

Definition at line 95 of file SiPixelGainCalibrationOffline.h.

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

Definition at line 95 of file SiPixelGainCalibrationOffline.h.

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

Definition at line 95 of file SiPixelGainCalibrationOffline.h.

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

Definition at line 98 of file SiPixelGainCalibrationOffline.h.

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

std::vector<char> SiPixelGainCalibrationOffline::v_pedestals [private]

Definition at line 93 of file SiPixelGainCalibrationOffline.h.

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