Program Listing for File occultation.h

Return to documentation for file (include/lupnt/physics/occultation.h)

#pragma once

#include <cmath>
#include <map>

#include "lupnt/core/constants.h"
#include "lupnt/numerics/math_utils.h"
#include "lupnt/physics/frame_converter.h"

#pragma once

namespace lupnt {

  class Occultation {
  private:
    static constexpr double min_elevation_ = 10.0 * RAD;
    static constexpr double r_atmos_ = R_EARTH + 100.0;  // atmospheric mask
    static constexpr double r_ionos_ = R_EARTH + 965.0;  // ionospheric mask

  public:
    static std::map<std::string, bool> ComputeOccultationGnss(const Vec3d tx_eci,
                                                              const Vec3d tx_mci,
                                                              const Vec3d rx_eci,
                                                              const Vec3d rx_mci,
                                                              const std::string tx_planet);

    static std::map<std::string, bool> ComputeOccultation(Real epoch, const Vec3& r1,
                                                          const Vec3& r2, Frame cs1, Frame cs2,
                                                          const std::vector<NaifId>& bodies,
                                                          const VecXd& atm_h);

    static std::vector<std::map<std::string, bool>> ComputeOccultation(
        Real epoch, const Mat<-1, 3>& r1, const Mat<-1, 3>& r2, Frame cs1, Frame cs2,
        const std::vector<NaifId>& bodies, const VecXd& atm_h);

    static std::vector<std::map<std::string, bool>> ComputeOccultation(
        const VecX& epoch, const Mat<-1, 3>& r1, const Mat<-1, 3>& r2, Frame cs1, Frame cs2,
        const std::vector<NaifId>& bodies, const VecXd& atm_h);
  };
}  // namespace lupnt