I am working on the planetary science (on Mars) project for my master thesis. I am using MAVEN data for analysis. Data (spacecraft position) are measured in MSO (Mars Solar orbital) coordinate. I wanted to convert to GEO (Mars) coordinate. MSO or SS: The X-axis lies along this vector and is taken to be positive toward the Sun. The y axis lies in the plane determined by the Mars-Sun vector and the velocity vector and is orthogonal to the x-axis and z parallel to the northward (upward) normal of the orbit plane of Mars. GEO: Z is taken to lie along the rotation axis and be positive in the direction of positive angular momentum. The X-axis is defined to lie in the equatorial plane of the body, perpendicular to Z, and in the direction of the prime meridian as defined by the International Astronomical Union (IAU). The Y-axis completes the right-handed set.
I have no clue how to approach this problem. I have tried one approach

(x,y,z)(GEO) = Ry(90-lat)*Rz(lon)*(x,y,z)(ss)  

Ry and Rz rotation matrix in Y and Z coordinate respectively. for few cases, it showing nearby values but not accurate. any suggestions will be greatly beneficial.

Example: I have magnetometer data, which is measured by mag instrument, and values of bx, by,bz values are given in MSO coordinate. I want to convert this to GEO (bx, by,bz) COORDINATE. Example Data looks like

The values are given in both MSO and GEO co-ordinate. I was looking for the matrix which converts from MSO to GEO or vice versa for my understanding.

MSO : (bx,by,bz) = (10.25, -2.37, -4.94)

GEO : (bx,by,bz) = (3.73, 7.20, -8.33)

These data are available on the MAVEN website. MAVEN MAG instrument data set

Thank You

  • $\begingroup$ These are the coordinates in which data of the satellite (payload - instruments) is provided. I have briefly mentioned how the MSO and GEO coordinate is defined (like how x,y, and z coordinate measured). besides this, there is no such information files are given. Sometimes they mention these are standard conversion matrix (transformation), which I am not aware of. $\endgroup$
    – Martian
    Mar 5, 2021 at 11:39
  • $\begingroup$ Basically, you need sun vector in inertial frame from a sun model, then differentiate the vector to get velocity vector of mars in Inertial frame and other is orthogonal triad. Now you have Inertial frame vectors for X,Y,Z of the MSO frame, using the sidereal angle at epoch, rotate to fixed frame. Now you if you put these vectors in a row one after other you got directions cosine matrix which converts from fixed frame to MSO. Use conjugate of that for your purpose. I shall update with equations once I am with Laptop ! $\endgroup$
    – zephyr0110
    Mar 5, 2021 at 13:52
  • $\begingroup$ Dear uhoh, All this are from the standard sources.( MAVEN data base. ) NOW, I have updated my question with example and thank you very much your suggestions. $\endgroup$
    – Martian
    Mar 5, 2021 at 14:49
  • 1
    $\begingroup$ My intention was to show the data set. below that, I have given one example with values. MAVEN Spacecraft has many instruments and in the beginning, It was difficult for me to give a link for the data set, which shows both the value (MSO and GEO). I am new to stack Space Exploration Beta (stack overflow community). For future questions/discussions I will fix these issues. $\endgroup$
    – Martian
    Mar 10, 2021 at 6:25
  • $\begingroup$ I know this is very late, but I know of a few references for Jupiter that may give you the insight to find the formal answer you are looking for: 1. A paper published around the time of your question that discusses a similar transformation in great detail- doi.org/10.1029/2023EA003147 2. A webpage that collects the definitions of each coordinate system used and how they may be used to determine physical quantities (i.e., Local Time, elongation, etc.)- lasp.colorado.edu/mop/files/2015/02/CoOrd_systems7.pdf Ideally the definitions will translate between the two planets $\endgroup$
    – Mike H
    Sep 26, 2023 at 20:01

2 Answers 2


I am answering this question in an indirect way. I am looking for a more mathematical formulation (When I asked this question) for converting from Mars Solar Orbital (MSO) coordinate to GEO coordinate or vice versa. As I exploring for solutions, I found spacecraft spice kernels will help in converting these kinds of coordinate transformations.
In the case of MAVEN (Mars Atmospheric Volatile EvolutioN mission) - Mars. ON the JPL - NASA website link for MAVEN spice kernels, I have found the link for downloading spacecraft-related kernels and the below codes helped me to reach the solution.

This approach can be applied to other spacecraft data also to derive in there respective planet coordinates system.

et = spiceypy.str2et(utctim)
  et: Ephemeris Time: corresponds to observation time   
  MAVEN_MSO: MAVEN coordinate in MSO   
  IAU_MARS: Mars coordinate (GEO)

sd: Transformed 3x3 matrix.

I checked for the above values and it is perfectly matching with the numbers.

  • $\begingroup$ The transformation you seek is an amalgamation of a rotation in the X-Y plane, and a translation of axes. You can certainly just grab the converted data from the spice kernel, but you could determine the conversion at any point in Mars's orbit by a) drawing a Sun-Mars vector (defining the translation) and b) calculating the angle between the X (or Y) axes in the two systems. This angle yields the rotation within the X-Y plane. Once you have written both matrices, make sure you take their product in the proper order! $\endgroup$
    – Mike H
    Sep 26, 2023 at 20:05

I will essentially write the pseudo code of how to do it, I assume that SunVectorInInertialFrame function gives sun vector in Inertial Frame[Not the J2000 one]. And that Inertial 2 Geo is available as function of time as it is just function of sidereal angle, which itself is a function of time.

X = SunVectorInInertialFrame(JulianDate)
Y = (SunVectorInInertialFrame(JulianDate+DT) 
     - SunVectorInInertialFrame(JulianDate)) / DT
Z = cross(X, Y)
Z = Normalize Z
Y = cross(Z, X)

DCM_MSO2Inertial = Transpose of 
| X[0], X[1], X[2] |
| Y[0], Y[1], Y[2] |
| Z[0], Z[1], Z[2] |

DCM_Inertial_2_GEO = Get From the Current JulianDate 

DCM_MSO_2_GEO = DCM_Inertial_2_GEO * DCM_MSO2Inertial

I hope that's what you were looking for

  • 1
    $\begingroup$ Please, find the edited question along with the data set and example. $\endgroup$
    – Martian
    Mar 10, 2021 at 5:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.