From 1a8b0692fe3a27bcf32474456d341b1a784ec619 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 29 Sep 2017 11:39:10 +0200 Subject: [PATCH] works but needs to be verified. the void* in call back --- .../multiSlsDetector/multiSlsDetector.cpp | 51 ++++++++++++------- .../slsDetectorAnalysis/detectorData.h | 7 ++- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 6a5d10bb2..8945faba9 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -5731,17 +5731,18 @@ int multiSlsDetector::getData(const int isocket, int* image, const int size, void multiSlsDetector::readFrameFromReceiver(){ //determine number of half readouts and maxX and maxY - int maxX=0,maxY=0; + int maxX=thisMultiDetector->numberOfChannel[X]; + int maxY=thisMultiDetector->numberOfChannel[Y]; int numSockets = thisMultiDetector->numberOfDetectors; int numSocketsPerSLSDetector = 1; bool jungfrau = false; - double* gdata = NULL; + bool eiger = false; + /*double* gdata = NULL;*/ switch(getDetectorsType()){ case EIGER: + eiger = true; numSocketsPerSLSDetector = 2; numSockets *= numSocketsPerSLSDetector; - maxX = thisMultiDetector->numberOfChannel[X]; - maxY = thisMultiDetector->numberOfChannel[Y]; break; case JUNGFRAU: jungfrau = true; @@ -5757,7 +5758,7 @@ void multiSlsDetector::readFrameFromReceiver(){ string currentFileName = ""; //getting sls values - int slsdatabytes = 0, slsmaxchannels = 0, slsmaxX = 0, slsmaxY=0, nx=0, ny=0; + int slsdatabytes = 0, slsmaxchannels = 0, slsmaxX = 0, slsmaxY=0; double bytesperchannel = 0; if(detectors[0]){ slsdatabytes = detectors[0]->getDataBytes(); @@ -5768,12 +5769,10 @@ void multiSlsDetector::readFrameFromReceiver(){ } //getting multi values - nx = getTotalNumberOfChannels(slsDetectorDefs::X); - ny = getTotalNumberOfChannels(slsDetectorDefs::Y); //calculating offsets (for eiger interleaving ports) int offsetX[numSockets]; int offsetY[numSockets]; int bottom[numSockets]; - if(maxX){ + if(eiger){ for(int i=0; ioffsetY[i/numSocketsPerSLSDetector] + slsmaxY)) * maxX * bytesperchannel; //the left half or right half @@ -5787,7 +5786,7 @@ void multiSlsDetector::readFrameFromReceiver(){ } int expectedslssize = slsdatabytes/numSocketsPerSLSDetector; - int* image = new int[(expectedslssize/sizeof(int))](); + /*int* image = new int[(expectedslssize/sizeof(int))](); int nel=(thisMultiDetector->dataBytes)/sizeof(int); if(nel <= 0){ cprintf(RED,"Error: Multislsdetector databytes not valid : %d\n", thisMultiDetector->dataBytes); @@ -5797,6 +5796,14 @@ void multiSlsDetector::readFrameFromReceiver(){ int* multiframegain=NULL; if (jungfrau) multiframegain = new int[nel](); + */ + + char* image = new char[expectedslssize](); + char* multiframe = new char[thisMultiDetector->dataBytes](); + char* multiframegain = NULL; + if (jungfrau) + multiframegain = new char[thisMultiDetector->dataBytes](); + int nch; bool runningList[numSockets]; @@ -5815,7 +5822,7 @@ void multiSlsDetector::readFrameFromReceiver(){ //exit when last message for each socket received while(running){ - memset(((char*)multiframe),0xFF,slsdatabytes*thisMultiDetector->numberOfDetectors); //reset frame memory + memset(multiframe,0xFF,slsdatabytes*thisMultiDetector->numberOfDetectors);/*memset(((char*)multiframe),0xFF,slsdatabytes*thisMultiDetector->numberOfDetectors);*/ //reset frame memory //get each frame for(int isocket=0; isocketdataBytes, NULL,NULL,getCurrentProgress(),currentFileName.c_str(),maxX,maxY); + dataReady(thisData, currentFrameIndex, currentSubFrameIndex, pCallbackArg); + delete thisData; + } + setCurrentProgress(currentAcquisitionIndex+1); } diff --git a/slsDetectorSoftware/slsDetectorAnalysis/detectorData.h b/slsDetectorSoftware/slsDetectorAnalysis/detectorData.h index f0d238b4e..f120ade1d 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/detectorData.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/detectorData.h @@ -18,7 +18,10 @@ class detectorData { \param ny dimension in y (1D detector) \param gval pointer to gain data (for jungfrau) */ - detectorData(double *val=NULL, double *err=NULL, double *ang=NULL, double p_ind=-1, const char *fname="", int np=-1, int ny=1, double* gval=NULL) : values(val), errors(err), angles(ang), progressIndex(p_ind), npoints(np), npy(ny), gvalues(gval){ + detectorData(double *val=NULL, double *err=NULL, double *ang=NULL, double p_ind=-1, const char *fname="", int np=-1, int ny=1, double* gval=NULL) : cvalues(NULL), databytes(-1), values(val), errors(err), angles(ang), progressIndex(p_ind), npoints(np), npy(ny), gvalues(gval){ + strcpy(fileName,fname); + }; + detectorData(char *val=NULL, int db=0, double *err=NULL, double *ang=NULL, double p_ind=-1, const char *fname="", int np=-1, int ny=1, double* gval=NULL) : cvalues(val), databytes(db), values(NULL), errors(err), angles(ang), progressIndex(p_ind), npoints(np), npy(ny), gvalues(gval){ strcpy(fileName,fname); }; /** @@ -27,6 +30,8 @@ class detectorData { */ ~detectorData() {if (values) delete [] values; if (errors) delete [] errors; if (angles) delete [] angles; if (gvalues) delete [] gvalues;}; //private: + char* cvalues; + int databytes; double *values; /**< @short pointer to the data */ double *errors; /**< @short pointer to the errors */ double *angles;/**< @short pointer to the angles (NULL if no angular conversion) */