slsReceiver, fixed virtual hdf5 last row random values bug

This commit is contained in:
maliakal_d 2018-05-18 14:51:18 +02:00
parent 8b39443197
commit 94ce042401
8 changed files with 23 additions and 20 deletions

View File

@ -192,9 +192,10 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
/** /**
* End of Acquisition * End of Acquisition
* @param anyPacketsCaught true if any packets are caught, else false
* @param numf number of images caught * @param numf number of images caught
*/ */
void EndofAcquisition(uint64_t numf); void EndofAcquisition(bool anyPacketsCaught, uint64_t numf);
/** /**
* Update pixel dimensions in file writer * Update pixel dimensions in file writer

View File

@ -152,9 +152,10 @@ class File : private virtual slsReceiverDefs {
/** /**
* End of Acquisition * End of Acquisition
* @param anyPacketsCaught true if any packets are caught, else false
* @param numf number of images caught * @param numf number of images caught
*/ */
virtual void EndofAcquisition(uint64_t numf) { virtual void EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
cprintf(RED,"This is a generic function EndofAcquisition that " cprintf(RED,"This is a generic function EndofAcquisition that "
"should be overloaded by a derived class\n"); "should be overloaded by a derived class\n");
} }

View File

@ -519,7 +519,7 @@ class EigerData : public GeneralData {
packetSize = headerSizeinPacket + dataSize; packetSize = headerSizeinPacket + dataSize;
packetsPerFrame = 256; packetsPerFrame = 256;
imageSize = dataSize*packetsPerFrame; imageSize = dataSize*packetsPerFrame;
maxFramesPerFile = EIGER_MAX_FRAMES_PER_FILE; maxFramesPerFile = 5;//EIGER_MAX_FRAMES_PER_FILE;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
defaultFifoDepth = 100; defaultFifoDepth = 100;
threadsPerReceiver = 2; threadsPerReceiver = 2;

View File

@ -110,9 +110,10 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
/** /**
* End of Acquisition * End of Acquisition
* @param anyPacketsCaught true if any packets are caught, else false
* @param numf number of images caught * @param numf number of images caught
*/ */
void EndofAcquisition(uint64_t numf); void EndofAcquisition(bool anyPacketsCaught, uint64_t numf);
/** /**
* Create Virtual File * Create Virtual File

View File

@ -528,8 +528,8 @@ public:
} }
//hyperslab //hyperslab
int numMajorHyperslab = (numf-1)/maxFramesPerFile; int numMajorHyperslab = numf/maxFramesPerFile;
if (((numf-1)%maxFramesPerFile) || (numf == 1)) numMajorHyperslab++; if (numf%maxFramesPerFile) numMajorHyperslab++;
bool error = false; bool error = false;
uint64_t framesSaved = 0; uint64_t framesSaved = 0;
for (int j = 0; j < numMajorHyperslab; j++) { for (int j = 0; j < numMajorHyperslab; j++) {

View File

@ -265,9 +265,9 @@ void DataProcessor::CloseFiles() {
file->CloseAllFiles(); file->CloseAllFiles();
} }
void DataProcessor::EndofAcquisition(uint64_t numf) { void DataProcessor::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
if (file && file->GetFileType() == HDF5) { if (file && file->GetFileType() == HDF5) {
file->EndofAcquisition(numf); file->EndofAcquisition(anyPacketsCaught, numf);
} }
} }

View File

@ -187,11 +187,11 @@ int HDF5File::CreateMasterFile(bool en, uint32_t size,
} }
void HDF5File::EndofAcquisition(uint64_t numf) { void HDF5File::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
//not created before //not created before
if (!virtualfd) { if (!virtualfd && anyPacketsCaught) {
//only one file and one sub image //only one file and one sub image (link current file in master)
if (((numFilesinAcquisition == 1) && (numDetY*numDetX) == 1)) { if (((numFilesinAcquisition == 1) && (numDetY*numDetX) == 1)) {
//dataset name //dataset name
ostringstream osfn; ostringstream osfn;
@ -203,7 +203,7 @@ void HDF5File::EndofAcquisition(uint64_t numf) {
pthread_mutex_unlock(&Mutex); pthread_mutex_unlock(&Mutex);
} }
//link current file in master file //create virutal file
else else
CreateVirtualFile(numf); CreateVirtualFile(numf);
} }
@ -213,7 +213,6 @@ void HDF5File::EndofAcquisition(uint64_t numf) {
int HDF5File::CreateVirtualFile(uint64_t numf) { int HDF5File::CreateVirtualFile(uint64_t numf) {
if (master && (*detIndex==0)) { if (master && (*detIndex==0)) {
pthread_mutex_lock(&Mutex); pthread_mutex_lock(&Mutex);
int ret = HDF5FileStatic::CreateVirtualDataFile( int ret = HDF5FileStatic::CreateVirtualDataFile(
virtualfd, masterFileName, virtualfd, masterFileName,

View File

@ -516,8 +516,8 @@ void UDPStandardImplementation::stopReceiver(){
if((*it)->GetMeasurementStartedFlag()) if((*it)->GetMeasurementStartedFlag())
anycaught = true; anycaught = true;
} }
if (anycaught) //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment)
dataProcessor[0]->EndofAcquisition(maxIndexCaught); //to create virtual file dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught);
} }
//wait for the processes (DataStreamer) to be done //wait for the processes (DataStreamer) to be done
@ -622,14 +622,15 @@ void UDPStandardImplementation::shutDownUDPSockets() {
void UDPStandardImplementation::closeFiles() { void UDPStandardImplementation::closeFiles() {
uint64_t maxIndexCaught = 0; uint64_t maxIndexCaught = 0;
bool anycaught = false;
for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) {
(*it)->CloseFiles(); (*it)->CloseFiles();
uint64_t temp = 0; maxIndexCaught = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex());
temp = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); if((*it)->GetMeasurementStartedFlag())
maxIndexCaught = temp; anycaught = true;
} }
if (maxIndexCaught) //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment)
dataProcessor[0]->EndofAcquisition(maxIndexCaught); dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught);
} }
int UDPStandardImplementation::setUDPSocketBufferSize(const uint32_t s) { int UDPStandardImplementation::setUDPSocketBufferSize(const uint32_t s) {