From b83acde8c75c98ed0c4cea0d79b0df5f2e12cb45 Mon Sep 17 00:00:00 2001
From: Steve Reis <stevereis93@gmail.com>
Date: Mon, 4 Apr 2022 19:34:10 +0200
Subject: [PATCH] fix(exareme): Matrix order in PCA Algorithm result

---
 .../exareme/handlers/algorithms/PCA.handler.spec.ts       | 5 ++++-
 .../connectors/exareme/handlers/algorithms/PCA.handler.ts | 8 +++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.spec.ts b/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.spec.ts
index f390eea..a7af56e 100644
--- a/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.spec.ts
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.spec.ts
@@ -84,7 +84,10 @@ describe('PCA result handler', () => {
     exp.results.forEach((it) => {
       if (it['matrix']) {
         const heatmap = it as HeatMapResult;
-        expect(heatmap.matrix).toEqual(data.eigen_vecs);
+        const matrix = data.eigen_vecs[0].map(
+          (_, i) => data.eigen_vecs.map((row) => row[i]), // reverse matrix as we want row-major order
+        );
+        expect(heatmap.matrix).toEqual(matrix);
         expect(heatmap.yAxis.categories).toEqual(exp.variables);
       }
     });
diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.ts b/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.ts
index 3278962..64ff970 100644
--- a/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.ts
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/PCA.handler.ts
@@ -42,7 +42,13 @@ export default class PCAHandler extends BaseHandler {
       },
     };
 
-    if (matrix) exp.results.push(heatMapChart);
+    if (matrix && matrix.length > 0) {
+      heatMapChart.matrix = matrix[0].map(
+        (_, i) => matrix.map((row) => row[i]), // reverse matrix as we want row-major order
+      );
+    }
+
+    if (heatMapChart.matrix) exp.results.push(heatMapChart);
 
     this.next?.handle(exp, data);
   }
-- 
GitLab