Newer
Older
Janik Zikovsky
committed
/*WIKI*
Creates a shape object that defines the sample and sets the sample for the given workspace. Shapes are defined using XML descriptions that can be found [[HowToDefineGeometricShape|here]].
*WIKI*/
Gigg, Martyn Anthony
committed
//--------------------------------
// Includes
//--------------------------------
#include "MantidDataHandling/CreateSampleShape.h"
Gigg, Martyn Anthony
committed
#include "MantidAPI/MatrixWorkspace.h"
Gigg, Martyn Anthony
committed
#include "MantidAPI/Sample.h"
Gigg, Martyn Anthony
committed
namespace Mantid
{
namespace DataHandling
{
// Register the algorithm into the AlgorithmFactory
Gigg, Martyn Anthony
committed
DECLARE_ALGORITHM(CreateSampleShape)
Janik Zikovsky
committed
/// Sets documentation strings for this algorithm
void CreateSampleShape::initDocs()
{
this->setWikiSummary("Create a shape object to model the sample. ");
this->setOptionalMessage("Create a shape object to model the sample.");
}
Janik Zikovsky
committed
using namespace Mantid::DataHandling;
using namespace Mantid::API;
Gigg, Martyn Anthony
committed
Janik Zikovsky
committed
/**
* Initialize the algorithm
*/
void CreateSampleShape::init()
Gigg, Martyn Anthony
committed
{
Janik Zikovsky
committed
using namespace Mantid::Kernel;
declareProperty(
new WorkspaceProperty<MatrixWorkspace>("InputWorkspace","",Direction::Input),
"The workspace with which to associate the sample ");
declareProperty("ShapeXML","",new MandatoryValidator<std::string>(),
"The XML that describes the shape" );
Gigg, Martyn Anthony
committed
}
Janik Zikovsky
committed
/**
* Execute the algorithm
*/
void CreateSampleShape::exec()
Gigg, Martyn Anthony
committed
{
Janik Zikovsky
committed
// Get the input workspace
MatrixWorkspace_sptr workspace = getProperty("InputWorkspace");
// Get the XML definition
std::string shapeXML = getProperty("ShapeXML");
Geometry::ShapeFactory sFactory;
// Create the object
boost::shared_ptr<Geometry::Object> shape_sptr = sFactory.createShape(shapeXML);
// Check it's valid and attach it to the workspace sample
if( shape_sptr->hasValidShape() )
{
workspace->mutableSample().setShape(*shape_sptr);
}
else
{
g_log.warning() << "Object has invalid shape. TopRule = " << shape_sptr->topRule()
<< ", number of surfaces = " << shape_sptr->getSurfacePtr().size() << "\n";
throw std::runtime_error("Shape object is invalid, cannot attach it to workspace.");
}
// Done!
progress(1);
Gigg, Martyn Anthony
committed
}
Gigg, Martyn Anthony
committed