Mantid
Loading...
Searching...
No Matches
NXcanSASUtil.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2025 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
10#include <H5Cpp.h>
11#include <optional>
12#include <vector>
13
15// Utils library for small helper classes, structures and functions used in either loading or saving NXcanSAS data.
16enum WorkspaceDataAxes : std::uint8_t { Y = 0, YErr = 1, X = 2, XErr = 3 };
17enum class WorkspaceDimensionality : std::uint8_t { other = 0, oneD = 1, twoD = 2 };
19public:
20 // Prepares size and shape vectors and variables for data to be stored in file
21 explicit DataDimensions(const hsize_t numberOfPoints, const hsize_t numberOfHistograms,
22 const std::optional<std::pair<size_t, size_t>> &spinVecSize = std::nullopt);
24 const std::optional<std::pair<size_t, size_t>> &spinVecSize = std::nullopt);
25 [[nodiscard]] const hsize_t &getNumberOfPoints() const;
26 [[nodiscard]] const hsize_t &getNumberOfHistograms() const;
27 [[nodiscard]] const std::vector<hsize_t> &getDataShape() const;
28 [[nodiscard]] const std::vector<hsize_t> &getSlabShape() const;
29 [[nodiscard]] const H5::DataSpace &getDataSpace() const;
30 [[nodiscard]] const H5::DataType &getDataType() const;
31
32private:
35 std::vector<hsize_t> m_dataShape;
36 std::vector<hsize_t> m_slabShape;
37 H5::DataSpace m_dataSpace;
38 H5::DataType m_dataType;
39};
40
42 explicit DataSpaceInformation(const size_t dimSpectrumAxis = 0, const size_t dimBin = 0)
45 size_t dimBin;
46 // 1 if data is not polarized
47 size_t spinStates;
48};
49
51 explicit InstrumentNameInfo(const H5::Group &entry);
52 static std::string getInstrumentNameFromFile(const H5::Group &entry);
53 static std::string getIdfFromFile(const std::string &instrumentName);
54 std::string instrumentName;
55 std::string idf;
56};
57
59 explicit SpinVectorBuilder(const std::vector<std::string> &spinStateStr);
60 std::vector<std::string> spinVec;
61 std::vector<int> pIn;
62 std::vector<int> pOut;
63};
64
65struct SpinState {
66 std::string strSpinState{""};
67 std::pair<size_t, size_t> spinIndexPair{0, 0};
68};
69
70DataSpaceInformation getDataSpaceInfo(const H5::DataSet &dataSet);
72
73} // namespace Mantid::DataHandling::NXcanSAS
IPeaksWorkspace_sptr workspace
uint64_t hsize_t
const H5::DataSpace & getDataSpace() const
const std::vector< hsize_t > & getSlabShape() const
const std::vector< hsize_t > & getDataShape() const
std::shared_ptr< MatrixWorkspace > MatrixWorkspace_sptr
shared pointer to the matrix workspace base class
DataSpaceInformation getDataSpaceInfo(const H5::DataSet &dataSet)
WorkspaceDimensionality getWorkspaceDimensionality(const Mantid::API::MatrixWorkspace_sptr &workspace)
Retrieves workspace dimensionality enum value: oneD , twoD, other (error)
DataSpaceInformation(const size_t dimSpectrumAxis=0, const size_t dimBin=0)
static std::string getIdfFromFile(const std::string &instrumentName)
static std::string getInstrumentNameFromFile(const H5::Group &entry)
std::pair< size_t, size_t > spinIndexPair