Skip to content
Snippets Groups Projects
Commit 03623f28 authored by Owen Arnold's avatar Owen Arnold
Browse files

re #2513

parent 3f5c5adc
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -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
......
......@@ -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;
......
......@@ -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)
{
}
......
......@@ -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;
......
......@@ -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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment