00001 #ifndef RecoLocalTracker_SiPixelClusterizer_SiPixelArrayBuffer_H
00002 #define RecoLocalTracker_SiPixelClusterizer_SiPixelArrayBuffer_H
00003
00004
00017
00018
00019
00020 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
00021
00022 #include <vector>
00023 #include <iostream>
00024
00025
00026
00027 class SiPixelArrayBuffer
00028 {
00029 public:
00030 inline SiPixelArrayBuffer( int rows, int cols);
00031 inline SiPixelArrayBuffer( ){}
00032
00033 inline void setSize( int rows, int cols);
00034 inline int operator()( int row, int col) const;
00035 inline int operator()( const SiPixelCluster::PixelPos&) const;
00036 inline int rows() const { return nrows;}
00037 inline int columns() const { return ncols;}
00038
00039 inline bool inside(int row, int col) const;
00040 inline void set_adc( int row, int col, int adc);
00041 inline void set_adc( const SiPixelCluster::PixelPos&, int adc);
00042 int size() const { return pixel_vec.size();}
00043
00045 int index( int row, int col) const {return col*nrows+row;}
00046 int index( const SiPixelCluster::PixelPos& pix) const { return index(pix.row(), pix.col()); }
00047
00048 private:
00049 int nrows;
00050 int ncols;
00051 std::vector<int> pixel_vec;
00052 };
00053
00054
00055
00056 SiPixelArrayBuffer::SiPixelArrayBuffer( int rows, int cols)
00057 : nrows(rows), ncols(cols)
00058 {
00059 pixel_vec.resize(rows*cols);
00060
00061
00062
00063
00064 std::vector<int>::iterator i=pixel_vec.begin(), iend=pixel_vec.end();
00065 for ( ; i!=iend; ++i) {
00066 *i = 0;
00067 }
00068 }
00069
00070
00071 void SiPixelArrayBuffer::setSize( int rows, int cols)
00072 {
00073 nrows = rows;
00074 ncols = cols;
00075 pixel_vec.resize(rows*cols);
00076
00077
00078
00079
00080
00081
00082 std::vector<int>::iterator i=pixel_vec.begin(), iend=pixel_vec.end();
00083 for ( ; i!=iend; ++i) {
00084 *i = 0;
00085 }
00086 }
00087
00088
00089 bool SiPixelArrayBuffer::inside(int row, int col) const
00090 {
00091 return ( row >= 0 && row < nrows && col >= 0 && col < ncols);
00092 }
00093
00094
00095 int SiPixelArrayBuffer::operator()(int row, int col) const
00096 {
00097 if (inside(row,col)) return pixel_vec[index(row,col)];
00098 else return 0;
00099 }
00100
00101
00102 int SiPixelArrayBuffer::operator()(const SiPixelCluster::PixelPos& pix) const
00103 {
00104 if (inside( pix.row(), pix.col())) return pixel_vec[index(pix)];
00105 else return 0;
00106 }
00107
00108
00109
00110 void SiPixelArrayBuffer::set_adc( int row, int col, int adc)
00111 {
00112 pixel_vec[index(row,col)] = adc;
00113 }
00114
00115
00116 void SiPixelArrayBuffer::set_adc( const SiPixelCluster::PixelPos& pix, int adc)
00117 {
00118 pixel_vec[index(pix)] = adc;
00119 }
00120
00121
00122 #endif