mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 11:50:03 +02:00
works for missing packets and image reconstruction
This commit is contained in:
parent
5c4d55af6b
commit
b0bedc516d
@ -591,7 +591,9 @@ private:
|
||||
/** If file created successfully for all Writer Threads */
|
||||
bool fileCreateSuccess;
|
||||
|
||||
char fileHeader[MAX_NUMBER_OF_WRITER_THREADS][MAX_STR_LENGTH];
|
||||
const static int FILE_HEADER_SIZE = 400;
|
||||
|
||||
char fileHeader[MAX_NUMBER_OF_WRITER_THREADS][FILE_HEADER_SIZE];
|
||||
|
||||
|
||||
|
||||
@ -661,9 +663,8 @@ private:
|
||||
/** Total fifo size */
|
||||
uint32_t fifoSize;
|
||||
|
||||
/** Missing Packet identifier value */
|
||||
const static uint16_t missingPacketValue = 0xFFFF;
|
||||
const static uint16_t deactivatedPacketValue = 0xFEFE;
|
||||
/** Missing Packet */
|
||||
int missingPacketinFile;
|
||||
|
||||
/** Dummy Packet identifier value */
|
||||
const static uint32_t dummyPacketValue = 0xFFFFFFFF;
|
||||
|
@ -1586,7 +1586,7 @@ int UDPStandardImplementation::createNewFile(int ithread){
|
||||
|
||||
//write file header
|
||||
if(myDetectorType == EIGER)
|
||||
fwrite((void*)fileHeader[ithread], 1, strlen(fileHeader[ithread]), sfilefd[ithread]);
|
||||
fwrite((void*)fileHeader[ithread], 1, FILE_HEADER_SIZE, sfilefd[ithread]);
|
||||
}
|
||||
|
||||
//reset counters for each new file
|
||||
@ -1823,7 +1823,7 @@ void UDPStandardImplementation::startDataCallback(){
|
||||
offset+= onePacketSize;
|
||||
//send header
|
||||
//update frame details
|
||||
frameIndex = fnum;if(frameIndex==-1) cprintf(RED,"frameindex = -1, 222\n");
|
||||
frameIndex = fnum;
|
||||
acquisitionIndex = fnum - startAcquisitionIndex;
|
||||
if(dynamicRange == 32) subframeIndex = snum;
|
||||
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
|
||||
@ -1859,7 +1859,7 @@ void UDPStandardImplementation::startDataCallback(){
|
||||
#endif
|
||||
//send header
|
||||
//update frame details
|
||||
frameIndex = fnum;if(frameIndex==-1) cprintf(RED,"frameindex = -1, 333\n");
|
||||
frameIndex = fnum;
|
||||
acquisitionIndex = fnum - startAcquisitionIndex;
|
||||
if(dynamicRange == 32) subframeIndex = snum;
|
||||
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
|
||||
@ -2066,7 +2066,6 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
|
||||
footer = (eiger_packet_footer_t*)(buffer[ithread] + offset + footerOffset);
|
||||
*( (uint64_t*) footer) = deactivatedFrameNumber[ithread];
|
||||
*( (uint16_t*) footer->packetNumber) = ++pnum;
|
||||
*( (uint16_t*) header->missingPacket) = deactivatedPacketValue;
|
||||
#ifdef MANUALDEBUG
|
||||
if(!ithread){
|
||||
cprintf(GREEN,"thread:%d pnum:%d fnum:%d\n",
|
||||
@ -2613,6 +2612,12 @@ void UDPStandardImplementation::stopWriting(int ithread, char* wbuffer){
|
||||
|
||||
|
||||
//all threads need to close file, reset mask and exit loop
|
||||
missingPacketinFile = (long long int)numberOfFrames*packetsPerFrame-totalWritingPacketCount[ithread];
|
||||
if(missingPacketinFile){
|
||||
updateFileHeader(ithread);
|
||||
fseek(sfilefd[ithread],0,0);
|
||||
fwrite((void*)fileHeader[ithread], 1, FILE_HEADER_SIZE, sfilefd[ithread]);
|
||||
}
|
||||
closeFile(ithread);
|
||||
pthread_mutex_lock(&statusMutex);
|
||||
writerThreadsMask^=(1<<ithread);
|
||||
@ -2856,56 +2861,43 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
|
||||
|
||||
|
||||
void UDPStandardImplementation::updateFileHeader(int ithread){
|
||||
int xpix=-1,ypix=-1;
|
||||
|
||||
//create detector specific packet header
|
||||
char packetheader[1000];
|
||||
strcpy(packetheader,"");
|
||||
|
||||
//only for eiger right now
|
||||
/*switch(myDetectorType){
|
||||
case EIGER:
|
||||
*/ sprintf(packetheader,"#Packet Header\n"
|
||||
"Sub Frame Number 4 bytes\n"
|
||||
"Missing Packet\t 2 bytes\n"
|
||||
"Port Number\t 1 byte\n"
|
||||
"Unused\t\t 1 byte\n\n"
|
||||
"#Packet Footer\n"
|
||||
"Frame Number\t 6 bytes\n"
|
||||
"Packet Number\t 2 bytes\n");
|
||||
xpix = EIGER_PIXELS_IN_ONE_ROW;
|
||||
ypix = EIGER_PIXELS_IN_ONE_COL;
|
||||
/* break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
//update file header
|
||||
time_t t = time(0);
|
||||
int length = sizeof(fileHeader[ithread]);
|
||||
while((unsigned int)length!=strlen(fileHeader[ithread])){
|
||||
length = strlen(fileHeader[ithread]);
|
||||
sprintf(fileHeader[ithread],"\nHeader\t\t %d bytes\n"
|
||||
"Top\t\t %d\n"
|
||||
"Left\t\t %d\n"
|
||||
"Dynamic Range\t %d\n"
|
||||
"Ten Giga\t %d\n"
|
||||
"Packet\t\t %d bytes\n"
|
||||
"Data\t\t %d bytes\n"
|
||||
"x\t\t %d pixels\n"
|
||||
"y\t\t %d pixels\n"
|
||||
"Timestamp\t %s\n\n"
|
||||
"%s",
|
||||
length,
|
||||
(bottomEnable?0:1),(ithread?0:1),
|
||||
dynamicRange,tengigaEnable,
|
||||
onePacketSize,oneDataSize,
|
||||
xpix,ypix,
|
||||
sprintf(fileHeader[ithread],
|
||||
"\nHeader\t\t %d bytes\n"
|
||||
"Top\t\t %d\n"
|
||||
"Left\t\t %d\n"
|
||||
"Active\t\t %d\n"
|
||||
"Packets Lost\t %d\n"
|
||||
"Dynamic Range\t %d\n"
|
||||
"Ten Giga\t %d\n"
|
||||
"Packet\t\t %d bytes\n"
|
||||
"Data\t\t %d bytes\n"
|
||||
"x\t\t %d pixels\n"
|
||||
"y\t\t %d pixels\n"
|
||||
"Timestamp\t %s\n\n"
|
||||
|
||||
//only for eiger right now
|
||||
"#Packet Header\n"
|
||||
"Sub Frame Number 4 bytes\n"
|
||||
"Unused\t\t 2 bytes\n"
|
||||
"Port Number\t 1 byte\n"
|
||||
"Unused\t\t 1 byte\n\n"
|
||||
"#Packet Footer\n"
|
||||
"Frame Number\t 6 bytes\n"
|
||||
"Packet Number\t 2 bytes\n",
|
||||
FILE_HEADER_SIZE,
|
||||
(bottomEnable?0:1),(ithread?0:1),
|
||||
activated,
|
||||
missingPacketinFile,
|
||||
dynamicRange,tengigaEnable,
|
||||
onePacketSize,oneDataSize,
|
||||
//only for eiger right now
|
||||
EIGER_PIXELS_IN_ONE_ROW,EIGER_PIXELS_IN_ONE_COL,
|
||||
ctime(&t));
|
||||
if(strlen(fileHeader[ithread]) > FILE_HEADER_SIZE)
|
||||
cprintf(BG_RED,"File Header Size is too small for file header\n");
|
||||
|
||||
ctime(&t),
|
||||
packetheader);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user