Skip to content
Snippets Groups Projects
ExperimentPresenter.cpp 2.06 KiB
Newer Older
#include "ExperimentPresenter.h"
#include "../../Reduction/ValidatePerThetaDefaults.h"

namespace MantidQt {
namespace CustomInterfaces {

ExperimentPresenter::ExperimentPresenter(IExperimentView *view)
    : m_view(view), m_model() {
  m_view->subscribe(this);
}

void ExperimentPresenter::notifySettingsChanged() {
  auto const analysisMode = analysisModeFromString(m_view->getAnalysisMode());
  auto const reductionType =
      reductionTypeFromString(m_view->getReductionType());
  auto const summationType =
      summationTypeFromString(m_view->getSummationType());
  auto const cRho = m_view->getCRho();
  auto const cAlpha = m_view->getCAlpha();
  auto const cAp = m_view->getCAp();
  auto const cPp = m_view->getCPp();
  auto polarizationCorrections =
      PolarizationCorrections(cRho, cAlpha, cAp, cPp);
  auto transmissionRunRange =
      RangeInLambda(m_view->getTransmissionStartOverlap(),
                    m_view->getTransmissionEndOverlap());
  auto stitchParameters = m_view->getStitchOptions();

  auto rowTemplatesContent = m_view->getPerAngleOptions();

  std::vector<PerThetaDefaults> rowTemplates;
  auto row = 0;
  for (auto const& rowTemplateContent : rowTemplatesContent) {
    auto rowValidationResult = validatePerThetaDefaults(rowTemplateContent);
    if (rowValidationResult.isValid()) {
      rowTemplates.emplace_back(rowValidationResult.validRowElseNone().get());
      m_view->showPerAngleOptionsAsValid(row);
    } else {
      for (auto const& errorColumn : rowValidationResult.invalidColumns())
        m_view->showPerAngleOptionsAsInvalid(row, errorColumn);
    }
    row++;
  }

  m_model = Experiment(analysisMode, reductionType, summationType,
                       polarizationCorrections, transmissionRunRange,
                       stitchParameters, rowTemplates);
}

void ExperimentPresenter::notifySummationTypeChanged() {
  if (m_model.get().summationType() == SummationType::SumInQ)
    m_view->enableReductionType();
  else
    m_view->disableReductionType();
}

Experiment const &ExperimentPresenter::experiment() const { return m_model.get(); }
}
}