File indexing completed on 2024-04-06 12:05:11
0001 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
0002 #include <cassert>
0003 #include <cstdio>
0004 #include <iostream>
0005
0006 typedef SiPixelCluster::PixelPos PiPos;
0007 typedef SiPixelCluster::Pixel Pixel;
0008 #define MAXSPAN 255
0009
0010 template <int N>
0011 inline bool verify(PiPos const (&pos)[N], bool ox, bool oy) {
0012 bool ok = true;
0013 SiPixelCluster clus;
0014 for (auto p : pos)
0015 clus.add(p, 2);
0016 printf("\nclus %d %d,%d %d,%d %s %s\n\n",
0017 clus.size(),
0018 clus.minPixelRow(),
0019 clus.maxPixelRow(),
0020 clus.minPixelCol(),
0021 clus.maxPixelCol(),
0022 clus.overflowCol() ? "overflowY " : " ",
0023 clus.overflowRow() ? " overflowX" : "");
0024
0025 auto cxmin = clus.minPixelRow();
0026 auto cymin = clus.minPixelCol();
0027 ok &= (ox == clus.overflowRow()) && (clus.overflowCol() == oy);
0028
0029
0030 unsigned short adc[16]{2};
0031 unsigned short x[16];
0032 unsigned short y[16];
0033 unsigned short xmin = 16000;
0034 unsigned short ymin = 16000;
0035 unsigned int isize = 0;
0036 for (auto p : pos) {
0037 xmin = std::min(xmin, (unsigned short)(p.row()));
0038 ymin = std::min(ymin, (unsigned short)(p.col()));
0039 x[isize] = p.row();
0040 y[isize++] = p.col();
0041 }
0042 printf("pos %d %d,%d\n", isize, xmin, ymin);
0043 SiPixelCluster clus2(isize, adc, x, y, xmin, ymin);
0044 printf("clus2 %d %d,%d %d,%d %s %s\n\n",
0045 clus2.size(),
0046 clus2.minPixelRow(),
0047 clus2.maxPixelRow(),
0048 clus2.minPixelCol(),
0049 clus2.maxPixelCol(),
0050 clus2.overflowCol() ? "overflowY " : " ",
0051 clus2.overflowRow() ? " overflowX" : "");
0052
0053 ok &= (clus.size() == clus2.size());
0054 ok &= (clus.pixelOffset() == clus2.pixelOffset());
0055 for (int i = 0; i != clus.size(); ++i) {
0056 auto const p = clus.pixel(i);
0057 auto const p2 = clus2.pixel(i);
0058 ok &= (pos[i].row() - cxmin > MAXSPAN) ? p.x == MAXSPAN + cxmin : p.x == pos[i].row();
0059 ok &= (pos[i].col() - cymin > MAXSPAN) ? p.y == MAXSPAN + cymin : p.y == pos[i].col();
0060 printf("%d,%d %d,%d %d,%d\n", pos[i].row(), pos[i].col(), p.x, p.y, p2.x, p2.y);
0061 }
0062
0063 return ok;
0064 }
0065
0066 int main() {
0067 std::cout << "size " << sizeof(SiPixelCluster) << std::endl;
0068
0069 bool ok = true;
0070
0071 PiPos const normal[] = {{3, 3}, {3, 4}, {3, 5}, {5, 4}, {4, 7}, {5, 5}};
0072 PiPos const bigX[] = {{3, 3}, {3, 60}, {3, 5}, {161, 4}, {162, 62}, {262, 5}};
0073 PiPos const bigY[] = {{3, 3}, {3, 100}, {3, 5}, {61, 264}, {62, 102}, {45, 65}};
0074 PiPos const ylarge[] = {{3, 352}, {3, 352}, {3, 400}, {20, 400}, {40, 363}, {62, 350}};
0075 PiPos const huge[] = {{3, 3}, {3, 332}, {3, 400}, {201, 400}, {262, 323}, {122, 350}};
0076
0077 ok &= verify(normal, false, false);
0078 assert(ok);
0079 ok &= verify(bigX, true, false);
0080 assert(ok);
0081 ok &= verify(bigY, false, true);
0082 assert(ok);
0083 ok &= verify(ylarge, false, false);
0084 assert(ok);
0085 ok &= verify(huge, true, true);
0086 assert(ok);
0087
0088 return ok ? 0 : 1;
0089 }