diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index 7c380779..4edc4355 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -312,6 +312,11 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) { std::chrono::microseconds(std::lround(master_file->GetFloat("/entry/instrument/detector/frame_time") * 1e6)), std::chrono::microseconds(std::lround(master_file->GetFloat("/entry/instrument/detector/count_time") * 1e6))); + if (master_file->Exists("/entry/instrument/detector/calibration")) { + dataset->calibration_data = master_file->FindLeafs("/entry/instrument/detector/calibration"); + std::sort(dataset->calibration_data.begin(), dataset->calibration_data.end()); + } + if (image_size_x * image_size_y > 0) { auto mask_tmp = master_file->ReadOptVector( "/entry/instrument/detector/pixel_mask", diff --git a/reader/JFJochReaderDataset.h b/reader/JFJochReaderDataset.h index a8f815fc..d02161cb 100644 --- a/reader/JFJochReaderDataset.h +++ b/reader/JFJochReaderDataset.h @@ -48,6 +48,8 @@ struct JFJochReaderDataset { std::vector> roi_max; std::vector> roi_npixel; + std::vector calibration_data; + JFJochReaderDataset() = default; JFJochReaderDataset(const JFJochReaderDataset &other) = default; }; diff --git a/tests/JFJochReaderTest.cpp b/tests/JFJochReaderTest.cpp index f5cb797b..6f240446 100644 --- a/tests/JFJochReaderTest.cpp +++ b/tests/JFJochReaderTest.cpp @@ -69,12 +69,52 @@ TEST_CASE("JFJochReader_MasterFile", "[HDF5][Full]") { REQUIRE(dataset->experiment.GetUnitCell().has_value()); CHECK(dataset->experiment.GetUnitCell()->b == 20.0); CHECK(dataset->experiment.GetUnitCell()->beta == 101.0); + CHECK(dataset->calibration_data.empty()); } remove("test08_master.h5"); REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); } +TEST_CASE("JFJochReader_MasterFile_Calibration", "[HDF5][Full]") { + DiffractionExperiment x(DetJF(1)); + + x.FilePrefix("test_reader_calibration").ImagesPerTrigger(1).OverwriteExistingFiles(true); + RegisterHDF5Filter(); + + std::vector calib_1(200*300, 10); + std::vector calib_2(100*400, 55); + { + StartMessage start_message; + x.FillMessage(start_message); + + CompressedImage calibration_01(calib_1, 200, 300); + CompressedImage calibration_02(calib_2, 100, 400); + calibration_01.Channel("c1"); + calibration_02.Channel("c2"); + + EndMessage end_message; + end_message.max_image_number = 0; + std::unique_ptr master = std::make_unique(start_message); + master->WriteCalibration(calibration_01); + master->WriteCalibration(calibration_02); + master->Finalize(end_message); + master.reset(); + } + { + JFJochHDF5Reader reader; + REQUIRE_NOTHROW(reader.ReadFile("test_reader_calibration_master.h5")); + auto dataset = reader.GetDataset(); + REQUIRE(dataset->calibration_data.size() == 2); + CHECK(dataset->calibration_data[0] == "c1"); + CHECK(dataset->calibration_data[1] == "c2"); + } + // reremove("test_reader_calibration_master.h5"); + + REQUIRE(H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); +} + + TEST_CASE("JFJochReader_DefaultExperiment", "[HDF5][Full]") { DiffractionExperiment x(DetJF(1));