// SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #ifndef MOENCH02CTBDATA_H #define MOENCH02CTBDATA_H #include "slsDetectorData.h" class moench02CtbData : public slsDetectorData { private: int iframe; // int *xmap, *ymap; int nadc; int sc_width; int sc_height; int maplength; 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 */ moench02CtbData(int ns = 6400) : slsDetectorData(160, 160, ns * 2 * 32, NULL, NULL), nadc(32), sc_width(40), sc_height(160) { int adc_off[4] = {40, 0, 120, 80}; int adc_nr[4] = {8, 10, 20, 22}; int row, col; int isample; int iadc, iiadc; int ix, iy; maplength = this->getDataSize() / 2; // cout << maplength << endl; for (iiadc = 0; iiadc < 4; iiadc++) { iadc = adc_nr[iiadc]; // cout << iiadc << endl; for (int i = 0; i < sc_width * sc_height; i++) { col = adc_off[iiadc] + (i % sc_width); row = i / sc_width; dataMap[row][col] = (32 * i + iadc) * 2; if (dataMap[row][col] < 0 || dataMap[row][col] >= dataSize) { cout << "Error: pointer " << dataMap[row][col] << " out of range " << endl; } } } for (int i = 0; i < maplength; i++) { // cout << i << endl; isample = i / 32; iiadc = i % 32; iadc = -1; for (int iii = 0; iii < 4; iii++) { if (iiadc == adc_nr[iii]) iadc = iii; } ix = isample % sc_width; iy = isample / sc_width; if (iadc >= 0) { xmap[i] = adc_off[iadc] + ix; ymap[i] = iy; } else { xmap[i] = -1; ymap[i] = -1; } } iframe = 0; cout << "data struct created" << endl; }; void getPixel(int ip, int &x, int &y) { if (ip >= 0 && ip < maplength) { x = xmap[ip]; y = ymap[ip]; } /*else{ cerr<<"WRONG ARRAY LENGTH"< 0) { iframe++; // cout << ib/2 << "-" << endl; // for (int i=0; i