Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // verify new constructor
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 }