Skip to content
Snippets Groups Projects
Commit ac53b753 authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

FitSuiteItem: prepared

parent 239881c5
No related branches found
No related tags found
1 merge request!1124FitSuiteItem is refactored
......@@ -23,20 +23,30 @@ namespace {
namespace Tag {
const QString UpdateInterval("UpdateInterval");
const QString IterationsCount("IterationsCount");
const QString Chi2("Chi2");
const QString MinimizerContainer("MinimizerContainer");
const QString FitParameterContainer("FitParameterContainer");
} // namespace Tag
namespace Attrib {
const QString value("value");
} // namespace Attrib
} // namespace
FitSuiteItem::FitSuiteItem()
: SessionItem(M_TYPE)
, m_updateInterval(10)
, m_iterCount(0)
, m_chi2(0.0)
{
addProperty(P_UPDATE_INTERVAL, int(10));
addProperty(P_ITERATION_COUNT, int(0));
addProperty(P_CHI2, double(0.0));
registerTag(T_MINIMIZER, 1, 1, {MinimizerContainerItem::M_TYPE});
setObjectName("FitSuite");
}
FitParameterContainerItem* FitSuiteItem::createFitParametersContainer()
......@@ -56,52 +66,75 @@ FitParameterContainerItem* FitSuiteItem::fitParameterContainerItem()
MinimizerContainerItem* FitSuiteItem::createMinimizerContainer()
{
if (getItem(T_MINIMIZER))
if (m_minimizerContainer)
throw Error("FitSuiteItem::createMinimizerContainer() -> Error. Attempt to create "
"a second MinimizerContainer.");
return model()->insertItem<MinimizerContainerItem>(this, -1, T_MINIMIZER);
m_minimizerContainer = std::make_unique<MinimizerContainerItem>();
return m_minimizerContainer.get();
}
MinimizerContainerItem* FitSuiteItem::minimizerContainerItem()
{
return item<MinimizerContainerItem>(T_MINIMIZER);
return m_minimizerContainer.get();
}
int FitSuiteItem::updateInterval() const
{
return getItemValue(P_UPDATE_INTERVAL).toInt();
return m_updateInterval;
}
void FitSuiteItem::setUpdateInterval(const int interval)
void FitSuiteItem::setUpdateInterval(int interval)
{
setItemValue(P_UPDATE_INTERVAL, interval);
m_updateInterval = interval;
emit updateIntervalChanged(interval);
}
int FitSuiteItem::iterationCount() const
{
return getItemValue(P_ITERATION_COUNT).toInt();
return m_iterCount;
}
void FitSuiteItem::setIterationCount(const int count)
void FitSuiteItem::setIterationCount(int count)
{
setItemValue(P_ITERATION_COUNT, count);
m_iterCount = count;
emit iterationCountChanged(count);
}
double FitSuiteItem::chi2() const
{
return getItemValue(P_CHI2).toDouble();
return m_chi2;
}
void FitSuiteItem::setChi2(const double chi2)
{
setItemValue(P_CHI2, chi2);
m_chi2 = chi2;
}
void FitSuiteItem::writeNonSessionItems(QXmlStreamWriter* writer) const
{
// update interval
writer->writeStartElement(Tag::UpdateInterval);
GUI::Session::XML::writeAttribute(writer, Attrib::value, m_updateInterval);
writer->writeEndElement();
// iterations count
writer->writeStartElement(Tag::IterationsCount);
GUI::Session::XML::writeAttribute(writer, Attrib::value, m_iterCount);
writer->writeEndElement();
// chi2
writer->writeStartElement(Tag::Chi2);
GUI::Session::XML::writeAttribute(writer, Attrib::value, m_chi2);
writer->writeEndElement();
// minimizer container
if (m_minimizerContainer) {
writer->writeStartElement(Tag::MinimizerContainer);
m_minimizerContainer->writeTo(writer);
writer->writeEndElement();
}
// fit parameter container
if (m_fitContainer) {
writer->writeStartElement(Tag::FitParameterContainer);
......@@ -114,12 +147,34 @@ void FitSuiteItem::readNonSessionItems(QXmlStreamReader* reader)
{
while (reader->readNextStartElement()) {
// fit parameter container
if (reader->name() == Tag::FitParameterContainer) {
if (!m_fitContainer)
createFitParametersContainer();
m_fitContainer->readFrom(reader);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::FitParameterContainer);
// update interval
if (reader->name() == Tag::UpdateInterval) {
GUI::Session::XML::readAttribute(reader, Attrib::value, &m_updateInterval);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::UpdateInterval);
// iterations count
} else if (reader->name() == Tag::IterationsCount) {
GUI::Session::XML::readAttribute(reader, Attrib::value, &m_iterCount);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::IterationsCount);
// chi2
} else if (reader->name() == Tag::Chi2) {
GUI::Session::XML::readAttribute(reader, Attrib::value, &m_chi2);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::Chi2);
// minimizer container
} else if (reader->name() == Tag::MinimizerContainer) {
if (!m_minimizerContainer)
createMinimizerContainer();
m_minimizerContainer->readFrom(reader);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::MinimizerContainer);
// fit parameter container
} else if (reader->name() == Tag::FitParameterContainer) {
if (!m_fitContainer)
createFitParametersContainer();
m_fitContainer->readFrom(reader);
GUI::Session::XML::gotoEndElementOfTag(reader, Tag::FitParameterContainer);
} else {
reader->skipCurrentElement();
......
......@@ -23,12 +23,6 @@ class MinimizerContainerItem;
class BA_CORE_API_ FitSuiteItem : public QObject, public SessionItem {
Q_OBJECT
private:
static constexpr auto P_UPDATE_INTERVAL{"Update interval"};
static constexpr auto P_ITERATION_COUNT{"Number of iterations"};
static constexpr auto P_CHI2{"Chi2"};
static constexpr auto T_MINIMIZER{"Minimizer settings"};
public:
static constexpr auto M_TYPE{"FitSuite"};
......@@ -57,6 +51,10 @@ signals:
void updateIntervalChanged(int interval);
private:
int m_updateInterval;
int m_iterCount;
double m_chi2;
std::unique_ptr<MinimizerContainerItem> m_minimizerContainer;
std::unique_ptr<FitParameterContainerItem> m_fitContainer;
};
......
......@@ -12,7 +12,6 @@
//
// ************************************************************************************************
#include "GUI/Model/Job/JobItem.h"
#include "Base/Util/Assert.h"
#include "Device/Detector/SimulationAreaIterator.h"
#include "GUI/Model/CatDevice/InstrumentItemCatalog.h"
......@@ -25,6 +24,8 @@
#include "GUI/Model/Device/InstrumentItems.h"
#include "GUI/Model/Job/FitParameterContainerItem.h"
#include "GUI/Model/Job/FitSuiteItem.h"
#include "GUI/Model/Job/JobItem.h"
#include "GUI/Model/Job/MinimizerItem.h"
#include "GUI/Model/Job/ParameterTreeItems.h"
#include "GUI/Model/Model/SessionXML.h" // writeItemAndChildItems
#include "GUI/Model/Sample/ItemWithMaterial.h"
......
......@@ -2,6 +2,7 @@
#include "GUI/Model/Job/FitParameterItem.h"
#include "GUI/Model/Job/FitParameterLinkItem.h"
#include "GUI/Model/Job/FitSuiteItem.h"
#include "GUI/Model/Job/MinimizerItem.h"
#include "GUI/Model/Model/FitParameterModel.h"
#include "GUI/Model/Model/JobModel.h"
#include "Tests/GTestWrapper/google_test.h"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment