diff --git a/GUI/Model/Job/FitParameterContainerItem.cpp b/GUI/Model/Job/FitParameterContainerItem.cpp index fdfbd157ff5e1979df55e070efb8afb16db02e3f..1d488715dfe7b44e57acf71f956f8210d3d5fc18 100644 --- a/GUI/Model/Job/FitParameterContainerItem.cpp +++ b/GUI/Model/Job/FitParameterContainerItem.cpp @@ -155,6 +155,21 @@ void FitParameterContainerItem::setValuesInParameterContainer( } } +void FitParameterContainerItem::pullValuesFromParameterContainer( + ParameterContainerItem* parameterContainer) +{ + ASSERT(parameterContainer); + + for (auto* fitPar : fitParameterItems()) { + auto link_list = fitPar->linkItems(); + if (link_list.size()) { + FitParameterLinkItem* linkItem = link_list.last(); // update from last added link + if (auto* itemInTuningTree = parameterContainer->findParameterItem(linkItem->link())) + fitPar->setStartValue(itemInTuningTree->valueOfLink()); + } + } +} + mumufit::Parameters FitParameterContainerItem::createParameters() const { mumufit::Parameters result; diff --git a/GUI/Model/Job/FitParameterContainerItem.h b/GUI/Model/Job/FitParameterContainerItem.h index 9befe3afd0d2401d7368aaceeec72edda52ef6ca..32db0f53925b3bf1a48230c1e933f33f523563a7 100644 --- a/GUI/Model/Job/FitParameterContainerItem.h +++ b/GUI/Model/Job/FitParameterContainerItem.h @@ -65,6 +65,8 @@ public: bool isEmpty(); void setValuesInParameterContainer(const std::vector<double>& values, class ParameterContainerItem* parameterContainer); + void pullValuesFromParameterContainer(class ParameterContainerItem* parameterContainer); + mumufit::Parameters createParameters() const; void writeTo(QXmlStreamWriter* w) const; diff --git a/GUI/View/Fit/FitSessionController.cpp b/GUI/View/Fit/FitSessionController.cpp index 4da7d28123bac8ea77fd9f03b438156d79344d06..4ec9bd17e393340613e071df2e36a8d2cb37ffce 100644 --- a/GUI/View/Fit/FitSessionController.cpp +++ b/GUI/View/Fit/FitSessionController.cpp @@ -165,6 +165,12 @@ void FitSessionController::updateFitParameterValues(const FitProgressInfo& info) m_jobItem->parameterContainerItem()); } +void FitSessionController::updateStartValuesFromTree() +{ + FitParameterContainerItem* fitParContainer = m_jobItem->fitParameterContainerItem(); + fitParContainer->pullValuesFromParameterContainer(m_jobItem->parameterContainerItem()); +} + void FitSessionController::updateLog(const FitProgressInfo& info) { QString message = QString("NCalls:%1 chi2:%2 \n").arg(info.iterationCount()).arg(info.chi2()); diff --git a/GUI/View/Fit/FitSessionController.h b/GUI/View/Fit/FitSessionController.h index fc61b739c426d62f771c3dfdedbc29e235e74138..2c7c28495d507a520b05d97922c119ff1af7605c 100644 --- a/GUI/View/Fit/FitSessionController.h +++ b/GUI/View/Fit/FitSessionController.h @@ -46,6 +46,7 @@ signals: public slots: void onStartFittingRequest(); void onStopFittingRequest(); + void updateStartValuesFromTree(); private slots: void onObserverUpdate(); diff --git a/GUI/View/Fit/FitSessionWidget.cpp b/GUI/View/Fit/FitSessionWidget.cpp index 6ebeeccdb94ba5f8ed6906677d7d58d3d7c925bf..e727c9f8b3330e93d62e5d733229ca073db1065c 100644 --- a/GUI/View/Fit/FitSessionWidget.cpp +++ b/GUI/View/Fit/FitSessionWidget.cpp @@ -41,6 +41,9 @@ FitSessionWidget::FitSessionWidget(QWidget* parent) layout->addWidget(m_tabWidget); layout->addWidget(m_controlWidget); + connect(m_controlWidget, &RunFitControlWidget::updFromTreePushed, m_fitParametersWidget, + &FitParameterWidget::updateView); + applySettings(); } @@ -82,6 +85,8 @@ void FitSessionWidget::setSessionController(FitSessionController* sessionControl &FitSessionController::onStartFittingRequest); connect(m_controlWidget, &RunFitControlWidget::stopFittingPushed, m_sessionController, &FitSessionController::onStopFittingRequest); + connect(m_controlWidget, &RunFitControlWidget::updFromTreePushed, m_sessionController, + &FitSessionController::updateStartValuesFromTree); } } diff --git a/GUI/View/FitControl/RunFitControlWidget.cpp b/GUI/View/FitControl/RunFitControlWidget.cpp index ce9414631fbe64a50a19a8cd355a30b2820bb3cb..ea5096aa795b60bce6ab30c290a1fbd98717851c 100644 --- a/GUI/View/FitControl/RunFitControlWidget.cpp +++ b/GUI/View/FitControl/RunFitControlWidget.cpp @@ -37,6 +37,7 @@ RunFitControlWidget::RunFitControlWidget(QWidget* parent) : DataAccessWidget(parent) , m_startButton(new QPushButton) , m_stopButton(new QPushButton) + , m_updButton(new QPushButton) , m_intervalSlider(new QSlider) , m_updateIntervalLabel(new QLabel) , m_iterationsCountLabel(new QLabel) @@ -53,6 +54,10 @@ RunFitControlWidget::RunFitControlWidget(QWidget* parent) m_stopButton->setToolTip("Interrupt fitting"); m_stopButton->setMaximumWidth(80); + m_updButton->setText("Update start values"); + m_updButton->setToolTip("Set the starting positions to the values from the parameter tree"); + m_updButton->setMaximumWidth(130); + m_intervalSlider->setToolTip(slider_tooltip); m_intervalSlider->setOrientation(Qt::Horizontal); m_intervalSlider->setRange(0, static_cast<int>(slider_to_interval.size()) - 1); @@ -73,6 +78,8 @@ RunFitControlWidget::RunFitControlWidget(QWidget* parent) layout->addSpacing(5); layout->addWidget(m_stopButton); layout->addSpacing(5); + layout->addWidget(m_updButton); + layout->addSpacing(15); layout->addWidget(m_intervalSlider); layout->addSpacing(2); layout->addWidget(m_updateIntervalLabel); @@ -81,8 +88,9 @@ RunFitControlWidget::RunFitControlWidget(QWidget* parent) layout->addWidget(m_iterationsCountLabel); setLayout(layout); - connect(m_startButton, &QPushButton::clicked, [&]() { startFittingPushed(); }); - connect(m_stopButton, &QPushButton::clicked, this, [&]() { stopFittingPushed(); }); + connect(m_startButton, &QPushButton::clicked, [&]() { emit startFittingPushed(); }); + connect(m_stopButton, &QPushButton::clicked, this, [&]() { emit stopFittingPushed(); }); + connect(m_updButton, &QPushButton::clicked, this, [&]() { emit updFromTreePushed(); }); connect(m_intervalSlider, &QSlider::valueChanged, this, &RunFitControlWidget::onSliderValueChanged); diff --git a/GUI/View/FitControl/RunFitControlWidget.h b/GUI/View/FitControl/RunFitControlWidget.h index c0c33e604f518c0f329176536cf8ce88a4a1bae0..6303b9dc810bba2e888b010903acd24e599b208f 100644 --- a/GUI/View/FitControl/RunFitControlWidget.h +++ b/GUI/View/FitControl/RunFitControlWidget.h @@ -37,6 +37,7 @@ public: signals: void startFittingPushed(); void stopFittingPushed(); + void updFromTreePushed(); public slots: void onFittingError(const QString& what); @@ -57,6 +58,7 @@ private: QPushButton* m_startButton; QPushButton* m_stopButton; + QPushButton* m_updButton; QSlider* m_intervalSlider; QLabel* m_updateIntervalLabel; QLabel* m_iterationsCountLabel; diff --git a/GUI/View/Tuning/FitParameterWidget.cpp b/GUI/View/Tuning/FitParameterWidget.cpp index 0c87853b4fb6c794feaec791e2811cad7470aed3..8e67736b8c0be427fc01e790eeccd5576c79ec27 100644 --- a/GUI/View/Tuning/FitParameterWidget.cpp +++ b/GUI/View/Tuning/FitParameterWidget.cpp @@ -164,6 +164,11 @@ void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection& s } } +void FitParameterWidget::updateView() +{ + m_treeView->update(); +} + //! Creates fit parameters for all selected ParameterItem's in tuning widget void FitParameterWidget::onCreateFitParAction() diff --git a/GUI/View/Tuning/FitParameterWidget.h b/GUI/View/Tuning/FitParameterWidget.h index b3a7c001c762600c5b3a53852d896bc2d251087f..83407e706143a0bbfaf238f822d501fca90fced4 100644 --- a/GUI/View/Tuning/FitParameterWidget.h +++ b/GUI/View/Tuning/FitParameterWidget.h @@ -42,6 +42,7 @@ public slots: void onTuningWidgetContextMenu(const QPoint& point); void onFitParameterTreeContextMenu(const QPoint& point); void onFitParametersSelectionChanged(const QItemSelection& selection); + void updateView(); private slots: void onCreateFitParAction();