diff --git a/GUI/coregui/Models/FitModelHelper.cpp b/GUI/coregui/Models/FitParameterHelper.cpp similarity index 87% rename from GUI/coregui/Models/FitModelHelper.cpp rename to GUI/coregui/Models/FitParameterHelper.cpp index 55fabf56da747a955f0f5c0d6de3cf05e2dbb037..53680498a46432d21442164cf0a7f44058380618 100644 --- a/GUI/coregui/Models/FitModelHelper.cpp +++ b/GUI/coregui/Models/FitParameterHelper.cpp @@ -14,7 +14,7 @@ // // ************************************************************************** // -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include "JobItem.h" #include "FitParameterItems.h" #include "JobModel.h" @@ -24,7 +24,7 @@ //! Creates fit parameter from given ParameterItem, sets starting value to the value //! of ParameterItem, copies link. -void FitModelHelper::createFitParameter(FitParameterContainerItem *container, +void FitParameterHelper::createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem) { Q_ASSERT(container); @@ -46,7 +46,7 @@ void FitModelHelper::createFitParameter(FitParameterContainerItem *container, //! Removes link to given parameterItem from fit parameters -void FitModelHelper::removeFromFitParameters(FitParameterContainerItem *container, +void FitParameterHelper::removeFromFitParameters(FitParameterContainerItem *container, ParameterItem *parameterItem) { FitParameterItem *fitParItem = getFitParameterItem(container, parameterItem); @@ -65,7 +65,7 @@ void FitModelHelper::removeFromFitParameters(FitParameterContainerItem *containe //! Adds given parameterItem to the existing fit parameter with display name fitParName. //! If parameterItem is already linked with another fitParameter, it will be relinked -void FitModelHelper::addToFitParameter(FitParameterContainerItem *container, +void FitParameterHelper::addToFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem, const QString &fitParName) { Q_ASSERT(container); @@ -84,7 +84,7 @@ void FitModelHelper::addToFitParameter(FitParameterContainerItem *container, //! Returns fFitParameterItem corresponding to given ParameterItem -FitParameterItem *FitModelHelper::getFitParameterItem(FitParameterContainerItem *container, +FitParameterItem *FitParameterHelper::getFitParameterItem(FitParameterContainerItem *container, ParameterItem *parameterItem) { Q_ASSERT(container); @@ -93,7 +93,7 @@ FitParameterItem *FitModelHelper::getFitParameterItem(FitParameterContainerItem //! Returns list of fit parameter display names -QStringList FitModelHelper::getFitParameterNames(FitParameterContainerItem *container) +QStringList FitParameterHelper::getFitParameterNames(FitParameterContainerItem *container) { Q_ASSERT(container); QStringList result; @@ -105,7 +105,7 @@ QStringList FitModelHelper::getFitParameterNames(FitParameterContainerItem *cont //! return path to given item in the ParameterTreeContainer -QString FitModelHelper::getParameterItemPath(ParameterItem *parameterItem) +QString FitParameterHelper::getParameterItemPath(ParameterItem *parameterItem) { QString result = ModelPath::getPathFromIndex(parameterItem->index()); QString containerPrefix = Constants::ParameterContainerType + "/"; @@ -117,7 +117,7 @@ QString FitModelHelper::getParameterItemPath(ParameterItem *parameterItem) //! Returns ParameterItem corresponding to given link. //! Link is relative to ParameterContainerItem, so first we have to find it -ParameterItem *FitModelHelper::getParameterItem(FitParameterContainerItem *container, +ParameterItem *FitParameterHelper::getParameterItem(FitParameterContainerItem *container, const QString &link) { SessionItem *cur = container; diff --git a/GUI/coregui/Models/FitModelHelper.h b/GUI/coregui/Models/FitParameterHelper.h similarity index 83% rename from GUI/coregui/Models/FitModelHelper.h rename to GUI/coregui/Models/FitParameterHelper.h index ede3d9165cba381e2a3ea01f14a347b5090986b1..e612e7def2d1615d41d7ee00e6d6f7c013b8f902 100644 --- a/GUI/coregui/Models/FitModelHelper.h +++ b/GUI/coregui/Models/FitParameterHelper.h @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit scattering at grazing incidence // -//! @file coregui/Models/FitModelHelper.h -//! @brief Declares class FitModelHelper +//! @file coregui/Models/FitParameterHelper.h +//! @brief Declares class FitParameterHelper //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -14,8 +14,8 @@ // // ************************************************************************** // -#ifndef FITMODELHELPER_H -#define FITMODELHELPER_H +#ifndef FITPARAMETERHELPER_H +#define FITPARAMETERHELPER_H #include "WinDllMacros.h" #include <QMap> @@ -25,10 +25,10 @@ class FitParameterItem; class FitParameterContainerItem; class JobItem; -//! The FitModelHelper class contains set of convenience static methods to handle various fitting -//! items in given JobItem. +//! The FitParameterHelper class contains set of convenience static methods to handle +//! various fitting items in given JobItem. -class BA_CORE_API_ FitModelHelper +class BA_CORE_API_ FitParameterHelper { public: static void createFitParameter(FitParameterContainerItem *container, diff --git a/GUI/coregui/Models/FitParameterItems.cpp b/GUI/coregui/Models/FitParameterItems.cpp index b2dfb7e48041a9473a41fcf5755ade64b3ec06aa..e708f48c75b04321eab9c0f2d0a96a1fca1d6f44 100644 --- a/GUI/coregui/Models/FitParameterItems.cpp +++ b/GUI/coregui/Models/FitParameterItems.cpp @@ -18,7 +18,7 @@ #include "ComboProperty.h" #include "ModelPath.h" #include "SessionModel.h" -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include "ParameterTreeItems.h" #include "AttLimits.h" #include <QDebug> diff --git a/GUI/coregui/Models/FitParameterProxyModel.cpp b/GUI/coregui/Models/FitParameterProxyModel.cpp index 3f138b94baceae86308c37f1a24114ef6f285910..1cf89b8a9b118490d7544ebc04d62f524923d1d7 100644 --- a/GUI/coregui/Models/FitParameterProxyModel.cpp +++ b/GUI/coregui/Models/FitParameterProxyModel.cpp @@ -19,7 +19,7 @@ #include "FitParameterItems.h" #include "SessionModel.h" #include "JobModel.h" -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include "ParameterTreeItems.h" #include "GUIHelpers.h" #include "ModelPath.h" @@ -248,17 +248,17 @@ bool FitParameterProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction if (parent.isValid()) { if (SessionItem *fitParItem = itemForIndex(parent)) { Q_ASSERT(fitParItem->modelType() == Constants::FitParameterType); - ParameterItem *parItem = FitModelHelper::getParameterItem( + ParameterItem *parItem = FitParameterHelper::getParameterItem( m_root_item, QString::fromLatin1(data->data(SessionXML::LinkMimeType))); Q_ASSERT(parItem); - FitModelHelper::addToFitParameter(m_root_item, parItem, fitParItem->displayName()); + FitParameterHelper::addToFitParameter(m_root_item, parItem, fitParItem->displayName()); } } else { - ParameterItem *parItem = FitModelHelper::getParameterItem( + ParameterItem *parItem = FitParameterHelper::getParameterItem( m_root_item, QString::fromLatin1(data->data(SessionXML::LinkMimeType))); Q_ASSERT(parItem); - FitModelHelper::createFitParameter(m_root_item, parItem); + FitParameterHelper::createFitParameter(m_root_item, parItem); } return true; diff --git a/GUI/coregui/Models/JobModel.cpp b/GUI/coregui/Models/JobModel.cpp index 1632c19cdff86b170b9d2e45939cf9e4af2e43de..6291cfd14b32800bd2831a391bdbc35e4e9433a1 100644 --- a/GUI/coregui/Models/JobModel.cpp +++ b/GUI/coregui/Models/JobModel.cpp @@ -29,6 +29,7 @@ #include "SimulationOptionsItem.h" #include "JobResultsPresenter.h" #include "IntensityDataItem.h" +#include "FitSuiteItem.h" #include <QUuid> #include <QDebug> #include <QItemSelection> @@ -100,12 +101,10 @@ JobItem *JobModel::addJob(const MultiLayerItem *multiLayerItem, ParameterTreeBuilder::createParameterTree(jobItem, JobItem::T_PARAMETER_TREE); insertNewItem(Constants::IntensityDataType, indexOfItem(jobItem), -1, JobItem::T_OUTPUT); - //insertNewItem(Constants::IntensityDataType, indexOfItem(jobItem), -1, JobItem::T_REALDATA); if(realDataItem) { - RealDataItem *realDataItemCopy = dynamic_cast<RealDataItem *>(copyParameterizedItem(realDataItem, jobItem, JobItem::T_REALDATA)); - Q_ASSERT(realDataItemCopy); - realDataItemCopy->intensityDataItem()->setOutputData(realDataItem->intensityDataItem()->getOutputData()->clone()); + copyRealDataItem(jobItem, realDataItem); + createFitContainers(jobItem); } return jobItem; @@ -216,3 +215,35 @@ void JobModel::restoreItem(SessionItem *item) } } +//! Copy RealDataItem to jobItem intended for fitting. + +void JobModel::copyRealDataItem(JobItem *jobItem, const RealDataItem *realDataItem) +{ + if(!realDataItem) + return; + + RealDataItem *realDataItemCopy = dynamic_cast<RealDataItem *>( + copyParameterizedItem(realDataItem, jobItem, JobItem::T_REALDATA)); + Q_ASSERT(realDataItemCopy); + realDataItemCopy->intensityDataItem()->setOutputData( + realDataItem->intensityDataItem()->getOutputData()->clone()); +} + +//! Creates necessary fit containers for jobItem intended for fitting. + +void JobModel::createFitContainers(JobItem *jobItem) +{ + SessionItem *fitSuiteItem = jobItem->getItem(JobItem::T_FIT_SUITE); + Q_ASSERT(fitSuiteItem == nullptr); + + fitSuiteItem = insertNewItem(Constants::FitSuiteType, + jobItem->index(), -1, JobItem::T_FIT_SUITE); + Q_ASSERT(fitSuiteItem); + + SessionItem *parsContainerItem = fitSuiteItem->getItem(FitSuiteItem::T_FIT_PARAMETERS); + Q_ASSERT(parsContainerItem == nullptr); + + parsContainerItem = insertNewItem(Constants::FitParameterContainerType, + fitSuiteItem->index(), -1, FitSuiteItem::T_FIT_PARAMETERS); +} + diff --git a/GUI/coregui/Models/JobModel.h b/GUI/coregui/Models/JobModel.h index 111ec4302ad0ea883185c0f701905989ed6af829..1fd826f3ab2abf8851ca03b3e7d9845363445c87 100644 --- a/GUI/coregui/Models/JobModel.h +++ b/GUI/coregui/Models/JobModel.h @@ -69,6 +69,8 @@ private: QString generateJobName(); QString generateJobIdentifier(); void restoreItem(SessionItem *item); + void copyRealDataItem(JobItem *jobItem, const RealDataItem *realDataItem); + void createFitContainers(JobItem *jobItem); JobQueueData *m_queue_data; }; diff --git a/GUI/coregui/Models/ParameterTreeBuilder.cpp b/GUI/coregui/Models/ParameterTreeBuilder.cpp index 969a51c548bed12d46ca99a83c16137a2a074581..79c4a3fcaeaa48f5d4c321541ccd3700e6869185 100644 --- a/GUI/coregui/Models/ParameterTreeBuilder.cpp +++ b/GUI/coregui/Models/ParameterTreeBuilder.cpp @@ -21,7 +21,7 @@ #include "GroupItem.h" #include "ModelPath.h" #include "ParameterTreeItems.h" -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include <QStack> void ParameterTreeBuilder::createParameterTree(JobItem *item, const QString &tag) @@ -106,7 +106,7 @@ void ParameterTreeBuilder::populateDomainLinks(JobItem *jobItem, const QString & } } else { if (ParameterItem *parItem = dynamic_cast<ParameterItem *>(current)) { - QString parItemPath = FitModelHelper::getParameterItemPath(parItem); + QString parItemPath = FitParameterHelper::getParameterItemPath(parItem); std::string domainPath = ModelPath::translateParameterName( jobItem->getMultiLayerItem()->parent(), parItemPath); parItem->setItemValue(ParameterItem::P_DOMAIN, QString::fromStdString(domainPath)); diff --git a/GUI/coregui/Models/ParameterTuningModel.cpp b/GUI/coregui/Models/ParameterTuningModel.cpp index b3adcac788e6fdb30110538c1ee517bcb0cc1faa..8a0caa535aca6c5538d0f3c8b28c8f6cd7ae7735 100644 --- a/GUI/coregui/Models/ParameterTuningModel.cpp +++ b/GUI/coregui/Models/ParameterTuningModel.cpp @@ -17,7 +17,7 @@ #include "ParameterTuningModel.h" #include "FitParameterItems.h" #include "SessionXML.h" -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include "SessionModel.h" #include "ParameterTreeItems.h" #include <QDebug> @@ -53,7 +53,7 @@ QMimeData *ParameterTuningModel::mimeData(const QModelIndexList &proxyIndexes) c foreach(QModelIndex proxyIndex, proxyIndexes) { if(ParameterItem *parameterItem = getParameterItem(proxyIndex)) { - QString path = FitModelHelper::getParameterItemPath(parameterItem); + QString path = FitParameterHelper::getParameterItemPath(parameterItem); mimeData->setData(SessionXML::LinkMimeType, path.toLatin1()); qDebug() << " FilterPropertyProxy::mimeData" << path; break; diff --git a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp index 14568e61fab20a24ce83db7d3a3fe6a2a1031b6d..fe6d715a09f1e6ed21c0870181b0e77cbd9e2f6b 100644 --- a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp @@ -23,7 +23,7 @@ #include "FilterPropertyProxy.h" #include "ParameterTreeItems.h" #include "FitParameterProxyModel.h" -#include "FitModelHelper.h" +#include "FitParameterHelper.h" #include "SessionModelDelegate.h" #include "CustomEventFilters.h" #include "OverlayLabelController.h" @@ -79,7 +79,6 @@ void FitParameterWidget::setItem(JobItem *jobItem) m_jobItem = jobItem; if (!m_jobItem) return; - init_fit_containers(); init_fit_model(); } } @@ -154,7 +153,7 @@ void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &s SessionItem *item = m_fitParameterModel->itemForIndex(index); if(item->parent()->modelType() == Constants::FitParameterLinkType) { QString link = item->parent()->getItemValue(FitParameterLinkItem::P_LINK).toString(); - m_tuningWidget->makeSelected(FitModelHelper::getParameterItem(m_jobItem->fitParameterContainerItem(), link)); + m_tuningWidget->makeSelected(FitParameterHelper::getParameterItem(m_jobItem->fitParameterContainerItem(), link)); } qDebug() << "XXX index" << index << item->modelType(); @@ -167,8 +166,8 @@ void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &s void FitParameterWidget::onCreateFitParAction() { foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) { - if(!FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { - FitModelHelper::createFitParameter(m_jobItem->fitParameterContainerItem(), item); + if(!FitParameterHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { + FitParameterHelper::createFitParameter(m_jobItem->fitParameterContainerItem(), item); } } } @@ -179,8 +178,8 @@ void FitParameterWidget::onCreateFitParAction() void FitParameterWidget::onRemoveFromFitParAction() { foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) { - if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { - FitModelHelper::removeFromFitParameters(m_jobItem->fitParameterContainerItem(), item); + if(FitParameterHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { + FitParameterHelper::removeFromFitParameters(m_jobItem->fitParameterContainerItem(), item); } } } @@ -209,9 +208,9 @@ void FitParameterWidget::onRemoveFitParAction() void FitParameterWidget::onAddToFitParAction(int ipar) { QStringList fitParNames - = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); + = FitParameterHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); foreach (ParameterItem *item, m_tuningWidget->getSelectedParameters()) { - FitModelHelper::addToFitParameter(m_jobItem->fitParameterContainerItem(), item, + FitParameterHelper::addToFitParameter(m_jobItem->fitParameterContainerItem(), item, fitParNames.at(ipar)); } } @@ -259,7 +258,7 @@ void FitParameterWidget::initTuningWidgetContextMenu(QMenu &menu) QMenu *addToFitParMenu = menu.addMenu("Add to existing fit parameter"); QStringList fitParNames - = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); + = FitParameterHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); if(fitParNames.isEmpty() || canCreateFitParameter()==false) { addToFitParMenu->setEnabled(false); } @@ -301,25 +300,6 @@ void FitParameterWidget::init_fit_model() connectFitParametersSelection(true); } -//! Adds to JobItem all fit containers, if necessary. - -void FitParameterWidget::init_fit_containers() -{ - SessionItem *fitSuiteItem = m_jobItem->getItem(JobItem::T_FIT_SUITE); - if (!fitSuiteItem) { - fitSuiteItem = m_jobItem->model()->insertNewItem( - Constants::FitSuiteType, m_jobItem->index(), -1, JobItem::T_FIT_SUITE); - } - Q_ASSERT(fitSuiteItem); - - SessionItem *parsContainerItem = fitSuiteItem->getItem(FitSuiteItem::T_FIT_PARAMETERS); - if (!parsContainerItem) { - parsContainerItem = fitSuiteItem->model()->insertNewItem( - Constants::FitParameterContainerType, fitSuiteItem->index(), -1, - FitSuiteItem::T_FIT_PARAMETERS); - } -} - //! Returns true if tuning widget contains selected ParameterItem's which can be used to create //! a fit parameter (i.e. it is not linked with some fit parameter already). @@ -327,7 +307,7 @@ bool FitParameterWidget::canCreateFitParameter() { QVector<ParameterItem *> selected = m_tuningWidget->getSelectedParameters(); foreach(ParameterItem *item, selected) { - if(FitModelHelper::getFitParameterItem( + if(FitParameterHelper::getFitParameterItem( m_jobItem->fitParameterContainerItem(), item) == nullptr) return true; } @@ -341,7 +321,7 @@ bool FitParameterWidget::canRemoveFromFitParameters() { QVector<ParameterItem *> selected = m_tuningWidget->getSelectedParameters(); foreach(ParameterItem *item, selected) { - if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) + if(FitParameterHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) return true; } return false; diff --git a/GUI/coregui/Views/FitWidgets/FitParameterWidget.h b/GUI/coregui/Views/FitWidgets/FitParameterWidget.h index 9d03f914d9548bfce32fb4214982699ab7aa2a8a..24444e4e2c02f5edf788214853e2e004fe19839f 100644 --- a/GUI/coregui/Views/FitWidgets/FitParameterWidget.h +++ b/GUI/coregui/Views/FitWidgets/FitParameterWidget.h @@ -73,7 +73,6 @@ private: void initFitParameterTreeContextMenu(QMenu &menu); void init_fit_model(); - void init_fit_containers(); bool canCreateFitParameter(); bool canRemoveFromFitParameters();