#ifndef MOENCH03CTB10GBT1DATA_H #define MOENCH03CTB10GBT1DATA_H #include "slsReceiverData.h" class moench03Ctb10GbT1Data : public slsReceiverData { 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 */ moench03Ctb10GbT1Data(int ns=5000): slsReceiverData(400, 400, 40, 8208), nadc(32), sc_width(25), sc_height(200) { 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 row, col; int isample; int iadc; int ix, iy; int npackets=40; int i; int adc4(0); for (int ip=0; ip=8208*40) cout << "Error: pointer " << dataMap[row][col] << " out of range "<< endl; } } } } int ipacket; int ibyte; int ii=0; for (int ipacket=0; ipacket0) { */ /* iframe++; */ /* // cout << ib << "-" << endl; */ /* return (char*)afifo_cont; */ /* } else { */ /* delete [] afifo_cont; */ /* return NULL; */ /* } */ /* } */ /* return NULL; */ /* }; */ virtual char *readNextFrame(ifstream &filebin) { int ff=-1, np=-1; return readNextFrame(filebin, ff, np); }; virtual char *readNextFrame(ifstream &filebin, int &ff) { int np=-1; return readNextFrame(filebin, ff, np); }; virtual char *readNextFrame(ifstream &filebin, int& ff, int &np) { char *data=new char[packetSize*nPackets]; char *d=readNextFrame(filebin, ff, np, data); if (d==NULL) {delete [] data; data=NULL;} return data; } virtual char *readNextFrame(ifstream &filebin, int& ff, int &np, char *data) { char *retval=0; int nd; int fnum = -1; np=0; int pn; char aa[8224]; char *packet=(char *)aa; // cout << packetSize*nPackets << endl; if (ff>=0) fnum=ff; if (filebin.is_open()) { while(filebin.read((char*)packet, 8208) ){ pn=getPacketNumber(packet); if (fnum<0) fnum= getFrameNumber(packet); // cout << "fn: " << fnum << "\t pn: " << pn << endl; if (fnum>=0) { if (getFrameNumber(packet) !=fnum) { if (np==0){ // delete [] data; return NULL; } else filebin.seekg(-8208,ios_base::cur); return data; } if (pn>nPackets) { cout << "Bad packet number " << pn << endl; } memcpy(data+(pn-1)*packetSize, packet, packetSize); np++; if (np==nPackets) break; if (pn==nPackets) break; } } } if (np==0){ // delete [] data; return NULL; } ff=fnum; return data; }; int getPacketNumber(int x, int y) {return dataMap[y][x]/8208;}; }; #endif