INSTINCT Code Coverage Report


Directory: src/
File: Nodes/DataProvider/GNSS/FileReader/RtklibPosFile.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 250 324 77.2%
Functions: 15 20 75.0%
Branches: 624 1176 53.1%

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 "RtklibPosFile.hpp"
10
11 #include "util/Logger.hpp"
12 #include "Navigation/Transformations/CoordinateFrames.hpp"
13 #include "Navigation/Transformations/Units.hpp"
14 #include "util/Time/TimeBase.hpp"
15 #include "util/StringUtil.hpp"
16
17 #include "internal/NodeManager.hpp"
18 namespace nm = NAV::NodeManager;
19 #include "internal/FlowManager.hpp"
20
21 #include "NodeData/GNSS/RtklibPosObs.hpp"
22
23 126 NAV::RtklibPosFile::RtklibPosFile()
24
3/6
✓ Branch 1 taken 126 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 126 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 126 times.
✗ Branch 9 not taken.
126 : Node(typeStatic())
25 {
26 LOG_TRACE("{}: called", name);
27
28 126 _hasConfig = true;
29 126 _guiConfigDefaultWindowSize = { 380, 290 };
30
31
4/8
✓ Branch 1 taken 126 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 126 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 126 times.
✓ Branch 9 taken 126 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
378 nm::CreateOutputPin(this, "RtklibPosObs", Pin::Type::Flow, { NAV::RtklibPosObs::type() }, &RtklibPosFile::pollData);
32 252 }
33
34 276 NAV::RtklibPosFile::~RtklibPosFile()
35 {
36 LOG_TRACE("{}: called", nameId());
37 276 }
38
39 238 std::string NAV::RtklibPosFile::typeStatic()
40 {
41
1/2
✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
476 return "RtklibPosFile";
42 }
43
44 std::string NAV::RtklibPosFile::type() const
45 {
46 return typeStatic();
47 }
48
49 112 std::string NAV::RtklibPosFile::category()
50 {
51
1/2
✓ Branch 1 taken 112 times.
✗ Branch 2 not taken.
224 return "Data Provider";
52 }
53
54 void NAV::RtklibPosFile::guiConfig()
55 {
56 if (auto res = FileReader::guiConfig(".pos,.*", { ".pos" }, size_t(id), nameId()))
57 {
58 LOG_DEBUG("{}: Path changed to {}", nameId(), _path);
59 flow::ApplyChanges();
60 if (res == FileReader::PATH_CHANGED)
61 {
62 doReinitialize();
63 }
64 else
65 {
66 doDeinitialize();
67 }
68 }
69
70 /// Header info
71 if (ImGui::BeginTable(fmt::format("##RtklibPos ({})", id.AsPointer()).c_str(), 4,
72 ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_NoHostExtendX))
73 {
74 ImGui::TableSetupColumn("Basic", ImGuiTableColumnFlags_WidthFixed);
75 ImGui::TableSetupColumn("LLA", ImGuiTableColumnFlags_WidthFixed);
76 ImGui::TableSetupColumn("XYZ", ImGuiTableColumnFlags_WidthFixed);
77 ImGui::TableSetupColumn("Velocity", ImGuiTableColumnFlags_WidthFixed);
78 ImGui::TableHeadersRow();
79
80 auto TextColoredIfExists = [this](int index, const char* displayText, const char* searchText, bool alwaysNormal = false) {
81 ImGui::TableSetColumnIndex(index);
82 if (alwaysNormal || std::ranges::find_if(_headerColumns, [&searchText](const std::string& header) { return header.starts_with(searchText); }) != _headerColumns.end())
83 {
84 ImGui::TextUnformatted(displayText);
85 }
86 else
87 {
88 ImGui::TextDisabled("%s", displayText);
89 }
90 };
91
92 ImGui::TableNextRow();
93 TextColoredIfExists(0, "Date", "Date");
94 TextColoredIfExists(1, "latitude(deg)", "latitude(deg)");
95 TextColoredIfExists(2, "x-ecef(m)", "x-ecef(m)");
96 TextColoredIfExists(3, "vn(m/s)", "vn(m/s)");
97 ImGui::TableNextRow();
98 TextColoredIfExists(0, "Time", "Time");
99 TextColoredIfExists(1, "longitude(deg)", "longitude(deg)");
100 TextColoredIfExists(2, "y-ecef(m)", "y-ecef(m)");
101 TextColoredIfExists(3, "ve(m/s)", "ve(m/s)");
102 ImGui::TableNextRow();
103 TextColoredIfExists(0, "age(s)", "age(s)");
104 TextColoredIfExists(1, "height(m)", "height(m)");
105 TextColoredIfExists(2, "z-ecef(m)", "z-ecef(m)");
106 TextColoredIfExists(3, "vu(m/s)", "vu(m/s)");
107 ImGui::TableNextRow();
108 TextColoredIfExists(0, "ratio", "ratio");
109 TextColoredIfExists(1, "sdn(m)", "sdn(m)");
110 TextColoredIfExists(2, "sdx(m)", "sdx(m)");
111 TextColoredIfExists(3, "sdvn", "sdvn");
112 ImGui::TableNextRow();
113 TextColoredIfExists(0, "Q", "Q");
114 TextColoredIfExists(1, "sde(m)", "sde(m)");
115 TextColoredIfExists(2, "sdy(m)", "sdy(m)");
116 TextColoredIfExists(3, "sdve", "sdve");
117 ImGui::TableNextRow();
118 TextColoredIfExists(0, "ns", "ns");
119 TextColoredIfExists(1, "sdu(m)", "sdu(m)");
120 TextColoredIfExists(2, "sdz(m)", "sdz(m)");
121 TextColoredIfExists(3, "sdvu", "sdvu");
122 ImGui::TableNextRow();
123 TextColoredIfExists(1, "sdne(m)", "sdne(m)");
124 TextColoredIfExists(2, "sdxy(m)", "sdxy(m)");
125 TextColoredIfExists(3, "sdvne", "sdvne");
126 ImGui::TableNextRow();
127 TextColoredIfExists(1, "sdeu(m)", "sdeu(m)");
128 TextColoredIfExists(2, "sdyz(m)", "sdyz(m)");
129 TextColoredIfExists(3, "sdveu", "sdveu");
130 ImGui::TableNextRow();
131 TextColoredIfExists(1, "sdun(m)", "sdun(m)");
132 TextColoredIfExists(2, "sdzx(m)", "sdzx(m)");
133 TextColoredIfExists(3, "sdvun", "sdvun");
134
135 ImGui::EndTable();
136 }
137 }
138
139 [[nodiscard]] json NAV::RtklibPosFile::save() const
140 {
141 LOG_TRACE("{}: called", nameId());
142
143 json j;
144
145 j["FileReader"] = FileReader::save();
146
147 return j;
148 }
149
150 14 void NAV::RtklibPosFile::restore(json const& j)
151 {
152 LOG_TRACE("{}: called", nameId());
153
154
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 if (j.contains("FileReader"))
155 {
156 14 FileReader::restore(j.at("FileReader"));
157 }
158 14 }
159
160 14 bool NAV::RtklibPosFile::initialize()
161 {
162 LOG_TRACE("{}: called", nameId());
163
164 14 return FileReader::initialize();
165 }
166
167 13 void NAV::RtklibPosFile::deinitialize()
168 {
169 LOG_TRACE("{}: called", nameId());
170
171 13 FileReader::deinitialize();
172 13 }
173
174 26 bool NAV::RtklibPosFile::resetNode()
175 {
176 26 FileReader::resetReader();
177
178 26 return true;
179 }
180
181 367 std::shared_ptr<const NAV::NodeData> NAV::RtklibPosFile::pollData()
182 {
183
1/2
✓ Branch 1 taken 365 times.
✗ Branch 2 not taken.
367 auto obs = std::make_shared<RtklibPosObs>();
184
185 // Read line
186 365 std::string line;
187
1/2
✓ Branch 1 taken 363 times.
✗ Branch 2 not taken.
361 getline(line);
188 // Remove any starting non text characters
189
2/4
✓ Branch 1 taken 364 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 364 times.
✗ Branch 8 not taken.
712 line.erase(line.begin(), std::ranges::find_if(line, [](int ch) { return std::isgraph(ch); }));
190
191
2/2
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 353 times.
364 if (line.empty())
192 {
193 12 return nullptr;
194 }
195
196
1/2
✓ Branch 1 taken 352 times.
✗ Branch 2 not taken.
353 std::istringstream lineStream(line);
197 352 std::string cell;
198
199 350 TimeSystem timeSystem = GPST;
200 350 std::optional<uint16_t> year;
201 350 std::optional<uint16_t> month;
202 350 std::optional<uint16_t> day;
203 350 std::optional<int32_t> hour;
204 350 std::optional<uint16_t> minute;
205 350 std::optional<long double> second = 0L;
206 350 std::optional<uint16_t> gpsWeek;
207 350 std::optional<long double> gpsToW;
208
1/2
✓ Branch 1 taken 351 times.
✗ Branch 2 not taken.
350 Eigen::Vector3d lla_position{ std::nan(""), std::nan(""), std::nan("") };
209
1/2
✓ Branch 1 taken 353 times.
✗ Branch 2 not taken.
351 Eigen::Vector3d e_position{ std::nan(""), std::nan(""), std::nan("") };
210
1/2
✓ Branch 1 taken 354 times.
✗ Branch 2 not taken.
353 Eigen::Vector3d n_velocity{ std::nan(""), std::nan(""), std::nan("") };
211
1/2
✓ Branch 1 taken 353 times.
✗ Branch 2 not taken.
354 Eigen::Vector3d e_velocity{ std::nan(""), std::nan(""), std::nan("") };
212
213
3/6
✓ Branch 1 taken 351 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 352 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 346 times.
✗ Branch 8 not taken.
353 Eigen::Matrix3d e_posVar = Eigen::Matrix3d::Zero() * std::nan("");
214
3/6
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 352 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 350 times.
✗ Branch 8 not taken.
346 Eigen::Matrix3d e_velVar = Eigen::Matrix3d::Zero() * std::nan("");
215
3/6
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 353 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 352 times.
✗ Branch 8 not taken.
350 Eigen::Matrix3d n_posVar = Eigen::Matrix3d::Zero() * std::nan("");
216
3/6
✓ Branch 1 taken 353 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 353 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 352 times.
✗ Branch 8 not taken.
352 Eigen::Matrix3d n_velVar = Eigen::Matrix3d::Zero() * std::nan("");
217
218 try
219 {
220
2/2
✓ Branch 5 taken 8355 times.
✓ Branch 6 taken 346 times.
8681 for (const auto& column : _headerColumns)
221 {
222
4/6
✓ Branch 1 taken 8303 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8322 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8317 times.
✓ Branch 7 taken 5 times.
8316 if (lineStream >> cell)
223 {
224 // Remove any trailing non text characters
225
2/4
✓ Branch 3 taken 8395 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 8340 times.
✗ Branch 8 not taken.
65525 cell.erase(std::ranges::find_if(cell, [](int ch) { return std::iscntrl(ch); }), cell.end());
226
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 8355 times.
8340 if (cell.empty())
227 {
228 continue;
229 }
230
231 // % GPST latitude(deg) longitude(deg) ...
232 // 2120 216180.000 XX.XXXXXXXXX ...
233
3/4
✓ Branch 1 taken 8350 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8348 times.
8355 if (column == "GpsWeek")
234 {
235
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 gpsWeek = static_cast<uint16_t>(std::stoul(cell));
236 }
237
3/4
✓ Branch 1 taken 8328 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8326 times.
8348 else if (column == "GpsToW")
238 {
239
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 gpsToW = std::stold(cell);
240 }
241 // % GPST latitude(deg) longitude(deg) ...
242 // 2020/08/25 12:03:00.000 XX.XXXXXXXXX ...
243 // % UTC latitude(deg) longitude(deg) ...
244 // 2020/08/25 12:02:42.000 XX.XXXXXXXXX ...
245
2/2
✓ Branch 1 taken 346 times.
✓ Branch 2 taken 7948 times.
8326 else if (column.starts_with("Date"))
246 {
247
2/2
✓ Branch 1 taken 341 times.
✓ Branch 2 taken 6 times.
346 timeSystem = column.ends_with("-GPST") ? GPST : UTC;
248
249
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 351 times.
✗ Branch 5 not taken.
346 auto ymd = str::split(cell, "/");
250
1/2
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
349 if (ymd.size() == 3)
251 {
252
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
349 year = static_cast<uint16_t>(std::stoi(ymd.at(0)));
253
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 335 times.
✗ Branch 5 not taken.
343 month = static_cast<uint16_t>(std::stoi(ymd.at(1)));
254
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
345 day = static_cast<uint16_t>(std::stoi(ymd.at(2)));
255 }
256 349 }
257
2/2
✓ Branch 1 taken 347 times.
✓ Branch 2 taken 7661 times.
7948 else if (column.starts_with("Time"))
258 {
259
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 350 times.
✗ Branch 5 not taken.
347 auto hms = str::split(cell, ":");
260
1/2
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
351 if (hms.size() == 3)
261 {
262
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
349 hour = static_cast<uint16_t>(std::stoi(hms.at(0)));
263
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 343 times.
342 if (column.ends_with("-JST")) { *hour -= 9; }
264
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 times.
✗ Branch 5 not taken.
345 minute = static_cast<uint16_t>(std::stoi(hms.at(1)));
265
2/4
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 348 times.
✗ Branch 5 not taken.
349 second = std::stold(hms.at(2));
266 }
267 348 }
268
6/10
✓ Branch 1 taken 7642 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7642 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7655 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7655 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7653 times.
7661 else if (column == "x-ecef(m)" || column == "x-ecef")
269 {
270
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_position.x() = std::stod(cell);
271 }
272
7/10
✓ Branch 1 taken 7640 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7643 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7644 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✓ Branch 9 taken 7634 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7639 times.
7653 else if (column == "y-ecef(m)" || column == "y-ecef")
273 {
274
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_position.y() = std::stod(cell);
275 }
276
7/10
✓ Branch 1 taken 7646 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7641 times.
✓ Branch 4 taken 5 times.
✓ Branch 6 taken 7643 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7645 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7646 times.
7639 else if (column == "z-ecef(m)" || column == "z-ecef")
277 {
278
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_position.z() = std::stod(cell);
279 }
280
7/10
✓ Branch 1 taken 7636 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7300 times.
✓ Branch 4 taken 336 times.
✓ Branch 6 taken 7312 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7314 times.
✓ Branch 10 taken 344 times.
✓ Branch 11 taken 7304 times.
7646 else if (column == "latitude(deg)" || column == "latitude")
281 {
282
3/4
✓ Branch 1 taken 350 times.
✓ Branch 2 taken 1 times.
✓ Branch 5 taken 335 times.
✗ Branch 6 not taken.
344 lla_position(0) = deg2rad(std::stod(cell));
283 }
284
7/10
✓ Branch 1 taken 7310 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6966 times.
✓ Branch 4 taken 344 times.
✓ Branch 6 taken 6953 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 6957 times.
✓ Branch 10 taken 348 times.
✓ Branch 11 taken 6949 times.
7304 else if (column == "longitude(deg)" || column == "longitude")
285 {
286
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 342 times.
✗ Branch 6 not taken.
348 lla_position(1) = deg2rad(std::stod(cell));
287 }
288
7/10
✓ Branch 1 taken 6967 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6626 times.
✓ Branch 4 taken 341 times.
✓ Branch 6 taken 6623 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 6623 times.
✓ Branch 10 taken 349 times.
✓ Branch 11 taken 6615 times.
6949 else if (column == "height(m)" || column == "height")
289 {
290
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
349 lla_position(2) = std::stod(cell);
291 }
292
3/4
✓ Branch 1 taken 6337 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 347 times.
✓ Branch 4 taken 5990 times.
6615 else if (column == "Q")
293 {
294
1/2
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
347 obs->Q = static_cast<uint8_t>(std::stoul(cell));
295 }
296
3/4
✓ Branch 1 taken 6264 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 352 times.
✓ Branch 4 taken 5912 times.
5990 else if (column == "ns")
297 {
298
1/2
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
352 obs->ns = static_cast<uint8_t>(std::stoul(cell));
299 }
300
7/10
✓ Branch 1 taken 5922 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5915 times.
✓ Branch 4 taken 7 times.
✓ Branch 6 taken 5916 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5920 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5921 times.
5912 else if (column == "sdx(m)" || column == "sdx")
301 {
302
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_posVar(0, 0) = std::pow(std::stod(cell), 2);
303 }
304
6/10
✓ Branch 1 taken 5918 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5918 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5925 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5929 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5923 times.
5921 else if (column == "sdy(m)" || column == "sdy")
305 {
306
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_posVar(1, 1) = std::pow(std::stod(cell), 2);
307 }
308
7/10
✓ Branch 1 taken 5921 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5920 times.
✓ Branch 4 taken 1 times.
✓ Branch 6 taken 5910 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5912 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5909 times.
5923 else if (column == "sdz(m)" || column == "sdz")
309 {
310
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_posVar(2, 2) = std::pow(std::stod(cell), 2);
311 }
312
7/10
✓ Branch 1 taken 5910 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5565 times.
✓ Branch 4 taken 345 times.
✓ Branch 6 taken 5567 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5569 times.
✓ Branch 10 taken 349 times.
✓ Branch 11 taken 5563 times.
5909 else if (column == "sdn(m)" || column == "sdn")
313 {
314
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 343 times.
✗ Branch 6 not taken.
349 n_posVar(0, 0) = std::pow(std::stod(cell), 2);
315 }
316
7/10
✓ Branch 1 taken 5568 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5224 times.
✓ Branch 4 taken 344 times.
✓ Branch 6 taken 5220 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5220 times.
✓ Branch 10 taken 348 times.
✓ Branch 11 taken 5216 times.
5563 else if (column == "sde(m)" || column == "sde")
317 {
318
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 345 times.
✗ Branch 6 not taken.
348 n_posVar(1, 1) = std::pow(std::stod(cell), 2);
319 }
320
7/10
✓ Branch 1 taken 5227 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4882 times.
✓ Branch 4 taken 345 times.
✓ Branch 6 taken 4883 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4884 times.
✓ Branch 10 taken 350 times.
✓ Branch 11 taken 4878 times.
5216 else if (column == "sdu(m)" || column == "sdu")
321 {
322
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 348 times.
✗ Branch 6 not taken.
350 n_posVar(2, 2) = std::pow(std::stod(cell), 2);
323 }
324
8/10
✓ Branch 1 taken 4874 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4871 times.
✓ Branch 4 taken 3 times.
✓ Branch 6 taken 4876 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 4875 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4877 times.
4878 else if (column == "sdxy(m)" || column == "sdxy")
325 {
326
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(0, 1) = std::stod(cell);
327
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_posVar(0, 1) = gcem::sgn(e_posVar(0, 1)) * std::pow(e_posVar(0, 1), 2);
328
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(1, 0) = -e_posVar(0, 1);
329 }
330
8/10
✓ Branch 1 taken 4887 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4885 times.
✓ Branch 4 taken 2 times.
✓ Branch 6 taken 4886 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 4884 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4886 times.
4877 else if (column == "sdyz(m)" || column == "sdyz")
331 {
332
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(1, 2) = std::stod(cell);
333
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_posVar(1, 2) = gcem::sgn(e_posVar(1, 2)) * std::pow(e_posVar(1, 2), 2);
334
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(2, 1) = -e_posVar(1, 2);
335 }
336
6/10
✓ Branch 1 taken 4873 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4877 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4875 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4879 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4869 times.
4886 else if (column == "sdzx(m)" || column == "sdzx")
337 {
338
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(2, 0) = std::stod(cell);
339
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_posVar(2, 0) = gcem::sgn(e_posVar(2, 0)) * std::pow(e_posVar(2, 0), 2);
340
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_posVar(0, 2) = -e_posVar(2, 0);
341 }
342
7/10
✓ Branch 1 taken 4878 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4538 times.
✓ Branch 4 taken 340 times.
✓ Branch 6 taken 4537 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4538 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 4530 times.
4869 else if (column == "sdne(m)" || column == "sdne")
343 {
344
2/4
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
347 n_posVar(0, 1) = std::stod(cell);
345
3/6
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 352 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 352 times.
✗ Branch 10 not taken.
346 n_posVar(0, 1) = gcem::sgn(n_posVar(0, 1)) * std::pow(n_posVar(0, 1), 2);
346
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 350 times.
✗ Branch 5 not taken.
352 n_posVar(1, 0) = -n_posVar(0, 1);
347 }
348
7/10
✓ Branch 1 taken 4538 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4188 times.
✓ Branch 4 taken 350 times.
✓ Branch 6 taken 4190 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4190 times.
✓ Branch 10 taken 351 times.
✓ Branch 11 taken 4189 times.
4530 else if (column == "sdeu(m)" || column == "sdeu")
349 {
350
2/4
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 times.
✗ Branch 5 not taken.
351 n_posVar(1, 2) = std::stod(cell);
351
3/6
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 350 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 349 times.
✗ Branch 10 not taken.
347 n_posVar(1, 2) = gcem::sgn(n_posVar(1, 2)) * std::pow(n_posVar(1, 2), 2);
352
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 348 times.
✗ Branch 5 not taken.
349 n_posVar(2, 1) = -n_posVar(1, 2);
353 }
354
7/10
✓ Branch 1 taken 4182 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3832 times.
✓ Branch 4 taken 350 times.
✓ Branch 6 taken 3830 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3831 times.
✓ Branch 10 taken 351 times.
✓ Branch 11 taken 3829 times.
4189 else if (column == "sdun(m)" || column == "sdun")
355 {
356
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 348 times.
✗ Branch 5 not taken.
351 n_posVar(2, 0) = std::stod(cell);
357
3/6
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 350 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 352 times.
✗ Branch 10 not taken.
348 n_posVar(2, 0) = gcem::sgn(n_posVar(2, 0)) * std::pow(n_posVar(2, 0), 2);
358
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 349 times.
✗ Branch 5 not taken.
352 n_posVar(0, 2) = -n_posVar(2, 0);
359 }
360
7/10
✓ Branch 1 taken 3831 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3485 times.
✓ Branch 4 taken 346 times.
✓ Branch 6 taken 3490 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3490 times.
✓ Branch 10 taken 351 times.
✓ Branch 11 taken 3485 times.
3829 else if (column == "age(s)" || column == "age")
361 {
362
1/2
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
351 obs->age = std::stod(cell);
363 }
364
3/4
✓ Branch 1 taken 3488 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 351 times.
✓ Branch 4 taken 3137 times.
3485 else if (column == "ratio")
365 {
366
1/2
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
351 obs->ratio = std::stod(cell);
367 }
368
7/10
✓ Branch 1 taken 3147 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2801 times.
✓ Branch 4 taken 346 times.
✓ Branch 6 taken 2803 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2804 times.
✓ Branch 10 taken 348 times.
✓ Branch 11 taken 2801 times.
3137 else if (column == "vn(m/s)" || column == "vn")
369 {
370
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 342 times.
✗ Branch 5 not taken.
348 n_velocity(0) = std::stod(cell);
371 }
372
7/10
✓ Branch 1 taken 2798 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2456 times.
✓ Branch 4 taken 342 times.
✓ Branch 6 taken 2448 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2450 times.
✓ Branch 10 taken 344 times.
✓ Branch 11 taken 2446 times.
2801 else if (column == "ve(m/s)" || column == "ve")
373 {
374
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 341 times.
✗ Branch 5 not taken.
344 n_velocity(1) = std::stod(cell);
375 }
376
7/10
✓ Branch 1 taken 2445 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2099 times.
✓ Branch 4 taken 346 times.
✓ Branch 6 taken 2098 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2098 times.
✓ Branch 10 taken 346 times.
✓ Branch 11 taken 2098 times.
2446 else if (column == "vu(m/s)" || column == "vu")
377 {
378
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 341 times.
✗ Branch 5 not taken.
346 n_velocity(2) = -std::stod(cell);
379 }
380
7/10
✓ Branch 1 taken 2098 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2096 times.
✓ Branch 4 taken 2 times.
✓ Branch 6 taken 2097 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2098 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2097 times.
2098 else if (column == "vx(m/s)" || column == "vx")
381 {
382
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velocity(0) = std::stod(cell);
383 }
384
6/10
✓ Branch 1 taken 2098 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2098 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2099 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2099 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2097 times.
2097 else if (column == "vy(m/s)" || column == "vy")
385 {
386
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velocity(1) = std::stod(cell);
387 }
388
7/10
✓ Branch 1 taken 2094 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2093 times.
✓ Branch 4 taken 1 times.
✓ Branch 6 taken 2095 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2096 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2094 times.
2097 else if (column == "vz(m/s)" || column == "vz")
389 {
390
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velocity(2) = std::stod(cell);
391 }
392
7/10
✓ Branch 1 taken 2095 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2095 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2097 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 345 times.
✓ Branch 9 taken 1752 times.
✓ Branch 10 taken 345 times.
✓ Branch 11 taken 1752 times.
2094 else if (column == "sdvn(m/s)" || column == "sdvn")
393 {
394
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 346 times.
✗ Branch 6 not taken.
345 n_velVar(0, 0) = std::pow(std::stod(cell), 2);
395 }
396
7/10
✓ Branch 1 taken 1751 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1752 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1750 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 347 times.
✓ Branch 9 taken 1403 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 1402 times.
1752 else if (column == "sdve(m/s)" || column == "sdve")
397 {
398
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 343 times.
✗ Branch 6 not taken.
347 n_velVar(1, 1) = std::pow(std::stod(cell), 2);
399 }
400
7/10
✓ Branch 1 taken 1399 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1400 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1399 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 346 times.
✓ Branch 9 taken 1053 times.
✓ Branch 10 taken 346 times.
✓ Branch 11 taken 1052 times.
1402 else if (column == "sdvu(m/s)" || column == "sdvu")
401 {
402
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 345 times.
✗ Branch 6 not taken.
346 n_velVar(2, 2) = std::pow(std::stod(cell), 2);
403 }
404
7/10
✓ Branch 1 taken 1050 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1050 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1051 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 345 times.
✓ Branch 9 taken 706 times.
✓ Branch 10 taken 346 times.
✓ Branch 11 taken 705 times.
1052 else if (column == "sdvne(m/s)" || column == "sdvne")
405 {
406
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 343 times.
✗ Branch 5 not taken.
346 n_velVar(0, 1) = std::stod(cell);
407
3/6
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 347 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 347 times.
✗ Branch 10 not taken.
343 n_velVar(0, 1) = gcem::sgn(n_velVar(0, 1)) * std::pow(n_velVar(0, 1), 2);
408
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
347 n_velVar(1, 0) = -n_velVar(0, 1);
409 }
410
7/10
✓ Branch 1 taken 705 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 705 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 705 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 345 times.
✓ Branch 9 taken 360 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 358 times.
705 else if (column == "sdveu(m/s)" || column == "sdveu")
411 {
412
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 345 times.
✗ Branch 5 not taken.
347 n_velVar(1, 2) = std::stod(cell);
413
3/6
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 348 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 344 times.
✗ Branch 10 not taken.
345 n_velVar(1, 2) = gcem::sgn(n_velVar(1, 2)) * std::pow(n_velVar(1, 2), 2);
414
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 times.
✗ Branch 5 not taken.
344 n_velVar(2, 1) = -n_velVar(1, 2);
415 }
416
7/10
✓ Branch 1 taken 360 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 361 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 361 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 349 times.
✓ Branch 9 taken 12 times.
✓ Branch 10 taken 349 times.
✓ Branch 11 taken 11 times.
358 else if (column == "sdvun(m/s)" || column == "sdvun")
417 {
418
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 345 times.
✗ Branch 5 not taken.
349 n_velVar(2, 0) = std::stod(cell);
419
3/6
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 344 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 348 times.
✗ Branch 10 not taken.
345 n_velVar(2, 0) = gcem::sgn(n_velVar(2, 0)) * std::pow(n_velVar(2, 0), 2);
420
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 350 times.
✗ Branch 5 not taken.
348 n_velVar(0, 2) = -n_velVar(2, 0);
421 }
422
7/10
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 10 times.
11 else if (column == "sdvx(m/s)" || column == "sdvx")
423 {
424
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_velVar(0, 0) = std::pow(std::stod(cell), 2);
425 }
426
7/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 8 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 8 times.
10 else if (column == "sdvy(m/s)" || column == "sdvy")
427 {
428
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_velVar(1, 1) = std::pow(std::stod(cell), 2);
429 }
430
7/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 6 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 6 times.
8 else if (column == "sdvz(m/s)" || column == "sdvz")
431 {
432
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 e_velVar(2, 2) = std::pow(std::stod(cell), 2);
433 }
434
7/10
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 4 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4 times.
6 else if (column == "sdvxy(m/s)" || column == "sdvxy")
435 {
436
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(0, 1) = std::stod(cell);
437
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_velVar(0, 1) = gcem::sgn(e_velVar(0, 1)) * std::pow(e_velVar(0, 1), 2);
438
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(1, 0) = -e_velVar(0, 1);
439 }
440
7/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2 times.
4 else if (column == "sdvyz(m/s)" || column == "sdvyz")
441 {
442
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(1, 2) = std::stod(cell);
443
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_velVar(1, 2) = gcem::sgn(e_velVar(1, 2)) * std::pow(e_velVar(1, 2), 2);
444
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(2, 1) = -e_velVar(1, 2);
445 }
446
5/10
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
2 else if (column == "sdvzx(m/s)" || column == "sdvzx")
447 {
448
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(2, 0) = std::stod(cell);
449
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
2 e_velVar(2, 0) = gcem::sgn(e_velVar(2, 0)) * std::pow(e_velVar(2, 0), 2);
450
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 e_velVar(0, 2) = -e_velVar(2, 0);
451 }
452 }
453 }
454 }
455 1 catch (...)
456 {
457 1 return nullptr;
458 1 }
459
460
5/6
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 351 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 351 times.
346 if (gpsWeek.has_value() && gpsToW.has_value())
461 {
462
3/6
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
2 obs->insTime = InsTime(0, gpsWeek.value(), gpsToW.value());
463 }
464
2/4
✓ Branch 2 taken 347 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 348 times.
✗ Branch 6 not taken.
697 else if (year.has_value() && month.has_value() && day.has_value()
465
6/10
✓ Branch 0 taken 346 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 346 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 343 times.
✓ Branch 7 taken 2 times.
✓ Branch 9 taken 344 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 344 times.
✗ Branch 12 not taken.
693 && hour.has_value() && minute.has_value() && second.has_value())
466 {
467
3/6
✓ Branch 1 taken 340 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 342 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 348 times.
✗ Branch 8 not taken.
338 obs->insTime = InsTime(year.value(), month.value(), day.value(),
468
4/8
✓ Branch 1 taken 336 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 340 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 341 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 338 times.
✗ Branch 11 not taken.
344 hour.value(), minute.value(), second.value(),
469 timeSystem);
470 }
471
472
8/12
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 344 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 344 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
343 if (!e_position.hasNaN() && !e_posVar.hasNaN()) { obs->setPositionAndStdDev_e(e_position, e_posVar); }
473
7/12
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 350 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 346 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 346 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 343 times.
✓ Branch 11 taken 3 times.
✓ Branch 14 taken 351 times.
✗ Branch 15 not taken.
344 else if (!lla_position.hasNaN() && !n_posVar.hasNaN()) { obs->setPositionAndStdDev_lla(lla_position, n_posVar); }
474
0/6
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
3 else if (!e_position.hasNaN()) { obs->setPosition_e(e_position); }
475 else if (!lla_position.hasNaN()) { obs->setPosition_lla(lla_position); }
476
477
8/12
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 341 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 341 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
353 if (!e_velocity.hasNaN() && !e_velVar.hasNaN()) { obs->setVelocityAndStdDev_e(e_velocity, e_velVar); }
478
8/12
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 344 times.
✓ Branch 4 taken 4 times.
✓ Branch 6 taken 345 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 345 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 345 times.
✓ Branch 11 taken 4 times.
✓ Branch 14 taken 348 times.
✗ Branch 15 not taken.
343 if (!n_velocity.hasNaN() && !n_velVar.hasNaN()) { obs->setVelocityAndStdDev_n(n_velocity, n_velVar); }
479
4/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
4 else if (!e_velocity.hasNaN()) { obs->setVelocity_e(e_velocity); }
480
2/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
2 else if (!n_velocity.hasNaN()) { obs->setVelocity_n(n_velocity); }
481
482
7/10
✓ Branch 1 taken 339 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 337 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 337 times.
352 if (!e_velVar.hasNaN() && !e_posVar.hasNaN())
483 {
484
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 Eigen::MatrixXd cov = Eigen::MatrixXd::Zero(6, 6);
485
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 cov.block<3, 3>(0, 0) = e_posVar;
486
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 cov.block<3, 3>(3, 3) = e_velVar;
487
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 obs->setPosVelCovarianceMatrix_e(cov);
488 2 }
489
7/10
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 342 times.
✓ Branch 4 taken 2 times.
✓ Branch 6 taken 347 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 347 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 2 times.
337 else if (!n_velVar.hasNaN() && !n_posVar.hasNaN())
490 {
491
2/4
✓ Branch 1 taken 341 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 335 times.
✗ Branch 5 not taken.
347 Eigen::MatrixXd cov = Eigen::MatrixXd::Zero(6, 6);
492
2/4
✓ Branch 1 taken 336 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 333 times.
✗ Branch 5 not taken.
335 cov.block<3, 3>(0, 0) = n_posVar;
493
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
333 cov.block<3, 3>(3, 3) = n_velVar;
494
1/2
✓ Branch 2 taken 349 times.
✗ Branch 3 not taken.
344 obs->setPosVelCovarianceMatrix_n(cov);
495 349 }
496
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
2 else if (!e_posVar.hasNaN())
497 {
498 obs->setPosCovarianceMatrix_e(e_posVar);
499 }
500
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
2 else if (!n_posVar.hasNaN())
501 {
502
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 obs->setPosCovarianceMatrix_n(n_posVar);
503 }
504
505
1/2
✓ Branch 2 taken 353 times.
✗ Branch 3 not taken.
350 invokeCallbacks(OUTPUT_PORT_INDEX_RTKLIB_POS_OBS, obs);
506 351 return obs;
507 361 }
508
509 14 NAV::FileReader::FileType NAV::RtklibPosFile::determineFileType()
510 {
511
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 std::filesystem::path filepath = getFilepath();
512
513
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 auto filestreamHeader = std::ifstream(filepath);
514
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 14 times.
14 if (!filestreamHeader.good())
515 {
516 return FileReader::FileType::NONE;
517 }
518
519 14 std::string line;
520 do
521 {
522
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 185 times.
186 if (filestreamHeader.eof())
523 {
524 1 return FileReader::FileType::NONE;
525 }
526
527
1/2
✓ Branch 1 taken 185 times.
✗ Branch 2 not taken.
185 std::getline(filestreamHeader, line);
528 // Remove any starting non text characters
529
2/4
✓ Branch 1 taken 184 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 185 times.
✗ Branch 8 not taken.
369 line.erase(line.begin(), std::ranges::find_if(line, [](int ch) { return std::isgraph(ch); }));
530
5/6
✓ Branch 1 taken 184 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 172 times.
✓ Branch 5 taken 13 times.
✓ Branch 6 taken 172 times.
✓ Branch 7 taken 13 times.
185 } while (!line.empty() && line.find("% ") == std::string::npos);
531
532 13 return FileReader::FileType::ASCII;
533 14 }
534
535 13 void NAV::RtklibPosFile::readHeader()
536 {
537 // Read header line
538 13 std::string line;
539 do
540 {
541
1/2
✓ Branch 1 taken 183 times.
✗ Branch 2 not taken.
183 getline(line);
542 // Remove any starting non text characters
543
2/4
✓ Branch 1 taken 183 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 182 times.
✗ Branch 8 not taken.
365 line.erase(line.begin(), std::ranges::find_if(line, [](int ch) { return std::isgraph(ch); }));
544
5/6
✓ Branch 1 taken 183 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 170 times.
✓ Branch 5 taken 13 times.
✓ Branch 6 taken 170 times.
✓ Branch 7 taken 13 times.
182 } while (!line.empty() && line.find("% ") == std::string::npos);
545
546 // Convert line into stream
547
1/2
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
13 std::istringstream lineStream(line);
548
549
4/6
✓ Branch 2 taken 316 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 316 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 303 times.
✓ Branch 8 taken 13 times.
329 for (std::string cell; lineStream >> cell;) // split at 'space'
550 {
551
3/4
✓ Branch 1 taken 302 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13 times.
✓ Branch 4 taken 289 times.
303 if (cell != "%")
552 {
553
3/4
✓ Branch 1 taken 290 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 280 times.
289 if (cell == "GPST") // When RTKLIB selected 'ww ssss GPST' or 'hh:mm:ss GPST'
554 {
555
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 auto pos = tellg();
556
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 getline(line);
557
1/2
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 seekg(pos, std::ios::beg);
558
559
3/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 9 times.
10 if (line.substr(0, 7).find('/') == std::string::npos)
560 {
561 // % GPST latitude(deg) longitude(deg) ...
562 // 2120 216180.000 XX.XXXXXXXXX ...
563
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("GpsWeek");
564
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("GpsToW");
565 }
566 else
567 {
568 // % GPST latitude(deg) longitude(deg) ...
569 // 2020/08/25 12:03:00.000 XX.XXXXXXXXX ...
570
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 _headerColumns.emplace_back("Date-GPST");
571
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 _headerColumns.emplace_back("Time-GPST");
572 }
573 }
574
3/4
✓ Branch 1 taken 279 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 277 times.
280 else if (cell == "UTC") // When RTKLIB selected 'hh:mm:ss UTC'
575 {
576 // % UTC latitude(deg) longitude(deg) ...
577 // 2020/08/25 12:02:42.000 XX.XXXXXXXXX ...
578
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _headerColumns.emplace_back("Date-UTC");
579
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _headerColumns.emplace_back("Time-UTC");
580 }
581
3/4
✓ Branch 1 taken 278 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 277 times.
277 else if (cell == "JST") // When RTKLIB selected 'hh:mm:ss JST'
582 {
583 // % JST latitude(deg) longitude(deg) ...
584 // 2020/08/25 21:02:42.000 XX.XXXXXXXXX ...
585
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("Date-JST");
586
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("Time-JST");
587 }
588 else
589 {
590
1/2
✓ Branch 1 taken 277 times.
✗ Branch 2 not taken.
277 _headerColumns.push_back(cell);
591 }
592 }
593 13 }
594 13 }
595