Mantid
Loading...
Searching...
No Matches
MatrixWorkspace.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2007 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
9#include "MantidAPI/DllConfig.h"
12#include "MantidAPI/ISpectrum.h"
15
16#include <atomic>
17#include <mutex>
18
19namespace Mantid {
20
21namespace Indexing {
22class IndexInfo;
23}
24
25namespace Types {
26namespace Core {
27class DateAndTime;
28}
29} // namespace Types
30
31namespace Geometry {
32class ParameterMap;
33}
34
35const std::vector<std::string> validPlotTypes{"plot", "marker", "histogram", "errorbar_x", "errorbar_y", "errorbar_xy"};
36const std::vector<std::string> validMarkerStyles{"square",
37 "plus (filled)",
38 "point",
39 "tickdown",
40 "triangle_right",
41 "tickup",
42 "hline",
43 "vline",
44 "pentagon",
45 "tri_left",
46 "caretdown",
47 "caretright (centered at base)",
48 "tickright",
49 "caretright",
50 "caretleft",
51 "tickleft",
52 "tri_up",
53 "circle",
54 "pixel",
55 "caretleft (centered at base)",
56 "diamond",
57 "star",
58 "hexagon1",
59 "octagon",
60 "hexagon2",
61 "tri_right",
62 "x (filled)",
63 "thin_diamond",
64 "tri_down",
65 "triangle_left",
66 "plus",
67 "triangle_down",
68 "triangle_up",
69 "x",
70 "caretup",
71 "caretup (centered at base)",
72 "caretdown (centered at base)",
73 "None"};
74
75namespace API {
76class Axis;
77class SpectrumDetectorMapping;
78
80using MantidImage = std::vector<std::vector<double>>;
82using MantidImage_sptr = std::shared_ptr<MantidImage>;
84using MantidImage_const_sptr = std::shared_ptr<const MantidImage>;
85
86//----------------------------------------------------------------------
92class MANTID_API_DLL MatrixWorkspace : public IMDWorkspace, public ExperimentInfo {
93
94private:
95 using ExperimentInfo::toString;
96
97public:
98 // The Workspace Factory create-from-parent method needs direct access to the
99 // axes.
101
102 void initialize(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength);
103 void initialize(const std::size_t &NVectors, const HistogramData::Histogram &histogram);
104 void initialize(const Indexing::IndexInfo &indexInfo, const HistogramData::Histogram &histogram);
105
109
111 MatrixWorkspace_uptr clone() const { return MatrixWorkspace_uptr(doClone()); }
112
114 MatrixWorkspace_uptr cloneEmpty() const { return MatrixWorkspace_uptr(doCloneEmpty()); }
115
116 const Indexing::IndexInfo &indexInfo() const;
117 void setIndexInfo(const Indexing::IndexInfo &indexInfo);
118
119 using IMDWorkspace::toString;
121 const std::string toString() const override;
122
125 std::shared_ptr<const Geometry::IDetector> getDetector(const size_t workspaceIndex) const;
126 double detectorTwoTheta(const Geometry::IDetector &det) const;
127 double detectorSignedTwoTheta(const Geometry::IDetector &det) const;
128
130
131 virtual void updateSpectraUsing(const SpectrumDetectorMapping &map);
134 void rebuildSpectraMapping(const bool includeMonitors = true, const specnum_t specNumOffset = 1);
135
136 // More mapping
137 spec2index_map getSpectrumToWorkspaceIndexMap() const;
138 detid2index_map getDetectorIDToWorkspaceIndexMap(bool throwIfMultipleDets = false,
139 bool ignoreIfNoValidDets = false) const;
140 virtual std::vector<size_t> getDetectorIDToWorkspaceIndexVector(detid_t &offset,
141 bool throwIfMultipleDets = false) const;
142
143 virtual std::vector<size_t> getSpectrumToWorkspaceIndexVector(specnum_t &offset) const;
144 std::vector<size_t> getIndicesFromSpectra(const std::vector<specnum_t> &spectraList) const;
145 size_t getIndexFromSpectrumNumber(const specnum_t specNo) const;
146 std::vector<size_t> getIndicesFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
147 std::vector<specnum_t> getSpectraFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
148
149 bool hasGroupedDetectors() const;
150
152 virtual bool isRaggedWorkspace() const = 0;
153
155 size_t getMemorySize() const override;
156 virtual size_t getMemorySizeForXAxes() const;
157
158 // Section required for iteration
160 virtual std::size_t size() const = 0;
164 virtual std::size_t blocksize() const = 0;
166 virtual std::size_t getNumberBins(const std::size_t &index) const = 0;
168 virtual std::size_t getMaxNumberBins() const = 0;
170 virtual std::size_t getNumberHistograms() const = 0;
171
173 void setTitle(const std::string &) override;
175 const std::string getTitle() const override;
176
178 void setPlotType(const std::string &);
180 std::string getPlotType() const;
181
183 void setMarkerStyle(const std::string &markerType);
185 std::string getMarkerStyle() const;
186
188 void setMarkerSize(const float markerSize);
190 float getMarkerSize() const;
191
192 virtual Types::Core::DateAndTime getFirstPulseTime() const;
193 Types::Core::DateAndTime getLastPulseTime() const;
194
196 std::size_t yIndexOfX(const double xValue, const std::size_t &index = 0,
197 [[maybe_unused]] const double tolerance = 0.0) const;
198
199 //----------------------------------------------------------------------
200 // DATA ACCESSORS
201 //----------------------------------------------------------------------
202
204 virtual ISpectrum &getSpectrum(const size_t index) = 0;
207 virtual const ISpectrum &getSpectrum(const size_t index) const = 0;
208
210 HistogramData::Histogram histogram(const size_t index) const { return getSpectrum(index).histogram(); }
211 template <typename... T> void setHistogram(const size_t index, T &&...data) & {
212 getSpectrum(index).setHistogram(std::forward<T>(data)...);
213 }
214 void convertToCounts(const size_t index) { getSpectrumWithoutInvalidation(index).convertToCounts(); }
215 void convertToFrequencies(const size_t index) { getSpectrumWithoutInvalidation(index).convertToFrequencies(); }
216 HistogramData::BinEdges binEdges(const size_t index) const { return getSpectrum(index).binEdges(); }
217 HistogramData::Points points(const size_t index) const { return getSpectrum(index).points(); }
218 HistogramData::PointStandardDeviations pointStandardDeviations(const size_t index) const {
219 return getSpectrum(index).pointStandardDeviations();
220 }
221 template <typename... T> void setBinEdges(const size_t index, T &&...data) & {
222 getSpectrum(index).setBinEdges(std::forward<T>(data)...);
223 }
224 template <typename... T> void setPoints(const size_t index, T &&...data) & {
225 getSpectrum(index).setPoints(std::forward<T>(data)...);
226 }
227 template <typename... T> void setPointVariances(const size_t index, T &&...data) & {
228 getSpectrumWithoutInvalidation(index).setPointVariances(std::forward<T>(data)...);
229 }
230 template <typename... T> void setPointStandardDeviations(const size_t index, T &&...data) & {
231 getSpectrumWithoutInvalidation(index).setPointStandardDeviations(std::forward<T>(data)...);
232 }
233 HistogramData::Counts counts(const size_t index) const { return getSpectrum(index).counts(); }
234 HistogramData::CountVariances countVariances(const size_t index) const { return getSpectrum(index).countVariances(); }
235 HistogramData::CountStandardDeviations countStandardDeviations(const size_t index) const {
236 return getSpectrum(index).countStandardDeviations();
237 }
238 HistogramData::Frequencies frequencies(const size_t index) const { return getSpectrum(index).frequencies(); }
239 HistogramData::FrequencyVariances frequencyVariances(const size_t index) const {
240 return getSpectrum(index).frequencyVariances();
241 }
242 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations(const size_t index) const {
243 return getSpectrum(index).frequencyStandardDeviations();
244 }
245 template <typename... T> void setCounts(const size_t index, T &&...data) & {
246 getSpectrumWithoutInvalidation(index).setCounts(std::forward<T>(data)...);
247 }
248 template <typename... T> void setCountVariances(const size_t index, T &&...data) & {
249 getSpectrumWithoutInvalidation(index).setCountVariances(std::forward<T>(data)...);
250 }
251 template <typename... T> void setCountStandardDeviations(const size_t index, T &&...data) & {
252 getSpectrumWithoutInvalidation(index).setCountStandardDeviations(std::forward<T>(data)...);
253 }
254 template <typename... T> void setFrequencies(const size_t index, T &&...data) & {
255 getSpectrumWithoutInvalidation(index).setFrequencies(std::forward<T>(data)...);
256 }
257 template <typename... T> void setFrequencyVariances(const size_t index, T &&...data) & {
258 getSpectrumWithoutInvalidation(index).setFrequencyVariances(std::forward<T>(data)...);
259 }
260 template <typename... T> void setFrequencyStandardDeviations(const size_t index, T &&...data) & {
261 getSpectrumWithoutInvalidation(index).setFrequencyStandardDeviations(std::forward<T>(data)...);
262 }
263 const HistogramData::HistogramX &x(const size_t index) const { return getSpectrum(index).x(); }
264 const HistogramData::HistogramY &y(const size_t index) const { return getSpectrum(index).y(); }
265 const HistogramData::HistogramE &e(const size_t index) const { return getSpectrum(index).e(); }
266 const HistogramData::HistogramDx &dx(const size_t index) const { return getSpectrum(index).dx(); }
267 HistogramData::HistogramX &mutableX(const size_t index) & { return getSpectrum(index).mutableX(); }
268 HistogramData::HistogramDx &mutableDx(const size_t index) & {
269 return getSpectrumWithoutInvalidation(index).mutableDx();
270 }
271 HistogramData::HistogramY &mutableY(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableY(); }
272 HistogramData::HistogramE &mutableE(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableE(); }
273 Kernel::cow_ptr<HistogramData::HistogramX> sharedX(const size_t index) const { return getSpectrum(index).sharedX(); }
274 Kernel::cow_ptr<HistogramData::HistogramY> sharedY(const size_t index) const { return getSpectrum(index).sharedY(); }
275 Kernel::cow_ptr<HistogramData::HistogramE> sharedE(const size_t index) const { return getSpectrum(index).sharedE(); }
277 return getSpectrum(index).sharedDx();
278 }
280 getSpectrum(index).setSharedX(x);
281 }
283 getSpectrumWithoutInvalidation(index).setSharedDx(dx);
284 }
286 getSpectrumWithoutInvalidation(index).setSharedY(y);
287 }
289 getSpectrumWithoutInvalidation(index).setSharedE(e);
290 }
291 void resizeHistogram(const size_t index, size_t n) & { getSpectrum(index).resize(n); }
292 size_t histogramSize(const size_t index) const { return getSpectrum(index).size(); }
293 // Methods for getting read-only access to the data.
294 // Just passes through to the virtual dataX/Y/E function (const version)
298 const MantidVec &readX(std::size_t const index) const { return getSpectrum(index).dataX(); }
302 const MantidVec &readY(std::size_t const index) const { return getSpectrum(index).dataY(); }
306 const MantidVec &readE(std::size_t const index) const { return getSpectrum(index).dataE(); }
310 const MantidVec &readDx(size_t const index) const { return getSpectrum(index).dataDx(); }
311
313 virtual MantidVec &dataX(const std::size_t index) { return getSpectrum(index).dataX(); }
315 virtual MantidVec &dataY(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataY(); }
317 virtual MantidVec &dataE(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataE(); }
319 virtual MantidVec &dataDx(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataDx(); }
320
322 virtual const MantidVec &dataX(const std::size_t index) const { return getSpectrum(index).dataX(); }
324 virtual const MantidVec &dataY(const std::size_t index) const { return getSpectrum(index).dataY(); }
326 virtual const MantidVec &dataE(const std::size_t index) const { return getSpectrum(index).dataE(); }
328 virtual const MantidVec &dataDx(const std::size_t index) const { return getSpectrum(index).dataDx(); }
329
330 virtual double getXMin() const;
331 virtual double getXMax() const;
332 virtual void getXMinMax(double &xmin, double &xmax) const;
333
335 virtual Kernel::cow_ptr<HistogramData::HistogramX> refX(const std::size_t index) const {
336 return getSpectrum(index).ptrX();
337 }
338
341 virtual void setX(const std::size_t index, const Kernel::cow_ptr<HistogramData::HistogramX> &X) {
342 getSpectrum(index).setX(X);
343 }
344
347 virtual void setX(const std::size_t index, const std::shared_ptr<HistogramData::HistogramX> &X) {
348 getSpectrum(index).setX(X);
349 }
350
355 virtual bool hasDx(const std::size_t index) const { return getSpectrum(index).hasDx(); }
356
358 virtual void generateHistogram(const std::size_t index, const MantidVec &X, MantidVec &Y, MantidVec &E,
359 bool skipError = false) const = 0;
360
363 virtual void getIntegratedSpectra(std::vector<double> &out, const double minX, const double maxX,
364 const bool entireRange) const;
365
366 std::vector<double> getIntegratedCountsForWorkspaceIndices(const std::vector<size_t> &workspaceIndices,
367 const double minX, const double maxX,
368 const bool entireRange) const;
369
371 std::pair<size_t, double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const;
372
373 //----------------------------------------------------------------------
374
375 int axes() const;
376 virtual Axis *getAxis(const std::size_t &axisIndex) const;
377 void replaceAxis(const std::size_t &axisIndex, std::unique_ptr<Axis> newAxis);
378
381 size_t numberOfAxis() const;
382
384 virtual bool isCommonLogBins() const;
385
388 virtual bool isHistogramData() const;
389
391 virtual bool isCommonBins() const;
392
394 virtual bool isIntegerBins() const;
395
396 const std::string &YUnit() const { return m_YUnit; }
397 void setYUnit(const std::string &newUnit);
398 std::string YUnitLabel(bool useLatex = false, bool plotAsDistribution = false) const;
399 void setYUnitLabel(const std::string &newLabel);
400
402 bool isDistribution() const;
403 void setDistribution(bool newValue);
404
405 // Methods to set and access masked bins
406 void maskBin(const size_t &workspaceIndex, const size_t &binIndex, const double &weight = 1.0);
407 void flagMasked(const size_t &index, const size_t &binIndex, const double &weight = 1.0);
408 bool hasMaskedBins(const size_t &workspaceIndex) const;
409 bool hasAnyMaskedBins() const;
412 using MaskList = std::map<size_t, double>;
413 const MaskList &maskedBins(const size_t &workspaceIndex) const;
414 std::vector<size_t> maskedBinsIndices(const size_t &workspaceIndex) const;
415 void setMaskedBins(const size_t workspaceIndex, const MaskList &maskedBins);
416 void setUnmaskedBins(const size_t workspaceIndex);
417
418 // Methods handling the internal monitor workspace
419 virtual void setMonitorWorkspace(const std::shared_ptr<MatrixWorkspace> &monitorWS);
420 std::shared_ptr<MatrixWorkspace> monitorWorkspace() const;
421
422 void loadInstrumentNexus(Nexus::File *file);
423
424 //=====================================================================================
425 // MD Geometry methods
426 //=====================================================================================
427 size_t getNumDims() const override;
428 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimension(size_t index) const override;
429 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimensionWithId(std::string id) const override;
430 //=====================================================================================
431 // End MD Geometry methods
432 //=====================================================================================
433
434 //=====================================================================================
435 // IMDWorkspace methods
436 //=====================================================================================
437
439 uint64_t getNPoints() const override;
441 uint64_t getNEvents() const override { return this->getNPoints(); }
443 static const std::string xDimensionId;
445 static const std::string yDimensionId;
447 LinePlot getLinePlot(const Mantid::Kernel::VMD &start, const Mantid::Kernel::VMD &end,
448 Mantid::API::MDNormalization normalize) const override;
450 signal_t getSignalAtCoord(const coord_t *coords, const Mantid::API::MDNormalization &normalization) const override;
452 signal_t getSignalWithMaskAtCoord(const coord_t *coords,
453 const Mantid::API::MDNormalization &normalization) const override;
456 std::vector<std::unique_ptr<IMDIterator>>
457 createIterators(size_t suggestedNumCores = 1,
458 Mantid::Geometry::MDImplicitFunction *function = nullptr) const override;
459
461 void setMDMasking(std::unique_ptr<Mantid::Geometry::MDImplicitFunction> maskingRegion) override;
463 void clearMDMasking() override;
464
466 Mantid::Kernel::SpecialCoordinateSystem getSpecialCoordinateSystem() const override;
467
468 // Check if this class has an oriented lattice on a sample object
469 virtual bool hasOrientedLattice() const override;
470
475 virtual std::pair<int64_t, int64_t> findY(double value, const std::pair<int64_t, int64_t> &idx = {0, 0}) const;
476
477 //=====================================================================================
478 // End IMDWorkspace methods
479 //=====================================================================================
480
481 //=====================================================================================
482 // Image methods
483 //=====================================================================================
484
486 std::pair<size_t, size_t> getImageStartEndXIndices(size_t i, double startX, double endX) const;
488 MantidImage_sptr getImageY(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
489 double endX = EMPTY_DBL()) const;
491 MantidImage_sptr getImageE(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
492 double endX = EMPTY_DBL()) const;
494 virtual void setImageY(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
496 virtual void setImageE(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
497
498 //=====================================================================================
499 // End image methods
500 //=====================================================================================
501
502 void invalidateCachedSpectrumNumbers();
503
506 void invalidateCommonBinsFlag() { m_isCommonBinsFlagValid.store(false); }
507
508protected:
510 MatrixWorkspace(const MatrixWorkspace &other);
511
513
516 virtual void init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength) = 0;
517 virtual void init(const HistogramData::Histogram &histogram) = 0;
518
520
521 void updateCachedDetectorGrouping(const size_t index) const override;
522
524 std::vector<std::unique_ptr<Axis>> m_axes;
525
526private:
527 std::size_t binIndexOfValue(Mantid::HistogramData::HistogramX const &xValues, const double xValue,
528 const bool ascendingOrder) const;
529 std::size_t xIndexOfValue(const Mantid::HistogramData::HistogramX &xValues, const double xValue,
530 const double tolerance) const;
531
532 MatrixWorkspace *doClone() const override = 0;
533 MatrixWorkspace *doCloneEmpty() const override = 0;
534
536 MantidImage_sptr getImage(const MantidVec &(MatrixWorkspace::*read)(std::size_t const) const, size_t start,
537 size_t stop, size_t width, size_t indexStart, size_t indexEnd) const;
539 void setImage(MantidVec &(MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start,
540 [[maybe_unused]] bool parallelExecution);
541
542 void setIndexInfoWithoutISpectrumUpdate(const Indexing::IndexInfo &indexInfo);
543 void buildDefaultSpectrumDefinitions();
544 void rebuildDetectorIDGroupings();
545
546 virtual bool isHistogramDataByIndex(std::size_t index = 0) const;
547
548 std::unique_ptr<Indexing::IndexInfo> m_indexInfo;
549
551 bool m_isInitialized{false};
552
554 std::string m_YUnit;
556 std::string m_YUnitLabel;
557
559 mutable std::atomic<bool> m_isCommonBinsFlagValid{false};
561 mutable std::atomic<bool> m_isCommonBinsFlag{false};
563 mutable std::mutex m_isCommonBinsMutex;
564
566 std::map<int64_t, MaskList> m_masks;
567
570 std::shared_ptr<MatrixWorkspace> m_monitorWorkspace;
571
572 mutable std::atomic<bool> m_indexInfoNeedsUpdate{true};
573 mutable std::mutex m_indexInfoMutex;
574
575 // Marker style and size, used for plotting
576 std::string m_marker;
578
579protected:
581 std::string getDimensionIdFromAxis(const int &axisIndex) const;
582};
583
585using MatrixWorkspace_sptr = std::shared_ptr<MatrixWorkspace>;
587using MatrixWorkspace_const_sptr = std::shared_ptr<const MatrixWorkspace>;
588
589} // namespace API
590} // namespace Mantid
double value
The value of the point.
Definition FitMW.cpp:51
std::map< DeltaEMode::Type, std::string > index
double tolerance
Class to represent the axis of a workspace.
Definition Axis.h:30
This class is shared by a few Workspace types and holds information related to a particular experimen...
Basic MD Workspace Abstract Class.
A "spectrum" is an object that holds the data for a particular spectrum, in particular:
Definition ISpectrum.h:38
Base MatrixWorkspace Abstract Class.
HistogramData::CountVariances countVariances(const size_t index) const
void convertToFrequencies(const size_t index)
uint64_t getNEvents() const override
Get the number of points available on the workspace.
MatrixWorkspace_uptr clone() const
Returns a clone of the workspace.
void setFrequencyStandardDeviations(const size_t index, T &&...data) &
MatrixWorkspace & operator=(const MatrixWorkspace &other)=delete
const MantidVec & readE(std::size_t const index) const
Deprecated, use e() instead.
void setSharedDx(const size_t index, const Kernel::cow_ptr< HistogramData::HistogramDx > &dx) &
virtual ISpectrum & getSpectrum(const size_t index)=0
Return the underlying ISpectrum ptr at the given workspace index.
std::vector< std::unique_ptr< Axis > > m_axes
A vector of pointers to the axes for this workspace.
const HistogramData::HistogramE & e(const size_t index) const
virtual const MantidVec & dataX(const std::size_t index) const
Deprecated, use x() instead. Returns the x data const.
void setSharedX(const size_t index, const Kernel::cow_ptr< HistogramData::HistogramX > &x) &
HistogramData::CountStandardDeviations countStandardDeviations(const size_t index) const
const MantidVec & readDx(size_t const index) const
Deprecated, use dx() instead.
virtual MantidVec & dataDx(const std::size_t index)
Deprecated, use mutableDx() instead. Returns the x error data.
HistogramData::BinEdges binEdges(const size_t index) const
std::unique_ptr< Indexing::IndexInfo > m_indexInfo
void setPoints(const size_t index, T &&...data) &
static const std::string xDimensionId
Dimension id for x-dimension.
HistogramData::Points points(const size_t index) const
virtual const MantidVec & dataY(const std::size_t index) const
Deprecated, use y() instead. Returns the y data const.
HistogramData::HistogramX & mutableX(const size_t index) &
std::string m_YUnit
The unit for the data values (e.g. Counts)
const HistogramData::HistogramDx & dx(const size_t index) const
virtual std::size_t blocksize() const =0
Returns the size of each block of data returned by the dataY accessors.
MatrixWorkspace_uptr cloneEmpty() const
Returns a default-initialized clone of the workspace.
void resizeHistogram(const size_t index, size_t n) &
virtual const ISpectrum & getSpectrum(const size_t index) const =0
Return the underlying ISpectrum ptr (const version) at the given workspace index.
std::shared_ptr< MatrixWorkspace > m_monitorWorkspace
A workspace holding monitor data relating to the main data in the containing workspace (null if none)...
virtual MantidVec & dataX(const std::size_t index)
Deprecated, use mutableX() instead. Returns the x data.
virtual std::size_t getNumberHistograms() const =0
Returns the number of histograms in the workspace.
void setCounts(const size_t index, T &&...data) &
HistogramData::FrequencyStandardDeviations frequencyStandardDeviations(const size_t index) const
virtual const MantidVec & dataDx(const std::size_t index) const
Deprecated, use dx() instead. Returns the error const.
void setHistogram(const size_t index, T &&...data) &
void setSharedE(const size_t index, const Kernel::cow_ptr< HistogramData::HistogramE > &e) &
Kernel::cow_ptr< HistogramData::HistogramY > sharedY(const size_t index) const
std::map< size_t, double > MaskList
Masked bins for each spectrum are stored as a set of pairs containing <bin index, weight>
std::mutex m_isCommonBinsMutex
A mutex protecting the update of m_isCommonBinsFlag.
MatrixWorkspace * doCloneEmpty() const override=0
Virtual cloneEmpty method.
const HistogramData::HistogramX & x(const size_t index) const
void setSharedY(const size_t index, const Kernel::cow_ptr< HistogramData::HistogramY > &y) &
~MatrixWorkspace() override
Delete.
std::map< int64_t, MaskList > m_masks
The set of masked bins in a map keyed on workspace index.
virtual MantidVec & dataE(const std::size_t index)
Deprecated, use mutableE() instead. Returns the error data.
size_t histogramSize(const size_t index) const
virtual Kernel::cow_ptr< HistogramData::HistogramX > refX(const std::size_t index) const
Deprecated, use sharedX() instead. Returns a pointer to the x data.
void setFrequencyVariances(const size_t index, T &&...data) &
Kernel::cow_ptr< HistogramData::HistogramX > sharedX(const size_t index) const
HistogramData::Counts counts(const size_t index) const
virtual bool isRaggedWorkspace() const =0
Returns true if the workspace is ragged (has differently sized spectra).
void invalidateCommonBinsFlag()
Invalidates the commons bins flag.
void convertToCounts(const size_t index)
HistogramData::Histogram histogram(const size_t index) const
Returns the Histogram at the given workspace index.
void setPointVariances(const size_t index, T &&...data) &
Kernel::cow_ptr< HistogramData::HistogramDx > sharedDx(const size_t index) const
void setCountStandardDeviations(const size_t index, T &&...data) &
virtual bool hasDx(const std::size_t index) const
Probes if DX (X Error) values were set on a particular spectrum.
virtual std::size_t getMaxNumberBins() const =0
Returns the maximum number of bins in a workspace (works on ragged data).
const std::string & YUnit() const
const MantidVec & readY(std::size_t const index) const
Deprecated, use y() instead.
HistogramData::PointStandardDeviations pointStandardDeviations(const size_t index) const
HistogramData::FrequencyVariances frequencyVariances(const size_t index) const
virtual std::size_t getNumberBins(const std::size_t &index) const =0
Returns the number of bins for a given histogram index.
HistogramData::HistogramE & mutableE(const size_t index) &
static const std::string yDimensionId
Dimensin id for y-dimension.
virtual void setX(const std::size_t index, const std::shared_ptr< HistogramData::HistogramX > &X)
Deprecated, use setSharedX() instead.
HistogramData::Frequencies frequencies(const size_t index) const
void setPointStandardDeviations(const size_t index, T &&...data) &
Kernel::cow_ptr< HistogramData::HistogramE > sharedE(const size_t index) const
HistogramData::HistogramDx & mutableDx(const size_t index) &
const MantidVec & readX(std::size_t const index) const
Deprecated, use x() instead.
virtual void generateHistogram(const std::size_t index, const MantidVec &X, MantidVec &Y, MantidVec &E, bool skipError=false) const =0
Generate the histogram or rebin the existing histogram.
virtual std::size_t size() const =0
Returns the number of single indexable items in the workspace.
virtual void init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength)=0
Initialises the workspace.
MatrixWorkspace * doClone() const override=0
Virtual clone method. Not implemented to force implementation in children.
virtual MantidVec & dataY(const std::size_t index)
Deprecated, use mutableY() instead. Returns the y data.
HistogramData::HistogramY & mutableY(const size_t index) &
void loadInstrumentNexus(Nexus::File *file)
virtual ISpectrum & getSpectrumWithoutInvalidation(const size_t index)=0
void setFrequencies(const size_t index, T &&...data) &
virtual const MantidVec & dataE(const std::size_t index) const
Deprecated, use e() instead. Returns the error const.
virtual void init(const HistogramData::Histogram &histogram)=0
const HistogramData::HistogramY & y(const size_t index) const
std::string m_YUnitLabel
A text label for use when plotting spectra.
void setBinEdges(const size_t index, T &&...data) &
void setCountVariances(const size_t index, T &&...data) &
virtual void setX(const std::size_t index, const Kernel::cow_ptr< HistogramData::HistogramX > &X)
Deprecated, use setSharedX() instead.
A minimal class to hold the mapping between the spectrum number and its related detector ID numbers f...
The WorkspaceFactory class is in charge of the creation of all types of workspaces.
Interface class for detector objects.
Definition IDetector.h:43
An "ImplicitFunction" defining a hyper-cuboid-shaped region in N dimensions.
Implements a copy on write data template.
Definition cow_ptr.h:41
std::shared_ptr< const MantidImage > MantidImage_const_sptr
shared pointer to const MantidImage
std::unique_ptr< MatrixWorkspace > MatrixWorkspace_uptr
unique pointer to Mantid::API::MatrixWorkspace
std::vector< std::vector< double > > MantidImage
typedef for the image type
std::shared_ptr< const MatrixWorkspace > MatrixWorkspace_const_sptr
shared pointer to the matrix workspace base class (const version)
MDNormalization
Enum describing different ways to normalize the signal in a MDWorkspace.
Definition IMDIterator.h:25
std::shared_ptr< MantidImage > MantidImage_sptr
shared pointer to MantidImage
std::shared_ptr< MatrixWorkspace > MatrixWorkspace_sptr
shared pointer to the matrix workspace base class
std::string toString(const T &value)
Convert values to strings.
SpecialCoordinateSystem
Special coordinate systems for Q3D.
Helper class which provides the Collimation Length for SANS instruments.
std::unordered_map< specnum_t, size_t > spec2index_map
Map with key = spectrum number, value = workspace index.
float coord_t
Typedef for the data type to use for coordinate axes in MD objects such as MDBox, MDEventWorkspace,...
Definition MDTypes.h:27
std::unordered_map< detid_t, size_t > detid2index_map
Map with key = detector ID, value = workspace index.
const std::vector< std::string > validPlotTypes
double signal_t
Typedef for the signal recorded in a MDBox, etc.
Definition MDTypes.h:36
std::vector< double > MantidVec
typedef for the data storage used in Mantid matrix workspaces
Definition cow_ptr.h:172
int32_t specnum_t
Typedef for a spectrum Number.
Definition IDTypes.h:14
constexpr double EMPTY_DBL() noexcept
Returns what we consider an "empty" double within a property.
Definition EmptyValues.h:42
const std::vector< std::string > validMarkerStyles
STL namespace.
Holds X, Y, E for a line plot.