From e06ba6842a57b9b12e5044807a97b0ad432f34f1 Mon Sep 17 00:00:00 2001
From: Danilo Ferreira de Lima <danilo.enoque.ferreira.de.lima@xfel.de>
Date: Tue, 5 Sep 2023 14:16:06 +0200
Subject: [PATCH] Avoid setting NDARRAY properties: they cannot be serialized
 in JSON.

---
 src/calng/CrystfelRunner.py | 43 ++++++++++++++++++++++++++++++++-----
 1 file changed, 38 insertions(+), 5 deletions(-)

diff --git a/src/calng/CrystfelRunner.py b/src/calng/CrystfelRunner.py
index e370a055..937ad889 100644
--- a/src/calng/CrystfelRunner.py
+++ b/src/calng/CrystfelRunner.py
@@ -329,8 +329,33 @@ class CrystfelRunner(PythonDevice):
             .initialValue([0.0, 0.0])
             .commit(),
 
-            NDARRAY_ELEMENT(expected)
-            .key("crystfelStats.cell")
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_a")
+            .readOnly()
+            .commit(),
+
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_b")
+            .readOnly()
+            .commit(),
+
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_c")
+            .readOnly()
+            .commit(),
+
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_alpha")
+            .readOnly()
+            .commit(),
+
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_beta")
+            .readOnly()
+            .commit(),
+
+            VECTOR_FLOAT_ELEMENT(expected)
+            .key("crystfelStats.cell_gamma")
             .readOnly()
             .commit(),
         )
@@ -806,9 +831,17 @@ class CrystfelRunner(PythonDevice):
                             self._results['reflections'] = (sum(n_reflections)
                                                             if len(n_reflections) > 0
                                                             else 0)
-                            self._results['cell'] = (np.stack(cell, axis=0)
-                                                     if len(cell) > 0
-                                                     else np.empty((0, 6), dtype=np.float32))
+                            cell_stacked = (np.stack(cell, axis=0)
+                                            if len(cell) > 0
+                                            else list())
+                            if len(cell_stacked) == 0:
+                                for k in ['cell_a', 'cell_b', 'cell_c',
+                                          'cell_alpha', 'cell_beta', 'cell_gamma']:
+                                    self._results[k] = list()
+                            else:
+                                for i, k in enumerate(['cell_a', 'cell_b', 'cell_c',
+                                                      'cell_alpha', 'cell_beta', 'cell_gamma']):
+                                    self._results[k] = cell_stacked[:, i].tolist()
                             self._results['all_det_centre'] = (np.stack(det_centre, axis=0)
                                                                if len(det_centre) > 0
                                                                else np.empty((0, 2), dtype=np.float32))
-- 
GitLab