Ejemplo n.º 1
0
/**
 * Takes a combobox and adds the allowed values of the given property to its
 * list.
 * It also sets the displayed value to the correct one based on either the
 * history
 * or a script input value
 * @param propName :: The name of the property
 * @param optionsBox :: A pointer to a QComoboBox object
 * @returns A newed QComboBox
 */
void AlgorithmDialog::fillAndSetComboBox(const QString &propName,
                                         QComboBox *optionsBox) const {
  if (!optionsBox)
    return;
  Mantid::Kernel::Property *property = getAlgorithmProperty(propName);
  if (!property)
    return;

  std::vector<std::string> items = property->allowedValues();
  std::vector<std::string>::const_iterator vend = items.end();
  for (std::vector<std::string>::const_iterator vitr = items.begin();
       vitr != vend; ++vitr) {
    optionsBox->addItem(QString::fromStdString(*vitr));
  }

  // Display the appropriate value
  QString displayed("");
  if (!isForScript()) {
    displayed =
        AlgorithmInputHistory::Instance().previousInput(m_algName, propName);
  }
  if (displayed.isEmpty()) {
    displayed = QString::fromStdString(property->value());
  }

  int index = optionsBox->findText(displayed);
  if (index >= 0) {
    optionsBox->setCurrentIndex(index);
  }
}
Ejemplo n.º 2
0
std::string FrameworkManagerProxy::createAlgorithmDocs(const std::string& algName, const int version)
{
  const std::string EOL="\n";
  API::IAlgorithm_sptr algm = API::AlgorithmManager::Instance().createUnmanaged(algName, version);
  algm->initialize();

  // Put in the quick overview message
  std::stringstream buffer;
  std::string temp = algm->getOptionalMessage();
  if (temp.size() > 0)
    buffer << temp << EOL << EOL;

  // get a sorted copy of the properties
  PropertyVector properties(algm->getProperties());
  std::sort(properties.begin(), properties.end(), PropertyOrdering());

  // generate the sanitized names
  StringVector names(properties.size());
  size_t numProps = properties.size();
  for ( size_t i = 0; i < numProps; ++i) 
  {
    names[i] = removeCharacters(properties[i]->name(), "");
  }

  buffer << "Property descriptions: " << EOL << EOL;
  // write the actual property descriptions
  Mantid::Kernel::Property *prop;
  for ( size_t i = 0; i < numProps; ++i) 
  {
    prop = properties[i];
    buffer << names[i] << "("
           << Mantid::Kernel::Direction::asText(prop->direction());
    if (!prop->isValid().empty())
      buffer << ":req";
    buffer << ") *" << prop->type() << "* ";
    std::set<std::string> allowed = prop->allowedValues();
    if (!prop->documentation().empty() || !allowed.empty())
    {
      buffer << "      " << prop->documentation();
      if (!allowed.empty())
      {
        buffer << " [" << Kernel::Strings::join(allowed.begin(), allowed.end(), ", ");
        buffer << "]";
      }
      buffer << EOL;
      if( i < numProps - 1 ) buffer << EOL;
    }
  }

  return buffer.str();
}
Ejemplo n.º 3
0
/**
  * A helper function to create the simple API
  * @param algName :: A string giving the name of the algorithm
  * @param path :: The path to the .m file that we should create
  */
void CreateSimpleAPIHelper(const std::string &algName,
                           const std::string &path) {
  IAlgorithm *alg;
  try {
    alg = FrameworkManager::Instance().createAlgorithm(algName);
  } catch (std::exception &) {
    std::string err = "An error occurred while writing the ";
    err += algName + " function definition.\n";
    mexErrMsgTxt(err.c_str());
    return;
  }
  std::string fullpath(path + algName + ".m");
  std::ofstream mfile(fullpath.c_str());

  typedef std::vector<Mantid::Kernel::Property *> PropertyVector;
  // parameter list
  mfile << "function res = " << algName << "(varargin)\n";
  // help string
  PropertyVector orderedProperties(alg->getProperties());
  std::sort(orderedProperties.begin(), orderedProperties.end(),
            PropertyOrdering());
  PropertyVector::const_iterator pIter = orderedProperties.begin();
  PropertyVector::const_iterator pEnd = orderedProperties.end();
  mfile << "%\t" << algName << "(";
  for (; pIter != pEnd;) {
    mfile << (*pIter)->name();
    if (++pIter != pEnd)
      mfile << ", ";
  }
  mfile << ")\n";
  mfile << "%\t\tArgument description:\n";
  pIter = orderedProperties.begin();
  unsigned int iOpt(0);
  for (; pIter != pEnd; ++pIter) {
    Mantid::Kernel::Property *prop = *pIter;
    mfile << "%\t\tName: " << prop->name() << ", Optional: ";
    if (prop->isValid() == "") {
      ++iOpt;
      mfile << "Yes, Default value: " << santizePropertyValue(prop->value());
    } else
      mfile << "No";
    mfile << ", Direction: "
          << Mantid::Kernel::Direction::asText(prop->direction()); // << ", ";
    auto allowed = prop->allowedValues();
    if (!allowed.empty()) {
      mfile << ", Allowed values: ";
      auto sIter = allowed.begin();
      auto sEnd = allowed.end();
      for (; sIter != sEnd;) {
        mfile << (*sIter);
        if (++sIter != sEnd)
          mfile << ", ";
      }
    }
    mfile << "\n";
  }
  mfile << "%\n%\tNote: All string arguments must be wrapped in single quotes "
           "''.\n";

  // The function definition
  mfile << "if nargin < " << (orderedProperties.size() - iOpt) << "\n"
        << "\tfprintf('All mandatory arguments have not been supplied, type "
           "\"help " << algName << "\" for more information\\n');\n"
        << "\treturn\n"
        << "end\n";

  mfile << "alg = MantidAlgorithm('" << algName << "');\n"
        << "argstring = '';\n";
  // Build arguments list
  mfile << "for i = 1:nargin\n"
        << "\targstring = strcat(argstring,varargin{i});\n"
        << "\tif i < nargin\n"
        << "\t\targstring = strcat(argstring, ';');\n"
        << "\tend\n"
        << "end\n";
  // Run the algorithm
  mfile << "res = run(alg, argstring);\n";
  mfile.close();
}
Ejemplo n.º 4
0
/**
 * Reimplemented virtual function to set up the dialog
 */
void LoadRawDialog::initLayout() {
  QVBoxLayout *main_layout = new QVBoxLayout(this);

  // Add the helpful summary message
  if (isMessageAvailable())
    this->addOptionalMessage(main_layout);

  //------------- Filename property ---------------------
  QHBoxLayout *prop_line = new QHBoxLayout;
  prop_line->addWidget(new QLabel("Select a file to load:"));

  m_pathBox = new QLineEdit;
  m_pathBox->setMinimumWidth(m_pathBox->fontMetrics().maxWidth() * 13);
  prop_line->addWidget(m_pathBox);
  tie(m_pathBox, "Filename", prop_line);

  QPushButton *browseBtn = new QPushButton("Browse");
  connect(browseBtn, SIGNAL(clicked()), this, SLOT(browseClicked()));
  browseBtn->setEnabled(isWidgetEnabled("Filename"));
  prop_line->addWidget(browseBtn);

  main_layout->addLayout(prop_line);

  //------------- OutputWorkspace property ---------------------
  m_wsBox = new QLineEdit;

  prop_line = new QHBoxLayout;
  prop_line->addWidget(new QLabel("Enter name for workspace:"));
  prop_line->addWidget(m_wsBox);
  tie(m_wsBox, "OutputWorkspace", prop_line);
  prop_line->addStretch();
  main_layout->addLayout(prop_line);

  //------------- Spectra properties ---------------------
  QGroupBox *groupbox = new QGroupBox("Spectra Options");
  prop_line = new QHBoxLayout;

  QLineEdit *text_field = new QLineEdit;
  text_field->setMaximumWidth(m_wsBox->fontMetrics().width("888888"));
  prop_line->addWidget(new QLabel("Start:"));
  prop_line->addWidget(text_field);
  tie(text_field, "SpectrumMin", prop_line);

  text_field = new QLineEdit;
  text_field->setMaximumWidth(m_wsBox->fontMetrics().width("888888"));
  prop_line->addWidget(new QLabel("End:"));
  prop_line->addWidget(text_field);
  tie(text_field, "SpectrumMax", prop_line);

  text_field = new QLineEdit;
  prop_line->addWidget(new QLabel("List:"));
  prop_line->addWidget(text_field);
  tie(text_field, "SpectrumList", prop_line);

  prop_line->addStretch();
  groupbox->setLayout(prop_line);
  main_layout->addWidget(groupbox);

  //------------- Period properties ---------------------
  prop_line = new QHBoxLayout;
  text_field = new QLineEdit;
  prop_line->addWidget(new QLabel("Periods:"));
  prop_line->addWidget(text_field);
  prop_line->addStretch();
  tie(text_field, "PeriodList", prop_line);

  main_layout->addLayout(prop_line);

  //------------- Cache option , log files options and Monitors Options
  //---------------------

  Mantid::Kernel::Property *cacheProp = getAlgorithmProperty("Cache");
  if (cacheProp) {
    QComboBox *cacheBox = new QComboBox;
    std::vector<std::string> items = cacheProp->allowedValues();
    std::vector<std::string>::const_iterator vend = items.end();
    for (std::vector<std::string>::const_iterator vitr = items.begin();
         vitr != vend; ++vitr) {
      cacheBox->addItem(QString::fromStdString(*vitr));
    }
    prop_line = new QHBoxLayout;
    prop_line->addWidget(new QLabel("Cache file locally:"), 0, Qt::AlignRight);
    prop_line->addWidget(cacheBox, 0, Qt::AlignLeft);
    tie(cacheBox, "Cache", prop_line);
  }

  prop_line->addStretch();
  // If the algorithm version supports the LoadLog property add a check box for
  // it
  Mantid::Kernel::Property *loadlogs = getAlgorithmProperty("LoadLogFiles");
  if (loadlogs) {
    QCheckBox *checkbox = new QCheckBox("Load Log Files", this);
    prop_line->addWidget(checkbox);
    tie(checkbox, "LoadLogFiles", prop_line);
  }
  prop_line->addStretch();
  //------------- If the algorithm version supports the LoadMonitors property
  // add a check box for it ----
  Mantid::Kernel::Property *loadMonitors = getAlgorithmProperty("LoadMonitors");
  if (loadMonitors) {
    QComboBox *monitorsBox = new QComboBox;
    std::vector<std::string> monitoritems = loadMonitors->allowedValues();
    std::vector<std::string>::const_iterator mend = monitoritems.end();
    for (std::vector<std::string>::const_iterator mitr = monitoritems.begin();
         mitr != mend; ++mitr) {
      monitorsBox->addItem(QString::fromStdString(*mitr));
    }
    prop_line->addWidget(new QLabel("LoadMonitors:"), 0, Qt::AlignRight);
    prop_line->addWidget(monitorsBox);
    tie(monitorsBox, "LoadMonitors", prop_line);
  }

  if (prop_line)
    main_layout->addLayout(prop_line);

  // Buttons
  main_layout->addLayout(createDefaultButtonLayout("?", "Load", "Cancel"));
}