From c6794b3f31af558c866e78992f3b67f9635a336c Mon Sep 17 00:00:00 2001 From: Owen Arnold <owen.arnold@stfc.ac.uk> Date: Sun, 25 Oct 2015 19:22:15 +0000 Subject: [PATCH] refs #13989. Test Nexus loading. --- .../src/ReflNexusMeasurementSource.cpp | 89 ++++++++++++------- .../test/ReflNexusMeasurementSourceTest.h | 27 ++++-- 2 files changed, 76 insertions(+), 40 deletions(-) diff --git a/MantidQt/CustomInterfaces/src/ReflNexusMeasurementSource.cpp b/MantidQt/CustomInterfaces/src/ReflNexusMeasurementSource.cpp index 8b34f315d16..7b71e1117a0 100644 --- a/MantidQt/CustomInterfaces/src/ReflNexusMeasurementSource.cpp +++ b/MantidQt/CustomInterfaces/src/ReflNexusMeasurementSource.cpp @@ -1,17 +1,18 @@ + #include "MantidQtCustomInterfaces/ReflNexusMeasurementSource.h" #include <Poco/File.h> #include "MantidAPI/AlgorithmManager.h" #include "MantidAPI/Workspace.h" #include "MantidAPI/MatrixWorkspace.h" +#include "MantidKernel/TimeSeriesProperty.h" #include <iostream> #include <string> #include <sstream> - - using namespace Mantid::API; +using namespace Mantid::Kernel; -namespace MantidQt{ +namespace MantidQt { namespace CustomInterfaces { //---------------------------------------------------------------------------------------------- @@ -24,19 +25,20 @@ ReflNexusMeasurementSource::ReflNexusMeasurementSource() {} */ ReflNexusMeasurementSource::~ReflNexusMeasurementSource() {} -Measurement ReflNexusMeasurementSource::obtain(const std::string &definedPath, const std::string &fuzzyName) const -{ - std::string filenameArg = fuzzyName; - if(!definedPath.empty()) { +Measurement +ReflNexusMeasurementSource::obtain(const std::string &definedPath, + const std::string &fuzzyName) const { + std::string filenameArg = fuzzyName; + if (!definedPath.empty()) { Poco::File file(definedPath); - if(file.exists() && file.isFile()){ - // Load the exact path - filenameArg = definedPath; - }} - try{ - - const std::string filenameArg = fuzzyName; - IAlgorithm_sptr algLoadRun = AlgorithmManager::Instance().create("LoadISISNexus"); + if (file.exists() && file.isFile()) { + // Load the exact path + filenameArg = definedPath; + } + } + try { + IAlgorithm_sptr algLoadRun = + AlgorithmManager::Instance().create("LoadISISNexus"); algLoadRun->setChild(true); algLoadRun->setRethrows(true); algLoadRun->initialize(); @@ -44,29 +46,52 @@ Measurement ReflNexusMeasurementSource::obtain(const std::string &definedPath, c algLoadRun->setPropertyValue("OutputWorkspace", "dummy"); algLoadRun->execute(); Workspace_sptr temp = algLoadRun->getProperty("OutputWorkspace"); - MatrixWorkspace_sptr outWS = boost::dynamic_pointer_cast<MatrixWorkspace>(temp); - - - return Measurement::InvalidMeasurement("Not yet implemented"); - + MatrixWorkspace_sptr outWS = + boost::dynamic_pointer_cast<MatrixWorkspace>(temp); + if (outWS.get() == NULL) { + WorkspaceGroup_sptr tempGroup = + boost::dynamic_pointer_cast<WorkspaceGroup>(temp); + outWS = + boost::dynamic_pointer_cast<MatrixWorkspace>(tempGroup->getItem(0)); } - catch(std::runtime_error& ex){ - std::stringstream buffer; - buffer << "Meta-data load attemped a load using: " << filenameArg << std::endl; - buffer << ex.what(); - const std::string message = buffer.str(); - return Measurement::InvalidMeasurement(message); + auto run = outWS->run(); + const std::string measurementId = + run.getPropertyValueAsType<std::string>("measurement_id"); + const std::string measurementSubId = + run.getPropertyValueAsType<std::string>("measurement_subid"); + const std::string measurementLabel = + run.getPropertyValueAsType<std::string>("measurement_label"); + const std::string measurementType = + run.getPropertyValueAsType<std::string>("measurement_type"); + const std::string runNumber = + run.getPropertyValueAsType<std::string>("run_number"); + + double theta = -1.0; + try { + Property *prop = run.getProperty("stheta"); + if (TimeSeriesProperty<double> *tsp = + dynamic_cast<TimeSeriesProperty<double> *>(prop)) { + theta = tsp->valuesAsVector().back(); + } + } catch (Exception::NotFoundError &) { } - - + return Measurement(measurementId, measurementSubId, measurementLabel, + measurementType, theta, runNumber); + + } catch (std::runtime_error &ex) { + std::stringstream buffer; + buffer << "Meta-data load attemped a load using: " << filenameArg + << std::endl; + buffer << ex.what(); + const std::string message = buffer.str(); + return Measurement::InvalidMeasurement(message); + } } -ReflNexusMeasurementSource *ReflNexusMeasurementSource::clone() const -{ - return new ReflNexusMeasurementSource(*this); +ReflNexusMeasurementSource *ReflNexusMeasurementSource::clone() const { + return new ReflNexusMeasurementSource(*this); } - } // namespace CustomInterfaces } // namespace MantidQt diff --git a/MantidQt/CustomInterfaces/test/ReflNexusMeasurementSourceTest.h b/MantidQt/CustomInterfaces/test/ReflNexusMeasurementSourceTest.h index a4a23222199..0c6656d561b 100644 --- a/MantidQt/CustomInterfaces/test/ReflNexusMeasurementSourceTest.h +++ b/MantidQt/CustomInterfaces/test/ReflNexusMeasurementSourceTest.h @@ -15,26 +15,37 @@ public: static ReflNexusMeasurementSourceTest *createSuite() { return new ReflNexusMeasurementSourceTest(); } static void destroySuite( ReflNexusMeasurementSourceTest *suite ) { delete suite; } - void xtest_obatin_via_full_path(){ + void test_obatin_via_full_path() { - std::string path = Mantid::API::FileFinder::Instance().getFullPath("POLREF14966"); + std::string path = + Mantid::API::FileFinder::Instance().findRun("POLREF14966"); Poco::File file(path); TSM_ASSERT("Test setup incorrect", !path.empty() && file.exists()); ReflNexusMeasurementSource source; Measurement measurement = source.obtain(path, "made_up"); + TS_ASSERT(measurement.isUseable()); + TS_ASSERT(measurement.isUseable()); + TS_ASSERT_EQUALS("34", measurement.id()); + TS_ASSERT_EQUALS("0", measurement.subId()); + TS_ASSERT_EQUALS("14966", measurement.run()); + TS_ASSERT_EQUALS("", measurement.label()); + TS_ASSERT_EQUALS("", measurement.label()); } void test_obtain_via_fuzzy_path() { - //ReflNexusMeasurementSource source; - - //Measurement measurement = source.obtain("made_up", "POLREF14966"); - + ReflNexusMeasurementSource source; + + Measurement measurement = source.obtain("made_up", "POLREF14966"); + TS_ASSERT(measurement.isUseable()); + TS_ASSERT_EQUALS("34", measurement.id()); + TS_ASSERT_EQUALS("0", measurement.subId()); + TS_ASSERT_EQUALS("14966", measurement.run()); + TS_ASSERT_EQUALS("", measurement.label()); + TS_ASSERT_EQUALS("", measurement.label()); } - - }; -- GitLab