Mantid
Loading...
Searching...
No Matches
FitScriptGeneratorView.cpp
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 +
14#include "MantidQtWidgets/Common/QtPropertyBrowser/DoubleDialogEditor.h"
15#include "MantidQtWidgets/Common/QtPropertyBrowser/qttreepropertybrowser.h"
16
19
20#include <algorithm>
21#include <iterator>
22
23#include <QApplication>
24#include <QClipboard>
25#include <QFileDialog>
26#include <QMessageBox>
27#include <QMetaObject>
28#include <QThread>
29
30using namespace Mantid::Kernel;
31using namespace MantidQt::API;
32
33namespace {
35
36std::vector<WorkspaceIndex> convertToWorkspaceIndex(std::vector<int> const &indices) {
37 std::vector<WorkspaceIndex> workspaceIndices;
38 workspaceIndices.reserve(indices.size());
39 std::transform(indices.cbegin(), indices.cend(), std::back_inserter(workspaceIndices),
40 [](int index) { return WorkspaceIndex(index); });
41 return workspaceIndices;
42}
43
44std::vector<std::string> convertToStdVector(QStringList const &qList) {
45 std::vector<std::string> vec;
46 vec.reserve(static_cast<std::size_t>(qList.size()));
47 std::transform(qList.cbegin(), qList.cend(), std::back_inserter(vec),
48 [](QString const &element) { return element.toStdString(); });
49 return vec;
50}
51
52template <typename T> std::vector<T> convertQListToStdVector(QList<T> const &qList) {
53 std::vector<T> vec;
54 vec.reserve(static_cast<std::size_t>(qList.size()));
55 std::transform(qList.cbegin(), qList.cend(), std::back_inserter(vec), [](T const &element) { return element; });
56 return vec;
57}
58
59QString toQString(std::string const &str) { return QString::fromStdString(str); }
60
61QString globalToQString(MantidQt::MantidWidgets::GlobalParameter const &global) {
62 return toQString(global.m_parameter);
63}
64
65template <typename Function, typename T>
66QStringList convertToQStringList(Function const &func, std::vector<T> const &vec) {
67 QStringList qList;
68 qList.reserve(static_cast<int>(vec.size()));
69 std::transform(vec.cbegin(), vec.cend(), std::back_inserter(qList), func);
70 return qList;
71}
72
73template <typename T> QList<T> convertToQList(std::vector<T> const &vec) {
74 QList<T> qList;
75 qList.reserve(static_cast<int>(vec.size()));
76 std::transform(vec.cbegin(), vec.cend(), std::back_inserter(qList), [](T const &element) { return element; });
77 return qList;
78}
79
80QString getDefaultScriptDirectory() {
81 auto const previousDirectory = AlgorithmInputHistory::Instance().getPreviousDirectory();
82 if (previousDirectory.isEmpty())
83 return QString::fromStdString(ConfigService::Instance().getString("pythonscripts.directory"));
84 return previousDirectory;
85}
86
87} // namespace
88
90
93
95 QMap<QString, QString> const &fitOptions)
96 : IFitScriptGeneratorView(parent), m_presenter(), m_dataTable(std::make_unique<FitScriptGeneratorDataTable>()),
97 m_functionTreeView(std::make_unique<FunctionTreeView>(nullptr, true)),
98 m_fitOptionsBrowser(std::make_unique<FitScriptOptionsBrowser>(nullptr)), m_editLocalParameterDialog(nullptr) {
99 m_ui.setupUi(this);
100
101 m_ui.fDataTable->layout()->addWidget(m_dataTable.get());
102 m_ui.splitterVertical->addWidget(m_functionTreeView.get());
103 m_ui.splitterVertical->addWidget(m_fitOptionsBrowser.get());
104 m_ui.splitterVertical->setSizes({360, 120});
105
106 setFittingMode(fittingMode);
109
110 observeDelete(true);
111 observeClear(true);
112 observeRename(true);
113}
114
116 observeDelete(false);
117 observeClear(false);
118 observeRename(false);
119
122
123 m_dataTable.reset();
124 m_functionTreeView.reset();
125 m_fitOptionsBrowser.reset();
126}
127
129 connect(m_ui.pbRemoveDomain, SIGNAL(clicked()), this, SLOT(onRemoveDomainClicked()));
130 connect(m_ui.pbAddDomain, SIGNAL(clicked()), this, SLOT(onAddDomainClicked()));
131 connect(m_dataTable.get(), SIGNAL(cellChanged(int, int)), this, SLOT(onCellChanged(int, int)));
132 connect(m_dataTable.get(), SIGNAL(itemSelectionChanged()), this, SLOT(onItemSelected()));
133
134 connect(m_functionTreeView.get(), SIGNAL(functionRemovedString(QString const &)), this,
135 SLOT(onFunctionRemoved(QString const &)));
136 connect(m_functionTreeView.get(), SIGNAL(functionAdded(QString const &)), this,
137 SLOT(onFunctionAdded(const QString &)));
138 connect(m_functionTreeView.get(), SIGNAL(functionReplaced(QString const &)), this,
139 SLOT(onFunctionReplaced(QString const &)));
140 connect(m_functionTreeView.get(), SIGNAL(parameterChanged(QString const &)), this,
141 SLOT(onParameterChanged(QString const &)));
142 connect(m_functionTreeView.get(), SIGNAL(attributePropertyChanged(QString const &)), this,
143 SLOT(onAttributeChanged(QString const &)));
144 connect(m_functionTreeView.get(), SIGNAL(parameterTieChanged(QString const &, QString const &)), this,
145 SLOT(onParameterTieChanged(QString const &, QString const &)));
146 connect(m_functionTreeView.get(), SIGNAL(parameterConstraintRemoved(QString const &)), this,
147 SLOT(onParameterConstraintRemoved(QString const &)));
148 connect(m_functionTreeView.get(), SIGNAL(parameterConstraintAdded(QString const &, QString const &)), this,
149 SLOT(onParameterConstraintChanged(QString const &, QString const &)));
150 connect(m_functionTreeView.get(), SIGNAL(globalsChanged(QStringList const &)), this,
151 SLOT(onGlobalParametersChanged(QStringList const &)));
152 connect(m_functionTreeView.get(), SIGNAL(copyToClipboardRequest()), this, SLOT(onCopyFunctionToClipboard()));
153 connect(m_functionTreeView.get(), SIGNAL(functionHelpRequest()), this, SLOT(onFunctionHelpRequested()));
154 connect(m_functionTreeView.get(), SIGNAL(localParameterButtonClicked(QString const &)), this,
155 SLOT(onEditLocalParameterClicked(QString const &)));
156
157 connect(m_fitOptionsBrowser.get(), SIGNAL(outputBaseNameChanged(std::string const &)), this,
158 SLOT(onOutputBaseNameChanged(std::string const &)));
159 connect(m_fitOptionsBrowser.get(), SIGNAL(fittingModeChanged(FittingMode)), this,
161
162 connect(m_ui.pbGenerateScriptToFile, SIGNAL(clicked()), this, SLOT(onGenerateScriptToFileClicked()));
163 connect(m_ui.pbGenerateScriptToClipboard, SIGNAL(clicked()), this, SLOT(onGenerateScriptToClipboardClicked()));
164 connect(m_ui.pbHelp, SIGNAL(clicked()), this, SLOT(onHelpClicked()));
165
171 disconnect(m_functionTreeView->doubleEditorFactory(), SIGNAL(closeEditor()), m_functionTreeView->treeBrowser(),
172 SLOT(closeEditor()));
173}
174
175void FitScriptGeneratorView::setFitBrowserOptions(QMap<QString, QString> const &fitOptions) {
176 for (auto it = fitOptions.constBegin(); it != fitOptions.constEnd(); ++it)
177 m_fitOptionsBrowser->setProperty(it.key().toStdString(), it.value().toStdString());
178}
179
181 m_fitOptionsBrowser->setFittingMode(fittingMode);
182}
183
185 m_presenter = presenter;
186 m_presenter->notifyPresenter(ViewEvent::FittingModeChanged, m_fitOptionsBrowser->getFittingMode());
187}
188
189void FitScriptGeneratorView::deleteHandle(std::string const &wsName, [[maybe_unused]] Workspace_sptr const &ws) {
190 if (QThread::currentThread() != QApplication::instance()->thread()) {
191 QMetaObject::invokeMethod(this, "notifyADSDeleteEvent", Qt::AutoConnection, Q_ARG(std::string const &, wsName));
192 } else {
193 notifyADSDeleteEvent(wsName);
194 }
195}
196
198 if (QThread::currentThread() != QApplication::instance()->thread()) {
199 QMetaObject::invokeMethod(this, "notifyADSClearEvent", Qt::AutoConnection);
200 } else {
202 }
203}
204
205void FitScriptGeneratorView::renameHandle(std::string const &wsName, std::string const &newName) {
206 if (QThread::currentThread() != QApplication::instance()->thread()) {
207 QMetaObject::invokeMethod(this, "notifyADSRenameEvent", Qt::AutoConnection, Q_ARG(std::string const &, wsName),
208 Q_ARG(std::string const &, newName));
209 } else {
210 notifyADSRenameEvent(wsName, newName);
211 }
212}
213
214void FitScriptGeneratorView::notifyADSDeleteEvent(std::string const &workspaceName) {
215 m_presenter->notifyPresenter(ViewEvent::ADSDeleteEvent, workspaceName);
216}
217
219
220void FitScriptGeneratorView::notifyADSRenameEvent(std::string const &workspaceName, std::string const &newName) {
221 m_presenter->notifyPresenter(ViewEvent::ADSRenameEvent, workspaceName, newName);
222}
223
225
227
228void FitScriptGeneratorView::onCellChanged(int row, int column) {
229 UNUSED_ARG(row);
230
231 if (column == ColumnIndex::StartX) {
232 m_dataTable->formatSelection();
233 m_presenter->notifyPresenter(ViewEvent::StartXChanged);
234 } else if (column == ColumnIndex::EndX) {
235 m_dataTable->formatSelection();
236 m_presenter->notifyPresenter(ViewEvent::EndXChanged);
237 }
238}
239
241
242void FitScriptGeneratorView::onFunctionRemoved(QString const &function) {
243 m_presenter->notifyPresenter(ViewEvent::FunctionRemoved, function.toStdString());
244}
245
246void FitScriptGeneratorView::onFunctionAdded(QString const &function) {
247 m_presenter->notifyPresenter(ViewEvent::FunctionAdded, function.toStdString());
248}
249
250void FitScriptGeneratorView::onFunctionReplaced(QString const &function) {
251 m_presenter->notifyPresenter(ViewEvent::FunctionReplaced, function.toStdString());
252}
253
254void FitScriptGeneratorView::onParameterChanged(QString const &parameter) {
255 m_presenter->notifyPresenter(ViewEvent::ParameterChanged, parameter.toStdString());
256}
257
258void FitScriptGeneratorView::onAttributeChanged(QString const &attribute) {
259 m_presenter->notifyPresenter(ViewEvent::AttributeChanged, attribute.toStdString());
260}
261
262void FitScriptGeneratorView::onParameterTieChanged(QString const &parameter, QString const &tie) {
263 m_presenter->notifyPresenter(ViewEvent::ParameterTieChanged, parameter.toStdString(), tie.toStdString());
264}
265
267 m_presenter->notifyPresenter(ViewEvent::ParameterConstraintRemoved, parameter.toStdString());
268}
269
270void FitScriptGeneratorView::onParameterConstraintChanged(QString const &functionIndex, QString const &constraint) {
271 m_presenter->notifyPresenter(ViewEvent::ParameterConstraintChanged, functionIndex.toStdString(),
272 constraint.toStdString());
273}
274
275void FitScriptGeneratorView::onGlobalParametersChanged(QStringList const &globalParameters) {
276 m_presenter->notifyPresenter(ViewEvent::GlobalParametersChanged, convertToStdVector(globalParameters));
277}
278
280 if (auto const function = m_functionTreeView->getSelectedFunction())
281 saveTextToClipboard(function->asString());
282}
283
285 if (auto const function = m_functionTreeView->getSelectedFunction())
286 m_functionTreeView->showFunctionHelp(QString::fromStdString(function->name()));
287}
288
289void FitScriptGeneratorView::onOutputBaseNameChanged(std::string const &outputBaseName) {
290 m_presenter->notifyPresenter(ViewEvent::OutputBaseNameChanged, outputBaseName);
291}
292
294 m_presenter->notifyPresenter(ViewEvent::FittingModeChanged, fittingMode);
295}
296
298 m_presenter->notifyPresenter(ViewEvent::EditLocalParameterClicked, parameter.toStdString());
299}
300
302 if (result == QDialog::Accepted)
303 m_presenter->notifyPresenter(ViewEvent::EditLocalParameterFinished);
304
306}
307
309 m_presenter->notifyPresenter(ViewEvent::GenerateScriptToFileClicked);
310}
311
313 m_presenter->notifyPresenter(ViewEvent::GenerateScriptToClipboardClicked);
314}
315
317 MantidQt::API::HelpWindow::showCustomInterface("Fit Script Generator", QString("general"));
318}
319
321 return m_dataTable->workspaceName(index);
322}
323
325 return m_dataTable->workspaceIndex(index);
326}
327
329
331
332std::vector<FitDomainIndex> FitScriptGeneratorView::allRows() const { return m_dataTable->allRows(); }
333
334std::vector<FitDomainIndex> FitScriptGeneratorView::selectedRows() const { return m_dataTable->selectedRows(); }
335
337
338bool FitScriptGeneratorView::hasLoadedData() const { return m_dataTable->hasLoadedData(); }
339
340double FitScriptGeneratorView::parameterValue(std::string const &parameter) const {
341 return m_functionTreeView->getParameter(QString::fromStdString(parameter));
342}
343
345 return m_functionTreeView->getAttribute(QString::fromStdString(attribute));
346}
347
348void FitScriptGeneratorView::renameWorkspace(std::string const &workspaceName, std::string const &newName) {
349 m_dataTable->renameWorkspace(QString::fromStdString(workspaceName), QString::fromStdString(newName));
350}
351
352void FitScriptGeneratorView::removeDomain(FitDomainIndex domainIndex) { m_dataTable->removeDomain(domainIndex); }
353
354void FitScriptGeneratorView::addWorkspaceDomain(std::string const &workspaceName, WorkspaceIndex workspaceIndex,
355 double startX, double endX) {
356 m_dataTable->addDomain(QString::fromStdString(workspaceName), workspaceIndex, startX, endX);
357}
358
360 m_addWorkspaceDialog = std::make_unique<AddWorkspaceDialog>(this);
361 m_addWorkspaceDialog->show();
362 connect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(closeAddWorkspaceDialog()));
363 connect(m_addWorkspaceDialog.get(), SIGNAL(okClicked(bool)), this, SLOT(addWorkspaceDialogAccepted(bool)));
364}
365
367 disconnect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(closeAddWorkspaceDialog()));
368 disconnect(m_addWorkspaceDialog.get(), SIGNAL(okClicked(bool)), this, SLOT(addWorkspaceDialogAccepted(bool)));
369 m_addWorkspaceDialog->close();
370 m_addWorkspaceDialog.reset();
371}
372
374 m_presenter->notifyPresenter(ViewEvent::AddDomainAccepted);
375 if (close)
377}
378
379std::vector<MatrixWorkspace_const_sptr> FitScriptGeneratorView::getDialogWorkspaces() {
380 std::vector<MatrixWorkspace_const_sptr> workspaces;
382 workspaces = m_addWorkspaceDialog->getWorkspaces();
383 if (workspaces.empty())
384 displayWarning("Failed to add workspace: '" + m_addWorkspaceDialog->workspaceName().toStdString() +
385 "' doesn't exist.");
386 }
387 return workspaces;
388}
389
390std::vector<WorkspaceIndex> FitScriptGeneratorView::getDialogWorkspaceIndices() const {
391 std::vector<WorkspaceIndex> workspaceIndices;
393 workspaceIndices = convertToWorkspaceIndex(m_addWorkspaceDialog->workspaceIndices());
394 return workspaceIndices;
395}
396
398 std::string const &parameter, std::vector<std::string> const &workspaceNames,
399 std::vector<std::string> const &domainNames, std::vector<double> const &values, std::vector<bool> const &fixes,
400 std::vector<std::string> const &ties, std::vector<std::string> const &constraints) {
402 this, QString::fromStdString(parameter), convertToQStringList(toQString, workspaceNames),
403 convertToQStringList(toQString, domainNames), convertToQList(values), convertToQList(fixes),
404 convertToQStringList(toQString, ties), convertToQStringList(toQString, constraints));
405
406 connect(m_editLocalParameterDialog, SIGNAL(finished(int)), this, SLOT(onEditLocalParameterFinished(int)));
407
409}
410
411std::tuple<std::string, std::vector<double>, std::vector<bool>, std::vector<std::string>, std::vector<std::string>>
413 return {m_editLocalParameterDialog->getParameterName().toStdString(),
414 convertQListToStdVector(m_editLocalParameterDialog->getValues()),
415 convertQListToStdVector(m_editLocalParameterDialog->getFixes()),
416 convertToStdVector(m_editLocalParameterDialog->getTies()),
417 convertToStdVector(m_editLocalParameterDialog->getConstraints())};
418}
419
420std::tuple<std::string, std::string, std::string, std::string, std::string, bool>
422 return {m_fitOptionsBrowser->getProperty("Max Iterations"), m_fitOptionsBrowser->getProperty("Minimizer"),
423 m_fitOptionsBrowser->getProperty("Cost Function"), m_fitOptionsBrowser->getProperty("Evaluation Type"),
424 m_fitOptionsBrowser->getProperty("Output Base Name"), m_fitOptionsBrowser->getBoolProperty("Plot Output")};
425}
426
428 auto const defaultDirectory = getDefaultScriptDirectory();
429 auto const filePath = QFileDialog::getSaveFileName(this->parentWidget(), tr("Save Script As "), defaultDirectory,
430 tr("Script files (*.py)"));
431
432 if (!filePath.isEmpty())
433 API::AlgorithmInputHistory::Instance().setPreviousDirectory(QFileInfo(filePath).absoluteDir().path());
434
435 return filePath.toStdString();
436}
437
439
441 return m_ui.cbApplyFunctionChangesTo->currentText() == "All Domains";
442}
443
445
447 m_dataTable->setFunctionPrefixVisible(simultaneousMode);
448 m_functionTreeView->setMultiDomainFunctionPrefix(simultaneousMode ? m_dataTable->selectedDomainFunctionPrefix() : "");
449
450 if (simultaneousMode)
451 m_functionTreeView->showGlobals();
452 else
453 m_functionTreeView->hideGlobals();
454}
455
457 if (function)
458 m_functionTreeView->setFunction(function);
459 else
460 m_functionTreeView->clear();
461}
462
463void FitScriptGeneratorView::setGlobalTies(std::vector<GlobalTie> const &globalTies) {
464 m_functionTreeView->setGlobalTies(globalTies);
465}
466
467void FitScriptGeneratorView::setGlobalParameters(std::vector<GlobalParameter> const &globalParameters) {
468 m_functionTreeView->setGlobalParameters(convertToQStringList(globalToQString, globalParameters));
469}
470
471void FitScriptGeneratorView::setSuccessText(std::string const &text) {
472 m_ui.lbMessage->setText(QString::fromStdString(text));
473}
474
475void FitScriptGeneratorView::saveTextToClipboard(std::string const &text) const {
476 if (QClipboard *clipboard = QApplication::clipboard())
477 clipboard->setText(QString::fromStdString(text));
478}
479
480void FitScriptGeneratorView::displayWarning(std::string const &message) {
481 QMessageBox::warning(this, "Warning!", QString::fromStdString(message));
482}
483
484void FitScriptGeneratorView::closeEvent(QCloseEvent *event) {
487 QWidget::closeEvent(event);
488}
489
490} // namespace MantidQt::MantidWidgets
std::map< DeltaEMode::Type, std::string > index
Definition: DeltaEMode.cpp:19
#define UNUSED_ARG(x)
Function arguments are sometimes unused in certain implmentations but are required for documentation ...
Definition: System.h:64
static void showCustomInterface(const QString &name, const QString &area=QString(), const QString &section=QString())
Definition: HelpWindow.cpp:94
A dialog for displaying and editing values of local parameters.
QList< double > getValues() const
Get the list of new parameter values.
QStringList getConstraints() const
Get a list of the constraints.
QStringList getTies() const
Get a list of the ties.
QList< bool > getFixes() const
Get a list with the "fixed" attribute.
This class represents the table widget which holds domain data for the FitScriptGenerator interface.
std::unique_ptr< FitScriptOptionsBrowser > m_fitOptionsBrowser
FitScriptGeneratorView(QWidget *parent=nullptr, FittingMode fittingMode=FittingMode::SEQUENTIAL, QMap< QString, QString > const &fitOptions=QMap< QString, QString >())
std::string workspaceName(FitDomainIndex index) const override
std::vector< Mantid::API::MatrixWorkspace_const_sptr > getDialogWorkspaces() override
double parameterValue(std::string const &parameter) const override
std::tuple< std::string, std::vector< double >, std::vector< bool >, std::vector< std::string >, std::vector< std::string > > getEditLocalParameterResults() const override
void setSuccessText(std::string const &text) override
void saveTextToClipboard(std::string const &text) const override
void subscribePresenter(IFitScriptGeneratorPresenter *presenter) override
std::unique_ptr< FunctionTreeView > m_functionTreeView
void renameHandle(std::string const &wsName, std::string const &newName) override
If a workspace is renamed in the ADS, then this function will trigger, works by overloading this clas...
void onOutputBaseNameChanged(std::string const &outputBaseName)
void clearHandle() override
If the ADS is cleared, then this function will trigger, works by overloading this class and overridin...
void renameWorkspace(std::string const &workspaceName, std::string const &newName) override
Mantid::API::IFunction::Attribute attributeValue(std::string const &attribute) const override
void notifyADSRenameEvent(std::string const &workspaceName, std::string const &newName)
void setGlobalParameters(std::vector< GlobalParameter > const &globalParameter) override
std::unique_ptr< AddWorkspaceDialog > m_addWorkspaceDialog
void onGlobalParametersChanged(QStringList const &globalParameters)
void setGlobalTies(std::vector< GlobalTie > const &globalTies) override
std::tuple< std::string, std::string, std::string, std::string, std::string, bool > fitOptions() const override
void setSimultaneousMode(bool simultaneousMode) override
std::vector< FitDomainIndex > allRows() const override
void setFunction(Mantid::API::IFunction_sptr const &function) const override
void setFitBrowserOptions(QMap< QString, QString > const &fitOptions)
void onParameterConstraintChanged(QString const &functionIndex, QString const &constraint)
void notifyADSDeleteEvent(std::string const &workspaceName)
void openEditLocalParameterDialog(std::string const &parameter, std::vector< std::string > const &workspaceNames, std::vector< std::string > const &domainNames, std::vector< double > const &values, std::vector< bool > const &fixes, std::vector< std::string > const &ties, std::vector< std::string > const &constraints) override
void onParameterTieChanged(QString const &parameter, QString const &tie)
void removeDomain(FitDomainIndex domainIndex) override
std::vector< FitDomainIndex > selectedRows() const override
WorkspaceIndex workspaceIndex(FitDomainIndex index) const override
std::unique_ptr< FitScriptGeneratorDataTable > m_dataTable
void addWorkspaceDomain(std::string const &workspaceName, WorkspaceIndex workspaceIndex, double startX, double endX) override
void deleteHandle(std::string const &wsName, Workspace_sptr const &ws) override
If a workspace is deleted from the ADS, then this function will trigger, works by overloading this cl...
double startX(FitDomainIndex index) const override
std::vector< WorkspaceIndex > getDialogWorkspaceIndices() const override
double endX(FitDomainIndex index) const override
void displayWarning(std::string const &message) override
The BasicFitOptionsBrowser class implements a QtPropertyBrowser to display fitting properties found i...
Class FitPropertyBrowser implements QtPropertyBrowser to display and control fitting function paramet...
virtual void notifyPresenter(ViewEvent const &event, std::string const &arg1="", std::string const &arg2="")=0
void observeRename(bool turnOn=true)
Function will add/remove the observer to the ADS for when a workspace is renamed.
void observeDelete(bool turnOn=true)
Function will add/remove the observer to the ADS for when a workspace is deleted.
void observeClear(bool turnOn=true)
Function will add/remove the observer to the ADS for when the ADS is cleared.
Attribute is a non-fitting parameter.
Definition: IFunction.h:282
static T & Instance()
Return a reference to the Singleton instance, creating it if it does not already exist Creation is do...
IFitScriptGeneratorView::Event ViewEvent
FitScriptGeneratorDataTable::ColumnIndex ColumnIndex
std::shared_ptr< Workspace > Workspace_sptr
shared pointer to Mantid::API::Workspace
Definition: Workspace_fwd.h:20
std::shared_ptr< IFunction > IFunction_sptr
shared pointer to the function base class
Definition: IFunction.h:732
STL namespace.
This struct stores the name of a global parameter which is shared across ALL domains in a multi datas...