Newer
Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
Janik Zikovsky
committed
#include "MantidAPI/AlgorithmManager.h"
#include "MantidAPI/AnalysisDataService.h"
#include "MantidAPI/MatrixWorkspace.h"
#include "MantidAPI/NumericAxis.h"
#include "MantidAPI/WorkspaceGroup.h"
#include "MantidAPI/WorkspaceHistory.h"
#include "MantidDataHandling/Load.h"
#include "MantidDataHandling/LoadInstrument.h"
#include "MantidDataHandling/LoadNexusProcessed.h"
#include "MantidDataHandling/SaveNexusProcessed.h"
Janik Zikovsky
committed
#include "MantidDataObjects/EventWorkspace.h"
#include "MantidDataObjects/LeanElasticPeaksWorkspace.h"
#include "MantidDataObjects/Peak.h"
#include "MantidDataObjects/PeakShapeSpherical.h"
#include "MantidDataObjects/PeaksWorkspace.h"
#include "MantidGeometry/IDTypes.h"
Russell Taylor
committed
#include "MantidGeometry/Instrument.h"
#include "MantidGeometry/Instrument/InstrumentDefinitionParser.h"
#include "MantidTestHelpers/NexusTestHelper.h"
#include "SaveNexusProcessedTest.h"
Janik Zikovsky
committed
#include <cxxtest/TestSuite.h>
#include <hdf5.h>
#include <string>
#include "MantidTestHelpers/WorkspaceCreationHelper.h"
using namespace Mantid::Geometry;
using namespace Mantid::DataObjects;
using namespace Mantid::API;
using Mantid::detid_t;
// Note that this suite tests an old version of Nexus processed files that we
// continue to support.
// LoadRawSaveNxsLoadNxs tests the current version of Nexus processed by loading
// a newly created Nexus processed file.
// LoadRawSaveNxsLoadNxs should be run when making any changes to
// LoadNexusProcessed
// in addition to this test.
class LoadNexusProcessedTest : public CxxTest::TestSuite {
public:
static LoadNexusProcessedTest *createSuite() {
static void destroySuite(LoadNexusProcessedTest *suite) { delete suite; }
LoadNexusProcessedTest()
: testFile("GEM38370_Focussed_Legacy.nxs"), output_ws("nxstest"),
m_savedTmpEventFile("") {}
~LoadNexusProcessedTest() override {
AnalysisDataService::Instance().clear();
clearTmpEventNexus();
}
void testFastMultiPeriodDefault() {
LoadNexusProcessed alg;
alg.initialize();
TS_ASSERT(alg.isInitialized());
const bool bFastMultiPeriod = alg.getProperty("FastMultiPeriod");
TSM_ASSERT("Should defalt to offering fast multiperiod loading",
bFastMultiPeriod);
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
TS_ASSERT_THROWS_NOTHING(alg.execute());
Workspace_sptr workspace;
TS_ASSERT_THROWS_NOTHING(
workspace = AnalysisDataService::Instance().retrieve(output_ws));
TS_ASSERT(workspace.get());
MatrixWorkspace_sptr matrix_ws =
std::dynamic_pointer_cast<MatrixWorkspace>(workspace);
// Test proton charge from the sample block
Janik Zikovsky
committed
TS_ASSERT_DELTA(matrix_ws->run().getProtonCharge(), 30.14816, 1e-5);
doHistoryTest(matrix_ws);
std::shared_ptr<const Mantid::Geometry::Instrument> inst =
TS_ASSERT_EQUALS(inst->getName(), "GEM");
TS_ASSERT_EQUALS(inst->getSource()->getPos().Z(), -17);
void testNexusProcessed_Min_Max() {
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
alg.setPropertyValue("SpectrumMin", "2");
alg.setPropertyValue("SpectrumMax", "4");
const std::vector<int> expectedSpectra = {3, 4, 5};
doSpectrumListTests(alg, expectedSpectra);
void testNexusProcessed_List() {
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
alg.setPropertyValue("SpectrumList", "1,2,3,4");
const std::vector<int> expectedSpectra = {2, 3, 4, 5};
doSpectrumListTests(alg, expectedSpectra);
void testNexusProcessed_Min_Max_List() {
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
alg.setPropertyValue("SpectrumMin", "1");
alg.setPropertyValue("SpectrumMax", "3");
alg.setPropertyValue("SpectrumList", "4,5");
const std::vector<int> expectedSpectra = {2, 3, 4, 5, 6};
doSpectrumListTests(alg, expectedSpectra);
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
doSpectrumMinOrMaxTest(alg, 3);
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
alg.setPropertyValue("Filename", testFile);
alg.setPropertyValue("OutputWorkspace", output_ws);
doSpectrumMinOrMaxTest(alg, 3);
}
// Saving and reading masking correctly
LoadNexusProcessed alg;
TS_ASSERT_THROWS_NOTHING(alg.initialize());
testFile = "focussed.nxs";
alg.setPropertyValue("Filename", testFile);
testFile = alg.getPropertyValue("Filename");
alg.setPropertyValue("OutputWorkspace", output_ws);
TS_ASSERT_THROWS_NOTHING(alg.execute());
Loading
Loading full blame...