47 const std::string
name()
const override {
return "SofQW"; }
49 const std::string summary()
const override;
52 int version()
const override {
return (1); }
53 const std::vector<std::string>
seeAlso()
const override {
return {
"SofQWNormalisedPolygon",
"Rebin2D"}; }
55 const std::string
category()
const override {
return "Inelastic\\SofQW"; }
57 template <
typename Workspace>
58 static std::unique_ptr<Workspace>
59 setUpOutputWorkspace(
const API::MatrixWorkspace &inputWorkspace,
const std::vector<double> &qbinParams,
60 std::vector<double> &qAxis,
const std::vector<double> &ebinParams,
83template <
typename Workspace>
84std::unique_ptr<Workspace>
86 std::vector<double> &qAxis,
const std::vector<double> &ebinParams,
90 std::vector<double> xnew;
91 double eMin{std::nan(
"")};
92 double eMax{std::nan(
"")};
93 if (ebinParams.empty()) {
94 xnew = inputWorkspace.
binEdges(0).rawData();
95 }
else if (ebinParams.size() == 1) {
101 HistogramData::BinEdges xAxis(std::move(xnew));
105 if (qbinParams.size() == 1) {
106 if (std::isnan(eMin)) {
111 std::tie(qMin, qMax) = emodeProperties.
qBinHints(inputWorkspace, eMin, eMax);
118 auto outputWorkspace = DataObjects::create<Workspace>(inputWorkspace, yLength - 1, xAxis);
121 auto verticalAxis = std::make_unique<API::BinEdgeAxis>(qAxis);
122 auto verticalAxisRaw = verticalAxis.get();
123 outputWorkspace->replaceAxis(1, std::move(verticalAxis));
126 verticalAxisRaw->unit() = Kernel::UnitFactory::Instance().create(
"MomentumTransfer");
127 verticalAxisRaw->title() =
"|Q|";
130 outputWorkspace->getAxis(0)->title() =
"Energy transfer";
132 outputWorkspace->setYUnit(
"");
133 outputWorkspace->setYUnitLabel(
"Intensity");
135 return outputWorkspace;
Base class from which all concrete algorithm classes should be derived.
Data processor algorithm to be used as a parent to workflow algorithms.
Base MatrixWorkspace Abstract Class.
HistogramData::BinEdges binEdges(const size_t index) const
virtual void getXMinMax(double &xmin, double &xmax) const
const std::string category() const override
Algorithm's category for identification.
const std::string name() const override
Algorithm's name.
static std::unique_ptr< Workspace > setUpOutputWorkspace(const API::MatrixWorkspace &inputWorkspace, const std::vector< double > &qbinParams, std::vector< double > &qAxis, const std::vector< double > &ebinParams, const SofQCommon &emodeProperties)
Create the output workspace.
const std::vector< std::string > seeAlso() const override
int version() const override
Algorithm's version.
std::size_t MANTID_KERNEL_DLL createAxisFromRebinParams(const std::vector< double > ¶ms, std::vector< double > &xnew, const bool resize_xnew=true, const bool full_bins_only=false, const double xMinHint=std::nan(""), const double xMaxHint=std::nan(""), const bool useReverseLogarithmic=false, const double power=-1)
Creates a new output X array given a 'standard' set of rebinning parameters.
Helper class which provides the Collimation Length for SANS instruments.
std::pair< double, double > qBinHints(const API::MatrixWorkspace &ws, const double minE, const double maxE) const
Estimate minimum and maximum momentum transfer.