Move back to DECTRIS flavor of NXmx
This commit is contained in:
+105
-149
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user