/* Executes the underlying algorithm to create the MVP model. @param factory : visualisation factory to use. @param loadingProgressUpdate : Handler for GUI updates while algorithm progresses. @param drawingProgressUpdate : Handler for GUI updates while vtkDataSetFactory::create occurs. */ vtkDataSet* MDEWEventNexusLoadingPresenter::execute(vtkDataSetFactory* factory, ProgressAction& loadingProgressUpdate, ProgressAction& drawingProgressUpdate) { using namespace Mantid::API; using namespace Mantid::Geometry; if(this->shouldLoad()) { Poco::NObserver<ProgressAction, Mantid::API::Algorithm::ProgressNotification> observer(loadingProgressUpdate, &ProgressAction::handler); AnalysisDataService::Instance().remove("MD_EVENT_WS_ID"); IAlgorithm_sptr alg = AlgorithmManager::Instance().create("LoadMD"); alg->initialize(); alg->setPropertyValue("Filename", this->m_filename); alg->setPropertyValue("OutputWorkspace", "MD_EVENT_WS_ID"); alg->setProperty("FileBackEnd", !this->m_view->getLoadInMemory()); //Load from file by default. alg->addObserver(observer); alg->execute(); alg->removeObserver(observer); } Workspace_sptr result=AnalysisDataService::Instance().retrieve("MD_EVENT_WS_ID"); Mantid::API::IMDEventWorkspace_sptr eventWs = boost::dynamic_pointer_cast<Mantid::API::IMDEventWorkspace>(result); factory->setRecursionDepth(this->m_view->getRecursionDepth()); //Create visualisation in one-shot. vtkDataSet* visualDataSet = factory->oneStepCreate(eventWs, drawingProgressUpdate); /*extractMetaData needs to be re-run here because the first execution of this from ::executeLoadMetadata will not have ensured that all dimensions have proper range extents set. */ this->extractMetadata(eventWs); this->appendMetadata(visualDataSet, eventWs->getName()); return visualDataSet; }
/* Executes the underlying algorithm to create the MVP model. @param factory : visualisation factory to use. @param loadingProgressUpdate : Handler for GUI updates while algorithm progresses. @param drawingProgressUpdate : Handler for GUI updates while vtkDataSetFactory::create occurs. */ vtkSmartPointer<vtkDataSet> SQWLoadingPresenter::execute(vtkDataSetFactory *factory, ProgressAction &loadingProgressUpdate, ProgressAction &drawingProgressUpdate) { using namespace Mantid::API; using namespace Mantid::Geometry; if (this->shouldLoad()) { Poco::NObserver<ProgressAction, Mantid::API::Algorithm::ProgressNotification> observer(loadingProgressUpdate, &ProgressAction::handler); AnalysisDataService::Instance().remove("MD_EVENT_WS_ID"); IAlgorithm_sptr alg = AlgorithmManager::Instance().create("LoadSQW"); alg->initialize(); alg->setPropertyValue("Filename", this->m_filename); alg->setPropertyValue("OutputWorkspace", "MD_EVENT_WS_ID"); // Default is not to load into memory and when this is the case, generate a // nxs backend for output. if (!this->m_view->getLoadInMemory()) { size_t pos = this->m_filename.find('.'); std::string backEndFile = this->m_filename.substr(0, pos) + ".nxs"; alg->setPropertyValue("OutputFilename", backEndFile); } alg->addObserver(observer); alg->execute(); alg->removeObserver(observer); } Workspace_sptr result = AnalysisDataService::Instance().retrieve("MD_EVENT_WS_ID"); Mantid::API::IMDEventWorkspace_sptr eventWs = boost::dynamic_pointer_cast<Mantid::API::IMDEventWorkspace>(result); factory->setRecursionDepth(this->m_view->getRecursionDepth()); auto visualDataSet = factory->oneStepCreate(eventWs, drawingProgressUpdate); this->appendMetadata(visualDataSet, eventWs->getName()); return visualDataSet; }
/* Executes the underlying algorithm to create the MVP model. @param factory : visualisation factory to use. @param loadingProgressUpdate : Handler for GUI updates while algorithm progresses. @param drawingProgressUpdate : Handler for GUI updates while vtkDataSetFactory::create occurs. */ vtkSmartPointer<vtkDataSet> EventNexusLoadingPresenter::execute(vtkDataSetFactory *factory, ProgressAction &loadingProgressUpdate, ProgressAction &drawingProgressUpdate) { using namespace Mantid::API; using namespace Mantid::Geometry; this->m_view->getLoadInMemory(); // TODO, nexus reader algorithm currently has // no use of this. if (this->shouldLoad()) { Poco::NObserver<ProgressAction, Mantid::API::Algorithm::ProgressNotification> observer(loadingProgressUpdate, &ProgressAction::handler); AnalysisDataService::Instance().remove("MD_EVENT_WS_ID"); Algorithm_sptr loadAlg = AlgorithmManager::Instance().createUnmanaged("LoadEventNexus"); loadAlg->initialize(); loadAlg->setChild(true); loadAlg->setPropertyValue("Filename", this->m_filename); loadAlg->setPropertyValue("OutputWorkspace", "temp_ws"); loadAlg->addObserver(observer); loadAlg->executeAsChildAlg(); loadAlg->removeObserver(observer); Workspace_sptr temp = loadAlg->getProperty("OutputWorkspace"); IEventWorkspace_sptr tempWS = boost::dynamic_pointer_cast<IEventWorkspace>(temp); Algorithm_sptr convertAlg = AlgorithmManager::Instance().createUnmanaged( "ConvertToDiffractionMDWorkspace", 1); convertAlg->initialize(); convertAlg->setChild(true); convertAlg->setProperty("InputWorkspace", tempWS); convertAlg->setProperty<bool>("ClearInputWorkspace", false); convertAlg->setProperty<bool>("LorentzCorrection", true); convertAlg->setPropertyValue("OutputWorkspace", "converted_ws"); convertAlg->addObserver(observer); convertAlg->executeAsChildAlg(); convertAlg->removeObserver(observer); IMDEventWorkspace_sptr outWS = convertAlg->getProperty("OutputWorkspace"); AnalysisDataService::Instance().addOrReplace("MD_EVENT_WS_ID", outWS); } Workspace_sptr result = AnalysisDataService::Instance().retrieve("MD_EVENT_WS_ID"); Mantid::API::IMDEventWorkspace_sptr eventWs = boost::dynamic_pointer_cast<Mantid::API::IMDEventWorkspace>(result); m_wsTypeName = eventWs->id(); factory->setRecursionDepth(this->m_view->getRecursionDepth()); auto visualDataSet = factory->oneStepCreate( eventWs, drawingProgressUpdate); // HACK: progressUpdate should be // argument for drawing! this->extractMetadata(*eventWs); this->appendMetadata(visualDataSet, eventWs->getName()); return visualDataSet; }