jungfrau end column fixed

This commit is contained in:
Dhanya Maliakal 2017-05-16 11:18:36 +02:00
parent bd363b2c93
commit a182ca3660
2 changed files with 51 additions and 52 deletions

View File

@ -24,6 +24,9 @@ public:
/** Number of Pixels in y axis */
uint32_t nPixelsY;
/** emptybuffer (mainly for jungfrau) */
uint32_t emptyHeader;
/** Size of header in Packet */
uint32_t headerSizeinPacket;
@ -54,9 +57,6 @@ public:
/** Max Frames per binary file */
uint32_t maxFramesPerFile;
/** emptybuffer (mainly for jungfrau) */
uint32_t emptyHeader;
/** Data size that is saved into the fifo buffer at a time*/
uint32_t fifoBufferSize;
@ -89,6 +89,7 @@ public:
myDetectorType(slsReceiverDefs::GENERIC),
nPixelsX(0),
nPixelsY(0),
emptyHeader(0),
headerSizeinPacket(0),
dataSize(0),
packetSize(0),
@ -99,7 +100,6 @@ public:
packetIndexMask(0),
packetIndexOffset(0),
maxFramesPerFile(0),
emptyHeader(0),
fifoBufferSize(0),
fifoBufferHeaderSize(0),
defaultFifoDepth(0),
@ -176,6 +176,7 @@ public:
printf( "myDetectorType:%s\n"
"Pixels X: %u\n"
"Pixels Y: %u\n"
"Empty Header: %u\n"
"Header Size in Packet: %u\n"
"Data Size: %u\n"
"Packet Size: %u\n"
@ -186,7 +187,6 @@ public:
"Packet Index Mask: 0x%x\n"
"Packet Index Offset: %u\n"
"Max Frames Per File: %u\n"
"Empty Header: %u\n"
"Fifo Buffer Size: %u\n"
"Fifo Buffer Header Size: %u\n"
"Default Fifo Depth: %u\n"
@ -199,6 +199,7 @@ public:
,temp.c_str(),//.c_str() modifies, using temp string for thread safety
nPixelsX,
nPixelsY,
emptyHeader,
headerSizeinPacket,
dataSize,
packetSize,
@ -216,8 +217,7 @@ public:
headerPacketSize,
nPixelsX_Streamer,
nPixelsY_Streamer,
imageSize_Streamer,
emptyHeader);
imageSize_Streamer);
};
};
@ -453,13 +453,13 @@ class JungfrauData : public GeneralData {
myDetectorType = slsReceiverDefs::JUNGFRAU;
nPixelsX = (256*4);
nPixelsY = 256;
headerSizeinPacket = sizeof(slsReceiverDefs::sls_detector_header);
emptyHeader = 6;
headerSizeinPacket = emptyHeader + sizeof(slsReceiverDefs::sls_detector_header);
dataSize = 8192;
packetSize = headerSizeinPacket + dataSize;
packetsPerFrame = 128;
imageSize = dataSize*packetsPerFrame;
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
emptyHeader = 6;
fifoBufferSize = imageSize;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 2500;

View File

@ -151,8 +151,8 @@ void Listener::ResetParametersforNewMeasurement(){
memset(carryOverPacket,0,generalData->packetSize);
if (listeningPacket)
delete [] listeningPacket;
listeningPacket = new char[generalData->packetSize + generalData->emptyHeader];
memset(listeningPacket,0,generalData->packetSize + generalData->emptyHeader);
listeningPacket = new char[generalData->packetSize];
memset(listeningPacket,0,generalData->packetSize);
}
@ -265,25 +265,6 @@ void Listener::ThreadExecution() {
//error check, (should not be here) if not transmitting yet (previous if) rc should be > 0
if (rc <= 0) {
if (carryOverFlag) {
uint64_t fnum=0;uint32_t pnum=0;
// -------------------------- new header -------------------------------------------------
if (myDetectorType == JUNGFRAU) {
sls_detector_header* header = (sls_detector_header*) (carryOverPacket);
fnum = header->frameNumber;
pnum = header->packetNumber;
}
// -------------------old header -------------------------------------------------
else {
generalData->GetHeaderInfo(index, carryOverPacket, fnum, pnum);
}
//---------------------------------------------------------------------------------------
if (fnum < currentFrameIndex)
cprintf(BG_RED,"Error:(Weird Early self shut down), Frame number less than current frame number\n");
}else
cprintf(BG_RED,"Error:(Weird Early self shut down), UDP Sockets not shut down, but received nothing\n");
StopListening(buffer);
return;
@ -316,40 +297,52 @@ uint32_t Listener::ListenToAnImage(char* buf) {
uint64_t fnum = 0, bid = 0;
uint32_t pnum = 0, snum = 0;
uint32_t numpackets = 0;
int dsize = generalData->dataSize;
uint32_t dsize = generalData->dataSize;
uint32_t hsize = generalData->headerSizeinPacket; //(includes empty header)
uint32_t esize = generalData->emptyHeader;
uint32_t fifohsize = generalData->fifoBufferHeaderSize;
uint32_t pperFrame = generalData->packetsPerFrame;
bool isHeaderEmpty = true;
sls_detector_header* header = 0;
//reset to -1
memset(buf + generalData->fifoBufferHeaderSize, 0xFF, dsize);
memset(buf, 0, fifohsize);
memset(buf + fifohsize, 0xFF, dsize);
//look for carry over
if (carryOverFlag) {
if(!index) cprintf(RED,"carry flag\n");
//if(!index) cprintf(RED,"carry flag\n");
//check if its the current image packet
// -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) {
header = (sls_detector_header*) (carryOverPacket);
header = (sls_detector_header*) (carryOverPacket + esize);
fnum = header->frameNumber;
pnum = header->packetNumber;
}
// -------------------old header -----------------------------------------------------------------------------
else {
generalData->GetHeaderInfo(index, carryOverPacket, *dynamicRange, fnum, pnum, snum, bid);
generalData->GetHeaderInfo(index, carryOverPacket + esize,
*dynamicRange, fnum, pnum, snum, bid);
}
//------------------------------------------------------------------------------------------------------------
if (fnum != currentFrameIndex) {
if (fnum < currentFrameIndex)
if (fnum < currentFrameIndex) {
cprintf(BG_RED,"Error:(Weird), With carry flag: Frame number less than current frame number\n");
return 0;
}
return generalData->imageSize;
}
memcpy(buf + fifohsize + (pnum * dsize),
carryOverPacket + hsize, dsize);
carryOverFlag = false;
memcpy(buf + generalData->fifoBufferHeaderSize + (pnum * dsize), carryOverPacket + generalData->headerSizeinPacket, dsize);
numpackets++; //number of packets in this image (each time its copied to buf)
//writer header
if(isHeaderEmpty) {
// -------------------------- new header ----------------------------------------------------------------------
@ -363,22 +356,22 @@ uint32_t Listener::ListenToAnImage(char* buf) {
header->frameNumber = fnum;
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
header->expLength = snum;
header->packetNumber = generalData->packetsPerFrame; /*in the end..*/
header->packetNumber = pperFrame;
/*header->xCoord = index; given by det packet, also for ycoord, zcoord */
header->detType = (uint8_t) generalData->myDetectorType; /*given by det packet */
header->detType = (uint8_t) generalData->myDetectorType;
header->version = (uint8_t) SLS_DETECTOR_HEADER_VERSION;
}
//------------------------------------------------------------------------------------------------------------
isHeaderEmpty = false;
}
numpackets++;
}
//until last packet isHeaderEmpty to account for gotthard short frame, else never entering this loop)
while ( numpackets < (generalData->packetsPerFrame)) {
while ( numpackets < pperFrame) {
//listen to new packet
rc = 0;
if (udpSocket){
@ -386,31 +379,33 @@ uint32_t Listener::ListenToAnImage(char* buf) {
}
if(rc <= 0) {
if (numpackets == 0) return 0; //empty image
header->packetNumber = numpackets; //number of packets caught
return generalData->imageSize; //empty packet now, but not empty image
}
numpackets++;
//update parameters
numPacketsCaught++; //record immediately to get more time before socket shutdown
numPacketsCaught++; //record immediately to get more time before socket shutdown
numTotalPacketsCaught++;
// -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) {
//listeningPacket += generalData->emptyHeader;
header = (sls_detector_header*) (listeningPacket + generalData->emptyHeader);
header = (sls_detector_header*) (listeningPacket + esize);
fnum = header->frameNumber;
pnum = header->packetNumber;
}
// -------------------old header -----------------------------------------------------------------------------
else {
generalData->GetHeaderInfo(index, listeningPacket, *dynamicRange, fnum, pnum, snum, bid);
generalData->GetHeaderInfo(index, listeningPacket + esize,
*dynamicRange, fnum, pnum, snum, bid);
}
//------------------------------------------------------------------------------------------------------------
lastCaughtFrameIndex = fnum;
#ifdef VERBOSE
//if (!index)
cprintf(GREEN,"Listening %d: currentfindex:%lu, fnum:%lu, pnum:%u numpackets:%u\n", index,currentFrameIndex, fnum, pnum, numpackets);
cprintf(GREEN,"Listening %d: currentfindex:%lu, fnum:%lu, pnum:%u numpackets:%u\n",
index,currentFrameIndex, fnum, pnum, numpackets);
#endif
if (!measurementStartedFlag)
RecordFirstIndices(fnum);
@ -419,14 +414,18 @@ uint32_t Listener::ListenToAnImage(char* buf) {
//future packet by looking at image number (all other detectors)
if (fnum != currentFrameIndex) {
cprintf(RED,"setting carry over flag to true\n");
//cprintf(RED,"setting carry over flag to true\n");
carryOverFlag = true;
memcpy(carryOverPacket,listeningPacket + generalData->emptyHeader, generalData->packetSize);
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
header->packetNumber = numpackets; //number of packets caught
return generalData->imageSize;
}
//copy packet
memcpy(buf + generalData->fifoBufferHeaderSize + (pnum * dsize), listeningPacket + generalData->emptyHeader + generalData->headerSizeinPacket, dsize);
memcpy(buf + fifohsize + (pnum * dsize),
listeningPacket + hsize, dsize);
numpackets++; //number of packets in this image (each time its copied to buf)
if(isHeaderEmpty) {
// -------------------------- new header ----------------------------------------------------------------------
if (myDetectorType == JUNGFRAU) {
@ -439,9 +438,8 @@ uint32_t Listener::ListenToAnImage(char* buf) {
header->frameNumber = fnum;
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
header->expLength = snum;
header->packetNumber = generalData->packetsPerFrame; /*in the end..*/
/*header->xCoord = index; given by det packet, also for ycoord, zcoord */
header->detType = (uint8_t) generalData->myDetectorType; /*given by det packet */
header->detType = (uint8_t) generalData->myDetectorType;
header->version = (uint8_t) SLS_DETECTOR_HEADER_VERSION;
}
//------------------------------------------------------------------------------------------------------------
@ -449,6 +447,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
}
}
header->packetNumber = numpackets; //number of packets caught
return generalData->imageSize;
}