Program Listing for File lunanet_ephemeris.h¶
↰ Return to documentation for file (applications/ephemeris/lunanet_ephemeris.h)
#pragma once
#include <string>
#include <vector>
#include "lupnt/conversions/frame_converter.h"
#include "lupnt/core/constants.h"
#include "lupnt/core/definitions.h"
namespace lupnt {
struct EphemerisFitErrorStats {
Vec4d rms_pos_m = Vec4d::Zero(); // [R, T, N, 3D] position RMS error [m]
Vec4d rms_vel_mps = Vec4d::Zero(); // [R, T, N, 3D] velocity RMS error [m/s]
Vec4d p95_pos_m = Vec4d::Zero(); // [R, T, N, 3D] 95th-percentile |position error| [m]
Vec4d p95_vel_mps = Vec4d::Zero(); // [R, T, N, 3D] 95th-percentile |velocity error| [m/s]
};
struct EphemerisFitOptions {
int poly_order = 8;
bool use_keplerian_baseline = true;
double gm = GM_MOON;
Frame frame = Frame::MOON_CI;
int num_fourier_terms = 0;
};
class LansEphemeris {
public:
LansEphemeris() = default;
explicit LansEphemeris(EphemerisFitOptions 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 EphemerisFitOptions& GetOptions() const { return options_; }
private:
EphemerisFitOptions options_;
};
} // namespace lupnt