From 03623f282597182a5fac9a62da401cb6f771077a Mon Sep 17 00:00:00 2001
From: Owen Arnold <owen.arnold@stfc.ac.uk>
Date: Mon, 21 Feb 2011 10:00:37 +0000
Subject: [PATCH] re #2513

---
 .../avtMDFileReaderFileFormat.h               |  5 +++
 .../src/avtMDFileReaderFileFormat.C           | 22 +++++++++
 .../MultiDimensionalDbPresenter.h             |  6 +++
 .../vtkStructuredGridFactory.h                |  2 +-
 .../src/MultiDimensionalDbPresenter.cpp       | 25 +++++++++++
 .../test/MultiDimensionalDbPresenterTest.h    | 45 ++++++++++++++++++-
 6 files changed, 102 insertions(+), 3 deletions(-)

diff --git a/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h b/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
index 975babc6f2e..30faee2f125 100644
--- a/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
+++ b/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
@@ -83,6 +83,11 @@ class avtMDFileReaderFileFormat : public avtMTSDFileFormat
     //
 
     virtual int            GetNTimesteps(void);
+    virtual void GetCycles(std::vector<int> &cycles);
+    virtual void GetTimes(std::vector<double> &times);
+
+    virtual bool      ReturnsValidCycle() const;
+    virtual bool      ReturnsValidTime() const;
 
     virtual const char    *GetType(void)   { return "MDFileReader"; };
     virtual void           FreeUpResources(void); 
diff --git a/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C b/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
index 87ca35c71e2..527e634e3a7 100644
--- a/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
+++ b/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
@@ -92,6 +92,28 @@ avtMDFileReaderFileFormat::GetNTimesteps(void)
     return m_executor.getNumberOfTimesteps();
 }
 
+void avtMDFileReaderFileFormat::GetCycles(std::vector<int> &cycles)
+{
+   std::vector<int> allCycles = m_executor.getCycles();
+   cycles.swap(allCycles);
+}
+
+void avtMDFileReaderFileFormat::GetTimes(std::vector<double> &times)
+{
+  std::vector<double> allTimes = m_executor.getTimesteps();
+  times.swap(allTimes);
+}
+
+bool avtMDFileReaderFileFormat::ReturnsValidCycle() const
+{
+  return true;
+}
+
+bool avtMDFileReaderFileFormat::ReturnsValidTime() const
+{
+  return true;
+}
+
 
 // ****************************************************************************
 //  Method: avtMDFileReaderFileFormat::FreeUpResources
diff --git a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
index 939e13f08d7..b1025d5a88d 100644
--- a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
+++ b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
@@ -69,6 +69,12 @@ public:
   /// Gets the number of timesteps in the workspace.
   int getNumberOfTimesteps() const;
 
+  /// Get the actual timestep values to use.
+  std::vector<double> getTimesteps() const;
+
+  /// Get the actual cycle values to use.
+  std::vector<int> getCycles() const;
+
   /// Get x axis name so that it may be applied to labels.
   std::string getXAxisName() const;
 
diff --git a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
index f540541c182..5e3fe3293a7 100644
--- a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
+++ b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
@@ -106,7 +106,7 @@ vtkStructuredGridFactory<Image> & vtkStructuredGridFactory<Image>::operator=(con
 
 
 template<typename Image>
-vtkStructuredGridFactory<Image>::vtkStructuredGridFactory(boost::shared_ptr<Image> image) : m_scalarName(""), m_timestep(0), m_image(image), m_meshOnly(true)
+vtkStructuredGridFactory<Image>::vtkStructuredGridFactory(boost::shared_ptr<Image> image) : m_image(image), m_scalarName(""), m_timestep(0),  m_meshOnly(true)
 {
 }
 
diff --git a/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp b/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
index 2ddec6dddde..49916853baf 100644
--- a/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
+++ b/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
@@ -112,6 +112,31 @@ int MultiDimensionalDbPresenter::getNumberOfTimesteps() const
   return m_MDWorkspace->gettDimension()->getNBins();
 }
 
+std::vector<int> MultiDimensionalDbPresenter::getCycles() const
+{
+  verifyExecution();
+  std::vector<int> cycles(m_MDWorkspace->gettDimension()->getNBins());
+  for(unsigned int i=0; i < cycles.size(); i++)
+    {
+      cycles[i] = i;
+    }
+  return cycles;
+}
+
+std::vector<double> MultiDimensionalDbPresenter::getTimesteps() const
+{
+  using namespace Mantid::Geometry;
+  verifyExecution();
+  boost::shared_ptr<const IMDDimension> tDimension = m_MDWorkspace->gettDimension();
+  const double increment = (tDimension->getMaximum() - tDimension->getMinimum())/tDimension->getNBins();
+  std::vector<double> times(tDimension->getNBins());
+  for(unsigned int i=0; i < tDimension->getNBins(); i++)
+  {
+    times[i] = tDimension->getMinimum() + (i*increment);
+  }
+  return times;
+}
+
 vtkDataArray* MultiDimensionalDbPresenter::getScalarData(int timeBin, const char* scalarName) const
 {
   using namespace Mantid::MDDataObjects;
diff --git a/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h b/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
index b958b66c357..59a917b004a 100644
--- a/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
+++ b/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
@@ -12,13 +12,17 @@ using namespace Mantid::VATES;
 class MultiDimensionalDbPresenterTest : public CxxTest::TestSuite
 {
 
+private:
+
+  static std::string getTestFileName(){return "fe_demo_30.sqw";}
+
 public:
 
 //Simple schenario testing end-to-end working of this presenter.
 void testConstruction()
 {
   MultiDimensionalDbPresenter mdPresenter;
-  mdPresenter.execute("fe_demo_30.sqw");
+  mdPresenter.execute(getTestFileName());
 
   vtkDataArray* data = mdPresenter.getScalarData(1, "signal");
   vtkDataSet* visData = mdPresenter.getMesh();
@@ -29,6 +33,22 @@ void testConstruction()
   visData->Delete();
 }
 
+void testGetCycles()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+  mdPresenter.execute(getTestFileName());
+  std::vector<int> vecCycles = mdPresenter.getCycles();
+  TSM_ASSERT_EQUALS("Wrong number of cycles in cycles collection.", vecCycles.size(), mdPresenter.getNumberOfTimesteps());
+}
+
+void testGetTimesteps()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+  mdPresenter.execute(getTestFileName());
+  std::vector<double> vecTimes = mdPresenter.getTimesteps();
+  TSM_ASSERT_EQUALS("Wrong number of times in times collection.", vecTimes.size(), mdPresenter.getNumberOfTimesteps());
+}
+
 void testGetScalarDataThrows()
 {
   MultiDimensionalDbPresenter mdPresenter;
@@ -53,7 +73,28 @@ void testGetNumberOfTimestepsThrows()
 
   //No execution call. Test that type cannot be used improperly.
 
-  TSM_ASSERT_THROWS("Accessing mesh data without first calling execute should not be possible", mdPresenter.getNumberOfTimesteps(), std::runtime_error);
+  TSM_ASSERT_THROWS("Accessing timestep number data without first calling execute should not be possible", mdPresenter.getNumberOfTimesteps(), std::runtime_error);
+}
+
+void testGetCylesThrows()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+
+  //No execution call. Test that type cannot be used improperly.
+
+  TSM_ASSERT_THROWS("Accessing cycles data without first calling execute should not be possible", mdPresenter.getCycles(), std::runtime_error);
+
+}
+
+void testGetTimestepsThrows()
+{
+
+  MultiDimensionalDbPresenter mdPresenter;
+
+  //No execution call. Test that type cannot be used improperly.
+
+  TSM_ASSERT_THROWS("Accessing timestep data without first calling execute should not be possible", mdPresenter.getTimesteps(), std::runtime_error);
+
 }
 
 
-- 
GitLab