Skip to content

Commit

Permalink
Re #11028 Adding test to check different frequency units
Browse files Browse the repository at this point in the history
  • Loading branch information
raquelalvarezbanos committed Feb 10, 2015
1 parent 02dfc8e commit b487264
Showing 1 changed file with 78 additions and 7 deletions.
85 changes: 78 additions & 7 deletions Code/Mantid/Framework/Algorithms/test/RRFMuonTest.h
Expand Up @@ -3,14 +3,9 @@

#include <cxxtest/TestSuite.h>
#include "MantidAlgorithms/RRFMuon.h"
#include "MantidDataObjects/Workspace2D.h"
#include "MantidAPI/Workspace.h"
#include <cmath>
#include <Poco/File.h>
#include <stdexcept>
#include "MantidKernel/UnitFactory.h"

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

class RRFMuonTest : public CxxTest::TestSuite
Expand Down Expand Up @@ -42,6 +37,7 @@ class RRFMuonTest : public CxxTest::TestSuite
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("InputWorkspace", ws) );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("OutputWorkspace", "outputWs") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency", "0") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency units", "MHz") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Phase", "0") );
// Execute
TS_ASSERT_THROWS_NOTHING(rrfMuon.execute());
Expand Down Expand Up @@ -74,6 +70,7 @@ class RRFMuonTest : public CxxTest::TestSuite
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("InputWorkspace", ws) );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("OutputWorkspace", "outputWs") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency", "1") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency units", "MHz") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Phase", "0") );
// Execute
TS_ASSERT_THROWS_NOTHING(rrfMuon.execute());
Expand All @@ -99,8 +96,79 @@ class RRFMuonTest : public CxxTest::TestSuite
TS_ASSERT_DELTA( ows->readY(1)[200], 0, 0.001 );
}

void testRRFMuonUnits()
{
// Test of the algorithm at non-zero frequency
// Results with different frequency units should match

// Create input workspace with three spectra
MatrixWorkspace_sptr ws = createDummyWorkspace();

// Initialise
TS_ASSERT_THROWS_NOTHING( rrfMuon.initialize() );
TS_ASSERT_THROWS_NOTHING( rrfMuon2.initialize() );
TS_ASSERT_THROWS_NOTHING( rrfMuon3.initialize() );
TS_ASSERT( rrfMuon.isInitialized() );
TS_ASSERT( rrfMuon2.isInitialized() );
TS_ASSERT( rrfMuon3.isInitialized() );
// Set Values
// First run
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("InputWorkspace", ws) );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("OutputWorkspace", "outputWs1") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency", "1") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Frequency units", "MHz") );
TS_ASSERT_THROWS_NOTHING( rrfMuon.setProperty("Phase", "0") );
// Second run
TS_ASSERT_THROWS_NOTHING( rrfMuon2.setProperty("InputWorkspace", ws) );
TS_ASSERT_THROWS_NOTHING( rrfMuon2.setProperty("OutputWorkspace", "outputWs2") );
TS_ASSERT_THROWS_NOTHING( rrfMuon2.setProperty("Frequency", "0.159155") );
TS_ASSERT_THROWS_NOTHING( rrfMuon2.setProperty("Frequency units", "Mrad/s") );
TS_ASSERT_THROWS_NOTHING( rrfMuon2.setProperty("Phase", "0") );
// Third run
TS_ASSERT_THROWS_NOTHING( rrfMuon3.setProperty("InputWorkspace", ws) );
TS_ASSERT_THROWS_NOTHING( rrfMuon3.setProperty("OutputWorkspace", "outputWs3") );
TS_ASSERT_THROWS_NOTHING( rrfMuon3.setProperty("Frequency", "11.742398") );
TS_ASSERT_THROWS_NOTHING( rrfMuon3.setProperty("Frequency units", "Gauss") );
TS_ASSERT_THROWS_NOTHING( rrfMuon3.setProperty("Phase", "0") );
// Execute all of them
TS_ASSERT_THROWS_NOTHING(rrfMuon.execute());
TS_ASSERT_THROWS_NOTHING(rrfMuon2.execute());
TS_ASSERT_THROWS_NOTHING(rrfMuon3.execute());
TS_ASSERT(rrfMuon.isExecuted());
TS_ASSERT(rrfMuon2.isExecuted());
TS_ASSERT(rrfMuon3.isExecuted());
// Get result
MatrixWorkspace_const_sptr ows1 =
boost::dynamic_pointer_cast<MatrixWorkspace>(AnalysisDataService::Instance().retrieve("outputWs1"));
TS_ASSERT(ows1);
MatrixWorkspace_const_sptr ows2 =
boost::dynamic_pointer_cast<MatrixWorkspace>(AnalysisDataService::Instance().retrieve("outputWs2"));
TS_ASSERT(ows2);
MatrixWorkspace_const_sptr ows3 =
boost::dynamic_pointer_cast<MatrixWorkspace>(AnalysisDataService::Instance().retrieve("outputWs3"));
TS_ASSERT(ows3);

// Checks
// Y values
// ows1 vs ows2
TS_ASSERT_DELTA ( ows1->readY(0)[ 5], ows2->readY(0)[ 5], 0.000001 );
TS_ASSERT_DELTA ( ows1->readY(0)[ 98], ows2->readY(0)[ 98], 0.000001 );
TS_ASSERT_DELTA ( ows1->readY(0)[276], ows2->readY(0)[276], 0.000001 );
TS_ASSERT_DIFFERS( ows1->readY(0)[ 5], ows2->readY(0)[ 5]);
TS_ASSERT_DIFFERS( ows1->readY(0)[ 98], ows2->readY(0)[ 98]);
TS_ASSERT_DIFFERS( ows1->readY(0)[276], ows2->readY(0)[276]);
// ows1 vs ows3
TS_ASSERT_DELTA ( ows1->readY(0)[ 8], ows3->readY(0)[ 8], 0.000001 );
TS_ASSERT_DELTA ( ows1->readY(0)[109], ows3->readY(0)[109], 0.000001 );
TS_ASSERT_DELTA ( ows1->readY(0)[281], ows3->readY(0)[281], 0.000001 );
TS_ASSERT_DIFFERS( ows1->readY(0)[ 8], ows3->readY(0)[ 8]);
TS_ASSERT_DIFFERS( ows1->readY(0)[109], ows3->readY(0)[109]);
TS_ASSERT_DIFFERS( ows1->readY(0)[281], ows3->readY(0)[281]);
}

private:
RRFMuon rrfMuon;
RRFMuon rrfMuon2, rrfMuon3;

MatrixWorkspace_sptr createDummyWorkspace()
{
Expand All @@ -109,7 +177,7 @@ class RRFMuonTest : public CxxTest::TestSuite

for (int i=0; i<nBins; i++)
{
double x = i/static_cast<int>(nBins);
double x = i/static_cast<double>(nBins);
ws->dataX(0)[i] = x;
ws->dataY(0)[i] = cos(2*M_PI*x);
ws->dataX(1)[i] = x;
Expand All @@ -119,6 +187,9 @@ class RRFMuonTest : public CxxTest::TestSuite
ws->dataX(0)[nBins] = nBins;
ws->dataX(1)[nBins] = nBins;

// Units
ws->getAxis(0)->unit() = Mantid::Kernel::UnitFactory::Instance().create("TOF");

return ws;
}

Expand Down

0 comments on commit b487264

Please sign in to comment.