Move back to DECTRIS flavor of NXmx

This commit is contained in:
2024-04-11 16:10:21 +02:00
parent c28c71a3f1
commit 809441d0f0
15 changed files with 241 additions and 232 deletions
+105 -149
View File
@@ -274,155 +274,9 @@ TEST_CASE("HDF5Writer_Rad_Int_Profile", "[HDF5][Full]") {
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5Writer_VDS", "[HDF5][Full]") {
DiffractionExperiment x(DetectorGeometry(1));
x.ImagesPerTrigger(5).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("vds");
{
RegisterHDF5Filter();
StartMessage start_message;
x.FillMessage(start_message);
EndMessage end_message;
end_message.max_image_number = x.GetImageNum();
HDF5Writer writer(start_message);
std::vector<uint16_t> image(x.GetPixelsNum());
std::vector<SpotToSave> spots;
for (int i = 0; i < x.GetImageNum(); i++) {
for (auto &j: image)
j = i;
DataMessage message{};
message.image.pixel_depth_bytes = 2;
message.image.pixel_is_signed = false;
message.image.xpixel = x.GetXPixelsNum();
message.image.ypixel = x.GetYPixelsNum();
message.image.algorithm = CompressionAlgorithm::NO_COMPRESSION;
message.image.data = (uint8_t *) image.data();
message.image.size = x.GetPixelsNum() * x.GetPixelDepth();
message.spots = spots;
message.number = i;
REQUIRE_NOTHROW(writer.Write(message));
}
REQUIRE_NOTHROW(HDF5Metadata::NXmx(start_message, end_message));
}
{
HDF5ReadOnlyFile file("vds_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data"));
HDF5DataSpace file_space(*dataset);
REQUIRE(file_space.GetNumOfDimensions() == 3);
REQUIRE(file_space.GetDimensions()[0] == x.GetImageNum());
REQUIRE(file_space.GetDimensions()[1] == x.GetYPixelsNum());
REQUIRE(file_space.GetDimensions()[2] == x.GetXPixelsNum());
std::vector<int16_t> v(x.GetImageNum() * x.GetYPixelsNum() * x.GetXPixelsNum());
std::vector<hsize_t> start = {0, 0, 0};
dataset->ReadVector(v, start, file_space.GetDimensions());
REQUIRE(v[0] == 0);
REQUIRE(v[x.GetYPixelsNum() * x.GetXPixelsNum()] == 1);
REQUIRE(v[2 * x.GetYPixelsNum() * x.GetXPixelsNum()] == 2);
REQUIRE(v[3 * x.GetYPixelsNum() * x.GetXPixelsNum()] == 3);
REQUIRE(v[4 * x.GetYPixelsNum() * x.GetXPixelsNum()] == 4);
}
// No leftover HDF5 objects
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5Writer_VDS_missing", "[HDF5][Full]") {
DiffractionExperiment x(DetectorGeometry(1));
x.ImagesPerTrigger(5).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("vds_missing");
{
RegisterHDF5Filter();
StartMessage start_message;
x.FillMessage(start_message);
EndMessage end_message;
end_message.max_image_number = x.GetImageNum() - 1;
HDF5Writer writer(start_message);
std::vector<uint16_t> image(x.GetPixelsNum());
std::vector<SpotToSave> spots;
for (int i = 0; i < x.GetImageNum() - 1; i++) {
for (auto &j: image)
j = i;
DataMessage message{};
message.image.pixel_depth_bytes = 2;
message.image.pixel_is_signed = false;
message.image.xpixel = x.GetXPixelsNum();
message.image.ypixel = x.GetYPixelsNum();
message.image.algorithm = CompressionAlgorithm::NO_COMPRESSION;
message.image.data = (uint8_t *) image.data();
message.image.size = x.GetPixelsNum() * x.GetPixelDepth();
message.spots = spots;
message.number = i;
REQUIRE_NOTHROW(writer.Write(message));
}
REQUIRE_NOTHROW(HDF5Metadata::NXmx(start_message, end_message));
}
{
HDF5ReadOnlyFile file("vds_missing_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data"));
HDF5DataSpace file_space(*dataset);
REQUIRE(file_space.GetNumOfDimensions() == 3);
REQUIRE(file_space.GetDimensions()[0] == x.GetImageNum() -1);
REQUIRE(file_space.GetDimensions()[1] == x.GetYPixelsNum());
REQUIRE(file_space.GetDimensions()[2] == x.GetXPixelsNum());
std::vector<int16_t> v((x.GetImageNum() - 1) * x.GetYPixelsNum() * x.GetXPixelsNum());
std::vector<hsize_t> start = {0, 0, 0};
dataset->ReadVector(v, start, file_space.GetDimensions());
REQUIRE(v[0] == 0);
REQUIRE(v[x.GetYPixelsNum() * x.GetXPixelsNum()] == 1);
REQUIRE(v[2 * x.GetYPixelsNum() * x.GetXPixelsNum()] == 2);
REQUIRE(v[3 * x.GetYPixelsNum() * x.GetXPixelsNum()] == 3);
}
// No leftover HDF5 objects
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5Writer_VDS_zero_images", "[HDF5][Full]") {
DiffractionExperiment x(DetectorGeometry(1));
x.ImagesPerTrigger(5).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("vds_zero");
{
RegisterHDF5Filter();
StartMessage start_message;
x.FillMessage(start_message);
EndMessage end_message;
end_message.max_image_number = 0;
REQUIRE_NOTHROW(HDF5Metadata::NXmx(start_message, end_message));
}
{
std::unique_ptr<HDF5ReadOnlyFile> file;
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(file = std::make_unique<HDF5ReadOnlyFile>("vds_zero_master.h5"));
REQUIRE_THROWS(dataset = std::make_unique<HDF5DataSet>(*file,"/entry/data/data"));
}
// No leftover HDF5 objects
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5NXmx_DataFileName", "[HDF5]") {
REQUIRE(HDF5Metadata::DataFileName("z/x", 34) == "z/x_data_000034.h5");
REQUIRE(HDF5Metadata::DataFileName("z/x", 0) == "z/x_data_000000.h5");
REQUIRE(HDF5Metadata::DataFileName("z/x", 34) == "z/x_data_000035.h5");
REQUIRE(HDF5Metadata::DataFileName("z/x", 0) == "z/x_data_000001.h5");
REQUIRE_THROWS(HDF5Metadata::DataFileName("z/x", 1000000));
REQUIRE_THROWS(HDF5Metadata::DataFileName("z/x", -1));
}
@@ -447,4 +301,106 @@ TEST_CASE("HDF5DataType", "[HDF5]") {
REQUIRE(type8.GetElemSize() == 8);
REQUIRE_THROWS(HDF5DataType(7,true));
}
}
TEST_CASE("HDF5Writer_Link", "[HDF5][Full]") {
DiffractionExperiment x(DetectorGeometry(1));
x.ImagesPerTrigger(7).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("link");
{
RegisterHDF5Filter();
StartMessage start_message;
x.FillMessage(start_message);
EndMessage end_message;
end_message.max_image_number = x.GetImageNum() - 2;
HDF5Writer writer(start_message);
std::vector<uint16_t> image(x.GetPixelsNum());
std::vector<SpotToSave> spots;
for (int i = 0; i < x.GetImageNum() - 2; i++) {
for (auto &j: image)
j = i;
DataMessage message{};
message.image.pixel_depth_bytes = 2;
message.image.pixel_is_signed = false;
message.image.xpixel = x.GetXPixelsNum();
message.image.ypixel = x.GetYPixelsNum();
message.image.algorithm = CompressionAlgorithm::NO_COMPRESSION;
message.image.data = (uint8_t *) image.data();
message.image.size = x.GetPixelsNum() * x.GetPixelDepth();
message.spots = spots;
message.number = i;
REQUIRE_NOTHROW(writer.Write(message));
}
REQUIRE_NOTHROW(HDF5Metadata::NXmx(start_message, end_message));
}
{
HDF5ReadOnlyFile file("link_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data_000001"));
HDF5DataSpace file_space(*dataset);
REQUIRE(file_space.GetNumOfDimensions() == 3);
REQUIRE(file_space.GetDimensions()[0] == x.GetImagesPerFile());
REQUIRE(file_space.GetDimensions()[1] == x.GetYPixelsNum());
REQUIRE(file_space.GetDimensions()[2] == x.GetXPixelsNum());
}
{
HDF5ReadOnlyFile file("link_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data_000002"));
HDF5DataSpace file_space(*dataset);
REQUIRE(file_space.GetNumOfDimensions() == 3);
REQUIRE(file_space.GetDimensions()[0] == x.GetImagesPerFile());
REQUIRE(file_space.GetDimensions()[1] == x.GetYPixelsNum());
REQUIRE(file_space.GetDimensions()[2] == x.GetXPixelsNum());
}
{
HDF5ReadOnlyFile file("link_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data_000003"));
HDF5DataSpace file_space(*dataset);
REQUIRE(file_space.GetNumOfDimensions() == 3);
REQUIRE(file_space.GetDimensions()[0] == 1);
REQUIRE(file_space.GetDimensions()[1] == x.GetYPixelsNum());
REQUIRE(file_space.GetDimensions()[2] == x.GetXPixelsNum());
}
{
HDF5ReadOnlyFile file("link_master.h5");
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_THROWS(dataset = std::make_unique<HDF5DataSet>(file,"/entry/data/data_000004"));
}
// No leftover HDF5 objects
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5Writer_Link_zero_images", "[HDF5][Full]") {
DiffractionExperiment x(DetectorGeometry(1));
x.ImagesPerTrigger(5).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("link_zero");
{
RegisterHDF5Filter();
StartMessage start_message;
x.FillMessage(start_message);
EndMessage end_message;
end_message.max_image_number = 0;
REQUIRE_NOTHROW(HDF5Metadata::NXmx(start_message, end_message));
}
{
std::unique_ptr<HDF5ReadOnlyFile> file;
std::unique_ptr<HDF5DataSet> dataset;
REQUIRE_NOTHROW(file = std::make_unique<HDF5ReadOnlyFile>("link_zero_master.h5"));
REQUIRE_THROWS(dataset = std::make_unique<HDF5DataSet>(*file,"/entry/data/data_000001"));
}
// No leftover HDF5 objects
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}