Move elevation conversion code into VCP and DRD code

This commit is contained in:
AdenKoperczak 2025-04-08 10:41:44 -04:00
parent 63585af26d
commit 6ca76b9eca
No known key found for this signature in database
GPG key ID: 9843017036F62EE7
3 changed files with 30 additions and 19 deletions

View file

@ -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<rda::GenericRadarData>& 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<rda::DigitalRadarData>(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;
}
}

View file

@ -154,7 +154,18 @@ std::uint16_t DigitalRadarData::elevation_angle_raw() const
units::degrees<float> DigitalRadarData::elevation_angle() const
{
return units::degrees<float> {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<float> {elevationAngleConverted};
}
std::uint16_t DigitalRadarData::elevation_number() const

View file

@ -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