From 633c64623961cbe5b6edb40b1d96da5c68709655 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 14 Aug 2019 15:31:18 +0200 Subject: [PATCH] eiger bug fix: 4 bit mode gap pixels, also added quad to shm --- slsDetectorGui/src/qDrawPlot.cpp | 8 +-- ....0.24.3 => eigerDetectorServerv4.1.0.24.4} | Bin 310955 -> 310955 bytes .../eigerDetectorServer/gitInfo.txt | 8 +-- .../eigerDetectorServer/gitInfoEiger.h | 6 +- .../multiSlsDetector/multiSlsDetector.cpp | 60 ++++++++++++------ .../multiSlsDetector/multiSlsDetector.h | 3 +- .../slsDetector/slsDetector.cpp | 19 ++++-- slsDetectorSoftware/slsDetector/slsDetector.h | 5 +- .../slsDetectorServer_funcs.c | 8 +++ slsReceiverSoftware/include/DataStreamer.h | 5 +- slsReceiverSoftware/include/ZmqSocket.h | 8 ++- slsReceiverSoftware/src/DataStreamer.cpp | 7 +- .../src/UDPStandardImplementation.cpp | 2 +- 13 files changed, 96 insertions(+), 43 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv4.1.0.24.3 => eigerDetectorServerv4.1.0.24.4} (71%) diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 6358522d1..6e9a4c848 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -129,8 +129,8 @@ void qDrawPlot::SetupWidgetWindow(){ break; case slsDetectorDefs::EIGER: if (myDet->setQuad()) { - nPixelsX = (myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X) / 2); - nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y) * 2; + nPixelsX /= 2; + nPixelsY *= 2; if (nPixelsX != nPixelsY) { --nPixelsX; } @@ -606,8 +606,8 @@ void qDrawPlot::SetScanArgument(int scanArg){ break; case slsDetectorDefs::EIGER: if (myDet->setQuad()) { - nPixelsX = (myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X) / 2); - nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y) * 2; + nPixelsX /= 2; + nPixelsY *= 2; if (nPixelsX != nPixelsY) { --nPixelsX; } diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.1.0.24.3 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.1.0.24.4 similarity index 71% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.1.0.24.3 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.1.0.24.4 index 812edf0982991b242129c9ce050f812d054fedf2..0b7255136552b19dd8fea205c1df3e46d085d99f 100755 GIT binary patch delta 28731 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 W$eh;!-Rr;-*FnHsTh2O!-2VkRD@lL= delta 28709 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index 5b10dceaa..8eb10d10c 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: c5f22757037a3aab60f5d91514d10d59440a29f6 -Revision: 358 +Repsitory UUID: 2a88bc6a1eac9777390af1d1fb9aa02960ebfe2d +Revision: 359 Branch: 4.1.0-rc Last Changed Author: Dhanya_Thattil -Last Changed Rev: 4126 -Last Changed Date: 2019-08-06 17:19:23.000000001 +0200 ./FebRegisterDefs.h +Last Changed Rev: 4130 +Last Changed Date: 2019-08-14 09:25:41.000000001 +0200 ./xparameters.h diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index 9008526fa..2307675e4 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "c5f22757037a3aab60f5d91514d10d59440a29f6" +#define GITREPUUID "2a88bc6a1eac9777390af1d1fb9aa02960ebfe2d" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x4126 -#define GITDATE 0x20190806 +#define GITREV 0x4130 +#define GITDATE 0x20190814 #define GITBRANCH "4.1.0-rc" diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index ecf4f14c1..1ee67092c 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4988,6 +4988,7 @@ void multiSlsDetector::readFrameFromReceiver() { int nDetPixelsX = 0; int nDetPixelsY = 0; bool gappixelsenable = false; + bool quadEnable = false; bool eiger = false; bool runningList[zmqSocket.size()], connectList[zmqSocket.size()]; int numRunning = 0; @@ -5072,6 +5073,7 @@ void multiSlsDetector::readFrameFromReceiver() { eiger = (doc["detType"].GetUint() == (int)EIGER) ? true : false; // gap pixels enable gappixelsenable = (doc["gappixels"].GetUint() == 0) ? false : true; + quadEnable = (doc["quad"].GetUint() == 0) ? false : true; #ifdef VERBOSE cprintf(BLUE, "(Debug) One Time Header Info:\n" @@ -5084,9 +5086,10 @@ void multiSlsDetector::readFrameFromReceiver() { "nX: %u\n" "nY: %u\n" "eiger: %d\n" - "gappixelsenable: %d\n", + "gappixelsenable: %d\n" + "quadEnable: %d\n", size, multisize, dynamicRange, bytesPerPixel, - nPixelsX, nPixelsY, nX, nY, eiger, gappixelsenable); + nPixelsX, nPixelsY, nX, nY, eiger, gappixelsenable, quadEnable); #endif } // each time, parse rest of header @@ -5154,12 +5157,24 @@ void multiSlsDetector::readFrameFromReceiver() { } } } - +#ifdef VERBOSE + cprintf(BLUE,"nPixelsX:%d, nPixelsY:%d nx:%d ny:%d quadEnable:%d\n", nDetPixelsX, nDetPixelsY, nX, nY, quadEnable); +#endif //send data to callback if (data) { // 4bit gap pixels if (dynamicRange == 4 && gappixelsenable) { - int n = processImageWithGapPixels(multiframe, multigappixels); + if (quadEnable) { + nDetPixelsX += 2; + nDetPixelsY += 2; + } else { + nDetPixelsX = nX * (nPixelsX + 3); + nDetPixelsY = nY * (nPixelsY + 1); + } +#ifdef VERBOSE + cprintf(RED,"Corrected nPixelsX:%d, nPixelsY:%d quadEnable:%d\n", nDetPixelsX, nDetPixelsY, quadEnable); +#endif + int n = processImageWithGapPixels(multiframe, multigappixels, quadEnable); thisData = new detectorData(NULL, NULL, NULL, getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multigappixels, n, dynamicRange, currentFileIndex); @@ -5211,14 +5226,23 @@ void multiSlsDetector::readFrameFromReceiver() { delete[] multigappixels; } -int multiSlsDetector::processImageWithGapPixels(char* image, char*& gpImage) { - // eiger 4 bit mode - int nxb = thisMultiDetector->numberOfDetector[X] * (512 + 3); - int nyb = thisMultiDetector->numberOfDetector[Y] * (256 + 1); - int gapdatabytes = nxb * nyb; - +int multiSlsDetector::processImageWithGapPixels(char* image, char*& gpImage, bool quadEnable) { + // eiger 4 bit mode (divided by 2 already) + int nxb = thisMultiDetector->numberOfDetector[X] * (512 + 3); + int nyb = thisMultiDetector->numberOfDetector[Y] * (256 + 1); + int nchipInRow = 4; int nxchip = thisMultiDetector->numberOfDetector[X] * 4; int nychip = thisMultiDetector->numberOfDetector[Y] * 1; + if (quadEnable) { + nxb = thisMultiDetector->numberOfDetector[X] * (256 + 1); + nyb = thisMultiDetector->numberOfDetector[Y] * (512 + 2); + nxchip /= 2; + nychip *= 2; + nchipInRow /= 2; + } + int gapdatabytes = nxb * nyb; + + // allocate if (gpImage == NULL) @@ -5234,13 +5258,13 @@ int multiSlsDetector::processImageWithGapPixels(char* image, char*& gpImage) { // copying line by line src = image; dst = gpImage; - for (int row = 0; row < nychip; ++row) { // for each chip in a row + for (int row = 0; row < nychip; ++row) { // for each chip row for (int ichipy = 0; ichipy < b1chipy; ++ichipy) { //for each row in a chip - for (int col = 0; col < nxchip; ++col) { + for (int col = 0; col < nxchip; ++col) { // for each chip in a row memcpy(dst, src, b1chipx); src += b1chipx; dst += b1chipx; - if ((col + 1) % 4) + if ((col + 1) % nchipInRow) // 1, 2, and 3rd chip, skip gap pixels ++dst; } } @@ -5253,11 +5277,11 @@ int multiSlsDetector::processImageWithGapPixels(char* image, char*& gpImage) { uint8_t temp, g1, g2; int mod; dst = gpImage; - for (int row = 0; row < nychip; ++row) { // for each chip in a row + for (int row = 0; row < nychip; ++row) { // for each chip row for (int ichipy = 0; ichipy < b1chipy; ++ichipy) { //for each row in a chip - for (int col = 0; col < nxchip; ++col) { + for (int col = 0; col < nxchip; ++col) { // for each chip in a row dst += b1chipx; - mod = (col + 1) % 4; + mod = (col + 1) % nchipInRow; // 1, 2, and 3rd chip, get gap pixels // copy gap pixel(chip 0, 1, 2) if (mod) { // neighbouring gap pixels to left @@ -5288,8 +5312,8 @@ int multiSlsDetector::processImageWithGapPixels(char* image, char*& gpImage) { { uint8_t temp, g1, g2; char* dst_prevline = 0; - dst = gpImage; - for (int row = 0; row < nychip; ++row) { // for each chip in a row + dst = gpImage; + for (int row = 0; row < nychip; ++row) { // for each chip row dst += (b1chipy * nxb); // horizontal copying of gap pixels from neighboring past line (bottom parts) if (row < nychip - 1) { diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index c6d940f8e..e33bfce44 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1926,9 +1926,10 @@ private: * add gap pixels to the image (only for Eiger in 4 bit mode) * @param image pointer to image without gap pixels * @param gpImage poiner to image with gap pixels, if NULL, allocated inside function + * @param quadEnable quad enabled * @returns number of data bytes of image with gap pixels */ - int processImageWithGapPixels(char* image, char*& gpImage); + int processImageWithGapPixels(char* image, char*& gpImage, bool quadEnable); /** Multi detector Id */ diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index e451d02e5..6baf8e1a1 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -752,6 +752,7 @@ void slsDetector::initializeDetectorStructure(detectorType type) { thisDetector->activated = true; thisDetector->receiver_deactivatedPaddingEnable = true; thisDetector->receiver_silentMode = false; + thisDetector->quadEnable = false; // get the detector parameters based on type detParameterList detlist; @@ -2367,6 +2368,12 @@ int slsDetector::updateDetectorNoWait() { getTotalNumberOfChannels(); } + if(thisDetector->myDetectorType == EIGER){ + n += controlSocket->ReceiveDataOnly( &nm,sizeof(int32_t)); + thisDetector->quadEnable = nm; + + } + if (!n) printf("n: %d\n", n); @@ -5306,6 +5313,9 @@ string slsDetector::setReceiver(string receiverIP) { if(thisDetector->myDetectorType == GOTTHARD) sendROI(-1, NULL); + if (thisDetector->myDetectorType == EIGER) { + setQuad(-1); + } } } @@ -9778,6 +9788,7 @@ int slsDetector::setQuad(int val) { setErrorMask((getErrorMask())|(SOME_ERROR)); } controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); + thisDetector->quadEnable = retval; disconnectControl(); if (ret==FORCE_UPDATE) updateDetector(); @@ -9790,11 +9801,11 @@ int slsDetector::setQuad(int val) { if (ret != FAIL) { ret = FAIL; if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ + if(val ==-1) { + val = thisDetector->quadEnable; + } #ifdef VERBOSE - if(val ==-1) - std::cout<< "Getting Receiver Quad mode" << endl; - else - std::cout<< "Setting Receiver Quad Mode to " << val << endl; + std::cout<< "Setting Receiver Quad Mode to " << val << endl; #endif if (connectData() == OK){ ret=thisReceiver->sendInt(fnum2,retval,val); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 4e70a30cb..adc8a3f6e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -19,7 +19,7 @@ class multiSlsDetector; class SharedMemory; class receiverInterface; -#define SLS_SHMVERSION 0x180629 +#define SLS_SHMVERSION 0x180630 #define NMODMAXX 24 #define NMODMAXY 24 #define NCHIPSMAX 10 @@ -384,6 +384,9 @@ private: /** silent receiver */ bool receiver_silentMode; + /** quad enable */ + bool quadEnable; + } sharedSlsDetector; diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index a97b87e99..8f575373c 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -3734,6 +3734,14 @@ int send_update(int file_des) { if (n < 0) return printSocketReadError(); +#ifdef EIGERD +#ifdef SLS_DETECTOR_FUNCTION_LIST + nm=getQuad(); +#endif + n = sendData(file_des,&nm,sizeof(int32_t),INT32); + if (n < 0) return printSocketReadError(); +#endif + if (lockStatus==0) { strcpy(lastClientIP,thisClientIP); } diff --git a/slsReceiverSoftware/include/DataStreamer.h b/slsReceiverSoftware/include/DataStreamer.h index cbf6cb6cb..bd88e6686 100644 --- a/slsReceiverSoftware/include/DataStreamer.h +++ b/slsReceiverSoftware/include/DataStreamer.h @@ -32,9 +32,10 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { * @param sm pointer to silent mode * @param nd pointer to number of detectors in each dimension * @param gpEnable pointer to gap pixels enable + * @param qe pointer to quad Enable */ DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, - uint64_t* fi, int fd, char* ajh, bool* sm, int* nd, bool* gpEnable); + uint64_t* fi, int fd, char* ajh, bool* sm, int* nd, bool* gpEnable, bool* qe); /** * Destructor @@ -227,5 +228,7 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { /** Gap Pixels Enable */ bool* gapPixelsEnable; + /** quad enable */ + bool* quadEnable; }; diff --git a/slsReceiverSoftware/include/ZmqSocket.h b/slsReceiverSoftware/include/ZmqSocket.h index 8124ccc2e..4addb0878 100644 --- a/slsReceiverSoftware/include/ZmqSocket.h +++ b/slsReceiverSoftware/include/ZmqSocket.h @@ -274,7 +274,7 @@ public: uint16_t modId = 0, uint16_t row = 0, uint16_t column = 0, uint16_t reserved = 0, uint32_t debug = 0, uint16_t roundRNumber = 0, uint8_t detType = 0, uint8_t version = 0, uint32_t gapPixelsEnable = 0, uint32_t flippedDataX = 0, - char* additionalJsonHeader = 0) { + uint32_t quadEnable = 0, char* additionalJsonHeader = 0) { char buf[MAX_STR_LENGTH] = ""; @@ -308,7 +308,8 @@ public: //additional stuff "\"gappixels\":%u, " - "\"flippedDataX\":%u" + "\"flippedDataX\":%u, " + "\"quad\":%u" ;//"}\n"; int length = sprintf(buf, jsonHeaderFormat, @@ -321,7 +322,8 @@ public: //additional stuff gapPixelsEnable, - flippedDataX + flippedDataX, + quadEnable ); if (additionalJsonHeader && strlen(additionalJsonHeader)) { length = sprintf(buf, "%s, %s}\n", buf, additionalJsonHeader); diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index 0c2c2f258..9d03c2e11 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -16,7 +16,7 @@ const std::string DataStreamer::TypeName = "DataStreamer"; DataStreamer::DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, - uint64_t* fi, int fd, char* ajh, bool* sm, int* nd, bool* gpEnable) : + uint64_t* fi, int fd, char* ajh, bool* sm, int* nd, bool* gpEnable, bool* qe) : ThreadObject(ind), runningFlag(0), generalData(0), @@ -33,7 +33,8 @@ DataStreamer::DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, firstAcquisitionIndex(0), firstMeasurementIndex(0), completeBuffer(0), - gapPixelsEnable(gpEnable) + gapPixelsEnable(gpEnable), + quadEnable(qe) { numDet[0] = nd[0]; numDet[1] = nd[1]; @@ -279,7 +280,7 @@ int DataStreamer::SendHeader(sls_receiver_header* rheader, uint32_t size, uint32 header.modId, header.row, header.column, header.reserved, header.debug, header.roundRNumber, header.detType, header.version, - *gapPixelsEnable ? 1 : 0, flippedDataX, + *gapPixelsEnable ? 1 : 0, flippedDataX, *quadEnable, additionJsonHeader ); } diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 5d280c8f6..ae7410db9 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -338,7 +338,7 @@ int UDPStandardImplementation::setDataStreamEnable(const bool enable) { nd[1] = 2; } DataStreamer* s = new DataStreamer(i, fifo[i], &dynamicRange, - &roi, &fileIndex, fd, additionalJsonHeader, &silentMode, (int*)nd, &gapPixelsEnable); + &roi, &fileIndex, fd, additionalJsonHeader, &silentMode, (int*)nd, &gapPixelsEnable, &quadEnable); dataStreamer.push_back(s); dataStreamer[i]->SetGeneralData(generalData); dataStreamer[i]->CreateZmqSockets(&numThreads, streamingPort, streamingSrcIP);