INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/SystemModel/Units.cpp
Date: 2025-06-02 15:19:59
Exec Total Coverage
Lines: 12 144 8.3%
Functions: 3 16 18.8%
Branches: 3 152 2.0%

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