eiger reading master slave top bottom configuration from firmware;not reading from file anymore, serial is hardcoded for each master: also bug changes in gui getting frame from receiver in postprocessing

This commit is contained in:
Dhanya Maliakal
2015-02-23 15:13:14 +01:00
parent b2c7944014
commit d658799b20
16 changed files with 394 additions and 376 deletions

View File

@ -4542,7 +4542,7 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
return NULL;
}
int n;
int n,complete=OK;
int i,k,offsetX, offsetY, maxX, maxY; double dr;
int* retval=new int[nel];
int *retdet, *p=retval;
@ -4560,42 +4560,45 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
retdet=detectors[id]->readFrameFromReceiver(fName,fIndex);
if(detectors[id]->getErrorMask())
setErrorMask(getErrorMask()|(1<<id));
if ((retdet) &&(fIndex!=-1)) {
n=detectors[id]->getDataBytes();
if(getDetectorsType() == EIGER){
//cout << "fname:"<<fName<<" findex:"<<fIndex<<endl;
//cout<<"n:"<<n<<endl;
//cout<<"maxchan:"<<detectors[id]->getMaxNumberOfChannels()<<" n:"<<n<<endl;
dr = (double)n/detectors[id]->getMaxNumberOfChannels();
//cout << "dr:"<<dr<<endl;
k=(int)(detectors[id]->getMaxNumberOfChannels(X)*dr);//bit mode
//cout << "k:"<<k<<endl;
offsetY = (int)(((maxY - (thisMultiDetector->offsetY[id] + detectors[id]->getMaxNumberOfChannels(Y))) * maxX)*dr);//bit mode
offsetX = (int)(thisMultiDetector->offsetX[id]*dr);
//cout << "offsetY"<<offsetY<< " offsetX:"<<offsetX<<endl;
if (retdet){
if (fIndex==-1)
complete = FAIL;
else{
n=detectors[id]->getDataBytes();
if(getDetectorsType() == EIGER){
//cout << "fname:"<<fName<<" findex:"<<fIndex<<endl;
//cout<<"n:"<<n<<endl;
//cout<<"maxchan:"<<detectors[id]->getMaxNumberOfChannels()<<" n:"<<n<<endl;
dr = (double)n/detectors[id]->getMaxNumberOfChannels();
//cout << "dr:"<<dr<<endl;
k=(int)(detectors[id]->getMaxNumberOfChannels(X)*dr);//bit mode
//cout << "k:"<<k<<endl;
offsetY = (int)(((maxY - (thisMultiDetector->offsetY[id] + detectors[id]->getMaxNumberOfChannels(Y))) * maxX)*dr);//bit mode
offsetX = (int)(thisMultiDetector->offsetX[id]*dr);
//cout << "offsetY"<<offsetY<< " offsetX:"<<offsetX<<endl;
for(i=0; i< 256;i++){
memcpy((((char*)p) + offsetY + offsetX + ((int)(i*maxX*dr))) ,(((char*)retdet) + (i*k)),k);//bit mode
}
}
else{
memcpy(p,retdet,n);
p+=n/sizeof(int);
}
delete [] retdet;
//concatenate filenames
if(!fullFName.length()){
fullFName.assign(fileIO::getFileName());
if (strrchr(fName,'.')!=NULL){
ext.assign(fName);
size_t dot = ext.rfind(".");
if(dot != string::npos)
ext = ext.erase(0,dot);
else
ext = "";
}
else{
memcpy(p,retdet,n);
p+=n/sizeof(int);
}
delete [] retdet;
//concatenate filenames
if(!fullFName.length()){
fullFName.assign(fileIO::getFileName());
if (strrchr(fName,'.')!=NULL){
ext.assign(fName);
size_t dot = ext.rfind(".");
if(dot != string::npos)
ext = ext.erase(0,dot);
else
ext = "";
}
}
fullFName.append(getReceiverFileNameToConcatenate(fName));
}
fullFName.append(getReceiverFileNameToConcatenate(fName));
}else {
#ifdef VERBOSE
cout << "Receiver for detector " << id << " does not have data left " << endl;
@ -4607,6 +4610,9 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
}
fullFName.append(ext);
strcpy(fName,fullFName.c_str());
//if some of the receivers did not give data, dont count it
if((getDetectorsType() == EIGER) &&(complete ==FAIL))
fIndex = -1;
return retval;
};