Line | Branch | Exec | Source |
---|---|---|---|
1 | // This file is part of INSTINCT, the INS Toolkit for Integrated | ||
2 | // Navigation Concepts and Training by the Institute of Navigation of | ||
3 | // the University of Stuttgart, Germany. | ||
4 | // | ||
5 | // This Source Code Form is subject to the terms of the Mozilla Public | ||
6 | // License, v. 2.0. If a copy of the MPL was not distributed with this | ||
7 | // file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||
8 | |||
9 | #include "Units.hpp" | ||
10 | |||
11 | #include <cmath> | ||
12 | #include "util/Logger.hpp" | ||
13 | #include "Navigation/Transformations/Units.hpp" | ||
14 | |||
15 | namespace NAV::Units | ||
16 | { | ||
17 | |||
18 | ✗ | void to_json(json& j, const CovarianceAccelUnits& data) | |
19 | { | ||
20 | ✗ | j = to_string(data); | |
21 | ✗ | } | |
22 | ✗ | void from_json(const json& j, CovarianceAccelUnits& data) | |
23 | { | ||
24 | ✗ | if (!j.is_string()) | |
25 | { | ||
26 | ✗ | LOG_WARN("Could not parse '{}' into CovarianceAccelUnits. Consider resaving the flow", j.dump()); | |
27 | ✗ | return; | |
28 | } | ||
29 | ✗ | std::string str = j.get<std::string>(); | |
30 | ✗ | for (size_t i = 0; i < static_cast<size_t>(CovarianceAccelUnits::COUNT); i++) | |
31 | { | ||
32 | ✗ | auto enumItem = static_cast<CovarianceAccelUnits>(i); | |
33 | ✗ | if (str == to_string(enumItem)) | |
34 | { | ||
35 | ✗ | data = enumItem; | |
36 | ✗ | return; | |
37 | } | ||
38 | } | ||
39 | ✗ | } | |
40 | |||
41 | ✗ | void to_json(json& j, const CovarianceAngularVelocityUnits& data) | |
42 | { | ||
43 | ✗ | j = to_string(data); | |
44 | ✗ | } | |
45 | ✗ | void from_json(const json& j, CovarianceAngularVelocityUnits& data) | |
46 | { | ||
47 | ✗ | if (!j.is_string()) | |
48 | { | ||
49 | ✗ | LOG_WARN("Could not parse '{}' into CovarianceAngularVelocityUnits. Consider resaving the flow", j.dump()); | |
50 | ✗ | return; | |
51 | } | ||
52 | ✗ | std::string str = j.get<std::string>(); | |
53 | ✗ | for (size_t i = 0; i < static_cast<size_t>(CovarianceAngularVelocityUnits::COUNT); i++) | |
54 | { | ||
55 | ✗ | auto enumItem = static_cast<CovarianceAngularVelocityUnits>(i); | |
56 | ✗ | if (str == to_string(enumItem)) | |
57 | { | ||
58 | ✗ | data = enumItem; | |
59 | ✗ | return; | |
60 | } | ||
61 | } | ||
62 | ✗ | } | |
63 | |||
64 | ✗ | void to_json(json& j, const CovarianceClkPhaseDriftUnits& data) | |
65 | { | ||
66 | ✗ | j = to_string(data); | |
67 | ✗ | } | |
68 | ✗ | void from_json(const json& j, CovarianceClkPhaseDriftUnits& data) | |
69 | { | ||
70 | ✗ | if (!j.is_string()) | |
71 | { | ||
72 | ✗ | LOG_WARN("Could not parse '{}' into CovarianceClkPhaseDriftUnits. Consider resaving the flow", j.dump()); | |
73 | ✗ | return; | |
74 | } | ||
75 | ✗ | std::string str = j.get<std::string>(); | |
76 | ✗ | for (size_t i = 0; i < static_cast<size_t>(CovarianceClkPhaseDriftUnits::COUNT); i++) | |
77 | { | ||
78 | ✗ | auto enumItem = static_cast<CovarianceClkPhaseDriftUnits>(i); | |
79 | ✗ | if (str == to_string(enumItem)) | |
80 | { | ||
81 | ✗ | data = enumItem; | |
82 | ✗ | return; | |
83 | } | ||
84 | } | ||
85 | ✗ | } | |
86 | |||
87 | ✗ | void to_json(json& j, const CovarianceClkFrequencyDriftUnits& data) | |
88 | { | ||
89 | ✗ | j = to_string(data); | |
90 | ✗ | } | |
91 | ✗ | void from_json(const json& j, CovarianceClkFrequencyDriftUnits& data) | |
92 | { | ||
93 | ✗ | if (!j.is_string()) | |
94 | { | ||
95 | ✗ | LOG_WARN("Could not parse '{}' into CovarianceClkFrequencyDriftUnits. Consider resaving the flow", j.dump()); | |
96 | ✗ | return; | |
97 | } | ||
98 | ✗ | std::string str = j.get<std::string>(); | |
99 | ✗ | for (size_t i = 0; i < static_cast<size_t>(CovarianceClkFrequencyDriftUnits::COUNT); i++) | |
100 | { | ||
101 | ✗ | auto enumItem = static_cast<CovarianceClkFrequencyDriftUnits>(i); | |
102 | ✗ | if (str == to_string(enumItem)) | |
103 | { | ||
104 | ✗ | data = enumItem; | |
105 | ✗ | return; | |
106 | } | ||
107 | } | ||
108 | ✗ | } | |
109 | |||
110 | } // namespace NAV::Units | ||
111 | |||
112 | 42 | double NAV::convertUnit(const double& value, Units::CovarianceAccelUnits unit) | |
113 | { | ||
114 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
42 | switch (unit) |
115 | { | ||
116 | ✗ | case Units::CovarianceAccelUnits::m2_s3: | |
117 | ✗ | return value; | |
118 | 42 | case Units::CovarianceAccelUnits::m_sqrts3: | |
119 | 42 | return std::pow(value, 2); | |
120 | ✗ | case Units::CovarianceAccelUnits::COUNT: | |
121 | ✗ | break; | |
122 | } | ||
123 | ✗ | return value; // Covariance of the acceleration 𝜎_a due to user motion in horizontal and vertical component [m²/s³] | |
124 | } | ||
125 | |||
126 | ✗ | double NAV::convertUnit(const double& value, Units::CovarianceAngularVelocityUnits unit) | |
127 | { | ||
128 | ✗ | switch (unit) | |
129 | { | ||
130 | ✗ | case Units::CovarianceAngularVelocityUnits::rad2_s: | |
131 | ✗ | return value; | |
132 | ✗ | case Units::CovarianceAngularVelocityUnits::rad_sqrts: | |
133 | ✗ | return std::pow(value, 2); | |
134 | ✗ | case Units::CovarianceAngularVelocityUnits::deg2_s: | |
135 | ✗ | return deg2rad(deg2rad(value)); | |
136 | ✗ | case Units::CovarianceAngularVelocityUnits::deg_sqrts: | |
137 | ✗ | return std::pow(deg2rad(value), 2); | |
138 | ✗ | case Units::CovarianceAngularVelocityUnits::deg2s_min2: | |
139 | ✗ | return deg2rad(deg2rad(value)) / 3600.0; | |
140 | ✗ | case Units::CovarianceAngularVelocityUnits::degsqrts_min: | |
141 | ✗ | return std::pow(deg2rad(value) / 60.0, 2); | |
142 | ✗ | case Units::CovarianceAngularVelocityUnits::COUNT: | |
143 | ✗ | break; | |
144 | } | ||
145 | ✗ | return value; // Covariance of the acceleration 𝜎_a due to user motion in horizontal and vertical component [m²/s³] | |
146 | } | ||
147 | |||
148 | 29 | double NAV::convertUnit(const double& value, Units::CovarianceClkPhaseDriftUnits unit) | |
149 | { | ||
150 |
1/4✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29 | switch (unit) |
151 | { | ||
152 | 29 | case Units::CovarianceClkPhaseDriftUnits::m2_s: | |
153 | 29 | return value; | |
154 | ✗ | case Units::CovarianceClkPhaseDriftUnits::m_sqrts: | |
155 | ✗ | return std::pow(value, 2); | |
156 | ✗ | case Units::CovarianceClkPhaseDriftUnits::COUNT: | |
157 | ✗ | break; | |
158 | } | ||
159 | ✗ | return value; // Covariance of the clock phase drift [m²/s] | |
160 | } | ||
161 | |||
162 | 21 | double NAV::convertUnit(const double& value, Units::CovarianceClkFrequencyDriftUnits unit) | |
163 | { | ||
164 |
1/4✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
21 | switch (unit) |
165 | { | ||
166 | 21 | case Units::CovarianceClkFrequencyDriftUnits::m2_s3: | |
167 | 21 | return value; | |
168 | ✗ | case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3: | |
169 | ✗ | return std::pow(value, 2); | |
170 | ✗ | case Units::CovarianceClkFrequencyDriftUnits::COUNT: | |
171 | ✗ | break; | |
172 | } | ||
173 | ✗ | return value; // Covariance of the frequency phase drift [m²/s³] | |
174 | } | ||
175 | |||
176 | ✗ | std::string NAV::to_string(Units::CovarianceAccelUnits unit) | |
177 | { | ||
178 | ✗ | switch (unit) | |
179 | { | ||
180 | ✗ | case Units::CovarianceAccelUnits::m2_s3: | |
181 | ✗ | return "m^2/s^3"; | |
182 | ✗ | case Units::CovarianceAccelUnits::m_sqrts3: | |
183 | ✗ | return "m/√(s^3)"; | |
184 | ✗ | case Units::CovarianceAccelUnits::COUNT: | |
185 | ✗ | break; | |
186 | } | ||
187 | ✗ | return ""; | |
188 | } | ||
189 | |||
190 | ✗ | std::string NAV::to_string(Units::CovarianceAngularVelocityUnits unit) | |
191 | { | ||
192 | ✗ | switch (unit) | |
193 | { | ||
194 | ✗ | case Units::CovarianceAngularVelocityUnits::rad2_s: | |
195 | ✗ | return "rad^2/s"; | |
196 | ✗ | case Units::CovarianceAngularVelocityUnits::rad_sqrts: | |
197 | ✗ | return "rad/√(s)"; | |
198 | ✗ | case Units::CovarianceAngularVelocityUnits::deg2_s: | |
199 | ✗ | return "deg^2/s"; | |
200 | ✗ | case Units::CovarianceAngularVelocityUnits::deg_sqrts: | |
201 | ✗ | return "deg/√(s)"; | |
202 | ✗ | case Units::CovarianceAngularVelocityUnits::deg2s_min2: | |
203 | ✗ | return "deg^2 s/min^2"; | |
204 | ✗ | case Units::CovarianceAngularVelocityUnits::degsqrts_min: | |
205 | ✗ | return "deg √(s)/min"; | |
206 | ✗ | case Units::CovarianceAngularVelocityUnits::COUNT: | |
207 | ✗ | break; | |
208 | } | ||
209 | ✗ | return ""; | |
210 | } | ||
211 | |||
212 | ✗ | std::string NAV::to_string(Units::CovarianceClkPhaseDriftUnits unit) | |
213 | { | ||
214 | ✗ | switch (unit) | |
215 | { | ||
216 | ✗ | case Units::CovarianceClkPhaseDriftUnits::m2_s: | |
217 | ✗ | return "m^2/s"; | |
218 | ✗ | case Units::CovarianceClkPhaseDriftUnits::m_sqrts: | |
219 | ✗ | return "m/√s"; | |
220 | ✗ | case Units::CovarianceClkPhaseDriftUnits::COUNT: | |
221 | ✗ | break; | |
222 | } | ||
223 | ✗ | return ""; | |
224 | } | ||
225 | |||
226 | ✗ | std::string NAV::to_string(Units::CovarianceClkFrequencyDriftUnits unit) | |
227 | { | ||
228 | ✗ | switch (unit) | |
229 | { | ||
230 | ✗ | case Units::CovarianceClkFrequencyDriftUnits::m2_s3: | |
231 | ✗ | return "m^2/s^3"; | |
232 | ✗ | case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3: | |
233 | ✗ | return "m/√(s^3)"; | |
234 | ✗ | case Units::CovarianceClkFrequencyDriftUnits::COUNT: | |
235 | ✗ | break; | |
236 | } | ||
237 | ✗ | return ""; | |
238 | } | ||
239 |