diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h index 8dd774460d7e0cc3a33349df2957b6c7ed877e51..554f781f58f1c18b5b3ec7b1ac915ef13d597495 100644 --- a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h +++ b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotModelTest.h @@ -7,12 +7,12 @@ #pragma once #include <cxxtest/TestSuite.h> - #include <utility> -#include "IndirectFitPlotModelLegacy.h" +#include "IndirectFitPlotModel.h" #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/FunctionFactory.h" +#include "MantidAPI/MultiDomainFunction.h" #include "MantidAPI/TextAxis.h" #include "MantidCurveFitting/Algorithms/ConvolutionFit.h" #include "MantidCurveFitting/Algorithms/QENSFitSequential.h" @@ -22,6 +22,7 @@ using namespace Mantid::API; using namespace Mantid::CurveFitting; using namespace MantidQt::CustomInterfaces::IDA; using namespace Mantid::IndirectFitDataCreationHelper; +using namespace MantidQt::CustomInterfaces; using ConvolutionFitSequential = Algorithms::ConvolutionFit<Algorithms::QENSFitSequential>; @@ -41,22 +42,25 @@ std::string getFittingFunctionString(std::string const &workspaceName) { "0175)))"; } -IFunction_sptr getFunction(std::string const &functionString) { - return FunctionFactory::Instance().createInitialized(functionString); +MultiDomainFunction_sptr getFunction(std::string const &functionString, + size_t numDomains) { + + return FunctionFactory::Instance().createInitializedMultiDomainFunction( + functionString, numDomains); } -/// A dummy class used to create a model to pass to IndirectFitPlotModelLegacy's +/// A dummy class used to create a model to pass to IndirectFitPlotModel's /// constructor class DummyModel - : public MantidQt::CustomInterfaces::IDA::IndirectFittingModelLegacy { + : public MantidQt::CustomInterfaces::IDA::IndirectFittingModel { public: ~DummyModel(){}; private: std::string sequentialFitOutputName() const override { return ""; }; std::string simultaneousFitOutputName() const override { return ""; }; - std::string singleFitOutputName(std::size_t index, - std::size_t spectrum) const override { + std::string singleFitOutputName(TableDatasetIndex index, + IDA::WorkspaceIndex spectrum) const override { UNUSED_ARG(index); UNUSED_ARG(spectrum); return ""; @@ -67,16 +71,16 @@ private: } }; -void setFittingFunction(IndirectFittingModelLegacy *model, - std::string const &functionString, - bool setFitFunction) { +void setFittingFunction(IndirectFittingModel *model, + std::string const &functionString, bool setFitFunction, + size_t numDomains) { if (setFitFunction) - model->setFitFunction(getFunction(functionString)); + model->setFitFunction(getFunction(functionString, numDomains)); } -IndirectFittingModelLegacy *getEmptyDummyModel() { return new DummyModel(); } +IndirectFittingModel *getEmptyDummyModel() { return new DummyModel(); } -IndirectFittingModelLegacy * +IndirectFittingModel * createModelWithSingleWorkspace(std::string const &workspaceName, int const &numberOfSpectra, bool setFitFunction) { @@ -84,37 +88,31 @@ createModelWithSingleWorkspace(std::string const &workspaceName, SetUpADSWithWorkspace ads(workspaceName, createWorkspace(numberOfSpectra)); model->addWorkspace(workspaceName); setFittingFunction(model, getFittingFunctionString(workspaceName), - setFitFunction); + setFitFunction, numberOfSpectra); return model; } -void addWorkspacesToModel(IndirectFittingModelLegacy *model, - int const &numberOfSpectra) { - UNUSED_ARG(model); - UNUSED_ARG(numberOfSpectra); -} - -template <typename Name, typename... Names> -void addWorkspacesToModel(IndirectFittingModelLegacy *model, - int const &numberOfSpectra, Name const &workspaceName, - Names const &... workspaceNames) { +void addWorkspaceToModel(IndirectFittingModel *model, + int const &numberOfSpectra, + std::string workspaceName) { Mantid::API::AnalysisDataService::Instance().addOrReplace( workspaceName, createWorkspace(numberOfSpectra)); model->addWorkspace(workspaceName); - addWorkspacesToModel(model, numberOfSpectra, workspaceNames...); } -template <typename Name, typename... Names> -IndirectFittingModelLegacy *createModelWithMultipleWorkspaces( - int const &numberOfSpectra, bool setFitFunction, Name const &workspaceName, - Names const &... workspaceNames) { - auto model = createModelWithSingleWorkspace(workspaceName, numberOfSpectra, - setFitFunction); - addWorkspacesToModel(model, numberOfSpectra, workspaceNames...); +IndirectFittingModel *createModelWithMultipleWorkspaces( + int const &numberOfSpectra, bool setFitFunction, + const std::vector<std::string> &workspaceNames) { + auto model = getEmptyDummyModel(); + for (auto name : workspaceNames) { + addWorkspaceToModel(model, numberOfSpectra, name); + } + setFittingFunction(model, getFittingFunctionString(workspaceNames[0]), + setFitFunction, numberOfSpectra * workspaceNames.size()); return model; } -IndirectFittingModelLegacy *createModelWithSingleInstrumentWorkspace( +IndirectFittingModel *createModelWithSingleInstrumentWorkspace( std::string const &workspaceName, int const &xLength, int const &yLength) { auto model = getEmptyDummyModel(); SetUpADSWithWorkspace ads(workspaceName, @@ -141,41 +139,52 @@ IAlgorithm_sptr setupFitAlgorithm(const MatrixWorkspace_sptr &workspace, return alg; } +<<<<<<< HEAD IAlgorithm_sptr getSetupFitAlgorithm(IndirectFittingModelLegacy *model, const MatrixWorkspace_sptr &workspace, std::string const &workspaceName) { setFittingFunction(model, getFittingFunctionString(workspaceName), true); auto alg = setupFitAlgorithm(std::move(workspace), getFittingFunctionString(workspaceName)); - return alg; -} + == == == = IAlgorithm_sptr getSetupFitAlgorithm( + IndirectFittingModel * model, MatrixWorkspace_sptr workspace, + std::string const &workspaceName) { + setFittingFunction(model, getFittingFunctionString(workspaceName), true, + 20); + auto alg = + setupFitAlgorithm(workspace, getFittingFunctionString(workspaceName)); +>>>>>>> Updated IndirectFitPlotModelTest to work with new base classes Re #28057 + return alg; + } -IAlgorithm_sptr getExecutedFitAlgorithm(IndirectFittingModelLegacy *model, - MatrixWorkspace_sptr workspace, - std::string const &workspaceName) { - auto const alg = - getSetupFitAlgorithm(model, std::move(workspace), workspaceName); - alg->execute(); - return alg; -} + IAlgorithm_sptr getExecutedFitAlgorithm(IndirectFittingModel * model, + MatrixWorkspace_sptr workspace, + std::string const &workspaceName) { + auto const alg = + getSetupFitAlgorithm(model, std::move(workspace), workspaceName); + alg->execute(); + return alg; + } -IndirectFittingModelLegacy *getModelWithFitOutputData() { - auto model = createModelWithSingleInstrumentWorkspace("__ConvFit", 6, 5); - auto const modelWorkspace = model->getWorkspace(0); + IndirectFittingModel *getModelWithFitOutputData() { + auto model = createModelWithSingleInstrumentWorkspace("__ConvFit", 6, 5); + auto const modelWorkspace = model->getWorkspace(TableDatasetIndex{0}); - auto const alg = getExecutedFitAlgorithm(model, modelWorkspace, "__ConvFit"); - model->addOutput(alg); - return model; -} + auto const alg = + getExecutedFitAlgorithm(model, modelWorkspace, "__ConvFit"); + model->addOutput(alg); + return model; + } -IndirectFitPlotModelLegacy getFitPlotModel(bool setFitFunction = true) { - return IndirectFitPlotModelLegacy(createModelWithMultipleWorkspaces( - 10, setFitFunction, "Workspace1", "Workspace2")); -} + IndirectFitPlotModel getFitPlotModel(bool setFitFunction = true) { + return IndirectFitPlotModel(createModelWithMultipleWorkspaces( + 10, setFitFunction, + std::vector<std::string>({"Workspace1", "Workspace2"}))); + } -IndirectFitPlotModelLegacy getFitPlotModelWithFitData() { - return IndirectFitPlotModelLegacy(getModelWithFitOutputData()); -} + IndirectFitPlotModel getFitPlotModelWithFitData() { + return IndirectFitPlotModel(getModelWithFitOutputData()); + } } // namespace @@ -184,21 +193,15 @@ public: /// WorkflowAlgorithms do not appear in the FrameworkManager without this line IndirectFitPlotModelTest() { FrameworkManager::Instance(); } - static IndirectFitPlotModelTest *createSuite() { - return new IndirectFitPlotModelTest(); - } - - static void destroySuite(IndirectFitPlotModelTest *suite) { delete suite; } - void tearDown() override { AnalysisDataService::Instance().clear(); } void test_that_IndirectFittingModel_instantiates_a_model_with_the_correct_starting_member_variables() { auto const model = getFitPlotModel(); - TS_ASSERT_EQUALS(model.getActiveDataIndex(), 0); - TS_ASSERT_EQUALS(model.getActiveSpectrum(), 0); - TS_ASSERT_EQUALS(model.numberOfWorkspaces(), 2); + TS_ASSERT_EQUALS(model.getActiveDataIndex(), TableDatasetIndex{0}); + TS_ASSERT_EQUALS(model.getActiveSpectrum(), IDA::WorkspaceIndex{0}); + TS_ASSERT_EQUALS(model.numberOfWorkspaces(), TableDatasetIndex{2}); } void @@ -232,10 +235,11 @@ public: test_that_getSpectra_returns_the_same_spectra_range_which_was_provided_as_input() { auto const model = getFitPlotModel(); - SpectraLegacy const spectra = std::make_pair(0u, 9u); - SpectraLegacy const storedSpectra = model.getSpectra(); + Spectra const spectra = + Spectra(IDA::WorkspaceIndex{0}, IDA::WorkspaceIndex{9}); + Spectra const storedSpectra = model.getSpectra(); - TS_ASSERT(boost::apply_visitor(AreSpectraEqual(), storedSpectra, spectra)); + TS_ASSERT(storedSpectra == spectra); } void @@ -249,7 +253,8 @@ public: TS_ASSERT_EQUALS(resultWorkspace->getAxis(1)->label(0), "Sample"); TS_ASSERT_EQUALS(resultWorkspace->getAxis(1)->label(1), "Guess"); /// Only two spectra because the guessWorkspace will only ever have one - /// spectra, and then spectra are extracted from the input workspace between + /// spectra, and then spectra are extracted from the input workspace + /// between /// m_activeSpectrum and m_activeSpectrum and so only 1 spectrum is /// extracted. 1 + 1 = 2 TS_ASSERT_EQUALS(resultWorkspace->getNumberHistograms(), 2); @@ -259,31 +264,32 @@ public: test_that_getActiveDataIndex_returns_the_index_which_it_has_been_set_to() { auto model = getFitPlotModel(); - model.setActiveIndex(2); + model.setActiveIndex(TableDatasetIndex{2}); - TS_ASSERT_EQUALS(model.getActiveDataIndex(), 2); + TS_ASSERT_EQUALS(model.getActiveDataIndex(), TableDatasetIndex{2}); } void test_that_getActiveSpectrum_returns_the_spectrum_which_it_has_been_set_to() { auto model = getFitPlotModel(); - model.setActiveSpectrum(3); + model.setActiveSpectrum(IDA::WorkspaceIndex{3}); - TS_ASSERT_EQUALS(model.getActiveSpectrum(), 3); + TS_ASSERT_EQUALS(model.getActiveSpectrum(), IDA::WorkspaceIndex{3}); } void test_that_getFitDataName_returns_the_correctly_calculated_name() { auto const model = getFitPlotModel(); TS_ASSERT_EQUALS(model.getFitDataName(), "Workspace1 (0-9)"); - TS_ASSERT_EQUALS(model.getFitDataName(1), "Workspace2 (0-9)"); + TS_ASSERT_EQUALS(model.getFitDataName(TableDatasetIndex{1}), + "Workspace2 (0-9)"); } void test_that_getFitDataName_does_not_throw_when_provided_an_out_of_range_index() { auto const model = getFitPlotModel(); - TS_ASSERT_THROWS_NOTHING(model.getFitDataName(10000000)); + TS_ASSERT_THROWS_NOTHING(model.getFitDataName(TableDatasetIndex{10000000})); } void