Skip to content
Snippets Groups Projects
Commit 90b8a46f authored by Pep Martí Saumell's avatar Pep Martí Saumell
Browse files

Merge remote-tracking branch 'origin/devel' into 7-navigation_tests

parents bf260a58 51bcb066
No related branches found
No related tags found
3 merge requests!20new tag,!19new tag,!7Resolve "navigation_tests"
Showing with 698 additions and 143 deletions
......@@ -39,9 +39,37 @@ endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
# Testing
IF(NOT BUILD_TESTS)
OPTION(BUILD_TESTS "Build Unit tests" ON)
ENDIF(NOT BUILD_TESTS)
if(BUILD_TESTS)
# Enables testing for this directory and below.
# Note that ctest expects to find a test file in the build directory root.
# Therefore, this command should be in the source directory root.
#include(CTest) # according to http://public.kitware.com/pipermail/cmake/2012-June/050853.html
MESSAGE("Building tests.")
enable_testing()
set(_GNSS_UTILS_ROOT_DIR ${CMAKE_SOURCE_DIR})
endif()
# Define the directory where will be the configured config.h
SET(GNSS_UTILS_CONFIG_DIR ${PROJECT_BINARY_DIR}/conf/gnss_utils/internal)
# Create the specified output directory if it does not exist.
IF(NOT EXISTS "${GNSS_UTILS_CONFIG_DIR}")
message(STATUS "Creating config output directory: ${GNSS_UTILS_CONFIG_DIR}")
file(MAKE_DIRECTORY "${GNSS_UTILS_CONFIG_DIR}")
ENDIF()
IF(EXISTS "${GNSS_UTILS_CONFIG_DIR}" AND NOT IS_DIRECTORY "${GNSS_UTILS_CONFIG_DIR}")
message(FATAL_ERROR "Bug: Specified CONFIG_DIR: "
"${GNSS_UTILS_CONFIG_DIR} exists, but is not a directory.")
ENDIF()
# Configure config.h
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/internal/config.h.in "${GNSS_UTILS_CONFIG_DIR}/config.h")
message("GNSS_UTILS CONFIG ${GNSS_UTILS_CONFIG_DIR}/config.h")
message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_BINARY_DIR}/conf")
# rtklib path
SET(RTKLIB_DIR deps/RTKLIB)
......@@ -87,18 +115,8 @@ SET(RTKLIB_SRC
${RTKLIB_SRC_DIR}/rcv/tersus.c
${RTKLIB_SRC_DIR}/rcv/ublox.c)
# application header files
SET(HEADERS
include/gnss_utils/utils/utils.h
include/gnss_utils/utils/transformations.h
include/gnss_utils/utils/rcv_position.h
include/gnss_utils/utils/sat_position.h
include/gnss_utils/observations.h
include/gnss_utils/navigation.h
include/gnss_utils/tdcp.h
include/gnss_utils/ublox_raw.h
${RTKLIB_SRC_DIR}/rtklib.h)
# NOT SET SINCE WE COPY THE WHOLE include FOLDER
# Eigen #######
FIND_PACKAGE(Eigen3 REQUIRED)
......@@ -119,31 +137,24 @@ INCLUDE_DIRECTORIES(include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTKLI
ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC})
TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES})
# Installing
INSTALL(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/iri-algorithms
ARCHIVE DESTINATION lib/iri-algorithms)
INSTALL(FILES ${HEADERS} DESTINATION include/iri-algorithms/gnss_utils)
INSTALL(FILES Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
# Examples
ADD_SUBDIRECTORY(src/examples)
if(BUILD_TESTS)
# Enables testing for this directory and below.
# Note that ctest expects to find a test file in the build directory root.
# Therefore, this command should be in the source directory root.
#include(CTest) # according to http://public.kitware.com/pipermail/cmake/2012-June/050853.html
MESSAGE("Building tests.")
enable_testing()
endif()
# Testing
if(BUILD_TESTS)
add_subdirectory(test)
endif()
# Installing
INSTALL(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/iri-algorithms
ARCHIVE DESTINATION lib/iri-algorithms)
INSTALL(DIRECTORY include/gnss_utils DESTINATION include/iri-algorithms)
INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION include/iri-algorithms/gnss_utils)
INSTALL(FILES Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
INSTALL(FILES "${GNSS_UTILS_CONFIG_DIR}/config.h"
DESTINATION include/iri-algorithms/gnss_utils/internal)
FIND_PACKAGE(Doxygen)
FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/)
......
#ifndef INCLUDE_GNSS_UTILS_GNSS_UTILS_H_
#define INCLUDE_GNSS_UTILS_GNSS_UTILS_H_
extern "C" {
#include "rtklib.h"
}
#endif
\ No newline at end of file
......@@ -5,12 +5,9 @@
#include <iostream>
#include <memory>
#include "gnss_utils/gnss_utils.h"
#include "gnss_utils/utils/utils.h"
extern "C" {
#include "rtklib.h"
}
namespace GnssUtils
{
class Navigation;
......
......@@ -7,12 +7,9 @@
#include <memory>
#include <cassert>
#include "gnss_utils/gnss_utils.h"
#include "gnss_utils/utils/utils.h"
extern "C" {
#include "rtklib.h"
}
namespace GnssUtils
{
class Observations;
......@@ -62,6 +59,9 @@ public:
Observations& common_obs_1,
Observations& common_obs_2);
bool operator==(const Observations& other_obs) const;
bool operator !=(const Observations &other_obs) const;
private:
// Private objects
std::map<unsigned char, int> sat_2_idx_; //< key: corresponding sat number, value: idx in obs_ vector
......@@ -125,5 +125,10 @@ inline bool Observations::hasSatellite(const unsigned char& i) const
return sat_2_idx_.count(i) != 0;
}
inline bool Observations::operator !=(const Observations &other_obs) const
{
return !(*this == other_obs);
}
} // namespace GnssUtils
#endif // INCLUDE_GNSS_UTILS_OBSERVATIONS_H_
......@@ -15,10 +15,7 @@
#include "gnss_utils/observations.h"
#include "gnss_utils/navigation.h"
#include "gnss_utils/utils/transformations.h"
extern "C" {
#include "rtklib.h"
}
#include "gnss_utils/gnss_utils.h"
namespace GnssUtils
{
......
......@@ -15,10 +15,7 @@
#include "gnss_utils/observations.h"
#include "gnss_utils/navigation.h"
#include "gnss_utils/utils/transformations.h"
extern "C" {
#include "rtklib.h"
}
#include "gnss_utils/gnss_utils.h"
namespace GnssUtils
{
......
......@@ -11,10 +11,7 @@
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Geometry>
#include <eigen3/Eigen/Sparse>
extern "C" {
#include "rtklib.h"
}
#include "gnss_utils/gnss_utils.h"
namespace GnssUtils
{
......
......@@ -6,15 +6,14 @@
#include <memory>
#include <string>
#include "gnss_utils/internal/config.h"
#include "gnss_utils/gnss_utils.h"
#define ARRAY_SIZE(arr) sizeof(arr) / sizeof(arr[0])
#define ARRAY2D_NROWS(arr) sizeof(arr) / sizeof(arr[0])
#define ARRAY2D_NCOLS(arr) sizeof(arr[0]) / sizeof(arr[0][0])
#define GNSSUTILS_MSG "--GnssUtils--"
extern "C" {
#include "rtklib.h"
}
namespace GnssUtils
{
void print(std::string& _msg);
......@@ -174,4 +173,11 @@ bool equalNavigations(const nav_t& nav1, const nav_t& nav2);
} // namespace GnssUtils
#endif // INCLUDE_GNSS_UTILS_UTILS_UTILS_H_
\ No newline at end of file
bool operator==(const gtime_t& time1, const gtime_t& time2);
bool operator!=(const gtime_t& time1, const gtime_t& time2);
bool operator==(const obsd_t& obs1, const obsd_t& obs2);
bool operator!=(const obsd_t& obs1, const obsd_t& obs2);
bool operator==(const obs_t& obs1, const obs_t& obs2);
bool operator!=(const obs_t& obs1, const obs_t& obs2);
#endif // INCLUDE_GNSS_UTILS_UTILS_UTILS_H_
#ifndef GNSS_UTILS_INTERNAL_CONFIG_H_
#define GNSS_UTILS_INTERNAL_CONFIG_H_
#cmakedefine _GNSS_UTILS_DEBUG
#cmakedefine _GNSS_UTILS_TRACE
#define _GNSS_UTILS_ROOT_DIR "${_GNSS_UTILS_ROOT_DIR}"
#endif /* GNSS_UTILS_INTERNAL_CONFIG_H_ */
......@@ -218,3 +218,19 @@ void Observations::findCommonObservations(const Observations& obs_1,
// std::cout << (int)obs_2_ref.sat << " ";
// std::cout << std::endl;
}
bool Observations::operator ==(const Observations &other_obs) const
{
if (sat_2_idx_ != other_obs.sat_2_idx_)
return false;
if (idx_2_sat_ != other_obs.idx_2_sat_)
return false;
for (auto i = 0; i < obs_.size(); i++)
if (obs_.at(i) != other_obs.obs_.at(i))
return false;
return true;
}
......@@ -61,63 +61,6 @@ void printArray(std::string _name, float* _array, int size)
}
}
bool equalTime(const gtime_t& time1, const gtime_t& time2)
{
return (difftime(time1.time, time2.time) == 0.0 && time1.sec == time2.sec);
}
bool equalObservations(const obsd_t& obs1, const obsd_t& obs2)
{
if (!equalTime(obs1.time, obs2.time))
return false;
if (!equalTime(obs1.eventime, obs2.eventime))
return false;
if (obs1.timevalid != obs2.timevalid)
return false;
if (obs1.sat != obs2.sat)
return false;
if (obs1.rcv != obs2.rcv)
return false;
if (memcmp(obs1.SNR, obs2.SNR, sizeof(obs1.SNR)) != 0)
return false;
if (memcmp(obs1.LLI, obs2.LLI, sizeof(obs1.LLI)) != 0)
return false;
if (memcmp(obs1.code, obs2.code, sizeof(obs1.code)) != 0)
return false;
if (memcmp(obs1.qualL, obs2.qualL, sizeof(obs1.qualL)) != 0)
return false;
if (memcmp(obs1.qualP, obs2.qualP, sizeof(obs1.qualP)) != 0)
return false;
if (obs1.freq != obs2.freq)
return false;
if (!equalArray<double>(obs1.L, obs2.L, ARRAY_SIZE(obs1.L), ARRAY_SIZE(obs2.L)))
return false;
if (!equalArray<double>(obs1.P, obs2.P, ARRAY_SIZE(obs1.P), ARRAY_SIZE(obs2.P)))
return false;
if (!equalArray<float>(obs1.D, obs2.D, ARRAY_SIZE(obs1.D), ARRAY_SIZE(obs2.D)))
return false;
return true;
}
bool equalObservations(const obs_t& obs1, const obs_t& obs2)
{
if (obs1.n != obs2.n)
return false;
if (obs1.nmax != obs2.nmax)
return false;
if (obs1.flag != obs2.flag)
return false;
if (obs1.rcvcount != obs2.rcvcount)
return false;
if (obs1.tmcount != obs2.tmcount)
return false;
if (!equalObservations(*(obs1.data), *(obs2.data)))
return false;
return true;
}
bool equalEphemeris(const eph_t& eph1, const eph_t& eph2)
{
if (eph1.sat != eph2.sat)
......@@ -137,11 +80,11 @@ bool equalEphemeris(const eph_t& eph1, const eph_t& eph2)
if (eph1.flag != eph2.flag)
return false;
if (!equalTime(eph1.toe, eph2.toe))
if (eph1.toe != eph2.toe)
return false;
if (!equalTime(eph1.toc, eph2.toc))
if (eph1.toc != eph2.toc)
return false;
if (!equalTime(eph1.ttr, eph2.ttr))
if (eph1.ttr != eph2.ttr)
return false;
if (eph1.A != eph2.A)
......@@ -185,7 +128,7 @@ bool equalEphemeris(const eph_t& eph1, const eph_t& eph2)
if (eph1.f2 != eph2.f2)
return false;
if (!equalArray(eph1.tgd, eph2.tgd, ARRAY_SIZE(eph1.tgd), ARRAY_SIZE(eph2.tgd)))
if (!equalArray<double>(eph1.tgd, eph2.tgd, ARRAY_SIZE(eph1.tgd), ARRAY_SIZE(eph2.tgd)))
return false;
if (eph1.Adot != eph2.Adot)
......@@ -211,9 +154,9 @@ bool equalGlonassEphemeris(const geph_t& geph1, const geph_t& geph2)
if (geph1.age != geph2.age)
return false;
if (!equalTime(geph1.toe, geph2.toe))
if (geph1.toe != geph2.toe)
return false;
if (!equalTime(geph1.tof, geph2.tof))
if (geph1.tof != geph2.tof)
return false;
if (!equalArray<double>(geph1.pos, geph2.pos, ARRAY_SIZE(geph1.pos), ARRAY_SIZE(geph2.pos)))
......@@ -238,9 +181,9 @@ bool equalSbasEphemeris(const seph_t& seph1, const seph_t& seph2)
if (seph1.sat != seph2.sat)
return false;
if (!equalTime(seph1.t0, seph2.t0))
if (seph1.t0 != seph2.t0)
return false;
if (!equalTime(seph1.tof, seph2.tof))
if (seph1.tof != seph2.tof)
return false;
if (seph1.sva != seph2.sva)
......@@ -265,7 +208,7 @@ bool equalSbasEphemeris(const seph_t& seph1, const seph_t& seph2)
bool equalPreciseEphemeris(const peph_t& peph1, const peph_t& peph2)
{
if (!equalTime(peph1.time, peph2.time))
if (peph1.time != peph2.time)
return false;
if (peph1.index != peph2.index)
......@@ -319,7 +262,7 @@ bool equalPreciseEphemeris(const peph_t& peph1, const peph_t& peph2)
bool equalPreciseClock(const pclk_t& pclk1, const pclk_t& pclk2)
{
if (!equalTime(pclk1.time, pclk2.time))
if (pclk1.time != pclk2.time)
return false;
if (pclk1.index != pclk2.index)
......@@ -353,7 +296,7 @@ bool equalAlmanac(const alm_t& alm1, const alm_t& alm2)
if (alm1.week != alm2.week)
return false;
if (!equalTime(alm1.toa, alm2.toa))
if (alm1.toa != alm2.toa)
return false;
if (alm1.A != alm2.A)
......@@ -382,7 +325,7 @@ bool equalAlmanac(const alm_t& alm1, const alm_t& alm2)
bool equalTecGrid(const tec_t& tec1, const tec_t& tec2)
{
if (!equalTime(tec1.time, tec2.time))
if (tec1.time != tec2.time)
return false;
if (!equalArray<int>(tec1.ndata, tec2.ndata, ARRAY_SIZE(tec1.ndata), ARRAY_SIZE(tec2.ndata)))
......@@ -405,9 +348,9 @@ bool equalTecGrid(const tec_t& tec1, const tec_t& tec2)
bool equalFcb(const fcbd_t& fcbd1, const fcbd_t& fcbd2)
{
if (!equalTime(fcbd1.ts, fcbd2.ts))
if (fcbd1.ts != fcbd2.ts)
return false;
if (!equalTime(fcbd1.te, fcbd2.te))
if (fcbd1.te != fcbd2.te)
return false;
if (!equalArray2d<double>(&fcbd1.bias[0][0],
......@@ -430,7 +373,7 @@ bool equalFcb(const fcbd_t& fcbd1, const fcbd_t& fcbd2)
bool equalEarthRotationParameters(const erp_t& erp1, const erp_t& erp2)
{
// TODO
return true;
}
......@@ -530,3 +473,44 @@ bool equalNavigation(const nav_t& nav1, const nav_t& nav2)
return false;
}
} // namespace GnssUtils
bool operator==(const gtime_t& time1, const gtime_t& time2)
{
return (difftime(time1.time, time2.time) == 0.0 && time1.sec == time2.sec);
}
bool operator!=(const gtime_t& time1, const gtime_t& time2)
{
return not(time1 == time2);
}
bool operator==(const obsd_t& obs1, const obsd_t& obs2)
{
return obs1.time == obs2.time && obs1.eventime == obs2.eventime && obs1.timevalid == obs2.timevalid &&
obs1.sat == obs2.sat && obs1.rcv == obs2.rcv && memcmp(obs1.SNR, obs2.SNR, sizeof(obs1.SNR)) == 0 &&
memcmp(obs1.LLI, obs2.LLI, sizeof(obs1.LLI)) == 0 && memcmp(obs1.code, obs2.code, sizeof(obs1.code)) == 0 &&
memcmp(obs1.qualL, obs2.qualL, sizeof(obs1.qualL)) == 0 &&
memcmp(obs1.qualP, obs2.qualP, sizeof(obs1.qualP)) == 0 && obs1.freq == obs2.freq &&
GnssUtils::equalArray<double>(
obs1.L, obs2.L, sizeof(obs1.L) / sizeof(obs1.L[0]), sizeof(obs2.L) / sizeof(obs2.L[0])) &&
GnssUtils::equalArray<double>(
obs1.P, obs2.P, sizeof(obs1.P) / sizeof(obs1.P[0]), sizeof(obs2.P) / sizeof(obs2.P[0])) &&
GnssUtils::equalArray<float>(
obs1.D, obs2.D, sizeof(obs1.D) / sizeof(obs1.D[0]), sizeof(obs2.D) / sizeof(obs2.D[0]));
}
bool operator!=(const obsd_t& obs1, const obsd_t& obs2)
{
return not(obs1 == obs2);
}
bool operator==(const obs_t& obs1, const obs_t& obs2)
{
return obs1.n == obs2.n && obs1.nmax == obs2.nmax && obs1.flag == obs2.flag && obs1.rcvcount == obs2.rcvcount &&
obs1.tmcount == obs2.tmcount && *(obs1.data) == *(obs2.data);
}
bool operator!=(const obs_t& obs1, const obs_t& obs2)
{
return not(obs1 == obs2);
}
......@@ -17,7 +17,5 @@ gnss_utils_add_gtest(gtest_transformations gtest_transformations.cpp)
target_link_libraries(gtest_transformations ${PROJECT_NAME})
# Observations test
add_executable(gtest_observations gtest_observations.cpp)
add_dependencies(gtest_observations libgtest)
target_link_libraries(gtest_observations libgtest ${PROJECT_NAME})
add_test(NAME gtest_observations COMMAND gtest_observations "${CMAKE_CURRENT_LIST_DIR}/../src/examples/sample_data.obs")
gnss_utils_add_gtest(gtest_observations gtest_observations.cpp)
target_link_libraries(gtest_observations libgtest ${PROJECT_NAME})
\ No newline at end of file
3.04 N: GNSS NAV DATA M: MIXED RINEX VERSION / TYPE
sbf2rin-13.4.3 20200205 113410 UTC PGM / RUN BY / DATE
GPSA 9.3132E-09 -1.4901E-08 -5.9605E-08 1.1921E-07 IONOSPHERIC CORR
GPSB 9.6256E+04 -1.4746E+05 -1.3107E+05 9.1750E+05 IONOSPHERIC CORR
GAL 2.9250E+01 3.8281E-01 3.2959E-03 0.0000E+00 IONOSPHERIC CORR
GPUT -9.3132257462E-10 8.881784197E-16 503808 2083 TIME SYSTEM CORR
GAUT 9.3132257462E-10 0.000000000E+00 345600 2083 TIME SYSTEM CORR
GAGP 1.2514647096E-09-5.329070518E-15 345600 2083 TIME SYSTEM CORR
18 LEAP SECONDS
END OF HEADER
G02 2019 12 12 12 00 00-3.648423589766E-04-7.503331289627E-12 0.000000000000E+00
4.700000000000E+01-1.208437500000E+02 4.378039505776E-09-1.891689129337E+00
-6.053596735001E-06 1.953727600630E-02 9.275972843170E-06 5.153594808578E+03
3.888000000000E+05 3.371387720108E-07-2.768163608668E-01 2.346932888031E-07
9.575379914494E-01 1.915312500000E+02-1.691294764827E+00-7.654961717025E-09
2.000083311498E-11 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00-1.769512891769E-08 4.700000000000E+01
3.868920000000E+05 4.000000000000E+00
G04 2019 12 12 12 00 00-1.993030309677E-05-5.002220859751E-12 0.000000000000E+00
1.570000000000E+02-1.387500000000E+01 4.959135139313E-09-2.339868507292E+00
-8.419156074524E-07 1.249722088687E-03 5.329027771950E-06 5.150576126099E+03
3.888000000000E+05 5.587935447693E-09 1.915372002909E+00 1.303851604462E-08
9.594040575671E-01 2.769062500000E+02-1.281079249179E+00-8.132124449911E-09
-3.685867816904E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
4.096000000000E+03 6.300000000000E+01-4.190951585770E-09 6.690000000000E+02
3.873960000000E+05 4.000000000000E+00
G06 2019 12 12 12 00 00-1.512947492301E-04-1.114131009672E-11 0.000000000000E+00
1.000000000000E+02-1.239062500000E+02 3.927663602954E-09-1.824134113525E+00
-6.347894668579E-06 1.658447668888E-03 9.786337614059E-06 5.153719285965E+03
3.888000000000E+05-1.490116119385E-08-2.122724576342E-01 5.401670932770E-08
9.781077241470E-01 2.010000000000E+02-1.200768673201E+00-7.640318249923E-09
1.214336296267E-11 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00 4.656612873077E-09 1.000000000000E+02
3.858180000000E+05 4.000000000000E+00
G07 2019 12 12 12 00 00-1.683332957327E-04-8.185452315956E-12 0.000000000000E+00
5.700000000000E+01 3.909375000000E+01 4.250534194668E-09-2.882882750792E+00
1.888722181320E-06 1.320131728426E-02 1.172721385956E-05 5.153718780518E+03
3.888000000000E+05-7.450580596924E-09 2.943673467473E+00-1.341104507446E-07
9.545190186113E-01 1.482812500000E+02-2.422380694519E+00-7.540671242082E-09
-4.639478967207E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00-1.117587089539E-08 5.700000000000E+01
3.858180000000E+05 4.000000000000E+00
G09 2019 12 12 12 00 00-1.062308438122E-04-9.436007530894E-12 0.000000000000E+00
7.800000000000E+01-1.206250000000E+01 5.168786729286E-09 4.992301981873E-01
-7.078051567078E-07 1.692383317277E-03 5.021691322327E-06 5.153534730911E+03
3.888000000000E+05-2.793967723846E-08 1.868752621939E+00 1.490116119385E-08
9.520568016730E-01 2.776875000000E+02 1.684705661839E+00-8.283559329210E-09
-2.914407111040E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00 1.396983861923E-09 7.800000000000E+01
3.857520000000E+05 4.000000000000E+00
G13 2019 12 12 12 00 00-2.714386209846E-05 2.387423592154E-12 0.000000000000E+00
8.700000000000E+01-1.987500000000E+01 4.779841956746E-09-8.793798521920E-01
-1.072883605957E-06 4.130274290219E-03 5.709007382393E-06 5.153656044006E+03
3.888000000000E+05-6.332993507385E-08 2.009100851183E+00 9.313225746155E-08
9.674158381471E-01 2.706562500000E+02 1.183260297004E+00-8.083193840326E-09
-5.078782980268E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00-1.117587089539E-08 8.700000000000E+01
3.870420000000E+05 4.000000000000E+00
G23 2019 12 12 12 00 00-1.500290818512E-04 2.387423592154E-12 0.000000000000E+00
3.000000000000E+01-1.009375000000E+01 5.335222233421E-09-1.452196357053E+00
-4.973262548447E-07 1.326873130165E-02 4.552304744720E-06 5.153694892883E+03
3.888000000000E+05 2.980232238770E-07 1.861752114203E+00 4.470348358154E-08
9.428683609718E-01 2.778750000000E+02-2.215284453592E+00-8.261415549690E-09
-2.478674675321E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00-2.048909664154E-08 3.000000000000E+01
3.858420000000E+05 4.000000000000E+00
G30 2019 12 12 12 00 00-1.042019575834E-04-8.640199666843E-12 0.000000000000E+00
2.500000000000E+01 4.368750000000E+01 4.663408535398E-09-2.906933186921E+00
2.210959792137E-06 4.164319136180E-03 1.142919063568E-05 5.153722436905E+03
3.888000000000E+05-2.793967723846E-08 2.968865819418E+00-3.725290298462E-09
9.399056183160E-01 1.480312500000E+02-2.921787544453E+00-7.888185717455E-09
-4.778770483544E-10 1.000000000000E+00 2.083000000000E+03 0.000000000000E+00
2.000000000000E+00 0.000000000000E+00 3.725290298462E-09 2.500000000000E+01
3.858180000000E+05 4.000000000000E+00
R03 2019 12 12 11 15 00 6.369315087795E-06 0.000000000000E+00 3.858000000000E+05
9.652274414063E+03 3.457994461060E-01 9.313225746155E-10 0.000000000000E+00
1.708528710938E+04 2.202743530273E+00-1.862645149231E-09 5.000000000000E+00
1.629986035156E+04-2.522974967957E+00-2.793967723846E-09 0.000000000000E+00
R03 2019 12 12 11 45 00 6.371177732944E-06 0.000000000000E+00 3.870000000000E+05
1.043946044922E+04 4.914197921753E-01 9.313225746155E-10 0.000000000000E+00
2.039817236328E+04 1.453030586243E+00-1.862645149231E-09 5.000000000000E+00
1.118693066406E+04-3.121288299561E+00-1.862645149231E-09 0.000000000000E+00
R05 2019 12 12 11 15 00 4.108343273401E-05 9.094947017729E-13 3.862800000000E+05
5.985222167969E+03 1.195173263550E-01-1.862645149231E-09 0.000000000000E+00
-1.828012353516E+04 2.295486450195E+00 1.862645149231E-09 1.000000000000E+00
1.676849218750E+04 2.457766532898E+00-1.862645149231E-09 0.000000000000E+00
R05 2019 12 12 11 45 00 4.108529537916E-05 9.094947017729E-13 3.871800000000E+05
6.598400390625E+03 5.781021118164E-01-9.313225746155E-10 0.000000000000E+00
-1.370180371094E+04 2.745733261108E+00 9.313225746155E-10 1.000000000000E+00
2.048785058594E+04 1.648019790649E+00-1.862645149231E-09 0.000000000000E+00
R14 2019 12 12 11 15 00 4.597380757332E-05 0.000000000000E+00 3.858000000000E+05
2.135816357422E+04-6.865911483765E-01 3.725290298462E-09 0.000000000000E+00
1.261080761719E+04-4.694700241089E-01-0.000000000000E+00-7.000000000000E+00
5.991423828125E+03 3.442845344543E+00-2.793967723846E-09 0.000000000000E+00
R14 2019 12 12 11 45 00 4.597473889589E-05 0.000000000000E+00 3.870000000000E+05
1.936734765625E+04-1.519350051880E+00 1.862645149231E-09 0.000000000000E+00
1.162212011719E+04-5.869359970093E-01-9.313225746155E-10-7.000000000000E+00
1.187716162109E+04 3.054467201233E+00-2.793967723846E-09 0.000000000000E+00
R15 2019 12 12 11 15 00 1.051910221577E-04 0.000000000000E+00 3.860100000000E+05
2.249286962891E+04 1.470921516418E+00 5.587935447693E-09 0.000000000000E+00
4.179755859375E+03 4.950771331787E-01 9.313225746155E-10 0.000000000000E+00
-1.125261865234E+04 3.118181228638E+00-1.862645149231E-09 0.000000000000E+00
R15 2019 12 12 11 45 00 1.051910221577E-04 0.000000000000E+00 3.870000000000E+05
2.451276953125E+04 7.425718307495E-01 4.656612873077E-09 0.000000000000E+00
4.643450683594E+03 4.951381683350E-02 0.000000000000E+00 0.000000000000E+00
-5.276882812500E+03 3.478320121765E+00-2.793967723846E-09 0.000000000000E+00
R19 2019 12 12 11 15 00-6.853323429823E-05-1.818989403546E-12 3.859500000000E+05
2.008951708984E+04 2.060537338257E-01 2.793967723846E-09 0.000000000000E+00
-1.541425244141E+04-4.377956390381E-01 2.793967723846E-09 3.000000000000E+00
3.049126953125E+03-3.578741073608E+00-1.862645149231E-09 0.000000000000E+00
R19 2019 12 12 11 45 00-6.853695958853E-05-1.818989403546E-12 3.870000000000E+05
1.978871044922E+04-5.135507583618E-01 3.725290298462E-09 0.000000000000E+00
-1.571828076172E+04 1.333026885986E-01 1.862645149231E-09 3.000000000000E+00
-3.427280273438E+03-3.570507049561E+00-1.862645149231E-09 0.000000000000E+00
R13 2019 12 12 11 45 00-3.215298056602E-05-0.000000000000E+00 3.876000000000E+05
3.100402832031E+03-2.939124107361E+00-1.862645149231E-09 0.000000000000E+00
1.186301953125E+04-8.695030212402E-01-9.313225746155E-10-2.000000000000E+00
2.235348193359E+04 8.685455322266E-01-1.862645149231E-09 0.000000000000E+00
R20 2019 12 12 11 45 00-3.986386582255E-04-0.000000000000E+00 3.877800000000E+05
9.837636718750E+03 1.428291320801E+00-0.000000000000E+00 0.000000000000E+00
-1.795626220703E+04-1.534766197205E+00 1.862645149231E-09 2.000000000000E+00
1.525312060547E+04-2.726587295532E+00-1.862645149231E-09 0.000000000000E+00
E01 2019 12 12 11 10 00-7.507699192502E-04-7.986500349944E-12 0.000000000000E+00
3.000000000000E+00 2.013125000000E+02 2.449744898851E-09 7.981291655576E-01
9.473413228989E-06 1.731918891892E-04 9.533017873764E-06 5.440622966766E+03
3.858000000000E+05 3.166496753693E-08-2.605880888987E+00-1.117587089539E-08
9.855193908613E-01 1.463750000000E+02-1.069210219000E+00-5.272719629937E-09
1.914365455291E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09-1.862645149231E-09
3.864650000000E+05
E01 2019 12 12 11 20 00-7.507746340707E-04-7.972289495228E-12 0.000000000000E+00
4.000000000000E+00 2.002500000000E+02 2.449744898851E-09 8.736282654153E-01
9.419396519661E-06 1.731686061248E-04 9.588897228241E-06 5.440622581482E+03
3.864000000000E+05 3.725290298462E-08-2.605884063520E+00-1.862645149231E-09
9.855195488564E-01 1.452500000000E+02-1.070324887968E+00-5.265933632987E-09
1.896507568581E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09-1.862645149231E-09
3.870650000000E+05
E09 2019 12 12 11 10 00 6.223833654076E-03-1.216449163621E-11 0.000000000000E+00
3.000000000000E+00 7.218750000000E+00 3.823373544569E-09-3.442271110123E-02
3.892928361893E-07 2.964780433103E-04 3.403052687645E-06 5.440603132248E+03
3.858000000000E+05-9.313225746155E-09 1.575307486314E+00-6.146728992462E-08
9.586413959478E-01 2.625000000000E+02 2.794206052069E-01-5.815242228181E-09
8.571785620706E-12 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-4.656612873077E-10-6.984919309616E-10
3.869030000000E+05
E12 2019 12 12 10 40 00 6.055364210624E-03-1.870148480521E-11 0.000000000000E+00
0.000000000000E+00-2.075312500000E+02 2.603322724555E-09-2.414195903395E+00
-9.659677743912E-06 2.996901748702E-04 6.495043635368E-06 5.440614477158E+03
3.840000000000E+05-2.421438694000E-08-5.219517721978E-01 5.774199962616E-08
9.864495053986E-01 2.151250000000E+02-9.348391204646E-01-5.376652530588E-09
-2.257236880119E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.327134668827E-08-1.327134668827E-08
3.858050000000E+05
E19 2019 12 12 11 00 00-2.469634637237E-06 2.273736754432E-13 0.000000000000E+00
2.000000000000E+00 1.103125000000E+01 3.765871149364E-09-1.685770007887E-01
4.824250936508E-07 1.212444622070E-04 3.688037395477E-06 5.440600940704E+03
3.852000000000E+05-5.401670932770E-08 1.580615112564E+00 5.215406417847E-08
9.583897608719E-01 2.595937500000E+02 1.996512379669E+00-5.770954669140E-09
1.160762636137E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.820766091347E-09-5.820766091347E-09
3.858660000000E+05
E19 2019 12 12 11 10 00-2.469576429576E-06 2.273736754432E-13 0.000000000000E+00
3.000000000000E+00 1.168750000000E+01 3.765156833895E-09-9.388288915917E-02
5.066394805908E-07 1.211694907397E-04 3.693625330925E-06 5.440600774765E+03
3.858000000000E+05-5.960464477539E-08 1.580611582543E+00 4.097819328308E-08
9.583898398694E-01 2.594687500000E+02 1.996204499781E+00-5.764168672191E-09
1.207193141583E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.820766091347E-09-5.820766091347E-09
3.864650000000E+05
E21 2019 12 12 11 10 00-5.709171527997E-04-2.131628207280E-12 0.000000000000E+00
3.000000000000E+00 2.180312500000E+02 2.333311477503E-09 1.537835498027E+00
1.022964715958E-05 9.841390419751E-05 9.685754776001E-06 5.440636165619E+03
3.858000000000E+05-2.980232238770E-08-2.608584029515E+00 4.842877388000E-08
9.850865499746E-01 1.424062500000E+02-1.025413854454E+00-5.217717338871E-09
1.871506527187E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 2.328306436539E-10
3.867350000000E+05
E21 2019 12 12 11 20 00-5.709183751605E-04-2.131628207280E-12 0.000000000000E+00
4.000000000000E+00 2.213125000000E+02 2.317953694933E-09 1.607657241034E+00
1.038052141666E-05 9.810912888497E-05 9.816139936447E-06 5.440637243271E+03
3.864000000000E+05-4.097819328308E-08-2.608587130902E+00 4.470348358154E-08
9.850867050439E-01 1.395312500000E+02-1.020851268976E+00-5.213788603794E-09
1.800074980348E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 2.328306436539E-10
3.870650000000E+05
E01 2019 12 12 11 10 00-7.507689879276E-04-7.986500349944E-12 0.000000000000E+00
3.000000000000E+00 2.013125000000E+02 2.449744898851E-09 7.981291655576E-01
9.473413228989E-06 1.731918891892E-04 9.533017873764E-06 5.440622966766E+03
3.858000000000E+05 3.166496753693E-08-2.605880888987E+00-1.117587089539E-08
9.855193908613E-01 1.463750000000E+02-1.069210219000E+00-5.272719629937E-09
1.914365455291E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09 0.000000000000E+00
3.865400000000E+05
E01 2019 12 12 11 20 00-7.507736445405E-04-7.972289495228E-12 0.000000000000E+00
4.000000000000E+00 2.002500000000E+02 2.449744898851E-09 8.736282654153E-01
9.419396519661E-06 1.731686061248E-04 9.588897228241E-06 5.440622581482E+03
3.864000000000E+05 3.725290298462E-08-2.605884063520E+00-1.862645149231E-09
9.855195488564E-01 1.452500000000E+02-1.070324887968E+00-5.265933632987E-09
1.896507568581E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09 0.000000000000E+00
3.871400000000E+05
E12 2019 12 12 10 40 00 6.055364909116E-03-1.871569565992E-11 0.000000000000E+00
0.000000000000E+00-2.075312500000E+02 2.603322724555E-09-2.414195903395E+00
-9.659677743912E-06 2.996901748702E-04 6.495043635368E-06 5.440614477158E+03
3.840000000000E+05-2.421438694000E-08-5.219517721978E-01 5.774199962616E-08
9.864495053986E-01 2.151250000000E+02-9.348391204646E-01-5.376652530588E-09
-2.257236880119E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.327134668827E-08 0.000000000000E+00
3.858400000000E+05
E19 2019 12 12 11 00 00-2.468528691679E-06 2.273736754432E-13 0.000000000000E+00
2.000000000000E+00 1.103125000000E+01 3.765871149364E-09-1.685770007887E-01
4.824250936508E-07 1.212444622070E-04 3.688037395477E-06 5.440600940704E+03
3.852000000000E+05-5.401670932770E-08 1.580615112564E+00 5.215406417847E-08
9.583897608719E-01 2.595937500000E+02 1.996512379669E+00-5.770954669140E-09
1.160762636137E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.820766091347E-09 0.000000000000E+00
3.859400000000E+05
E19 2019 12 12 11 10 00-2.468470484018E-06 2.273736754432E-13 0.000000000000E+00
3.000000000000E+00 1.168750000000E+01 3.765156833895E-09-9.388288915917E-02
5.066394805908E-07 1.211694907397E-04 3.693625330925E-06 5.440600774765E+03
3.858000000000E+05-5.960464477539E-08 1.580611582543E+00 4.097819328308E-08
9.583898398694E-01 2.594687500000E+02 1.996204499781E+00-5.764168672191E-09
1.207193141583E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.820766091347E-09 0.000000000000E+00
3.865400000000E+05
E21 2019 12 12 11 10 00-5.709161632694E-04-2.117417352565E-12 0.000000000000E+00
3.000000000000E+00 2.180312500000E+02 2.333311477503E-09 1.537835498027E+00
1.022964715958E-05 9.841390419751E-05 9.685754776001E-06 5.440636165619E+03
3.858000000000E+05-2.980232238770E-08-2.608584029515E+00 4.842877388000E-08
9.850865499746E-01 1.424062500000E+02-1.025413854454E+00-5.217717338871E-09
1.871506527187E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 0.000000000000E+00
3.867900000000E+05
E21 2019 12 12 11 20 00-5.709173856303E-04-2.131628207280E-12 0.000000000000E+00
4.000000000000E+00 2.213125000000E+02 2.317953694933E-09 1.607657241034E+00
1.038052141666E-05 9.810912888497E-05 9.816139936447E-06 5.440637243271E+03
3.864000000000E+05-4.097819328308E-08-2.608587130902E+00 4.470348358154E-08
9.850867050439E-01 1.395312500000E+02-1.020851268976E+00-5.213788603794E-09
1.800074980348E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 0.000000000000E+00
3.871400000000E+05
E04 2019 12 12 11 10 00-4.236891982146E-04-7.531752999057E-12 0.000000000000E+00
3.000000000000E+00 9.781250000000E+00 3.935521073107E-09-4.009111796513E-01
5.532056093216E-07 8.811207953840E-05 3.596767783165E-06 5.440604427338E+03
3.858000000000E+05 9.499490261078E-08 1.582511472789E+00 3.166496753693E-08
9.526713574660E-01 2.577187500000E+02 1.440283619102E+00-5.908817554540E-09
7.071723137082E-11 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.355104804039E-09-5.820766091347E-09
3.875670000000E+05
E04 2019 12 12 11 10 00-4.236878594384E-04-7.531752999057E-12 0.000000000000E+00
3.000000000000E+00 9.781250000000E+00 3.935521073107E-09-4.009111796513E-01
5.532056093216E-07 8.811207953840E-05 3.596767783165E-06 5.440604427338E+03
3.858000000000E+05 9.499490261078E-08 1.582511472789E+00 3.166496753693E-08
9.526713574660E-01 2.577187500000E+02 1.440283619102E+00-5.908817554540E-09
7.071723137082E-11 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-5.355104804039E-09 0.000000000000E+00
3.875900000000E+05
E11 2019 12 12 11 00 00 3.295102505945E-04 1.526245796413E-10 5.204170427930E-18
2.000000000000E+00-2.123750000000E+02 2.665468170305E-09 2.480654590844E+00
-9.858980774879E-06 1.651302445680E-04 7.150694727898E-06 5.440609029770E+03
3.852000000000E+05-3.352761268616E-08-5.219456059981E-01 2.048909664154E-08
9.864349859366E-01 1.975937500000E+02-2.012781103955E-01-5.400939256513E-09
-2.103659054415E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.583248376846E-08-1.699663698673E-08
3.876330000000E+05
E21 2019 12 12 11 30 00-5.709196557291E-04-2.131628207280E-12 0.000000000000E+00
5.000000000000E+00 2.240625000000E+02 2.303667385565E-09 1.677767938158E+00
1.050904393196E-05 9.777839295566E-05 9.970739483833E-06 5.440638303757E+03
3.870000000000E+05-5.401670932770E-08-2.608590226436E+00 3.725290298462E-08
9.850868571874E-01 1.362812500000E+02-1.016577701982E+00-5.210574184187E-09
1.721500278825E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 2.328306436539E-10
3.876650000000E+05
E11 2019 12 12 11 00 00 3.295124042779E-04 1.526387904960E-10 5.204170427930E-18
2.000000000000E+00-2.123750000000E+02 2.665468170305E-09 2.480654590844E+00
-9.858980774879E-06 1.651302445680E-04 7.150694727898E-06 5.440609029770E+03
3.852000000000E+05-3.352761268616E-08-5.219456059981E-01 2.048909664154E-08
9.864349859366E-01 1.975937500000E+02-2.012781103955E-01-5.400939256513E-09
-2.103659054415E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.583248376846E-08 0.000000000000E+00
3.876800000000E+05
E01 2019 12 12 11 30 00-7.507792906836E-04-7.972289495228E-12 0.000000000000E+00
5.000000000000E+00 1.994687500000E+02 2.447601952446E-09 9.486982138657E-01
9.378418326378E-06 1.731649972498E-04 9.616836905479E-06 5.440622346878E+03
3.870000000000E+05 3.911554813385E-08-2.605887229274E+00 7.450580596924E-09
9.855197039257E-01 1.446875000000E+02-1.071010335308E+00-5.259504793772E-09
1.871506527187E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09-1.862645149231E-09
3.877250000000E+05
E21 2019 12 12 11 30 00-5.709186661988E-04-2.117417352565E-12 0.000000000000E+00
5.000000000000E+00 2.240625000000E+02 2.303667385565E-09 1.677767938158E+00
1.050904393196E-05 9.777839295566E-05 9.970739483833E-06 5.440638303757E+03
3.870000000000E+05-5.401670932770E-08-2.608590226436E+00 3.725290298462E-08
9.850868571874E-01 1.362812500000E+02-1.016577701982E+00-5.210574184187E-09
1.721500278825E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 4.656612873077E-10 0.000000000000E+00
3.877400000000E+05
E01 2019 12 12 11 30 00-7.507783011533E-04-7.972289495228E-12 0.000000000000E+00
5.000000000000E+00 1.994687500000E+02 2.447601952446E-09 9.486982138657E-01
9.378418326378E-06 1.731649972498E-04 9.616836905479E-06 5.440622346878E+03
3.870000000000E+05 3.911554813385E-08-2.605887229274E+00 7.450580596924E-09
9.855197039257E-01 1.446875000000E+02-1.071010335308E+00-5.259504793772E-09
1.871506527187E-10 2.580000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00-1.629814505577E-09 0.000000000000E+00
3.878200000000E+05
E36 2019 12 12 10 30 00 6.253067986108E-04-4.803268893738E-12 0.000000000000E+00
1.270000000000E+02-2.396562500000E+02 2.521890761159E-09 3.060908164528E+00
-1.121312379837E-05 3.076605498791E-04 7.288530468941E-06 5.440609262466E+03
3.834000000000E+05 2.980232238770E-08-5.264936383676E-01 5.587935447693E-08
9.896539850266E-01 1.944062500000E+02-1.782833699345E+00-5.428440402046E-09
-2.457245211269E-10 5.170000000000E+02 2.083000000000E+03
3.120000000000E+00 0.000000000000E+00 3.725290298462E-09 4.423782229424E-09
3.878450000000E+05
S36 2019 12 12 11 36 48 0.000000000000E+00 0.000000000000E+00 3.874820000000E+05
4.200368800000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
3.674846960000E+03 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.530000000000E+02
S25 2019 12 11 23 59 44 0.000000000000E+00 0.000000000000E+00 3.874840000000E+05
4.053076976000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
-1.162201120000E+04 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00
S23 2019 12 12 11 37 04 0.000000000000E+00 0.000000000000E+00 3.874940000000E+05
3.594460000000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
2.204414000000E+04 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.460000000000E+02
S36 2019 12 12 11 38 56 0.000000000000E+00 0.000000000000E+00 3.875460000000E+05
4.200368800000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
3.674846960000E+03 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.540000000000E+02
S23 2019 12 12 11 39 12 0.000000000000E+00 0.000000000000E+00 3.875580000000E+05
3.594460000000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
2.204414000000E+04 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.470000000000E+02
S23 2019 12 12 11 41 20 0.000000000000E+00 0.000000000000E+00 3.876860000000E+05
3.594460000000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
2.204414000000E+04 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.480000000000E+02
S36 2019 12 12 11 41 04 0.000000000000E+00 0.000000000000E+00 3.877380000000E+05
4.200368800000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
3.674846960000E+03 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 2.550000000000E+02
S36 2019 12 12 11 43 12 0.000000000000E+00 0.000000000000E+00 3.878020000000E+05
4.200368800000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
3.674846960000E+03 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00
S23 2019 12 12 11 43 28 0.000000000000E+00 0.000000000000E+00 3.878780000000E+05
3.594460000000E+04 0.000000000000E+00 0.000000000000E+00 6.300000000000E+01
2.204414000000E+04 0.000000000000E+00 0.000000000000E+00 3.276700000000E+04
0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 1.490000000000E+02
C05 2019 12 12 11 00 00-2.244751667604E-04-5.808153957787E-11 0.000000000000E+00
1.000000000000E+00-4.986718750000E+02 1.785788670980E-12-5.169766818568E-01
-1.630326732993E-05 6.773804780096E-04 2.061109989882E-05 6.493346771240E+03
3.852000000000E+05 1.271255314350E-07-1.766797704845E-01 3.259629011154E-09
1.180676987021E-01-6.241562500000E+02-1.608095995036E+00 1.192549674481E-09
7.575315542299E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00-8.000000000000E-10-9.200000000000E-09
3.858276000000E+05 0.000000000000E+00
C10 2019 12 12 11 00 00-4.537283675745E-04-3.685762806072E-11 0.000000000000E+00
1.000000000000E+00 9.611718750000E+02 9.743262988869E-10-3.040647920928E+00
3.135204315186E-05 6.156359100714E-03 7.578637450933E-06 6.493785018921E+03
3.852000000000E+05-1.676380634308E-08-2.379959881122E+00-4.004687070847E-08
9.058375010021E-01-1.493750000000E+01-2.570309406835E+00-2.115088101909E-09
4.782342060886E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00 5.000000000000E-09 2.400000000000E-09
3.858180000000E+05 0.000000000000E+00
C23 2019 12 12 11 00 00-8.696540025994E-04 2.136069099379E-12 0.000000000000E+00
1.000000000000E+00 1.034062500000E+02 3.498002848716E-09 1.631067082891E+00
5.179084837437E-06 2.014992060140E-04 1.188227906823E-05 5.282628129959E+03
3.852000000000E+05 3.725290298462E-08-3.016985033742E+00 6.565824151039E-08
9.546959600159E-01 1.175156250000E+02-1.126531243634E+00-6.488127399406E-09
-1.864363372504E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00 2.430000000000E-08 2.430000000000E-08
3.858180000000E+05 1.000000000000E+00
C30 2019 12 12 11 00 00 2.388220746070E-04 6.104450278599E-12 0.000000000000E+00
1.000000000000E+00-1.393437500000E+02 3.927663602954E-09-2.732742750025E+00
-6.837770342827E-06 3.649030113593E-04 1.750886440277E-06 5.282614929199E+03
3.852000000000E+05-3.864988684654E-08-9.521190897989E-01-5.587935447693E-09
9.644793109832E-01 3.275781250000E+02-4.157902561103E-01-7.082080711374E-09
-2.339383158984E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00-1.040000000000E-08-1.040000000000E-08
3.858180000000E+05 1.000000000000E+00
C32 2019 12 12 11 00 00-8.566775359213E-04 2.992273095970E-12 0.000000000000E+00
1.000000000000E+00 2.875000000000E+01 4.228033257413E-09 2.867304095205E+00
1.456588506699E-06 1.842749770731E-04 6.427057087421E-06 5.282614164352E+03
3.852000000000E+05 1.862645149231E-09 1.148173467908E+00 6.705522537231E-08
9.608588315814E-01 2.297500000000E+02-1.050918258529E+00-6.857785654299E-09
5.228789228631E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00-9.900000000000E-09-9.900000000000E-09
3.857580000000E+05 1.000000000000E+00
C37 2019 12 12 11 00 00-8.880557725206E-04-5.954881032721E-11 0.000000000000E+00
1.000000000000E+00 1.086562500000E+02 3.521932416908E-09 8.066563687499E-01
5.388632416725E-06 7.037379546091E-04 1.127412542701E-05 5.282630052567E+03
3.852000000000E+05-2.142041921616E-08-3.020306267399E+00 1.536682248116E-08
9.560827215058E-01 1.306718750000E+02-1.080448983277E+00-6.580988410297E-09
-2.328668426958E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00-1.390000000000E-08-1.390000000000E-08
3.858180000000E+05 1.000000000000E+00
C20 2019 12 12 11 00 00-4.067538538948E-04-5.008171655163E-11 0.000000000000E+00
1.000000000000E+00 2.850000000000E+01 4.229461888350E-09 1.463145840983E+00
1.523178070784E-06 5.460308166221E-04 6.177462637424E-06 5.282614208221E+03
3.852000000000E+05 3.445893526077E-08 1.153432718382E+00-1.210719347000E-08
9.622213291121E-01 2.341406250000E+02-4.480160490039E-01-6.852785446020E-09
4.753769442150E-10 0.000000000000E+00 7.270000000000E+02
2.000000000000E+00 0.000000000000E+00 2.090000000000E-08 2.090000000000E-08
3.875880000000E+05 1.000000000000E+00
3.04 OBSERVATION DATA M RINEX VERSION / TYPE
sbf2rin-13.4.3 20200205 113408 UTC PGM / RUN BY / DATE
SEPT MARKER NAME
Unknown MARKER NUMBER
Unknown Unknown OBSERVER / AGENCY
3021420 SEPT ASTERX-M2 4.4.0 REC # / TYPE / VERS
Unknown Unknown ANT # / TYPE
4789398.3686 176958.8129 4194502.0999 APPROX POSITION XYZ
0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
G 7 X1 C1C L1C C2W L2W C2L L2L SYS / # / OBS TYPES
E 7 X1 C1C L1C C5Q L5Q C7Q L7Q SYS / # / OBS TYPES
S 3 X1 C1C L1C SYS / # / OBS TYPES
R 5 X1 C1C L1C C2C L2C SYS / # / OBS TYPES
C 5 X1 C2I L2I C7I L7I SYS / # / OBS TYPES
SEPTENTRIO RECEIVERS OUTPUT ALIGNED CARRIER PHASES. COMMENT
NO FURTHER PHASE SHIFT APPLIED IN THE RINEX ENCODER. COMMENT
G L1C SYS / PHASE SHIFT
G L2W SYS / PHASE SHIFT
G L2L 0.00000 SYS / PHASE SHIFT
E L1C 0.00000 SYS / PHASE SHIFT
E L5Q 0.00000 SYS / PHASE SHIFT
E L7Q 0.00000 SYS / PHASE SHIFT
S L1C SYS / PHASE SHIFT
R L1C SYS / PHASE SHIFT
R L2C SYS / PHASE SHIFT
C L2I SYS / PHASE SHIFT
C L7I SYS / PHASE SHIFT
0.050 INTERVAL
2019 12 12 11 37 42.0000000 GPS TIME OF FIRST OBS
2019 12 12 11 45 12.9000000 GPS TIME OF LAST OBS
36 # OF SATELLITES
C1C 0.000 C2C 0.000 GLONASS COD/PHS/BIS
8 R03 5 R05 1 R13 -2 R14 -7 R15 0 R19 3 R20 2 R21 4 GLONASS SLOT / FRQ #
END OF HEADER
> 2019 12 12 11 37 42.0000000 0 23
C05 16.000 40138840.659 6 209013478.40606 40138832.256 6 161622441.87406
C10 17.000 39633104.355 5 206379985.90205 39633100.852 6 159586077.69206
C23 18.000 22865676.301 8 119067585.90908
C32 19.000 22153454.599 8 115358921.19508
C37 20.000 23690566.611 7 123363010.77907
E01 11.000 26311074.676 7 138265636.53007 26311074.470 5 103250320.19005 26311070.977 7 105943790.57907
E09 12.000 25723493.482 5
E12 13.000 24803095.627 5 130341141.55605 24803092.768 4 97332661.71504 24803092.407 6 99871767.93506
E19 14.000 24540665.652 6 128962068.93606 24540664.837 5 96302837.53105 24540661.694 6 98815075.63606
E21 15.000 25609802.251 7 134580416.73507 25609802.381 7 100498367.38007 25609799.519 7 103120055.01507
G02 1.000 22032430.127 5
G06 2.000 22147435.410 6 116385570.45206 22147437.095 4 90690045.24704 22147437.422 7 90690046.16907
G07 3.000 20902411.481 8 109842911.60108 20902406.002 6 85591857.15006 20902406.930 7 85591857.16507
G09 4.000 21908403.525 6 115129430.37406 21908399.544 1 89711233.32401 21908399.320 5
G23 5.000 24104714.314 6 126671129.49306 24104706.816 2 98704739.67602
G30 6.000 21404145.095 8 112479542.93308 21404142.953 6 87646388.26706 21404143.916 7 87646383.27307
R03 7.000 21945110.617 7 117474090.63807 21945109.720 6 91368580.68606
R14 8.000 20214975.526 8 107757316.39008 20214976.579 7 83811176.41707
R15 9.000 22699008.378 5 121296675.96005 22699009.712 5 94341922.34705
R19 10.000 22853592.745 4 22853590.888 4
S23 21.000 38309228.895 7 201316353.13407
S25 22.000 37834172.957 6 198818604.39206
S36 23.000 37630702.258 7 197750698.01307
#include "gtest/utils_gtest.h"
#include "gnss_utils/utils/gnss_utils.h"
#include "gnss_utils/gnss_utils.h"
TEST(NavigationTests, Whatever)
{
......
......@@ -2,8 +2,7 @@
#include "gnss_utils/observations.h"
using namespace GnssUtils;
std::string rnx_file;
std::string rnx_file = std::string(_GNSS_UTILS_ROOT_DIR) + "/test/data/sample_data.obs";
obs_t obs;
const gtime_t t_start{ 0, 0 }; // no limit
const gtime_t t_end{ 0, 0 }; // no limit
......@@ -33,7 +32,7 @@ TEST(ObservationsTest, AddClearObservation)
for (int ii = 0; ii < obs.n; ++ii)
{
observations.addObservation(obs.data[ii]);
ASSERT_TRUE(equalObservations(obs.data[ii], observations.getObservations()[ii]));
ASSERT_TRUE(obs.data[ii] == observations.getObservations()[ii]);
}
ASSERT_TRUE(obs.n == observations.getObservations().size());
......@@ -42,6 +41,10 @@ TEST(ObservationsTest, AddClearObservation)
// Testing clear
observations.clearObservations();
ASSERT_TRUE(0 == observations.getObservations().size());
// Add duplicated observation (has to crash)
observations.addObservation(obs.data[0]);
ASSERT_DEATH(observations.addObservation(obs.data[0]),"");
}
TEST(ObservationsTest, LoadFromRinex)
......@@ -57,10 +60,9 @@ TEST(ObservationsTest, LoadFromRinex)
// Comparison
ASSERT_TRUE(obs.n == observations.getObservations().size());
for (int ii = 0; ii < obs.n; ++ii)
{
ASSERT_TRUE(equalObservations(obs.data[ii], observations.getObservations()[ii]));
ASSERT_TRUE(obs.data[ii] == observations.getObservations()[ii]);
}
free(obs.data);
......@@ -75,7 +77,7 @@ TEST(ObservationsTest, GetObservationBySat)
for (int ii = 0; ii < obs.n; ++ii)
{
ASSERT_TRUE(equalObservations(obs.data[ii], observations.getObservationBySat(obs.data[ii].sat)));
ASSERT_TRUE(obs.data[ii] == observations.getObservationBySat(obs.data[ii].sat));
}
}
......@@ -89,7 +91,7 @@ TEST(ObservationsTest, GetObservationByIdx)
for (int ii = 0; ii < obs.n; ++ii)
{
// We do this check like this because both loading functions load the rinex file and then sort the observations
ASSERT_TRUE(equalObservations(obs.data[ii], observations.getObservationByIdx(ii)));
ASSERT_TRUE( obs.data[ii] == observations.getObservationByIdx(ii));
}
}
......@@ -103,7 +105,7 @@ TEST(ObservationsTest, data)
for (int ii = 0; ii < obs.n; ++ii)
{
// We do this check like this because both loading functions load the rinex file and then sort the observations
ASSERT_TRUE(equalObservations(obs.data[ii], observations.data()[ii]));
ASSERT_TRUE( obs.data[ii] == observations.data()[ii]);
}
}
......@@ -122,26 +124,89 @@ TEST(ObservationsTest, HasSatellite)
TEST(ObservationsTest, FindCommonObservations)
{
loadRinex();
Observations observations1;
observations1.loadFromRinex(rnx_file.c_str(), t_start, t_end, dt, opt);
Observations observations2(observations1);
ASSERT_TRUE(observations1 == observations2);
Observations common1;
Observations common2;
Observations::findCommonObservations(observations1, observations2, common1, common2);
ASSERT_TRUE(common1 == common2);
ASSERT_TRUE(observations1 == common1);
ASSERT_TRUE(observations2 == common2);
}
TEST(ObservationsTest, FindCommonObservationsRemoved)
{
Observations observations1;
observations1.loadFromRinex(rnx_file.c_str(), t_start, t_end, dt, opt);
Observations observations2(observations1);
// Remove first observation of observations2
observations2.removeObservationByIdx(0);
Observations common1;
Observations common2;
Observations::findCommonObservations(observations1, observations2, common1, common2);
ASSERT_TRUE(common1 == common2);
ASSERT_FALSE(observations1 == common1);
ASSERT_TRUE(observations2 == common2);
}
TEST(ObservationsTest, FindCommonObservationsChangeTime)
{
Observations observations1;
observations1.loadFromRinex(rnx_file.c_str(), t_start, t_end, dt, opt);
Observations observations2(observations1);
// Change time
for (auto&& obs : observations2.getObservations())
{
obs.time.sec +=10;
}
Observations common1;
Observations common2;
Observations::findCommonObservations(observations1, observations2, common1, common2);
ASSERT_FALSE(common1 == common2);
ASSERT_TRUE(observations1 == common1);
ASSERT_TRUE(observations2 == common2);
for (auto obs = common1.getObservations().begin(); obs != common1.getObservations().end(); ++obs)
{
ASSERT_TRUE(equalObservations(common1.getObservationBySat(obs->sat), common2.getObservationBySat(obs->sat)));
const obsd_t& obs1 = common1.getObservationBySat(obs->sat);
const obsd_t& obs2 = common2.getObservationBySat(obs->sat);
ASSERT_FALSE(obs1.time == obs2.time);
ASSERT_TRUE(obs1.eventime == obs2.eventime);
ASSERT_TRUE(obs1.timevalid == obs2.timevalid);
ASSERT_TRUE(obs1.sat == obs2.sat);
ASSERT_TRUE(obs1.rcv == obs2.rcv);
ASSERT_TRUE(memcmp(obs1.SNR, obs2.SNR, sizeof(obs1.SNR)) == 0);
ASSERT_TRUE(memcmp(obs1.LLI, obs2.LLI, sizeof(obs1.LLI)) == 0);
ASSERT_TRUE(memcmp(obs1.code, obs2.code, sizeof(obs1.code)) == 0);
ASSERT_TRUE(memcmp(obs1.qualL, obs2.qualL, sizeof(obs1.qualL)) == 0);
ASSERT_TRUE(memcmp(obs1.qualP, obs2.qualP, sizeof(obs1.qualP)) == 0);
ASSERT_TRUE(obs1.freq == obs2.freq);
ASSERT_TRUE(equalArray<double>(obs1.L, obs2.L, sizeof(obs1.L) / sizeof(obs1.L[0]), sizeof(obs2.L) / sizeof(obs2.L[0])));
ASSERT_TRUE(equalArray<double>(obs1.P, obs2.P, sizeof(obs1.P) / sizeof(obs1.P[0]), sizeof(obs2.P) / sizeof(obs2.P[0])));
ASSERT_TRUE(equalArray<float>(obs1.D, obs2.D, sizeof(obs1.D) / sizeof(obs1.D[0]), sizeof(obs2.D) / sizeof(obs2.D[0])));
}
}
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
rnx_file = argv[1];
//rnx_file = argv[1];
return RUN_ALL_TESTS();
}
\ No newline at end of file
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment