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"
17
18#include <atomic>
19#include <map>
20#include <mutex>
21#include <span>
22#include <utility>
23
24namespace Mantid {
25
26namespace Indexing {
27class IndexInfo;
28}
29
30namespace Types {
31namespace Core {
32class DateAndTime;
33}
34} // namespace Types
35
36namespace Geometry {
37class ParameterMap;
38}
39
40const std::vector<std::string> validPlotTypes{"plot", "marker", "histogram", "errorbar_x", "errorbar_y", "errorbar_xy"};
41const std::vector<std::string> validMarkerStyles{"square",
42 "plus (filled)",
43 "point",
44 "tickdown",
45 "triangle_right",
46 "tickup",
47 "hline",
48 "vline",
49 "pentagon",
50 "tri_left",
51 "caretdown",
52 "caretright (centered at base)",
53 "tickright",
54 "caretright",
55 "caretleft",
56 "tickleft",
57 "tri_up",
58 "circle",
59 "pixel",
60 "caretleft (centered at base)",
61 "diamond",
62 "star",
63 "hexagon1",
64 "octagon",
65 "hexagon2",
66 "tri_right",
67 "x (filled)",
68 "thin_diamond",
69 "tri_down",
70 "triangle_left",
71 "plus",
72 "triangle_down",
73 "triangle_up",
74 "x",
75 "caretup",
76 "caretup (centered at base)",
77 "caretdown (centered at base)",
78 "None"};
79
80namespace API {
81class Axis;
82class SpectrumDetectorMapping;
83
85using MantidImage = std::vector<std::vector<double>>;
87using MantidImage_sptr = std::shared_ptr<MantidImage>;
89using MantidImage_const_sptr = std::shared_ptr<const MantidImage>;
90
91//----------------------------------------------------------------------
97class MANTID_API_DLL MatrixWorkspace : public IMDWorkspace, public ExperimentInfo {
98
99private:
100 using ExperimentInfo::toString;
101
102public:
103 // The Workspace Factory create-from-parent method needs direct access to the
104 // axes.
106
107 void initialize(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength);
108 void initialize(const std::size_t &NVectors, const HistogramData::Histogram &histogram);
109 void initialize(const Indexing::IndexInfo &indexInfo, const HistogramData::Histogram &histogram);
110
114
116 MatrixWorkspace_uptr clone() const { return MatrixWorkspace_uptr(doClone()); }
117
119 MatrixWorkspace_uptr cloneEmpty() const { return MatrixWorkspace_uptr(doCloneEmpty()); }
120
121 const Indexing::IndexInfo &indexInfo() const;
122 void setIndexInfo(const Indexing::IndexInfo &indexInfo);
123
124 using IMDWorkspace::toString;
126 const std::string toString() const override;
127
130 std::shared_ptr<const Geometry::IDetector> getDetector(const size_t workspaceIndex) const;
131 double detectorTwoTheta(const Geometry::IDetector &det) const;
132 double detectorSignedTwoTheta(const Geometry::IDetector &det) const;
133
135
136 virtual void updateSpectraUsing(const SpectrumDetectorMapping &map);
139 void rebuildSpectraMapping(const bool includeMonitors = true, const specnum_t specNumOffset = 1);
140
141 // More mapping
142 spec2index_map getSpectrumToWorkspaceIndexMap() const;
143 detid2index_map getDetectorIDToWorkspaceIndexMap(bool throwIfMultipleDets = false,
144 bool ignoreIfNoValidDets = false) const;
145 virtual std::vector<size_t> getDetectorIDToWorkspaceIndexVector(detid_t &offset,
146 bool throwIfMultipleDets = false) const;
147
148 virtual std::vector<size_t> getSpectrumToWorkspaceIndexVector(specnum_t &offset) const;
149 std::vector<size_t> getIndicesFromSpectra(const std::vector<specnum_t> &spectraList) const;
150 size_t getIndexFromSpectrumNumber(const specnum_t specNo) const;
151 std::vector<size_t> getIndicesFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
152 std::vector<specnum_t> getSpectraFromDetectorIDs(const std::vector<detid_t> &detIdList) const;
153
154 bool hasGroupedDetectors() const;
155
157 virtual bool isRaggedWorkspace() const = 0;
158
160 size_t getMemorySize() const override;
161 virtual size_t getMemorySizeForXAxes() const;
162
163 // Section required for iteration
165 virtual std::size_t size() const = 0;
169 virtual std::size_t blocksize() const = 0;
171 virtual std::size_t getNumberBins(const std::size_t &index) const = 0;
173 virtual std::size_t getMaxNumberBins() const = 0;
175 virtual std::size_t getNumberHistograms() const = 0;
176
178 void setTitle(const std::string &) override;
180 const std::string getTitle() const override;
181
183 void setPlotType(const std::string &);
185 std::string getPlotType() const;
186
188 void setMarkerStyle(const std::string &markerType);
190 std::string getMarkerStyle() const;
191
193 void setMarkerSize(const float markerSize);
195 float getMarkerSize() const;
196
197 virtual Types::Core::DateAndTime getFirstPulseTime() const;
198 Types::Core::DateAndTime getLastPulseTime() const;
199
201 std::size_t yIndexOfX(const double xValue, const std::size_t &index = 0,
202 [[maybe_unused]] const double tolerance = 0.0) const;
203
204 //----------------------------------------------------------------------
205 // DATA ACCESSORS
206 //----------------------------------------------------------------------
207
209 virtual ISpectrum &getSpectrum(const size_t index) = 0;
212 virtual const ISpectrum &getSpectrum(const size_t index) const = 0;
213
215 HistogramData::Histogram histogram(const size_t index) const { return getSpectrum(index).histogram(); }
216 template <typename... T> void setHistogram(const size_t index, T &&...data) & {
217 getSpectrum(index).setHistogram(std::forward<T>(data)...);
218 }
219 void convertToCounts(const size_t index) { getSpectrumWithoutInvalidation(index).convertToCounts(); }
220 void convertToFrequencies(const size_t index) { getSpectrumWithoutInvalidation(index).convertToFrequencies(); }
221 HistogramData::BinEdges binEdges(const size_t index) const { return getSpectrum(index).binEdges(); }
222 HistogramData::Points points(const size_t index) const { return getSpectrum(index).points(); }
223 HistogramData::PointStandardDeviations pointStandardDeviations(const size_t index) const {
224 return getSpectrum(index).pointStandardDeviations();
225 }
226 template <typename... T> void setBinEdges(const size_t index, T &&...data) & {
227 getSpectrum(index).setBinEdges(std::forward<T>(data)...);
228 }
229 template <typename... T> void setPoints(const size_t index, T &&...data) & {
230 getSpectrum(index).setPoints(std::forward<T>(data)...);
231 }
232 template <typename... T> void setPointVariances(const size_t index, T &&...data) & {
233 getSpectrumWithoutInvalidation(index).setPointVariances(std::forward<T>(data)...);
234 }
235 template <typename... T> void setPointStandardDeviations(const size_t index, T &&...data) & {
236 getSpectrumWithoutInvalidation(index).setPointStandardDeviations(std::forward<T>(data)...);
237 }
238 HistogramData::Counts counts(const size_t index) const { return getSpectrum(index).counts(); }
239 HistogramData::CountVariances countVariances(const size_t index) const { return getSpectrum(index).countVariances(); }
240 HistogramData::CountStandardDeviations countStandardDeviations(const size_t index) const {
241 return getSpectrum(index).countStandardDeviations();
242 }
243 HistogramData::Frequencies frequencies(const size_t index) const { return getSpectrum(index).frequencies(); }
244 HistogramData::FrequencyVariances frequencyVariances(const size_t index) const {
245 return getSpectrum(index).frequencyVariances();
246 }
247 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations(const size_t index) const {
248 return getSpectrum(index).frequencyStandardDeviations();
249 }
250 template <typename... T> void setCounts(const size_t index, T &&...data) & {
251 getSpectrumWithoutInvalidation(index).setCounts(std::forward<T>(data)...);
252 }
253 template <typename... T> void setCountVariances(const size_t index, T &&...data) & {
254 getSpectrumWithoutInvalidation(index).setCountVariances(std::forward<T>(data)...);
255 }
256 template <typename... T> void setCountStandardDeviations(const size_t index, T &&...data) & {
257 getSpectrumWithoutInvalidation(index).setCountStandardDeviations(std::forward<T>(data)...);
258 }
259 template <typename... T> void setFrequencies(const size_t index, T &&...data) & {
260 getSpectrumWithoutInvalidation(index).setFrequencies(std::forward<T>(data)...);
261 }
262 template <typename... T> void setFrequencyVariances(const size_t index, T &&...data) & {
263 getSpectrumWithoutInvalidation(index).setFrequencyVariances(std::forward<T>(data)...);
264 }
265 template <typename... T> void setFrequencyStandardDeviations(const size_t index, T &&...data) & {
266 getSpectrumWithoutInvalidation(index).setFrequencyStandardDeviations(std::forward<T>(data)...);
267 }
268 const HistogramData::HistogramX &x(const size_t index) const { return getSpectrum(index).x(); }
269 const HistogramData::HistogramY &y(const size_t index) const { return getSpectrum(index).y(); }
270 const HistogramData::HistogramE &e(const size_t index) const { return getSpectrum(index).e(); }
271 const HistogramData::HistogramDx &dx(const size_t index) const { return getSpectrum(index).dx(); }
272 HistogramData::HistogramX &mutableX(const size_t index) & { return getSpectrum(index).mutableX(); }
273 HistogramData::HistogramDx &mutableDx(const size_t index) & {
274 return getSpectrumWithoutInvalidation(index).mutableDx();
275 }
276 HistogramData::HistogramY &mutableY(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableY(); }
277 HistogramData::HistogramE &mutableE(const size_t index) & { return getSpectrumWithoutInvalidation(index).mutableE(); }
278 Kernel::cow_ptr<HistogramData::HistogramX> sharedX(const size_t index) const { return getSpectrum(index).sharedX(); }
279 Kernel::cow_ptr<HistogramData::HistogramY> sharedY(const size_t index) const { return getSpectrum(index).sharedY(); }
280 Kernel::cow_ptr<HistogramData::HistogramE> sharedE(const size_t index) const { return getSpectrum(index).sharedE(); }
282 return getSpectrum(index).sharedDx();
283 }
285 getSpectrum(index).setSharedX(x);
286 }
288 getSpectrumWithoutInvalidation(index).setSharedDx(dx);
289 }
291 getSpectrumWithoutInvalidation(index).setSharedY(y);
292 }
294 getSpectrumWithoutInvalidation(index).setSharedE(e);
295 }
296 void resizeHistogram(const size_t index, size_t n) & { getSpectrum(index).resize(n); }
297 size_t histogramSize(const size_t index) const { return getSpectrum(index).size(); }
298 // Methods for getting read-only access to the data.
299 // Just passes through to the virtual dataX/Y/E function (const version)
303 [[deprecated("use x() instead")]]
304 const MantidVec &readX(std::size_t const index) const {
305 return getSpectrum(index).x().rawData();
306 }
310 [[deprecated("use y() instead")]]
311 const MantidVec &readY(std::size_t const index) const {
312 return getSpectrum(index).y().rawData();
313 }
317 [[deprecated("use e() instead")]]
318 const MantidVec &readE(std::size_t const index) const {
319 return getSpectrum(index).e().rawData();
320 }
324 [[deprecated("use dx() instead")]]
325 const MantidVec &readDx(size_t const index) const {
326 return getSpectrum(index).dx().rawData();
327 }
328
329 // The mutable legacy accessors require ISpectrum's own legacy interface
330 GNU_DIAG_OFF("deprecated-declarations")
331 MSVC_DIAG_OFF(4996)
333 [[deprecated("use mutableX() instead")]]
334 virtual MantidVec &dataX(const std::size_t index) {
335 return getSpectrum(index).dataX();
336 }
338 [[deprecated("use mutableY() instead")]]
339 virtual MantidVec &dataY(const std::size_t index) {
340 return getSpectrumWithoutInvalidation(index).dataY();
341 }
343 [[deprecated("use mutableE() instead")]]
344 virtual MantidVec &dataE(const std::size_t index) {
345 return getSpectrumWithoutInvalidation(index).dataE();
346 }
348 [[deprecated("use mutableDx() instead")]]
349 virtual MantidVec &dataDx(const std::size_t index) {
350 return getSpectrumWithoutInvalidation(index).dataDx();
351 }
352 MSVC_DIAG_ON(4996)
353 GNU_DIAG_ON("deprecated-declarations")
354
356 [[deprecated("use x() instead")]]
357 virtual const MantidVec &dataX(const std::size_t index) const {
358 return getSpectrum(index).x().rawData();
359 }
361 [[deprecated("use y() instead")]]
362 virtual const MantidVec &dataY(const std::size_t index) const {
363 return getSpectrum(index).y().rawData();
364 }
366 [[deprecated("use e() instead")]]
367 virtual const MantidVec &dataE(const std::size_t index) const {
368 return getSpectrum(index).e().rawData();
369 }
371 [[deprecated("use dx() instead")]]
372 virtual const MantidVec &dataDx(const std::size_t index) const {
373 return getSpectrum(index).dx().rawData();
374 }
375
376 virtual double getXMin() const;
377 virtual double getXMax() const;
378 [[nodiscard]] virtual std::pair<double, double> getXMinMax() const;
379 [[nodiscard]] std::pair<double, double> getXMinMax(const std::vector<size_t> &workspaceIndices,
380 const bool includeNonFiniteSpectra = false) const;
381
383 [[deprecated("use sharedX() instead")]]
384 virtual Kernel::cow_ptr<HistogramData::HistogramX> refX(const std::size_t index) const {
385 return getSpectrum(index).sharedX();
386 }
387
390 [[deprecated("use setSharedX() instead")]]
391 virtual void setX(const std::size_t index, const Kernel::cow_ptr<HistogramData::HistogramX> &X) {
392 getSpectrum(index).setSharedX(X);
393 }
394
397 [[deprecated("use setSharedX() instead")]]
398 virtual void setX(const std::size_t index, const std::shared_ptr<HistogramData::HistogramX> &X) {
399 getSpectrum(index).setSharedX(X);
400 }
401
406 virtual bool hasDx(const std::size_t index) const { return getSpectrum(index).hasDx(); }
407
411 virtual void generateHistogram(const std::size_t index, std::span<double const> X, MantidVec &Y, MantidVec &E,
412 bool skipError = false) const = 0;
413
416 virtual void getIntegratedSpectra(std::vector<double> &out, const double minX, const double maxX,
417 const bool entireRange) const;
418
419 std::vector<double> getIntegratedCountsForWorkspaceIndices(const std::vector<size_t> &workspaceIndices,
420 const double minX, const double maxX,
421 const bool entireRange) const;
422
424 std::pair<size_t, double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const;
425
426 //----------------------------------------------------------------------
427
428 int axes() const;
429 virtual Axis *getAxis(const std::size_t &axisIndex) const;
430 void replaceAxis(const std::size_t &axisIndex, std::unique_ptr<Axis> newAxis);
431
434 size_t numberOfAxis() const;
435
437 virtual bool isCommonLogBins() const;
438
441 virtual bool isHistogramData() const;
442
444 virtual bool isCommonBins() const;
445
447 virtual bool isIntegerBins() const;
448
449 const std::string &YUnit() const { return m_YUnit; }
450 void setYUnit(const std::string &newUnit);
451 std::string YUnitLabel(bool useLatex = false) const;
452 void setYUnitLabel(const std::string &newLabel);
453
455 bool isDistribution() const;
456 void setDistribution(bool newValue);
457
458 // Methods to set and access masked bins
459 void maskBin(const size_t &workspaceIndex, const size_t &binIndex, const double &weight = 1.0);
460 void flagMasked(const size_t &index, const size_t &binIndex, const double &weight = 1.0);
461 bool hasMaskedBins(const size_t &workspaceIndex) const;
462 bool hasAnyMaskedBins() const;
465 using MaskList = std::map<size_t, double>;
466 const MaskList &maskedBins(const size_t &workspaceIndex) const;
467 std::vector<size_t> maskedBinsIndices(const size_t &workspaceIndex) const;
468 void setMaskedBins(const size_t workspaceIndex, const MaskList &maskedBins);
469 void setUnmaskedBins(const size_t workspaceIndex);
470
471 // Methods handling the internal monitor workspace
472 virtual void setMonitorWorkspace(const std::shared_ptr<MatrixWorkspace> &monitorWS);
473 std::shared_ptr<MatrixWorkspace> monitorWorkspace() const;
474
475 void loadInstrumentNexus(Nexus::File *file);
476
477 //=====================================================================================
478 // MD Geometry methods
479 //=====================================================================================
480 size_t getNumDims() const override;
481 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimension(size_t index) const override;
482 std::shared_ptr<const Mantid::Geometry::IMDDimension> getDimensionWithId(std::string id) const override;
483 //=====================================================================================
484 // End MD Geometry methods
485 //=====================================================================================
486
487 //=====================================================================================
488 // IMDWorkspace methods
489 //=====================================================================================
490
492 uint64_t getNPoints() const override;
494 uint64_t getNEvents() const override { return this->getNPoints(); }
496 static const std::string xDimensionId;
498 static const std::string yDimensionId;
500 LinePlot getLinePlot(const Mantid::Kernel::VMD &start, const Mantid::Kernel::VMD &end,
501 Mantid::API::MDNormalization normalize) const override;
503 signal_t getSignalAtCoord(const coord_t *coords, const Mantid::API::MDNormalization &normalization) const override;
505 signal_t getSignalWithMaskAtCoord(const coord_t *coords,
506 const Mantid::API::MDNormalization &normalization) const override;
509 std::vector<std::unique_ptr<IMDIterator>>
510 createIterators(size_t suggestedNumCores = 1,
511 Mantid::Geometry::MDImplicitFunction *function = nullptr) const override;
512
514 void setMDMasking(std::unique_ptr<Mantid::Geometry::MDImplicitFunction> maskingRegion) override;
516 void clearMDMasking() override;
517
519 Mantid::Kernel::SpecialCoordinateSystem getSpecialCoordinateSystem() const override;
520
521 // Check if this class has an oriented lattice on a sample object
522 virtual bool hasOrientedLattice() const override;
523
528 virtual std::pair<int64_t, int64_t> findY(double value, const std::pair<int64_t, int64_t> &idx = {0, 0}) const;
529
530 //=====================================================================================
531 // End IMDWorkspace methods
532 //=====================================================================================
533
534 //=====================================================================================
535 // Image methods
536 //=====================================================================================
537
539 std::pair<size_t, size_t> getImageStartEndXIndices(size_t i, double startX, double endX) const;
541 MantidImage_sptr getImageY(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
542 double endX = EMPTY_DBL()) const;
544 MantidImage_sptr getImageE(size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(),
545 double endX = EMPTY_DBL()) const;
547 virtual void setImageY(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
549 virtual void setImageE(const MantidImage &image, size_t start = 0, bool parallelExecution = true);
550
551 //=====================================================================================
552 // End image methods
553 //=====================================================================================
554
555 void invalidateCachedSpectrumNumbers();
556
559 void invalidateCommonBinsFlag() { m_isCommonBinsFlagValid.store(false); }
560
561protected:
563 MatrixWorkspace(const MatrixWorkspace &other);
564
566
569 virtual void init(const std::size_t &NVectors, const std::size_t &XLength, const std::size_t &YLength) = 0;
570 virtual void init(const HistogramData::Histogram &histogram) = 0;
571
573
574 void updateCachedDetectorGrouping(const size_t index) const override;
575
577 std::vector<std::unique_ptr<Axis>> m_axes;
578
579private:
580 std::size_t binIndexOfValue(Mantid::HistogramData::HistogramX const &xValues, const double xValue,
581 const bool ascendingOrder) const;
582 std::size_t xIndexOfValue(const Mantid::HistogramData::HistogramX &xValues, const double xValue,
583 const double tolerance) const;
584
585 MatrixWorkspace *doClone() const override = 0;
586 MatrixWorkspace *doCloneEmpty() const override = 0;
587
590 template <class Accessor>
591 MantidImage_sptr getImage(Accessor read, size_t start, size_t stop, size_t width, size_t indexStart,
592 size_t indexEnd) const;
594 template <class Accessor>
595 void setImage(Accessor mutableData, const MantidImage &image, size_t start, [[maybe_unused]] bool parallelExecution);
596
597 void setIndexInfoWithoutISpectrumUpdate(const Indexing::IndexInfo &indexInfo);
598 void buildDefaultSpectrumDefinitions();
599 void rebuildDetectorIDGroupings();
600
601 virtual bool isHistogramDataByIndex(std::size_t index = 0) const;
602
603 std::unique_ptr<Indexing::IndexInfo> m_indexInfo;
604
606 bool m_isInitialized{false};
607
609 std::string m_YUnit;
611 std::string m_YUnitLabel;
612
614 mutable std::atomic<bool> m_isCommonBinsFlagValid{false};
616 mutable std::atomic<bool> m_isCommonBinsFlag{false};
618 mutable std::mutex m_isCommonBinsMutex;
619
621 std::map<int64_t, MaskList> m_masks;
622
625 std::shared_ptr<MatrixWorkspace> m_monitorWorkspace;
626
627 mutable std::atomic<bool> m_indexInfoNeedsUpdate{true};
628 mutable std::mutex m_indexInfoMutex;
629
630 // Marker style and size, used for plotting
631 std::string m_marker;
633
634protected:
636 std::string getDimensionIdFromAxis(const int &axisIndex) const;
637};
638
640using MatrixWorkspace_sptr = std::shared_ptr<MatrixWorkspace>;
642using MatrixWorkspace_const_sptr = std::shared_ptr<const MatrixWorkspace>;
643
644} // namespace API
645} // namespace Mantid
646
647// Instantiated and exported by API/src/PropertyWithValue.cpp
648MANTID_API_EXTERN_TEMPLATE(Mantid::Kernel::PropertyWithValue<std::shared_ptr<Mantid::API::MatrixWorkspace>>);
double value
The value of the point.
Definition FitMW.cpp:51
std::map< DeltaEMode::Type, std::string > index
MANTID_API_EXTERN_TEMPLATE(Mantid::Kernel::PropertyWithValue< std::shared_ptr< Mantid::API::MatrixWorkspace > >)
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:28
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:37
An "ImplicitFunction" defining a hyper-cuboid-shaped region in N dimensions.
The concrete, templated class for properties.
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.