CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Attributes | Private Attributes

SiStripDetVOff Class Reference

#include <SiStripDetVOff.h>

List of all members.

Public Types

typedef std::vector< int >
::const_iterator 
constVboolIterator
typedef std::vector< uint32_t >
::const_iterator 
constVoffIterator
typedef std::vector< uint32_t >
::iterator 
vOffIterator

Public Member Functions

void getDetIds (std::vector< uint32_t > &DetIds_) const
int getHVoffCounts () const
 Returns the total number of modules with HV off.
int getLVoffCounts () const
 Returns the total number of modules with LV off.
void getVoff (std::vector< uint32_t > &vOff_) const
 Needed by the copy constructor.
bool IsModuleHVOff (const uint32_t DetID) const
bool IsModuleLVOff (const uint32_t DetID) const
bool IsModuleVOff (const uint32_t DetID) const
 Returns true if either HV or LV are off.
bool operator== (const SiStripDetVOff &d) const
void printDebug (std::stringstream &ss) const
void printSummary (std::stringstream &ss) const
bool put (const uint32_t DetId, const int HVoff, const int LVoff)
 Insert information for a single detId.
bool put (std::vector< uint32_t > &DetId, std::vector< int > &HVoff, std::vector< int > &LVoff)
 Insert information for a vector of detIds.
void setBits (uint32_t &enDetId, const int HVoff, const int LVoff)
 Changes the bits in the stored value according to on/off voltages.
 SiStripDetVOff (const SiStripDetVOff &toCopy)
 SiStripDetVOff ()
 ~SiStripDetVOff ()

Static Public Attributes

static const unsigned int allOnMask = 0x03
static const short bitShift = 2
static const unsigned int eightBitMask = 0xFFFFFFFF
static const short HVmask = 0x2
static const unsigned int HVonMask = 0xFFFFFFFD
static const short LVmask = 0x1
static const unsigned int LVonMask = 0xFFFFFFFE

Private Attributes

std::vector< uint32_t > v_Voff

Detailed Description

This class stores the information if the HV or LV of a detId were off.
Internally it uses two bits to store the information about HV and LV. It saves a uint32_t containing the detId number and these additional bits, which are stored in the first position. This is realized by the put method using a bit shift so that the actual number written in the database is: detId|HV|LV.
The getDetIds method builds and returns a vector with detIds, removing the additional bits. It has three methods to extract the information:

The printSummary method uses SiStripDetSummary to print both LV off and HV off summaries. See description of the SiStripDetSummary class therein.
The printDebug method prints the status of HV and LV for all DetIds that have at least one of the two off.

Definition at line 27 of file SiStripDetVOff.h.


Member Typedef Documentation

typedef std::vector<int>::const_iterator SiStripDetVOff::constVboolIterator

Definition at line 33 of file SiStripDetVOff.h.

typedef std::vector<uint32_t>::const_iterator SiStripDetVOff::constVoffIterator

Definition at line 32 of file SiStripDetVOff.h.

typedef std::vector<uint32_t>::iterator SiStripDetVOff::vOffIterator

Definition at line 31 of file SiStripDetVOff.h.


Constructor & Destructor Documentation

SiStripDetVOff::SiStripDetVOff ( ) [inline]

Definition at line 44 of file SiStripDetVOff.h.

{}
SiStripDetVOff::~SiStripDetVOff ( ) [inline]

Definition at line 45 of file SiStripDetVOff.h.

{}
SiStripDetVOff::SiStripDetVOff ( const SiStripDetVOff toCopy) [inline]

Definition at line 46 of file SiStripDetVOff.h.

References getVoff(), and v_Voff.

{ toCopy.getVoff(v_Voff); }

Member Function Documentation

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

Definition at line 62 of file SiStripDetVOff.cc.

References bitShift, and v_Voff.

Referenced by SiStripQuality::add(), SiPixelQuality::add(), SiStripDetVOffBuilder::BuildDetVOffObj(), getHVoffCounts(), getLVoffCounts(), printDebug(), and printSummary().

{
  // returns vector of DetIds in map
  DetIds_.clear();
  // Extract the detId from the bitSet and fill the vector
  constVoffIterator bitSetIt = v_Voff.begin();
  constVoffIterator bitSetItEnd = v_Voff.end();
  for( ; bitSetIt != bitSetItEnd; ++bitSetIt ) {
    DetIds_.push_back( (*bitSetIt) >> bitShift );
  }
}
int SiStripDetVOff::getHVoffCounts ( ) const

Returns the total number of modules with HV off.

Definition at line 131 of file SiStripDetVOff.cc.

References SiStripDetSummary::add(), SiStripDetSummary::getCounts(), getDetIds(), and IsModuleHVOff().

{
  SiStripDetSummary summaryHV;
  std::vector<uint32_t> detIds;
  getDetIds(detIds);
  constVoffIterator it = detIds.begin();
  for( ; it!=detIds.end(); ++it ) {
    if( IsModuleHVOff(*it)) summaryHV.add(*it);
  }
  int totalCount = 0;
  std::map<unsigned int, SiStripDetSummary::Values> counts = summaryHV.getCounts();
  std::map<unsigned int, SiStripDetSummary::Values>::const_iterator mapIt = counts.begin();
  for( ; mapIt != counts.end(); ++mapIt ) {
    totalCount += mapIt->second.count;
  }
  return totalCount;
}
int SiStripDetVOff::getLVoffCounts ( ) const

Returns the total number of modules with LV off.

Definition at line 113 of file SiStripDetVOff.cc.

References SiStripDetSummary::add(), SiStripDetSummary::getCounts(), getDetIds(), and IsModuleLVOff().

{
  SiStripDetSummary summaryLV;
  std::vector<uint32_t> detIds;
  getDetIds(detIds);
  constVoffIterator it = detIds.begin();
  for( ; it!=detIds.end(); ++it ) {
    if( IsModuleLVOff(*it)) summaryLV.add(*it);
  }
  int totalCount = 0;
  std::map<unsigned int, SiStripDetSummary::Values> counts = summaryLV.getCounts();
  std::map<unsigned int, SiStripDetSummary::Values>::const_iterator mapIt = counts.begin();
  for( ; mapIt != counts.end(); ++mapIt ) {
    totalCount += mapIt->second.count;
  }
  return totalCount;
}
void SiStripDetVOff::getVoff ( std::vector< uint32_t > &  vOff_) const [inline]

Needed by the copy constructor.

Definition at line 49 of file SiStripDetVOff.h.

References v_Voff.

Referenced by SiStripDetVOff().

{ vOff_ = v_Voff; }
bool SiStripDetVOff::IsModuleHVOff ( const uint32_t  DetID) const

Definition at line 90 of file SiStripDetVOff.cc.

References bitShift, eightBitMask, HVmask, AlCaHLTBitMon_ParallelJobs::p, and v_Voff.

Referenced by getHVoffCounts(), printDebug(), and printSummary().

{
  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
  if( p != v_Voff.end() && (*p >> bitShift) == DetId && (*p & HVmask) ) return true;
  return false;
}
bool SiStripDetVOff::IsModuleLVOff ( const uint32_t  DetID) const

Definition at line 82 of file SiStripDetVOff.cc.

References bitShift, eightBitMask, LVmask, AlCaHLTBitMon_ParallelJobs::p, and v_Voff.

Referenced by getLVoffCounts(), printDebug(), and printSummary().

{
  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
  if( p != v_Voff.end() && (*p >> bitShift) == DetId && (*p & LVmask) ) return true;
  return false;
}
bool SiStripDetVOff::IsModuleVOff ( const uint32_t  DetID) const

Returns true if either HV or LV are off.

Definition at line 74 of file SiStripDetVOff.cc.

References bitShift, eightBitMask, AlCaHLTBitMon_ParallelJobs::p, and v_Voff.

{
  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
  if( p != v_Voff.end() && (*p >> bitShift) == DetId) return true;
  return false;
}
bool SiStripDetVOff::operator== ( const SiStripDetVOff d) const [inline]

Definition at line 57 of file SiStripDetVOff.h.

References v_Voff.

{ return d.v_Voff==v_Voff; } 
void SiStripDetVOff::printDebug ( std::stringstream &  ss) const

Definition at line 98 of file SiStripDetVOff.cc.

References getDetIds(), IsModuleHVOff(), and IsModuleLVOff().

{
  std::vector<uint32_t> detIds;
  getDetIds(detIds);
  constVoffIterator it = detIds.begin();
  ss << "DetId    \t HV \t LV" << std::endl;
  for( ; it!=detIds.end(); ++it ) {
    ss << *it << "\t";
    if( IsModuleHVOff(*it)) ss << "OFF\t";
    else ss << "ON \t";
    if( IsModuleLVOff(*it)) ss << "OFF" << std::endl;
    else ss << "ON" << std::endl;
  }
}
void SiStripDetVOff::printSummary ( std::stringstream &  ss) const

Definition at line 149 of file SiStripDetVOff.cc.

References SiStripDetSummary::add(), getDetIds(), IsModuleHVOff(), IsModuleLVOff(), and SiStripDetSummary::print().

{
  SiStripDetSummary summaryHV;
  SiStripDetSummary summaryLV;
  std::vector<uint32_t> detIds;
  getDetIds(detIds);
  constVoffIterator it = detIds.begin();
  for( ; it!=detIds.end(); ++it ) {
    if( IsModuleHVOff(*it)) summaryHV.add(*it);
    if( IsModuleLVOff(*it)) summaryLV.add(*it);
  }
  ss << "Summary of detectors with HV off:" << std::endl;
  summaryHV.print(ss, false);
  ss << "Summary of detectors with LV off:" << std::endl;
  summaryLV.print(ss, false);
}
bool SiStripDetVOff::put ( const uint32_t  DetId,
const int  HVoff,
const int  LVoff 
)

Insert information for a single detId.

Definition at line 21 of file SiStripDetVOff.cc.

References allOnMask, bitShift, eightBitMask, AlCaHLTBitMon_ParallelJobs::p, setBits(), and v_Voff.

Referenced by SiStripDetVOffFakeBuilder::analyze(), SiStripDetVOffBuilder::BuildDetVOffObj(), and put().

{
  // Shift the DetId number of 2 bits to the left to have it in the final format with
  // the two additional bits used for HV and LV.
  uint32_t enDetId = (DetId << bitShift) & eightBitMask;

  // Binary search to determine if the element is already in the vector
  vOffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
  if( p != v_Voff.end() && (*p >> bitShift) == DetId) {
    // Found a matching entry, insert the HV and LV information.
    setBits(*p, HVoff, LVoff);
    // Check if the detector has all on, in that case remove it from the list.
    if( (~(*p) & allOnMask) == allOnMask ) v_Voff.erase(p);
  }
  else {
    // Not found, insert a new entry only if it is not all on
    setBits(enDetId, HVoff, LVoff);
    if( (~enDetId & allOnMask) != allOnMask ) v_Voff.insert(p, enDetId);
  }
  return true;
}
bool SiStripDetVOff::put ( std::vector< uint32_t > &  DetId,
std::vector< int > &  HVoff,
std::vector< int > &  LVoff 
)

Insert information for a vector of detIds.

Definition at line 43 of file SiStripDetVOff.cc.

References gather_cfg::cout, and put().

{
  if( DetId.size() == HVoff.size() && DetId.size() == LVoff.size() ) {
    constVoffIterator detIdIt = DetId.begin();
    constVoffIterator detIdItEnd = DetId.end();
    constVboolIterator HVoffIt = HVoff.begin();
    constVboolIterator LVoffIt = LVoff.begin();
    for( ; detIdIt != detIdItEnd; ++detIdIt, ++HVoffIt, ++LVoffIt ) {
      put( *detIdIt, *HVoffIt, *LVoffIt );
    }
  }
  else {
    std::cout << "Error: inconsistent sizes of vectors:" << std::endl;
    std::cout << "DetId size = " << DetId.size() << ", HVoff size = " << HVoff.size() << ", LVoff size = " << LVoff.size() << std::endl;
    return false;
  }
  return true;
}
void SiStripDetVOff::setBits ( uint32_t &  enDetId,
const int  HVoff,
const int  LVoff 
)

Changes the bits in the stored value according to on/off voltages.

Definition at line 7 of file SiStripDetVOff.cc.

References HVmask, HVonMask, LVmask, and LVonMask.

Referenced by put().

{
  if( LVoff != -1 ) {
    // LVonMask has all bits equal to 1 apart from the last one.
    if( LVoff == 0 ) enDetId &= LVonMask;
    if( LVoff == 1 ) enDetId |= LVmask;
  }
  if( HVoff != -1 ) {
    // HVonMask has all bits equal to 1 apart from the next to last one.
    if( HVoff == 0 ) enDetId &= HVonMask;
    if( HVoff == 1 ) enDetId |= HVmask;
  }
}

Member Data Documentation

const unsigned int SiStripDetVOff::allOnMask = 0x03 [static]

Definition at line 40 of file SiStripDetVOff.h.

Referenced by put().

const short SiStripDetVOff::bitShift = 2 [static]

Definition at line 42 of file SiStripDetVOff.h.

Referenced by getDetIds(), IsModuleHVOff(), IsModuleLVOff(), IsModuleVOff(), and put().

const unsigned int SiStripDetVOff::eightBitMask = 0xFFFFFFFF [static]

Definition at line 41 of file SiStripDetVOff.h.

Referenced by IsModuleHVOff(), IsModuleLVOff(), IsModuleVOff(), and put().

const short SiStripDetVOff::HVmask = 0x2 [static]

Definition at line 38 of file SiStripDetVOff.h.

Referenced by IsModuleHVOff(), and setBits().

const unsigned int SiStripDetVOff::HVonMask = 0xFFFFFFFD [static]

Definition at line 39 of file SiStripDetVOff.h.

Referenced by setBits().

const short SiStripDetVOff::LVmask = 0x1 [static]

Definition at line 36 of file SiStripDetVOff.h.

Referenced by IsModuleLVOff(), and setBits().

const unsigned int SiStripDetVOff::LVonMask = 0xFFFFFFFE [static]

Definition at line 37 of file SiStripDetVOff.h.

Referenced by setBits().

std::vector<uint32_t> SiStripDetVOff::v_Voff [private]