BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FitComparisonWidget.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/FitWidgets/FitComparisonWidget.cpp
6 //! @brief Implements class FitComparisonWidget
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 
26 #include <QAction>
27 #include <QGridLayout>
28 #include <QVBoxLayout>
29 
31  : SessionItemWidget(parent)
32  , m_realDataPlot(new ColorMapCanvas)
33  , m_simulatedDataPlot(new ColorMapCanvas)
34  , m_relativeDiffPlot(new ColorMapCanvas)
35  , m_fitFlowWidget(new FitFlowWidget)
36  , m_statusLabel(new PlotStatusLabel(nullptr, this))
37  , m_propertyWidget(new IntensityDataPropertyWidget)
38  , m_resetViewAction(new QAction(this))
39  , m_comparisonController(new FitComparisonController2D(this))
40 {
41  auto vlayout = new QVBoxLayout;
42  vlayout->setMargin(0);
43  vlayout->setSpacing(0);
44 
45  auto gridLayout = new QGridLayout;
46  gridLayout->setMargin(0);
47  gridLayout->setSpacing(0);
48 
49  gridLayout->addWidget(m_realDataPlot, 0, 0);
50  gridLayout->addWidget(m_simulatedDataPlot, 0, 1);
51  gridLayout->addWidget(m_relativeDiffPlot, 1, 0);
52  gridLayout->addWidget(m_fitFlowWidget, 1, 1);
53 
54  vlayout->addLayout(gridLayout);
55  vlayout->addWidget(m_statusLabel);
56 
57  auto hlayout = new QHBoxLayout;
58  hlayout->setMargin(0);
59  hlayout->setSpacing(0);
60  hlayout->addLayout(vlayout);
61  hlayout->addWidget(m_propertyWidget);
62  setLayout(hlayout);
63 
64  m_resetViewAction->setText("Center view");
65  m_resetViewAction->setIcon(QIcon(":/images/camera-metering-center.svg"));
66  m_resetViewAction->setToolTip("Reset View");
67  connect(m_resetViewAction, &QAction::triggered, this, &FitComparisonWidget::onResetViewAction);
68 
69  m_propertyWidget->setVisible(false);
70 }
71 
73 
75 {
76  return QList<QAction*>() << m_resetViewAction << m_propertyWidget->actionList();
77 }
78 
80 {
81  if (!jobItem()->isValidForFitting())
82  return;
83 
85  [this](const QString& name) {
86  if (name == JobItem::P_STATUS) {
87  if (jobItem()->isCompleted())
89  }
90  },
91  this);
92 
97  m_fitFlowWidget->setItem(jobItem()->fitSuiteItem());
98 
103 
105 }
106 
108 {
110 }
111 
113 {
114  if (auto item = realDataItem())
115  item->resetView();
116 
118 }
119 
121 {
122  JobItem* jobItem = dynamic_cast<JobItem*>(currentItem());
123  return jobItem;
124 }
125 
127 {
128  return jobItem()->realDataItem()->intensityDataItem();
129 }
130 
132 {
133  return jobItem()->intensityDataItem();
134 }
135 
137 {
139 }
Defines class ColorMapCanvas.
Defines class ColorMap.
Defines class FitComparisonController.
Defines class FitComparisonWidget.
Defines class FitFlowWidget.
Defines class FitSuiteItem.
Defines class IntensityDataItem.
Defines class IntensityDataPropertyWidget.
Defines class JobItem.
Defines class PlotStatusLabel.
Defines class RealDataItem.
The ColorMapCanvas class contains ColorMap for intensity data presentation, and provide control of fo...
ColorMap * colorMap()
void setItem(SessionItem *intensityDataItem)
Provides synchronization between certain properties of fit related IntensityDataItems.
void setItem(JobItem *job_item)
PlotStatusLabel * m_statusLabel
FitFlowWidget * m_fitFlowWidget
ColorMapCanvas * m_simulatedDataPlot
IntensityDataPropertyWidget * m_propertyWidget
IntensityDataItem * diffItem()
ColorMapCanvas * m_realDataPlot
FitComparisonWidget(QWidget *parent=nullptr)
IntensityDataItem * realDataItem()
IntensityDataItem * simulatedDataItem()
void subscribeToItem() override
FitComparisonController2D * m_comparisonController
~FitComparisonWidget() override
virtual QList< QAction * > actionList() override
void unsubscribeFromItem() override
ColorMapCanvas * m_relativeDiffPlot
The FitFlowWidget class is intended for showing chi2 .vs interation count dependency.
Definition: FitFlowWidget.h:26
The IntensityDataPropertyWidget shows ComponentEditor for given IntensityDataItem.
static const QString P_STATUS
Definition: JobItem.h:40
RealDataItem * realDataItem()
Definition: JobItem.cpp:259
IntensityDataItem * intensityDataItem()
Definition: JobItem.cpp:113
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
Definition: ModelMapper.cpp:35
The PlotStatusLabel class shows status string as reported by DescriptedPlot in a frame.
void reset()
Disconnects all color maps from the label.
void addPlot(ScientificPlot *plot)
IntensityDataItem * intensityDataItem()
The SessionItemWidget class is a base for all widgets representing the content of SessionItem.
SessionItem * currentItem()
virtual void setItem(SessionItem *item)
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
QString const & name(EShape k)
Definition: particles.cpp:21