forked from npshub/mantid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
WorkspaceSingleValue.cpp
111 lines (96 loc) · 3.86 KB
/
WorkspaceSingleValue.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#include "MantidDataObjects/WorkspaceSingleValue.h"
#include "MantidAPI/RefAxis.h"
#include "MantidAPI/SpectraAxis.h"
#include "MantidAPI/WorkspaceFactory.h"
#include "MantidKernel/IPropertyManager.h"
namespace Mantid {
namespace DataObjects {
using std::size_t;
DECLARE_WORKSPACE(WorkspaceSingleValue)
/// Constructor
WorkspaceSingleValue::WorkspaceSingleValue(double value, double error, const Parallel::StorageMode storageMode)
: API::HistoWorkspace(storageMode) {
initialize(1, 1, 1);
// Set the "histogram" to the single value
data.dataX().resize(1, 0.0);
data.setCounts(1, value);
data.setCountStandardDeviations(1, error);
data.setPointStandardDeviations(1, 0.0);
setDistribution(true);
// Add a set of axes to the workspace
m_axes.resize(2);
m_axes[0] = std::make_unique<API::RefAxis>(this);
m_axes[1] = std::make_unique<API::SpectraAxis>(this);
}
WorkspaceSingleValue::WorkspaceSingleValue(const WorkspaceSingleValue &other)
: HistoWorkspace(other), data(other.data) {
setDistribution(true);
}
/** Does nothing in this case
* @param NVectors :: This value can only be equal to one, otherwise exception
* is thrown
* @param XLength :: The number of X data points/bin boundaries
* @param YLength :: The number of data/error points
*/
void WorkspaceSingleValue::init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength) {
(void)NVectors;
(void)XLength;
(void)YLength; // Avoid compiler warning
}
void WorkspaceSingleValue::init(const HistogramData::Histogram &histogram) { UNUSED_ARG(histogram); }
/// Return the underlying Histogram1D at the given workspace index.
Histogram1D &WorkspaceSingleValue::getSpectrumWithoutInvalidation(const size_t /*index*/) {
data.setMatrixWorkspace(this, 0);
return data;
}
/// Rebin the workspace. Not implemented for this workspace.
void WorkspaceSingleValue::generateHistogram(const std::size_t index, const MantidVec &X, MantidVec &Y, MantidVec &E,
bool skipError) const {
UNUSED_ARG(index);
UNUSED_ARG(X);
UNUSED_ARG(Y);
UNUSED_ARG(E);
UNUSED_ARG(skipError);
throw std::runtime_error("generateHistogram() not implemented for WorkspaceSingleValue.");
}
/// Our parent MatrixWorkspace has hardcoded 2, but we need 0.
size_t WorkspaceSingleValue::getNumDims() const { return 0; }
} // namespace DataObjects
} // namespace Mantid
namespace Mantid {
namespace Kernel {
template <>
DLLExport Mantid::DataObjects::WorkspaceSingleValue_sptr
IPropertyManager::getValue<Mantid::DataObjects::WorkspaceSingleValue_sptr>(const std::string &name) const {
auto *prop =
dynamic_cast<PropertyWithValue<Mantid::DataObjects::WorkspaceSingleValue_sptr> *>(getPointerToProperty(name));
if (prop) {
return *prop;
} else {
std::string message =
"Attempt to assign property " + name + " to incorrect type. Expected shared_ptr<WorkspaceSingleValue>.";
throw std::runtime_error(message);
}
}
template <>
DLLExport Mantid::DataObjects::WorkspaceSingleValue_const_sptr
IPropertyManager::getValue<Mantid::DataObjects::WorkspaceSingleValue_const_sptr>(const std::string &name) const {
auto *prop =
dynamic_cast<PropertyWithValue<Mantid::DataObjects::WorkspaceSingleValue_sptr> *>(getPointerToProperty(name));
if (prop) {
return prop->operator()();
} else {
std::string message =
"Attempt to assign property " + name + " to incorrect type. Expected const shared_ptr<WorkspaceSingleValue>.";
throw std::runtime_error(message);
}
}
} // namespace Kernel
} // namespace Mantid
///\endcond TEMPLATE