isce3 0.25.0
Loading...
Searching...
No Matches
Orbit.h
1#pragma once
2
3#include <thrust/device_vector.h>
4#include <vector>
5
6#include <isce3/core/DateTime.h>
7#include <isce3/core/Linspace.h>
8#include <isce3/core/Orbit.h>
9#include <isce3/core/StateVector.h>
10#include <isce3/core/TimeDelta.h>
11#include <isce3/core/Vector.h>
12
13namespace isce3 { namespace cuda { namespace core {
14
22class Orbit {
23public:
24
25 Orbit() = default;
26
28 Orbit(const isce3::core::Orbit &);
29
38 Orbit(const std::vector<isce3::core::StateVector> & statevecs,
39 isce3::core::OrbitInterpMethod interp_method = isce3::core::OrbitInterpMethod::Hermite);
40
48 Orbit(const std::vector<isce3::core::StateVector> & statevecs,
49 const isce3::core::DateTime & reference_epoch,
50 isce3::core::OrbitInterpMethod interp_method = isce3::core::OrbitInterpMethod::Hermite);
51
53 std::vector<isce3::core::StateVector> getStateVectors() const;
54
56 void setStateVectors(const std::vector<isce3::core::StateVector> &);
57
59 const isce3::core::DateTime & referenceEpoch() const { return _reference_epoch; }
60
63
65 isce3::core::OrbitInterpMethod interpMethod() const { return _interp_method; }
66
68 void interpMethod(isce3::core::OrbitInterpMethod interp_method) { _interp_method = interp_method; }
69
71 double startTime() const { return _time[0]; }
72
74 double midTime() const { return startTime() + 0.5 * (size() - 1) * spacing(); }
75
77 double endTime() const { return _time[size()-1]; }
78
80 isce3::core::DateTime startDateTime() const { return _reference_epoch + isce3::core::TimeDelta(startTime()); }
81
83 isce3::core::DateTime midDateTime() const { return _reference_epoch + isce3::core::TimeDelta(midTime()); }
84
86 isce3::core::DateTime endDateTime() const { return _reference_epoch + isce3::core::TimeDelta(endTime()); }
87
89 double spacing() const { return _time.spacing(); }
90
92 int size() const { return _time.size(); }
93
95 const isce3::core::Linspace<double> & time() const { return _time; }
96
98 const thrust::device_vector<isce3::core::Vec3> & position() const { return _position; }
99
101 const thrust::device_vector<isce3::core::Vec3> & velocity() const { return _velocity; }
102
104 double time(int idx) const { return _time[idx]; }
105
107 isce3::core::Vec3 position(int idx) const { return _position[idx]; }
108
110 isce3::core::Vec3 velocity(int idx) const { return _velocity[idx]; }
111
125 isce3::error::ErrorCode
126 interpolate(isce3::core::Vec3* position, isce3::core::Vec3* velocity,
127 double t,
128 isce3::core::OrbitInterpBorderMode border_mode =
129 isce3::core::OrbitInterpBorderMode::Error) const;
130
131private:
132 isce3::core::DateTime _reference_epoch;
134 thrust::device_vector<isce3::core::Vec3> _position;
135 thrust::device_vector<isce3::core::Vec3> _velocity;
136 isce3::core::OrbitInterpMethod _interp_method = isce3::core::OrbitInterpMethod::Hermite;
137};
138
139bool operator==(const Orbit &, const Orbit &);
140bool operator!=(const Orbit &, const Orbit &);
141
142}}}
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
Sequence of platform ephemeris samples (state vectors) with uniform temporal spacing,...
Definition Orbit.h:44
Data structure to store TimeDelta to double precision seconds.
Definition TimeDelta.h:16
double midTime() const
Time of center of orbit relative to reference epoch (s)
Definition Orbit.h:74
isce3::error::ErrorCode interpolate(isce3::core::Vec3 *position, isce3::core::Vec3 *velocity, double t, isce3::core::OrbitInterpBorderMode border_mode=isce3::core::OrbitInterpBorderMode::Error) const
Interpolate platform position and/or velocity.
Definition Orbit.cu:126
const thrust::device_vector< isce3::core::Vec3 > & position() const
Get state vector positions in ECEF coordinates (m)
Definition Orbit.h:98
isce3::core::Vec3 position(int idx) const
Get the specified state vector position in ECEF coordinates (m)
Definition Orbit.h:107
const isce3::core::DateTime & referenceEpoch() const
Reference epoch (UTC)
Definition Orbit.h:59
isce3::core::DateTime midDateTime() const
UTC time of center of orbit.
Definition Orbit.h:83
isce3::core::OrbitInterpMethod interpMethod() const
Interpolation method.
Definition Orbit.h:65
std::vector< isce3::core::StateVector > getStateVectors() const
Export list of state vectors.
Definition Orbit.cu:74
double spacing() const
Time interval between state vectors (s)
Definition Orbit.h:89
isce3::core::DateTime startDateTime() const
UTC time of first state vector.
Definition Orbit.h:80
const thrust::device_vector< isce3::core::Vec3 > & velocity() const
Get state vector velocities in ECEF coordinates (m/s)
Definition Orbit.h:101
double endTime() const
Time of last state vector relative to reference epoch (s)
Definition Orbit.h:77
void interpMethod(isce3::core::OrbitInterpMethod interp_method)
Set interpolation method.
Definition Orbit.h:68
double startTime() const
Time of first state vector relative to reference epoch (s)
Definition Orbit.h:71
void setStateVectors(const std::vector< isce3::core::StateVector > &)
Set orbit state vectors.
Definition Orbit.cu:91
const isce3::core::Linspace< double > & time() const
Get state vector times relative to reference epoch (s)
Definition Orbit.h:95
isce3::core::Vec3 velocity(int idx) const
Get the specified state vector velocity in ECEF coordinates (m/s)
Definition Orbit.h:110
int size() const
Number of state vectors in orbit.
Definition Orbit.h:92
double time(int idx) const
Get the specified state vector time relative to reference epoch (s)
Definition Orbit.h:104
isce3::core::DateTime endDateTime() const
UTC time of last state vector.
Definition Orbit.h:86
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5

Generated for ISCE3.0 by doxygen 1.13.2.