#include <SiStripDetVOff.h>
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 |
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.
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.
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] |
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(), 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, L1TEmulatorMonitor_cff::p, and v_Voff.
Referenced by getHVoffCounts(), printDebug(), and printSummary().
bool SiStripDetVOff::IsModuleLVOff | ( | const uint32_t | DetID | ) | const |
Definition at line 82 of file SiStripDetVOff.cc.
References bitShift, eightBitMask, LVmask, L1TEmulatorMonitor_cff::p, and v_Voff.
Referenced by getLVoffCounts(), printDebug(), and printSummary().
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, L1TEmulatorMonitor_cff::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] |
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, L1TEmulatorMonitor_cff::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; } }
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] |
Definition at line 81 of file SiStripDetVOff.h.
Referenced by getDetIds(), getVoff(), IsModuleHVOff(), IsModuleLVOff(), IsModuleVOff(), operator==(), put(), and SiStripDetVOff().