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_ = 0;          // Number of dimensions (0=omni, 1, or 2)
    std::string name_;       // Name (e.g., Block-IIR_ACE)
    double phi_max_ = 90.0;  // Maximum off-boresight 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