NAIA  1.1.1
GTODTransformations.cpp
Go to the documentation of this file.
1 //
2 // Created by vformato on 6/27/23.
3 //
4 
7 
8 namespace NAIA {
9 namespace FrameTransformation {
10 PolarCoo<RefFrame::GTOD> AMSLocal_to_GTOD(float track_theta, float track_phi, const RTIInfo &rti_info) {
11  // NOTE: (based on the chain of function calls in gbatch) track theta and phi refer to the particle momentum vector
12  // They are inverted in the AMS frame of reference before being converted in GTOD
13  CartesianCoo<RefFrame::AMSLocal> track_direction{PolarCoo<RefFrame::AMSLocal>{1, track_theta, track_phi}};
14  track_direction *= -1;
15 
16  PolarCoo<RefFrame::GTOD> iss_position_ang{rti_info.Altitude + RTIInfo::Re, rti_info.Theta, rti_info.Phi};
17 
18  PolarCoo<RefFrame::GTOD> iss_velocity_ang{rti_info.Velocity_s * iss_position_ang.R(), rti_info.Velocity_theta,
19  rti_info.Velocity_phi};
20 
21  // - ISS conversions
22  // 1. Convert ISS position to cartesian
23  CartesianCoo<RefFrame::GTOD> iss_position_gtod{iss_position_ang};
24 
25  // 2. Convert ISS velocity to cartesian
26  CartesianCoo<RefFrame::GTOD> iss_velocity_gtod{iss_velocity_ang};
27 
28  // 3. Convert ISS GTOD coordinates and velocity to equatorial (FT_GTOD2Equat)
29  CartesianCoo<RefFrame::ECI> iss_position_eci = GTODToECIPos(iss_position_gtod, rti_info.UTCTime);
30  CartesianCoo<RefFrame::ECI> iss_velocity_eci = GTODToECIVel(iss_velocity_gtod, iss_position_gtod, rti_info.UTCTime);
31 
32  // - AMS track coordinates conversions
33  // 4. Convert AMS track coordinates to ISS-Body reference frame
34  CartesianCoo<RefFrame::ISSBody> track_coo_issbody = AMSLocalToISSBody(track_direction);
35 
36  // 5. Convert from ISS-Body to LVLH (Local Vertical - Local Horizontal) reference frame
37  CartesianCoo<RefFrame::ISSLVLH> track_coo_lvlh =
38  ISSBodyToLVLH(track_coo_issbody, rti_info.Yaw, rti_info.Pitch, rti_info.Roll);
39 
40  // 6. Convert from ISS LVLH to ECI (Earth Centered Inertial, i.e. "equatorial") reference frame
41  CartesianCoo<RefFrame::ECI> track_coo_eci = ISSLVLHToECI(track_coo_lvlh, iss_position_eci, iss_velocity_eci);
42 
43  // 7. Convert from equatorial to GTOD
44  CartesianCoo<RefFrame::GTOD> track_coo_gtod = ECIToGTOD(track_coo_eci, rti_info.UTCTime);
45 
46  // 8. Compute GTOD theta and phi from cartesian coordinates
47  // 9. return result
48  return PolarCoo<RefFrame::GTOD>{track_coo_gtod};
49 }
50 } // namespace FrameTransformation
51 } // namespace NAIA
NAIA::FrameTransformation::ISSBodyToLVLH
CartesianCoo< RefFrame::ISSLVLH > ISSBodyToLVLH(CartesianCoo< RefFrame::ISSBody > coo, double ISSYaw, double ISSPitch, double ISSRoll)
Definition: FrameTransformations.cpp:134
NAIA::FrameTransformation::GTODToECIPos
CartesianCoo< RefFrame::ECI > GTODToECIPos(CartesianCoo< RefFrame::GTOD > coo, double time)
‍** **************** COMMON *******************************‍/
Definition: FrameTransformations.cpp:92
NAIA::RTIInfo::Re
static constexpr double Re
Definition: RTIInfo.h:178
FrameTransformations.h
NAIA
Definition: Event.h:13
NAIA::FrameTransformation::AMSLocalToISSBody
CartesianCoo< RefFrame::ISSBody > AMSLocalToISSBody(CartesianCoo< RefFrame::AMSLocal > coo)
Definition: FrameTransformations.cpp:121
NAIA::FrameTransformation::ISSLVLHToECI
CartesianCoo< RefFrame::ECI > ISSLVLHToECI(CartesianCoo< RefFrame::ISSLVLH > coo, CartesianCoo< RefFrame::ECI > ISSECIPos, CartesianCoo< RefFrame::ECI > ISSECIVel)
Definition: FrameTransformations.cpp:151
NAIA::RTIInfo::Altitude
float Altitude
Altitude (gtod coordinate system) (cm)
Definition: RTIInfo.h:82
GTODTransformations.h
NAIA::RTIInfo::Phi
float Phi
Phi (gtod coordinate system) (rad)
Definition: RTIInfo.h:81
NAIA::RTIInfo::Theta
float Theta
Theta (gtod coordinate system) (rad)
Definition: RTIInfo.h:80
NAIA::FrameTransformation::PolarCoo
ROOT::Math::PositionVector3D< ROOT::Math::Polar3D< double >, RFrame< Frame > > PolarCoo
Definition: FrameTransformations.h:30
NAIA::FrameTransformation::ECIToGTOD
CartesianCoo< RefFrame::GTOD > ECIToGTOD(CartesianCoo< RefFrame::ECI > coo, double time)
Definition: FrameTransformations.cpp:182
NAIA::RTIInfo::Roll
float Roll
ISS roll angle (rad)
Definition: RTIInfo.h:84
NAIA::RTIInfo::Yaw
float Yaw
ISS yaw angle (rad)
Definition: RTIInfo.h:86
NAIA::RTIInfo::Velocity_theta
float Velocity_theta
ISS angular velocity theta component (rad)
Definition: RTIInfo.h:88
NAIA::FrameTransformation::AMSLocal_to_GTOD
PolarCoo< RefFrame::GTOD > AMSLocal_to_GTOD(float track_theta, float track_phi, const RTIInfo &rti_info)
Definition: GTODTransformations.cpp:10
NAIA::RTIInfo
Container class for RTI info.
Definition: RTIInfo.h:33
NAIA::RTIInfo::UTCTime
unsigned int UTCTime
JMDC unix time (seconds since 1 Jan 1970)
Definition: RTIInfo.h:104
NAIA::RTIInfo::Velocity_s
float Velocity_s
ISS angular velocity magnitude (rad/s)
Definition: RTIInfo.h:87
NAIA::FrameTransformation::CartesianCoo
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, RFrame< Frame > > CartesianCoo
Definition: FrameTransformations.h:29
NAIA::FrameTransformation::GTODToECIVel
CartesianCoo< RefFrame::ECI > GTODToECIVel(CartesianCoo< RefFrame::GTOD > vel, CartesianCoo< RefFrame::GTOD > coo, double time)
Definition: FrameTransformations.cpp:101
NAIA::RTIInfo::Velocity_phi
float Velocity_phi
ISS angular phi component (rad)
Definition: RTIInfo.h:89
NAIA::RTIInfo::Pitch
float Pitch
ISS pitch angle (rad)
Definition: RTIInfo.h:85