INSTINCT Code Coverage Report


Directory: src/
File: Nodes/DataProvider/GNSS/FileReader/RtklibPosFile.cpp
Date: 2025-06-02 15:19:59
Exec Total Coverage
Lines: 245 318 77.0%
Functions: 15 20 75.0%
Branches: 602 1128 53.4%

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 365 std::shared_ptr<const NAV::NodeData> NAV::RtklibPosFile::pollData()
182 {
183
1/2
✓ Branch 1 taken 360 times.
✗ Branch 2 not taken.
365 auto obs = std::make_shared<RtklibPosObs>();
184
185 // Read line
186 360 std::string line;
187
1/2
✓ Branch 1 taken 359 times.
✗ Branch 2 not taken.
359 getline(line);
188 // Remove any starting non text characters
189
2/4
✓ Branch 1 taken 356 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 359 times.
✗ Branch 8 not taken.
703 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 345 times.
359 if (line.empty())
192 {
193 12 return nullptr;
194 }
195
196
1/2
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
345 std::istringstream lineStream(line);
197 346 std::string cell;
198
199 353 TimeSystem timeSystem = GPST;
200 353 std::optional<uint16_t> year;
201 353 std::optional<uint16_t> month;
202 353 std::optional<uint16_t> day;
203 353 std::optional<int32_t> hour;
204 353 std::optional<uint16_t> minute;
205 353 std::optional<long double> second = 0L;
206 353 std::optional<uint16_t> gpsWeek;
207 353 std::optional<long double> gpsToW;
208
1/2
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
353 Eigen::Vector3d lla_position{ std::nan(""), std::nan(""), std::nan("") };
209
1/2
✓ Branch 1 taken 354 times.
✗ Branch 2 not taken.
350 Eigen::Vector3d e_position{ std::nan(""), std::nan(""), std::nan("") };
210
1/2
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
354 Eigen::Vector3d n_velocity{ std::nan(""), std::nan(""), std::nan("") };
211
1/2
✓ Branch 1 taken 352 times.
✗ Branch 2 not taken.
350 Eigen::Vector3d e_velocity{ std::nan(""), std::nan(""), std::nan("") };
212
213
3/6
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 346 times.
✗ Branch 8 not taken.
352 Eigen::Matrix3d e_posVar = Eigen::Matrix3d::Zero() * std::nan("");
214
3/6
✓ Branch 1 taken 340 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 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 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 350 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 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 349 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 8289 times.
✓ Branch 6 taken 342 times.
8611 for (const auto& column : _headerColumns)
221 {
222
4/6
✓ Branch 1 taken 8255 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8283 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8282 times.
✓ Branch 7 taken 1 times.
8234 if (lineStream >> cell)
223 {
224 // Remove any trailing non text characters
225
2/4
✓ Branch 3 taken 8349 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 8287 times.
✗ Branch 8 not taken.
64382 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 8286 times.
8287 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 8256 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8254 times.
8286 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 8223 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8221 times.
8254 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 340 times.
✓ Branch 2 taken 7846 times.
8221 else if (column.starts_with("Date"))
246 {
247
2/2
✓ Branch 1 taken 332 times.
✓ Branch 2 taken 5 times.
340 timeSystem = column.ends_with("-GPST") ? GPST : UTC;
248
249
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 342 times.
✗ Branch 5 not taken.
340 auto ymd = str::split(cell, "/");
250
1/2
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
344 if (ymd.size() == 3)
251 {
252
2/4
✓ Branch 1 taken 325 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 330 times.
✗ Branch 5 not taken.
344 year = static_cast<uint16_t>(std::stoi(ymd.at(0)));
253
2/4
✓ Branch 1 taken 337 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
333 month = static_cast<uint16_t>(std::stoi(ymd.at(1)));
254
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 341 times.
✗ Branch 5 not taken.
337 day = static_cast<uint16_t>(std::stoi(ymd.at(2)));
255 }
256 342 }
257
2/2
✓ Branch 1 taken 346 times.
✓ Branch 2 taken 7571 times.
7846 else if (column.starts_with("Time"))
258 {
259
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 times.
✗ Branch 5 not taken.
346 auto hms = str::split(cell, ":");
260
1/2
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
346 if (hms.size() == 3)
261 {
262
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 340 times.
✗ Branch 5 not taken.
346 hour = static_cast<uint16_t>(std::stoi(hms.at(0)));
263
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 340 times.
329 if (column.ends_with("-JST")) { *hour -= 9; }
264
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 343 times.
✗ Branch 5 not taken.
342 minute = static_cast<uint16_t>(std::stoi(hms.at(1)));
265
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 334 times.
✗ Branch 5 not taken.
344 second = std::stold(hms.at(2));
266 }
267 327 }
268
6/10
✓ Branch 1 taken 7554 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7560 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7589 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7595 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7581 times.
7571 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 7585 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7589 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7595 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 13 times.
✓ Branch 9 taken 7582 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7589 times.
7581 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 7583 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7576 times.
✓ Branch 4 taken 7 times.
✓ Branch 6 taken 7585 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7589 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 7590 times.
7589 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
6/10
✓ Branch 1 taken 7131 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7239 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7251 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 7255 times.
✓ Branch 10 taken 345 times.
✓ Branch 11 taken 6798 times.
7590 else if (column == "latitude(deg)" || column == "latitude")
281 {
282
3/4
✓ Branch 1 taken 325 times.
✓ Branch 2 taken 1 times.
✓ Branch 5 taken 324 times.
✗ Branch 6 not taken.
345 lla_position(0) = deg2rad(std::stod(cell));
283 }
284
7/10
✓ Branch 1 taken 7244 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6905 times.
✓ Branch 4 taken 339 times.
✓ Branch 6 taken 6912 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 6915 times.
✓ Branch 10 taken 342 times.
✓ Branch 11 taken 6909 times.
6798 else if (column == "longitude(deg)" || column == "longitude")
285 {
286
2/4
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 339 times.
✗ Branch 6 not taken.
342 lla_position(1) = deg2rad(std::stod(cell));
287 }
288
7/10
✓ Branch 1 taken 6913 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6575 times.
✓ Branch 4 taken 338 times.
✓ Branch 6 taken 6584 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 6587 times.
✓ Branch 10 taken 344 times.
✓ Branch 11 taken 6578 times.
6909 else if (column == "height(m)" || column == "height")
289 {
290
2/4
✓ Branch 1 taken 336 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 339 times.
✗ Branch 5 not taken.
344 lla_position(2) = std::stod(cell);
291 }
292
3/4
✓ Branch 1 taken 6581 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 345 times.
✓ Branch 4 taken 6236 times.
6578 else if (column == "Q")
293 {
294
1/2
✓ Branch 1 taken 337 times.
✗ Branch 2 not taken.
345 obs->Q = static_cast<uint8_t>(std::stoul(cell));
295 }
296
3/4
✓ Branch 1 taken 6231 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 347 times.
✓ Branch 4 taken 5884 times.
6236 else if (column == "ns")
297 {
298
1/2
✓ Branch 1 taken 351 times.
✗ Branch 2 not taken.
347 obs->ns = static_cast<uint8_t>(std::stoul(cell));
299 }
300
7/10
✓ Branch 1 taken 5906 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5899 times.
✓ Branch 4 taken 7 times.
✓ Branch 6 taken 5890 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5891 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5895 times.
5884 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 5892 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5895 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5883 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5886 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5878 times.
5895 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 5894 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5890 times.
✓ Branch 4 taken 4 times.
✓ Branch 6 taken 5888 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5890 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 5890 times.
5878 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
8/10
✓ Branch 1 taken 5889 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5544 times.
✓ Branch 4 taken 345 times.
✓ Branch 6 taken 5556 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 373 times.
✓ Branch 9 taken 5183 times.
✓ Branch 10 taken 348 times.
✓ Branch 11 taken 5553 times.
5890 else if (column == "sdn(m)" || column == "sdn")
313 {
314
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 334 times.
✗ Branch 6 not taken.
348 n_posVar(0, 0) = std::pow(std::stod(cell), 2);
315 }
316
7/10
✓ Branch 1 taken 5548 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5205 times.
✓ Branch 4 taken 343 times.
✓ Branch 6 taken 5208 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5209 times.
✓ Branch 10 taken 350 times.
✓ Branch 11 taken 5201 times.
5553 else if (column == "sde(m)" || column == "sde")
317 {
318
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 340 times.
✗ Branch 6 not taken.
350 n_posVar(1, 1) = std::pow(std::stod(cell), 2);
319 }
320
7/10
✓ Branch 1 taken 5200 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4859 times.
✓ Branch 4 taken 341 times.
✓ Branch 6 taken 4858 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4862 times.
✓ Branch 10 taken 349 times.
✓ Branch 11 taken 4850 times.
5201 else if (column == "sdu(m)" || column == "sdu")
321 {
322
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 344 times.
✗ Branch 6 not taken.
349 n_posVar(2, 2) = std::pow(std::stod(cell), 2);
323 }
324
7/10
✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4860 times.
✓ Branch 4 taken 3 times.
✓ Branch 6 taken 4860 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4862 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4861 times.
4850 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
6/10
✓ Branch 1 taken 4874 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4874 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4853 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4854 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4851 times.
4861 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 4858 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4862 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4858 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4860 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 4852 times.
4851 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
8/10
✓ Branch 1 taken 4846 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4509 times.
✓ Branch 4 taken 337 times.
✓ Branch 6 taken 4520 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 4518 times.
✓ Branch 10 taken 345 times.
✓ Branch 11 taken 4512 times.
4852 else if (column == "sdne(m)" || column == "sdne")
343 {
344
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 342 times.
✗ Branch 5 not taken.
345 n_posVar(0, 1) = std::stod(cell);
345
3/6
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 344 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 343 times.
✗ Branch 10 not taken.
342 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 346 times.
✗ Branch 5 not taken.
343 n_posVar(1, 0) = -n_posVar(0, 1);
347 }
348
7/10
✓ Branch 1 taken 4505 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4168 times.
✓ Branch 4 taken 337 times.
✓ Branch 6 taken 4172 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4174 times.
✓ Branch 10 taken 343 times.
✓ Branch 11 taken 4166 times.
4512 else if (column == "sdeu(m)" || column == "sdeu")
349 {
350
2/4
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
343 n_posVar(1, 2) = std::stod(cell);
351
3/6
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 347 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 345 times.
✗ Branch 10 not taken.
344 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 346 times.
✗ Branch 5 not taken.
345 n_posVar(2, 1) = -n_posVar(1, 2);
353 }
354
7/10
✓ Branch 1 taken 4174 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3834 times.
✓ Branch 4 taken 340 times.
✓ Branch 6 taken 3829 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3830 times.
✓ Branch 10 taken 344 times.
✓ Branch 11 taken 3825 times.
4166 else if (column == "sdun(m)" || column == "sdun")
355 {
356
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
344 n_posVar(2, 0) = std::stod(cell);
357
3/6
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 344 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 348 times.
✗ Branch 10 not taken.
346 n_posVar(2, 0) = gcem::sgn(n_posVar(2, 0)) * std::pow(n_posVar(2, 0), 2);
358
2/4
✓ Branch 1 taken 350 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 349 times.
✗ Branch 5 not taken.
348 n_posVar(0, 2) = -n_posVar(2, 0);
359 }
360
7/10
✓ Branch 1 taken 3828 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3480 times.
✓ Branch 4 taken 348 times.
✓ Branch 6 taken 3476 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 3478 times.
✓ Branch 10 taken 350 times.
✓ Branch 11 taken 3474 times.
3825 else if (column == "age(s)" || column == "age")
361 {
362
1/2
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
350 obs->age = std::stod(cell);
363 }
364
3/4
✓ Branch 1 taken 3479 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 349 times.
✓ Branch 4 taken 3130 times.
3474 else if (column == "ratio")
365 {
366
1/2
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
349 obs->ratio = std::stod(cell);
367 }
368
7/10
✓ Branch 1 taken 3130 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2788 times.
✓ Branch 4 taken 342 times.
✓ Branch 6 taken 2789 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2789 times.
✓ Branch 10 taken 345 times.
✓ Branch 11 taken 2786 times.
3130 else if (column == "vn(m/s)" || column == "vn")
369 {
370
2/4
✓ Branch 1 taken 341 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 337 times.
✗ Branch 5 not taken.
345 n_velocity(0) = std::stod(cell);
371 }
372
8/10
✓ Branch 1 taken 2784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2437 times.
✓ Branch 4 taken 347 times.
✓ Branch 6 taken 2430 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✓ Branch 9 taken 2427 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 2430 times.
2786 else if (column == "ve(m/s)" || column == "ve")
373 {
374
2/4
✓ Branch 1 taken 347 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 341 times.
✗ Branch 5 not taken.
347 n_velocity(1) = std::stod(cell);
375 }
376
7/10
✓ Branch 1 taken 2433 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2088 times.
✓ Branch 4 taken 345 times.
✓ Branch 6 taken 2094 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2095 times.
✓ Branch 10 taken 348 times.
✓ Branch 11 taken 2091 times.
2430 else if (column == "vu(m/s)" || column == "vu")
377 {
378
2/4
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 347 times.
✗ Branch 5 not taken.
348 n_velocity(2) = -std::stod(cell);
379 }
380
7/10
✓ Branch 1 taken 2093 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2091 times.
✓ Branch 4 taken 2 times.
✓ Branch 6 taken 2092 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2093 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2092 times.
2091 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 2088 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2088 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2093 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2093 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2091 times.
2092 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 2091 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2089 times.
✓ Branch 4 taken 2 times.
✓ Branch 6 taken 2086 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2088 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2086 times.
2091 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 2089 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2089 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2091 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 344 times.
✓ Branch 9 taken 1747 times.
✓ Branch 10 taken 349 times.
✓ Branch 11 taken 1742 times.
2086 else if (column == "sdvn(m/s)" || column == "sdvn")
393 {
394
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 340 times.
✗ Branch 6 not taken.
349 n_velVar(0, 0) = std::pow(std::stod(cell), 2);
395 }
396
7/10
✓ Branch 1 taken 1738 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1739 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1742 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 341 times.
✓ Branch 9 taken 1401 times.
✓ Branch 10 taken 344 times.
✓ Branch 11 taken 1397 times.
1742 else if (column == "sdve(m/s)" || column == "sdve")
397 {
398
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 343 times.
✗ Branch 6 not taken.
344 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 1399 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1399 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 345 times.
✓ Branch 9 taken 1054 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 1052 times.
1397 else if (column == "sdvu(m/s)" || column == "sdvu")
401 {
402
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 345 times.
✗ Branch 6 not taken.
347 n_velVar(2, 2) = std::pow(std::stod(cell), 2);
403 }
404
7/10
✓ Branch 1 taken 1054 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1055 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 345 times.
✓ Branch 11 taken 705 times.
1052 else if (column == "sdvne(m/s)" || column == "sdvne")
405 {
406
2/4
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 342 times.
✗ Branch 5 not taken.
345 n_velVar(0, 1) = std::stod(cell);
407
3/6
✓ Branch 1 taken 349 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 345 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 344 times.
✗ Branch 10 not taken.
342 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 348 times.
✗ Branch 5 not taken.
344 n_velVar(1, 0) = -n_velVar(0, 1);
409 }
410
7/10
✓ Branch 1 taken 703 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 704 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 703 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 347 times.
✓ Branch 9 taken 356 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 355 times.
705 else if (column == "sdveu(m/s)" || column == "sdveu")
411 {
412
2/4
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
347 n_velVar(1, 2) = std::stod(cell);
413
3/6
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 347 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 348 times.
✗ Branch 10 not taken.
344 n_velVar(1, 2) = gcem::sgn(n_velVar(1, 2)) * std::pow(n_velVar(1, 2), 2);
414
2/4
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 349 times.
✗ Branch 5 not taken.
348 n_velVar(2, 1) = -n_velVar(1, 2);
415 }
416
7/10
✓ Branch 1 taken 359 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 359 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 359 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 347 times.
✓ Branch 9 taken 12 times.
✓ Branch 10 taken 347 times.
✓ Branch 11 taken 12 times.
355 else if (column == "sdvun(m/s)" || column == "sdvun")
417 {
418
2/4
✓ Branch 1 taken 344 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 339 times.
✗ Branch 5 not taken.
347 n_velVar(2, 0) = std::stod(cell);
419
3/6
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 347 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 346 times.
✗ Branch 10 not taken.
339 n_velVar(2, 0) = gcem::sgn(n_velVar(2, 0)) * std::pow(n_velVar(2, 0), 2);
420
2/4
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
346 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.
12 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 5 times.
✓ Branch 2 taken 346 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 346 times.
342 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 345 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 348 times.
✗ Branch 6 not taken.
690 else if (year.has_value() && month.has_value() && day.has_value()
465
7/10
✓ Branch 0 taken 344 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 339 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 332 times.
✓ Branch 7 taken 6 times.
✓ Branch 9 taken 340 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 339 times.
✓ Branch 12 taken 1 times.
686 && hour.has_value() && minute.has_value() && second.has_value())
466 {
467
3/6
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 346 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 348 times.
✗ Branch 8 not taken.
341 obs->insTime = InsTime(year.value(), month.value(), day.value(),
468
4/8
✓ Branch 1 taken 330 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 338 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 337 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 341 times.
✗ Branch 11 not taken.
339 hour.value(), minute.value(), second.value(),
469 timeSystem);
470 }
471
472
4/6
✓ Branch 1 taken 342 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 340 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
339 if (!e_position.hasNaN()) { obs->setPosition_e(e_position); }
473
3/6
✓ Branch 1 taken 346 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 347 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 342 times.
✗ Branch 8 not taken.
340 else if (!lla_position.hasNaN()) { obs->setPosition_lla(lla_position); }
474
475
4/6
✓ Branch 1 taken 345 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 343 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
343 if (!e_velocity.hasNaN()) { obs->setVelocity_e(e_velocity); }
476
4/6
✓ Branch 1 taken 348 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 346 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 346 times.
✗ Branch 8 not taken.
343 else if (!n_velocity.hasNaN()) { obs->setVelocity_n(n_velocity); }
477
478
7/10
✓ Branch 1 taken 330 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 328 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 328 times.
350 if (!e_velVar.hasNaN() && !e_posVar.hasNaN())
479 {
480
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 Eigen::Matrix6d cov = Eigen::Matrix6d::Zero(6, 6);
481
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;
482
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;
483
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 obs->setPosVelCovarianceMatrix_e(cov);
484 }
485
7/10
✓ Branch 1 taken 343 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 341 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.
328 else if (!n_velVar.hasNaN() && !n_posVar.hasNaN())
486 {
487
2/4
✓ Branch 1 taken 321 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 339 times.
✗ Branch 5 not taken.
347 Eigen::Matrix6d cov = Eigen::Matrix6d::Zero(6, 6);
488
2/4
✓ Branch 1 taken 329 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 333 times.
✗ Branch 5 not taken.
339 cov.block<3, 3>(0, 0) = n_posVar;
489
2/4
✓ Branch 1 taken 337 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 344 times.
✗ Branch 5 not taken.
333 cov.block<3, 3>(3, 3) = n_velVar;
490
1/2
✓ Branch 2 taken 345 times.
✗ Branch 3 not taken.
344 obs->setPosVelCovarianceMatrix_n(cov);
491 }
492
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())
493 {
494 obs->setPosCovarianceMatrix_e(e_posVar);
495 }
496
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())
497 {
498
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 obs->setPosCovarianceMatrix_n(n_posVar);
499 }
500
501
1/2
✓ Branch 2 taken 352 times.
✗ Branch 3 not taken.
349 invokeCallbacks(OUTPUT_PORT_INDEX_RTKLIB_POS_OBS, obs);
502 351 return obs;
503 364 }
504
505 14 NAV::FileReader::FileType NAV::RtklibPosFile::determineFileType()
506 {
507
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 std::filesystem::path filepath = getFilepath();
508
509
1/2
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
14 auto filestreamHeader = std::ifstream(filepath);
510
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 14 times.
14 if (!filestreamHeader.good())
511 {
512 return FileReader::FileType::NONE;
513 }
514
515 14 std::string line;
516 do
517 {
518
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 184 times.
185 if (filestreamHeader.eof())
519 {
520 1 return FileReader::FileType::NONE;
521 }
522
523
1/2
✓ Branch 1 taken 185 times.
✗ Branch 2 not taken.
184 std::getline(filestreamHeader, line);
524 // Remove any starting non text characters
525
2/4
✓ Branch 1 taken 185 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 185 times.
✗ Branch 8 not taken.
370 line.erase(line.begin(), std::ranges::find_if(line, [](int ch) { return std::isgraph(ch); }));
526
5/6
✓ Branch 1 taken 185 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);
527
528 13 return FileReader::FileType::ASCII;
529 14 }
530
531 13 void NAV::RtklibPosFile::readHeader()
532 {
533 // Read header line
534 13 std::string line;
535 do
536 {
537
1/2
✓ Branch 1 taken 181 times.
✗ Branch 2 not taken.
181 getline(line);
538 // Remove any starting non text characters
539
2/4
✓ Branch 1 taken 180 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 180 times.
✗ Branch 8 not taken.
361 line.erase(line.begin(), std::ranges::find_if(line, [](int ch) { return std::isgraph(ch); }));
540
5/6
✓ Branch 1 taken 180 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 168 times.
✓ Branch 5 taken 13 times.
✓ Branch 6 taken 168 times.
✓ Branch 7 taken 13 times.
180 } while (!line.empty() && line.find("% ") == std::string::npos);
541
542 // Convert line into stream
543
1/2
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
13 std::istringstream lineStream(line);
544
545
4/6
✓ Branch 2 taken 313 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 313 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 300 times.
✓ Branch 8 taken 13 times.
321 for (std::string cell; lineStream >> cell;) // split at 'space'
546 {
547
3/4
✓ Branch 1 taken 300 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13 times.
✓ Branch 4 taken 287 times.
300 if (cell != "%")
548 {
549
3/4
✓ Branch 1 taken 288 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 278 times.
287 if (cell == "GPST") // When RTKLIB selected 'ww ssss GPST' or 'hh:mm:ss GPST'
550 {
551
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 auto pos = tellg();
552
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 getline(line);
553
1/2
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
10 seekg(pos, std::ios::beg);
554
555
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)
556 {
557 // % GPST latitude(deg) longitude(deg) ...
558 // 2120 216180.000 XX.XXXXXXXXX ...
559
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("GpsWeek");
560
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("GpsToW");
561 }
562 else
563 {
564 // % GPST latitude(deg) longitude(deg) ...
565 // 2020/08/25 12:03:00.000 XX.XXXXXXXXX ...
566
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 _headerColumns.emplace_back("Date-GPST");
567
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 _headerColumns.emplace_back("Time-GPST");
568 }
569 }
570
3/4
✓ Branch 1 taken 279 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 277 times.
278 else if (cell == "UTC") // When RTKLIB selected 'hh:mm:ss UTC'
571 {
572 // % UTC latitude(deg) longitude(deg) ...
573 // 2020/08/25 12:02:42.000 XX.XXXXXXXXX ...
574
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _headerColumns.emplace_back("Date-UTC");
575
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _headerColumns.emplace_back("Time-UTC");
576 }
577
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'
578 {
579 // % JST latitude(deg) longitude(deg) ...
580 // 2020/08/25 21:02:42.000 XX.XXXXXXXXX ...
581
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("Date-JST");
582
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _headerColumns.emplace_back("Time-JST");
583 }
584 else
585 {
586
1/2
✓ Branch 1 taken 269 times.
✗ Branch 2 not taken.
277 _headerColumns.push_back(cell);
587 }
588 }
589 13 }
590 13 }
591