00001 // 00002 // This class keeps the possible non-standard 00003 // status a ROC can have. 00004 // 00005 // 00006 // 00007 00008 #include <stdint.h> 00009 #include <set> 00010 #include <iostream> 00011 #include <cassert> 00012 #include <cstdlib> 00013 #include "CalibFormats/SiPixelObjects/interface/PixelROCStatus.h" 00014 00015 using namespace std; 00016 using namespace pos; 00017 00018 //====================================================================================== 00019 PixelROCStatus::PixelROCStatus(): 00020 bits_(0) 00021 {} 00022 00023 00024 //====================================================================================== 00025 PixelROCStatus::PixelROCStatus(const std::set<ROCstatus>& stat){ 00026 00027 std::set<ROCstatus>::const_iterator i=stat.begin(); 00028 00029 for(;i!=stat.end();++i){ 00030 set(*i); 00031 } 00032 00033 } 00034 00035 //====================================================================================== 00036 PixelROCStatus::~PixelROCStatus(){} 00037 00038 //====================================================================================== 00039 void PixelROCStatus::set(ROCstatus stat){ 00040 reset() ; 00041 bits_=bits_|(1<<stat); 00042 } 00043 00044 //====================================================================================== 00045 void PixelROCStatus::clear(ROCstatus stat){ 00046 bits_=bits_&(0<<stat); 00047 } 00048 00049 //====================================================================================== 00050 // Added by Dario (March 4th 2008) 00051 void PixelROCStatus::reset(void){ 00052 bits_=0; 00053 } 00054 00055 //====================================================================================== 00056 void PixelROCStatus::set(ROCstatus stat, bool mode){ 00057 reset() ; 00058 if (mode) { 00059 set(stat); 00060 } 00061 else{ 00062 clear(stat); 00063 } 00064 } 00065 00066 //====================================================================================== 00067 bool PixelROCStatus::get(ROCstatus stat) const{ 00068 return bits_&(1<<stat); 00069 } 00070 00071 //====================================================================================== 00072 string PixelROCStatus::statusName(ROCstatus stat) const{ 00073 if (stat==off) return "off"; 00074 if (stat==noHits) return "noHits"; 00075 if (stat==noInit) return "noInit"; 00076 if (stat==noAnalogSignal) return "noAnalogSignal"; 00077 assert(0); 00078 return ""; 00079 } 00080 00081 //====================================================================================== 00082 // modified by MR on 11-01-2008 15:06:28 00083 string PixelROCStatus::statusName() const { 00084 string result = "" ; 00085 for (ROCstatus istat=off; istat!=nStatus; istat=ROCstatus(istat+1)) 00086 { 00087 if (get(istat)) 00088 { 00089 result += statusName(istat) ; 00090 } 00091 } 00092 return result ; 00093 } 00094 00095 //====================================================================================== 00096 void PixelROCStatus::set(const string& statName){ 00097 00098 if(statName != "") 00099 { 00100 for (ROCstatus istat=off; istat!=nStatus; istat=ROCstatus(istat+1)){ 00101 if (statName==statusName(istat)){ 00102 set(istat); 00103 return; 00104 } 00105 } 00106 cout << "[PixelROCStatus::set()] statName |" 00107 << statName <<"| is an invalid keyword"<<endl; 00108 ::abort(); 00109 } 00110 else 00111 { 00112 reset() ; 00113 } 00114 }