diff --git a/slsReceiverSoftware/include/DataStreamer.h b/slsReceiverSoftware/include/DataStreamer.h index 2564fa3d5..cecaa24ba 100644 --- a/slsReceiverSoftware/include/DataStreamer.h +++ b/slsReceiverSoftware/include/DataStreamer.h @@ -153,10 +153,12 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { /** * Create and send Json Header * @param header header of image + * @param nx number of pixels in x dim + * @param ny number of pixels in y dim * @param dummy true if its a dummy header * @returns 0 if error, else 1 */ - int SendHeader(sls_detector_header* header, bool dummy = false); + int SendHeader(sls_detector_header* header, uint32_t nx = 0, uint32_t ny = 0, bool dummy = true); /** type of thread */ static const std::string TypeName; diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index d4fa76679..55e923990 100644 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -71,13 +71,13 @@ public: uint32_t headerPacketSize; /** Streaming (for ROI - mainly short Gotthard) - Number of Pixels in x axis */ - uint32_t nPixelsX_Streamer; + uint32_t nPixelsXComplete; /** Streaming (for ROI - mainly short Gotthard) - Number of Pixels in y axis */ - uint32_t nPixelsY_Streamer; + uint32_t nPixelsYComplete; /** Streaming (for ROI - mainly short Gotthard) - Image size (in bytes) */ - uint32_t imageSize_Streamer; + uint32_t imageSizeComplete; @@ -102,9 +102,9 @@ public: defaultFifoDepth(0), threadsPerReceiver(1), headerPacketSize(0), - nPixelsX_Streamer(0), - nPixelsY_Streamer(0), - imageSize_Streamer(0) + nPixelsXComplete(0), + nPixelsYComplete(0), + imageSizeComplete(0) {}; /** Destructor */ @@ -204,9 +204,9 @@ public: FILE_LOG(logDEBUG) << "Default Fifo Depth: " << defaultFifoDepth; FILE_LOG(logDEBUG) << "Threads Per Receiver: " << threadsPerReceiver; FILE_LOG(logDEBUG) << "Header Packet Size: " << headerPacketSize; - FILE_LOG(logDEBUG) << "Streamer Pixels X: " << nPixelsX_Streamer; - FILE_LOG(logDEBUG) << "Streamer Pixels Y: " << nPixelsY_Streamer; - FILE_LOG(logDEBUG) << "Streamer Image Size: " << imageSize_Streamer; + FILE_LOG(logDEBUG) << "Complete Pixels X: " << nPixelsXComplete; + FILE_LOG(logDEBUG) << "Complete Pixels Y: " << nPixelsYComplete; + FILE_LOG(logDEBUG) << "Complete Image Size: " << imageSizeComplete; }; }; @@ -231,9 +231,6 @@ class GotthardData : public GeneralData { maxFramesPerFile = MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 50000; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; }; @@ -256,9 +253,9 @@ class ShortGotthardData : public GeneralData { maxFramesPerFile = SHORT_MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 50000; - nPixelsX_Streamer = 1280; - nPixelsY_Streamer = 1; - imageSize_Streamer = 1280 * 2; + nPixelsXComplete = 1280; + nPixelsYComplete = 1; + imageSizeComplete = 1280 * 2; }; /** @@ -320,9 +317,6 @@ class PropixData : public GeneralData { maxFramesPerFile = MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 50000; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; }; @@ -350,9 +344,6 @@ class Moench02Data : public GeneralData { maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; /** @@ -385,9 +376,6 @@ class Moench03Data : public GeneralData { maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; }; @@ -426,9 +414,6 @@ private: maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; /** @@ -499,9 +484,6 @@ class JungfrauData : public GeneralData { maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; @@ -527,9 +509,6 @@ class EigerData : public GeneralData { defaultFifoDepth = 100; threadsPerReceiver = 2; headerPacketSize = 40; - nPixelsX_Streamer = nPixelsX; - nPixelsY_Streamer = nPixelsY; - imageSize_Streamer = imageSize; }; /** diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index be7103f71..5f83f9514 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -114,8 +114,8 @@ void DataStreamer::ResetParametersforNewMeasurement(char* fname){ completeBuffer = 0; } if (*shortFrameEnable >= 0) { - completeBuffer = new char[generalData->imageSize_Streamer]; - memset(completeBuffer, 0, generalData->imageSize_Streamer); + completeBuffer = new char[generalData->imageSizeComplete]; + memset(completeBuffer, 0, generalData->imageSizeComplete); } } @@ -208,7 +208,7 @@ void DataStreamer::StopProcessing(char* buf) { #endif sls_detector_header* header = (sls_detector_header*) (buf); //send dummy header and data - if (!SendHeader(header, true)) + if (!SendHeader(header, 0, 0, true)) bprintf(RED,"Error: Could not send zmq dummy header for streamer %d\n", index); fifo->FreeAddress(buf); @@ -234,19 +234,25 @@ void DataStreamer::ProcessAnImage(char* buf) { RecordFirstIndices(fnum); } - if (!SendHeader(header)) - bprintf(RED,"Error: Could not send zmq header for fnum %lld and streamer %d\n", - (long long int) fnum, index); - - //shortframe gotthard - data sending + //shortframe gotthard if (completeBuffer) { + + if (!SendHeader(header, generalData->nPixelsXComplete, generalData->nPixelsYComplete, false)) + bprintf(RED,"Error: Could not send zmq header for fnum %lld and streamer %d\n", + (long long int) fnum, index); + memcpy(completeBuffer + ((generalData->imageSize)**shortFrameEnable), buf + sizeof(sls_detector_header), generalData->imageSize); - if (!zmqSocket->SendData(completeBuffer, generalData->imageSize_Streamer)) + if (!zmqSocket->SendData(completeBuffer, generalData->imageSizeComplete)) bprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n", (long long int) fnum, index); } - //normal - data sending + //normal else { + + if (!SendHeader(header, generalData->nPixelsX, generalData->nPixelsY, false)) + bprintf(RED,"Error: Could not send zmq header for fnum %lld and streamer %d\n", + (long long int) fnum, index); + if (!zmqSocket->SendData(buf + sizeof(sls_detector_header), generalData->imageSize)) bprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n", (long long int) fnum, index); @@ -255,7 +261,7 @@ void DataStreamer::ProcessAnImage(char* buf) { -int DataStreamer::SendHeader(sls_detector_header* header, bool dummy) { +int DataStreamer::SendHeader(sls_detector_header* header, uint32_t nx, uint32_t ny, bool dummy) { if (dummy) return zmqSocket->SendHeaderData(index, dummy,SLS_DETECTOR_JSON_HEADER_VERSION); @@ -264,7 +270,7 @@ int DataStreamer::SendHeader(sls_detector_header* header, bool dummy) { uint64_t acquisitionIndex = header->frameNumber - firstAcquisitionIndex; return zmqSocket->SendHeaderData(index, dummy, SLS_DETECTOR_JSON_HEADER_VERSION, *dynamicRange, - generalData->nPixelsX_Streamer, generalData->nPixelsY_Streamer, + nx, ny, acquisitionIndex, frameIndex, fileNametoStream, header->frameNumber, header->expLength, header->packetNumber, header->bunchId, header->timestamp, header->modId, header->xCoord, header->yCoord, header->zCoord,