diff --git a/slsDetectorCalibration/dataStructures/HDF5File.cpp b/slsDetectorCalibration/dataStructures/HDF5File.cpp index 5fe3baff5..4a9d43dbe 100644 --- a/slsDetectorCalibration/dataStructures/HDF5File.cpp +++ b/slsDetectorCalibration/dataStructures/HDF5File.cpp @@ -35,6 +35,17 @@ void conditionalIncrement(std::vector& vec, hsize_t max_value) { } } +void printDatatypeSize(hid_t dataset) { + + hid_t datatype = H5Dget_type(dataset); + H5T_class_t class_id = H5Tget_class(datatype); + size_t type_size = H5Tget_size(datatype); + + std::cout << " dataset type class: " << class_id + << ", size: " << type_size << " bytes\n"; + +} + /* * Class member functions */ @@ -55,9 +66,15 @@ HDF5File::~HDF5File () { } */ -void HDF5File::SetImageDataPath (std::string const& name) { data_datasetname = name; } +void HDF5File::SetImageDataPath (std::string const& name) { + std::cout << "Image dataset path set to " << name << std::endl; + data_datasetname = name; +} -void HDF5File::SetFrameIndexPath (std::string const& name) { index_datasetname = name; } +void HDF5File::SetFrameIndexPath (std::string const& name) { + std::cout << "Frame index dataset path set to " << name << std::endl; + index_datasetname = name; +} void HDF5File::InitializeDimensions () { @@ -173,11 +190,15 @@ bool HDF5File::OpenFrameIndexDataset() { H5Sclose (fi_dataspace); // allocate frame index memory - frame_index_list.resize(file_dims[0]); + frame_index_list.resize(fi_dims[0]); //file_dims + + // print datatype size of dataset + std::cout << "Frame index"; + printDatatypeSize(fi_dataset); //read frame index values //Is u32 correct? I would think not. But I get a segmentation fault if I use u64. - if (H5Dread (fi_dataset, H5T_STD_U32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, frame_index_list.data()) < 0) { + if (H5Dread (fi_dataset, H5T_STD_U64LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, frame_index_list.data()) < 0) { cprintf (RED,"Could not read frame index dataset %s\n", index_datasetname.c_str()); std::cerr << "Error: Could not read frame index dataset\n"; H5Dclose (fi_dataset); @@ -208,6 +229,10 @@ int HDF5File::OpenResources (char const*const fname, bool validate) { } cprintf(BLUE, "Opened Dataset: %s\n", data_datasetname.c_str()); + // print datatype size of dataset + std::cout << "Image"; + printDatatypeSize(dataset); + // Create Dataspace dataspace = H5Dget_space (dataset); if (dataspace < 0){ @@ -289,20 +314,6 @@ int HDF5File::ReadImage (uint16_t* image, std::vector& offset ) { // Initialize frame_offset if (frame_offset.empty()) frame_offset.resize(rank,0); - - // Validate frame_offset index - if (frame_offset[0] >= frame_index_list.size()) { - std::cerr << "Error: frame_offset[0] out of bounds.\n"; - return -99; - } - - // Check if images exist at the current frame offset - if (frame_index_list[frame_offset[0]] == 0) { - cprintf (RED,"No images at this frame offset %llu\n", frame_offset[0]); - std::cerr << "Error: Framenumber 0 at this frame offset\n"; - CloseResources (); - return -99; - } // Check if we reached the end of file // Compares that the offsets of frame and storage cell (Z and S) have reached the end of file @@ -318,6 +329,20 @@ int HDF5File::ReadImage (uint16_t* image, std::vector& offset ) { } */ + // Validate frame_offset index + if (frame_offset[0] >= frame_index_list.size()) { + std::cerr << "Error: frame_offset[0] = " << frame_offset[0] << " of bounds.\n"; + return -99; + } + + // Check if images exist at the current frame offset + if (frame_index_list[frame_offset[0]] == 0) { + cprintf (RED,"No images at this frame offset %llu\n", frame_offset[0]); + std::cerr << "Error: Framenumber 0 at this frame offset\n"; + CloseResources (); + return -99; + } + // Optional: Ensure dataset and dataspace are valid if (dataset < 0) { std::cerr << "Error: Invalid dataset ID.\n"; diff --git a/slsDetectorCalibration/dataStructures/HDF5File.h b/slsDetectorCalibration/dataStructures/HDF5File.h index eab1ae778..162d55bc0 100644 --- a/slsDetectorCalibration/dataStructures/HDF5File.h +++ b/slsDetectorCalibration/dataStructures/HDF5File.h @@ -20,13 +20,13 @@ //#define MAX_STR_LENGTH 1000 -#define RANK 4 // Dimension of the image dataset, only for validation +#define RANK 3 // Dimension of the image dataset, only for validation #define DEFAULT_Z_DIMS 10000 // only for validation #define DEFAULT_Y_DIMS 1024 // only for validation #define DEFAULT_X_DIMS 512 // only for validation //#define DEFAULT_S_DIMS 1 // Storage cells -#define DEFAULT_CHUNK_Z_DIMS 100 // only for validation +#define DEFAULT_CHUNK_Z_DIMS 1 // only for validation #define DEFAULT_CHUNK_Y_DIMS 1024 // only for validation #define DEFAULT_CHUNK_X_DIMS 512 // only for validation //#define DEFAULT_CHUNK_S_DIMS 1 diff --git a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsDataQuadH5.h b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsDataQuadH5.h index c53bccd04..24c08fcb1 100644 --- a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsDataQuadH5.h +++ b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsDataQuadH5.h @@ -377,7 +377,8 @@ class jungfrauLGADStrixelsDataQuadH5 : public slsDetectorData { char* readNextFrame( HDF5File& hfile, int& framenumber, std::vector& h5offset, char* data ) { if (framenumber >= 0) { - std::cout << "*"; + if (h5offset[0] % 10 == 0) + std::cout << "*"; //Storing the reinterpret_cast in the variable data_ptr ensures that I can pass it to a function that expects at uint16_t* uint16_t* data_ptr = reinterpret_cast(data); //now data_ptr points where data points (thus modifies the same memory) diff --git a/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess_filetxtH5.cpp b/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess_filetxtH5.cpp index 33d040132..83ea21047 100644 --- a/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess_filetxtH5.cpp +++ b/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess_filetxtH5.cpp @@ -237,7 +237,7 @@ int main(int argc, char *argv[]) { mt->popFree(buff); int ifr = 0; //frame counter of while loop - int framenumber = -1; //framenumber as read from file (detector) + int framenumber = 0; //framenumber as read from file (detector) std::vector h5offset(1,0); //frame counter internal to HDF5File::ReadImage (provided for sanity check/debugging) if (pedfilename.length()>1) { @@ -257,12 +257,12 @@ int main(int argc, char *argv[]) { //HDF5File pedefile; auto pedefile = std::make_unique(); pedefile->SetFrameIndexPath(frameindexpath); - pedefile->SetFrameIndexPath(datasetpath); + pedefile->SetImageDataPath(datasetpath); // //open file if ( pedefile->OpenResources(fname.c_str(),validate_rank) ) { std::cout << "bbbb " << std::ctime(&end_time) << std::endl; - framenumber = -1; + framenumber = 0; while ( decoder->readNextFrame(*pedefile, framenumber, h5offset, buff) ) { @@ -282,7 +282,7 @@ int main(int argc, char *argv[]) { if (ifr >= 1000) break; - framenumber = -1; + //framenumber = 0; } pedefile->CloseResources(); @@ -371,7 +371,7 @@ int main(int argc, char *argv[]) { } // //while read frame - framenumber = -1; + framenumber = 0; h5offset[0] = 0; ifr = 0; //std::cout << "Here! " << framenumber << " "; @@ -403,7 +403,7 @@ int main(int argc, char *argv[]) { } } - framenumber = -1; + //framenumber = 0; } //std::cout << "aa --" << std::endl;