SPKDIFF User's Guide

Index Page SPKDIFF User's Guide
## Table of Contents
       SPKDIFF User's Guide
          Abstract
          Summary
          Usage
          Specifying Options vs. Defaults
             Options/Defaults for Body, Center, and Frame
             Options/Defaults for Comparison Time Boundaries and Step
             Options/Defaults for Output Report Type
             Option for Specifying Additional Kernels
          Output Report Types
             Usage display
             Comparison Information Header
             Basic Report (no ``-t'' option or ``-t basic'')
             View Frame Statistics Report (``-t stats'')
             Difference Dump Report (``-t dump'')
             View Frame Difference Dump Report (``-t dumpvf'')
          Troubleshooting
          Examples
             Do Two SPK Files Provide the Same Trajectory for a Spacecraft?
             Do SPK files Differ Enough to Matter?
             What Is the Down Track Timing Error?
             How Does the Difference Change with Time?
Top # SPKDIFF User's Guide Last revised on 2006 JUL 20 by B. V. Semenov. Top ## Abstract SPKDIFF is a program that computes differences between geometric states obtained from two SPK files and either displays these differences or shows statistics about them. Top ## Summary SPKDIFF provides a simple way of comparing trajectories stored in two SPK files. To perform a comparison it computes a set of geometric states of a body as seen from a center in a reference frame over an interval of time with a fixed time step using one SPK file, computes a set of geometric states for the same or different body-center-frame combination at the same times using the other SPK file, and then subtracts corresponding states from each other. Depending on type of output report requested the program prints to the screen only maximum differences in position and velocity, or a complete table of position and velocity differences, or a complete table of differences expressed in the ``view frame'' coordinates, or results of a simple statistical analysis of the differences expressed in the ``view frame'' coordinates. Top ## Usage SPKDIFF is a command line program with the following usage:
          > spkdiff [options] <first SPK file> <second SPK file>
where options are:
          -b1 <first body name or ID>
          -c1 <first center name or ID>
          -r1 <first reference frame name>
          -b2 <second body name or ID>
          -c2 <second center name or ID>
          -r2 <second reference frame name>
          -k  <other kernel file name(s)>
          -b  <interval begin time>
          -e  <interval end time>
          -s  <time step in seconds>
          -n  <number of states: 2 to 1000000 (default: 1000)>
          -f  <output time format (default: TDB seconds past J2000)>
          -t  <report type: basic|stats|dump|dumpvf (default: basic)>
The names of the two SPK files to be compared are required while none of the other options are. The order of options and case of the option keys are not significant. The values provided after the option keys must be separated from keys by one or more spaces. Un-recongnized options are not specifically checked for; instead they are treated as continuation of the value provided with the preceeding reconginized option. Either physical object names or NAIF IDs can be provided using the ``-b1'', ``-c1'', ``-b2'', and ``-c2'' options to identify the bodies and centers to be used for each of the two SPK files. If the names provided using these options do not belong to the set of name/ID mappings built into SPICE, a text kernel(s) containing name/ID mappings for these names must be provided using the ``-k'' option. The reference frame names provided using the ``-r1'' and ``-r2'' options must be for any of the frames built into SPICE; otherwise a frame kernel(s) defining these frames must be provided using the ``-k'' option. The comparison interval begin and end times specified using the ``-b'' and ``-e'' options must be in any of the formats accepted by SPICE STR2ET routine (see STR2ET header for details). If one or both of these times are provided, the name of an LSK file must also be provided using the ``-k' option. The output time format to be used in ``dump'' reports, provided using the ``-f'' option must be given in any of the forms acceptable to the SPICE TIMOUT routine (see TIMOUT header for details). Top ## Specifying Options vs. Defaults None of the command line options is required because SPKDIFF can pick a default value for each of them either by examining the two SPK files provided for comparison, or by using parameters hard-coded into the program. On the other hand using a subset of options or even all options might be required for a number of reasons. For example ``-t'' options must be used to get output reports other than basic, ``-b1'' and ``-b2'' options may be used to compare SPK files containing trajectories for spacecraft with different IDs, ``-b'' and ``-e'' options must be used to compute differences over particular time intervals, and so on. This section provides detailed information about which default values are picked by the program for any of the options that are not specified by the user. Top ### Options/Defaults for Body, Center, and Frame Since SPKDIFF computes geometric states by calling the SPICE SPKGEO routine, for each of the two SPK files it needs to know the combination of the body, center, and frame -- three of the four inputs to that routine (the fourth input, time, is discussed later in this User's Guide). The program has six separate options -- ``-b1'', ``-c1'', ``-r1'', ``-b2'', ``-c2'', and ``-r2'', -- one for each of the three items for each of the two SPK files, together providing the flexibility to specify completely distinct body, center, and frame combinations for each of the two SPK files. In many cases, though the SPK files to be compared contain trajectories of the same body relative to the same center given in the same frame. For these cases specifying all six options seems like an unnecessary burden. Moreover, the segment layout of SPK files can be fairly simple allowing the program to determine all of these values by examining the data in the first SPK file. This set of simple rules determines which body, center, and frame combination SPKDIFF uses when calling SPKGEO for each of the two SPK files, given a particular set of options and defaults determined by examining the data in the SPK files. The rules for picking bodies to be used in calls to SPKGEO to sample states from the SPK files are: `--` If neither the body name/ID for the first SPK file is specified using the ``-b1'' option nor the body name/ID for the second SPK file is specified using the ``-b2'' option, the body to be used for both SPK files is determined by examining segments in the first SPK file. If the first SPK file contains segments for one or more spacecraft (i.e. segments for bodies with negative IDs), the body from the spacecraft data segment closest to the end of the file is picked and used for computing states from both SPK files. If the SPK file does not contain data for any spacecraft, the body from the very last segment of the file is picked and used for computing states from both SPK files. `--` If either the body name/ID for the first SPK file is specified using the ``-b1'' option or the body name/ID for the second SPK file is specified using the ``-b2'' option, this body is used for both SPK files. `--` If the body name/ID for the first SPK file is specified using the ``-b1'' option and the body name/ID for the second SPK file is specified using the ``-b2'' option, these bodies are used for the corresponding SPK files. The rules for picking centers to be used in calls to SPKGEO to sample states from the first and second SPK files are: `--` If neither the center name/ID for the first SPK file is specified using the ``-c1'' option nor the center name/ID for the second SPK file is specified using the ``-c2'' option, the center to be used for both SPK files is determined by examining segments in the first SPK file. It is set to the center from the last segment in the file for the body determined using the rules for picking bodies (the rules for picking bodies are explained earlier in the ``Options/Defaults for Body, Center, and Frame'' section of this User's Guide). `--` If either the center name/ID for the first SPK file is specified using the ``-c1'' option or the center name/ID for the second SPK file is specified using the ``-c2'' option, this center is used for both SPK files. `--` If the center name/ID for the first SPK file is specified using the ``-c1'' option and the center name/ID for the second SPK file is specified using the ``-c2'' option, these centers are used for the corresponding SPK files. The rules for picking reference frames to be used in calls to SPKGEO to sample states from the first and second SPK files are: `--` If neither the reference frame name for the first SPK file is specified using the ``-r1'' option nor the reference frame name for the second SPK file is specified using the ``-r2'' option, the reference frame to be used for both SPK files is determined by examining segments in the first SPK file. It is set to the name of the reference frame from last segment in the file for the body determined using the rules for picking bodies (the rules for picking bodies are explained earlier in the ``Options/Defaults for Body, Center, and Frame'' section of this User's Guide). `--` If either the reference frame name for the first SPK file is specified using the ``-r1'' option or the reference frame name for the second SPK file is specified using the ``-r2'' option, this reference frame is used for both SPK files. `--` If the reference frame name for the first SPK file is specified using the ``-r1'' option and the reference frame name for the second SPK file is specified using the ``-r2'' option, these reference frames are used for the corresponding SPK files. A few scenarios shown below illustrate when some or all of the options specifying body, center and frame can be omitted and when they should be provided to achieve the desired result: `--` When comparing spacecraft trajectories for a spacecraft with the same ID provided in two SPK files, each containing data only for one spacecraft with or without planetary ephemeris data merged in, neither of the six options specifying body, center and frame combination is required. SPKDIFF determines body, center and frame from the last segment for that spacecraft from the first SPK file and uses these body, center and frame in calling SPKGEO to obtain states from both SPK files. `--` When comparing spacecraft trajectories for the spacecraft with the same ID provided in two SPK files, each containing data for more than one spacecraft, the name/ID of that spacecraft needs to be specified either using either the ``-b1'' or ``-b2'' option to prevent SPKDIFF from automatically picking the other spacecraft, data for which is also provided in the files. `--` When comparing spacecraft trajectories for the same spacecraft ``tagged'' with two different IDs (for example flight ID and simulation ID) provided in two SPK files, both IDs need to be specified using the ``-b1'' and ``-b2'' options to make sure that SPKDIFF uses the right ID for each of the files. `--` When comparing ephemerides for a natural body provided in two planetary or satellite ephemeris SPK files, the name/ID of that body need to be specified using either the ``-b1'' or ``-b2'' option to prevent SPKDIFF from automatically picking a different body. The list of scenarios and suggestions above is not comprehensive by any means. There are numerous applications in which not just bodies but also centers and references frames may need to be specified to override defaults. For example, a center may need to be specified to compare trajectories with respect to a center that is different from the center of motion specified in the SPK segment; two centers may need to be specified to compare two SPK files, in one of which the trajectory is given with respect to the planet center while in the other it is given with respect to the planet system barycenter; two different frames may need to be specified to see how different the trajectory from the same SPK file would appear if it was computed in a different frame; and so on. Top ### Options/Defaults for Comparison Time Boundaries and Step The final input argument to SPKGEO that SPKDIFF calls to compute states from the two input SPK files is time. SPKDIFF generates an array of equally-spaced TDB epochs between the comparison window begin and end times determined from the combination of the specified command line options, defaults obtained by examining the SPK files to be compared, and parameters built into the program. The options controlling how SPKDIFF determines the epochs include the ``-b'' option for specifying begin time, the ``-e'' option for specifying end time, the ``-s'' option for specifying time step in TDB seconds, and the ``-n'' option for specifying the number of equidistant points within the comparison window. The ``-s'' and ``-n'' options are mutually exclusive with the ``-s'' option taking priority if both are specified. As with the body, center, frame combinations, in some cases no command line options defining the comparison window boundaries and time step need to be specified because the combination of defaults picked by SPKDIFF by examining the SPK files and using internal parameters produces the desired result. In other cases, though, specifying one or both comparison window end points and/or the time step on the command line may be required to perform a comparison only over a time period of interest or get a more ``refined'' result by using a smaller time step. This set of rules determines which comparison window begin and end times SPKDIFF uses given a particular set of options and defaults determined by examining the data in the files. It is important to note that the default time coverage information is obtained from the SPK files using the corresponding body, center, and frame combinations provided on the command line and/or determined earlier from the files. `--` If neither the ``-b'' nor ``-e'' option specifying comparison window boundaries is provided, the program sets the comparison window boundaries to the begin and end time of the intersection of the coverage window provided for the first body by the first SPK file and the coverage window provided for the second body by the second SPK file. Caution -- this method for determining the comparison window may impose a severe limitation: if the intersection of the coverages determined from the two SPK files consists of more than one interval, the program stops because it cannot perform comparisons over multiple disjoint time intervals. `--` If only the ``-b'' option specifying the begin time of the comparison window is provided and the time specified using it is within the intersection of the coverage window provided for the first body by the first SPK file and the coverage window provided for the second body by the second SPK file, the program sets the comparison window begin time to that value and sets the comparison window end time to the end time of the coverage intersection window. The limitation described in the previous paragraph applies to this case as well: if the intersection consists of more than one interval and both intervals are later than the specified begin time, the program stops because it cannot perform comparison over multiple disjoint time intervals. If the specified begin time is earlier than the begin time determined from the files, it is disregarded as if it wasn't specified at all and the comparison is performed over the coverage window intersection. If the specified begin time is later than the end time determined from the files, the program does not do comparison and reports an error. `--` If only the ``-e'' option specifying the end time of the comparison window is provided and the time specified using it is within the intersection of the coverage window provided for the first body by the first SPK file and the coverage window provided for the second body by the second SPK file, the program sets the comparison window end time to that value and sets the comparison window begin time to the begin time of the intersection window. The limitation described above applies to this case as well: if the intersection consists of more than one interval and both intervals are earlier than the specified end time, the program stops because it cannot perform comparison over multiple disjoint time intervals. If the specified end time is later than the end time determined from the files, it is disregarded as if it wasn't specified at all and the comparison is performed over the coverage window intersection. If the specified end time is earlier than the begin time determined from the files, the program does not do comparison and reports an error. `--` If both the ``-b'' and ``-e'' options are provided, the program sets the comparison window begin and end times to these values, unless the specified begin time is later than the end time, in which case the program stops with an error message. It does not attempt to check these times against the actual coverage windows provided by the files, which may lead to termination of the run if either of the two SPK files does not provide data within the specified window. Another set of rules determines the time step that SPKDIFF will use to generate the array of TDB epochs at which the states for comparison will be computed. `--` If neither the ``-s'' nor the ``-n'' option affecting computation of the time step are provided, SPKDIFF determines the time step by dividing the comparison window by the default number of steps hard coded into the program (1000). `--` If either the ``-s'', or the ``-s'' and ``-n'' options are provided, SPKDIFF uses the number of seconds specified using the ``-s'' option as the time step and generates the array of TDB epochs starting from the comparison window begin time through the comparison window end time. Since in general the very last step is likely to ``miss'' the actual end time of the window, the last buffered epoch is reset by the end time of the window, resulting in the last step duration being less than the value specified on the command line. `--` If only the ``-n'' option is provided, SPKDIFF determines the time step by dividing the comparison window by the number of steps provided with this option. The number of steps specified using the ``-n'' option must be at least two but no more than 1,000,000 (in order for the computed states to fit into the program's internal buffers). When the number of steps -- either default or provided on the command line -- is used to determine the size of the time step, the size is computed by dividing the comparison window interval by that number minus one to ensure that the last epoch at which a comparison is performed is the interval end time. A few scenarios below illustrate when some or all of the options specifying the comparison time window and time step can be omitted and when they should be provided to achieve the desired result: `--` If the program is run just to find out whether trajectories provided by the SPK files are different or not, all of the options in this category can be omitted. SPKDIFF finds the overlapping coverage from the file data, computes default number of samples over that window and performs comparison of these samples. `--` If the goal is to assess differences during a particular time interval, which is usually much shorter than the overlap in coverage between the two files (for example for a time window around a single pericenter for two files, each covering many orbits), both the begin and end times should be specified to constrain SPKDIFF to that window. `--` If the time step automatically computed by SPKDIFF using the default or specified number of steps is too large to produce a meaningful set of samples for a given trajectory (for example the automatically computed step is 10 hours for an orbiter with 2 hour period), a more appropriate time step should be specified on the command line. `--` Another situation when the time step should be specified on the command is when the program is used to generate a dump of differences. In this case using a time step that is an integer number of seconds results in a cleaner and more understandable output report. As with the body, center, frame combination this list of scenarios for using the time window/step related options is not comprehensive. There are applications in which specifying only the begin time (to examine only the ``tail'' portion of the overlap window) or only the end time (to examine only the ``head'' portion of the overlap window) would be appropriate. There are other applications, for which providing just a small number of steps (to perform faster but less thorough sampling over the whole overlap window between the files) or a large number of steps (to perform slower but more thorough sampling over the whole overlap window between the files) is all that is needed. Top ### Options/Defaults for Output Report Type The program can generate four different report types depending of the value provided using the ``-t'' option. If the ``-t'' option is omitted or if it is followed by the value ``basic'', the program generates a ``Basic Report'' showing only the absolute and relative maximum and average differences in magnitude of position and velocity vectors. This type of output is useful for a quick assessment of whether the two SPK files are different and finding the maximum magnitude of this difference. If the ``-t'' option is followed by the value ``stats'' the program generates a ``View Frame Statistics Report'' including a set of values resulting from statistical analysis of the state differences rotated into the view frame -- +X down track along velocity vector, +Y normal to the orbit plane, computed as the cross product of position and velocity vectors, and +Z in the orbit plane, completing the right handed frame -- based on the state computed from the first SPK file. Among values included in this report are the average and RMS view frame components of the differences as well as the view frame components for maximum relative and maximum absolute differences. This report is useful for obtaining a more useful assessment of the differences between trajectories, for which using the view frame is appropriate. If the ``-t'' option is followed by the value ``dump'' the program generates a ``Difference Dump Report'' containing a table with time tagged differences between individual states computed from the two SPK files. This report is useful for subsequent plotting of the difference between trajectories over time. If the ``-t'' option is followed by the value ``dumpvf'' the program generates a ``View Frame Difference Dump Report'' containing a table with time tagged differences between individual states computed from the two SPK files, rotated into the view frame based on states computed from the first SPK file. This report is useful for plotting of the difference between trajectories expressed in the view frame, as a function of time. Each of these reports is described in detail in the section ``Output Report Types'' later in this User's Guide. Top ### Option for Specifying Additional Kernels Additional kernels may be needed for SPKDIFF to compute states for the specified body, center, frame combination, or to process command line inputs and/or display difference dump time tags in the specified format. Such kernels can be provided using the ``-k'' option. The kernels, the names of which are listed using this option, are loaded by the program by calling the SPICE generic loader routine FURNSH. Kernels of any type can be provided to the program, including meta-kernels listing other kernels. All of the kernels provide using the ``-k'' option are loaded at the beginning of the program run and ``apply'' to both SPK files being compared. The set of other kernels may include any number of SPK files as long as these additional SPK files do not provide enough data for computing states anywhere within the comparison window for the body, center, frame combinations applicable to either of the SPK files to be compared. This restriction is important to ensure that the states being compared are indeed computed using the data from the two SPK files of interest but not from the additional SPK files provided to support the program run. There are some special cases when a kernel(s) of a particular type must be provided in order for SPKDIFF to proceed. Among such cases are: `--` An LSK file must be provided if the comparison window's begin time or end time is specified using the ``-b'' or ``-e'' option. Since internally these times are converted to TDB by calling the STR2ET routine, an LSK file must be loaded prior to these calls for the conversion to succeed. `--` An LSK file must be provided if the output time format for the dump report is specified using the ``-f'' option. In this case the output time tags are generated by calling the TIMOUT routine, which requires LSK data. `--` A text kernel(s) must be provided, defining name/ID mappings for any of the physical object names not built into SPICE and specified using the ``-b1'', ``-c1'', ``-b2'' or ``-c2'' options. `--` A frame kernel(s) must be provided, containing frame definitions for any of the reference frames not built into SPICE and specified using the ``-r1'' or ``-r2'' option. In addition to the cases above when certain types of kernels are required for processing command options and/or formatting times for output, there is a myriad of situations when supporting kernels are needed to compute states for the requested body, center, frame combination because the two SPK files by themselves do not provide enough data for that. These situations range from requesting states with respect to a center, data for which is not provided by the principal SPK file (in such cases additional SPK files providing missing ephemeris links are needed) to requesting states with respect to a frame based on PCK, CK, or FK data (in this case the PCK, CK, and/or FK files allowing one to compute orientation of this frame must be provided to the program). Top ## Output Report Types SPKDIFF can generate four types of difference reports depending of the value provided using the ``-t'' option. This section provides an example and explanation of each report type. Top ### Usage display If the program is run without any command line options or with insufficient command line options, it displays the following usage information:
       spkdiff -- Version 1.0.0, April 25, 2006 -- Toolkit Version N0060

       spkdiff computes differences between geometric states obtained from
       two SPK files and either displays these differences or shows
       statistics about them (see the User's Guide for more details). The
       program usage is:

          % spkdiff [options] <first SPK file> <second SPK file>

       Options are shown below. Order and case of keys are not
       significant. Values must be space-separated from keys, i.e.
       '-n 10', not '-n10'.

          -b1 <first body name or ID>
          -c1 <first center name or ID>
          -r1 <first reference frame name>
          -b2 <second body name or ID>
          -c2 <second center name or ID>
          -r2 <second reference frame name>
          -k  <other kernel file name(s)>
          -b  <interval start time>
          -e  <interval stop time>
          -s  <time step in seconds>
          -n  <number of states: 2 to 1000000 (default: 1000)>
          -f  <output time format (default: TDB seconds past J2000)>
          -t  <report type: basic|stats|dump|dumpvf (default: basic)>
Top ### Comparison Information Header If the program was provided with sufficient information to perform comparison, it displays the ``Comparison Information Header'' providing detailed information about the comparison being performed at the beginning of each report. This header has the following format:
       #
       # Comparison of N_POINTS 'FRAME1_NAME'-referenced geometric states
       #
       #    of 'BOD1_NAME' (BOD1_ID) relative to 'CEN1_NAME' (CEN1_ID)
       #    from SPK 'SPK1_NAME'
       #
       # with N_POINTS 'FRAME2_NAME'-referenced geometric states
       #
       #    of 'BOD2_NAME' (BOD2_ID) relative to 'CEN2_NAME' (CEN2_ID)
       #    from SPK 'SPK2_NAME'
       #
       # evenly-spaced with STEP_SECONDS second (STEP_DDHRMNSC) step size
       # within the time interval
       #
       #    from 'BEGIN_TIME' (BEGIN_ET_SEC TDB seconds)
       #    to   'END_TIME'   (END_ET_SEC TDB seconds)
       #
       # using additional data from these kernels
       #
       #    KERNEL_LIST
       #
where N_POINTS is the number of states computed from the first and second SPK files. FRAME1_NAME is the name of the reference frame, in which the states from the first SPK file were computed. BOD1_NAME is the name of the body, for which the states from the first SPK file were computed. BOD1_ID is the NAIF ID of the body, for which the states from the first SPK file were computed. CEN1_NAME is the name of the center, with respect to which the states from the first SPK file were computed. CEN1_ID is the NAIF ID of the center, with respect to which the states from the first SPK file were computed. SPK1_NAME is the name of the first SPK file that is being compared. FRAME2_NAME is the name of the reference frame, in which the states from the second SPK file were computed. BOD2_NAME is the name of the body, for which the states from the second SPK file were computed. BOD2_ID is the NAIF ID of the body, for which the states from the second SPK file were computed. CEN2_NAME is the name of the center, with respect to which the states from the second SPK file were computed. CEN2_ID is the NAIF ID of the center, with respect to which the states from the second SPK file were computed. SPK2_NAME is the name of the second SPK file that is being compared. STEP_SECONDS is the time steps in seconds. STEP_DDHRMNSC is the time step formatted as days, hours, minutes, seconds. For example, step of ``90061.2'' seconds will appear as ``1d 1h 1m 1.200000s''. BEGIN_TIME is the comparison window begin time given in calendar format. BEGIN_ET_SEC is the comparison window begin time given as TDB seconds past J2000. END_TIME is the comparison window end time given in calendar format. END_ET_SEC is the comparison window end time given as TDB seconds past J2000. KERNEL_LIST is the list of additional kernels used in making the comparison. If no additional kernels were provided on the command line, this section is omitted from the header. Since the program does not require specifying all comparison attributes on the command line -- it can ``pick up'' defaults by examining the files and/or using built in parameters based on the rules described earlier -- it is crucial to examine the ``Comparison Information Header'' included in every report in order to know exactly for which body, center, frame combinations and over which time period the trajectories were compared. Note that each line of the ``Comparison Information Header'' has
       #
as the first character. This allows common plotting programs, such as GNUPLOT, to skip these header lines when plotting the ``dump''-type reports generated by SPKDIFF. Top ### Basic Report (no ``-t'' option or ``-t basic'') The ``Basic Report'' shows only the absolute and relative maximum and average differences in magnitude of position and velocity vectors. This report is generated if the ``-t'' option is omitted or if it is followed by the value ``basic''. This report has the following format (as for all other reports it follows the ``Comparison Information Header''):
       Relative differences in state vectors:

                                    maximum                 average

        Position:             n.nnnnnnnnnnnnnE-nn      n.nnnnnnnnnnnnnE-nn
        Velocity:             n.nnnnnnnnnnnnnE-nn      n.nnnnnnnnnnnnnE-nn

       Absolute differences in state vectors:

                                    maximum                 average

        Position (km):        n.nnnnnnnnnnnnnE-nn      n.nnnnnnnnnnnnnE-nn
        Velocity (km/s):      n.nnnnnnnnnnnnnE-nn      n.nnnnnnnnnnnnnE-nn
where ``n.nnnnnnnnnnnnnE-nn'' are the relative and absolute maximum and average differences in magnitude of position and velocity vectors. It is important to remember that these maximum values are picked from the sets of states sampled from the SPK files within the given/default comparison windows using the given/default time step, rather than by a true search for the maximum within the window. Thus any change in the window begin and end time and/or time step will result in a different set of states being sampled at different times and then used in the comparison, leading to different maximum and average values appearing in the report. Top ### View Frame Statistics Report (``-t stats'') The ``View Frame Statistics Report'' shows a set values resulting from statistical analysis of the state differences rotated into the view frame. This report is generated if the ``-t'' option is followed by the value ``stats''. The view frame into which the differences between states are rotated for statistical analysis is based on states computed using the first SPK file and is defined as follows: `--` +X is down track, in the direction of the velocity vector. `--` +Y is normal to the orbit plane. It is computed as the cross product of the position and velocity vectors. `--` +Z is in the orbit plane. It completes the right handed frame and is computed as the cross product of +X and +Y. This report has the following format (as for all other reports it follows the ``Comparison Information Header''):
       1) Average components of position difference vectors in view
          frame coordinates:

          1a) Down track (km):                        n.nnnnnnnnnnnnnn

          1b) In orbit plane (km):                    n.nnnnnnnnnnnnnn

          1c) Normal to orbit plane (km):             n.nnnnnnnnnnnnnn

          1d) Average delta time down track (sec):    n.nnnnnnnnnnnnnn

       2) Average |components| of position difference vectors in view
          frame coordinates:

          2a) Down track (km):                        n.nnnnnnnnnnnnnn

          2b) In orbit plane (km):                    n.nnnnnnnnnnnnnn

          2c) Normal to orbit plane (km):             n.nnnnnnnnnnnnnn

          2d) Average |delta time| down track (sec):  n.nnnnnnnnnnnnnn

       3) RMS of position difference vectors in view frame coordinates:

          3a) Down track (km):                        n.nnnnnnnnnnnnnn

          3b) In orbit plane (km):                    n.nnnnnnnnnnnnnn

          3c) Normal to orbit plane (km):             n.nnnnnnnnnnnnnn

          3d) RMS delta time down track (sec):        n.nnnnnnnnnnnnnn

       4) Components of the position difference vector in view frame
          coordinates for the states with the MAXIMUM RELATIVE
          difference in position:

          4a) Down track (km):                        n.nnnnnnnnnnnnnn

          4b) In orbit plane (km):                    n.nnnnnnnnnnnnnn

          4c) Normal to orbit plane (km):             n.nnnnnnnnnnnnnn

          4d) Delta time down track (sec):            n.nnnnnnnnnnnnnn

          4e) Epoch (TDB, seconds past J2000):        nnnnnnnnn.nnnnnn

          4f) Epoch (TDB, calendar format):           YYYY-MON-DD-HR:MN:SC

       5) Components of the position difference vector in view frame
          coordinates for the states with the MAXIMUM ABSOLUTE
          difference in position:

          5a) Down track (km):                        n.nnnnnnnnnnnnnn

          5b) In orbit plane (km):                    n.nnnnnnnnnnnnnn

          5c) Normal to orbit plane (km):             n.nnnnnnnnnnnnnn

          5d) Delta time down track (sec):            n.nnnnnnnnnnnnnn

          5e) Epoch (TDB, seconds past J2000):        nnnnnnnnn.nnnnnn

          5f) Epoch (TDB, calendar format):           YYYY-MON-DD-HR:MN:SC
In addition to the average, average of absolute values, RMS, maximum relative, and maximum absolute down track, in orbit plane and normal to orbit plane components, the program includes in each category a delta time down track in seconds. For the maximum relative and maximum absolute differences the report also provides the times -- as calendar format TDB and TDB seconds past J2000 -- at which these states were computed. As with the basic report the statistically determined maximum values are based on the sets of states sampled from the SPK files within the given/default comparison windows using the given/default time step rather than by a true search for the maximum within the window. Thus any change in the window begin and end time and/or time step will result in a different set of states being sampled at different times and then used in the comparison, leading to different maximum and average values appearing in the report. While this type of report can be requested for any combination of body, center, and frame, for some of them the notion of the view frame would not be applicable because the motion of the body with respect to the center would be too different from the ``normal'' orbital motion for which using the view frame makes the most sense. In such cases this report may contain meaningless or even incomprehensible numbers. There is also a possibility that the view frame simply cannot be constructed for one or more states computed from the first SPK file because position and velocity components of this state are linearly dependent. In such cases the program reports this fact and does not generate the report. To facilitate parsing, each of the items included in this report is provided on a separate line tagged with a distinct item ``identifier'' (1a, 2b, 5d, etc.), with the value appearing as the last word on the line. Top ### Difference Dump Report (``-t dump'') The ``Difference Dump Report'' contains a table with time tagged differences between individual states computed for the specified/default body, center, frame combinations from the two SPK files. This report is generated if the ``-t'' option is followed by the value ``dump''. This report has the following format (as for all other reports it follows the ``Comparison Information Header''):
       # time, (x1-x2), (y1-y2), (z1-z2), (vx1-vx2), (vy1-vy2), (vz1-vz2)
       TIME DELTA_X DELTA_Y DELTA_Z DELTA_VX DELTA_VY DELTA_VZ
       TIME DELTA_X DELTA_Y DELTA_Z DELTA_VX DELTA_VY DELTA_VZ
       ...  ...     ...     ...     ...      ...      ...
       TIME DELTA_X DELTA_Y DELTA_Z DELTA_VX DELTA_VY DELTA_VZ
The first line of the report ``names'' the items provided in the table. As for the lines of the ``Comparison Information Header'' that this line immediately follows, it is prefixed using the
       #
character in order to be ignored by common plotting utilities. Each of the subsequent lines contains seven space-delimited items -- a time tag in the format specified using the ``-f'' option (if ``-f'' was not provided the time tag is the number of TDB seconds past J2000) followed by the X, Y, Z, Vx, Vy, and Vz components of the difference between the state computed from the first SPK file and the state computed from the second SPK file. The position component differences are provided in kilometers, the velocity component differences in kilometers per second. All differences are printed in scientific notation, +n.nnnnnnnnnnnnnE+nn. Top ### View Frame Difference Dump Report (``-t dumpvf'') The ``View Frame Difference Dump Report'' contains a table with time tagged differences between individual states computed for the specified/default body, center, frame combinations from the two SPK files, rotated into the view frame based on states from the first SPK file (see the ``View Frame Statistics Report'' section above for the definition of the view frame). This report is generated if the ``-t'' option is followed by the value ``dumpvf''. This report has the following format (as for all other reports it follows the ``Comparison Information Header''):
       # time, down_track_p_diff, normal_to_plane_p_diff, in_plane_p_diff,
       down_track_v_diff, normal_to_plane_v_diff, in_plane_v_diff
       TIME DELTA_DT DELTA_NTP DELTA_IP DELTA_VDP DELTA_VNTP DELTA_VIP
       TIME DELTA_DT DELTA_NTP DELTA_IP DELTA_VDP DELTA_VNTP DELTA_VIP
       ...  ...     ...     ...     ...      ...      ...
       TIME DELTA_DT DELTA_NTP DELTA_IP DELTA_VDP DELTA_VNTP DELTA_VIP
The first line of the report (which is shown as two lines above to fit into the width of the page) ``names'' the items provided in the table. As for the lines of the ``Comparison Information Header'' that this line immediately follows, it is prefixed using the
       #
character in order to be ignored by common plotting utilities. Each of the subsequent lines contains seven space-delimited items -- a time tag in the format specified using the ``-f'' option (if the ``-f'' option was not provided the time tag is the number of TDB seconds past J2000) followed by the down track, normal to orbit plane, in orbit plane, down track velocity, normal to orbit plane velocity, and in orbit plane velocity components of difference between the state computed from the first SPK file and the state computed from the second SPK file, rotated into the view frame. The position component differences are provided in kilometers, the velocity component differences in kilometers per second. All differences are printed in scientific notation, +n.nnnnnnnnnnnnnE+nn. While this type of report can be requested for any combination of body, center, and frame, for some of them the notion of the view frame would not be applicable because the motion of the body with respect to the center would be too different from the ``normal'' orbital motion for which using the view frame makes the most sense. In such cases this report may contain meaningless or even incomprehensible numbers. There is also a possibility that the view frame simply cannot be constructed for one or more states computed from the first SPK file because position and velocity components of this state are linearly dependent. In such cases the program reports this fact and does not generate the report. Top ## Troubleshooting There are many cases when SPKDIFF is not able to perform the requested comparison due to incorrect, inconsistent, or missing command line options. Some such cases and possible solutions are: `--` The program reports an error if the specified begin time is greater than the specified end time. This case is usually the result of a simple typo; double-checking and fixing the command line options is the way to correct it. `--` The program reports an error if the body or center names provided on the command line cannot be translated to NAIF IDs. In such cases bodies and/or centers should be specified by ID instead of the name or a text kernel containing name/ID mapping for the given names should be provided using the ``-k'' option. `--` The program reports an error if it does not recognize any specified frame names. In such cases a frames kernel(s) defining these frames should be provided using the ``-k'' option. `--` The program reports an error when either of the SPK files to be compared or any of the supporting kernels provided using the ``-k'' option does not exist or is not a SPICE kernel of the expected type. The ``offending'' file names should be checked and corrected. `--` The program reports an error when instead of a numeric value expected with some of the options (``-n'' and ``-s'') it detects a string that does not represent a number. These inputs must be corrected for the program to proceed. `--` The program reports an error if it does not recognize the output report type provided on the command line. This unrecognized value should be replaced with one of the allowed values. `--` The program reports an error if an unsupported command line option key is provided on the command line. Such keys and any values following them are treated as part of the value for the preceding option key, causing a parsing error to be reported. Any unsupported option should be removed from the command line for the program to proceed. `--` The program reports an error if either of the SPK files together with supporting kernels does not provide data for the body specified/picked for that SPK file. The body specification should be re-examined and corrected for the program to proceed. `--` The program reports an error if either of the SPK files does not provide enough coverage for the specified/default body, center, frame combination within the comparison window specified on the command line. The comparison window should be adjusted for the program to proceed. `--` The program reports an error if the SPK files to be compared do not have overlap in coverage for the corresponding body, center, frame combinations. In such cases the comparison simply cannot be performed. `--` The program reports an error if the SPK files to be compared have overlap in coverage that consists of more than one continuous window. In such cases narrower comparison window boundaries should be specified on the command line. `--` The program reports an error if any of the supporting kernels needed to compute states for the specified body, center, frame combination using either SPK file are missing. Depending on the contents of a particular SPK and specifics of the request any number and types of supporting kernels -- from additional SPK files to FK and CK files -- may be needed to satisfy the request. For this reason no simple suggestion on picking additional kernels can be made. Instead the user is directed to familiarize himself/herself with contents of the SPK files in question and with mission-specific and generic SPICE data that might be used together with these SPK files in order to identify supporting kernels needed to perform comparison. `--` The program does not generate either statistical or dump view frame report if the view frame cannot be constructed using one or more states computed from the first SPK file. In this case other types of reports should be used instead. `--` The program reports an error if too many states were requested to be used in the comparison either by specifying a too large number of steps using the ``-n'' option or by specifying a too small time step using the ``-s'' option. The inputs should be adjusted accordingly to reduce the number to be below the limit. The maximum number of steps allowed is 1,000,000; this values is hard-coded into the program. `--` The program reports an error if the specified time step is smaller than 1.E-8 seconds. The input time step should be adjusted for the program to proceed. `--` The program reports an error if SPK file(s) provided as supporting kernels allow for computing states for either of the body, center, frame combinations without loading the SPK files to be compared. The set of supporting SPK files should be reconsidered and some of the SPK files provided in it should be removed to resolve this conflict. Top ## Examples This section provides a few examples showing how SPKDIFF can help answer common questions regarding differences between SPK files. Top ### Do Two SPK Files Provide the Same Trajectory for a Spacecraft? This very common question usually requires a simple ``yes'' or ``no'' answer and zero or non-zero maximum differences shown by the SPKDIFF's ``Basic Report'' provides just that. In most cases spacecraft SPK files that are checked for ``sameness'' have the same attributes -- storing spacecraft trajectory with respect to the same center in the same frame -- and need to be compared during the whole period of overlap between their coverages. Therefore, SPKDIFF can be run with ``bare minimum'' inputs -- just the names of the SPK files -- and be allowed to use defaults obtained by examining the files and/or hard-coded into the program. Below, SPKDIFF is invoked to answer this question for a regular, reconstructed OD solution SPK file and a merged reconstructed SPK file for Mars Global Surveyor. With just the SPK file names provided on the command line:
       > spkdiff spk_m_060508_OD32021-32092_rec_V1.bsp mgs_map_rec.bsp
the program produces the following output:
       #
       # Comparison of 1000 'J2000'-referenced geometric states
       #
       #    of 'MGS' (-94) relative to 'MARS BARYCENTER' (4)
       #    from SPK 'spk_m_060508_OD32021-32092_rec_V1.bsp'
       #
       # with 1000 'J2000'-referenced geometric states
       #
       #    of 'MGS' (-94) relative to 'MARS BARYCENTER' (4)
       #    from SPK 'mgs_map_rec.bsp'
       #
       # evenly-spaced with 507.387 second (0d 00h 08m 27.387s) step size
       # within the time interval
       #
       #    from '2006 MAY 08 15:22:00.000 TDB' (200373720.0 TDB seconds)
       #    to   '2006 MAY 14 12:10:00.000 TDB' (200880600.0 TDB seconds)
       #

       Relative differences in state vectors:

                                    maximum                 average

         Position:            0.0000000000000E+00      0.0000000000000E+00
         Velocity:            0.0000000000000E+00      0.0000000000000E+00

       Absolute differences in state vectors:

                                    maximum                 average

         Position (km):       0.0000000000000E+00      0.0000000000000E+00
         Velocity (km/s):     0.0000000000000E+00      0.0000000000000E+00
The fact that all differences in the output are zero means that both files provide the same trajectory for MGS relative to Mars Barycenter for the whole period of overlap (which should be the case because the regular reconstructed OD solution SPK file is one of the files that was used to create the merged SPK file). Top ### Do SPK files Differ Enough to Matter? This is another very common question frequently asked when it is known that two SPK files represent different trajectories but it is not known whether this difference is large enough to matter. In many such cases the magnitude of the maximum difference provided by SPKDIFF's ``Basic Report'' provides the answer to this question. As in the previous example, the SPK files that are compared probably have the same attributes -- storing the spacecraft trajectory with respect to the same center in the same frame -- but the comparison window of interest is likely to be narrower than the whole overlap between the file coverages (for example only during closest approach or during a time window around pericenter). Thus, SPKDIFF should be allowed to get most defaults from the files but should be provided with the comparison window begin and end times on the command line. Below, SPKDIFF is run to check how different the reconstructed MGS trajectories provided by the Mars Global Surveyor Navigation team and the JPL Gravity Group are during the 30 minute window from 2001 APR 04 02:30 to 03:30 UTC (a part of illuminated portion of the MGS orbit 9266). SPKDIFF, invoked with the comparison window boundaries, LSK file name (to support conversion of boundary UTC times to ET), and SPK file names:
       > spkdiff -b 2001 APR 04 02:30 -e 2001 APR 04 03:00 \
                 -k naif0008.tls \
                 mgs_ext2.bsp mgs_ext2_ipng_mgs75d.bsp
produces the following output:
       #
       # Comparison of 1000 'J2000'-referenced geometric states
       #
       #    of 'MGS' (-94) relative to 'MARS BARYCENTER' (4)
       #    from SPK 'mgs_ext2.bsp'
       #
       # with 1000 'J2000'-referenced geometric states
       #
       #    of 'MGS' (-94) relative to 'MARS BARYCENTER' (4)
       #    from SPK 'mgs_ext2_ipng_mgs75d.bsp'
       #
       # evenly-spaced with 1.801 second (0d 00h 00m 01.801s) step size
       # within the time interval
       #
       #    from '2001 APR 04 02:30' (39623464.185 TDB seconds)
       #    to   '2001 APR 04 03:00' (39625264.185 TDB seconds)
       #
       # using additional data from these kernels
       #
       #    'naif0008.tls'
       #

       Relative differences in state vectors:

                                    maximum                 average

         Position:            1.5585888672802E-05      7.4593186410629E-06
         Velocity:            1.7161324644915E-05      1.4552469606438E-05

       Absolute differences in state vectors:

                                    maximum                 average

         Position (km):       5.9196225803226E-02      2.8215203092988E-02
         Velocity (km/s):     5.7990372644310E-05      4.9083689420832E-05
The report shows that the maximum difference in position is about 60 meters, which, given uncertainties in other data (timing, attitude, etc), may be deemed unimportant in processing data from a low resolution instrument. Top ### What Is the Down Track Timing Error? This question often arises when comparing preliminary and final predicted trajectories for orbiters that have to perform observations of a particular area on the surface of a target body. SPKDIFF provides estimates of the down track timing error in its `` View Frame Statistics Report''. Below, SPKDIFF is run to determine the down track timing error during the 10 minute window around pericenter of the MEX orbit 3040 ( 2006 MAY 23 21:46 ... 21:56 UTC) for trajectories provided by long-term and short-term predicted SPK files. SPKDIFF, invoked with the comparison window boundaries, LSK file name (to support conversion of boundary UTC times to ET), report type ``stats'', and SPK file names:
       > spkdiff -b 2006 MAY 23 21:46 -e 2006 MAY 23 21:56 \
                 -k NAIF0008.TLS \
                 -t stats
                 ORMM__060501000000_00253.BSP ORMF_______________00185.BSP
produces the following output:
       #
       # Comparison of 1000 'J2000'-referenced geometric states
       #
       #    of 'MARS EXPRESS' (-41) relative to 'MARS' (499)
       #    from SPK 'ORMM__060501000000_00253.BSP'
       #
       # with 1000 'J2000'-referenced geometric states
       #
       #    of 'MARS EXPRESS' (-41) relative to 'MARS' (499)
       #    from SPK 'ORMF_______________00185.BSP'
       #
       # evenly-spaced with 0.600 second (0d 0h 0m 0.600000s) step size
       # within the time interval
       #
       #    from '2006 MAY 23 21:46' (201692825.18509 TDB seconds)
       #    to   '2006 MAY 23 21:56' (201693425.18509 TDB seconds)
       #
       # using additional data from these kernels
       #
       #    'NAIF0008.TLS'
       #

       1) Average components of position difference vectors in view
          frame coordinates:

          1a) Down track (km):                        30.552115284475

          1b) In orbit plane (km):                    1.2710676287493

          1c) Normal to orbit plane (km):            -0.011807645604121

          1d) Average delta time down track (sec):    7.1913943821391

       2) Average |components| of position difference vectors in view
          frame coordinates:

          2a) Down track (km):                        30.552115284475

          2b) In orbit plane (km):                    1.2710676287493

          2c) Normal to orbit plane (km):             0.011807645604121

          2d) Average |delta time| down track (sec):  7.1913943821391

       3) RMS of position difference vectors in view frame coordinates:

          3a) Down track (km):                        30.553065680244

          3b) In orbit plane (km):                    1.2720138468831

          3c) Normal to orbit plane (km):             0.012788802634391

          3d) RMS delta time down track (sec):        7.1917249241123

       4) Components of the position difference vector in view frame
          coordinates for the states with the MAXIMUM RELATIVE
          difference in position:

          4a) Down track (km):                        30.708369357832

          4b) In orbit plane (km):                    1.2758338375402

          4c) Normal to orbit plane (km):            -0.011447894251492

          4d) Delta time down track (sec):            7.1972290201441

          4e) Epoch (TDB, seconds past J2000):        201693107.46737

          4f) Epoch (TDB, calendar format):           2006-MAY-23-21:51:47

       5) Components of the position difference vector in view frame
          coordinates for the states with the MAXIMUM ABSOLUTE
          difference in position:

          5a) Down track (km):                        30.767205150213

          5b) In orbit plane (km):                    1.3086257963549

          5c) Normal to orbit plane (km):            -0.0080797486007561

          5d) Delta time down track (sec):            7.2439115051116

          5e) Epoch (TDB, seconds past J2000):        201692992.15206

          5f) Epoch (TDB, calendar format):           2006-MAY-23-21:49:52
As seen in the report, the maximum down track timing error is about 7.2 seconds at 2006-MAY-23-21:49:52 TBD. Top ### How Does the Difference Change with Time? In order to answer this question SPKDIFF should be run to produce either a ``Difference Dump'' or a ``View Frame Difference Dump'' report that can then be plotted using a plotting utility. Below SPKDIFF is run to generate a view frame difference table for Phobos ephemerides provided by the previous and the latest Martian satellite ephemeris files produced by the Solar System Dynamics group at JPL. To get detailed information on short-term difference trends, the comparison is done over 1 day, which is about three Phobos orbits, using a 30 minute time step (time boundaries and step specified using the ``-b'', ``-e'', and ``-s'' options). Since both SPK files contain data for multiple natural bodies, the body name is explicitly specified on the command line using the ``-b1'' option. Because the trajectory difference with respect to Mars is of interest, Mars is specified as the center using the ``-c1'' option. The time tag format for the output is set to the Julian date TDB using the ``-f'' option. SPKDIFF, run with the all of these options and the names of the SPK files:
       > spkdiff -b 2006 MAY 10 -e 2006 MAY 11 \
                 -s 1800 \
                 -k naif0008.tls \
                 -b1 PHOBOS -c1 MARS \
                 -t dumpvf \
                 -f 'JULIAND.######## ::TDB' \
                 mar033_2000-2025.bsp mar063.bsp
produces the following output:
       #
       # Comparison of 49 'J2000'-referenced geometric states
       #
       #    of 'PHOBOS' (401) relative to 'MARS' (499)
       #    from SPK 'mar033_2000-2025.bsp'
       #
       # with 49 'J2000'-referenced geometric states
       #
       #    of 'PHOBOS' (401) relative to 'MARS' (499)
       #    from SPK 'mar063.bsp'
       #
       # evenly-spaced with 1800.0 second (0d 0h 30m 0.0000s) step size
       # within the time interval
       #
       #    from '2006 MAY 10' (200491265.18535 TDB seconds)
       #    to   '2006 MAY 11' (200577665.18533 TDB seconds)
       #
       # using additional data from these kernels
       #
       #    'naif0008.tls'
       #
       # time, along_track_P_diff, normal_to_plane_P_diff, in_plane_P_di
       ff, along_track_V_diff, normal_to_plane_V_diff, in_plane_V_diff
       2453865.50075450 -3.4E+0 +1.1E-1 +1.1E+0 +1.6E-3 -1.9E-4 +1.2E-3
       2453865.52158780 -4.5E+0 -2.3E-1 +1.7E+0 +1.5E-3 -2.0E-4 +1.3E-3
       2453865.54242110 -6.1E+0 -5.5E-1 +2.1E+0 +1.4E-3 -1.6E-4 +1.5E-3
       2453865.56325450 -7.9E+0 -7.7E-1 +2.0E+0 +1.2E-3 -1.0E-4 +1.6E-3
       2453865.58408780 -9.5E+0 -8.6E-1 +1.8E+0 +1.2E-3 -3.0E-5 +1.8E-3
       2453865.60492110 -1.0E+1 -8.1E-1 +1.1E+0 +1.2E-3 +5.1E-5 +1.9E-3
       2453865.62575450 -1.1E+1 -6.2E-1 +3.2E-1 +1.3E-3 +1.2E-4 +1.9E-3
       2453865.64658780 -1.1E+1 -3.4E-1 -5.4E-1 +1.5E-3 +1.7E-4 +2.0E-3
       2453865.66742110 -1.0E+1 -1.5E-2 -1.3E+0 +1.7E-3 +2.0E-4 +1.9E-3
       2453865.68825450 -9.0E+0 +3.2E-1 -1.9E+0 +1.9E-3 +1.9E-4 +1.8E-3
       2453865.70908780 -7.3E+0 +6.0E-1 -2.0E+0 +2.2E-3 +1.5E-4 +1.6E-3
       2453865.72992110 -5.6E+0 +7.9E-1 -1.9E+0 +2.2E-3 +8.8E-5 +1.4E-3
       2453865.75075450 -4.1E+0 +8.4E-1 -1.6E+0 +2.1E-3 +6.2E-6 +1.2E-3
       2453865.77158780 -3.1E+0 +7.6E-1 -8.8E-1 +2.0E-3 -7.7E-5 +1.1E-3
       2453865.79242110 -2.8E+0 +5.4E-1 +6.4E-2 +1.8E-3 -1.4E-4 +1.1E-3
       2453865.81325450 -3.2E+0 +2.3E-1 +8.8E-1 +1.4E-3 -1.9E-4 +1.2E-3
       2453865.83408780 -4.1E+0 -1.1E-1 +1.5E+0 +1.2E-3 -2.0E-4 +1.2E-3
       2453865.85492110 -5.6E+0 -4.4E-1 +2.0E+0 +1.0E-3 -1.8E-4 +1.4E-3
       2453865.87575450 -7.4E+0 -7.0E-1 +2.1E+0 +9.0E-4 -1.2E-4 +1.6E-3
       2453865.89658780 -9.0E+0 -8.5E-1 +1.9E+0 +1.0E-3 -5.4E-5 +1.8E-3
       2453865.91742110 -1.0E+1 -8.5E-1 +1.3E+0 +1.2E-3 +2.7E-5 +1.9E-3
       2453865.93825450 -1.1E+1 -7.2E-1 +6.0E-1 +1.5E-3 +1.0E-4 +1.9E-3
       2453865.95908780 -1.1E+1 -4.8E-1 -3.6E-1 +1.8E-3 +1.6E-4 +2.0E-3
       2453865.97992110 -1.0E+1 -1.5E-1 -1.0E+0 +2.1E-3 +1.9E-4 +1.9E-3
       2453866.00075450 -9.4E+0 +1.8E-1 -1.7E+0 +2.2E-3 +1.9E-4 +1.8E-3
       2453866.02158780 -7.8E+0 +5.0E-1 -2.1E+0 +2.1E-3 +1.6E-4 +1.6E-3
       2453866.04242110 -6.2E+0 +7.3E-1 -2.0E+0 +2.1E-3 +1.1E-4 +1.5E-3
       2453866.06325450 -4.6E+0 +8.5E-1 -1.6E+0 +1.9E-3 +3.3E-5 +1.4E-3
       2453866.08408780 -3.3E+0 +8.1E-1 -1.1E+0 +1.6E-3 -4.9E-5 +1.1E-3
       2453866.10492110 -2.7E+0 +6.4E-1 -2.7E-1 +1.5E-3 -1.2E-4 +1.0E-3
       2453866.12575450 -3.0E+0 +3.5E-1 +5.6E-1 +1.3E-3 -1.7E-4 +1.1E-3
       2453866.14658780 -3.9E+0 +1.0E-2 +1.2E+0 +1.2E-3 -2.0E-4 +1.3E-3
       2453866.16742110 -5.1E+0 -3.4E-1 +1.9E+0 +1.3E-3 -1.8E-4 +1.3E-3
       2453866.18825450 -6.7E+0 -6.3E-1 +2.3E+0 +1.4E-3 -1.4E-4 +1.5E-3
       2453866.20908780 -8.5E+0 -8.1E-1 +2.0E+0 +1.3E-3 -8.0E-5 +1.7E-3
       2453866.22992110 -9.9E+0 -8.6E-1 +1.4E+0 +1.3E-3 -1.1E-6 +1.8E-3
       2453866.25075450 -1.0E+1 -7.6E-1 +8.4E-1 +1.5E-3 +7.7E-5 +2.0E-3
       2453866.27158780 -1.1E+1 -5.4E-1 +3.4E-2 +1.6E-3 +1.4E-4 +2.0E-3
       2453866.29242110 -1.0E+1 -2.3E-1 -8.5E-1 +1.7E-3 +1.8E-4 +1.9E-3
       2453866.31325450 -9.8E+0 +1.1E-1 -1.5E+0 +1.7E-3 +1.9E-4 +1.8E-3
       2453866.33408780 -8.4E+0 +4.3E-1 -2.0E+0 +1.8E-3 +1.7E-4 +1.7E-3
       2453866.35492110 -6.7E+0 +6.9E-1 -2.1E+0 +1.8E-3 +1.2E-4 +1.5E-3
       2453866.37575450 -5.0E+0 +8.2E-1 -1.9E+0 +1.9E-3 +5.8E-5 +1.4E-3
       2453866.39658780 -3.7E+0 +8.2E-1 -1.3E+0 +2.0E-3 -2.5E-5 +1.2E-3
       2453866.41742110 -3.0E+0 +6.8E-1 -5.7E-1 +1.9E-3 -1.0E-4 +1.1E-3
       2453866.43825450 -2.8E+0 +4.1E-1 +3.5E-1 +1.9E-3 -1.6E-4 +1.1E-3
       2453866.45908780 -3.4E+0 +8.1E-2 +1.1E+0 +1.7E-3 -2.0E-4 +1.2E-3
       2453866.47992110 -4.6E+0 -2.6E-1 +1.7E+0 +1.4E-3 -1.9E-4 +1.3E-3
       2453866.50075440 -6.2E+0 -5.6E-1 +2.1E+0 +1.1E-3 -1.6E-4 +1.5E-3
(To fit into the page width, the format for the difference columns in the output above was changed from n.nnnnnnnnnnnnnE-nn to n.nE-n). The table above shows that differences in Phobos' position provided by the previous and latest SPK file oscillates with Phobos orbital motion, with the down track component ranging from -11 km to -3 km, normal to orbit plane from -0.9 to 0.9 km, and in orbit plane from -2 to 2 km.