-
Notifications
You must be signed in to change notification settings - Fork 122
/
CorrectKiKf.h
82 lines (72 loc) · 2.97 KB
/
CorrectKiKf.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
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2010 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
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAPI/Algorithm.h"
#include "MantidAPI/SpectrumInfo.h"
#include "MantidAlgorithms/DllConfig.h"
namespace Mantid {
namespace Algorithms {
/** Multiplies the workspace with k_i/k_f
The initial workspace must have energy transfer units.
The algorithm will throw an error if the input workspace is an event workspace
For Direct Geometry instruments the fixed energy is E_i, and the final
energy E_f=Ei-E.
For Indirect Geometry, the fixed energy is E_f, the initial energy is
E_i=E+E_f.
Each element of the workspace is multiplied by k_i/k_f=SQRT(E_i/E_f)
Required Properties:
<UL>
<LI> InputWorkspace - The name of the input workspace. </LI>
<LI> OutputWorkspace - The name of the output workspace. </LI>
<LI> Emode - The energy mode (1=direct
geometry, 2=indirect geometry) </LI>
<LI> Efixed - Value of fixed energy: EI
(emode=1)
or
EF
(emode=2) (meV) </LI>
</UL>
To do: check if instrument type is same as Emode
@author Andrei Savici
@date 10/21/2010
*/
class MANTID_ALGORITHMS_DLL CorrectKiKf final : public API::Algorithm {
public:
/// Algorithm's name for identification overriding a virtual method
const std::string name() const override { return "CorrectKiKf"; }
/// Summary of algorithms purpose
const std::string summary() const override {
return "Performs k_i/k_f multiplication, in order to transform "
"differential scattering cross section into dynamic structure "
"factor.";
}
/// Algorithm's version for identification overriding a virtual method
int version() const override { return 1; }
/// Algorithm's category for identification overriding a virtual method
const std::string category() const override {
return "Inelastic\\Corrections;CorrectionFunctions\\SpecialCorrections";
}
private:
// Overridden Algorithm methods
void init() override;
void exec() override;
void execEvent();
/**
* Execute CorrectKiKf for event lists
* @param wevector the list of events to correct
* @param efixed the value of the fixed energy
* @param emodeStr the energy mode description
*/
template <class T> void correctKiKfEventHelper(std::vector<T> &wevector, double efixed, const std::string &emodeStr);
void getEfixedFromParameterMap(double &Efi, int64_t i, const Mantid::API::SpectrumInfo &spectrumInfo,
const Mantid::Geometry::ParameterMap &pmap);
};
} // namespace Algorithms
} // namespace Mantid