From 255f9e3feebe217588dc936bcb8ddb662db660ec Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Thu, 11 Dec 2014 14:16:43 +0100 Subject: [PATCH] eiger: trimbits changed such that it works for multi modules, ;general: loading multislsdetectr list with y dir first, updating the readframefromreceiver to load all the data interswapped for 16 bit; nthframe works better --- .../eigerDetectorServer/FebControl.c | 4 +- .../eigerDetectorServer/Makefile | 2 +- .../bin/eigerDetectorServer | Bin 237703 -> 237703 bytes .../slsDetectorFunctionList.c | 8 +-- .../multiSlsDetector/multiSlsDetector.cpp | 56 ++++++++++++------ .../slsDetectorAnalysis/postProcessing.cpp | 4 +- 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index 099e64079..434cf69d1 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -1027,7 +1027,7 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ for(i=0;i<8;i++){ // column loop i //printf("i:%d\t\t",i); - if(Module_TopAddressIsValid(&modules[0])){ + if(Module_TopAddressIsValid(&modules[1])){ trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_l+i])<<((7-i)*4);//low trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_l+i])>>3)<<((7-i)*4);//upper trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_r+i])<<((7-i)*4);//low @@ -1043,7 +1043,7 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ } //end supercolumn loop sc } //end row loop - if(Module_TopAddressIsValid(&modules[0])){ + if(Module_TopAddressIsValid(&modules[1])){ if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile index 046fd22eb..26b190032 100755 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile @@ -1,6 +1,6 @@ CC = powerpc-4xx-softfloat-gcc CCX = powerpc-4xx-softfloat-g++ -CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT #-DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index bb5c40f33ca0359ff0ae78fa9e2c9aca735072c3..6911f0645dae98e259da0f9c0851242ba2c14cd2 100755 GIT binary patch delta 24087 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 5fa6b7bab..15de3e24f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -143,10 +143,10 @@ int initDetector(){ Feb_Control_CheckSetup(); //top or bottom - bottom = Feb_Control_IsBottomModule(); - // if(getDetectorNumber()==0xbeb016) -// bottom = 0; - //else bottom = 1; + //bottom = Feb_Control_IsBottomModule(); + if(getDetectorNumber()==0xbeb031) + bottom = 0; + else bottom = 1; if(bottom) printf("BOTTOM ***************\n"); diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 527fa82d9..179215f7f 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -376,32 +376,33 @@ void multiSlsDetector::updateOffsets(){ for (int i=1; inumberOfDetectors; i++) { if (detectors[i]) { - //incrementing in x direction - if ((maxChanX == -1) || ((maxChanX > 0) && ((offsetX + numX) < maxChanX))){ - offsetX += detectors[i]->getMaxNumberOfChannels(X); - maxX += detectors[i]->getMaxNumberOfChannels(X); - numX += detectors[i]->getTotalNumberOfChannels(X); + //incrementing in y direction + if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + numY) < maxChanY))){ + offsetY += detectors[i]->getMaxNumberOfChannels(Y); + maxY += detectors[i]->getMaxNumberOfChannels(Y); + numY += detectors[i]->getTotalNumberOfChannels(Y); } //incrementing in y direction else{ - offsetX = 0; - numX = 0; - maxX = 0; - thisMultiDetector->maxNumberOfChannel[X] = 0; - offsetY += detectors[i]->getMaxNumberOfChannels(Y); - if ((maxChanY == -1) || ((maxChanY > 0) && (offsetY <= maxChanY))){ - numY += detectors[i]->getTotalNumberOfChannels(Y); - maxY += detectors[i]->getMaxNumberOfChannels(Y); + offsetY = 0; + numY = 0; + maxY = 0; + thisMultiDetector->maxNumberOfChannel[Y] = 0; + if ((maxChanX == -1) || ((maxChanX > 0) && (offsetX <= maxChanX))){ + offsetX += detectors[i]->getMaxNumberOfChannels(X); + numX += detectors[i]->getTotalNumberOfChannels(X); + maxX += detectors[i]->getMaxNumberOfChannels(X); }else{ - cout<<"Detector at position " << i << "exceeds maximum channels allowed for complete detector set in y dimension also!" << endl; - numY += detectors[i]->getTotalNumberOfChannels(Y); - maxY += detectors[i]->getMaxNumberOfChannels(Y); + offsetX += detectors[i]->getMaxNumberOfChannels(X); + numX += detectors[i]->getTotalNumberOfChannels(X); + maxX += detectors[i]->getMaxNumberOfChannels(X); + cout<<"Detector at position " << i << "exceeds maximum channels allowed for complete detector set in X dimension also!" << endl; } } thisMultiDetector->offsetX[i] = offsetX; thisMultiDetector->offsetY[i] = offsetY; - cout << "Detector at position: " << i << " x offset:" << thisMultiDetector->offsetX[i] << " y offset:" << thisMultiDetector->offsetY[i] << endl; + cout << "Detector at position" << i << ": x offset:" << thisMultiDetector->offsetX[i] << " y offset:" << thisMultiDetector->offsetY[i] << endl; if(numX > thisMultiDetector->numberOfChannel[X]) thisMultiDetector->numberOfChannel[X] = numX; if(numY > thisMultiDetector->numberOfChannel[Y]) @@ -4539,11 +4540,17 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){ } int n; + int i,k,offsetX, offsetY, maxX, maxY;; int* retval=new int[nel]; int *retdet, *p=retval; string fullFName=""; string ext=""; + if(getDetectorsType() == EIGER){ + maxX = thisMultiDetector->numberOfChannel[X]; + maxY = thisMultiDetector->numberOfChannel[Y]; + } + for (int id=0; idnumberOfDetectors; id++) { if (detectors[id]) { @@ -4552,9 +4559,20 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){ setErrorMask(getErrorMask()|(1<getDataBytes(); - memcpy(p,retdet,n); + + if(getDetectorsType() == EIGER){ + k=detectors[id]->getMaxNumberOfChannels(X)*2;/**bit mode*/ + offsetY = ((maxY - (thisMultiDetector->offsetY[id] + detectors[id]->getMaxNumberOfChannels(Y))) * maxX)*2;/**bit mode*/ + offsetX = thisMultiDetector->offsetX[id]*2; + for(i=0; i< 256;i++){ + memcpy((((char*)p) + offsetY + offsetX + (i*maxX*2)/**bit mode*/) ,(((char*)retdet) + (i*k)),k); + } + } + else{ + memcpy(p,retdet,n); + p+=n/sizeof(int); + } delete [] retdet; - p+=n/sizeof(int); //concatenate filenames if(!fullFName.length()){ fullFName.assign(fileIO::getFileName()); diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index ffb943c04..cf947247a 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -472,7 +472,7 @@ void* postProcessing::processData(int delflag) { //if nth frame if(nthframe){ - newData = true; + /*newData = true;//unnecessary to read every data, 09.12.2014**/ //and no gui if(!dataReady){ std::cout << "Error: receiver read freq is set to " << nthframe << " but should be > 0 only when using gui." << std::endl; @@ -543,7 +543,7 @@ void* postProcessing::processData(int delflag) { delete thisData; fdata = NULL; progress = currentfIndex; - if(!nthframe) + /*if(!nthframe) //unnecessary to read every data, 09.12.2014**/ newData = false; } }