mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 03:40:04 +02:00
jungfrau end column fixed
This commit is contained in:
parent
bd363b2c93
commit
a182ca3660
@ -24,6 +24,9 @@ public:
|
|||||||
/** Number of Pixels in y axis */
|
/** Number of Pixels in y axis */
|
||||||
uint32_t nPixelsY;
|
uint32_t nPixelsY;
|
||||||
|
|
||||||
|
/** emptybuffer (mainly for jungfrau) */
|
||||||
|
uint32_t emptyHeader;
|
||||||
|
|
||||||
/** Size of header in Packet */
|
/** Size of header in Packet */
|
||||||
uint32_t headerSizeinPacket;
|
uint32_t headerSizeinPacket;
|
||||||
|
|
||||||
@ -54,9 +57,6 @@ public:
|
|||||||
/** Max Frames per binary file */
|
/** Max Frames per binary file */
|
||||||
uint32_t maxFramesPerFile;
|
uint32_t maxFramesPerFile;
|
||||||
|
|
||||||
/** emptybuffer (mainly for jungfrau) */
|
|
||||||
uint32_t emptyHeader;
|
|
||||||
|
|
||||||
/** Data size that is saved into the fifo buffer at a time*/
|
/** Data size that is saved into the fifo buffer at a time*/
|
||||||
uint32_t fifoBufferSize;
|
uint32_t fifoBufferSize;
|
||||||
|
|
||||||
@ -89,6 +89,7 @@ public:
|
|||||||
myDetectorType(slsReceiverDefs::GENERIC),
|
myDetectorType(slsReceiverDefs::GENERIC),
|
||||||
nPixelsX(0),
|
nPixelsX(0),
|
||||||
nPixelsY(0),
|
nPixelsY(0),
|
||||||
|
emptyHeader(0),
|
||||||
headerSizeinPacket(0),
|
headerSizeinPacket(0),
|
||||||
dataSize(0),
|
dataSize(0),
|
||||||
packetSize(0),
|
packetSize(0),
|
||||||
@ -99,7 +100,6 @@ public:
|
|||||||
packetIndexMask(0),
|
packetIndexMask(0),
|
||||||
packetIndexOffset(0),
|
packetIndexOffset(0),
|
||||||
maxFramesPerFile(0),
|
maxFramesPerFile(0),
|
||||||
emptyHeader(0),
|
|
||||||
fifoBufferSize(0),
|
fifoBufferSize(0),
|
||||||
fifoBufferHeaderSize(0),
|
fifoBufferHeaderSize(0),
|
||||||
defaultFifoDepth(0),
|
defaultFifoDepth(0),
|
||||||
@ -176,6 +176,7 @@ public:
|
|||||||
printf( "myDetectorType:%s\n"
|
printf( "myDetectorType:%s\n"
|
||||||
"Pixels X: %u\n"
|
"Pixels X: %u\n"
|
||||||
"Pixels Y: %u\n"
|
"Pixels Y: %u\n"
|
||||||
|
"Empty Header: %u\n"
|
||||||
"Header Size in Packet: %u\n"
|
"Header Size in Packet: %u\n"
|
||||||
"Data Size: %u\n"
|
"Data Size: %u\n"
|
||||||
"Packet Size: %u\n"
|
"Packet Size: %u\n"
|
||||||
@ -186,7 +187,6 @@ public:
|
|||||||
"Packet Index Mask: 0x%x\n"
|
"Packet Index Mask: 0x%x\n"
|
||||||
"Packet Index Offset: %u\n"
|
"Packet Index Offset: %u\n"
|
||||||
"Max Frames Per File: %u\n"
|
"Max Frames Per File: %u\n"
|
||||||
"Empty Header: %u\n"
|
|
||||||
"Fifo Buffer Size: %u\n"
|
"Fifo Buffer Size: %u\n"
|
||||||
"Fifo Buffer Header Size: %u\n"
|
"Fifo Buffer Header Size: %u\n"
|
||||||
"Default Fifo Depth: %u\n"
|
"Default Fifo Depth: %u\n"
|
||||||
@ -199,6 +199,7 @@ public:
|
|||||||
,temp.c_str(),//.c_str() modifies, using temp string for thread safety
|
,temp.c_str(),//.c_str() modifies, using temp string for thread safety
|
||||||
nPixelsX,
|
nPixelsX,
|
||||||
nPixelsY,
|
nPixelsY,
|
||||||
|
emptyHeader,
|
||||||
headerSizeinPacket,
|
headerSizeinPacket,
|
||||||
dataSize,
|
dataSize,
|
||||||
packetSize,
|
packetSize,
|
||||||
@ -216,8 +217,7 @@ public:
|
|||||||
headerPacketSize,
|
headerPacketSize,
|
||||||
nPixelsX_Streamer,
|
nPixelsX_Streamer,
|
||||||
nPixelsY_Streamer,
|
nPixelsY_Streamer,
|
||||||
imageSize_Streamer,
|
imageSize_Streamer);
|
||||||
emptyHeader);
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -453,13 +453,13 @@ class JungfrauData : public GeneralData {
|
|||||||
myDetectorType = slsReceiverDefs::JUNGFRAU;
|
myDetectorType = slsReceiverDefs::JUNGFRAU;
|
||||||
nPixelsX = (256*4);
|
nPixelsX = (256*4);
|
||||||
nPixelsY = 256;
|
nPixelsY = 256;
|
||||||
headerSizeinPacket = sizeof(slsReceiverDefs::sls_detector_header);
|
emptyHeader = 6;
|
||||||
|
headerSizeinPacket = emptyHeader + sizeof(slsReceiverDefs::sls_detector_header);
|
||||||
dataSize = 8192;
|
dataSize = 8192;
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
packetsPerFrame = 128;
|
packetsPerFrame = 128;
|
||||||
imageSize = dataSize*packetsPerFrame;
|
imageSize = dataSize*packetsPerFrame;
|
||||||
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
|
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
|
||||||
emptyHeader = 6;
|
|
||||||
fifoBufferSize = imageSize;
|
fifoBufferSize = imageSize;
|
||||||
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
|
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
|
||||||
defaultFifoDepth = 2500;
|
defaultFifoDepth = 2500;
|
||||||
|
@ -151,8 +151,8 @@ void Listener::ResetParametersforNewMeasurement(){
|
|||||||
memset(carryOverPacket,0,generalData->packetSize);
|
memset(carryOverPacket,0,generalData->packetSize);
|
||||||
if (listeningPacket)
|
if (listeningPacket)
|
||||||
delete [] listeningPacket;
|
delete [] listeningPacket;
|
||||||
listeningPacket = new char[generalData->packetSize + generalData->emptyHeader];
|
listeningPacket = new char[generalData->packetSize];
|
||||||
memset(listeningPacket,0,generalData->packetSize + generalData->emptyHeader);
|
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
|
//error check, (should not be here) if not transmitting yet (previous if) rc should be > 0
|
||||||
if (rc <= 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");
|
cprintf(BG_RED,"Error:(Weird Early self shut down), UDP Sockets not shut down, but received nothing\n");
|
||||||
StopListening(buffer);
|
StopListening(buffer);
|
||||||
return;
|
return;
|
||||||
@ -316,40 +297,52 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
uint64_t fnum = 0, bid = 0;
|
uint64_t fnum = 0, bid = 0;
|
||||||
uint32_t pnum = 0, snum = 0;
|
uint32_t pnum = 0, snum = 0;
|
||||||
uint32_t numpackets = 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;
|
bool isHeaderEmpty = true;
|
||||||
sls_detector_header* header = 0;
|
sls_detector_header* header = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//reset to -1
|
//reset to -1
|
||||||
memset(buf + generalData->fifoBufferHeaderSize, 0xFF, dsize);
|
memset(buf, 0, fifohsize);
|
||||||
|
memset(buf + fifohsize, 0xFF, dsize);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//look for carry over
|
//look for carry over
|
||||||
if (carryOverFlag) {
|
if (carryOverFlag) {
|
||||||
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 (myDetectorType == JUNGFRAU) {
|
||||||
header = (sls_detector_header*) (carryOverPacket);
|
header = (sls_detector_header*) (carryOverPacket + esize);
|
||||||
fnum = header->frameNumber;
|
fnum = header->frameNumber;
|
||||||
pnum = header->packetNumber;
|
pnum = header->packetNumber;
|
||||||
}
|
}
|
||||||
// -------------------old header -----------------------------------------------------------------------------
|
// -------------------old header -----------------------------------------------------------------------------
|
||||||
else {
|
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)
|
if (fnum < currentFrameIndex) {
|
||||||
|
cprintf(BG_RED,"Error:(Weird), With carry flag: Frame number less than current frame number\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memcpy(buf + fifohsize + (pnum * dsize),
|
||||||
|
carryOverPacket + hsize, dsize);
|
||||||
carryOverFlag = false;
|
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
|
//writer header
|
||||||
if(isHeaderEmpty) {
|
if(isHeaderEmpty) {
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
@ -363,22 +356,22 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
header->frameNumber = fnum;
|
header->frameNumber = fnum;
|
||||||
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
|
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
|
||||||
header->expLength = snum;
|
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->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;
|
header->version = (uint8_t) SLS_DETECTOR_HEADER_VERSION;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------
|
||||||
isHeaderEmpty = false;
|
isHeaderEmpty = false;
|
||||||
}
|
}
|
||||||
numpackets++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//until last packet isHeaderEmpty to account for gotthard short frame, else never entering this loop)
|
//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
|
//listen to new packet
|
||||||
rc = 0;
|
rc = 0;
|
||||||
if (udpSocket){
|
if (udpSocket){
|
||||||
@ -386,31 +379,33 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
}
|
}
|
||||||
if(rc <= 0) {
|
if(rc <= 0) {
|
||||||
if (numpackets == 0) return 0; //empty image
|
if (numpackets == 0) return 0; //empty image
|
||||||
|
|
||||||
|
header->packetNumber = numpackets; //number of packets caught
|
||||||
return generalData->imageSize; //empty packet now, but not empty image
|
return generalData->imageSize; //empty packet now, but not empty image
|
||||||
}
|
}
|
||||||
numpackets++;
|
|
||||||
|
|
||||||
//update parameters
|
//update parameters
|
||||||
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
||||||
numTotalPacketsCaught++;
|
numTotalPacketsCaught++;
|
||||||
|
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
if (myDetectorType == JUNGFRAU) {
|
if (myDetectorType == JUNGFRAU) {
|
||||||
//listeningPacket += generalData->emptyHeader;
|
header = (sls_detector_header*) (listeningPacket + esize);
|
||||||
header = (sls_detector_header*) (listeningPacket + generalData->emptyHeader);
|
|
||||||
fnum = header->frameNumber;
|
fnum = header->frameNumber;
|
||||||
pnum = header->packetNumber;
|
pnum = header->packetNumber;
|
||||||
}
|
}
|
||||||
// -------------------old header -----------------------------------------------------------------------------
|
// -------------------old header -----------------------------------------------------------------------------
|
||||||
else {
|
else {
|
||||||
generalData->GetHeaderInfo(index, listeningPacket, *dynamicRange, fnum, pnum, snum, bid);
|
generalData->GetHeaderInfo(index, listeningPacket + esize,
|
||||||
|
*dynamicRange, fnum, pnum, snum, bid);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
lastCaughtFrameIndex = fnum;
|
lastCaughtFrameIndex = fnum;
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
//if (!index)
|
//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
|
#endif
|
||||||
if (!measurementStartedFlag)
|
if (!measurementStartedFlag)
|
||||||
RecordFirstIndices(fnum);
|
RecordFirstIndices(fnum);
|
||||||
@ -419,14 +414,18 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
|
|
||||||
//future packet by looking at image number (all other detectors)
|
//future packet by looking at image number (all other detectors)
|
||||||
if (fnum != currentFrameIndex) {
|
if (fnum != currentFrameIndex) {
|
||||||
cprintf(RED,"setting carry over flag to true\n");
|
//cprintf(RED,"setting carry over flag to true\n");
|
||||||
carryOverFlag = true;
|
carryOverFlag = true;
|
||||||
memcpy(carryOverPacket,listeningPacket + generalData->emptyHeader, generalData->packetSize);
|
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
|
||||||
|
|
||||||
|
header->packetNumber = numpackets; //number of packets caught
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
//copy packet
|
//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) {
|
if(isHeaderEmpty) {
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
if (myDetectorType == JUNGFRAU) {
|
if (myDetectorType == JUNGFRAU) {
|
||||||
@ -439,9 +438,8 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
header->frameNumber = fnum;
|
header->frameNumber = fnum;
|
||||||
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
|
if (generalData->myDetectorType == EIGER && *dynamicRange == 32)
|
||||||
header->expLength = snum;
|
header->expLength = snum;
|
||||||
header->packetNumber = generalData->packetsPerFrame; /*in the end..*/
|
|
||||||
/*header->xCoord = index; given by det packet, also for ycoord, zcoord */
|
/*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;
|
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;
|
return generalData->imageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user