Пример #1
0
/// Check that the data sets in the table are valid and remove invalid ones.
void DataController::checkSpectra()
{
  QList<int> rows;
  int nrows = getNumberOfSpectra();
  auto& ADS = Mantid::API::AnalysisDataService::Instance();
  for( int row = 0; row < nrows; ++row)
  {
    auto wsName = getWorkspaceName( row ).toStdString();
    auto i = getWorkspaceIndex( row );
    if ( !ADS.doesExist( wsName ) )
    {
      rows.push_back( row );
      continue;
    }
    auto ws = ADS.retrieveWS<Mantid::API::MatrixWorkspace>( wsName );
    if ( !ws || i >= static_cast<int>( ws->getNumberHistograms() ) )
    {
      rows.push_back( row );
      continue;
    }
  }

  removeSpectra( rows );
}
Пример #2
0
/// Reset the caches. Prepare to fill them in lazily.
void MultiDatasetFit::reset() {
  m_functionBrowser->setNumberOfDatasets(getNumberOfSpectra());
  setParameterNamesForPlotting();
  m_plotController->setGuessFunction(m_functionBrowser->getFunctionString());
}
Пример #3
0
/// Fit the data simultaneously.
void MultiDatasetFit::fitSimultaneous()
{
  try
  {
    auto fun = createFunction();
    auto fit = Mantid::API::AlgorithmManager::Instance().create("Fit");
    fit->initialize();
    fit->setProperty("Function", fun );
    fit->setPropertyValue("InputWorkspace", getWorkspaceName(0).toStdString());
    fit->setProperty("WorkspaceIndex", getWorkspaceIndex(0));
    auto range = getFittingRange(0);
    fit->setProperty( "StartX", range.first );
    fit->setProperty( "EndX", range.second );

    int n = getNumberOfSpectra();
    for(int ispec = 1; ispec < n; ++ispec)
    {
      std::string suffix = boost::lexical_cast<std::string>(ispec);
      fit->setPropertyValue( "InputWorkspace_" + suffix, getWorkspaceName(ispec).toStdString() );
      fit->setProperty( "WorkspaceIndex_" + suffix, getWorkspaceIndex(ispec) );
      auto range = getFittingRange(ispec);
      fit->setProperty( "StartX_" + suffix, range.first );
      fit->setProperty( "EndX_" + suffix, range.second );
    }

    m_fitOptionsBrowser->copyPropertiesToAlgorithm(*fit);

    m_outputWorkspaceName = m_fitOptionsBrowser->getProperty("Output");
    if ( m_outputWorkspaceName.isEmpty() )
    {
      m_outputWorkspaceName = "out";
      fit->setPropertyValue("Output",m_outputWorkspaceName.toStdString());
      m_fitOptionsBrowser->setProperty("Output","out");
    }
    if (n == 1)
    {
      m_outputWorkspaceName += "_Workspace";
    }
    else
    {
      m_outputWorkspaceName += "_Workspaces";
    }

    removeOldOutput();

    m_fitRunner.reset( new API::AlgorithmRunner() );
    connect( m_fitRunner.get(),SIGNAL(algorithmComplete(bool)), this, SLOT(finishFit(bool)), Qt::QueuedConnection );

    m_fitRunner->startAlgorithm(fit);

  }
  catch(std::exception& e)
  {
    QString mess(e.what());
    const int maxSize = 500;
    if ( mess.size() > maxSize )
    {
      mess = mess.mid(0,maxSize);
      mess += "...";
    }
    QMessageBox::critical( this, "MantidPlot - Error", QString("Fit failed:\n\n  %1").arg(mess) );
  }
}