// SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #ifndef MOENCH03TCTBDATA_H #define MOENCH03TCTBDATA_H #include "slsDetectorData.h" class moench03TCtbData : public slsDetectorData { private: int iframe; int nadc; int sc_width; int sc_height; public: /** Implements the slsReceiverData structure for the moench02 prototype read out by a module i.e. using the slsReceiver (160x160 pixels, 40 packets 1286 large etc.) \param c crosstalk parameter for the output buffer */ moench03TCtbData(int ns = 5000) : slsDetectorData(400, 400, ns * 2 * 32, NULL, NULL), nadc(32), sc_width(25), sc_height(200) { int row, col; int isample; int iadc; int ix, iy; int adc_nr[32] = {300, 325, 350, 375, 300, 325, 350, 375, 200, 225, 250, 275, 200, 225, 250, 275, 100, 125, 150, 175, 100, 125, 150, 175, 0, 25, 50, 75, 0, 25, 50, 75}; /* int adc_nr[32]={200,225,250,275,300,325,350,375,\ */ /* 0,25,50,75,100,125,150,175,\ */ /* 175,150,125,100,75,50,25,0,\ */ /* 375,350,325,300,275,250,225,200}; */ for (iadc = 0; iadc < nadc; iadc++) { for (int i = 0; i < sc_width * sc_height; i++) { col = adc_nr[iadc] + (i % sc_width); if (iadc < 16) { row = 199 - i / sc_width; } else { row = 200 + i / sc_width; } dataMap[row][col] = (nadc * i + iadc) * 2; if (dataMap[row][col] < 0 || dataMap[row][col] >= 2 * 400 * 400) cout << "Error: pointer " << dataMap[row][col] << " out of range " << endl; } } int adc4; for (int i = 0; i < nx * ny; i++) { isample = i / nadc; iadc = i % nadc; ix = isample % sc_width; iy = isample / sc_width; adc4 = (int)iadc / 4; // if (iadc<(nadc/2)) { if (adc4 % 2 == 0) { xmap[i] = adc_nr[iadc] + ix; ymap[i] = ny / 2 - 1 - iy; } else { xmap[i] = adc_nr[iadc] + ix; ymap[i] = ny / 2 + iy; } } /* for (int i=0; i 0) { iframe++; // cout << ib << "-" << endl; return (char *)afifo_cont; } else { delete[] afifo_cont; return NULL; } } return NULL; }; }; #endif