CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Friends
SiStripDetVOff Class Reference

#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. More...
 
int getLVoffCounts () const
 Returns the total number of modules with LV off. More...
 
void getVoff (std::vector< uint32_t > &vOff_) const
 Needed by the copy constructor. More...
 
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. More...
 
bool operator== (const SiStripDetVOff &d) const
 
void printDebug (std::stringstream &ss, const TrackerTopology *) const
 
void printSummary (std::stringstream &ss, const TrackerTopology *) const
 
bool put (const uint32_t DetId, const int HVoff, const int LVoff)
 Insert information for a single detId. More...
 
bool put (std::vector< uint32_t > &DetId, std::vector< int > &HVoff, std::vector< int > &LVoff)
 Insert information for a vector of detIds. More...
 
void setBits (uint32_t &enDetId, const int HVoff, const int LVoff)
 Changes the bits in the stored value according to on/off voltages. More...
 
 SiStripDetVOff ()
 
 SiStripDetVOff (const SiStripDetVOff &toCopy)
 
 ~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 Member Functions

template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Private Attributes

std::vector< uint32_t > v_Voff
 

Friends

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

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 31 of file SiStripDetVOff.h.

Member Typedef Documentation

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

Definition at line 37 of file SiStripDetVOff.h.

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

Definition at line 36 of file SiStripDetVOff.h.

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

Definition at line 35 of file SiStripDetVOff.h.

Constructor & Destructor Documentation

SiStripDetVOff::SiStripDetVOff ( )
inline

Definition at line 48 of file SiStripDetVOff.h.

48 {}
SiStripDetVOff::~SiStripDetVOff ( )
inline

Definition at line 49 of file SiStripDetVOff.h.

49 {}
SiStripDetVOff::SiStripDetVOff ( const SiStripDetVOff toCopy)
inline

Definition at line 50 of file SiStripDetVOff.h.

References getVoff(), and v_Voff.

50 { toCopy.getVoff(v_Voff); }
std::vector< uint32_t > v_Voff
void getVoff(std::vector< uint32_t > &vOff_) const
Needed by the copy constructor.

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(), SiStripDetVOffReader::analyze(), SiStripDetVOffBuilder::BuildDetVOffObj(), getHVoffCounts(), getLVoffCounts(), operator==(), printDebug(), printSummary(), and SiStripDcsInfo::readStatus().

63 {
64  // returns vector of DetIds in map
65  DetIds_.clear();
66  // Extract the detId from the bitSet and fill the vector
67  constVoffIterator bitSetIt = v_Voff.begin();
68  constVoffIterator bitSetItEnd = v_Voff.end();
69  for( ; bitSetIt != bitSetItEnd; ++bitSetIt ) {
70  DetIds_.push_back( (*bitSetIt) >> bitShift );
71  }
72 }
static const short bitShift
std::vector< uint32_t > v_Voff
std::vector< uint32_t >::const_iterator constVoffIterator
int SiStripDetVOff::getHVoffCounts ( ) const

Returns the total number of modules with HV off.

Definition at line 121 of file SiStripDetVOff.cc.

References begin, end, getDetIds(), and IsModuleHVOff().

Referenced by FilterTrackerOn::filter(), and operator==().

122 {
123  std::vector<uint32_t> detIds;
124  getDetIds(detIds);
125  return std::count_if(std::begin(detIds), std::end(detIds),
126  [this] ( uint32_t id ) -> bool { return IsModuleHVOff(id); });
127 }
bool IsModuleHVOff(const uint32_t DetID) const
void getDetIds(std::vector< uint32_t > &DetIds_) const
#define end
Definition: vmac.h:39
#define begin
Definition: vmac.h:32
int SiStripDetVOff::getLVoffCounts ( ) const

Returns the total number of modules with LV off.

Definition at line 113 of file SiStripDetVOff.cc.

References begin, end, getDetIds(), and IsModuleLVOff().

Referenced by operator==().

114 {
115  std::vector<uint32_t> detIds;
116  getDetIds(detIds);
117  return std::count_if(std::begin(detIds), std::end(detIds),
118  [this] ( uint32_t id ) -> bool { return IsModuleLVOff(id); });
119 }
bool IsModuleLVOff(const uint32_t DetID) const
void getDetIds(std::vector< uint32_t > &DetIds_) const
#define end
Definition: vmac.h:39
#define begin
Definition: vmac.h:32
void SiStripDetVOff::getVoff ( std::vector< uint32_t > &  vOff_) const
inline

Needed by the copy constructor.

Definition at line 53 of file SiStripDetVOff.h.

References put(), and v_Voff.

Referenced by SiStripDetVOff().

53 { vOff_ = v_Voff; }
std::vector< uint32_t > v_Voff
bool SiStripDetVOff::IsModuleHVOff ( const uint32_t  DetID) const

Definition at line 90 of file SiStripDetVOff.cc.

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

Referenced by SiStripDetVOffReader::analyze(), getHVoffCounts(), operator==(), printDebug(), and printSummary().

91 {
92  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
93  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
94  if( p != v_Voff.end() && (*p >> bitShift) == DetId && (*p & HVmask) ) return true;
95  return false;
96 }
static const short bitShift
std::vector< uint32_t > v_Voff
static const unsigned int eightBitMask
static const short HVmask
Definition: DetId.h:18
std::vector< uint32_t >::const_iterator constVoffIterator
bool SiStripDetVOff::IsModuleLVOff ( const uint32_t  DetID) const

Definition at line 82 of file SiStripDetVOff.cc.

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

Referenced by SiStripDetVOffReader::analyze(), getLVoffCounts(), operator==(), printDebug(), and printSummary().

83 {
84  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
85  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
86  if( p != v_Voff.end() && (*p >> bitShift) == DetId && (*p & LVmask) ) return true;
87  return false;
88 }
static const short bitShift
std::vector< uint32_t > v_Voff
static const unsigned int eightBitMask
Definition: DetId.h:18
static const short LVmask
std::vector< uint32_t >::const_iterator constVoffIterator
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, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, AlCaHLTBitMon_ParallelJobs::p, and v_Voff.

Referenced by SiStripDetVOffReader::analyze(), and operator==().

75 {
76  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
77  constVoffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
78  if( p != v_Voff.end() && (*p >> bitShift) == DetId) return true;
79  return false;
80 }
static const short bitShift
std::vector< uint32_t > v_Voff
static const unsigned int eightBitMask
Definition: DetId.h:18
std::vector< uint32_t >::const_iterator constVoffIterator
bool SiStripDetVOff::operator== ( const SiStripDetVOff d) const
inline
void SiStripDetVOff::printDebug ( std::stringstream &  ss,
const TrackerTopology  
) const

Definition at line 98 of file SiStripDetVOff.cc.

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

Referenced by operator==().

99 {
100  std::vector<uint32_t> detIds;
101  getDetIds(detIds);
102  constVoffIterator it = detIds.begin();
103  ss << "DetId \t HV \t LV" << std::endl;
104  for( ; it!=detIds.end(); ++it ) {
105  ss << *it << "\t";
106  if( IsModuleHVOff(*it)) ss << "OFF\t";
107  else ss << "ON \t";
108  if( IsModuleLVOff(*it)) ss << "OFF" << std::endl;
109  else ss << "ON" << std::endl;
110  }
111 }
bool IsModuleHVOff(const uint32_t DetID) const
bool IsModuleLVOff(const uint32_t DetID) const
void getDetIds(std::vector< uint32_t > &DetIds_) const
std::vector< uint32_t >::const_iterator constVoffIterator
void SiStripDetVOff::printSummary ( std::stringstream &  ss,
const TrackerTopology trackerTopo 
) const

Definition at line 129 of file SiStripDetVOff.cc.

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

Referenced by operator==().

130 {
131  SiStripDetSummary summaryHV{trackerTopo};
132  SiStripDetSummary summaryLV{trackerTopo};
133  std::vector<uint32_t> detIds;
134  getDetIds(detIds);
135  constVoffIterator it = detIds.begin();
136  for( ; it!=detIds.end(); ++it ) {
137  if( IsModuleHVOff(*it)) summaryHV.add(*it);
138  if( IsModuleLVOff(*it)) summaryLV.add(*it);
139  }
140  ss << "Summary of detectors with HV off:" << std::endl;
141  summaryHV.print(ss, false);
142  ss << "Summary of detectors with LV off:" << std::endl;
143  summaryLV.print(ss, false);
144 }
bool IsModuleHVOff(const uint32_t DetID) const
bool IsModuleLVOff(const uint32_t DetID) const
void getDetIds(std::vector< uint32_t > &DetIds_) const
std::vector< uint32_t >::const_iterator constVoffIterator
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, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, AlCaHLTBitMon_ParallelJobs::p, setBits(), and v_Voff.

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

22 {
23  // Shift the DetId number of 2 bits to the left to have it in the final format with
24  // the two additional bits used for HV and LV.
25  uint32_t enDetId = (DetId << bitShift) & eightBitMask;
26 
27  // Binary search to determine if the element is already in the vector
28  vOffIterator p = std::lower_bound(v_Voff.begin(), v_Voff.end(), enDetId);
29  if( p != v_Voff.end() && (*p >> bitShift) == DetId) {
30  // Found a matching entry, insert the HV and LV information.
31  setBits(*p, HVoff, LVoff);
32  // Check if the detector has all on, in that case remove it from the list.
33  if( (~(*p) & allOnMask) == allOnMask ) v_Voff.erase(p);
34  }
35  else {
36  // Not found, insert a new entry only if it is not all on
37  setBits(enDetId, HVoff, LVoff);
38  if( (~enDetId & allOnMask) != allOnMask ) v_Voff.insert(p, enDetId);
39  }
40  return true;
41 }
static const short bitShift
static const unsigned int allOnMask
std::vector< uint32_t > v_Voff
void setBits(uint32_t &enDetId, const int HVoff, const int LVoff)
Changes the bits in the stored value according to on/off voltages.
static const unsigned int eightBitMask
Definition: DetId.h:18
std::vector< uint32_t >::iterator vOffIterator
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().

44 {
45  if( DetId.size() == HVoff.size() && DetId.size() == LVoff.size() ) {
46  constVoffIterator detIdIt = DetId.begin();
47  constVoffIterator detIdItEnd = DetId.end();
48  constVboolIterator HVoffIt = HVoff.begin();
49  constVboolIterator LVoffIt = LVoff.begin();
50  for( ; detIdIt != detIdItEnd; ++detIdIt, ++HVoffIt, ++LVoffIt ) {
51  put( *detIdIt, *HVoffIt, *LVoffIt );
52  }
53  }
54  else {
55  std::cout << "Error: inconsistent sizes of vectors:" << std::endl;
56  std::cout << "DetId size = " << DetId.size() << ", HVoff size = " << HVoff.size() << ", LVoff size = " << LVoff.size() << std::endl;
57  return false;
58  }
59  return true;
60 }
bool put(const uint32_t DetId, const int HVoff, const int LVoff)
Insert information for a single detId.
std::vector< int >::const_iterator constVboolIterator
Definition: DetId.h:18
std::vector< uint32_t >::const_iterator constVoffIterator
template<class Archive >
void SiStripDetVOff::serialize ( Archive &  ar,
const unsigned int  version 
)
private
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 operator==(), and put().

8 {
9  if( LVoff != -1 ) {
10  // LVonMask has all bits equal to 1 apart from the last one.
11  if( LVoff == 0 ) enDetId &= LVonMask;
12  if( LVoff == 1 ) enDetId |= LVmask;
13  }
14  if( HVoff != -1 ) {
15  // HVonMask has all bits equal to 1 apart from the next to last one.
16  if( HVoff == 0 ) enDetId &= HVonMask;
17  if( HVoff == 1 ) enDetId |= HVmask;
18  }
19 }
static const unsigned int LVonMask
static const short HVmask
static const short LVmask
static const unsigned int HVonMask

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Definition at line 87 of file SiStripDetVOff.h.

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

Definition at line 87 of file SiStripDetVOff.h.

Member Data Documentation

const unsigned int SiStripDetVOff::allOnMask = 0x03
static

Definition at line 44 of file SiStripDetVOff.h.

Referenced by put().

const short SiStripDetVOff::bitShift = 2
static

Definition at line 46 of file SiStripDetVOff.h.

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

const unsigned int SiStripDetVOff::eightBitMask = 0xFFFFFFFF
static

Definition at line 45 of file SiStripDetVOff.h.

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

const short SiStripDetVOff::HVmask = 0x2
static

Definition at line 42 of file SiStripDetVOff.h.

Referenced by IsModuleHVOff(), and setBits().

const unsigned int SiStripDetVOff::HVonMask = 0xFFFFFFFD
static

Definition at line 43 of file SiStripDetVOff.h.

Referenced by setBits().

const short SiStripDetVOff::LVmask = 0x1
static

Definition at line 40 of file SiStripDetVOff.h.

Referenced by IsModuleLVOff(), and setBits().

const unsigned int SiStripDetVOff::LVonMask = 0xFFFFFFFE
static

Definition at line 41 of file SiStripDetVOff.h.

Referenced by setBits().

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