From cf431563eef32dd65e242cb4e576590b2a97eecd Mon Sep 17 00:00:00 2001
From: Harry Jeffery <henry.jeffery@stfc.ac.uk>
Date: Wed, 8 Apr 2015 13:38:46 +0100
Subject: [PATCH] Refs #11455 Update Projection table format

Change the type of the 'value' column from 'str' to 'V3D'.
---
 Code/Mantid/Framework/API/src/Projection.cpp  | 16 ++-----------
 .../Framework/API/test/ProjectionTest.h       |  8 +++----
 .../Framework/MDAlgorithms/test/CutMDTest.h   | 24 +++++++++----------
 .../mantid/api/src/Exports/Projection.cpp     |  4 ++--
 .../test/python/mantid/api/ProjectionTest.py  |  6 ++---
 .../docs/source/algorithms/CutMD-v1.rst       |  4 ++--
 6 files changed, 25 insertions(+), 37 deletions(-)

diff --git a/Code/Mantid/Framework/API/src/Projection.cpp b/Code/Mantid/Framework/API/src/Projection.cpp
index 8254ed5ec4c..18404dc713a 100644
--- a/Code/Mantid/Framework/API/src/Projection.cpp
+++ b/Code/Mantid/Framework/API/src/Projection.cpp
@@ -1,7 +1,5 @@
 #include "MantidAPI/Projection.h"
 
-#include <boost/algorithm/string.hpp>
-
 namespace Mantid {
 namespace API {
 
@@ -56,7 +54,7 @@ Projection::Projection(const ITableWorkspace &ws) {
 
   for (size_t i = 0; i < numRows; i++) {
     const std::string name = nameCol->cell<std::string>(i);
-    const std::string valueStr = valueCol->cell<std::string>(i);
+    const V3D value = valueCol->cell<V3D>(i);
     const double offset = offsetCol->cell<double>(i);
     const std::string unitStr = unitCol->cell<std::string>(i);
 
@@ -72,16 +70,6 @@ Projection::Projection(const ITableWorkspace &ws) {
       throw std::runtime_error("Invalid dimension name: " + name);
     }
 
-    // Check the values
-    std::vector<std::string> valueStrVec;
-    boost::split(valueStrVec, valueStr, boost::is_any_of(","));
-    std::vector<double> valueDblVec;
-    for (auto it = valueStrVec.begin(); it != valueStrVec.end(); ++it)
-      valueDblVec.push_back(boost::lexical_cast<double>(*it));
-    if (valueDblVec.size() != 3) {
-      throw std::runtime_error("Dimension " + name + " must contain 3 values");
-    }
-
     // Check the unit
     ProjectionUnit unit;
     if (unitStr == "r") {
@@ -93,7 +81,7 @@ Projection::Projection(const ITableWorkspace &ws) {
     }
 
     // Apply the data
-    m_dimensions[index] = V3D(valueDblVec[0], valueDblVec[1], valueDblVec[2]);
+    m_dimensions[index] = value;
     m_offsets[index] = offset;
     m_units[index] = unit;
   }
diff --git a/Code/Mantid/Framework/API/test/ProjectionTest.h b/Code/Mantid/Framework/API/test/ProjectionTest.h
index 28245715cad..8bcc8d8b77f 100644
--- a/Code/Mantid/Framework/API/test/ProjectionTest.h
+++ b/Code/Mantid/Framework/API/test/ProjectionTest.h
@@ -46,9 +46,9 @@ private:
 class ValueColumn : public ColumnTester {
 public:
   ValueColumn() {
-    m_values[0] = "1,1,0";
-    m_values[1] = "-1,1,0";
-    m_values[2] = "0,0,1";
+    m_values[0] = V3D(1,1,0);
+    m_values[1] = V3D(-1,1,0);
+    m_values[2] = V3D(0,0,1);
   }
   size_t size() const { return 3; }
 
@@ -57,7 +57,7 @@ public:
     return &m_values[index];
   }
 private:
-  std::string m_values[3];
+  V3D m_values[3];
 };
 
 class OffsetColumn : public ColumnTester {
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h b/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
index 056676c2830..64bf8835f73 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
@@ -213,16 +213,16 @@ public:
 
     ITableWorkspace_sptr proj = WorkspaceFactory::Instance().createTable();
     proj->addColumn("str", "name");
-    proj->addColumn("str", "value");
+    proj->addColumn("V3D", "value");
     proj->addColumn("double", "offset");
     proj->addColumn("str", "type");
 
     TableRow uRow = proj->appendRow();
     TableRow vRow = proj->appendRow();
     TableRow wRow = proj->appendRow();
-    uRow << "u" << "1,0,0" << 0.0 << "r";
-    vRow << "v" << "0,1,0" << 0.0 << "r";
-    wRow << "w" << "0,0,1" << 0.0 << "r";
+    uRow << "u" << V3D(1,0,0) << 0.0 << "r";
+    vRow << "v" << V3D(0,1,0) << 0.0 << "r";
+    wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
@@ -275,16 +275,16 @@ public:
 
     ITableWorkspace_sptr proj = WorkspaceFactory::Instance().createTable();
     proj->addColumn("str", "name");
-    proj->addColumn("str", "value");
+    proj->addColumn("V3D", "value");
     proj->addColumn("double", "offset");
     proj->addColumn("str", "type");
 
     TableRow uRow = proj->appendRow();
     TableRow vRow = proj->appendRow();
     TableRow wRow = proj->appendRow();
-    uRow << "u" << "1,1,0" << 0.0 << "r";
-    vRow << "v" << "-1,1,0" << 0.0 << "r";
-    wRow << "w" << "0,0,1" << 0.0 << "r";
+    uRow << "u" << V3D(1,1,0) << 0.0 << "r";
+    vRow << "v" << V3D(-1,1,0) << 0.0 << "r";
+    wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
@@ -337,16 +337,16 @@ public:
 
     ITableWorkspace_sptr proj = WorkspaceFactory::Instance().createTable();
     proj->addColumn("str", "name");
-    proj->addColumn("str", "value");
+    proj->addColumn("V3D", "value");
     proj->addColumn("double", "offset");
     proj->addColumn("str", "type");
 
     TableRow uRow = proj->appendRow();
     TableRow vRow = proj->appendRow();
     TableRow wRow = proj->appendRow();
-    uRow << "u" << "1,0,0" << 0.0 << "r";
-    vRow << "v" << "0,1,0" << 0.0 << "r";
-    wRow << "w" << "0,0,1" << 0.0 << "r";
+    uRow << "u" << V3D(1,0,0) << 0.0 << "r";
+    vRow << "v" << V3D(0,1,0) << 0.0 << "r";
+    wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/Projection.cpp b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/Projection.cpp
index 02342cff262..14225ec1f2e 100644
--- a/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/Projection.cpp
+++ b/Code/Mantid/Framework/PythonInterface/mantid/api/src/Exports/Projection.cpp
@@ -47,13 +47,13 @@ object createWorkspace() {
    "  from mantid import api, kernel\n"
    "  ws = api.WorkspaceFactory.createTable('TableWorkspace')\n"
    "  ws.addColumn('str', 'name')\n"
-   "  ws.addColumn('str', 'value')\n"
+   "  ws.addColumn('V3D', 'value')\n"
    "  ws.addColumn('str', 'type')\n"
    "  ws.addColumn('double', 'offset')\n"
    "  for (name, i) in zip('uvw', range(3)):\n"
    "    ws.addRow({\n"
    "              'name': name,\n"
-   "              'value': str(proj.getAxis(i)).lstrip('[').rstrip(']'),\n"
+   "              'value': proj.getAxis(i),\n"
    "              'type': proj.getType(i),\n"
    "              'offset': proj.getOffset(i)\n"
    "              })\n"
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/mantid/api/ProjectionTest.py b/Code/Mantid/Framework/PythonInterface/test/python/mantid/api/ProjectionTest.py
index 0fb3d55fde9..db060e4a46e 100644
--- a/Code/Mantid/Framework/PythonInterface/test/python/mantid/api/ProjectionTest.py
+++ b/Code/Mantid/Framework/PythonInterface/test/python/mantid/api/ProjectionTest.py
@@ -67,9 +67,9 @@ class ProjectionTest(unittest.TestCase):
         self.assertTrue('proj_test_ads' in mtd, msg='Workspace not added to ADS successfully')
         self.assertTrue('proj_test_ads2' in mtd, msg='Workspace not added to ADS successfully')
 
-        self.assertEqual(proj_test_ads.row(0), {'name':'u', 'value':'0,1,2', 'type':'r', 'offset':0.0})
-        self.assertEqual(proj_test_ads.row(1), {'name':'v', 'value':'3,-4,5', 'type':'r', 'offset':0.15})
-        self.assertEqual(proj_test_ads.row(2), {'name':'w', 'value':'6,7,8.5', 'type':'a', 'offset':0.0})
+        self.assertEqual(proj_test_ads.row(0), {'name':'u', 'value':V3D(0,1,2), 'type':'r', 'offset':0.0})
+        self.assertEqual(proj_test_ads.row(1), {'name':'v', 'value':V3D(3,-4,5), 'type':'r', 'offset':0.15})
+        self.assertEqual(proj_test_ads.row(2), {'name':'w', 'value':V3D(6,7,8.5), 'type':'a', 'offset':0.0})
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Code/Mantid/docs/source/algorithms/CutMD-v1.rst b/Code/Mantid/docs/source/algorithms/CutMD-v1.rst
index 77d8cb021a8..cfafd64216f 100644
--- a/Code/Mantid/docs/source/algorithms/CutMD-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/CutMD-v1.rst
@@ -36,8 +36,8 @@ The format of these workspaces is as follows:
 | name       | string | Specifies the dimension the row controls. Can be 'u', |
 |            |        | 'v', or 'w'.                                          |
 +------------+--------+-------------------------------------------------------+
-| value      | string | A 3 dimensional vector specifying the axis for the    |
-|            |        | dimension. Example: '1,-1,0'                          |
+| value      | V3D    | A 3 dimensional vector specifying the axis for the    |
+|            |        | dimension. Example: [1,-1,0]                          |
 +------------+--------+-------------------------------------------------------+
 | offset     | double | The offset value to use for this dimension.           |
 +------------+--------+-------------------------------------------------------+
-- 
GitLab