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"); //logger_->debug("Indexing file");
constexpr float scaleFactor = 8.0f / 0.043945f;
for (auto& elevationCut : radarData_) for (auto& elevationCut : radarData_)
{ {
std::uint16_t elevationAngle {}; float elevationAngle {};
rda::WaveformType waveformType = rda::WaveformType::Unknown; rda::WaveformType waveformType = rda::WaveformType::Unknown;
std::shared_ptr<rda::GenericRadarData>& radial0 = std::shared_ptr<rda::GenericRadarData>& radial0 =
@ -467,14 +465,14 @@ void Ar2vFileImpl::IndexFile()
if (vcpData_ != nullptr) if (vcpData_ != nullptr)
{ {
elevationAngle = vcpData_->elevation_angle_raw(elevationCut.first); elevationAngle = vcpData_->elevation_angle(elevationCut.first);
waveformType = vcpData_->waveform_type(elevationCut.first); waveformType = vcpData_->waveform_type(elevationCut.first);
} }
else if ((digitalRadarData0 = else if ((digitalRadarData0 =
std::dynamic_pointer_cast<rda::DigitalRadarData>(radial0)) != std::dynamic_pointer_cast<rda::DigitalRadarData>(radial0)) !=
nullptr) nullptr)
{ {
elevationAngle = digitalRadarData0->elevation_angle_raw(); elevationAngle = digitalRadarData0->elevation_angle().value();
} }
else else
{ {
@ -502,18 +500,7 @@ void Ar2vFileImpl::IndexFile()
auto time = util::TimePoint(radial0->modified_julian_date(), auto time = util::TimePoint(radial0->modified_julian_date(),
radial0->collection_time()); radial0->collection_time());
// NOLINTNEXTLINE This conversion is accurate index_[dataBlockType][elevationAngle][time] =
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] =
elevationCut.second; elevationCut.second;
} }
} }

View file

@ -154,7 +154,18 @@ std::uint16_t DigitalRadarData::elevation_angle_raw() const
units::degrees<float> DigitalRadarData::elevation_angle() 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 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 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 uint16_t VolumeCoveragePatternData::elevation_angle_raw(uint16_t e) const