JFConversionFloatingPoint: Integrate other bit depths/signs
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user