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 <map>
18#include <mutex>
19
20namespace Mantid {
21
22namespace Indexing {
23class IndexInfo;
24}
25
26namespace Types {
27namespace Core {
28class DateAndTime;
29}
30} // namespace Types
31
32namespace Geometry {
33class ParameterMap;
34}
35
36const std::vector<std::string> validPlotTypes{"plot", "marker", "histogram", "errorbar_x", "errorbar_y", "errorbar_xy"};
37const std::vector<std::string> validMarkerStyles{"square",
38 "plus (filled)",
39 "point",
40 "tickdown",
41 "triangle_right",
42 "tickup",
43 "hline",
44 "vline",
45 "pentagon",
46 "tri_left",
47 "caretdown",
48 "caretright (centered at base)",
49 "tickright",
50 "caretright",
51 "caretleft",
52 "tickleft",
53 "tri_up",
54 "circle",
55 "pixel",
56 "caretleft (centered at base)",
57 "diamond",
58 "star",
59 "hexagon1",
60 "octagon",
61 "hexagon2",
62 "tri_right",
63 "x (filled)",
64 "thin_diamond",
65 "tri_down",
66 "triangle_left",
67 "plus",
68 "triangle_down",
69 "triangle_up",
70 "x",
71 "caretup",
72 "caretup (centered at base)",
73 "caretdown (centered at base)",
74 "None"};
75
76namespace API {
77class Axis;
78class SpectrumDetectorMapping;
79
81using MantidImage = std::vector<std::vector<double>>;
83using MantidImage_sptr = std::shared_ptr<MantidImage>;
85using MantidImage_const_sptr = std::shared_ptr<const MantidImage>;
86
87//----------------------------------------------------------------------
93class MANTID_API_DLL MatrixWorkspace : public IMDWorkspace, public ExperimentInfo {
94
95private:
96 using ExperimentInfo::toString;
97
98public:
99 // The Workspace Factory create-from-parent method needs direct access to the
100 // axes.
102
103 void initialize(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength);
104 void initialize(const std::size_t &NVectors, const HistogramData::Histogram &histogram);
105 void initialize(const Indexing::IndexInfo &indexInfo, const HistogramData::Histogram &histogram);
106
110
112 MatrixWorkspace_uptr clone() const { return MatrixWorkspace_uptr(doClone()); }
113
115 MatrixWorkspace_uptr cloneEmpty() const { return MatrixWorkspace_uptr(doCloneEmpty()); }
116
117 const Indexing::IndexInfo &indexInfo() const;
118 void setIndexInfo(const Indexing::IndexInfo &indexInfo);
119
120 using IMDWorkspace::toString;
122 const std::string toString() const override;
123
126 std::shared_ptr<const Geometry::IDetector> getDetector(const size_t workspaceIndex) const;
127 double detectorTwoTheta(const Geometry::IDetector &det) const;
128 double detectorSignedTwoTheta(const Geometry::IDetector &det) const;
129
131
132 virtual void updateSpectraUsing(const SpectrumDetectorMapping &map);
135 void rebuildSpectraMapping(const bool includeMonitors = true, const specnum_t specNumOffset = 1);
136
137 // More mapping
138 spec2index_map getSpectrumToWorkspaceIndexMap() const;
139 detid2index_map getDetectorIDToWorkspaceIndexMap(bool throwIfMultipleDets = false,
140 bool ignoreIfNoValidDets = false) const;
141 virtual std::vector<size_t> getDetectorIDToWorkspaceIndexVector(detid_t &offset,
142 bool throwIfMultipleDets = false) const;
143
144 virtual std::vector<size_t> getSpectrumToWorkspaceIndexVector(specnum_t &offset) const;
145 std::vector<size_t> getIndicesFromSpectra(const std::vector<specnum_t> &spectraList) const;
146 size_t getIndexFromSpectrumNumber(const specnum_t specNo) const;
147 std::vector<size_t> getIndicesFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
148 std::vector<specnum_t> getSpectraFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
149
150 bool hasGroupedDetectors() const;
151
153 virtual bool isRaggedWorkspace() const = 0;
154
156 size_t getMemorySize() const override;
157 virtual size_t getMemorySizeForXAxes() const;
158
159 // Section required for iteration
161 virtual std::size_t size() const = 0;
165 virtual std::size_t blocksize() const = 0;
167 virtual std::size_t getNumberBins(const std::size_t &index) const = 0;
169 virtual std::size_t getMaxNumberBins() const = 0;
171 virtual std::size_t getNumberHistograms() const = 0;
172
174 void setTitle(const std::string &) override;
176 const std::string getTitle() const override;
177
179 void setPlotType(const std::string &);
181 std::string getPlotType() const;
182
184 void setMarkerStyle(const std::string &markerType);
186 std::string getMarkerStyle() const;
187
189 void setMarkerSize(const float markerSize);
191 float getMarkerSize() const;
192
193 virtual Types::Core::DateAndTime getFirstPulseTime() const;
194 Types::Core::DateAndTime getLastPulseTime() const;
195
197 std::size_t yIndexOfX(const double xValue, const std::size_t &index = 0,
198 [[maybe_unused]] const double tolerance = 0.0) const;
199
200 //----------------------------------------------------------------------
201 // DATA ACCESSORS
202 //----------------------------------------------------------------------
203
205 virtual ISpectrum &getSpectrum(const size_t index) = 0;
208 virtual const ISpectrum &getSpectrum(const size_t index) const = 0;
209
211 HistogramData::Histogram histogram(const size_t index) const { return getSpectrum(index).histogram(); }
212 template <typename... T> void setHistogram(const size_t index, T &&...data) & {
213 getSpectrum(index).setHistogram(std::forward<T>(data)...);
214 }
215 void convertToCounts(const size_t index) { getSpectrumWithoutInvalidation(index).convertToCounts(); }
216 void convertToFrequencies(const size_t index) { getSpectrumWithoutInvalidation(index).convertToFrequencies(); }
217 HistogramData::BinEdges binEdges(const size_t index) const { return getSpectrum(index).binEdges(); }
218 HistogramData::Points points(const size_t index) const { return getSpectrum(index).points(); }
219 HistogramData::PointStandardDeviations pointStandardDeviations(const size_t index) const {
220 return getSpectrum(index).pointStandardDeviations();
221 }
222 template <typename... T> void setBinEdges(const size_t index, T &&...data) & {
223 getSpectrum(index).setBinEdges(std::forward<T>(data)...);
224 }
225 template <typename... T> void setPoints(const size_t index, T &&...data) & {
226 getSpectrum(index).setPoints(std::forward<T>(data)...);
227 }
228 template <typename... T> void setPointVariances(const size_t index, T &&...data) & {
229 getSpectrumWithoutInvalidation(index).setPointVariances(std::forward<T>(data)...);
230 }
231 template <typename... T> void setPointStandardDeviations(const size_t index, T &&...data) & {
232 getSpectrumWithoutInvalidation(index).setPointStandardDeviations(std::forward<T>(data)...);
233 }
234 HistogramData::Counts counts(const size_t index) const { return getSpectrum(index).counts(); }
235 HistogramData::CountVariances countVariances(const size_t index) const { return getSpectrum(index).countVariances(); }
236 HistogramData::CountStandardDeviations countStandardDeviations(const size_t index) const {
237 return getSpectrum(index).countStandardDeviations();
238 }
239 HistogramData::Frequencies frequencies(const size_t index) const { return getSpectrum(index).frequencies(); }
240 HistogramData::FrequencyVariances frequencyVariances(const size_t index) const {
241 return getSpectrum(index).frequencyVariances();
242 }
243 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations(const size_t index) const {
244 return getSpectrum(index).frequencyStandardDeviations();
245 }
246 template <typename... T> void setCounts(const size_t index, T &&...data) & {
247 getSpectrumWithoutInvalidation(index).setCounts(std::forward<T>(data)...);
248 }
249 template <typename... T> void setCountVariances(const size_t index, T &&...data) & {
250 getSpectrumWithoutInvalidation(index).setCountVariances(std::forward<T>(data)...);
251 }
252 template <typename... T> void setCountStandardDeviations(const size_t index, T &&...data) & {
253 getSpectrumWithoutInvalidation(index).setCountStandardDeviations(std::forward<T>(data)...);
254 }
255 template <typename... T> void setFrequencies(const size_t index, T &&...data) & {
256 getSpectrumWithoutInvalidation(index).setFrequencies(std::forward<T>(data)...);
257 }
258 template <typename... T> void setFrequencyVariances(const size_t index, T &&...data) & {
259 getSpectrumWithoutInvalidation(index).setFrequencyVariances(std::forward<T>(data)...);
260 }
261 template <typename... T> void setFrequencyStandardDeviations(const size_t index, T &&...data) & {
262 getSpectrumWithoutInvalidation(index).setFrequencyStandardDeviations(std::forward<T>(data)...);
263 }
264 const HistogramData::HistogramX &x(const size_t index) const { return getSpectrum(index).x(); }
265 const HistogramData::HistogramY &y(const size_t index) const { return getSpectrum(index).y(); }
266 const HistogramData::HistogramE &e(const size_t index) const { return getSpectrum(index).e(); }
267 const HistogramData::HistogramDx &dx(const size_t index) const { return getSpectrum(index).dx(); }
268 HistogramData::HistogramX &mutableX(const size_t index) & { return getSpectrum(index).mutableX(); }
269 HistogramData::HistogramDx &mutableDx(const size_t index) & {
270 return getSpectrumWithoutInvalidation(index).mutableDx();
271 }
272 HistogramData::HistogramY &mutableY(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableY(); }
273 HistogramData::HistogramE &mutableE(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableE(); }
274 Kernel::cow_ptr<HistogramData::HistogramX> sharedX(const size_t index) const { return getSpectrum(index).sharedX(); }
275 Kernel::cow_ptr<HistogramData::HistogramY> sharedY(const size_t index) const { return getSpectrum(index).sharedY(); }
276 Kernel::cow_ptr<HistogramData::HistogramE> sharedE(const size_t index) const { return getSpectrum(index).sharedE(); }
278 return getSpectrum(index).sharedDx();
279 }
281 getSpectrum(index).setSharedX(x);
282 }
284 getSpectrumWithoutInvalidation(index).setSharedDx(dx);
285 }
287 getSpectrumWithoutInvalidation(index).setSharedY(y);
288 }
290 getSpectrumWithoutInvalidation(index).setSharedE(e);
291 }
292 void resizeHistogram(const size_t index, size_t n) & { getSpectrum(index).resize(n); }
293 size_t histogramSize(const size_t index) const { return getSpectrum(index).size(); }
294 // Methods for getting read-only access to the data.
295 // Just passes through to the virtual dataX/Y/E function (const version)
299 const MantidVec &readX(std::size_t const index) const { return getSpectrum(index).dataX(); }
303 const MantidVec &readY(std::size_t const index) const { return getSpectrum(index).dataY(); }
307 const MantidVec &readE(std::size_t const index) const { return getSpectrum(index).dataE(); }
311 const MantidVec &readDx(size_t const index) const { return getSpectrum(index).dataDx(); }
312
314 virtual MantidVec &dataX(const std::size_t index) { return getSpectrum(index).dataX(); }
316 virtual MantidVec &dataY(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataY(); }
318 virtual MantidVec &dataE(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataE(); }
320 virtual MantidVec &dataDx(const std::size_t index) { return getSpectrumWithoutInvalidation(index).dataDx(); }
321
323 virtual const MantidVec &dataX(const std::size_t index) const { return getSpectrum(index).dataX(); }
325 virtual const MantidVec &dataY(const std::size_t index) const { return getSpectrum(index).dataY(); }
327 virtual const MantidVec &dataE(const std::size_t index) const { return getSpectrum(index).dataE(); }
329 virtual const MantidVec &dataDx(const std::size_t index) const { return getSpectrum(index).dataDx(); }
330
331 virtual double getXMin() const;
332 virtual double getXMax() const;
333 virtual void getXMinMax(double &xmin, double &xmax) const;
334
336 virtual Kernel::cow_ptr<HistogramData::HistogramX> refX(const std::size_t index) const {
337 return getSpectrum(index).ptrX();
338 }
339
342 virtual void setX(const std::size_t index, const Kernel::cow_ptr<HistogramData::HistogramX> &X) {
343 getSpectrum(index).setX(X);
344 }
345
348 virtual void setX(const std::size_t index, const std::shared_ptr<HistogramData::HistogramX> &X) {
349 getSpectrum(index).setX(X);
350 }
351
356 virtual bool hasDx(const std::size_t index) const { return getSpectrum(index).hasDx(); }
357
359 virtual void generateHistogram(const std::size_t index, const MantidVec &X, MantidVec &Y, MantidVec &E,
360 bool skipError = false) const = 0;
361
364 virtual void getIntegratedSpectra(std::vector<double> &out, const double minX, const double maxX,
365 const bool entireRange) const;
366
367 std::vector<double> getIntegratedCountsForWorkspaceIndices(const std::vector<size_t> &workspaceIndices,
368 const double minX, const double maxX,
369 const bool entireRange) const;
370
372 std::pair<size_t, double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const;
373
374 //----------------------------------------------------------------------
375
376 int axes() const;
377 virtual Axis *getAxis(const std::size_t &axisIndex) const;
378 void replaceAxis(const std::size_t &axisIndex, std::unique_ptr<Axis> newAxis);
379
382 size_t numberOfAxis() const;
383
385 virtual bool isCommonLogBins() const;
386
389 virtual bool isHistogramData() const;
390
392 virtual bool isCommonBins() const;
393
395 virtual bool isIntegerBins() const;
396
397 const std::string &YUnit() const { return m_YUnit; }
398 void setYUnit(const std::string &newUnit);
399 std::string YUnitLabel(bool useLatex = false, bool plotAsDistribution = false) const;
400 void setYUnitLabel(const std::string &newLabel);
401
403 bool isDistribution() const;
404 void setDistribution(bool newValue);
405
406 // Methods to set and access masked bins
407 void maskBin(const size_t &workspaceIndex, const size_t &binIndex, const double &weight = 1.0);
408 void flagMasked(const size_t &index, const size_t &binIndex, const double &weight = 1.0);
409 bool hasMaskedBins(const size_t &workspaceIndex) const;
410 bool hasAnyMaskedBins() const;
413 using MaskList = std::map<size_t, double>;
414 const MaskList &maskedBins(const size_t &workspaceIndex) const;
415 std::vector<size_t> maskedBinsIndices(const size_t &workspaceIndex) const;
416 void setMaskedBins(const size_t workspaceIndex, const MaskList &maskedBins);
417 void setUnmaskedBins(const size_t workspaceIndex);
418
419 // Methods handling the internal monitor workspace
420 virtual void setMonitorWorkspace(const std::shared_ptr<MatrixWorkspace> &monitorWS);
421 std::shared_ptr<MatrixWorkspace> monitorWorkspace() const;
422
423 void loadInstrumentNexus(Nexus::File *file);
424
425 //=====================================================================================
426 // MD Geometry methods
427 //=====================================================================================
428 size_t getNumDims() const override;
429 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimension(size_t index) const override;
430 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimensionWithId(std::string id) const override;
431 //=====================================================================================
432 // End MD Geometry methods
433 //=====================================================================================
434
435 //=====================================================================================
436 // IMDWorkspace methods
437 //=====================================================================================
438
440 uint64_t getNPoints() const override;
442 uint64_t getNEvents() const override { return this->getNPoints(); }
444 static const std::string xDimensionId;
446 static const std::string yDimensionId;
448 LinePlot getLinePlot(const Mantid::Kernel::VMD &start, const Mantid::Kernel::VMD &end,
449 Mantid::API::MDNormalization normalize) const override;
451 signal_t getSignalAtCoord(const coord_t *coords, const Mantid::API::MDNormalization &normalization) const override;
453 signal_t getSignalWithMaskAtCoord(const coord_t *coords,
454 const Mantid::API::MDNormalization &normalization) const override;
457 std::vector<std::unique_ptr<IMDIterator>>
458 createIterators(size_t suggestedNumCores = 1,
459 Mantid::Geometry::MDImplicitFunction *function = nullptr) const override;
460
462 void setMDMasking(std::unique_ptr<Mantid::Geometry::MDImplicitFunction> maskingRegion) override;
464 void clearMDMasking() override;
465
467 Mantid::Kernel::SpecialCoordinateSystem getSpecialCoordinateSystem() const override;
468
469 // Check if this class has an oriented lattice on a sample object
470 virtual bool hasOrientedLattice() const override;
471
476 virtual std::pair<int64_t, int64_t> findY(double value, const std::pair<int64_t, int64_t> &idx = {0, 0}) const;
477
478 //=====================================================================================
479 // End IMDWorkspace methods
480 //=====================================================================================
481
482 //=====================================================================================
483 // Image methods
484 //=====================================================================================
485
487 std::pair<size_t, size_t> getImageStartEndXIndices(size_t i, double startX, double endX) const;
489 MantidImage_sptr getImageY(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
490 double endX = EMPTY_DBL()) const;
492 MantidImage_sptr getImageE(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
493 double endX = EMPTY_DBL()) const;
495 virtual void setImageY(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
497 virtual void setImageE(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
498
499 //=====================================================================================
500 // End image methods
501 //=====================================================================================
502
503 void invalidateCachedSpectrumNumbers();
504
507 void invalidateCommonBinsFlag() { m_isCommonBinsFlagValid.store(false); }
508
509protected:
511 MatrixWorkspace(const MatrixWorkspace &other);
512
514
517 virtual void init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength) = 0;
518 virtual void init(const HistogramData::Histogram &histogram) = 0;
519
521
522 void updateCachedDetectorGrouping(const size_t index) const override;
523
525 std::vector<std::unique_ptr<Axis>> m_axes;
526
527private:
528 std::size_t binIndexOfValue(Mantid::HistogramData::HistogramX const &xValues, const double xValue,
529 const bool ascendingOrder) const;
530 std::size_t xIndexOfValue(const Mantid::HistogramData::HistogramX &xValues, const double xValue,
531 const double tolerance) const;
532
533 MatrixWorkspace *doClone() const override = 0;
534 MatrixWorkspace *doCloneEmpty() const override = 0;
535
537 MantidImage_sptr getImage(const MantidVec &(MatrixWorkspace::*read)(std::size_t const) const, size_t start,
538 size_t stop, size_t width, size_t indexStart, size_t indexEnd) const;
540 void setImage(MantidVec &(MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start,
541 [[maybe_unused]] bool parallelExecution);
542
543 void setIndexInfoWithoutISpectrumUpdate(const Indexing::IndexInfo &indexInfo);
544 void buildDefaultSpectrumDefinitions();
545 void rebuildDetectorIDGroupings();
546
547 virtual bool isHistogramDataByIndex(std::size_t index = 0) const;
548
549 std::unique_ptr<Indexing::IndexInfo> m_indexInfo;
550
552 bool m_isInitialized{false};
553
555 std::string m_YUnit;
557 std::string m_YUnitLabel;
558
560 mutable std::atomic<bool> m_isCommonBinsFlagValid{false};
562 mutable std::atomic<bool> m_isCommonBinsFlag{false};
564 mutable std::mutex m_isCommonBinsMutex;
565
567 std::map<int64_t, MaskList> m_masks;
568
571 std::shared_ptr<MatrixWorkspace> m_monitorWorkspace;
572
573 mutable std::atomic<bool> m_indexInfoNeedsUpdate{true};
574 mutable std::mutex m_indexInfoMutex;
575
576 // Marker style and size, used for plotting
577 std::string m_marker;
579
580protected:
582 std::string getDimensionIdFromAxis(const int &axisIndex) const;
583};
584
586using MatrixWorkspace_sptr = std::shared_ptr<MatrixWorkspace>;
588using MatrixWorkspace_const_sptr = std::shared_ptr<const MatrixWorkspace>;
589
590} // namespace API
591} // 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.