-
Notifications
You must be signed in to change notification settings - Fork 122
/
LoadSpiceXML2DDet.h
144 lines (114 loc) · 4.53 KB
/
LoadSpiceXML2DDet.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#ifndef MANTID_DATAHANDLING_LOADSPICEXML2DDET_H_
#define MANTID_DATAHANDLING_LOADSPICEXML2DDET_H_
#include "MantidKernel/System.h"
#include "MantidAPI/Algorithm.h"
#include "MantidAPI/MatrixWorkspace_fwd.h"
#include "MantidAPI/ITableWorkspace_fwd.h"
namespace Mantid {
namespace DataHandling {
class SpiceXMLNode {
public:
SpiceXMLNode(const std::string &nodename);
void setParameters(const std::string &nodetype, const std::string &nodeunit,
const std::string &nodedescription);
void setValue(const std::string &strvalue);
bool hasUnit() const;
bool hasValue() const;
bool isString() const;
bool isInteger() const;
bool isDouble() const;
const std::string getName() const;
const std::string getUnit() const;
const std::string getDescription() const;
const std::string getValue() const;
std::string m_name;
std::string m_value;
std::string m_unit;
char m_typechar;
std::string m_typefullname;
std::string m_description;
};
/** LoadSpiceXML2DDet : Load 2D detector data in XML format form SPICE
Copyright © 2015 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
National Laboratory & European Spallation Source
This file is part of Mantid.
Mantid is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
Mantid is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
File change history is stored at: <https://github.com/mantidproject/mantid>
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class DLLExport LoadSpiceXML2DDet : public API::Algorithm {
public:
LoadSpiceXML2DDet();
~LoadSpiceXML2DDet() override;
/// Algoriothm name
const std::string name() const override;
/// Algorithm version
int version() const override;
/// Category
const std::string category() const override;
/// Summary
const std::string summary() const override;
private:
void init() override;
void exec() override;
/// Process inputs
void processInputs();
/// Parse SPICE XML file
std::vector<SpiceXMLNode> parseSpiceXML(const std::string &xmlfilename);
/// Create output MatrixWorkspace
API::MatrixWorkspace_sptr
createMatrixWorkspace(const std::vector<SpiceXMLNode> &vecxmlnode,
const size_t &numpixelx, const size_t &numpixely,
const std::string &detnodename,
const bool &loadinstrument);
/// Set up sample logs from table workspace loaded where SPICE data file is
/// loaded
void setupSampleLogFromSpiceTable(API::MatrixWorkspace_sptr matrixws,
API::ITableWorkspace_sptr spicetablews,
int ptnumber);
/// Set up sample logs in the output workspace
bool setupSampleLogs(API::MatrixWorkspace_sptr outws);
/// Load instrument
void loadInstrument(API::MatrixWorkspace_sptr matrixws,
const std::string &idffilename);
/// Get wavelength from workspace
bool getHB3AWavelength(API::MatrixWorkspace_sptr dataws, double &wavelength);
/// Set output workspace's X-axs as lab-frame Q space
void setXtoLabQ(API::MatrixWorkspace_sptr dataws, const double &wavelength);
/// SPICE detector XML file
std::string m_detXMLFileName;
/// XML node name in detector counts file
std::string m_detXMLNodeName;
/// Pixel size at X direction
size_t m_numPixelX;
/// Pixel size at Y direction
size_t m_numPixelY;
/// Flag to show whether instrument is required to load
bool m_loadInstrument;
/// shift distance from sample to detector center
double m_detSampleDistanceShift;
/// Flag to show whether the SPICE scan table workspace is given
bool m_hasScanTable;
/// Pt number for the sample logs to load with presense of Spice scan table
/// workspace
int m_ptNumber4Log;
/// IDF file name to override Mantid's
std::string m_idfFileName;
/// User specified wave length
double m_userSpecifiedWaveLength;
/// shift of detector on X and Y direction
double m_detXShift;
double m_detYShift;
};
} // namespace DataHandling
} // namespace Mantid
#endif /* MANTID_DATAHANDLING_LOADSPICEXML2DDET_H_ */