Program Listing for File antenna.h

Return to documentation for file (measurements/antenna.h)

#pragma once

#include <string>

#include "lupnt/core/definitions.h"
#include "lupnt/numerics/vector_macros.h"

namespace lupnt {
  class Antenna {
  public:
    Antenna() = default;
    Antenna(const std::string& name) : name_(name) { LoadAntennaPattern(); };

    void LoadAntennaPattern();

    Real ComputeGain(Real theta, Real phi) const;
    VEC_DEF_REAL_REAL(ComputeGain)


    std::string GetName() { return name_; }

    Real ComputeGain(const Vec3& direction) const;

    MatXd GetGainMatrix() { return gain_; }

    VecXd GetPhiVector() { return phi_; }

    VecXd GetThetaVector() { return theta_; }

  private:
    int n_dim_;         // Number of dimensions (1 or 2)
    std::string name_;  // Name (e.g., Block-IIR_ACE)
    double phi_max_;    // Minimum phiation angle [deg]
    MatXd gain_;        // Gain pattern [dB]
    VecXd phi_;         // Phi angles [deg]
    VecXd theta_;       // Theta angles [deg]

    void FormatAntennaPattern(std::vector<double>& phi, std::vector<double>& theta,
                              std::vector<std::vector<double>>& gain);
  };

}  // namespace lupnt