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> ×); + + 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> ×) +{ + 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