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"
16
17#include <atomic>
18#include <map>
19#include <mutex>
20#include <span>
21
22namespace Mantid {
23
24namespace Indexing {
25class IndexInfo;
26}
27
28namespace Types {
29namespace Core {
30class DateAndTime;
31}
32} // namespace Types
33
34namespace Geometry {
35class ParameterMap;
36}
37
38const std::vector<std::string> validPlotTypes{"plot", "marker", "histogram", "errorbar_x", "errorbar_y", "errorbar_xy"};
39const std::vector<std::string> validMarkerStyles{"square",
40 "plus (filled)",
41 "point",
42 "tickdown",
43 "triangle_right",
44 "tickup",
45 "hline",
46 "vline",
47 "pentagon",
48 "tri_left",
49 "caretdown",
50 "caretright (centered at base)",
51 "tickright",
52 "caretright",
53 "caretleft",
54 "tickleft",
55 "tri_up",
56 "circle",
57 "pixel",
58 "caretleft (centered at base)",
59 "diamond",
60 "star",
61 "hexagon1",
62 "octagon",
63 "hexagon2",
64 "tri_right",
65 "x (filled)",
66 "thin_diamond",
67 "tri_down",
68 "triangle_left",
69 "plus",
70 "triangle_down",
71 "triangle_up",
72 "x",
73 "caretup",
74 "caretup (centered at base)",
75 "caretdown (centered at base)",
76 "None"};
77
78namespace API {
79class Axis;
80class SpectrumDetectorMapping;
81
83using MantidImage = std::vector<std::vector<double>>;
85using MantidImage_sptr = std::shared_ptr<MantidImage>;
87using MantidImage_const_sptr = std::shared_ptr<const MantidImage>;
88
89//----------------------------------------------------------------------
95class MANTID_API_DLL MatrixWorkspace : public IMDWorkspace, public ExperimentInfo {
96
97private:
98 using ExperimentInfo::toString;
99
100public:
101 // The Workspace Factory create-from-parent method needs direct access to the
102 // axes.
104
105 void initialize(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength);
106 void initialize(const std::size_t &NVectors, const HistogramData::Histogram &histogram);
107 void initialize(const Indexing::IndexInfo &indexInfo, const HistogramData::Histogram &histogram);
108
112
114 MatrixWorkspace_uptr clone() const { return MatrixWorkspace_uptr(doClone()); }
115
117 MatrixWorkspace_uptr cloneEmpty() const { return MatrixWorkspace_uptr(doCloneEmpty()); }
118
119 const Indexing::IndexInfo &indexInfo() const;
120 void setIndexInfo(const Indexing::IndexInfo &indexInfo);
121
122 using IMDWorkspace::toString;
124 const std::string toString() const override;
125
128 std::shared_ptr<const Geometry::IDetector> getDetector(const size_t workspaceIndex) const;
129 double detectorTwoTheta(const Geometry::IDetector &det) const;
130 double detectorSignedTwoTheta(const Geometry::IDetector &det) const;
131
133
134 virtual void updateSpectraUsing(const SpectrumDetectorMapping &map);
137 void rebuildSpectraMapping(const bool includeMonitors = true, const specnum_t specNumOffset = 1);
138
139 // More mapping
140 spec2index_map getSpectrumToWorkspaceIndexMap() const;
141 detid2index_map getDetectorIDToWorkspaceIndexMap(bool throwIfMultipleDets = false,
142 bool ignoreIfNoValidDets = false) const;
143 virtual std::vector<size_t> getDetectorIDToWorkspaceIndexVector(detid_t &offset,
144 bool throwIfMultipleDets = false) const;
145
146 virtual std::vector<size_t> getSpectrumToWorkspaceIndexVector(specnum_t &offset) const;
147 std::vector<size_t> getIndicesFromSpectra(const std::vector<specnum_t> &spectraList) const;
148 size_t getIndexFromSpectrumNumber(const specnum_t specNo) const;
149 std::vector<size_t> getIndicesFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
150 std::vector<specnum_t> getSpectraFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
151
152 bool hasGroupedDetectors() const;
153
155 virtual bool isRaggedWorkspace() const = 0;
156
158 size_t getMemorySize() const override;
159 virtual size_t getMemorySizeForXAxes() const;
160
161 // Section required for iteration
163 virtual std::size_t size() const = 0;
167 virtual std::size_t blocksize() const = 0;
169 virtual std::size_t getNumberBins(const std::size_t &index) const = 0;
171 virtual std::size_t getMaxNumberBins() const = 0;
173 virtual std::size_t getNumberHistograms() const = 0;
174
176 void setTitle(const std::string &) override;
178 const std::string getTitle() const override;
179
181 void setPlotType(const std::string &);
183 std::string getPlotType() const;
184
186 void setMarkerStyle(const std::string &markerType);
188 std::string getMarkerStyle() const;
189
191 void setMarkerSize(const float markerSize);
193 float getMarkerSize() const;
194
195 virtual Types::Core::DateAndTime getFirstPulseTime() const;
196 Types::Core::DateAndTime getLastPulseTime() const;
197
199 std::size_t yIndexOfX(const double xValue, const std::size_t &index = 0,
200 [[maybe_unused]] const double tolerance = 0.0) const;
201
202 //----------------------------------------------------------------------
203 // DATA ACCESSORS
204 //----------------------------------------------------------------------
205
207 virtual ISpectrum &getSpectrum(const size_t index) = 0;
210 virtual const ISpectrum &getSpectrum(const size_t index) const = 0;
211
213 HistogramData::Histogram histogram(const size_t index) const { return getSpectrum(index).histogram(); }
214 template <typename... T> void setHistogram(const size_t index, T &&...data) & {
215 getSpectrum(index).setHistogram(std::forward<T>(data)...);
216 }
217 void convertToCounts(const size_t index) { getSpectrumWithoutInvalidation(index).convertToCounts(); }
218 void convertToFrequencies(const size_t index) { getSpectrumWithoutInvalidation(index).convertToFrequencies(); }
219 HistogramData::BinEdges binEdges(const size_t index) const { return getSpectrum(index).binEdges(); }
220 HistogramData::Points points(const size_t index) const { return getSpectrum(index).points(); }
221 HistogramData::PointStandardDeviations pointStandardDeviations(const size_t index) const {
222 return getSpectrum(index).pointStandardDeviations();
223 }
224 template <typename... T> void setBinEdges(const size_t index, T &&...data) & {
225 getSpectrum(index).setBinEdges(std::forward<T>(data)...);
226 }
227 template <typename... T> void setPoints(const size_t index, T &&...data) & {
228 getSpectrum(index).setPoints(std::forward<T>(data)...);
229 }
230 template <typename... T> void setPointVariances(const size_t index, T &&...data) & {
231 getSpectrumWithoutInvalidation(index).setPointVariances(std::forward<T>(data)...);
232 }
233 template <typename... T> void setPointStandardDeviations(const size_t index, T &&...data) & {
234 getSpectrumWithoutInvalidation(index).setPointStandardDeviations(std::forward<T>(data)...);
235 }
236 HistogramData::Counts counts(const size_t index) const { return getSpectrum(index).counts(); }
237 HistogramData::CountVariances countVariances(const size_t index) const { return getSpectrum(index).countVariances(); }
238 HistogramData::CountStandardDeviations countStandardDeviations(const size_t index) const {
239 return getSpectrum(index).countStandardDeviations();
240 }
241 HistogramData::Frequencies frequencies(const size_t index) const { return getSpectrum(index).frequencies(); }
242 HistogramData::FrequencyVariances frequencyVariances(const size_t index) const {
243 return getSpectrum(index).frequencyVariances();
244 }
245 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations(const size_t index) const {
246 return getSpectrum(index).frequencyStandardDeviations();
247 }
248 template <typename... T> void setCounts(const size_t index, T &&...data) & {
249 getSpectrumWithoutInvalidation(index).setCounts(std::forward<T>(data)...);
250 }
251 template <typename... T> void setCountVariances(const size_t index, T &&...data) & {
252 getSpectrumWithoutInvalidation(index).setCountVariances(std::forward<T>(data)...);
253 }
254 template <typename... T> void setCountStandardDeviations(const size_t index, T &&...data) & {
255 getSpectrumWithoutInvalidation(index).setCountStandardDeviations(std::forward<T>(data)...);
256 }
257 template <typename... T> void setFrequencies(const size_t index, T &&...data) & {
258 getSpectrumWithoutInvalidation(index).setFrequencies(std::forward<T>(data)...);
259 }
260 template <typename... T> void setFrequencyVariances(const size_t index, T &&...data) & {
261 getSpectrumWithoutInvalidation(index).setFrequencyVariances(std::forward<T>(data)...);
262 }
263 template <typename... T> void setFrequencyStandardDeviations(const size_t index, T &&...data) & {
264 getSpectrumWithoutInvalidation(index).setFrequencyStandardDeviations(std::forward<T>(data)...);
265 }
266 const HistogramData::HistogramX &x(const size_t index) const { return getSpectrum(index).x(); }
267 const HistogramData::HistogramY &y(const size_t index) const { return getSpectrum(index).y(); }
268 const HistogramData::HistogramE &e(const size_t index) const { return getSpectrum(index).e(); }
269 const HistogramData::HistogramDx &dx(const size_t index) const { return getSpectrum(index).dx(); }
270 HistogramData::HistogramX &mutableX(const size_t index) & { return getSpectrum(index).mutableX(); }
271 HistogramData::HistogramDx &mutableDx(const size_t index) & {
272 return getSpectrumWithoutInvalidation(index).mutableDx();
273 }
274 HistogramData::HistogramY &mutableY(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableY(); }
275 HistogramData::HistogramE &mutableE(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableE(); }
276 Kernel::cow_ptr<HistogramData::HistogramX> sharedX(const size_t index) const { return getSpectrum(index).sharedX(); }
277 Kernel::cow_ptr<HistogramData::HistogramY> sharedY(const size_t index) const { return getSpectrum(index).sharedY(); }
278 Kernel::cow_ptr<HistogramData::HistogramE> sharedE(const size_t index) const { return getSpectrum(index).sharedE(); }
280 return getSpectrum(index).sharedDx();
281 }
283 getSpectrum(index).setSharedX(x);
284 }
286 getSpectrumWithoutInvalidation(index).setSharedDx(dx);
287 }
289 getSpectrumWithoutInvalidation(index).setSharedY(y);
290 }
292 getSpectrumWithoutInvalidation(index).setSharedE(e);
293 }
294 void resizeHistogram(const size_t index, size_t n) & { getSpectrum(index).resize(n); }
295 size_t histogramSize(const size_t index) const { return getSpectrum(index).size(); }
296 // Methods for getting read-only access to the data.
297 // Just passes through to the virtual dataX/Y/E function (const version)
301 [[deprecated("use x() instead")]]
302 const MantidVec &readX(std::size_t const index) const {
303 return getSpectrum(index).x().rawData();
304 }
308 [[deprecated("use y() instead")]]
309 const MantidVec &readY(std::size_t const index) const {
310 return getSpectrum(index).y().rawData();
311 }
315 [[deprecated("use e() instead")]]
316 const MantidVec &readE(std::size_t const index) const {
317 return getSpectrum(index).e().rawData();
318 }
322 [[deprecated("use dx() instead")]]
323 const MantidVec &readDx(size_t const index) const {
324 return getSpectrum(index).dx().rawData();
325 }
326
327 // The mutable legacy accessors require ISpectrum's own legacy interface
328 GNU_DIAG_OFF("deprecated-declarations")
329 MSVC_DIAG_OFF(4996)
331 [[deprecated("use mutableX() instead")]]
332 virtual MantidVec &dataX(const std::size_t index) {
333 return getSpectrum(index).dataX();
334 }
336 [[deprecated("use mutableY() instead")]]
337 virtual MantidVec &dataY(const std::size_t index) {
338 return getSpectrumWithoutInvalidation(index).dataY();
339 }
341 [[deprecated("use mutableE() instead")]]
342 virtual MantidVec &dataE(const std::size_t index) {
343 return getSpectrumWithoutInvalidation(index).dataE();
344 }
346 [[deprecated("use mutableDx() instead")]]
347 virtual MantidVec &dataDx(const std::size_t index) {
348 return getSpectrumWithoutInvalidation(index).dataDx();
349 }
350 MSVC_DIAG_ON(4996)
351 GNU_DIAG_ON("deprecated-declarations")
352
354 [[deprecated("use x() instead")]]
355 virtual const MantidVec &dataX(const std::size_t index) const {
356 return getSpectrum(index).x().rawData();
357 }
359 [[deprecated("use y() instead")]]
360 virtual const MantidVec &dataY(const std::size_t index) const {
361 return getSpectrum(index).y().rawData();
362 }
364 [[deprecated("use e() instead")]]
365 virtual const MantidVec &dataE(const std::size_t index) const {
366 return getSpectrum(index).e().rawData();
367 }
369 [[deprecated("use dx() instead")]]
370 virtual const MantidVec &dataDx(const std::size_t index) const {
371 return getSpectrum(index).dx().rawData();
372 }
373
374 virtual double getXMin() const;
375 virtual double getXMax() const;
376 virtual void getXMinMax(double &xmin, double &xmax) const;
377
379 [[deprecated("use sharedX() instead")]]
380 virtual Kernel::cow_ptr<HistogramData::HistogramX> refX(const std::size_t index) const {
381 return getSpectrum(index).sharedX();
382 }
383
386 [[deprecated("use setSharedX() instead")]]
387 virtual void setX(const std::size_t index, const Kernel::cow_ptr<HistogramData::HistogramX> &X) {
388 getSpectrum(index).setSharedX(X);
389 }
390
393 [[deprecated("use setSharedX() instead")]]
394 virtual void setX(const std::size_t index, const std::shared_ptr<HistogramData::HistogramX> &X) {
395 getSpectrum(index).setSharedX(X);
396 }
397
402 virtual bool hasDx(const std::size_t index) const { return getSpectrum(index).hasDx(); }
403
407 virtual void generateHistogram(const std::size_t index, std::span<double const> X, MantidVec &Y, MantidVec &E,
408 bool skipError = false) const = 0;
409
412 virtual void getIntegratedSpectra(std::vector<double> &out, const double minX, const double maxX,
413 const bool entireRange) const;
414
415 std::vector<double> getIntegratedCountsForWorkspaceIndices(const std::vector<size_t> &workspaceIndices,
416 const double minX, const double maxX,
417 const bool entireRange) const;
418
420 std::pair<size_t, double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const;
421
422 //----------------------------------------------------------------------
423
424 int axes() const;
425 virtual Axis *getAxis(const std::size_t &axisIndex) const;
426 void replaceAxis(const std::size_t &axisIndex, std::unique_ptr<Axis> newAxis);
427
430 size_t numberOfAxis() const;
431
433 virtual bool isCommonLogBins() const;
434
437 virtual bool isHistogramData() const;
438
440 virtual bool isCommonBins() const;
441
443 virtual bool isIntegerBins() const;
444
445 const std::string &YUnit() const { return m_YUnit; }
446 void setYUnit(const std::string &newUnit);
447 std::string YUnitLabel(bool useLatex = false) const;
448 void setYUnitLabel(const std::string &newLabel);
449
451 bool isDistribution() const;
452 void setDistribution(bool newValue);
453
454 // Methods to set and access masked bins
455 void maskBin(const size_t &workspaceIndex, const size_t &binIndex, const double &weight = 1.0);
456 void flagMasked(const size_t &index, const size_t &binIndex, const double &weight = 1.0);
457 bool hasMaskedBins(const size_t &workspaceIndex) const;
458 bool hasAnyMaskedBins() const;
461 using MaskList = std::map<size_t, double>;
462 const MaskList &maskedBins(const size_t &workspaceIndex) const;
463 std::vector<size_t> maskedBinsIndices(const size_t &workspaceIndex) const;
464 void setMaskedBins(const size_t workspaceIndex, const MaskList &maskedBins);
465 void setUnmaskedBins(const size_t workspaceIndex);
466
467 // Methods handling the internal monitor workspace
468 virtual void setMonitorWorkspace(const std::shared_ptr<MatrixWorkspace> &monitorWS);
469 std::shared_ptr<MatrixWorkspace> monitorWorkspace() const;
470
471 void loadInstrumentNexus(Nexus::File *file);
472
473 //=====================================================================================
474 // MD Geometry methods
475 //=====================================================================================
476 size_t getNumDims() const override;
477 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimension(size_t index) const override;
478 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimensionWithId(std::string id) const override;
479 //=====================================================================================
480 // End MD Geometry methods
481 //=====================================================================================
482
483 //=====================================================================================
484 // IMDWorkspace methods
485 //=====================================================================================
486
488 uint64_t getNPoints() const override;
490 uint64_t getNEvents() const override { return this->getNPoints(); }
492 static const std::string xDimensionId;
494 static const std::string yDimensionId;
496 LinePlot getLinePlot(const Mantid::Kernel::VMD &start, const Mantid::Kernel::VMD &end,
497 Mantid::API::MDNormalization normalize) const override;
499 signal_t getSignalAtCoord(const coord_t *coords, const Mantid::API::MDNormalization &normalization) const override;
501 signal_t getSignalWithMaskAtCoord(const coord_t *coords,
502 const Mantid::API::MDNormalization &normalization) const override;
505 std::vector<std::unique_ptr<IMDIterator>>
506 createIterators(size_t suggestedNumCores = 1,
507 Mantid::Geometry::MDImplicitFunction *function = nullptr) const override;
508
510 void setMDMasking(std::unique_ptr<Mantid::Geometry::MDImplicitFunction> maskingRegion) override;
512 void clearMDMasking() override;
513
515 Mantid::Kernel::SpecialCoordinateSystem getSpecialCoordinateSystem() const override;
516
517 // Check if this class has an oriented lattice on a sample object
518 virtual bool hasOrientedLattice() const override;
519
524 virtual std::pair<int64_t, int64_t> findY(double value, const std::pair<int64_t, int64_t> &idx = {0, 0}) const;
525
526 //=====================================================================================
527 // End IMDWorkspace methods
528 //=====================================================================================
529
530 //=====================================================================================
531 // Image methods
532 //=====================================================================================
533
535 std::pair<size_t, size_t> getImageStartEndXIndices(size_t i, double startX, double endX) const;
537 MantidImage_sptr getImageY(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
538 double endX = EMPTY_DBL()) const;
540 MantidImage_sptr getImageE(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
541 double endX = EMPTY_DBL()) const;
543 virtual void setImageY(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
545 virtual void setImageE(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
546
547 //=====================================================================================
548 // End image methods
549 //=====================================================================================
550
551 void invalidateCachedSpectrumNumbers();
552
555 void invalidateCommonBinsFlag() { m_isCommonBinsFlagValid.store(false); }
556
557protected:
559 MatrixWorkspace(const MatrixWorkspace &other);
560
562
565 virtual void init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength) = 0;
566 virtual void init(const HistogramData::Histogram &histogram) = 0;
567
569
570 void updateCachedDetectorGrouping(const size_t index) const override;
571
573 std::vector<std::unique_ptr<Axis>> m_axes;
574
575private:
576 std::size_t binIndexOfValue(Mantid::HistogramData::HistogramX const &xValues, const double xValue,
577 const bool ascendingOrder) const;
578 std::size_t xIndexOfValue(const Mantid::HistogramData::HistogramX &xValues, const double xValue,
579 const double tolerance) const;
580
581 MatrixWorkspace *doClone() const override = 0;
582 MatrixWorkspace *doCloneEmpty() const override = 0;
583
586 template <class Accessor>
587 MantidImage_sptr getImage(Accessor read, size_t start, size_t stop, size_t width, size_t indexStart,
588 size_t indexEnd) const;
590 template <class Accessor>
591 void setImage(Accessor mutableData, const MantidImage &image, size_t start, [[maybe_unused]] bool parallelExecution);
592
593 void setIndexInfoWithoutISpectrumUpdate(const Indexing::IndexInfo &indexInfo);
594 void buildDefaultSpectrumDefinitions();
595 void rebuildDetectorIDGroupings();
596
597 virtual bool isHistogramDataByIndex(std::size_t index = 0) const;
598
599 std::unique_ptr<Indexing::IndexInfo> m_indexInfo;
600
602 bool m_isInitialized{false};
603
605 std::string m_YUnit;
607 std::string m_YUnitLabel;
608
610 mutable std::atomic<bool> m_isCommonBinsFlagValid{false};
612 mutable std::atomic<bool> m_isCommonBinsFlag{false};
614 mutable std::mutex m_isCommonBinsMutex;
615
617 std::map<int64_t, MaskList> m_masks;
618
621 std::shared_ptr<MatrixWorkspace> m_monitorWorkspace;
622
623 mutable std::atomic<bool> m_indexInfoNeedsUpdate{true};
624 mutable std::mutex m_indexInfoMutex;
625
626 // Marker style and size, used for plotting
627 std::string m_marker;
629
630protected:
632 std::string getDimensionIdFromAxis(const int &axisIndex) const;
633};
634
636using MatrixWorkspace_sptr = std::shared_ptr<MatrixWorkspace>;
638using MatrixWorkspace_const_sptr = std::shared_ptr<const MatrixWorkspace>;
639
640} // namespace API
641} // namespace Mantid
double value
The value of the point.
Definition FitMW.cpp:51
std::map< DeltaEMode::Type, std::string > index
double tolerance
#define MSVC_DIAG_ON(x)
#define MSVC_DIAG_OFF(x)
#define GNU_DIAG_ON(x)
#define GNU_DIAG_OFF(x)
This is a collection of macros for turning compiler warnings off in a controlled manner.
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
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 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)
virtual void generateHistogram(const std::size_t index, std::span< double const > X, MantidVec &Y, MantidVec &E, bool skipError=false) const =0
Generate the histogram or rebin the existing histogram.
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 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.