CMS 3D CMS Logo

SiStripBadStrip.h

Go to the documentation of this file.
00001 #ifndef SiStripBadStrip_h
00002 #define SiStripBadStrip_h
00003 
00004 #include<vector>
00005 #include<map>
00006 #include<iostream>
00007 #include<boost/cstdint.hpp>
00008 #include "DataFormats/SiStripCommon/interface/ConstantsForCondObjects.h"
00009 
00010 
00011 class SiStripBadStrip {
00012 
00013  public:
00014 
00015   struct data{
00016     unsigned short firstStrip;
00017     unsigned short range;
00018     unsigned short flag;
00019   };
00020 
00021   struct DetRegistry{
00022     uint32_t detid;
00023     uint32_t ibegin;
00024     uint32_t iend;
00025   };
00026 
00027   class StrictWeakOrdering{
00028   public:
00029     bool operator() (const DetRegistry& p,const uint32_t& i) const {return p.detid < i;}
00030   };
00031   
00032 
00033   typedef std::vector<unsigned int>                        Container;  
00034   typedef std::vector<unsigned int>::const_iterator        ContainerIterator;  
00035   typedef std::pair<ContainerIterator, ContainerIterator>  Range;      
00036   typedef std::vector<DetRegistry>                         Registry;
00037   typedef Registry::const_iterator                         RegistryIterator;
00038   typedef Container                                        InputVector;  
00039  
00040   SiStripBadStrip(){};
00041   SiStripBadStrip(const SiStripBadStrip& orig){
00042     v_badstrips=orig.v_badstrips; 
00043     indexes=orig.indexes;
00044   }
00045   virtual ~SiStripBadStrip(){};
00046   
00047   bool put(const uint32_t& detID,const InputVector& vect){return put(detID,Range(vect.begin(),vect.end()));}
00048   bool put(const uint32_t& detID,Range input);
00049   const Range getRange(const uint32_t& detID) const;
00050   void getDetIds(std::vector<uint32_t>& DetIds_) const;
00051   
00052   
00053   ContainerIterator getDataVectorBegin()    const {return v_badstrips.begin();}
00054   ContainerIterator getDataVectorEnd()      const {return v_badstrips.end();}
00055   RegistryIterator getRegistryVectorBegin() const {return indexes.begin();}
00056   RegistryIterator getRegistryVectorEnd()   const{return indexes.end();}
00057 
00058 
00059   inline data decode (const unsigned int& value) const {
00060     data a;
00061     a.firstStrip = ((value>>sistrip::FirstBadStripShift_)&sistrip::FirstBadStripMask_);
00062     a.range      = ((value>>sistrip::RangeBadStripShift_)&sistrip::RangeBadStripMask_);
00063     a.flag       = ((value>>sistrip::FlagBadStripShift_)&sistrip::FlagBadStripMask_);
00064     return a;
00065   }
00066   
00067   inline unsigned int encode (const unsigned short& first, const unsigned short& NconsecutiveBadStrips, const unsigned short& flag=0) {
00068     return   ((first & sistrip::FirstBadStripMask_)<<sistrip::FirstBadStripShift_) | ((NconsecutiveBadStrips & sistrip::RangeBadStripMask_)<<sistrip::RangeBadStripShift_) | ((flag & sistrip::FlagBadStripMask_)<<sistrip::FlagBadStripShift_);
00069   }
00070 
00071 protected:
00072   Container v_badstrips; 
00073   Registry indexes;
00074 };
00075 
00076 #endif

Generated on Tue Jun 9 17:26:48 2009 for CMSSW by  doxygen 1.5.4