mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-23 06:50:02 +02:00
adjusted for jungfrau
This commit is contained in:
parent
50f8366bc2
commit
0e4c7a9494
@ -7,6 +7,7 @@
|
|||||||
*@short abstract for setting/getting properties of detector data
|
*@short abstract for setting/getting properties of detector data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sls_receiver_defs.h"
|
||||||
#include "receiver_defs.h"
|
#include "receiver_defs.h"
|
||||||
|
|
||||||
|
|
||||||
@ -14,6 +15,9 @@ class GeneralData {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/** DetectorType */
|
||||||
|
slsReceiverDefs::detectorType myDetectorType;
|
||||||
|
|
||||||
/** Number of Pixels in x axis */
|
/** Number of Pixels in x axis */
|
||||||
uint32_t nPixelsX;
|
uint32_t nPixelsX;
|
||||||
|
|
||||||
@ -67,8 +71,22 @@ public:
|
|||||||
|
|
||||||
/** Cosntructor */
|
/** Cosntructor */
|
||||||
GeneralData():
|
GeneralData():
|
||||||
|
myDetectorType(slsReceiverDefs::GENERIC),
|
||||||
|
nPixelsX(0),
|
||||||
|
nPixelsY(0),
|
||||||
|
headerSizeinPacket(0),
|
||||||
|
dataSize(0),
|
||||||
|
packetSize(0),
|
||||||
|
packetsPerFrame(0),
|
||||||
|
imageSize(0),
|
||||||
|
frameIndexMask(0),
|
||||||
|
frameIndexOffset(0),
|
||||||
packetIndexMask(0),
|
packetIndexMask(0),
|
||||||
packetIndexOffset(0),
|
packetIndexOffset(0),
|
||||||
|
maxFramesPerFile(0),
|
||||||
|
fifoBufferSize(0),
|
||||||
|
fifoBufferHeaderSize(0),
|
||||||
|
defaultFifoDepth(0),
|
||||||
threadsPerReceiver(1),
|
threadsPerReceiver(1),
|
||||||
headerPacketSize(0){};
|
headerPacketSize(0){};
|
||||||
|
|
||||||
@ -134,7 +152,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void Print() const {
|
virtual void Print() const {
|
||||||
printf("\n\nDetector Data Variables:\n");
|
printf("\n\nDetector Data Variables:\n");
|
||||||
printf( "Pixels X: %d\n"
|
printf( "myDetectorType:%s\n"
|
||||||
|
"Pixels X: %d\n"
|
||||||
"Pixels Y: %d\n"
|
"Pixels Y: %d\n"
|
||||||
"Header Size in Packet: %d\n"
|
"Header Size in Packet: %d\n"
|
||||||
"Data Size: %d\n"
|
"Data Size: %d\n"
|
||||||
@ -151,6 +170,7 @@ public:
|
|||||||
"Default Fifo Depth: %d\n"
|
"Default Fifo Depth: %d\n"
|
||||||
"Threads Per Receiver: %d\n"
|
"Threads Per Receiver: %d\n"
|
||||||
"Header Packet Size: %d\n",
|
"Header Packet Size: %d\n",
|
||||||
|
slsReceiverDefs::getDetectorType(myDetectorType).c_str(),
|
||||||
nPixelsX,
|
nPixelsX,
|
||||||
nPixelsY,
|
nPixelsY,
|
||||||
headerSizeinPacket,
|
headerSizeinPacket,
|
||||||
@ -178,6 +198,7 @@ class GotthardData : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
GotthardData(){
|
GotthardData(){
|
||||||
|
myDetectorType = slsReceiverDefs::GOTTHARD;
|
||||||
nPixelsX = 1280;
|
nPixelsX = 1280;
|
||||||
nPixelsY = 1;
|
nPixelsY = 1;
|
||||||
headerSizeinPacket = 4;
|
headerSizeinPacket = 4;
|
||||||
@ -202,6 +223,7 @@ class ShortGotthardData : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
ShortGotthardData(){
|
ShortGotthardData(){
|
||||||
|
myDetectorType = slsReceiverDefs::GOTTHARD;
|
||||||
nPixelsX = 256;
|
nPixelsX = 256;
|
||||||
nPixelsY = 1;
|
nPixelsY = 1;
|
||||||
headerSizeinPacket = 4;
|
headerSizeinPacket = 4;
|
||||||
@ -229,6 +251,7 @@ class PropixData : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
PropixData(){
|
PropixData(){
|
||||||
|
myDetectorType = slsReceiverDefs::PROPIX;
|
||||||
nPixelsX = 22;
|
nPixelsX = 22;
|
||||||
nPixelsY = 22;
|
nPixelsY = 22;
|
||||||
headerSizeinPacket = 4;
|
headerSizeinPacket = 4;
|
||||||
@ -256,6 +279,7 @@ class Moench02Data : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
Moench02Data(){
|
Moench02Data(){
|
||||||
|
myDetectorType = slsReceiverDefs::MOENCH;
|
||||||
nPixelsX = 160;
|
nPixelsX = 160;
|
||||||
nPixelsY = 160;
|
nPixelsY = 160;
|
||||||
headerSizeinPacket = 4;
|
headerSizeinPacket = 4;
|
||||||
@ -288,6 +312,7 @@ class Moench03Data : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
Moench03Data(){
|
Moench03Data(){
|
||||||
|
myDetectorType = slsReceiverDefs::MOENCH;
|
||||||
nPixelsX = 400;
|
nPixelsX = 400;
|
||||||
nPixelsY = 400;
|
nPixelsY = 400;
|
||||||
headerSizeinPacket = 22;
|
headerSizeinPacket = 22;
|
||||||
@ -315,6 +340,7 @@ class JCTBData : public GeneralData {
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
JCTBData(){
|
JCTBData(){
|
||||||
|
myDetectorType = slsReceiverDefs::JUNGFRAUCTB;
|
||||||
nPixelsX = 32;
|
nPixelsX = 32;
|
||||||
nPixelsY = 128;
|
nPixelsY = 128;
|
||||||
headerSizeinPacket = 22;
|
headerSizeinPacket = 22;
|
||||||
@ -358,6 +384,7 @@ private:
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
JungfrauData(){
|
JungfrauData(){
|
||||||
|
myDetectorType = slsReceiverDefs::JUNGFRAU;
|
||||||
nPixelsX = (256*4);
|
nPixelsX = (256*4);
|
||||||
nPixelsY = 256;
|
nPixelsY = 256;
|
||||||
headerSizeinPacket = 22;
|
headerSizeinPacket = 22;
|
||||||
@ -401,7 +428,7 @@ private:
|
|||||||
subFrameNumber = -1;
|
subFrameNumber = -1;
|
||||||
jfrau_packet_header_t* header = (jfrau_packet_header_t*)(packetData);
|
jfrau_packet_header_t* header = (jfrau_packet_header_t*)(packetData);
|
||||||
frameNumber = (uint64_t)(*( (uint32_t*) header->frameNumber));
|
frameNumber = (uint64_t)(*( (uint32_t*) header->frameNumber));
|
||||||
packetNumber = packetsPerFrame - 1 -(uint32_t)(*( (uint8_t*) header->packetNumber));
|
packetNumber = packetsPerFrame - 1 -(uint32_t)(*( (uint8_t*) header->packetNumber));//old firmware (not needed in new firmware)
|
||||||
bunchId = (*((uint64_t*) header->bunchid));
|
bunchId = (*((uint64_t*) header->bunchid));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,6 +470,7 @@ private:
|
|||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
EigerData(){
|
EigerData(){
|
||||||
|
myDetectorType = slsReceiverDefs::EIGER;
|
||||||
nPixelsX = (256*2);
|
nPixelsX = (256*2);
|
||||||
nPixelsY = 256;
|
nPixelsY = 256;
|
||||||
headerSizeinPacket = 8;
|
headerSizeinPacket = 8;
|
||||||
@ -470,7 +498,7 @@ private:
|
|||||||
void GetHeaderInfo(int index, char* packetData, uint64_t& frameNumber, uint32_t& packetNumber) const {
|
void GetHeaderInfo(int index, char* packetData, uint64_t& frameNumber, uint32_t& packetNumber) const {
|
||||||
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(packetData + footerOffset);
|
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(packetData + footerOffset);
|
||||||
frameNumber = (uint64_t)((*( (uint64_t*) footer)) & frameIndexMask);
|
frameNumber = (uint64_t)((*( (uint64_t*) footer)) & frameIndexMask);
|
||||||
packetNumber = (uint32_t)(*( (uint16_t*) footer->packetNumber))-1;
|
packetNumber = ((uint32_t)(*( (uint16_t*) footer->packetNumber)))-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -489,7 +517,7 @@ private:
|
|||||||
subFrameNumber = -1;
|
subFrameNumber = -1;
|
||||||
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(packetData + footerOffset);
|
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(packetData + footerOffset);
|
||||||
frameNumber = (uint64_t)((*( (uint64_t*) footer)) & frameIndexMask);
|
frameNumber = (uint64_t)((*( (uint64_t*) footer)) & frameIndexMask);
|
||||||
packetNumber = (uint32_t)(*( (uint16_t*) footer->packetNumber))-1;
|
packetNumber = ((uint32_t)(*( (uint16_t*) footer->packetNumber)))-1;
|
||||||
if (dynamicRange == 32) {
|
if (dynamicRange == 32) {
|
||||||
eiger_packet_header_t* header = (eiger_packet_header_t*) (packetData);
|
eiger_packet_header_t* header = (eiger_packet_header_t*) (packetData);
|
||||||
subFrameNumber = (uint64_t) *( (uint32_t*) header->subFrameNumber);
|
subFrameNumber = (uint64_t) *( (uint32_t*) header->subFrameNumber);
|
||||||
|
@ -258,16 +258,21 @@ void Listener::ThreadExecution() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//error check
|
//error check, (should not be here) if not transmitting yet (previous if) rc should be > 0
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
cprintf(BG_RED,"Error:(Weird), UDP Sockets not shut down, but received nothing\n");
|
if (carryOverFlag) {
|
||||||
fifo->FreeAddress(buffer);
|
uint64_t fnum=0;uint32_t pnum=0;
|
||||||
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*((uint32_t*)buffer)) = rc;
|
(*((uint32_t*)buffer)) = rc;
|
||||||
//for those returning earlier
|
(*((uint64_t*)(buffer + FIFO_HEADER_NUMBYTES ))) = currentFrameIndex; //for those returning earlier
|
||||||
(*((uint64_t*)(buffer + FIFO_HEADER_NUMBYTES ))) = currentFrameIndex;
|
|
||||||
currentFrameIndex++;
|
currentFrameIndex++;
|
||||||
|
|
||||||
//push into fifo
|
//push into fifo
|
||||||
@ -295,6 +300,9 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
int dsize = generalData->dataSize;
|
int dsize = generalData->dataSize;
|
||||||
bool isHeaderEmpty = true;
|
bool isHeaderEmpty = true;
|
||||||
|
|
||||||
|
//only for jungfrau as we look only at pnum
|
||||||
|
uint32_t expectpnum = 0;
|
||||||
|
|
||||||
|
|
||||||
//reset to -1
|
//reset to -1
|
||||||
memset(buf,0xFF,dsize);
|
memset(buf,0xFF,dsize);
|
||||||
@ -305,6 +313,8 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
//check if its the current image packet
|
//check if its the current image packet
|
||||||
generalData->GetHeaderInfo(index, carryOverPacket, *dynamicRange, fnum, pnum, snum, bid);
|
generalData->GetHeaderInfo(index, carryOverPacket, *dynamicRange, fnum, pnum, snum, bid);
|
||||||
if (fnum != currentFrameIndex) {
|
if (fnum != currentFrameIndex) {
|
||||||
|
if (fnum < currentFrameIndex)
|
||||||
|
return 0;
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
}
|
}
|
||||||
carryOverFlag = false;
|
carryOverFlag = false;
|
||||||
@ -315,15 +325,20 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
(*((uint64_t*)(buf - FILE_FRAME_HEADER_SIZE + FILE_FRAME_HDR_FNUM_SIZE + FILE_FRAME_HDR_SNUM_SIZE))) = bid;
|
(*((uint64_t*)(buf - FILE_FRAME_HEADER_SIZE + FILE_FRAME_HDR_FNUM_SIZE + FILE_FRAME_HDR_SNUM_SIZE))) = bid;
|
||||||
isHeaderEmpty = false;
|
isHeaderEmpty = false;
|
||||||
}
|
}
|
||||||
|
expectpnum = pnum+1; //for jungfrau
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//until last packet
|
||||||
while (pnum < (generalData->packetsPerFrame-1)) {
|
while (pnum < (generalData->packetsPerFrame-1)) {
|
||||||
|
|
||||||
//listen to new packet
|
//listen to new packet
|
||||||
rc += udpSocket->ReceiveDataOnly(listeningPacket);
|
int curr_rc = udpSocket->ReceiveDataOnly(listeningPacket);
|
||||||
if (rc <= 0) return 0;
|
if(curr_rc <= 0) {
|
||||||
|
if (rc <= 0) return 0; //empty image
|
||||||
|
return generalData->imageSize; //empty packet now, but not empty image
|
||||||
|
}
|
||||||
|
rc += curr_rc;
|
||||||
|
|
||||||
//update parameters
|
//update parameters
|
||||||
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
||||||
@ -331,14 +346,26 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
generalData->GetHeaderInfo(index, listeningPacket, *dynamicRange, fnum, pnum, snum, bid);
|
generalData->GetHeaderInfo(index, listeningPacket, *dynamicRange, fnum, pnum, snum, bid);
|
||||||
lastCaughtFrameIndex = fnum;
|
lastCaughtFrameIndex = fnum;
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
if (!index && !pnum)
|
if (!index)
|
||||||
cprintf(GREEN,"Listening %d: fnum:%lld, pnum:%d\n", index, (long long int)fnum, pnum);
|
cprintf(GREEN,"Listening %d: fnum:%lld, pnum:%d\n", index, (long long int)fnum, pnum);
|
||||||
#endif
|
#endif
|
||||||
if (!measurementStartedFlag)
|
if (!measurementStartedFlag)
|
||||||
RecordFirstIndices(fnum);
|
RecordFirstIndices(fnum);
|
||||||
|
|
||||||
//future packet
|
|
||||||
if (fnum != currentFrameIndex) {
|
|
||||||
|
//future packet (jungfrau) look at packet numbers
|
||||||
|
if (generalData->myDetectorType == JUNGFRAU) {
|
||||||
|
if (pnum < expectpnum) {
|
||||||
|
cprintf(RED,"setting carry over flag to true\n");
|
||||||
|
carryOverFlag = true;
|
||||||
|
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
|
||||||
|
return generalData->imageSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//future packet by looking at image number (all other detectors)
|
||||||
|
else if (fnum != currentFrameIndex) {
|
||||||
|
cprintf(RED,"setting carry over flag to true\n");
|
||||||
carryOverFlag = true;
|
carryOverFlag = true;
|
||||||
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
|
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
@ -352,6 +379,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
(*((uint64_t*)(buf - FILE_FRAME_HEADER_SIZE + FILE_FRAME_HDR_FNUM_SIZE + FILE_FRAME_HDR_SNUM_SIZE))) = bid;
|
(*((uint64_t*)(buf - FILE_FRAME_HEADER_SIZE + FILE_FRAME_HDR_FNUM_SIZE + FILE_FRAME_HDR_SNUM_SIZE))) = bid;
|
||||||
isHeaderEmpty = false;
|
isHeaderEmpty = false;
|
||||||
}
|
}
|
||||||
|
expectpnum = pnum+1; //for jungfrau
|
||||||
}
|
}
|
||||||
|
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
|
@ -562,15 +562,16 @@ void UDPStandardImplementation::stopReceiver(){
|
|||||||
for (int i = 0; i < numThreads; i++) {
|
for (int i = 0; i < numThreads; i++) {
|
||||||
tot += dataProcessor[i]->GetNumFramesCaught();
|
tot += dataProcessor[i]->GetNumFramesCaught();
|
||||||
|
|
||||||
if (dataProcessor[i]->GetNumFramesCaught() < numberOfFrames) {
|
uint64_t missingpackets = numberOfFrames*generalData->packetsPerFrame-listener[i]->GetTotalPacketsCaught();
|
||||||
|
if (missingpackets) {
|
||||||
cprintf(RED, "\n[Port %d]\n",udpPortNum[i]);
|
cprintf(RED, "\n[Port %d]\n",udpPortNum[i]);
|
||||||
cprintf(RED, "Missing Packets\t\t: %lld\n",(long long int)numberOfFrames*generalData->packetsPerFrame-listener[i]->GetTotalPacketsCaught());
|
cprintf(RED, "Missing Packets\t\t: %lld\n",(long long int)missingpackets);
|
||||||
cprintf(RED, "Frames Caught\t\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
cprintf(RED, "Frames Processed\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
||||||
cprintf(RED, "Last Frame Caught\t: %lld\n",(long long int)listener[i]->GetLastFrameIndexCaught());
|
cprintf(RED, "Last Frame Caught\t: %lld\n",(long long int)listener[i]->GetLastFrameIndexCaught());
|
||||||
}else{
|
}else{
|
||||||
cprintf(GREEN, "\n[Port %d]\n",udpPortNum[i]);
|
cprintf(GREEN, "\n[Port %d]\n",udpPortNum[i]);
|
||||||
cprintf(GREEN, "Missing Packets\t\t: %lld\n",(long long int)numberOfFrames*generalData->packetsPerFrame-listener[i]->GetTotalPacketsCaught());
|
cprintf(GREEN, "Missing Packets\t\t: %lld\n",(long long int)missingpackets);
|
||||||
cprintf(GREEN, "Frames Caught\t\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
cprintf(GREEN, "Frames Processed\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
||||||
cprintf(GREEN, "Last Frame Caught\t: %lld\n",(long long int)listener[i]->GetLastFrameIndexCaught());
|
cprintf(GREEN, "Last Frame Caught\t: %lld\n",(long long int)listener[i]->GetLastFrameIndexCaught());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user