isce3 0.25.0
Loading...
Searching...
No Matches
Orbit.h
1#pragma once
2
3#include <isce3/error/ErrorCode.h>
4#include <vector>
5#include <string>
6
7#include "DateTime.h"
8#include "Linspace.h"
9#include "StateVector.h"
10#include "TimeDelta.h"
11#include "Vector.h"
12
13namespace isce3 { namespace core {
14
21enum class OrbitInterpMethod {
22 Hermite,
23 Legendre,
24};
25
27enum class OrbitInterpBorderMode {
28 Error,
29 Extrapolate,
30 FillNaN,
31};
32
44class Orbit {
45public:
46
47 Orbit() = default;
48
58 Orbit(const std::vector<StateVector> & statevecs,
59 OrbitInterpMethod interp_method = OrbitInterpMethod::Hermite,
60 const std::string& type = "");
61
70 Orbit(const std::vector<StateVector> & statevecs,
71 const std::string& type);
72
81 Orbit(const std::vector<StateVector> & statevecs,
82 const DateTime & reference_epoch,
83 OrbitInterpMethod interp_method = OrbitInterpMethod::Hermite,
84 const std::string& type = "");
85
96 Orbit crop(const DateTime& start, const DateTime& end, int npad = 0) const;
97
99 std::vector<StateVector> getStateVectors() const;
100
102 void setStateVectors(const std::vector<StateVector> &);
103
105 const DateTime & referenceEpoch() const { return _reference_epoch; }
106
113 void referenceEpoch(const DateTime &);
114
116 OrbitInterpMethod interpMethod() const { return _interp_method; }
117
119 void interpMethod(OrbitInterpMethod interp_method) { _interp_method = interp_method; }
120
122 const std::string& type() const { return _type; }
123
125 void type(const std::string& orbit_type) { _type = orbit_type; }
126
128 double startTime() const { return _time[0]; }
129
131 double midTime() const { return startTime() + 0.5 * (size() - 1) * spacing(); }
132
134 double endTime() const { return _time[size()-1]; }
135
137 DateTime startDateTime() const { return _reference_epoch + TimeDelta(startTime()); }
138
140 DateTime midDateTime() const { return _reference_epoch + TimeDelta(midTime()); }
141
143 DateTime endDateTime() const { return _reference_epoch + TimeDelta(endTime()); }
144
146 bool contains(double time) const {
147 return (startTime() <= time) && (time <= endTime());
148 }
149
151 double spacing() const { return _time.spacing(); }
152
154 int size() const { return _time.size(); }
155
157 const Linspace<double> & time() const { return _time; }
158
160 const std::vector<Vec3> & position() const { return _position; }
161
163 const std::vector<Vec3> & velocity() const { return _velocity; }
164
166 double time(int idx) const { return _time[idx]; }
167
169 const Vec3 & position(int idx) const { return _position[idx]; }
170
172 const Vec3 & velocity(int idx) const { return _velocity[idx]; }
173
188 isce3::error::ErrorCode
189 interpolate(Vec3* position, Vec3* velocity, double t,
190 OrbitInterpBorderMode border_mode =
191 OrbitInterpBorderMode::Error) const;
192
193private:
194 DateTime _reference_epoch;
195 Linspace<double> _time;
196 std::vector<Vec3> _position;
197 std::vector<Vec3> _velocity;
198 OrbitInterpMethod _interp_method = OrbitInterpMethod::Hermite;
199 std::string _type = "";
200};
201
202bool operator==(const Orbit &, const Orbit &);
203bool operator!=(const Orbit &, const Orbit &);
204
209constexpr
210int minStateVecs(OrbitInterpMethod method)
211{
212 switch (method) {
213 case OrbitInterpMethod::Hermite : return 4;
214 case OrbitInterpMethod::Legendre : return 9;
215 }
216
217 return -1;
218}
219
220}}
Sequence of platform ephemeris samples (state vectors) with uniform temporal spacing,...
Definition Orbit.h:44
Data structure to store date time to nano-sec precision.
Definition DateTime.h:18
A uniformly-spaced sequence of values over some interval.
Definition Linspace.h:9
const Vec3 & velocity(int idx) const
Get the specified state vector velocity in ECEF coordinates (m/s)
Definition Orbit.h:172
isce3::error::ErrorCode interpolate(Vec3 *position, Vec3 *velocity, double t, OrbitInterpBorderMode border_mode=OrbitInterpBorderMode::Error) const
Interpolate platform position and/or velocity.
Definition Orbit.cpp:71
double time(int idx) const
Get the specified state vector time relative to reference epoch (s)
Definition Orbit.h:166
const Linspace< double > & time() const
Get state vector times relative to reference epoch (s)
Definition Orbit.h:157
const std::vector< Vec3 > & velocity() const
Get state vector velocities in ECEF coordinates (m/s)
Definition Orbit.h:163
const std::vector< Vec3 > & position() const
Get state vector positions in ECEF coordinates (m)
Definition Orbit.h:160
void interpMethod(OrbitInterpMethod interp_method)
Set interpolation method.
Definition Orbit.h:119
const DateTime & referenceEpoch() const
Reference epoch (UTC)
Definition Orbit.h:105
bool contains(double time) const
Check if time falls in the valid interpolation domain.
Definition Orbit.h:146
double startTime() const
Time of first state vector relative to reference epoch (s)
Definition Orbit.h:128
double endTime() const
Time of last state vector relative to reference epoch (s)
Definition Orbit.h:134
DateTime startDateTime() const
UTC time of first state vector.
Definition Orbit.h:137
double midTime() const
Time of center of orbit relative to reference epoch (s)
Definition Orbit.h:131
void setStateVectors(const std::vector< StateVector > &)
Set orbit state vectors.
Definition Orbit.cpp:52
double spacing() const
Time interval between state vectors (s)
Definition Orbit.h:151
void type(const std::string &orbit_type)
Set the orbit ephemeris precision type.
Definition Orbit.h:125
const Vec3 & position(int idx) const
Get the specified state vector position in ECEF coordinates (m)
Definition Orbit.h:169
Orbit crop(const DateTime &start, const DateTime &end, int npad=0) const
Create a new Orbit containing data in the requested interval.
Definition Orbit.cpp:103
DateTime endDateTime() const
UTC time of last state vector.
Definition Orbit.h:143
OrbitInterpMethod interpMethod() const
Interpolation method.
Definition Orbit.h:116
const std::string & type() const
Orbit ephemeris precision type.
Definition Orbit.h:122
std::vector< StateVector > getStateVectors() const
Export list of state vectors.
Definition Orbit.cpp:41
int size() const
Number of state vectors in orbit.
Definition Orbit.h:154
DateTime midDateTime() const
UTC time of center of orbit.
Definition Orbit.h:140
Data structure to store TimeDelta to double precision seconds.
Definition TimeDelta.h:16
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5

Generated for ISCE3.0 by doxygen 1.13.2.