diff --git a/slsDetectorCalibration/dataStructures/jungfrau10ModuleData.h b/slsDetectorCalibration/dataStructures/jungfrau10ModuleData.h index 39db07216..b839c3e3f 100644 --- a/slsDetectorCalibration/dataStructures/jungfrau10ModuleData.h +++ b/slsDetectorCalibration/dataStructures/jungfrau10ModuleData.h @@ -7,7 +7,24 @@ class jungfrau10ModuleData : public slsDetectorData { private: - + + typedef struct { + uint64_t frameNumber; /**< is the frame number */ + uint32_t expLength; /**< is the subframe number (32 bit eiger) or real time exposure time in 100ns (others) */ + uint32_t packetNumber; /**< is the packet number */ + uint64_t bunchId; /**< is the bunch id from beamline */ + uint64_t timestamp; /**< is the time stamp with 10 MHz clock */ + uint16_t modId; /**< is the unique module id (unique even for left, right, top, bottom) */ + uint16_t xCoord; /**< is the x coordinate in the complete detector system */ + uint16_t yCoord; /**< is the y coordinate in the complete detector system */ + uint16_t zCoord; /**< is the z coordinate in the complete detector system */ + uint32_t debug; /**< is for debugging purposes */ + uint16_t roundRNumber; /**< is the round robin set number */ + uint8_t detType; /**< is the detector type see :: detectorType */ + uint8_t version; /**< is the version number of this structure format */ + } sls_detector_header; + + int iframe; int nadc; int sc_width; @@ -25,7 +42,7 @@ class jungfrau10ModuleData : public slsDetectorData { */ - jungfrau10ModuleData(int ns=16384): slsDetectorData(256*4, 256*2, 256*256*8*2, NULL, NULL, NULL) , iframe(0), nadc(32), sc_width(64), sc_height(256) { + jungfrau10ModuleData(int ns=16384): slsDetectorData(256*4, 256*2, 256*256*8*2+48, NULL, NULL, NULL) , iframe(0) { @@ -38,43 +55,51 @@ class jungfrau10ModuleData : public slsDetectorData { int ichip; // cout << sizeof(uint16_t) << endl; + int ip=0; + for (int iy=0; iy<256*2; iy++) { + for (int ix=0; ix<256*4; ix++){ + dataMap[iy][ix]=ip*2+48; + ip++; + } + } + - for (iadc=0; iadc=ny || col<0 || col>=nx) { - cout << "Wrong row, column " << row << " " << col << " " << iadc << " " << i << endl; - } else - dataMap[row][col]=(nadc*i+iadc)*2; - if (dataMap[row][col]<0 || dataMap[row][col]>=dataSize) - cout << "Error: pointer " << dataMap[row][col] << " out of range " << row << " " << col <<" " << iadc << " " << i << endl; - else { - xmap[nadc*i+iadc]=col; - ymap[nadc*i+iadc]=row; +/* /\* if (iadc=ny || col<0 || col>=nx) { */ +/* cout << "Wrong row, column " << row << " " << col << " " << iadc << " " << i << endl; */ +/* } else */ +/* dataMap[row][col]=(nadc*i+iadc)*2; */ + /* if (dataMap[row][col]<0 || dataMap[row][col]>=dataSize) */ + /* cout << "Error: pointer " << dataMap[row][col] << " out of range " << row << " " << col <<" " << iadc << " " << i << endl; */ + /* else { */ + /* xmap[nadc*i+iadc]=col; */ + /* ymap[nadc*i+iadc]=row; */ - } - } + /* } */ + /* } */ - } + // } @@ -91,7 +116,7 @@ class jungfrau10ModuleData : public slsDetectorData { */ - int getFrameNumber(char *buff){(void)buff; return iframe;}; + int getFrameNumber(return (sls_detector_header*)buff)->frameNumber;}; /** @@ -123,29 +148,66 @@ class jungfrau10ModuleData : public slsDetectorData { \returns pointer to the begin of the last good frame, NULL if no frame is found or last frame is incomplete */ - char *readNextFrame(ifstream &filebin){ + 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[dataSize]; + 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 *readNextFrame(ifstream &filebin){ // int afifo_length=0; - uint16_t *afifo_cont; - int ib=0; - if (filebin.is_open()) { - afifo_cont=new uint16_t[dataSize/2]; - while (filebin.read(((char*)afifo_cont)+ib,2)) { - ib+=2; - if (ib==dataSize) break; - } - if (ib>0) { - iframe++; - // cout << ib << "-" << endl; - return (char*)afifo_cont; - } else { - delete [] afifo_cont; - return NULL; - } - } - return NULL; - }; + /* uint16_t *afifo_cont; */ + /* int ib=0; */ + /* if (filebin.is_open()) { */ + /* afifo_cont=new uint16_t[dataSize/2]; */ + /* while (filebin.read(((char*)afifo_cont)+ib,2)) { */ + /* ib+=2; */ + /* if (ib==dataSize) break; */ + /* } */ + /* if (ib>0) { */ + /* iframe++; */ + /* // cout << ib << "-" << endl; */ + /* return (char*)afifo_cont; */ + /* } else { */ + /* delete [] afifo_cont; */ + /* return NULL; */ + /* } */ + /* } */ + /* return NULL; */ + /* }; */ + char *retval=0; + int nd; + int fnum = -1; + np=0; + int pn; + + // cout << dataSize << endl; + if (ff>=0) + fnum=ff; + if (filebin.is_open()) { + if (filebin.read(data, dataSize) ){ + ff=getFrameNumber(data); + np=getPacketNumber(data); + return data; + } + } + return NULL; + }; diff --git a/slsDetectorCalibration/dataStructures/moench02CtbData.h b/slsDetectorCalibration/dataStructures/moench02CtbData.h index 4e1f78404..663230725 100644 --- a/slsDetectorCalibration/dataStructures/moench02CtbData.h +++ b/slsDetectorCalibration/dataStructures/moench02CtbData.h @@ -34,7 +34,7 @@ class moench02CtbData : public slsDetectorData { moench02CtbData(int ns=6400): slsDetectorData(160, 160, ns*2*32, NULL, NULL) , nadc(32), sc_width(40), sc_height(160) { - int adc_off[4]={0,40,80,120}; + int adc_off[4]={40,0,120,80}; int adc_nr[4]={8,10,20,23}; int row, col; @@ -86,10 +86,10 @@ class moench02CtbData : public slsDetectorData { if(ip>=0 && ip