BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
AxisNames.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Device/Unit/AxisNames.cpp
6 //! @brief Implements functions in namespace AxisNames.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #include "Device/Unit/AxisNames.h"
16 #include <map>
17 
18 namespace AxisNames
19 {
20 // For spherical detectors in GISAS simulations
21 std::map<Axes::Units, std::string> InitSphericalAxis0()
22 {
23  std::map<Axes::Units, std::string> result;
24  result[Axes::Units::NBINS] = "X [nbins]";
25  result[Axes::Units::RADIANS] = "phi_f [rad]";
26  result[Axes::Units::DEGREES] = "phi_f [deg]";
27  result[Axes::Units::QSPACE] = "Qy [1/nm]";
28  result[Axes::Units::QXQY] = "Qx [1/nm]";
29  return result;
30 }
31 std::map<Axes::Units, std::string> InitSphericalAxis1()
32 {
33  std::map<Axes::Units, std::string> result;
34  result[Axes::Units::NBINS] = "Y [nbins]";
35  result[Axes::Units::RADIANS] = "alpha_f [rad]";
36  result[Axes::Units::DEGREES] = "alpha_f [deg]";
37  result[Axes::Units::QSPACE] = "Qz [1/nm]";
38  result[Axes::Units::QXQY] = "Qy [1/nm]";
39  return result;
40 }
41 // For rectangular detectors in GISAS simulations
42 std::map<Axes::Units, std::string> InitRectangularAxis0()
43 {
44  std::map<Axes::Units, std::string> result;
45  result[Axes::Units::NBINS] = "X [nbins]";
46  result[Axes::Units::RADIANS] = "phi_f [rad]";
47  result[Axes::Units::DEGREES] = "phi_f [deg]";
48  result[Axes::Units::MM] = "X [mm]";
49  result[Axes::Units::QSPACE] = "Qy [1/nm]";
50  result[Axes::Units::QXQY] = "Qx [1/nm]";
51  return result;
52 }
53 std::map<Axes::Units, std::string> InitRectangularAxis1()
54 {
55  std::map<Axes::Units, std::string> result;
56  result[Axes::Units::NBINS] = "Y [nbins]";
57  result[Axes::Units::RADIANS] = "alpha_f [rad]";
58  result[Axes::Units::DEGREES] = "alpha_f [deg]";
59  result[Axes::Units::MM] = "Y [mm]";
60  result[Axes::Units::QSPACE] = "Qz [1/nm]";
61  result[Axes::Units::QXQY] = "Qy [1/nm]";
62  return result;
63 }
64 // For off-specular simulations (both spherical and rectangular detectors)
65 // Currently 'mm' is not supported for the y-axis
66 std::map<Axes::Units, std::string> InitOffSpecAxis0()
67 {
68  std::map<Axes::Units, std::string> result;
69  result[Axes::Units::NBINS] = "X [nbins]";
70  result[Axes::Units::RADIANS] = "alpha_i [rad]";
71  result[Axes::Units::DEGREES] = "alpha_i [deg]";
72  return result;
73 }
74 std::map<Axes::Units, std::string> InitOffSpecAxis1()
75 {
76  std::map<Axes::Units, std::string> result;
77  result[Axes::Units::NBINS] = "Y [nbins]";
78  result[Axes::Units::RADIANS] = "alpha_f [rad]";
79  result[Axes::Units::DEGREES] = "alpha_f [deg]";
80  return result;
81 }
82 
83 std::map<Axes::Units, std::string> InitSpecAxis()
84 {
85  std::map<Axes::Units, std::string> result;
86  result[Axes::Units::NBINS] = "X [nbins]";
87  result[Axes::Units::RADIANS] = "alpha_i [rad]";
88  result[Axes::Units::DEGREES] = "alpha_i [deg]";
89  result[Axes::Units::QSPACE] = "Q [1/nm]";
90  result[Axes::Units::RQ4] = "Q [1/nm]";
91  return result;
92 }
93 
94 std::map<Axes::Units, std::string> InitSpecAxisQ()
95 {
96  std::map<Axes::Units, std::string> result;
97  result[Axes::Units::NBINS] = "X [nbins]";
98  result[Axes::Units::QSPACE] = "Q [1/nm]";
99  result[Axes::Units::RQ4] = "Q [1/nm]";
100  return result;
101 }
102 
103 // corner case: axis corresponding to the position
104 // across sample is accepts only bins and nanometers,
105 // but the units specified in dedicated unit
106 // converter correspond to inclination angular axis.
107 // For this reason depth axis map returns always
108 // nanometers except for bins.
109 std::map<Axes::Units, std::string> InitSampleDepthAxis()
110 {
111  std::map<Axes::Units, std::string> result;
112  result[Axes::Units::NBINS] = "Y [nbins]";
113  result[Axes::Units::RADIANS] = "Position [nm]";
114  result[Axes::Units::DEGREES] = "Position [nm]";
115  result[Axes::Units::QSPACE] = "Position [nm]";
116  return result;
117 }
118 
119 } // namespace AxisNames
Defines namespace AxisNames.
Contains functions to create maps that give the right axis names for different detector types and uni...
Definition: AxisNames.cpp:19
std::map< Axes::Units, std::string > InitOffSpecAxis1()
Definition: AxisNames.cpp:74
std::map< Axes::Units, std::string > InitRectangularAxis0()
Definition: AxisNames.cpp:42
std::map< Axes::Units, std::string > InitSpecAxisQ()
Definition: AxisNames.cpp:94
std::map< Axes::Units, std::string > InitRectangularAxis1()
Definition: AxisNames.cpp:53
std::map< Axes::Units, std::string > InitSphericalAxis0()
Definition: AxisNames.cpp:21
std::map< Axes::Units, std::string > InitOffSpecAxis0()
Definition: AxisNames.cpp:66
std::map< Axes::Units, std::string > InitSphericalAxis1()
Definition: AxisNames.cpp:31
std::map< Axes::Units, std::string > InitSpecAxis()
Definition: AxisNames.cpp:83
std::map< Axes::Units, std::string > InitSampleDepthAxis()
Definition: AxisNames.cpp:109