Mantid
Loading...
Searching...
No Matches
FitScriptGeneratorPresenter.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2020 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
9#include "DllOption.h"
10#include "MantidAPI/IFunction.h"
15
16#include <string>
17#include <tuple>
18#include <vector>
19
20#include <QStringList>
21
22namespace MantidQt {
23namespace MantidWidgets {
24
25class IFitScriptGeneratorModel;
26class IFitScriptGeneratorView;
27struct GlobalParameter;
28struct GlobalTie;
29
31public:
33 QStringList const &workspaceNames = QStringList(), double startX = 0.0,
34 double endX = 0.0);
36
37 void notifyPresenter(ViewEvent const &event, [[maybe_unused]] std::string const &arg1 = "",
38 [[maybe_unused]] std::string const &arg2 = "") override;
39 void notifyPresenter(ViewEvent const &event, std::vector<std::string> const &vec) override;
40 void notifyPresenter(ViewEvent const &event, FittingMode fittingMode) override;
41 void handleAddDomainAccepted(std::vector<Mantid::API::MatrixWorkspace_const_sptr> const &workspaces,
42 FunctionModelSpectra const &workspaceIndices) override;
43
44 void openFitScriptGenerator() override;
45
46 void setGlobalTies(std::vector<GlobalTie> const &globalTies) override;
47 void setGlobalParameters(std::vector<GlobalParameter> const &globalParameters) override;
48
49private:
50 void handleADSDeleteEvent(std::string const &workspaceName);
51 void handleADSClearEvent();
52 void handleADSRenameEvent(std::string const &workspaceName, std::string const &newName);
53 void handleRemoveDomainClicked();
54 void handleAddDomainClicked();
55 void handleSelectionChanged();
56 void handleStartXChanged();
57 void handleEndXChanged();
58 void handleFunctionRemoved(std::string const &function);
59 void handleFunctionAdded(std::string const &function);
60 void handleFunctionReplaced(std::string const &function);
61 void handleParameterChanged(std::string const &parameter);
62 void handleAttributeChanged(std::string const &attribute);
63 void handleParameterTieChanged(std::string const &parameter, std::string const &tie);
64 void handleParameterConstraintRemoved(std::string const &parameter);
65 void handleParameterConstraintChanged(std::string const &functionIndex, std::string const &constraint);
66 void handleGlobalParametersChanged(std::vector<std::string> const &globalParameters);
67 void handleEditLocalParameterClicked(std::string const &parameter);
68 void handleEditLocalParameterFinished();
69 void handleOutputBaseNameChanged(std::string const &outputBaseName);
70 void handleFittingModeChanged(FittingMode fittingMode);
71 void handleGenerateScriptToFileClicked();
72 void handleGenerateScriptToClipboardClicked();
73
74 void setWorkspaces(QStringList const &workspaceNames, double startX, double endX);
75 void addWorkspaces(std::vector<Mantid::API::MatrixWorkspace_const_sptr> const &workspaces,
76 FunctionModelSpectra const &workspaceIndices);
77 void addWorkspace(std::string const &workspaceName, double startX, double endX);
78 void addWorkspace(Mantid::API::MatrixWorkspace_const_sptr const &workspace, double startX, double endX);
80 double startX, double endX);
81 void addWorkspace(std::string const &workspaceName, WorkspaceIndex workspaceIndex, double startX, double endX);
82
83 void removeDomains(std::vector<FitDomainIndex> const &domainIndices);
84
85 void updateStartX(std::string const &workspaceName, WorkspaceIndex workspaceIndex, double startX);
86 void updateEndX(std::string const &workspaceName, WorkspaceIndex workspaceIndex, double endX);
87
88 void updateParameterValue(std::string const &workspaceName, WorkspaceIndex workspaceIndex,
89 std::string const &parameter, double newValue);
90 void updateAttributeValue(std::string const &workspaceName, WorkspaceIndex workspaceIndex,
91 std::string const &fullAttribute, Mantid::API::IFunction::Attribute const &newValue);
92
93 void updateParameterTie(std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const &parameter,
94 std::string const &tie);
95
96 void removeParameterConstraint(std::string const &workspaceName, WorkspaceIndex workspaceIndex,
97 std::string const &parameter);
98 void updateParameterConstraint(std::string const &workspaceName, WorkspaceIndex workspaceIndex,
99 std::string const &functionIndex, std::string const &constraint);
100
101 void removeFunction(std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const &function);
102 void addFunction(std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const &function);
103 void setFunction(std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const &function);
104
105 void updateFunctionInViewFromModel(FitDomainIndex domainIndex);
106
107 template <typename GetX, typename UpdateX> void updateXLimitForDomain(GetX &&getX, UpdateX &&updateX);
108
109 template <typename UpdateFunction>
110 void updateFunctionStructure(UpdateFunction &&updateFunction, std::string const &function);
111
112 template <typename UpdateFunction, typename... Args>
113 void updateFunctionsInModel(UpdateFunction &&updateFunction, Args... arguments);
114
115 template <typename Function, typename... Args>
116 void invokeFunctionForDomain(FitDomainIndex domainIndex, Function &&func, Args... arguments);
117
118 [[nodiscard]] std::vector<FitDomainIndex> getRowIndices() const;
119
120 void insertLocalParameterData(std::string const &parameter, std::vector<std::string> &workspaceNames,
121 std::vector<std::string> &domainNames, std::vector<double> &values,
122 std::vector<bool> &fixes, std::vector<std::string> &ties,
123 std::vector<std::string> &constraints) const;
124 void insertLocalParameterDataForDomain(FitDomainIndex domainIndex, std::string const &parameter,
125 std::vector<std::string> &workspaceNames,
126 std::vector<std::string> &domainNames, std::vector<double> &values,
127 std::vector<bool> &fixes, std::vector<std::string> &ties,
128 std::vector<std::string> &constraints) const;
129
130 void setLocalParameterDataForDomain(FitDomainIndex domainIndex, std::string const &parameter, double value, bool fix,
131 std::string const &tie, std::string const &constraint);
132
133 std::vector<FitDomainIndex> getDomainsWithLocalParameter(std::string const &parameter) const;
134
135 std::tuple<std::string, std::string> convertFunctionIndexOfParameterTie(std::string const &workspaceName,
136 WorkspaceIndex workspaceIndex,
137 std::string const &parameter,
138 std::string const &tie) const;
139
140 void checkForWarningMessages();
141
142 template <typename Generator> void generateFitScript(Generator &&func) const;
143 void generateScriptToFile() const;
144 void generateScriptToClipboard() const;
145
146 std::vector<std::string> m_warnings;
147
150};
151
152} // namespace MantidWidgets
153} // namespace MantidQt
#define EXPORT_OPT_MANTIDQT_COMMON
Definition DllOption.h:15
double value
The value of the point.
Definition FitMW.cpp:51
IPeaksWorkspace_sptr workspace
std::vector< T > const * vec
void addWorkspace(WorkspaceGroup &self, const boost::python::object &pyobj)
Attribute is a non-fitting parameter.
Definition IFunction.h:285
The AlgorithmProgressDialogPresenter keeps track of the running algorithms and displays a progress ba...
std::shared_ptr< const MatrixWorkspace > MatrixWorkspace_const_sptr
shared pointer to the matrix workspace base class (const version)