JFConversionFloatingPoint: Integrate other bit depths/signs

This commit is contained in:
2023-11-07 15:36:49 +01:00
parent be546e9f76
commit 2dfd878d01
5 changed files with 184 additions and 17 deletions
+48 -8
View File
@@ -83,11 +83,18 @@ bool TestImagePusher::CheckImage(const DiffractionExperiment &x, const std::vect
logger.Error("Image empty");
no_errors = false;
} else {
std::vector<int16_t> decompressed_image;
std::vector<uint16_t> decompressed_image_16;
std::vector<uint32_t> decompressed_image_32;
// Image decompression
try {
JFJochDecompress(decompressed_image, x.GetCompressionAlgorithmEnum(),
if (x.GetPixelDepth() == 2)
JFJochDecompress(decompressed_image_16, x.GetCompressionAlgorithmEnum(),
receiver_generated_image, x.GetPixelsNum());
else
JFJochDecompress(decompressed_image_32, x.GetCompressionAlgorithmEnum(),
receiver_generated_image, x.GetPixelsNum());
} catch (const JFJochException &e) {
logger.Error(e.what());
no_errors = false;
@@ -100,18 +107,51 @@ bool TestImagePusher::CheckImage(const DiffractionExperiment &x, const std::vect
if (x.GetStorageCellNumber() > 1)
storage_cell = image_id % x.GetStorageCellNumber();
double result = CheckConversionWithGeomTransform(x, calibration,
raw_reference_image.data(),
decompressed_image.data(),
storage_cell);
double result = 0;
if (x.GetPixelDepth() == 2) {
if (x.IsPixelSigned())
result = CheckConversionWithGeomTransform(x, calibration,
raw_reference_image.data(),
(int16_t *) decompressed_image_16.data(),
storage_cell);
else
result = CheckConversionWithGeomTransform(x, calibration,
raw_reference_image.data(),
(uint16_t *) decompressed_image_16.data(),
storage_cell);
} else if (x.GetPixelDepth() == 4) {
if (x.IsPixelSigned())
result = CheckConversionWithGeomTransform(x, calibration,
raw_reference_image.data(),
(int32_t *) decompressed_image_32.data(),
storage_cell);
else
result = CheckConversionWithGeomTransform(x, calibration,
raw_reference_image.data(),
(uint32_t *) decompressed_image_32.data(),
storage_cell);
}
if (result > 0.5) {
logger.Error("Mean conversion error ({:.3f}) larger than threshold", result);
no_errors = false;
} else
logger.Info("Mean conversion error: {:.3f}", result);
} else if (x.GetDetectorMode() == DetectorMode::Raw) {
if (memcmp(raw_reference_image.data(), decompressed_image.data(), sizeof(uint16_t) * x.GetPixelsNum()) !=
0) {
size_t diff = 0;
if (x.GetPixelDepth() == 2) {
for (int i = 0; i < x.GetPixelsNum(); i++) {
if (raw_reference_image[i] != decompressed_image_16[i])
diff++;
}
} else {
for (int i = 0; i < x.GetPixelsNum(); i++) {
if (raw_reference_image[i] != decompressed_image_32[i])
diff++;
}
}
if (diff != 0) {
logger.Error("Raw data mismatch");
no_errors = false;
}