diff --git a/slsDetectorCalibration/moench02Ctb10GbData.h b/slsDetectorCalibration/moench02Ctb10GbData.h new file mode 100644 index 000000000..a36090496 --- /dev/null +++ b/slsDetectorCalibration/moench02Ctb10GbData.h @@ -0,0 +1,246 @@ +#ifndef MOENCH02CTB10GBDATA_H +#define MOENCH02CTB10GBDATA_H +#include +#include "slsDetectorData.h" +#include "slsReceiverData.h" + + +class moench02Ctb10GbData : public slsReceiverData { + + 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 + + */ + + + moench02Ctb10GbData(int ns=6400): slsReceiverData(160, 160, 50, 8208) , nadc(4), sc_width(40), sc_height(160) { + + + int adc_nr[4]={120,0,80,40}; + int row, col; + + int isample; + int iadc; + int ix, iy; + int i; + int npackets=50; + maplength = 8208*npackets; + //this->setDataSize(maplength); + /* maplength=this->getDataSize()/2; */ + + for (int ip=0; ip=8208*npackets) { + cout << "Error: pointer " << dataMap[row][col] << " out of range "<< endl; + } + + } + } + } + } + int ibyte; + int ii=0; + + for (int ipacket=0; ipacket=2 && iadc<=5){ + xmap[i]=adc_nr[iadc-2]+ix; + ymap[i]=iy; + }else{ + xmap[i]=-1; + ymap[i]=-1; + } + ii++; + } + }//end loop on bytes + }//end loop on packets + + iframe=0; + cout << "data struct created" << endl; + }; + + void getPixel(int ip, int &x, int &y) { + if(ip>=0 && ip0) { */ + /* iframe++; */ + /* //cout << ib << "-" << endl; */ + /* return (char*)afifo_cont; */ + /* } else { */ + /* delete [] afifo_cont; */ + /* return NULL; */ + /* } */ + /* } */ + /* return NULL; */ + /* }; */ + virtual char *readNextFrame(ifstream &filebin, int& ff, int &np) { + char *data=new char[packetSize*nPackets]; + char *retval=0; + int nd; + np=0; + int pn; + char aa[8224]={0}; + char *packet=(char *)aa; + int fnum = -1; + if (ff>=0) + fnum=ff; + + if (filebin.is_open()) { + + + cout << "+"; + + while(filebin.read((char*)packet, 8208)){ + + pn=getPacketNumber(packet); + if (fnum<0) + fnum= getFrameNumber(packet); + + + if (fnum>=0) { + if (getFrameNumber(packet) !=fnum) { + + if (np==0){ + cout << "-"; + delete [] data; + return NULL; + } else + filebin.seekg(-8208,ios_base::cur); + return data; + } + + memcpy(data+(pn-1)*packetSize, packet, packetSize); + + np++; + if (np==nPackets) + break; + if (pn==nPackets) + break; + } + } + }else{ + cerr< { int iadc; int ix, iy; maplength=this->getDataSize()/2; - cerr<<"Map Array Length: "< { } } iframe=0; - // cout << "data struct created" << endl; + cout << "data struct created" << endl; }; void getPixel(int ip, int &x, int &y) { @@ -138,7 +137,7 @@ class moench02CtbData : public slsDetectorData { } if (ib>0) { iframe++; - cout << ib << "-" << endl; + //cout << ib << "-" << endl; return (char*)afifo_cont; } else { delete [] afifo_cont; diff --git a/slsDetectorCalibration/moench03TCtb10GbData.h b/slsDetectorCalibration/moench03TCtb10GbData.h new file mode 100644 index 000000000..7c885601f --- /dev/null +++ b/slsDetectorCalibration/moench03TCtb10GbData.h @@ -0,0 +1,247 @@ +#ifndef MOENCH03TCTB10GBDATA_H +#define MOENCH03TCTB10GBDATA_H +#include "slsReceiverData.h" + + + +class moench03TCtb10GbData : 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 + + */ + + + // moench03TCtb10GbData(int ns=5000): slsDetectorData(400, 400, 8208*40, NULL, NULL) , nadc(32), sc_width(25), sc_height(200) { + moench03TCtb10GbData(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, int &np) { + char *data=new char[packetSize*nPackets]; + char *retval=0; + int nd; + np=0; + int pn; + char aa[8224]={0}; + char *packet=(char *)aa; + int fnum = -1; + + if (ff>=0) + fnum=ff; + + if (filebin.is_open()) { + + + cout << "+"; + + while(filebin.read((char*)packet, 8208)){ + + pn=getPacketNumber(packet); + + if (fnum<0) + fnum= getFrameNumber(packet); + + if (fnum>=0) { + if (getFrameNumber(packet) !=fnum) { + + if (np==0){ + cout << "-"; + delete [] data; + return NULL; + } else + filebin.seekg(-8208,ios_base::cur); + + return data; + } + + memcpy(data+(pn-1)*packetSize, packet, packetSize); + np++; + if (np==nPackets) + break; + if (pn==nPackets) + break; + } + } + + } + + if (np==0){ + cout << "?"; + delete [] data; + return NULL; + }// else if (np #include -#include #include "moenchReadData.C" typedef struct task_s{ @@ -10,7 +9,6 @@ typedef struct task_s{ int runmin; int runmax; int treeIndex; - double xTalk; } Task; void *moenchMakeTreeTask(void *p){ @@ -21,16 +19,13 @@ void *moenchMakeTreeTask(void *p){ TFile *f = new TFile(fname,"RECREATE"); cout << "Call moenchReadData(" << t->fformat << "," << t->tname << "," << t->runmin<< "," << t->runmax <<")" << endl; TThread::UnLock(); - THStack *s = moenchReadData(t->fformat,t->tname,t->runmin,t->runmax, 1500, -500, 1000, 1, t->xTalk); - s->Write(); - if(f && f->IsOpen()){ - f->Close(); - } + moenchReadData(t->fformat,t->tname,t->runmin,t->runmax); + f->Close(); return 0; } -void moenchReadDataMT(char *fformat, char *tit, char *tdir, int runmin, int runoffset, int nThreads, int treeIndexStart=0, double xTalk=0.044){ +void moenchReadDataMT(char *fformat, char *tit, char *tdir, int runmin, int runoffset, int nThreads, int treeIndexStart=0){ char threadName[1000]; TThread *threads[nThreads]; for(int i = 0; i < nThreads; i++){ @@ -42,7 +37,6 @@ void moenchReadDataMT(char *fformat, char *tit, char *tdir, int runmin, int runo t->runmin = runmin + i*runoffset; t->runmax = runmin + (i+1)*runoffset - 1; t->treeIndex = treeIndexStart + i; - t->xTalk = xTalk; cout << "start thread " << i << " start: " << t->runmin << " end " << t->runmax << endl; threads[i] = new TThread(threadName, moenchMakeTreeTask, t); threads[i]->Run(); @@ -56,27 +50,3 @@ void moenchReadDataMT(char *fformat, char *tit, char *tdir, int runmin, int runo - -//to compile: g++ -DMYROOT -DMYROOT1 -g `root-config --cflags --glibs` -o moenchReadDataMT moenchReadDataMT.C -int main(int argc, char **argv){ - if(argc < 8){ - cout << "Usage: " << argv[0] << " fformat tit tdir runmin runoffset nThreads treeIndexStart [xTalkFactor]" << endl; - exit(-1); - } - - char *fformat = argv[1]; - char *tit = argv[2]; - char *tdir = argv[3]; - int runmin = atoi(argv[4]); - int runoffset = atoi(argv[5]); - int nThreads = atoi(argv[6]); - int treeIndexStart = atoi(argv[7]); - double xTalkFactor = 0.044; - - if(argc == 9) - xTalkFactor = atof(argv[8]); - - moenchReadDataMT(fformat, tit, tdir,runmin,runoffset,nThreads,treeIndexStart, xTalkFactor); - -} -