-
Notifications
You must be signed in to change notification settings - Fork 122
/
AlignAndFocusPowder.h
140 lines (120 loc) · 4.66 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
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2008 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/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
*/
class DLLExport AlignAndFocusPowder
: public API::DistributedDataProcessorAlgorithm {
public:
/// Algorithm's name for identification overriding a virtual method
const std::string name() const override { return "AlignAndFocusPowder"; }
/// Algorithm's version for identification overriding a virtual method
int version() const override { return 1; }
const std::vector<std::string> seeAlso() const override {
return {"AlignAndFocusPowderFromFiles"};
}
/// Algorithm's category for identification overriding a virtual method
const std::string category() const override {
return "Workflow\\Diffraction";
}
/// 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.";
}
std::map<std::string, std::string> validateInputs() override;
private:
// Overridden Algorithm methods
void init() override;
void exec() override;
void loadCalFile(const std::string &calFilename,
const std::string &groupFilename);
API::MatrixWorkspace_sptr rebin(API::MatrixWorkspace_sptr matrixws);
API::MatrixWorkspace_sptr
conjoinWorkspaces(const API::MatrixWorkspace_sptr &ws1,
const 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,
const std::string &target);
/// Call edit instrument geometry
API::MatrixWorkspace_sptr editInstrument(
API::MatrixWorkspace_sptr ws, const std::vector<double> &polars,
const std::vector<specnum_t> &specids, const std::vector<double> &l2s,
const 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{0.0};
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{0};
std::vector<double> m_dmins;
std::vector<double> m_dmaxs;
bool dspace{false};
double xmin{0.0};
double xmax{0.0};
double LRef{0.0};
double DIFCref{0.0};
double minwl{0.0};
double maxwl{0.0};
double tmin{0.0};
double tmax{0.0};
bool m_preserveEvents{false};
void doSortEvents(const 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{false};
/// Offset to low resolution TOF spectra
size_t m_lowResSpecOffset{0};
std::unique_ptr<API::Progress> m_progress = nullptr; ///< Progress reporting
};
} // namespace WorkflowAlgorithms
} // namespace Mantid