/** * Create new MD workspace and set up its box controller using algorithm's box * controllers properties * @param targWSDescr :: Description of workspace to create * @param filebackend :: true if the workspace will have a file back end * @param filename :: file to use for file back end of workspace * @return :: Shared pointer for the created workspace */ API::IMDEventWorkspace_sptr ConvertToMD::createNewMDWorkspace(const MDWSDescription &targWSDescr, const bool filebackend, const std::string &filename) { // create new md workspace and set internal shared pointer of m_OutWSWrapper // to this workspace API::IMDEventWorkspace_sptr spws = m_OutWSWrapper->createEmptyMDWS(targWSDescr); if (!spws) { g_log.error() << "can not create target event workspace with :" << targWSDescr.nDimensions() << " dimensions\n"; throw(std::invalid_argument("can not create target workspace")); } // Build up the box controller Mantid::API::BoxController_sptr bc = m_OutWSWrapper->pWorkspace()->getBoxController(); // Build up the box controller, using the properties in // BoxControllerSettingsAlgorithm this->setBoxController(bc, m_InWS2D->getInstrument()); if (filebackend) { setupFileBackend(filename, m_OutWSWrapper->pWorkspace()); } // Check if the user want sto force a top level split or not bool topLevelSplittingChecked = this->getProperty("TopLevelSplitting"); if (topLevelSplittingChecked) { // Perform initial split with the forced settings setupTopLevelSplitting(bc); } // split boxes; spws->splitBox(); // Do we split more due to MinRecursionDepth? int minDepth = this->getProperty("MinRecursionDepth"); int maxDepth = this->getProperty("MaxRecursionDepth"); if (minDepth > maxDepth) throw std::invalid_argument( "MinRecursionDepth must be >= MaxRecursionDepth "); spws->setMinRecursionDepth(size_t(minDepth)); return spws; }
/** * Create new MD workspace and set up its box controller using algorithm's box controllers properties * @param targWSDescr * @return */ API::IMDEventWorkspace_sptr ConvertToMD::createNewMDWorkspace(const MDEvents::MDWSDescription &targWSDescr) { // create new md workspace and set internal shared pointer of m_OutWSWrapper to this workspace API::IMDEventWorkspace_sptr spws = m_OutWSWrapper->createEmptyMDWS(targWSDescr); if(!spws) { g_log.error()<<"can not create target event workspace with :"<<targWSDescr.nDimensions()<<" dimensions\n"; throw(std::invalid_argument("can not create target workspace")); } // Build up the box controller Mantid::API::BoxController_sptr bc = m_OutWSWrapper->pWorkspace()->getBoxController(); // Build up the box controller, using the properties in BoxControllerSettingsAlgorithm this->setBoxController(bc, m_InWS2D->getInstrument()); // split boxes; spws->splitBox(); // Do we split more due to MinRecursionDepth? int minDepth = this->getProperty("MinRecursionDepth"); int maxDepth = this->getProperty("MaxRecursionDepth"); if (minDepth>maxDepth) throw std::invalid_argument("MinRecursionDepth must be >= MaxRecursionDepth "); spws->setMinRecursionDepth(size_t(minDepth)); return spws; }