/
AlignAndFocusPowder.h
154 lines (131 loc) · 5.34 KB
/
AlignAndFocusPowder.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
145
146
147
148
149
150
151
152
153
154
#ifndef MANTID_ALGORITHM_AlignAndFocusPowder_H_
#define MANTID_ALGORITHM_AlignAndFocusPowder_H_
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAPI/DataProcessorAlgorithm.h"
#include "MantidAPI/MatrixWorkspace_fwd.h"
#include "MantidDataObjects/EventWorkspace.h"
#include "MantidDataObjects/GroupingWorkspace.h"
#include "MantidDataObjects/MaskWorkspace.h"
#include "MantidDataObjects/OffsetsWorkspace.h"
namespace Mantid {
namespace Kernel {
class PropertyManager;
}
namespace WorkflowAlgorithms {
/**
This is a parent algorithm that uses several different child algorithms to
perform it's task.
Takes a workspace as input and the filename of a grouping file of a suitable
format.
The input workspace is
1) Converted to d-spacing units
2) Rebinned to a common set of bins
3) The spectra are grouped according to the grouping file.
Required Properties:
<UL>
<LI> InputWorkspace - The name of the 2D Workspace to take as input </LI>
<LI> OutputWorkspace - The name of the 2D workspace in which to store the result
</LI>
</UL>
@author Vickie Lynch, SNS
@date 07/16/2012
Copyright © 2008 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 AlignAndFocusPowder : public API::DataProcessorAlgorithm {
public:
/// Constructor
AlignAndFocusPowder();
/// Destructor
~AlignAndFocusPowder() override;
/// Algorithm's name for identification overriding a virtual method
const std::string name() const override;
/// Algorithm's version for identification overriding a virtual method
int version() const override;
/// Algorithm's category for identification overriding a virtual method
const std::string category() const override;
/// Summary of algorithms purpose
const std::string summary() const override {
return "Algorithm to focus powder diffraction data into a number of "
"histograms "
"according to a grouping scheme defined in a CalFile.";
}
private:
// Overridden Algorithm methods
void init() override;
void exec() override;
void loadCalFile(const std::string &calFileName);
API::MatrixWorkspace_sptr rebin(API::MatrixWorkspace_sptr matrixws);
API::MatrixWorkspace_sptr conjoinWorkspaces(API::MatrixWorkspace_sptr ws1,
API::MatrixWorkspace_sptr ws2,
size_t offset);
/// Call diffraction focus to a matrix workspace.
API::MatrixWorkspace_sptr diffractionFocus(API::MatrixWorkspace_sptr ws);
/// Convert units
API::MatrixWorkspace_sptr convertUnits(API::MatrixWorkspace_sptr matrixws,
std::string target);
/// Call edit instrument geometry
API::MatrixWorkspace_sptr editInstrument(API::MatrixWorkspace_sptr ws,
std::vector<double> polars,
std::vector<specnum_t> specids,
std::vector<double> l2s,
std::vector<double> phis);
void convertOffsetsToCal(DataObjects::OffsetsWorkspace_sptr &offsetsWS);
double getVecPropertyFromPmOrSelf(const std::string &name,
std::vector<double> &avec);
API::MatrixWorkspace_sptr m_inputW;
API::MatrixWorkspace_sptr m_outputW;
DataObjects::EventWorkspace_sptr m_inputEW;
DataObjects::EventWorkspace_sptr m_outputEW;
API::ITableWorkspace_sptr m_calibrationWS;
DataObjects::MaskWorkspace_sptr m_maskWS;
DataObjects::GroupingWorkspace_sptr m_groupWS;
double m_l1;
std::vector<int32_t> specids;
std::vector<double> l2s;
std::vector<double> tths;
std::vector<double> phis;
std::string m_instName;
std::vector<double> m_params;
int m_resampleX;
std::vector<double> m_dmins;
std::vector<double> m_dmaxs;
bool dspace;
double xmin;
double xmax;
double LRef;
double DIFCref;
double minwl;
double maxwl;
double tmin;
double tmax;
bool m_preserveEvents;
void doSortEvents(Mantid::API::Workspace_sptr ws);
/// Low resolution TOF matrix workspace
API::MatrixWorkspace_sptr m_lowResW;
/// Low resolution TOF event workspace
DataObjects::EventWorkspace_sptr m_lowResEW;
/// Flag to process low resolution workspace
bool m_processLowResTOF;
/// Offset to low resolution TOF spectra
size_t m_lowResSpecOffset;
API::Progress *m_progress; ///< Progress reporting
};
} // namespace WorkflowAlgorithm
} // namespace Mantid
#endif /*MANTID_ALGORITHM_AlignAndFocusPowder_H_*/