Skip to content
Snippets Groups Projects
Commit 63767a83 authored by Gigg, Martyn Anthony's avatar Gigg, Martyn Anthony
Browse files

Fix the two system tests. The Aziz one just has a new reference result as the...

Fix the two system tests. The Aziz one just has a new reference result as the internal order of the grouped detectors has changed but this should not matter since we don't ungroup afterward. The TOSCA test failed because ExtractSingleSpectrum was pulling out the incorrect spectrum after the ISpectra changes. The blame here is due to a bad unit test, it only tested the data and not the underlying spectra/detector links. This test has been improved. Refs #3203
parent 431342a7
No related branches found
No related tags found
No related merge requests found
...@@ -56,8 +56,17 @@ void ExtractSingleSpectrum::exec() ...@@ -56,8 +56,17 @@ void ExtractSingleSpectrum::exec()
const Axis * axisOne = inputWorkspace->getAxis(1); const Axis * axisOne = inputWorkspace->getAxis(1);
if( axisOne->isSpectra() ) if( axisOne->isSpectra() )
{ {
outputWorkspace->getAxis(1)->spectraNo(0) = inputWorkspace->getAxis(1)->spectraNo(desiredSpectrum); const specid_t outSpecNo = inputWorkspace->getAxis(1)->spectraNo(desiredSpectrum);
outputWorkspace->getAxis(1)->spectraNo(0) = outSpecNo;
ISpectrum* outSpec = outputWorkspace->getSpectrum(0);
// Also set the spectrum number to the group number
outSpec->setSpectrumNo(outSpecNo);
outSpec->clearDetectorIDs();
const ISpectrum* inSpec = inputWorkspace->getSpectrum(desiredSpectrum);
// Add the detectors for this spectrum to the output workspace's spectra-detector map
outSpec->addDetectorIDs( inSpec->getDetectorIDs() );
} }
setProperty("OutputWorkspace",outputWorkspace); setProperty("OutputWorkspace",outputWorkspace);
progress(1.0); progress(1.0);
} }
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include "MantidAlgorithms/ExtractSingleSpectrum.h" #include "MantidAlgorithms/ExtractSingleSpectrum.h"
#include "MantidTestHelpers/WorkspaceCreationHelper.h" #include "MantidTestHelpers/WorkspaceCreationHelper.h"
using Mantid::detid_t;
class ExtractSingleSpectrumTest : public CxxTest::TestSuite class ExtractSingleSpectrumTest : public CxxTest::TestSuite
{ {
public: public:
...@@ -36,20 +38,25 @@ public: ...@@ -36,20 +38,25 @@ public:
{ {
using namespace Mantid::API; using namespace Mantid::API;
MatrixWorkspace_sptr inputWS = WorkspaceCreationHelper::Create2DWorkspace154(5,5); const int nbins(5);
const int spectrum = 2; MatrixWorkspace_sptr inputWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(5,nbins);
for (int i=0; i<5; ++i)
const int wsIndex = 2;
for (int i=0; i<nbins+1; ++i)
{ {
inputWS->dataX(spectrum)[i] = i; inputWS->dataX(wsIndex)[i] = i;
inputWS->dataY(spectrum)[i] = 20-i; if( i < nbins )
inputWS->dataE(spectrum)[i] = 7; {
inputWS->dataY(wsIndex)[i] = 20-i;
inputWS->dataE(wsIndex)[i] = 7;
}
} }
inputWS->getAxis(1)->spectraNo(spectrum) = spectrum; inputWS->getAxis(1)->spectraNo(wsIndex) = wsIndex;
AnalysisDataService::Instance().add("input",inputWS); AnalysisDataService::Instance().add("input",inputWS);
TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("InputWorkspace","input") ) TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("InputWorkspace","input") )
TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("OutputWorkspace","output") ) TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("OutputWorkspace","output") )
TS_ASSERT_THROWS_NOTHING( extractor.setProperty("WorkspaceIndex",spectrum) ) TS_ASSERT_THROWS_NOTHING( extractor.setProperty("WorkspaceIndex",wsIndex) )
TS_ASSERT_THROWS_NOTHING( extractor.execute() ) TS_ASSERT_THROWS_NOTHING( extractor.execute() )
TS_ASSERT( extractor.isExecuted() ) TS_ASSERT( extractor.isExecuted() )
...@@ -59,13 +66,30 @@ public: ...@@ -59,13 +66,30 @@ public:
MatrixWorkspace_const_sptr outputWS; MatrixWorkspace_const_sptr outputWS;
TS_ASSERT( outputWS = boost::dynamic_pointer_cast<const MatrixWorkspace>(output) ) TS_ASSERT( outputWS = boost::dynamic_pointer_cast<const MatrixWorkspace>(output) )
TS_ASSERT_EQUALS( outputWS->blocksize(), 5 ) TS_ASSERT_EQUALS( outputWS->blocksize(), 5 )
TS_ASSERT_EQUALS( outputWS->readX(0).size(), 5 ) TS_ASSERT_EQUALS( outputWS->readX(0).size(), nbins+1)
TS_ASSERT_EQUALS( outputWS->getAxis(1)->spectraNo(0), spectrum ) TS_ASSERT_EQUALS( outputWS->getAxis(1)->spectraNo(0), wsIndex )
for (int j=0; j<5; ++j) for (int j=0; j<nbins+1; ++j)
{
TS_ASSERT_EQUALS( outputWS->readX(0)[j], j );
if( j < nbins )
{
TS_ASSERT_EQUALS( outputWS->readY(0)[j], 20-j );
TS_ASSERT_EQUALS( outputWS->readE(0)[j], 7 );
}
}
const Mantid::API::ISpectrum *spectrum(NULL);
TS_ASSERT_THROWS_NOTHING(spectrum = outputWS->getSpectrum(0));
if( spectrum )
{
std::set<detid_t> detids = spectrum->getDetectorIDs();
TS_ASSERT_EQUALS(detids.size(), 1);
const detid_t id = *(detids.begin());
TS_ASSERT_EQUALS(id, 3);
}
else
{ {
TS_ASSERT_EQUALS( outputWS->readX(0)[j], j ) TS_FAIL("No spectra/detectors associated with extracted histogram.");
TS_ASSERT_EQUALS( outputWS->readY(0)[j], 20-j )
TS_ASSERT_EQUALS( outputWS->readE(0)[j], 7 )
} }
AnalysisDataService::Instance().remove("input"); AnalysisDataService::Instance().remove("input");
......
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