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