BornAgain  1.19.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 reflection and scattering
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 // For spherical detectors in GISAS simulations
20 std::map<Axes::Units, std::string> InitSphericalAxis0()
21 {
22  std::map<Axes::Units, std::string> result;
23  result[Axes::Units::NBINS] = "X [nbins]";
24  result[Axes::Units::RADIANS] = "phi_f [rad]";
25  result[Axes::Units::DEGREES] = "phi_f [deg]";
26  result[Axes::Units::QSPACE] = "Qy [1/nm]";
27  result[Axes::Units::QXQY] = "Qx [1/nm]";
28  return result;
29 }
30 std::map<Axes::Units, std::string> InitSphericalAxis1()
31 {
32  std::map<Axes::Units, std::string> result;
33  result[Axes::Units::NBINS] = "Y [nbins]";
34  result[Axes::Units::RADIANS] = "alpha_f [rad]";
35  result[Axes::Units::DEGREES] = "alpha_f [deg]";
36  result[Axes::Units::QSPACE] = "Qz [1/nm]";
37  result[Axes::Units::QXQY] = "Qy [1/nm]";
38  return result;
39 }
40 // For rectangular detectors in GISAS simulations
41 std::map<Axes::Units, std::string> InitRectangularAxis0()
42 {
43  std::map<Axes::Units, std::string> result;
44  result[Axes::Units::NBINS] = "X [nbins]";
45  result[Axes::Units::RADIANS] = "phi_f [rad]";
46  result[Axes::Units::DEGREES] = "phi_f [deg]";
47  result[Axes::Units::MM] = "X [mm]";
48  result[Axes::Units::QSPACE] = "Qy [1/nm]";
49  result[Axes::Units::QXQY] = "Qx [1/nm]";
50  return result;
51 }
52 std::map<Axes::Units, std::string> InitRectangularAxis1()
53 {
54  std::map<Axes::Units, std::string> result;
55  result[Axes::Units::NBINS] = "Y [nbins]";
56  result[Axes::Units::RADIANS] = "alpha_f [rad]";
57  result[Axes::Units::DEGREES] = "alpha_f [deg]";
58  result[Axes::Units::MM] = "Y [mm]";
59  result[Axes::Units::QSPACE] = "Qz [1/nm]";
60  result[Axes::Units::QXQY] = "Qy [1/nm]";
61  return result;
62 }
63 // For off-specular simulations (both spherical and rectangular detectors)
64 // Currently 'mm' is not supported for the y-axis
65 std::map<Axes::Units, std::string> InitOffSpecularAxis0()
66 {
67  std::map<Axes::Units, std::string> result;
68  result[Axes::Units::NBINS] = "X [nbins]";
69  result[Axes::Units::RADIANS] = "alpha_i [rad]";
70  result[Axes::Units::DEGREES] = "alpha_i [deg]";
71  return result;
72 }
73 std::map<Axes::Units, std::string> InitOffSpecularAxis1()
74 {
75  std::map<Axes::Units, std::string> result;
76  result[Axes::Units::NBINS] = "Y [nbins]";
77  result[Axes::Units::RADIANS] = "alpha_f [rad]";
78  result[Axes::Units::DEGREES] = "alpha_f [deg]";
79  return result;
80 }
81 
82 std::map<Axes::Units, std::string> InitSpecAxis()
83 {
84  std::map<Axes::Units, std::string> result;
85  result[Axes::Units::NBINS] = "X [nbins]";
86  result[Axes::Units::RADIANS] = "alpha_i [rad]";
87  result[Axes::Units::DEGREES] = "alpha_i [deg]";
88  result[Axes::Units::QSPACE] = "Q [1/nm]";
89  result[Axes::Units::RQ4] = "Q [1/nm]";
90  return result;
91 }
92 
93 std::map<Axes::Units, std::string> InitSpecAxisQ()
94 {
95  std::map<Axes::Units, std::string> result;
96  result[Axes::Units::NBINS] = "X [nbins]";
97  result[Axes::Units::QSPACE] = "Q [1/nm]";
98  result[Axes::Units::RQ4] = "Q [1/nm]";
99  return result;
100 }
101 
102 // corner case: axis corresponding to the position
103 // across sample is accepts only bins and nanometers,
104 // but the units specified in dedicated unit
105 // converter correspond to inclination angular axis.
106 // For this reason depth axis map returns always
107 // nanometers except for bins.
108 std::map<Axes::Units, std::string> InitSampleDepthAxis()
109 {
110  std::map<Axes::Units, std::string> result;
111  result[Axes::Units::NBINS] = "Y [nbins]";
112  result[Axes::Units::RADIANS] = "Position [nm]";
113  result[Axes::Units::DEGREES] = "Position [nm]";
114  result[Axes::Units::QSPACE] = "Position [nm]";
115  return result;
116 }
117 
118 } // 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:18
std::map< Axes::Units, std::string > InitOffSpecularAxis1()
Definition: AxisNames.cpp:73
std::map< Axes::Units, std::string > InitRectangularAxis0()
Definition: AxisNames.cpp:41
std::map< Axes::Units, std::string > InitSpecAxisQ()
Definition: AxisNames.cpp:93
std::map< Axes::Units, std::string > InitRectangularAxis1()
Definition: AxisNames.cpp:52
std::map< Axes::Units, std::string > InitSphericalAxis0()
Definition: AxisNames.cpp:20
std::map< Axes::Units, std::string > InitSphericalAxis1()
Definition: AxisNames.cpp:30
std::map< Axes::Units, std::string > InitSpecAxis()
Definition: AxisNames.cpp:82
std::map< Axes::Units, std::string > InitOffSpecularAxis0()
Definition: AxisNames.cpp:65
std::map< Axes::Units, std::string > InitSampleDepthAxis()
Definition: AxisNames.cpp:108