CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/CalibFormats/SiPixelObjects/src/PixelROCStatus.cc

Go to the documentation of this file.
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 }