/** Run any algorithm with a variable number of parameters * * @param algorithmName * @param count :: number of arguments given. * @return the algorithm created */ IAlgorithm_sptr FrameworkManagerImpl::exec(const std::string &algorithmName, int count, ...) { if (count % 2 == 1) { throw std::runtime_error( "Must have an even number of parameter/value string arguments"); } // Create the algorithm IAlgorithm_sptr alg = AlgorithmManager::Instance().createUnmanaged(algorithmName, -1); alg->initialize(); if (!alg->isInitialized()) throw std::runtime_error(algorithmName + " was not initialized."); va_list Params; va_start(Params, count); for (int i = 0; i < count; i += 2) { std::string paramName = va_arg(Params, const char *); std::string paramValue = va_arg(Params, const char *); alg->setPropertyValue(paramName, paramValue); } va_end(Params); alg->execute(); return alg; }
/** Create a transmission workspace @param transString : the numbers of the transmission runs to use */ MatrixWorkspace_sptr ReflMainViewPresenter::makeTransWS(const std::string& transString) { const size_t maxTransWS = 2; std::vector<std::string> transVec; std::vector<Workspace_sptr> transWSVec; //Take the first two run numbers boost::split(transVec, transString, boost::is_any_of(",")); if(transVec.size() > maxTransWS) transVec.resize(maxTransWS); if(transVec.size() == 0) throw std::runtime_error("Failed to parse the transmission run list."); for(auto it = transVec.begin(); it != transVec.end(); ++it) transWSVec.push_back(fetchRun(*it, m_view->getProcessInstrument())); //We have the runs, so we can create a TransWS IAlgorithm_sptr algCreateTrans = AlgorithmManager::Instance().create("CreateTransmissionWorkspaceAuto"); algCreateTrans->initialize(); algCreateTrans->setChild(true); algCreateTrans->setProperty("FirstTransmissionRun", boost::dynamic_pointer_cast<MatrixWorkspace>(transWSVec[0])); if(transWSVec.size() > 1) algCreateTrans->setProperty("SecondTransmissionRun", boost::dynamic_pointer_cast<MatrixWorkspace>(transWSVec[1])); algCreateTrans->setProperty("OutputWorkspace", makeTransWSName(transString)); if(!algCreateTrans->isInitialized()) throw std::runtime_error("Could not initialize CreateTransmissionWorkspaceAuto"); algCreateTrans->execute(); if(!algCreateTrans->isExecuted()) throw std::runtime_error("CreateTransmissionWorkspaceAuto failed to execute"); return algCreateTrans->getProperty("OutputWorkspace"); }