From 607d72d7bb7b6d7ff338908feb96502b5334304c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 19 Jan 2025 23:41:42 -0600 Subject: [PATCH 1/4] In level 2 debug output, convert Julian date and milliseconds to standard format --- wxdata/source/scwx/wsr88d/ar2v_file.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/wxdata/source/scwx/wsr88d/ar2v_file.cpp b/wxdata/source/scwx/wsr88d/ar2v_file.cpp index bdd1bcfc..89c7613b 100644 --- a/wxdata/source/scwx/wsr88d/ar2v_file.cpp +++ b/wxdata/source/scwx/wsr88d/ar2v_file.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #if defined(__GNUC__) # pragma GCC diagnostic pop @@ -253,10 +254,13 @@ bool Ar2vFile::LoadData(std::istream& is) if (dataValid) { + auto timePoint = util::TimePoint(p->julianDate_, p->milliseconds_); + logger_->debug("Filename: {}", p->tapeFilename_); logger_->debug("Extension: {}", p->extensionNumber_); - logger_->debug("Date: {}", p->julianDate_); - logger_->debug("Time: {}", p->milliseconds_); + logger_->debug("Date: {} ({:%Y-%m-%d})", p->julianDate_, timePoint); + logger_->debug( + "Time: {} ({:%H:%M:%S})", p->milliseconds_, timePoint); logger_->debug("ICAO: {}", p->icao_); size_t decompressedRecords = p->DecompressLDMRecords(is); From e522f85a72bd890280b8d6db2826d68f209b6bbb Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 19 Jan 2025 23:42:37 -0600 Subject: [PATCH 2/4] Collection time should not include milliseconds when selecting based off time --- scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index d25bb28d..b51d5c70 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -1507,10 +1507,10 @@ RadarProductManager::GetLevel2Data(wsr88d::rda::DataBlockType dataBlockType, if (recordRadarData != nullptr) { - auto& radarData0 = (*recordRadarData)[0]; - auto collectionTime = + auto& radarData0 = (*recordRadarData)[0]; + auto collectionTime = std::chrono::floor( scwx::util::TimePoint(radarData0->modified_julian_date(), - radarData0->collection_time()); + radarData0->collection_time())); // Find the newest radar data, not newer than the selected time if (radarData == nullptr || From c94e483c6ee50a7cc24324358440abd4813a91c2 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 20 Jan 2025 00:03:31 -0600 Subject: [PATCH 3/4] Ignore milliseconds when retrieving scan from level 2 file by time --- wxdata/source/scwx/wsr88d/ar2v_file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wxdata/source/scwx/wsr88d/ar2v_file.cpp b/wxdata/source/scwx/wsr88d/ar2v_file.cpp index 89c7613b..ca92db56 100644 --- a/wxdata/source/scwx/wsr88d/ar2v_file.cpp +++ b/wxdata/source/scwx/wsr88d/ar2v_file.cpp @@ -188,7 +188,7 @@ Ar2vFile::GetElevationScan(rda::DataBlockType dataBlockType, for (auto& scan : elevationScans) { - auto& scanTime = scan.first; + auto scanTime = std::chrono::floor(scan.first); if (elevationScan == nullptr || (scanTime <= time && scanTime > foundTime)) From 69d5a36f551966b01442a62a49f6b405847a01b4 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 20 Jan 2025 22:15:14 -0600 Subject: [PATCH 4/4] When viewing live level 2 data, ensure the latest scan is selected --- scwx-qt/source/scwx/qt/map/map_widget.cpp | 11 ++++++++++- wxdata/source/scwx/wsr88d/ar2v_file.cpp | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index f7ba99ae..cc501408 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1801,7 +1801,16 @@ void MapWidgetImpl::RadarProductManagerConnect() (group == common::RadarProductGroup::Level2 || context_->radar_product() == product)) { - widget_->SelectRadarProduct(record); + if (group == common::RadarProductGroup::Level2) + { + // Level 2 products may have multiple time points, + // ensure the latest is selected + widget_->SelectRadarProduct(group, product); + } + else + { + widget_->SelectRadarProduct(record); + } } }); } diff --git a/wxdata/source/scwx/wsr88d/ar2v_file.cpp b/wxdata/source/scwx/wsr88d/ar2v_file.cpp index ca92db56..1069fbcd 100644 --- a/wxdata/source/scwx/wsr88d/ar2v_file.cpp +++ b/wxdata/source/scwx/wsr88d/ar2v_file.cpp @@ -191,7 +191,9 @@ Ar2vFile::GetElevationScan(rda::DataBlockType dataBlockType, auto scanTime = std::chrono::floor(scan.first); if (elevationScan == nullptr || - (scanTime <= time && scanTime > foundTime)) + ((scanTime <= time || + time == std::chrono::system_clock::time_point {}) && + scanTime > foundTime)) { elevationScan = scan.second; foundTime = scanTime;