From 552532c6ff728ef7d5456c26e4ffd697eab74808 Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Mon, 2 Nov 2020 12:28:33 +0100
Subject: [PATCH] Save difference data before applying Math.Abs function on
 them.

---
 .../cz/it4i/qcmp/benchmark/Benchmark.java     | 31 ++++++++++++++-----
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/main/java/cz/it4i/qcmp/benchmark/Benchmark.java b/src/main/java/cz/it4i/qcmp/benchmark/Benchmark.java
index 117259d..9bc76ab 100644
--- a/src/main/java/cz/it4i/qcmp/benchmark/Benchmark.java
+++ b/src/main/java/cz/it4i/qcmp/benchmark/Benchmark.java
@@ -14,6 +14,7 @@ import cz.it4i.qcmp.utilities.Utils;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Optional;
 
 public class Benchmark extends BenchmarkBase {
@@ -79,15 +80,34 @@ public class Benchmark extends BenchmarkBase {
         final int[] quantizedData = TypeConverter.shortArrayToIntArray(maybeDataset.get().getPlaneData(0));
 
         final int[] diffArray = Utils.getDifference(originalData, quantizedData);
+
+        final String diffFilePath = getFileNamePathIntoOutDir(String.format(DIFFERENCE_FILE_TEMPLATE,
+                                                                            options.getInputDataInfo().getPlaneIndex(),
+                                                                            codebookSize));
+
+        try {
+            RawDataIO.writeDataI32(diffFilePath, diffArray, true);
+            System.out.println("Saved difference to: " + diffFilePath);
+        } catch (final IOException e) {
+            e.printStackTrace();
+            System.err.println("Failed to save difference data to: " + diffFilePath);
+        }
+
         final double mse = Utils.calculateMse(diffArray);
         final double PSNR = Utils.calculatePsnr(mse, U16.Max);
-        System.out.printf("MSE: %.4f\tPSNR: %.4f(dB)%n", mse, PSNR);
+
+        assert (options.getInputDataInfo().getDimensions().toV2i().multiplyTogether() == diffArray.length);
+        Utils.applyAbsFunction(diffArray);
+        final double absDiffSum = Arrays.stream(diffArray).mapToDouble(v -> v).sum();
+        final double mae = absDiffSum / (double) quantizedData.length;
+
+
+        System.out.printf("BPCI: %d\tMAE: %.4f\tMSE: %.4f\tPSNR: %.4f(dB)\n", options.getBitsPerCodebookIndex(), mae, mse, PSNR);
+
+        //        System.out.printf("MSE: %.4f\tPSNR: %.4f(dB)%n", mse, PSNR);
 
         final int[] absDifferenceData = Utils.asAbsoluteValues(diffArray);
 
-        final String diffFilePath = getFileNamePathIntoOutDir(String.format(DIFFERENCE_FILE_TEMPLATE,
-                                                                            options.getInputDataInfo().getPlaneIndex(),
-                                                                            codebookSize));
 
         final String absDiffFilePath = getFileNamePathIntoOutDir(String.format(ABSOLUTE_DIFFERENCE_FILE_TEMPLATE,
                                                                                options.getInputDataInfo().getPlaneIndex(),
@@ -97,9 +117,6 @@ public class Benchmark extends BenchmarkBase {
             // NOTE(Moravec): Use little endian so that gnuplot can read the array.
             RawDataIO.writeBytesToFile(absDiffFilePath, TypeConverter.unsignedShortArrayToByteArray(absDifferenceData, true));
             System.out.println("Saved absolute difference to: " + absDiffFilePath);
-
-            RawDataIO.writeDataI32(diffFilePath, diffArray, true);
-            System.out.println("Saved difference to: " + absDiffFilePath);
         } catch (final IOException e) {
             System.err.println("Failed to save difference.");
             e.printStackTrace();
-- 
GitLab