-
Notifications
You must be signed in to change notification settings - Fork 122
/
LoadMD.h
123 lines (92 loc) · 3.93 KB
/
LoadMD.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2011 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
#include "MantidAPI/DataProcessorAlgorithm.h"
#include "MantidAPI/IFileLoader.h"
#include "MantidAPI/IMDEventWorkspace_fwd.h"
#include "MantidDataObjects/MDEventWorkspace.h"
#include "MantidKernel/NexusDescriptor.h"
#include "MantidKernel/System.h"
#include <boost/optional.hpp>
#include <boost/scoped_ptr.hpp>
namespace Mantid {
namespace MDAlgorithms {
/** Load a .nxs file into a MDEventWorkspace.
@author Janik Zikovsky
@date 2011-07-12
*/
class DLLExport LoadMD : public API::IFileLoader<Kernel::NexusDescriptor> {
public:
LoadMD();
/// Algorithm's name for identification
const std::string name() const override { return "LoadMD"; };
/// Summary of algorithms purpose
const std::string summary() const override { return "Load a MDEventWorkspace in .nxs format."; }
/// Algorithm's version for identification
int version() const override { return 1; };
const std::vector<std::string> seeAlso() const override { return {"SaveMD"}; }
/// Algorithm's category for identification
const std::string category() const override { return "MDAlgorithms\\DataHandling"; }
/// Returns a confidence value that this algorithm can load a file
int confidence(Kernel::NexusDescriptor &descriptor) const override;
private:
/// Initialise the properties
void init() override;
/// Run the algorithm
void exec() override;
// ki-kf for Inelastic convention; kf-ki for Crystallography convention
std::string convention;
/// Helper method
template <typename MDE, size_t nd> void doLoad(typename DataObjects::MDEventWorkspace<MDE, nd>::sptr ws);
void loadExperimentInfos(std::shared_ptr<Mantid::API::MultipleExperimentInfos> ws);
void loadSlab(const std::string &name, void *data, const DataObjects::MDHistoWorkspace_sptr &ws,
NeXus::NXnumtype dataType);
void loadHisto();
void loadDimensions();
void loadDimensions2();
void loadCoordinateSystem();
void loadQConvention();
void loadVisualNormalization(const std::string &key, boost::optional<Mantid::API::MDNormalization> &normalization);
/// Load all the affine matricies
void loadAffineMatricies(const API::IMDWorkspace_sptr &ws);
/// Load a given affine matrix
API::CoordTransform *loadAffineMatrix(const std::string &entry_name);
/// Sets MDFrames for workspaces from legacy files
void setMDFrameOnWorkspaceFromLegacyFile(const API::IMDWorkspace_sptr &ws);
/// Checks if a worspace is a certain type of legacy file
void checkForRequiredLegacyFixup(const API::IMDWorkspace_sptr &ws);
/// Negative scaling for Q dimensions
std::vector<double> qDimensions(const API::IMDWorkspace_sptr &ws);
/// Open file handle
// clang-format off
boost::scoped_ptr< ::NeXus::File> m_file;
// clang-format on
/// Name of that file
std::string m_filename;
/// Number of dimensions in loaded file
size_t m_numDims;
/// Each dimension object loaded.
std::vector<Mantid::Geometry::IMDDimension_sptr> m_dims;
/// Coordinate system
Kernel::SpecialCoordinateSystem m_coordSystem;
/// QConvention
std::string m_QConvention;
/// load only the box structure with empty boxes but do not tload boxes events
bool m_BoxStructureAndMethadata;
/// Version of SaveMD used to save the file
int m_saveMDVersion;
/// Visual normalization
boost::optional<Mantid::API::MDNormalization> m_visualNormalization;
boost::optional<Mantid::API::MDNormalization> m_visualNormalizationHisto;
/// Named entry
static const std::string VISUAL_NORMALIZATION_KEY;
static const std::string VISUAL_NORMALIZATION_KEY_HISTO;
/// MDFrame correction flag
bool m_requiresMDFrameCorrection;
};
} // namespace MDAlgorithms
} // namespace Mantid