Program Listing for File lunanet_almanac.h

Return to documentation for file (applications/ephemeris/lunanet_almanac.h)

#pragma once

#include <string>
#include <vector>

#include "lupnt/applications/ephemeris/lunanet_ephemeris.h"
#include "lupnt/core/constants.h"
#include "lupnt/core/definitions.h"

namespace lupnt {

  struct AlmanacFitOptions {
    int poly_order = 1;

    int num_fourier_terms = 1;

    double gm = GM_MOON;

    double sidereal_period_s = 27.321661 * SECS_DAY;

    Frame frame = Frame::MOON_CI;
  };

  class LansAlmanac {
  public:
    LansAlmanac() = default;
    explicit LansAlmanac(AlmanacFitOptions options) : options_(options) {}

    VecXd Fit(const VecXd& t_s, const MatXd& rv) const;

    MatXd Eval(const VecXd& t_s, const VecXd& params) const;

    EphemerisFitErrorStats EvalError(const VecXd& t_s, const MatXd& rv_ref,
                                     const VecXd& params) const;

    int NumParams() const;

    std::vector<std::string> ParamNames() const;

    const AlmanacFitOptions& GetOptions() const { return options_; }

  private:
    AlmanacFitOptions options_;
  };

}  // namespace lupnt