Skip to content
Snippets Groups Projects
Commit 70bdc58e authored by Anton Piccardo-Selg's avatar Anton Piccardo-Selg
Browse files

Refs #13458 Add and refactor unit tests for loadnexus with x errors

parent d1dc9241
No related branches found
No related tags found
No related merge requests found
......@@ -1010,163 +1010,16 @@ public:
}
}
void test_SaveAndLoadOnHistogramWS() {
// Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace
// Create histogram workspace with two spectra and 4 points
std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
std::vector<double> y1 = boost::assign::list_of(1)(2);
std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
std::vector<double> y2 = boost::assign::list_of(1)(2);
MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
"Workspace2D", 2, x1.size(), y1.size());
inputWs->dataX(0) = x1;
inputWs->dataX(1) = x2;
inputWs->dataY(0) = y1;
inputWs->dataY(1) = y2;
// Save workspace
IAlgorithm_sptr save =
AlgorithmManager::Instance().create("SaveNexusProcessed");
save->initialize();
TS_ASSERT(save->isInitialized());
TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(save->execute());
// Load workspace
IAlgorithm_sptr load =
AlgorithmManager::Instance().create("LoadNexusProcessed");
load->initialize();
TS_ASSERT(load->isInitialized());
TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(
load->setPropertyValue("OutputWorkspace", "output"));
TS_ASSERT_THROWS_NOTHING(load->execute());
// Check spectra in loaded workspace
MatrixWorkspace_sptr outputWs =
AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
// Remove workspace and saved nexus file
AnalysisDataService::Instance().remove("output");
Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
}
void test_SaveAndLoadOnHistogramWS() { doTestLoadAndSaveHistogramWS(false); }
void test_SaveAndLoadOnHistogramWSwithXErrors() {
// Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace with x errors
// Create histogram workspace with two spectra and 4 points
std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
std::vector<double> y1 = boost::assign::list_of(1)(2);
std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
std::vector<double> dx2 = boost::assign::list_of(3)(2)(1);
std::vector<double> y2 = boost::assign::list_of(1)(2);
MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
"Workspace2D", 2, x1.size(), y1.size());
inputWs->dataX(0) = x1;
inputWs->dataX(1) = x2;
inputWs->dataY(0) = y1;
inputWs->dataY(1) = y2;
inputWs->dataDx(0) = dx1;
inputWs->dataDx(1) = dx2;
// Save workspace
IAlgorithm_sptr save =
AlgorithmManager::Instance().create("SaveNexusProcessed");
save->initialize();
TS_ASSERT(save->isInitialized());
TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(save->execute());
// Load workspace
IAlgorithm_sptr load =
AlgorithmManager::Instance().create("LoadNexusProcessed");
load->initialize();
TS_ASSERT(load->isInitialized());
TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(
load->setPropertyValue("OutputWorkspace", "output"));
TS_ASSERT_THROWS_NOTHING(load->execute());
// Check spectra in loaded workspace
MatrixWorkspace_sptr outputWs =
AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
// Remove workspace and saved nexus file
AnalysisDataService::Instance().remove("output");
Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
doTestLoadAndSaveHistogramWS(true);
}
void test_SaveAndLoadOnPointLikeWS() {
// Test SaveNexusProcessed/LoadNexusProcessed on a point-like workspace
// Create histogram workspace with two spectra and 4 points
std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
std::vector<double> y1 = boost::assign::list_of(1)(2)(3);
std::vector<double> x2 = boost::assign::list_of(10)(20)(30);
std::vector<double> y2 = boost::assign::list_of(10)(20)(30);
MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
"Workspace2D", 2, x1.size(), y1.size());
inputWs->dataX(0) = x1;
inputWs->dataX(1) = x2;
inputWs->dataY(0) = y1;
inputWs->dataY(1) = y2;
// Save workspace
IAlgorithm_sptr save =
AlgorithmManager::Instance().create("SaveNexusProcessed");
save->initialize();
TS_ASSERT(save->isInitialized());
TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(save->execute());
// Load workspace
IAlgorithm_sptr load =
AlgorithmManager::Instance().create("LoadNexusProcessed");
load->initialize();
TS_ASSERT(load->isInitialized());
TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(
load->setPropertyValue("OutputWorkspace", "output"));
TS_ASSERT_THROWS_NOTHING(load->execute());
// Check spectra in loaded workspace
MatrixWorkspace_sptr outputWs =
AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
void test_SaveAndLoadOnPointLikeWS() { doTestLoadAndSavePointWS(false); }
// Remove workspace and saved nexus file
AnalysisDataService::Instance().remove("output");
Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
void test_SaveAndLoadOnPointLikeWSWithXErrors() {
doTestLoadAndSavePointWS(true);
}
void do_load_multiperiod_workspace(bool fast) {
......@@ -1317,6 +1170,131 @@ private:
Poco::File(m_savedTmpEventFile).remove();
}
void doTestLoadAndSaveHistogramWS(bool useXErrors = false) {
// Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace with
// x errors
// Create histogram workspace with two spectra and 4 points
std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
std::vector<double> y1 = boost::assign::list_of(1)(2);
std::vector<double> x2 = boost::assign::list_of(1)(2)(3);
std::vector<double> dx2 = boost::assign::list_of(3)(2)(1);
std::vector<double> y2 = boost::assign::list_of(1)(2);
MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
"Workspace2D", 2, x1.size(), y1.size());
inputWs->dataX(0) = x1;
inputWs->dataX(1) = x2;
inputWs->dataY(0) = y1;
inputWs->dataY(1) = y2;
if (useXErrors) {
inputWs->dataDx(0) = dx1;
inputWs->dataDx(1) = dx2;
}
// Save workspace
IAlgorithm_sptr save =
AlgorithmManager::Instance().create("SaveNexusProcessed");
save->initialize();
TS_ASSERT(save->isInitialized());
TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(save->execute());
// Load workspace
IAlgorithm_sptr load =
AlgorithmManager::Instance().create("LoadNexusProcessed");
load->initialize();
TS_ASSERT(load->isInitialized());
TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(
load->setPropertyValue("OutputWorkspace", "output"));
TS_ASSERT_THROWS_NOTHING(load->execute());
// Check spectra in loaded workspace
MatrixWorkspace_sptr outputWs =
AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
if (useXErrors) {
TSM_ASSERT("Should have an x error", outputWs->hasDx(0));
TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
}
// Remove workspace and saved nexus file
AnalysisDataService::Instance().remove("output");
Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
}
void doTestLoadAndSavePointWS(bool useXErrors = false) {
// Test SaveNexusProcessed/LoadNexusProcessed on a point-like workspace
// Create histogram workspace with two spectra and 4 points
std::vector<double> x1 = boost::assign::list_of(1)(2)(3);
std::vector<double> dx1 = boost::assign::list_of(3)(2)(1);
std::vector<double> y1 = boost::assign::list_of(1)(2)(3);
std::vector<double> x2 = boost::assign::list_of(10)(20)(30);
std::vector<double> dx2 = boost::assign::list_of(30)(22)(10);
std::vector<double> y2 = boost::assign::list_of(10)(20)(30);
MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
"Workspace2D", 2, x1.size(), y1.size());
inputWs->dataX(0) = x1;
inputWs->dataX(1) = x2;
inputWs->dataY(0) = y1;
inputWs->dataY(1) = y2;
if (useXErrors) {
inputWs->dataDx(0) = dx1;
inputWs->dataDx(1) = dx2;
}
// Save workspace
IAlgorithm_sptr save =
AlgorithmManager::Instance().create("SaveNexusProcessed");
save->initialize();
TS_ASSERT(save->isInitialized());
TS_ASSERT_THROWS_NOTHING(save->setProperty("InputWorkspace", inputWs));
TS_ASSERT_THROWS_NOTHING(save->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(save->execute());
// Load workspace
IAlgorithm_sptr load =
AlgorithmManager::Instance().create("LoadNexusProcessed");
load->initialize();
TS_ASSERT(load->isInitialized());
TS_ASSERT_THROWS_NOTHING(load->setPropertyValue(
"Filename", "TestSaveAndLoadNexusProcessed.nxs"));
TS_ASSERT_THROWS_NOTHING(
load->setPropertyValue("OutputWorkspace", "output"));
TS_ASSERT_THROWS_NOTHING(load->execute());
// Check spectra in loaded workspace
MatrixWorkspace_sptr outputWs =
AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("output");
TS_ASSERT_EQUALS(inputWs->readX(0), outputWs->readX(0));
TS_ASSERT_EQUALS(inputWs->readX(1), outputWs->readX(1));
TS_ASSERT_EQUALS(inputWs->readY(0), outputWs->readY(0));
TS_ASSERT_EQUALS(inputWs->readY(1), outputWs->readY(1));
TS_ASSERT_EQUALS(inputWs->readE(0), outputWs->readE(0));
TS_ASSERT_EQUALS(inputWs->readE(1), outputWs->readE(1));
if (useXErrors) {
TSM_ASSERT("Should have an x error", outputWs->hasDx(0));
TS_ASSERT_EQUALS(inputWs->readDx(0), outputWs->readDx(0));
TS_ASSERT_EQUALS(inputWs->readDx(1), outputWs->readDx(1));
}
// Remove workspace and saved nexus file
AnalysisDataService::Instance().remove("output");
Poco::File("TestSaveAndLoadNexusProcessed.nxs").remove();
}
std::string testFile, output_ws;
/// Saved using SaveNexusProcessed and re-used in several load event tests
std::string m_savedTmpEventFile;
......
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