mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-09 03:20:42 +02:00
works but needs to be verified. the void* in call back
This commit is contained in:
parent
352ade6457
commit
1a8b0692fe
@ -5731,17 +5731,18 @@ int multiSlsDetector::getData(const int isocket, int* image, const int size,
|
|||||||
void multiSlsDetector::readFrameFromReceiver(){
|
void multiSlsDetector::readFrameFromReceiver(){
|
||||||
|
|
||||||
//determine number of half readouts and maxX and maxY
|
//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 numSockets = thisMultiDetector->numberOfDetectors;
|
||||||
int numSocketsPerSLSDetector = 1;
|
int numSocketsPerSLSDetector = 1;
|
||||||
bool jungfrau = false;
|
bool jungfrau = false;
|
||||||
double* gdata = NULL;
|
bool eiger = false;
|
||||||
|
/*double* gdata = NULL;*/
|
||||||
switch(getDetectorsType()){
|
switch(getDetectorsType()){
|
||||||
case EIGER:
|
case EIGER:
|
||||||
|
eiger = true;
|
||||||
numSocketsPerSLSDetector = 2;
|
numSocketsPerSLSDetector = 2;
|
||||||
numSockets *= numSocketsPerSLSDetector;
|
numSockets *= numSocketsPerSLSDetector;
|
||||||
maxX = thisMultiDetector->numberOfChannel[X];
|
|
||||||
maxY = thisMultiDetector->numberOfChannel[Y];
|
|
||||||
break;
|
break;
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
jungfrau = true;
|
jungfrau = true;
|
||||||
@ -5757,7 +5758,7 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
string currentFileName = "";
|
string currentFileName = "";
|
||||||
|
|
||||||
//getting sls values
|
//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;
|
double bytesperchannel = 0;
|
||||||
if(detectors[0]){
|
if(detectors[0]){
|
||||||
slsdatabytes = detectors[0]->getDataBytes();
|
slsdatabytes = detectors[0]->getDataBytes();
|
||||||
@ -5768,12 +5769,10 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//getting multi values
|
//getting multi values
|
||||||
nx = getTotalNumberOfChannels(slsDetectorDefs::X);
|
|
||||||
ny = getTotalNumberOfChannels(slsDetectorDefs::Y);
|
|
||||||
//calculating offsets (for eiger interleaving ports)
|
//calculating offsets (for eiger interleaving ports)
|
||||||
int offsetX[numSockets]; int offsetY[numSockets];
|
int offsetX[numSockets]; int offsetY[numSockets];
|
||||||
int bottom[numSockets];
|
int bottom[numSockets];
|
||||||
if(maxX){
|
if(eiger){
|
||||||
for(int i=0; i<numSockets; ++i){
|
for(int i=0; i<numSockets; ++i){
|
||||||
offsetY[i] = (maxY - (thisMultiDetector->offsetY[i/numSocketsPerSLSDetector] + slsmaxY)) * maxX * bytesperchannel;
|
offsetY[i] = (maxY - (thisMultiDetector->offsetY[i/numSocketsPerSLSDetector] + slsmaxY)) * maxX * bytesperchannel;
|
||||||
//the left half or right half
|
//the left half or right half
|
||||||
@ -5787,7 +5786,7 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int expectedslssize = slsdatabytes/numSocketsPerSLSDetector;
|
int expectedslssize = slsdatabytes/numSocketsPerSLSDetector;
|
||||||
int* image = new int[(expectedslssize/sizeof(int))]();
|
/*int* image = new int[(expectedslssize/sizeof(int))]();
|
||||||
int nel=(thisMultiDetector->dataBytes)/sizeof(int);
|
int nel=(thisMultiDetector->dataBytes)/sizeof(int);
|
||||||
if(nel <= 0){
|
if(nel <= 0){
|
||||||
cprintf(RED,"Error: Multislsdetector databytes not valid : %d\n", thisMultiDetector->dataBytes);
|
cprintf(RED,"Error: Multislsdetector databytes not valid : %d\n", thisMultiDetector->dataBytes);
|
||||||
@ -5797,6 +5796,14 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
int* multiframegain=NULL;
|
int* multiframegain=NULL;
|
||||||
if (jungfrau)
|
if (jungfrau)
|
||||||
multiframegain = new int[nel]();
|
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;
|
int nch;
|
||||||
|
|
||||||
bool runningList[numSockets];
|
bool runningList[numSockets];
|
||||||
@ -5815,7 +5822,7 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
|
|
||||||
//exit when last message for each socket received
|
//exit when last message for each socket received
|
||||||
while(running){
|
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
|
//get each frame
|
||||||
for(int isocket=0; isocket<numSockets; ++isocket){
|
for(int isocket=0; isocket<numSockets; ++isocket){
|
||||||
@ -5823,29 +5830,29 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
//if running
|
//if running
|
||||||
if (runningList[isocket]) {
|
if (runningList[isocket]) {
|
||||||
//get individual images
|
//get individual images
|
||||||
if(FAIL == getData(isocket, image, expectedslssize, currentAcquisitionIndex,currentFrameIndex,currentSubFrameIndex,currentFileName)){
|
if(FAIL == getData(isocket, (int*)image, expectedslssize, currentAcquisitionIndex,currentFrameIndex,currentSubFrameIndex,currentFileName)){
|
||||||
runningList[isocket] = false;
|
runningList[isocket] = false;
|
||||||
--numRunning;
|
--numRunning;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//assemble data with interleaving
|
//assemble data with interleaving
|
||||||
if(maxX){
|
if(eiger){
|
||||||
|
|
||||||
//bottom
|
//bottom
|
||||||
if(bottom[isocket]){
|
if(bottom[isocket]){
|
||||||
//if((((isocket/numSocketsPerSLSDetector)+1)%2) == 0){
|
//if((((isocket/numSocketsPerSLSDetector)+1)%2) == 0){
|
||||||
for(int i=0;i<slsmaxY;++i){
|
for(int i=0;i<slsmaxY;++i){
|
||||||
memcpy(((char*)multiframe) + offsetY[isocket] + offsetX[isocket] + (int)((slsmaxY-1-i)*maxX*bytesperchannel),
|
memcpy(multiframe + offsetY[isocket] + offsetX[isocket] + (int)((slsmaxY-1-i)*maxX*bytesperchannel),
|
||||||
(char*)image+ (int)(i*(slsmaxX/numSocketsPerSLSDetector)*bytesperchannel),
|
image+ (int)(i*(slsmaxX/numSocketsPerSLSDetector)*bytesperchannel),
|
||||||
(int)((slsmaxX/numSocketsPerSLSDetector)*bytesperchannel));
|
(int)((slsmaxX/numSocketsPerSLSDetector)*bytesperchannel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//top
|
//top
|
||||||
else{
|
else{
|
||||||
for(int i=0;i<slsmaxY;++i){
|
for(int i=0;i<slsmaxY;++i){
|
||||||
memcpy(((char*)multiframe) + offsetY[isocket] + offsetX[isocket] + (int)(i*maxX*bytesperchannel),
|
memcpy(multiframe + offsetY[isocket] + offsetX[isocket] + (int)(i*maxX*bytesperchannel),
|
||||||
(char*)image+ (int)(i*(slsmaxX/numSocketsPerSLSDetector)*bytesperchannel),
|
image+ (int)(i*(slsmaxX/numSocketsPerSLSDetector)*bytesperchannel),
|
||||||
(int)((slsmaxX/numSocketsPerSLSDetector)*bytesperchannel));
|
(int)((slsmaxX/numSocketsPerSLSDetector)*bytesperchannel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5853,7 +5860,7 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
|
|
||||||
//assemble data with no interleaving, assumed detectors appended vertically
|
//assemble data with no interleaving, assumed detectors appended vertically
|
||||||
else{
|
else{
|
||||||
memcpy((char*)multiframe+slsdatabytes*isocket,(char*)image,slsdatabytes);
|
memcpy(multiframe+slsdatabytes*isocket,image,slsdatabytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5877,6 +5884,7 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
|
|
||||||
//send data to callback
|
//send data to callback
|
||||||
if(running){
|
if(running){
|
||||||
|
/*
|
||||||
if (jungfrau) {
|
if (jungfrau) {
|
||||||
// with gain data
|
// with gain data
|
||||||
if (gainDataEnable) {
|
if (gainDataEnable) {
|
||||||
@ -5895,13 +5903,20 @@ void multiSlsDetector::readFrameFromReceiver(){
|
|||||||
}
|
}
|
||||||
fdata = decodeData(multiframe,nch);
|
fdata = decodeData(multiframe,nch);
|
||||||
if ((fdata) && (dataReady)){
|
if ((fdata) && (dataReady)){
|
||||||
thisData = new detectorData(fdata, NULL,NULL,getCurrentProgress(),currentFileName.c_str(),nx,ny, gdata);
|
thisData = new detectorData(fdata, NULL,NULL,getCurrentProgress(),currentFileName.c_str(),maxX,maxY, gdata);
|
||||||
dataReady(thisData, currentFrameIndex, currentSubFrameIndex, pCallbackArg);
|
dataReady(thisData, currentFrameIndex, currentSubFrameIndex, pCallbackArg);
|
||||||
delete thisData;
|
delete thisData;
|
||||||
fdata = NULL;
|
fdata = NULL;
|
||||||
gdata = NULL;
|
gdata = NULL;
|
||||||
//cout<<"Send frame #"<< currentFrameIndex << " to gui"<<endl;
|
//cout<<"Send frame #"<< currentFrameIndex << " to gui"<<endl;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
if(dataReady) {
|
||||||
|
thisData = new detectorData(multiframe, thisMultiDetector->dataBytes, NULL,NULL,getCurrentProgress(),currentFileName.c_str(),maxX,maxY);
|
||||||
|
dataReady(thisData, currentFrameIndex, currentSubFrameIndex, pCallbackArg);
|
||||||
|
delete thisData;
|
||||||
|
}
|
||||||
|
|
||||||
setCurrentProgress(currentAcquisitionIndex+1);
|
setCurrentProgress(currentAcquisitionIndex+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,10 @@ class detectorData {
|
|||||||
\param ny dimension in y (1D detector)
|
\param ny dimension in y (1D detector)
|
||||||
\param gval pointer to gain data (for jungfrau)
|
\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);
|
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;};
|
~detectorData() {if (values) delete [] values; if (errors) delete [] errors; if (angles) delete [] angles; if (gvalues) delete [] gvalues;};
|
||||||
//private:
|
//private:
|
||||||
|
char* cvalues;
|
||||||
|
int databytes;
|
||||||
double *values; /**< @short pointer to the data */
|
double *values; /**< @short pointer to the data */
|
||||||
double *errors; /**< @short pointer to the errors */
|
double *errors; /**< @short pointer to the errors */
|
||||||
double *angles;/**< @short pointer to the angles (NULL if no angular conversion) */
|
double *angles;/**< @short pointer to the angles (NULL if no angular conversion) */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user