Newer
Older
#ifndef MANTID_MDALGORITHMS_COMPAREMDWORKSPACESTEST_H_
#define MANTID_MDALGORITHMS_COMPAREMDWORKSPACESTEST_H_
#include "MantidAPI/FrameworkManager.h"
#include "MantidAPI/IMDNode.h"
#include "MantidAPI/IMDWorkspace.h"
#include "MantidDataObjects/MDHistoWorkspace.h"
#include "MantidMDAlgorithms/CloneMDWorkspace.h"
#include "MantidMDAlgorithms/CompareMDWorkspaces.h"
#include "MantidTestHelpers/MDEventsTestHelper.h"
#include <cxxtest/TestSuite.h>
using namespace Mantid;
using namespace Mantid::API;
using namespace Mantid::DataObjects;
using namespace Mantid::MDAlgorithms;
using namespace Mantid::DataObjects::MDEventsTestHelper;
using Mantid::DataObjects::MDHistoWorkspace_sptr;
class CompareMDWorkspacesTest : public CxxTest::TestSuite
{
public:
void test_Init()
{
CompareMDWorkspaces alg;
TS_ASSERT_THROWS_NOTHING( alg.initialize() )
TS_ASSERT( alg.isInitialized() )
}
void doTest(std::string ws1, std::string ws2, std::string resultExpected="Success!",
bool CheckEvents = true,bool IgnoreDifferentID=false)
{
CompareMDWorkspaces alg;
TS_ASSERT_THROWS_NOTHING( alg.initialize() )
TS_ASSERT( alg.isInitialized() )
TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Workspace1", ws1) );
TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Workspace2", ws2) );
TS_ASSERT_THROWS_NOTHING( alg.setProperty("CheckEvents", CheckEvents) );
TS_ASSERT_THROWS_NOTHING( alg.setProperty("Tolerance", 1e-5) );
TS_ASSERT_THROWS_NOTHING( alg.setProperty("IgnoreBoxID", IgnoreDifferentID) );
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
TS_ASSERT_THROWS_NOTHING( alg.execute(); );
TS_ASSERT( alg.isExecuted() );
std::string result = alg.getPropertyValue("Result");
std::cout << result << std::endl;
TSM_ASSERT( result.c_str(), boost::starts_with(result, resultExpected));
}
void test_histo()
{
MDHistoWorkspace_sptr A = makeFakeMDHistoWorkspace(1.56, 3, 10, 10.0, 1.57, "A");
MDHistoWorkspace_sptr B = makeFakeMDHistoWorkspace(1.56, 3, 10, 10.0, 1.57, "B");
doTest("A", "B");
B->setSignalAt(123, 2.34);
doTest("A", "B", "MDHistoWorkspaces have a different signal at index 123");
B->setSignalAt(123, 1.56);
B->setErrorSquaredAt(123, 2.34);
doTest("A", "B", "MDHistoWorkspaces have a different error at index 123");
MDHistoWorkspace_sptr C = makeFakeMDHistoWorkspace(1.56, 3, 9, 10.0, 1.57, "C");
doTest("A", "C", "Dimension #0 has a different number of bins");
MDHistoWorkspace_sptr C2 = makeFakeMDHistoWorkspace(1.56, 3, 10, 20.0, 1.57, "C2");
doTest("A", "C2", "Dimension #0 has a different maximum");
MDHistoWorkspace_sptr D = makeFakeMDHistoWorkspace(1.56, 2, 10, 10.0, 1.57, "D");
doTest("A", "D", "Workspaces have a different number of dimensions");
}
void test_md()
{
makeAnyMDEW<MDEvent<3>, 3>(2, 0., 10., 1, "A");
makeAnyMDEW<MDLeanEvent<3>, 3>(2, 0., 10., 1, "mdle3");
doTest("A", "mdle3", "Workspaces are of different types");
makeAnyMDEW<MDEvent<3>, 3>(2, 0., 10., 2, "B");
doTest("A", "B", "Box signal does not match");
makeAnyMDEW<MDEvent<3>, 3>(3, 0., 10., 1, "C");
doTest("A", "C", "Workspaces do not have the same number of boxes");
CloneMDWorkspace cloner ;
cloner.initialize();
cloner.setPropertyValue("InputWorkspace","A");
cloner.setPropertyValue("OutputWorkspace","A1");
TS_ASSERT_THROWS_NOTHING(cloner.execute());
if( !cloner.isExecuted())
return;
doTest("A","A1");
auto mdWorkspace = dynamic_cast<IMDEventWorkspace *>(FrameworkManager::Instance().getWorkspace("A1"));
TSM_ASSERT("Can not retrieve MD workspace A1 from analysis data service",mdWorkspace );
std::vector<IMDNode *> boxes;
mdWorkspace->getBoxes(boxes, 1000, false);
boxes[0]->setID(10000);
doTest("A","A1","Boxes have different ID (0 vs 10000)");
// with ignore box ID the comparison is true
doTest("A","A1","Success!",true,true);
}
};
#endif /* MANTID_MDALGORITHMS_COMPAREMDWORKSPACESTEST_H_ */