Skip to content
Snippets Groups Projects
ChopDataTest.h 3.11 KiB
Newer Older
#ifndef ALG_CHOPDATA_TEST_H_
#define ALG_CHOPDATA_TEST_H_

#include <cxxtest/TestSuite.h>

#include "MantidAlgorithms/ChopData.h"
#include "MantidTestHelpers/WorkspaceCreationHelper.h"

using namespace Mantid::API;
using namespace Mantid::Algorithms;

class ChopDataTest : public CxxTest::TestSuite {
public:
  void testMetaInfo() {
    alg = new ChopData();
    TS_ASSERT_EQUALS(alg->name(), "ChopData");
    TS_ASSERT_EQUALS(alg->version(), 1);
    delete alg;
  }

  void testInit() {
    alg = new ChopData();
    TS_ASSERT_THROWS_NOTHING(alg->initialize());
    TS_ASSERT(alg->isInitialized());
    delete alg;
  }

  void testExec() {
    Mantid::DataObjects::Workspace2D_sptr inputWS =
        WorkspaceCreationHelper::Create2DWorkspaceBinned(149, 24974, 5, 4);
    for (int i = 0; i < 4995; i++) {
      inputWS->dataX(140)[i + 19980] = 0.2;
    }

    inputWS->getAxis(0)->setUnit("TOF");

    TS_ASSERT_THROWS_NOTHING(Mantid::API::AnalysisDataService::Instance().add(
        "chopdatatest_input", inputWS));
    const size_t nHist = inputWS->getNumberHistograms();

    TS_ASSERT_EQUALS(nHist, 149);

    alg = new ChopData();
    TS_ASSERT_THROWS_NOTHING(alg->initialize());
    TS_ASSERT_THROWS_NOTHING(
        alg->setPropertyValue("InputWorkspace", "chopdatatest_input"));
    TS_ASSERT_THROWS_NOTHING(
        alg->setPropertyValue("OutputWorkspace", "chopdatatest_output"));
    TS_ASSERT_THROWS_NOTHING(
        alg->setProperty<int>("MonitorWorkspaceIndex", 140));
    TS_ASSERT_THROWS_NOTHING(
        alg->setProperty<double>("IntegrationRangeLower", 5000.0));
    TS_ASSERT_THROWS_NOTHING(
        alg->setProperty<double>("IntegrationRangeUpper", 10000.0));
    TS_ASSERT_THROWS_NOTHING(alg->execute());
    TS_ASSERT(alg->isExecuted());

    // Get workspace group output by algorithm
    Mantid::API::WorkspaceGroup_sptr wsgroup;
    TS_ASSERT_THROWS_NOTHING(
        wsgroup = boost::dynamic_pointer_cast<Mantid::API::WorkspaceGroup>(
            Mantid::API::AnalysisDataService::Instance().retrieve(
                "chopdatatest_output")));

    TS_ASSERT_EQUALS(wsgroup->getNumberOfEntries(), 4);

    std::vector<std::string> wsnames = wsgroup->getNames();

    Mantid::API::MatrixWorkspace_const_sptr output1;
    Mantid::API::MatrixWorkspace_const_sptr output4;

    TS_ASSERT_THROWS_NOTHING(
        output1 = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(
            Mantid::API::AnalysisDataService::Instance().retrieve(wsnames[0])));

    TS_ASSERT_THROWS_NOTHING(
        output4 = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(
            Mantid::API::AnalysisDataService::Instance().retrieve(wsnames[3])));

    TS_ASSERT_EQUALS(output1->getNumberHistograms(), nHist);
    TS_ASSERT_EQUALS(output4->getNumberHistograms(), nHist);

    TS_ASSERT_EQUALS(output1->blocksize(), 4998);
    TS_ASSERT_EQUALS(output4->blocksize(), 9975);

    TS_ASSERT(output1->readX(0)[4997] < output4->readX(0)[9975]);

    delete alg;

    // Cleanup
    AnalysisDataService::Instance().remove("chopdatatest_input");
    AnalysisDataService::Instance().deepRemoveGroup("chopdatatest_output");
  ChopData *alg;