diff --git a/tests/JFJochReaderTest.cpp b/tests/JFJochReaderTest.cpp index 9abb8401..3b94a52f 100644 --- a/tests/JFJochReaderTest.cpp +++ b/tests/JFJochReaderTest.cpp @@ -1497,7 +1497,7 @@ TEST_CASE("JFJochReader_NXmxIntegrated", "[HDF5][Full]") { REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); } -TEST_CASE("JFJochReader_GetRawImage", "[HDF5][Full]") { +TEST_CASE("JFJochReader_GetRawImage_NXmxLegacy", "[HDF5][Full]") { DiffractionExperiment x(DetJF(1)); x.FilePrefix("test_read_raw_image").ImagesPerTrigger(4).OverwriteExistingFiles(true); @@ -1554,4 +1554,120 @@ TEST_CASE("JFJochReader_GetRawImage", "[HDF5][Full]") { remove("test_read_raw_image_data_000002.h5"); // No leftover HDF5 objects REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); +} + +TEST_CASE("JFJochReader_GetRawImage_VDS", "[HDF5][Full]") { + DiffractionExperiment x(DetJF(1)); + + x.FilePrefix("test_read_raw_image").ImagesPerTrigger(4).OverwriteExistingFiles(true); + x.BitDepthImage(16).ImagesPerFile(2).SetFileWriterFormat(FileWriterFormat::NXmxVDS).PixelSigned(true) + .IndexingAlgorithm(IndexingAlgorithmEnum::FFT); + x.Compression(CompressionAlgorithm::BSHUF_ZSTD); + + std::vector image(x.GetPixelsNum()); + for (int i = 0; i < image.size(); i++) + image[i] = static_cast((i * 7 + 33) % UINT16_MAX); + + RegisterHDF5Filter(); + JFJochBitShuffleCompressor compressor(CompressionAlgorithm::BSHUF_ZSTD); + auto compressed_image = compressor.Compress(image); + { + StartMessage start_message; + x.FillMessage(start_message); + FileWriter file_set(start_message); + + for (int i = 0; i < x.GetImageNum(); i++) { + DataMessage message{}; + message.image = CompressedImage(compressed_image, x.GetXPixelsNum(), x.GetYPixelsNum(), + CompressedImageMode::Int16, CompressionAlgorithm::BSHUF_ZSTD); + message.number = i; + REQUIRE_NOTHROW(file_set.WriteHDF5(message)); + } + EndMessage end_message; + end_message.max_image_number = x.GetImageNum(); + file_set.WriteHDF5(end_message); + file_set.Finalize(); + } + { + JFJochHDF5Reader reader; + REQUIRE_NOTHROW(reader.ReadFile("test_read_raw_image_master.h5")); + auto dataset = reader.GetDataset(); + CHECK(dataset->experiment.GetImageNum() == 4); + + std::shared_ptr reader_image; + for (int i = 0; i < 4; i++) { + REQUIRE_NOTHROW(reader_image = reader.GetRawImage(i)); + + CHECK(reader_image->image.GetMode() == CompressedImageMode::Int16); + CHECK(reader_image->image.GetCompressionAlgorithm() == CompressionAlgorithm::BSHUF_ZSTD); + CHECK(reader_image->image.GetWidth() == x.GetXPixelsNum()); + CHECK(reader_image->image.GetHeight() == x.GetYPixelsNum()); + CHECK(reader_image->image.GetCompressedSize() == compressed_image.size()); + CHECK(reader_image->image.GetCompressed() == reader_image->image_buffer.data()); + REQUIRE(reader_image->image_buffer.size() == compressed_image.size()); + CHECK(memcmp(reader_image->image_buffer.data(), compressed_image.data(), compressed_image.size()) == 0); + } + } + remove("test_read_raw_image_master.h5"); + remove("test_read_raw_image_data_000001.h5"); + remove("test_read_raw_image_data_000002.h5"); +// No leftover HDF5 objects + REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); +} + +TEST_CASE("JFJochReader_GetRawImage_Integrated", "[HDF5][Full]") { + DiffractionExperiment x(DetJF(1)); + + x.FilePrefix("test_read_raw_image").ImagesPerTrigger(4).OverwriteExistingFiles(true); + x.BitDepthImage(16).ImagesPerFile(2).SetFileWriterFormat(FileWriterFormat::NXmxIntegrated).PixelSigned(true) + .IndexingAlgorithm(IndexingAlgorithmEnum::FFT); + x.Compression(CompressionAlgorithm::BSHUF_ZSTD); + + std::vector image(x.GetPixelsNum()); + for (int i = 0; i < image.size(); i++) + image[i] = static_cast((i * 7 + 33) % UINT16_MAX); + + RegisterHDF5Filter(); + JFJochBitShuffleCompressor compressor(CompressionAlgorithm::BSHUF_ZSTD); + auto compressed_image = compressor.Compress(image); + { + StartMessage start_message; + x.FillMessage(start_message); + FileWriter file_set(start_message); + + for (int i = 0; i < x.GetImageNum(); i++) { + DataMessage message{}; + message.image = CompressedImage(compressed_image, x.GetXPixelsNum(), x.GetYPixelsNum(), + CompressedImageMode::Int16, CompressionAlgorithm::BSHUF_ZSTD); + message.number = i; + REQUIRE_NOTHROW(file_set.WriteHDF5(message)); + } + EndMessage end_message; + end_message.max_image_number = x.GetImageNum(); + file_set.WriteHDF5(end_message); + file_set.Finalize(); + } + { + JFJochHDF5Reader reader; + REQUIRE_NOTHROW(reader.ReadFile("test_read_raw_image_master.h5")); + auto dataset = reader.GetDataset(); + CHECK(dataset->experiment.GetImageNum() == 4); + + std::shared_ptr reader_image; + for (int i = 0; i < 4; i++) { + REQUIRE_NOTHROW(reader_image = reader.GetRawImage(i)); + + CHECK(reader_image->image.GetMode() == CompressedImageMode::Int16); + CHECK(reader_image->image.GetCompressionAlgorithm() == CompressionAlgorithm::BSHUF_ZSTD); + CHECK(reader_image->image.GetWidth() == x.GetXPixelsNum()); + CHECK(reader_image->image.GetHeight() == x.GetYPixelsNum()); + CHECK(reader_image->image.GetCompressedSize() == compressed_image.size()); + CHECK(reader_image->image.GetCompressed() == reader_image->image_buffer.data()); + REQUIRE(reader_image->image_buffer.size() == compressed_image.size()); + CHECK(memcmp(reader_image->image_buffer.data(), compressed_image.data(), compressed_image.size()) == 0); + } + } + remove("test_read_raw_image_master.h5"); +// No leftover HDF5 objects + REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); } \ No newline at end of file