bug (from eiger_newheader) with imagesize of fifo different from actual image size

This commit is contained in:
Dhanya Maliakal 2017-06-16 13:53:27 +02:00
parent 8d6ceccf87
commit 3007694b77
7 changed files with 22 additions and 26 deletions

View File

@ -57,9 +57,6 @@ public:
/** Max Frames per binary file */ /** Max Frames per binary file */
uint32_t maxFramesPerFile; uint32_t maxFramesPerFile;
/** Data size that is saved into the fifo buffer at a time*/
uint32_t fifoBufferSize;
/** Header size of data saved into fifo buffer at a time*/ /** Header size of data saved into fifo buffer at a time*/
uint32_t fifoBufferHeaderSize; uint32_t fifoBufferHeaderSize;
@ -100,7 +97,6 @@ public:
packetIndexMask(0), packetIndexMask(0),
packetIndexOffset(0), packetIndexOffset(0),
maxFramesPerFile(0), maxFramesPerFile(0),
fifoBufferSize(0),
fifoBufferHeaderSize(0), fifoBufferHeaderSize(0),
defaultFifoDepth(0), defaultFifoDepth(0),
threadsPerReceiver(1), threadsPerReceiver(1),
@ -210,7 +206,6 @@ public:
packetIndexMask, packetIndexMask,
packetIndexOffset, packetIndexOffset,
maxFramesPerFile, maxFramesPerFile,
fifoBufferSize,
fifoBufferHeaderSize, fifoBufferHeaderSize,
defaultFifoDepth, defaultFifoDepth,
threadsPerReceiver, threadsPerReceiver,
@ -240,7 +235,6 @@ class GotthardData : public GeneralData {
frameIndexOffset = 1; frameIndexOffset = 1;
packetIndexMask = 1; packetIndexMask = 1;
maxFramesPerFile = MAX_FRAMES_PER_FILE; maxFramesPerFile = MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 25000; defaultFifoDepth = 25000;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -266,7 +260,6 @@ class ShortGotthardData : public GeneralData {
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
frameIndexMask = 0xFFFFFFFF; frameIndexMask = 0xFFFFFFFF;
maxFramesPerFile = SHORT_MAX_FRAMES_PER_FILE; maxFramesPerFile = SHORT_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 25000; defaultFifoDepth = 25000;
nPixelsX_Streamer = 1280; nPixelsX_Streamer = 1280;
@ -331,7 +324,6 @@ class PropixData : public GeneralData {
frameIndexOffset = 1; frameIndexOffset = 1;
packetIndexMask = 1; packetIndexMask = 1;
maxFramesPerFile = MAX_FRAMES_PER_FILE; maxFramesPerFile = MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 25000; defaultFifoDepth = 25000;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -362,7 +354,6 @@ class Moench02Data : public GeneralData {
frameIndexOffset = 8; frameIndexOffset = 8;
packetIndexMask = 0xFF; packetIndexMask = 0xFF;
maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE; maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 2500; defaultFifoDepth = 2500;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -398,7 +389,6 @@ class Moench03Data : public GeneralData {
frameIndexOffset = (6+8); frameIndexOffset = (6+8);
packetIndexMask = 0xFFFFFFFF; packetIndexMask = 0xFFFFFFFF;
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 2500; defaultFifoDepth = 2500;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -426,7 +416,6 @@ class JCTBData : public GeneralData {
packetsPerFrame = 1; packetsPerFrame = 1;
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE; maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 2500; defaultFifoDepth = 2500;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -460,7 +449,6 @@ class JungfrauData : public GeneralData {
packetsPerFrame = 128; packetsPerFrame = 128;
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 2500; defaultFifoDepth = 2500;
nPixelsX_Streamer = nPixelsX; nPixelsX_Streamer = nPixelsX;
@ -509,7 +497,6 @@ private:
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
frameIndexMask = 0xffffff; frameIndexMask = 0xffffff;
maxFramesPerFile = EIGER_MAX_FRAMES_PER_FILE; maxFramesPerFile = EIGER_MAX_FRAMES_PER_FILE;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 100; defaultFifoDepth = 100;
footerOffset = headerSizeinPacket + dataSize; footerOffset = headerSizeinPacket + dataSize;
@ -564,7 +551,6 @@ private:
void SetDynamicRange(int dr, bool tgEnable) { void SetDynamicRange(int dr, bool tgEnable) {
packetsPerFrame = (tgEnable ? 4 : 16) * dr; packetsPerFrame = (tgEnable ? 4 : 16) * dr;
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
fifoBufferSize = packetSize*packetsPerFrame;
} }
/** /**
@ -574,10 +560,9 @@ private:
*/ */
void SetTenGigaEnable(bool tgEnable, int dr) { void SetTenGigaEnable(bool tgEnable, int dr) {
dataSize = (tgEnable ? 4096 : 1024); dataSize = (tgEnable ? 4096 : 1024);
packetSize = (tgEnable ? 4112 : 1040);; packetSize = (tgEnable ? 4112 : 1040);
packetsPerFrame = (tgEnable ? 4 : 16) * dr; packetsPerFrame = (tgEnable ? 4 : 16) * dr;
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
fifoBufferSize = packetSize*packetsPerFrame;
footerOffset = packetHeaderSize+dataSize; footerOffset = packetHeaderSize+dataSize;
}; };

View File

@ -276,6 +276,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
/** Listening buffer for one packet - might be removed when we can peek and eiger fnum is in header */ /** Listening buffer for one packet - might be removed when we can peek and eiger fnum is in header */
char* listeningPacket; char* listeningPacket;
/** if the standard header is implemented in firmware */
bool standardheader;
}; };

View File

@ -17,7 +17,7 @@
#include <rapidjson/document.h> //json header in zmq stream #include <rapidjson/document.h> //json header in zmq stream
using namespace rapidjson; using namespace rapidjson;
#define DEFAULT_ZMQ_PORTNO 40001 #define DEFAULT_ZMQ_PORTNO 70001
class ZmqSocket { class ZmqSocket {

View File

@ -330,7 +330,7 @@ void DataProcessor::ProcessAnImage(char* buf) {
if (*fileWriteEnable) if (*fileWriteEnable)
file->WriteToFile(buf, generalData->fifoBufferSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump); file->WriteToFile(buf, generalData->imageSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump);
if (rawDataReadyCallBack) { if (rawDataReadyCallBack) {
rawDataReadyCallBack( rawDataReadyCallBack(

View File

@ -29,7 +29,8 @@ File::File(int ind, uint32_t maxf, const uint32_t* ppf,
numUnitsPerDetector(nunits), numUnitsPerDetector(nunits),
numImages(nf), numImages(nf),
dynamicRange(dr), dynamicRange(dr),
udpPortNumber(portno) udpPortNumber(portno),
fifo(f)
{ {
master = index?false:true; master = index?false:true;

View File

@ -58,6 +58,15 @@ Listener::Listener(detectorType dtype, Fifo*& f, runStatus* s, uint32_t* portno,
} }
NumberofListeners++; NumberofListeners++;
FILE_LOG (logDEBUG) << "Number of Listeners: " << NumberofListeners; FILE_LOG (logDEBUG) << "Number of Listeners: " << NumberofListeners;
switch(myDetectorType){
case JUNGFRAU:
standardheader = true;
break;
default:
standardheader = false;
break;
}
} }
@ -318,7 +327,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
//if(!index) cprintf(RED,"carry flag\n"); //if(!index) cprintf(RED,"carry flag\n");
//check if its the current image packet //check if its the current image packet
// -------------------------- new header ---------------------------------------------------------------------- // -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) { if (standardheader) {
old_header = (sls_detector_header*) (carryOverPacket + esize); old_header = (sls_detector_header*) (carryOverPacket + esize);
fnum = old_header->frameNumber; fnum = old_header->frameNumber;
pnum = old_header->packetNumber; pnum = old_header->packetNumber;
@ -346,7 +355,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
//writer header //writer header
if(isHeaderEmpty) { if(isHeaderEmpty) {
// -------------------------- new header ---------------------------------------------------------------------- // -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) { if (standardheader) {
memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header)); memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header));
} }
// -------------------old header ------------------------------------------------------------------------------ // -------------------old header ------------------------------------------------------------------------------
@ -387,7 +396,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
numPacketsCaught++; //record immediately to get more time before socket shutdown numPacketsCaught++; //record immediately to get more time before socket shutdown
// -------------------------- new header ---------------------------------------------------------------------- // -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) { if (standardheader) {
old_header = (sls_detector_header*) (listeningPacket + esize); old_header = (sls_detector_header*) (listeningPacket + esize);
fnum = old_header->frameNumber; fnum = old_header->frameNumber;
pnum = old_header->packetNumber; pnum = old_header->packetNumber;
@ -426,7 +435,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
numpackets++; //number of packets in this image (each time its copied to buf) numpackets++; //number of packets in this image (each time its copied to buf)
if(isHeaderEmpty) { if(isHeaderEmpty) {
// -------------------------- new header ---------------------------------------------------------------------- // -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) { if (standardheader) {
memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header)); memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header));
} }
// -------------------old header ------------------------------------------------------------------------------ // -------------------old header ------------------------------------------------------------------------------

View File

@ -443,7 +443,7 @@ int UDPStandardImplementation::startReceiver(char *c) {
//callbacks //callbacks
if (startAcquisitionCallBack) { if (startAcquisitionCallBack) {
startAcquisitionCallBack(filePath, fileName, fileIndex, startAcquisitionCallBack(filePath, fileName, fileIndex,
(generalData->fifoBufferSize) * numberofJobs + (generalData->fifoBufferHeaderSize), pStartAcquisition); (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize), pStartAcquisition);
if (rawDataReadyCallBack != NULL) { if (rawDataReadyCallBack != NULL) {
cout << "Data Write has been defined externally" << endl; cout << "Data Write has been defined externally" << endl;
} }
@ -728,7 +728,7 @@ int UDPStandardImplementation::SetupFifoStructure() {
//create fifo structure //create fifo structure
bool success = true; bool success = true;
fifo.push_back( new Fifo ( fifo.push_back( new Fifo (
(generalData->fifoBufferSize) * numberofJobs + (generalData->fifoBufferHeaderSize), (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize),
fifoDepth, success)); fifoDepth, success));
if (!success) { if (!success) {
cprintf(BG_RED,"Error: Could not allocate memory for fifo structure of index %d\n", i); cprintf(BG_RED,"Error: Could not allocate memory for fifo structure of index %d\n", i);