From 94ce0424012be3106e26940bcaa8971d05f96e8e Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 18 May 2018 14:51:18 +0200 Subject: [PATCH] slsReceiver, fixed virtual hdf5 last row random values bug --- slsReceiverSoftware/include/DataProcessor.h | 3 ++- slsReceiverSoftware/include/File.h | 3 ++- slsReceiverSoftware/include/GeneralData.h | 2 +- slsReceiverSoftware/include/HDF5File.h | 3 ++- slsReceiverSoftware/include/HDF5FileStatic.h | 4 ++-- slsReceiverSoftware/src/DataProcessor.cpp | 4 ++-- slsReceiverSoftware/src/HDF5File.cpp | 9 ++++----- .../src/UDPStandardImplementation.cpp | 15 ++++++++------- 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/slsReceiverSoftware/include/DataProcessor.h b/slsReceiverSoftware/include/DataProcessor.h index d654dbc75..51d897589 100644 --- a/slsReceiverSoftware/include/DataProcessor.h +++ b/slsReceiverSoftware/include/DataProcessor.h @@ -192,9 +192,10 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject { /** * End of Acquisition + * @param anyPacketsCaught true if any packets are caught, else false * @param numf number of images caught */ - void EndofAcquisition(uint64_t numf); + void EndofAcquisition(bool anyPacketsCaught, uint64_t numf); /** * Update pixel dimensions in file writer diff --git a/slsReceiverSoftware/include/File.h b/slsReceiverSoftware/include/File.h index 6c165f7fa..375f39a78 100644 --- a/slsReceiverSoftware/include/File.h +++ b/slsReceiverSoftware/include/File.h @@ -152,9 +152,10 @@ class File : private virtual slsReceiverDefs { /** * End of Acquisition + * @param anyPacketsCaught true if any packets are caught, else false * @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 " "should be overloaded by a derived class\n"); } diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index 83acda63c..7f9b000ad 100644 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -519,7 +519,7 @@ class EigerData : public GeneralData { packetSize = headerSizeinPacket + dataSize; packetsPerFrame = 256; 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); defaultFifoDepth = 100; threadsPerReceiver = 2; diff --git a/slsReceiverSoftware/include/HDF5File.h b/slsReceiverSoftware/include/HDF5File.h index 25c8992b8..b3c63d7f2 100644 --- a/slsReceiverSoftware/include/HDF5File.h +++ b/slsReceiverSoftware/include/HDF5File.h @@ -110,9 +110,10 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt /** * End of Acquisition + * @param anyPacketsCaught true if any packets are caught, else false * @param numf number of images caught */ - void EndofAcquisition(uint64_t numf); + void EndofAcquisition(bool anyPacketsCaught, uint64_t numf); /** * Create Virtual File diff --git a/slsReceiverSoftware/include/HDF5FileStatic.h b/slsReceiverSoftware/include/HDF5FileStatic.h index 32c62fd50..977510c02 100644 --- a/slsReceiverSoftware/include/HDF5FileStatic.h +++ b/slsReceiverSoftware/include/HDF5FileStatic.h @@ -528,8 +528,8 @@ public: } //hyperslab - int numMajorHyperslab = (numf-1)/maxFramesPerFile; - if (((numf-1)%maxFramesPerFile) || (numf == 1)) numMajorHyperslab++; + int numMajorHyperslab = numf/maxFramesPerFile; + if (numf%maxFramesPerFile) numMajorHyperslab++; bool error = false; uint64_t framesSaved = 0; for (int j = 0; j < numMajorHyperslab; j++) { diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index 32dbe9c38..36dd7aa11 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -265,9 +265,9 @@ void DataProcessor::CloseFiles() { file->CloseAllFiles(); } -void DataProcessor::EndofAcquisition(uint64_t numf) { +void DataProcessor::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) { if (file && file->GetFileType() == HDF5) { - file->EndofAcquisition(numf); + file->EndofAcquisition(anyPacketsCaught, numf); } } diff --git a/slsReceiverSoftware/src/HDF5File.cpp b/slsReceiverSoftware/src/HDF5File.cpp index 862146ab7..fbd3e6bae 100644 --- a/slsReceiverSoftware/src/HDF5File.cpp +++ b/slsReceiverSoftware/src/HDF5File.cpp @@ -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 - 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)) { //dataset name ostringstream osfn; @@ -203,7 +203,7 @@ void HDF5File::EndofAcquisition(uint64_t numf) { pthread_mutex_unlock(&Mutex); } - //link current file in master file + //create virutal file else CreateVirtualFile(numf); } @@ -213,7 +213,6 @@ void HDF5File::EndofAcquisition(uint64_t numf) { int HDF5File::CreateVirtualFile(uint64_t numf) { if (master && (*detIndex==0)) { - pthread_mutex_lock(&Mutex); int ret = HDF5FileStatic::CreateVirtualDataFile( virtualfd, masterFileName, diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 5fa3c07dc..20ab92b03 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -516,8 +516,8 @@ void UDPStandardImplementation::stopReceiver(){ if((*it)->GetMeasurementStartedFlag()) anycaught = true; } - if (anycaught) - dataProcessor[0]->EndofAcquisition(maxIndexCaught); //to create virtual file + //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment) + dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught); } //wait for the processes (DataStreamer) to be done @@ -622,14 +622,15 @@ void UDPStandardImplementation::shutDownUDPSockets() { void UDPStandardImplementation::closeFiles() { uint64_t maxIndexCaught = 0; + bool anycaught = false; for (vector::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) { (*it)->CloseFiles(); - uint64_t temp = 0; - temp = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); - maxIndexCaught = temp; + maxIndexCaught = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex()); + if((*it)->GetMeasurementStartedFlag()) + anycaught = true; } - if (maxIndexCaught) - dataProcessor[0]->EndofAcquisition(maxIndexCaught); + //to create virtual file & set files/acquisition to 0 (only hdf5 at the moment) + dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught); } int UDPStandardImplementation::setUDPSocketBufferSize(const uint32_t s) {