# How to convert to GEO cordinate from the Mars Solar orbital coordinate (Sun-state)

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.

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

• 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. – Martian Mar 5 at 11:39
• 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 ! – Prakhar Mar 5 at 13:52
• 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. – Martian Mar 5 at 14:49
• 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. – Martian Mar 10 at 6:25
• +1 and thanks for the edit! I've cleaned up comments and added a bounty. – uhoh Mar 10 at 7:47

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)
sd=spiceypy.pxform('MAVEN_MSO','IAU_MARS',et)

  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.

• It's always good when someone finds a solution to their own question that they stop by and add an answer here for the benefit of future readers! As long as you don't click "accept" here the question will continue to be open and additional answers may accrue. – uhoh Mar 15 at 22:03
• Using the Spice kernels, it is working well and it is giving the perfect results. This answer will work for someone who can read/understand the Instrument spice kernels files (for any spacecraft/Planet data). I am in dilemma to accept this answer (In this approach). I will leave it to stack overflow for further decision. – Martian Mar 18 at 7:23
• The OP (Original Post author, i.e. you) decides if the question has been answered to their satisfaction. If you don't accept an answer, then it will show up in search results for someone who's searching for unanswered questions. Someone searching for answers to this problem will still see that there's at least one answer with some up votes, so even if not accepted they know that there's something here probably worth reading. It's totally up to you what to do. – uhoh Mar 18 at 7:29

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

• Please, find the edited question along with the data set and example. – Martian Mar 10 at 5:35