File indexing completed on 2024-04-06 12:26:19
0001 #ifndef RecoLocalTracker_SiPixelClusterizer_SiPixelArrayBuffer_H
0002 #define RecoLocalTracker_SiPixelClusterizer_SiPixelArrayBuffer_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
0021
0022 #include <vector>
0023 #include <iostream>
0024
0025 class SiPixelArrayBuffer {
0026 public:
0027 inline SiPixelArrayBuffer(int rows, int cols);
0028 inline SiPixelArrayBuffer() {}
0029
0030 inline void setSize(int rows, int cols);
0031 inline int operator()(int row, int col) const;
0032 inline int operator()(const SiPixelCluster::PixelPos&) const;
0033 inline int rows() const { return nrows; }
0034 inline int columns() const { return ncols; }
0035
0036 inline bool inside(int row, int col) const;
0037 inline void set_adc(int row, int col, int adc);
0038 inline void set_adc(const SiPixelCluster::PixelPos&, int adc);
0039 inline void add_adc(int row, int col, int adc);
0040 int size() const { return pixel_vec.size(); }
0041
0042
0043 int index(int row, int col) const { return col * nrows + row; }
0044 int index(const SiPixelCluster::PixelPos& pix) const { return index(pix.row(), pix.col()); }
0045
0046 private:
0047 std::vector<int> pixel_vec;
0048 int nrows;
0049 int ncols;
0050 };
0051
0052 SiPixelArrayBuffer::SiPixelArrayBuffer(int rows, int cols) : pixel_vec(rows * cols, 0), nrows(rows), ncols(cols) {}
0053
0054 void SiPixelArrayBuffer::setSize(int rows, int cols) {
0055 pixel_vec.resize(rows * cols, 0);
0056 nrows = rows;
0057 ncols = cols;
0058 }
0059
0060 bool SiPixelArrayBuffer::inside(int row, int col) const { return (row >= 0 && row < nrows && col >= 0 && col < ncols); }
0061
0062 int SiPixelArrayBuffer::operator()(int row, int col) const { return pixel_vec[index(row, col)]; }
0063
0064 int SiPixelArrayBuffer::operator()(const SiPixelCluster::PixelPos& pix) const { return pixel_vec[index(pix)]; }
0065
0066
0067 void SiPixelArrayBuffer::set_adc(int row, int col, int adc) { pixel_vec[index(row, col)] = adc; }
0068
0069 void SiPixelArrayBuffer::set_adc(const SiPixelCluster::PixelPos& pix, int adc) { pixel_vec[index(pix)] = adc; }
0070
0071 void SiPixelArrayBuffer::add_adc(int row, int col, int adc) { pixel_vec[index(row, col)] += adc; }
0072
0073 #endif