diff --git a/wxdata/source/scwx/wsr88d/ar2v_file.cpp b/wxdata/source/scwx/wsr88d/ar2v_file.cpp index 250341a0..f804685b 100644 --- a/wxdata/source/scwx/wsr88d/ar2v_file.cpp +++ b/wxdata/source/scwx/wsr88d/ar2v_file.cpp @@ -447,11 +447,9 @@ void Ar2vFileImpl::IndexFile() { //logger_->debug("Indexing file"); - constexpr float scaleFactor = 8.0f / 0.043945f; - for (auto& elevationCut : radarData_) { - std::uint16_t elevationAngle {}; + float elevationAngle {}; rda::WaveformType waveformType = rda::WaveformType::Unknown; std::shared_ptr& radial0 = @@ -467,14 +465,14 @@ void Ar2vFileImpl::IndexFile() if (vcpData_ != nullptr) { - elevationAngle = vcpData_->elevation_angle_raw(elevationCut.first); + elevationAngle = vcpData_->elevation_angle(elevationCut.first); waveformType = vcpData_->waveform_type(elevationCut.first); } else if ((digitalRadarData0 = std::dynamic_pointer_cast(radial0)) != nullptr) { - elevationAngle = digitalRadarData0->elevation_angle_raw(); + elevationAngle = digitalRadarData0->elevation_angle().value(); } else { @@ -502,18 +500,7 @@ void Ar2vFileImpl::IndexFile() auto time = util::TimePoint(radial0->modified_julian_date(), radial0->collection_time()); - // NOLINTNEXTLINE This conversion is accurate - float elevationAngleConverted = elevationAngle / scaleFactor; - // Any elevation above 90 degrees should be interpreted as a - // negative angle - // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) - if (elevationAngleConverted > 90) - { - elevationAngleConverted -= 360; - } - // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) - - index_[dataBlockType][elevationAngleConverted][time] = + index_[dataBlockType][elevationAngle][time] = elevationCut.second; } } diff --git a/wxdata/source/scwx/wsr88d/rda/digital_radar_data.cpp b/wxdata/source/scwx/wsr88d/rda/digital_radar_data.cpp index ebadf4f5..8f2643af 100644 --- a/wxdata/source/scwx/wsr88d/rda/digital_radar_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/digital_radar_data.cpp @@ -154,7 +154,18 @@ std::uint16_t DigitalRadarData::elevation_angle_raw() const units::degrees DigitalRadarData::elevation_angle() const { - return units::degrees {p->elevationAngle_ * kAngleDataScale}; + // NOLINTNEXTLINE This conversion is accurate + float elevationAngleConverted = p->elevationAngle_ * kAngleDataScale; + // Any elevation above 90 degrees should be interpreted as a + // negative angle + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + if (elevationAngleConverted > 90) + { + elevationAngleConverted -= 360; + } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + + return units::degrees {elevationAngleConverted}; } std::uint16_t DigitalRadarData::elevation_number() const diff --git a/wxdata/source/scwx/wsr88d/rda/volume_coverage_pattern_data.cpp b/wxdata/source/scwx/wsr88d/rda/volume_coverage_pattern_data.cpp index d2f3dec2..42ed3685 100644 --- a/wxdata/source/scwx/wsr88d/rda/volume_coverage_pattern_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/volume_coverage_pattern_data.cpp @@ -220,7 +220,20 @@ uint16_t VolumeCoveragePatternData::number_of_base_tilts() const double VolumeCoveragePatternData::elevation_angle(uint16_t e) const { - return p->elevationCuts_[e].elevationAngle_ * ANGLE_DATA_SCALE; + + // NOLINTNEXTLINE This conversion is accurate + float elevationAngleConverted = + p->elevationCuts_[e].elevationAngle_ * ANGLE_DATA_SCALE; + // Any elevation above 90 degrees should be interpreted as a + // negative angle + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + if (elevationAngleConverted > 90) + { + elevationAngleConverted -= 360; + } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + + return elevationAngleConverted; } uint16_t VolumeCoveragePatternData::elevation_angle_raw(uint16_t e) const