BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FitParameterHelper.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/FitParameterHelper.cpp
6 //! @brief Implements class FitModelHelper
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
21 
22 //! Creates fit parameter from given ParameterItem, sets starting value to the value
23 //! of ParameterItem, copies link.
24 
26  ParameterItem* parameterItem)
27 {
28  ASSERT(container);
29  ASSERT(parameterItem);
30 
31  removeFromFitParameters(container, parameterItem);
32 
33  auto model = container->model();
34  auto fitPar = model->insertItem<FitParameterItem>(container);
35  fitPar->setDisplayName("par");
36  auto link = model->insertItem<FitParameterLinkItem>(fitPar);
37  fitPar->setItemValue(FitParameterItem::P_START_VALUE, parameterItem->value());
38  link->setItemValue(FitParameterLinkItem::P_LINK, getParameterItemPath(parameterItem));
39 
40  fitPar->initMinMaxValues(parameterItem->linkedItem()->limits());
41 }
42 
43 //! Removes link to given parameterItem from fit parameters
44 
46  ParameterItem* parameterItem)
47 {
48  FitParameterItem* fitParItem = getFitParameterItem(container, parameterItem);
49 
50  if (fitParItem) {
51  for (auto linkItem : fitParItem->getItems(FitParameterItem::T_LINK)) {
52  if (getParameterItemPath(parameterItem)
53  == linkItem->getItemValue(FitParameterLinkItem::P_LINK)) {
54  fitParItem->model()->removeRow(linkItem->index().row(), linkItem->index().parent());
55  break;
56  }
57  }
58  }
59 }
60 
61 //! Adds given parameterItem to the existing fit parameter with display name fitParName.
62 //! If parameterItem is already linked with another fitParameter, it will be relinked
63 
65  ParameterItem* parameterItem, const QString& fitParName)
66 {
67  ASSERT(container);
68 
69  removeFromFitParameters(container, parameterItem);
70  for (auto fitPar : container->getItems(FitParameterContainerItem::T_FIT_PARAMETERS)) {
71  if (fitPar->displayName() == fitParName) {
72  SessionItem* link = fitPar->model()->insertNewItem("FitParameterLink", fitPar);
74  break;
75  }
76  }
77 }
78 
79 //! Returns fFitParameterItem corresponding to given ParameterItem
80 
82  ParameterItem* parameterItem)
83 {
84  ASSERT(container);
85  return container->fitParameterItem(getParameterItemPath(parameterItem));
86 }
87 
88 //! Returns list of fit parameter display names
89 
91 {
92  ASSERT(container);
93  QStringList result;
94  for (auto item : container->getItems(FitParameterContainerItem::T_FIT_PARAMETERS)) {
95  result.append(item->displayName());
96  }
97  return result;
98 }
99 
100 //! return path to given item in the ParameterTreeContainer
101 
103 {
104  QString result = ModelPath::getPathFromIndex(parameterItem->index());
105  QString containerPrefix = "Parameter Container/";
106  int containerEnd = result.indexOf(containerPrefix) + containerPrefix.size();
107  result = result.mid(containerEnd);
108  return result;
109 }
110 
111 //! Returns ParameterItem corresponding to given link.
112 //! Link is relative to ParameterContainerItem, so first we have to find it
113 
115  const QString& link)
116 {
117  SessionItem* cur = container;
118  while (cur && cur->modelType() != "JobItem") {
119  cur = cur->parent();
120  }
121  ASSERT(cur && cur->modelType() == "JobItem");
122  JobItem* jobItem = dynamic_cast<JobItem*>(cur);
123  ASSERT(jobItem);
124  return dynamic_cast<ParameterItem*>(
126 }
#define ASSERT(condition)
Definition: Assert.h:31
Defines class FitParameterHelper.
Defines FitParameterItems family of classes.
Defines class JobItem.
Defines class JobModel.
Defines ModelPath namespace.
Defines classes for ParameterTreeItems.
FitParameterItem * fitParameterItem(const QString &link)
returns FitParameterItem for given link (path in model)
static const QString T_FIT_PARAMETERS
static void createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem)
Creates fit parameter from given ParameterItem, sets starting value to the value of ParameterItem,...
static ParameterItem * getParameterItem(FitParameterContainerItem *container, const QString &link)
Returns ParameterItem corresponding to given link.
static QStringList getFitParameterNames(FitParameterContainerItem *container)
Returns list of fit parameter display names.
static FitParameterItem * getFitParameterItem(FitParameterContainerItem *container, ParameterItem *parameterItem)
Returns fFitParameterItem corresponding to given ParameterItem.
static void removeFromFitParameters(FitParameterContainerItem *container, ParameterItem *parameterItem)
Removes link to given parameterItem from fit parameters.
static void addToFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem, const QString &fitParName)
Adds given parameterItem to the existing fit parameter with display name fitParName.
static QString getParameterItemPath(const ParameterItem *parameterItem)
return path to given item in the ParameterTreeContainer
The FitParameterItem class represents a fit parameter in GUI.
static const QString T_LINK
static const QString P_START_VALUE
FitParameterItems is a collection of items to define fit parameters in GUI.
static const QString P_LINK
ParameterContainerItem * parameterContainerItem()
Definition: JobItem.cpp:240
The ParameterItem class represent a tuning value in a parameter tuning tree.
SessionItem * linkedItem()
Returns corresponding linked item in MultiLayerItem/IsntrumentItem.
QVector< SessionItem * > getItems(const QString &tag="") const
Returns vector of all items of given tag.
QVariant value() const
Get value.
void setDisplayName(const QString &display_name)
Set display name.
SessionItem * parent() const
Returns parent of this item.
Definition: SessionItem.cpp:73
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
RealLimits limits() const
QString modelType() const
Get model type.
QModelIndex index() const
Returns model index of this item.
Definition: SessionItem.cpp:80
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
Definition: SessionModel.h:125
SessionItem * insertNewItem(QString model_type, SessionItem *parent_item=nullptr, int row=-1, QString tag="")
SessionItem * getItemFromPath(const QString &relPath, const SessionItem *parent)
returns an item from relative path wrt to given parent
Definition: ModelPath.cpp:60
QString getPathFromIndex(const QModelIndex &index)
Definition: ModelPath.cpp:19