* Enhancements for XFEL

* Enhancements for EIGER
* Writer is more flexible and capable of handling DECTRIS data
This commit is contained in:
2024-03-05 20:41:47 +01:00
parent 71d862b706
commit d315506633
165 changed files with 5440 additions and 2230 deletions

View File

@@ -91,6 +91,30 @@ TEST_CASE("HDF5DataSet_vector", "[HDF5][Unit]") {
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5DataSet_vector_string", "[HDF5][Unit]") {
std::string long_string = "ccdcsdcdscsdcsdcs";
std::vector<std::string> tmp_vector = {"aaaaaaaaa", "b", long_string};
{
RegisterHDF5Filter();
HDF5File file("scratch4.h5", true, false);
REQUIRE_NOTHROW(file.SaveVector("vec", tmp_vector));
}
{
HDF5ReadOnlyFile file("scratch4.h5");
HDF5DataSet vector_dataset(file, "vec");
HDF5DataType data_type_vec(vector_dataset);
HDF5DataSpace data_space_vec(vector_dataset);
CHECK(data_type_vec.GetElemSize() == long_string.size() + 1);
CHECK(data_space_vec.GetNumOfDimensions() == 1);
CHECK(data_space_vec.GetDimensions()[0] == tmp_vector.size());
}
remove("scratch4.h5");
REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0);
}
TEST_CASE("HDF5File_Delete", "[HDF5][Unit]") {
uint16_t tmp_scalar = 16788;
{
@@ -179,6 +203,11 @@ TEST_CASE("HDF5Writer", "[HDF5][Full]") {
for (int i = 0; i < x.GetImageNum(); i++) {
DataMessage message{};
message.image.pixel_depth_bytes = 2;
message.image.pixel_is_signed = false;
message.image.algorithm = CompressionAlgorithm::NO_COMPRESSION;
message.image.xpixel = x.GetXPixelsNum();
message.image.ypixel = x.GetYPixelsNum();
message.image.data = (uint8_t *) image.data();
message.image.size = x.GetPixelsNum() * x.GetPixelDepth();
message.spots = spots;
@@ -210,6 +239,12 @@ TEST_CASE("HDF5Writer_Spots", "[HDF5][Full]") {
for (int i = 0; i < x.GetImageNum(); 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;
@@ -244,6 +279,11 @@ TEST_CASE("HDF5Writer_Rad_Int_Profile", "[HDF5][Full]") {
for (int i = 0; i < x.GetImageNum(); 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.az_int_profile = std::vector<float>(mapping.GetBinNumber(), i);
@@ -277,6 +317,11 @@ TEST_CASE("HDF5Writer_VDS", "[HDF5][Full]") {
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;
@@ -333,6 +378,11 @@ TEST_CASE("HDF5Writer_VDS_missing", "[HDF5][Full]") {
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;
@@ -393,9 +443,9 @@ TEST_CASE("HDF5Writer_VDS_zero_images", "[HDF5][Full]") {
}
TEST_CASE("HDF5NXmx_DataFileName", "[HDF5]") {
REQUIRE(HDF5Metadata::DataFileName("z/x", 34) == "z/x_data_034.h5");
REQUIRE(HDF5Metadata::DataFileName("z/x", 0) == "z/x_data_000.h5");
REQUIRE_THROWS(HDF5Metadata::DataFileName("z/x", 1000));
REQUIRE(HDF5Metadata::DataFileName("z/x", 34) == "z/x_data_000034.h5");
REQUIRE(HDF5Metadata::DataFileName("z/x", 0) == "z/x_data_000000.h5");
REQUIRE_THROWS(HDF5Metadata::DataFileName("z/x", 1000000));
REQUIRE_THROWS(HDF5Metadata::DataFileName("z/x", -1));
}