Table of Contents
SPKDIFF User's Guide
Abstract
Summary
If You Are in a Hurry
To Check if Two SPK Files Provide Identical Data
To Assess Difference Between Two SPK Files
To Sample Trajectory from an SPK File
To Sample Trajectory from a set of Kernels
Usage
Options
Kernel Files
Primary Kernel Files
Additional Kernel Files
Comparison Runs vs. Sampling Runs
Runs with Two, One, and No Primary SPK(s)
Runs with Two Primary SPK Files
Runs with One Primary SPK File
Runs Without Primary SPK Files
Specifying/Picking Defaults for Bodies, Centers, and Frames
Specifying/Picking Defaults for Bodies
Specifying/Picking Defaults for Centers
Specifying/Picking Defaults for Frames
Body, Center, and Frame Selection Scenarios
Times for Comparison/Sampling
Coverage Window
Times within Coverage Window
Times for Comparison/Sampling Selection Scenarios
Output
Overview of Report Types
Time Tag Format for ``dump*'' Reports
Numeric Format for ``dump*'' Reports
Report Header
Report Header for Comparing Two Trajectories
Report Header for Coverage/Gaps for Two Trajectories
Report Header for Sampling Trajectory
Report Header for Coverage/Gaps for Trajectory
Report Formats
Basic Report (no ``-t'' option or with ``-t basic'')
View Frame Statistics Report (``-t stats'')
Dump Report (no ``-t'' option or with ``-t dump'')
View Frame Dump Report (``-t dumpvf'')
Coverage Intervals Dump Report (``-t dumpc''):
Coverage Gaps Dump Report (``-t dumpg'')
Troubleshooting
Examples
Comparison: Checking if Two SPKs Provide the Same Trajectory
Comparison: Checking if Two SPK files Differ Enough to Matter
Comparison: Checking the Down Track Timing Error
Comparison: Checking Trajectory Differences Over Time
Sampling: States from a Single SPK File
Sampling: States from Many SPKs Listed in Meta-Kernel(s)
Coverage: Coverage for a Single Body
Coverage: Coverage Overlap for Two Bodies
Coverage: Gaps in Coverage
Top
SPKDIFF User's Guide
Last revised on 2021 NOV 17 by B. V. Semenov.
Top
Abstract
SPKDIFF provides means for comparing the trajectories of two bodies or
sampling the trajectory of a single body using data from SPICE kernels.
Top
Summary
SPKDIFF provides means for comparing the trajectories of two bodies or
sampling the trajectory of a single body known to SPICE and supported by
data from SPICE kernels.
To compare trajectories the program 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 or variable 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 the corresponding states from each other. Depending on the
type of output report requested the program prints to the screen only
the maximum differences in position and velocity, or a complete table of
position and velocity differences, or a complete table of differences
expressed in ``view frame'' coordinates, or results of a simple
statistical analysis of the differences expressed in ``view frame''
coordinates.
To sample trajectory of a body the program computes a set of geometric
states of a body as seen from a center in a reference frame over an
interval of time with fixed or variable time step, using a given set of
kernel files, and prints to the screen a table containing these states.
Top
If You Are in a Hurry
This section shows four very common SPKDIFF usage scenarios with just
enough explanations to get you going. An extensive set of detailed
examples is provided at the end of this User's Guide.
Top
To Check if Two SPK Files Provide Identical Data
To check if two SPK files containing trajectories for the same body with
respect to the same center in the same reference frame provide identical
data, run SPKDIFF as follows:
% spkdiff -s <step> <spk1> <spk2>
where ``<spk1>'' and ``<spk2>'' are the names of the two SPK
files, and ``step'' is the time step, in seconds. If the maximum
position and velocity difference magnitudes in the output are zero (or
close to zero, accounting for round off), then the SPKs contain the same
data.
Top
To Assess Difference Between Two SPK Files
To assess the difference between two SPK files containing trajectories
for the same body with respect to the same center in the same reference
frame as a function of time, run SPKDIFF as follows:
% spkdiff -t dump -s <step> <spk1> <spk2>
where ``<spk1>'' and ``<spk2>'' are the names of the two SPK
files; ``-t dump'' sets the output format to the dump report showing
differences between individual states computed from the files; and
``step'' is the time step, in seconds. The program's output, which can
be rather lengthy, can be re-directed to a file using the ``>'' pipe.
Using the data captured in the file the difference in position (columns
2-4) and velocity (columns 5-7) can be plotted against time, given as
TDB seconds (column 1), to analyze the difference between the
trajectories. To print output time tags as UTC in ISO date format
instead of TDB seconds, add
-k <lsk> -f 'YYYY-MM-DDTHR:MN:SC.### ::RND'
before the ``-t'' option. These additional options specify the name of
an LSK file required to convert times to any form other than TDB seconds
and the desired output time format using the SPICE TIMOUT routine output
time picture notation. To use the view frame dump report output instead
of the dump report output, replace ``dump'' with ``dumpvf'', like this:
% spkdiff -t dumpvf -s <step> <spk1> <spk2>
Top
To Sample Trajectory from an SPK File
To sample a trajectory provided in an SPK file, run SPKDIFF as follows:
% spkdiff -s <step> <spk>
where ``<spk>'' is the name of an SPK file and ``step'' is the
time step, in seconds. The program's output -- position (columns 2-4)
and velocity (columns 5-7) tagged with time, given as TDB seconds past
J2000 (column 1) -- can be re-directed to a file using the ``>''
pipe. To print output time tags as UTC in ISO date format, add
-k <lsk> -f 'YYYY-MM-DDTHR:MN:SC.### ::RND'
before ``-s''. These additional options specify the name of an LSK file
required to convert times to any form other than TDB seconds and the
desired output time format using the SPICE TIMOUT routine output time
picture notation. If the SPK file contains data for more than one body
and a body different from the body picked by SPKDIFF as default is
desired, the name or NAIF ID of the desired body can be specified using
``-b1 <body>'' option, like this:
% spkdiff -b1 <body> -s <step> <spk>
Top
To Sample Trajectory from a set of Kernels
To sample the trajectory for a body relative to a center in a reference
frame provided by a set of kernels or meta-kernels, run SPKDIFF as
follows (the command line below is wrapped to fit the page width):
% spkdiff -k <kernels> -s <step>
-b1 <body> -c1 <center> -r1 <frame>
where ``<kernels>'' are the names of SPK and other kernel files
and/or meta-kernels needed to compute trajectory; ``step'' is the time
step, in TDB seconds; ``<body>'' and ``<center>'' are the
names or NAIF IDs of the body and center; and ``<frame>'' is the
name of the reference frame. For lengthy reports the program's output
should be re-directed to a file using the ``>'' pipe.
Top
Usage
SPKDIFF is a command line program with the following usage:
% spkdiff [options] <first SPK name> <second SPK name>
% spkdiff [options] <SPK name>
% spkdiff [options]
The options are:
-k <supporting kernel(s) name(s)>
-b1 <first body name or ID>
-c1 <first center name or ID>
-r1 <first reference frame name>
-k1 <additional supporting kernel(s) for first SPK>
-b2 <second body name or ID>
-c2 <second center name or ID>
-r2 <second reference frame name>
-k2 <additional supporting kernel(s) for second SPK>
-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)>
-d <number of significant digits: 6 to 17 (default: 14)>
-t <report type: basic|stats|dump|dumpvf|dumpc|dumpg
(def.: basic|dump)>
The order of options and case of the option keys are not significant.
The values provided after the option keys must be separated from the
keys by one or more spaces. Un-recognized options are not specifically
checked for; instead they are treated as continuation of the value
provided using the preceding recognized option.
Top
Options
Kernel file names and control parameters are provided to the program
using the following command line options (only a brief description of
each option is given in the list below; details, defaults, and
dependencies are discussed later in this document):
-
<first SPK name>
-
is the name of the first SPK file. When two SPK files are provided to
the program this name must be the second to last item on the command
line.
-
<second SPK name>
-
is the name of the second SPK file. When two SPK files are provided to
the program this name must be the last item on the command line.
-
<SPK name>
-
is the name of the only SPK file. When only one SPK file is provided to
the program this name must be the last item on the command line.
-
-k <kernels>
-
is used to specify the list of additional kernels or meta-kernels that
are needed for both trajectories to be computed. File names following
``-k'' must be separated by spaces.
-
-b1 <body>
-
is used to specify the body for the first trajectory to be computed.
This body can be specified using its NAIF ID or name. If the name is
used, it must be either built into SPICE or defined by kernels provided
using the ``-k'' and ``-k1'' options.
-
-c1 <body>
-
is used to specify the center for the first trajectory to be computed.
This center can be specified using its NAIF ID or name. If the name is
used, it must be either built into SPICE or defined by kernels provided
using the ``-k'' and ``-k1'' options.
-
-r1 <frame>
-
is used to specify the name of the reference frame for the first
trajectory to be computed. The frame can be any of the frames built
into SPICE or frames defined by kernels provided using the ``-k'' and
``-k1'' options.
-
-k1 <kernels>
-
is used to specify the list of additional kernels or meta-kernels that
are needed only for the first trajectory to be computed. File names
following ``-k1'' must be separated by spaces.
-
-b2 <body>
-
is used to specify the body for the second trajectory to be computed.
This body can be specified using its NAIF ID or name. If the name is
used, it must be either built into SPICE or defined by kernels provided
using the ``-k'' and ``-k1'' options.
-
-c2 <body>
-
is used to specify the center for the second trajectory to be computed.
This center can be specified using its NAIF ID or name. If the name is
used, it must be either built into SPICE or defined by kernels provided
using the ``-k'' and ``-k1'' options.
-
-r2 <frame>
-
is used to specify the name of the reference frame for the second
trajectory to be computed. The frame can be any of the frames built
into SPICE or frames defined by kernels provided using the ``-k'' and
``-k2'' options.
-
-k2 <kernels>
-
is used to specify the list of additional kernels or meta-kernels that
are needed only for the second trajectory to be computed. File names
following ``-k2'' must be separated by spaces.
-
-b <time>
-
is used to specify the coverage window begin time. The time string
provided using this option can be in any form accepted by SPICE's
str2et_c function. If this option is provided, the name of an LSK file
must be provided with the ``-k'', ``-k1'', or ``-k2'' option.
-
-e <time>
-
is used to specify the coverage window end time. The time string
provided using this option can be in any form accepted by SPICE's
str2et_c function. If this option is provided, the name of an LSK file
must be provided with the ``-k'', ``-k1'', or ``-k2'' option.
-
-s <step>
-
is used to specify the step, in TDB seconds, for determining points
within the coverage window, for which the trajectory(ies) are to be
computed. The step must be greater than 1E-8. This option supersedes
``-n''.
-
-n <number>
-
is used to specify the number of points within the coverage window, for
which the trajectory(ies) are to be computed. The number must be an
integer between 2 and 1,000,000. The default value is 1000. This option
is superseded by ``-s''.
-
-f <time_type>
-
is used to specify the output time format other than the default TDB
seconds past J2000. The value can be any time format picture accepted
by the timout_c function, for example to display time tags as UTCs in
ISO date format use
'YYYY-MM-DDTHR:MN:SC.### ::RND'
-
-
to display time tags as TDB Julian days use:
'JULIAND.######### ::TDB'
-
-d <number>
-
is used to specify the number of significant digits in the output
numeric times (TDB seconds past J2000) and state component values or
state component difference values included in the dump, coverage and
coverage gap reports. The number must be an integer between 6 and 17.
The default value is 14.
-
-t <report_type>
-
is used to specify the type of report that the program should display:
basic to display only the absolute and
relative maximum and average
differences in magnitude of
position and velocity vectors
stats to display statistics on position
differences rotated into the view
frame
dump to display a table of positions and
velocities or their differences
dumpvf to display a table of position and
velocity differences rotated into
the view frame
dumpc to display a table of coverage
intervals
dumpg to display a table of gaps in
coverage
-
-
Only ``dump'', ``dumpc'', and ``dumpg'' are applicable for sampling
runs. ``basic'' is the default for comparison runs while ``dump'' is
the default for sampling runs.
-
-v
-
causes the program to display only the version line. This option
overrides all other options.
-
-u
-
causes the program to display the usage message. This option overrides
all other options except ``-v''.
-
-h
-
causes the program to display a brief help message. This option
overrides all other options except ``-v'' and ``-u''.
Top
Kernel Files
In all cases at least one SPK file must be provided to the program to
perform comparison or sampling of trajectories. Frequently more than one
SPK and one or more additional kernels of other types are given to
compute trajectories chaining data for multiple bodies and/or with
respect to non-inertial reference frames. Depending on how the SPKs are
provided, they fall into one of two categories -- primary SPK files and
additional SPK or other kernel files.
Primary SPK files -- two, one, or none -- are provided at the end of the
command line without any command line keys. Normally these SPKs are the
ones containing trajectories that differ (for example, predicted and
reconstructed SPKs for the same body and time period), or the trajectory
to be sampled. These SPK files are also examined by the program to
determine the default values for the body, center, and frame, and to
determine the coverage window boundaries.
Additional kernel files -- none, or as many as needed -- are provided
anywhere on the command line (except at the very end) using the ``-k'',
``-k1'', and ``-k2'' keys. Normally these kernel files contain
additional SPICE data needed to compute requested trajectories or
generate other than TDB seconds time tags for output (for example, an
LSK file providing supporting time conversion data, FK files providing
frame definitions needed by SPICE to recognize specified frames, PCK
files providing rotation data for computing trajectories in body-fixed
frames, etc).
Top
Primary Kernel Files
The primary SPK files are provided as the last or the last two items on
the command line. Since the primary kernel files do not require specific
command line keys, the program determines if they were given by
examining the last two words on the command line as follows:
-- If the last word on the command line is not the name of an existing SPK
file, the program assumes that no primary SPK files were given.
-- If the last word on the command line is the name of an existing SPK file
but the second to last word is not, the program assumes that only one
primary SPK file was given.
-- If both the last two words are names of existing SPK files, the program
assumes that it was given two primary SPK files
Due to the parsing approach described above, misspelling a primary SPK
name or not including the path if the file is not in the current
directory leads to the program deciding that it either runs with no
primary SPK files (if the last file name is misspelled) or that it runs
with one primary SPK instead of two (if the second to last file name is
misspelled). In either case, the misspelled file name(s) is(are) treated
as a part of the value of the command line option immediately preceding
it(them) causing the program to signal an error indicating an incorrect
option value.
On the other hand, if any of the options for specifying additional
kernel files (``-k'', ``-k1'', ``-k2'') followed by actual file names is
provided at the end of the command line (for the case of no primary
SPKs) or immediately preceding the only primary SPK file (for the case
of one primary SPK), and the last one or the last two additional kernels
are SPKs, they are mistakenly picked as the primary kernel(s). In this
situation the program usually signals an error indicating that
trajectory could not be computed because insufficient data was loaded.
Top
Additional Kernel Files
Unlike primary kernels that must be SPKs, additional kernels can be of
any type -- PCK, FK, SCLK, LSK, CK, or even meta-kernels (MK). Unlike
primary kernels, additional kernels are specified using the dedicated
``-k'', ``-k1'', and ``-k2'' keys. Any number of additional kernels or
meta-kernels can be provided using any of the three keys, with kernel
file names listed in any order, separated by blanks. While in many cases
no additional kernel files are required, in all cases when ``-f'',
``-b'', and/or ``-e'' are given, an LSK file must be specified using one
of these keys. The additional kernels are used by the program as
follows:
-- All additional kernel files provided using the ``-k'' are loaded and used
for both trajectories (body-center-frame combinations).
-- All additional kernel files provided using ``-k1'' are loaded and used only
for the first trajectory (first body-center-frame combination).
-- All additional kernel files provided using ``-k2'' are loaded and used only
for the second trajectory (second body-center-frame combination).
Neither the combined set of additional kernel files given using
``-k''/``-k1'' nor the combined set of additional kernel files given
using ``-k''/``-k2'' can contain enough data to compute corresponding
trajectories at any time in the time buffer without loading the
corresponding primary SPK file(s). If they do, the program signals an
error. The only exception from this requirement is when no primary
kernel files are specified, then the additional kernel files given using
``-k''/``-k1'' and ``-k''/``-k2'' must contain enough data to compute
the corresponding trajectories.
Top
Comparison Runs vs. Sampling Runs
The program automatically decides whether it should compare two
trajectories or sample one trajectory, based on the primary kernels
provided at the end of the command line, additional kernel files
provided using the ``-k1'' and ``-k2'' keys, and on the
body-center-frame combinations specified on the command line using the
``-b1'', ``-c1'', ``-r1'', ``-b2'', ``-c2'', and ``-r2'' keys and/or
determined from the primary SPK data.
To run the program in comparison mode, it is enough to satisfy any of
the following guidelines for specifying inputs that tell the program to
compute two different trajectories:
-- provide two different primary SPKs
-- provide two different sets of trajectory-specific additional kernels using
``-k1'' and ``-k2''
-- specify two different bodies using ``-b1'' and ``-b2''
-- specify two different centers using ``-c1'' and ``-c2''
-- specify two different reference frames using ``-r1'' and ``-r2''
To run the program in sampling mode, it is required to satisfy all of
the following guidelines telling the program to compute a single
trajectory:
-- provide only one primary SPK or no primary SPKs
-- provide no trajectory-specific additional kernels using ``-k1'' and ``-k2''
or provide the same files listed in the same order using both of these keys
-- specify only one body using either ``-b1'' or ``-b2'', specify the same
body using both of these keys, or specify no bodies at all
-- specify only one center using either ``-c1'' or ``-c2'', specify the same
center using both of these keys, or specify no centers at all
-- specify only one reference frame using either ``-r1'' or ``-r2'', specify
the same reference frame using both of these keys, or specify no reference
frames at all
Top
Runs with Two, One, and No Primary SPK(s)
The number of primary SPK files and the mode in which the program is run
(``comparing'' vs. ``sampling'') directly affect the requirements in
regards to which command line options must be provided, approaches for
determining default values for omitted options, and ways in which
kernels are loaded and trajectories are computed. The three subsections
below discuss specifics of runs with two, one, and no primary SPK files.
Top
Runs with Two Primary SPK Files
When two primary SPK files are provided on the command line:
-- All ``-*1'' and ``-*2'' options, and ``-b'' and ``-e'' options can be
omitted because defaults for these options can be picked from the first of
these files.
-- Since the program is run in comparison mode in such cases, the first
primary SPK file and the additional kernel files given using ``-k'' and
``-k1'' are loaded and states for the first default/specified
body-center-frame combination are computed at times within the
default/specified time window, then the second primary SPK file and the
additional kernel files given using ``-k'' and ``-k2'' are loaded and
states for the second default/specified body-center-frame combination are
computed at the same times within the default/specified time window, then
the differences between the corresponding states are computed and printed
in the specified format.
Top
Runs with One Primary SPK File
When one primary SPK file is provided on the command line:
-- All ``-*1'' and ``-*2'' options, and ``-b'' and ``-e'' options can be
omitted because defaults for these options can be picked from the file.
-- If the program is run in comparison mode, the primary file and the
additional kernel files given using ``-k'' and ``-k1'' are loaded and
states for the first body-center-frame combination are computed at times
within the default/specified time window, then the primary file and the
additional kernel files given using ``-k'' and ``-k2'' are loaded and
states for the second body-center-frame combination are computed at the
same times within the default/specified time window, then the differences
between corresponding states are computed and printed in the specified
format.
-- If the program is run in sampling mode, the primary SPK file and the
additional kernel files given using ``-k'' and ``-k1'' are loaded and
states for the first body-center-frame combination are computed at times
within the default/specified time window and then printed in the specified
format.
Top
Runs Without Primary SPK Files
When no primary SPK files are specified on the command line:
-- ``-b1'' or ``-b2'' or both, ``-c1'' or ``-c2'' or both, and ``-r1'' or
``-r2'' or both must be specified because the program has no way of picking
defaults for the body-center-frame combination(s) when it is not given any
primary kernel(s) to examine.
-- If the program is run in comparison mode, the additional kernel files given
using ``-k'' and ``-k1'' are loaded and states for the first
body-center-frame combination are computed at times within the
default/specified time window, then the additional kernel files given using
``-k'' and ``-k2'' are loaded and states for the second body-center-frame
combination are computed at the same times within the default/specified
time window, then the differences between corresponding states are computed
and printed in the specified format.
-- If the program is run in sampling mode, the additional kernel files given
using ``-k'' and ``-k1'' are loaded and states for the first
body-center-frame combination are computed at times within the
default/specified time window and then printed in the specified format.
Top
Specifying/Picking Defaults for Bodies, Centers, and Frames
The program has six command line keys -- ``-b1'', ``-c1'', ``-r1'',
``-b2'', ``-c2'', and ``-r2'' -- to specify body-center-frame
combinations to be used to compute trajectories. A single object can be
specified using each of the ``-b*'' and ``-c*'' options using the object
name or ID and a single frame can be specified using each of the ``-r*''
options using the frame name.
If a body or a center is specified using its name, this name must be
known to SPICE, i.e. it must either be the name of a built-in object or
one of the names defined in the text kernels provided as additional
kernels. If the name specified on the command line is not recognized
after loading the kernel files provided using ``-k''/``-k1'' for the
``-b1'' and ``-c1'' names, or provided using ``-k''/``-k2'' for the
``-b2'' and ``-c2''names, the program signals an error.
The name of a frame specified on the command line or associated with the
frame ID picked from one of the primary SPK files must be known to SPICE
as well. It must either be a name of a built-in frame or of one of the
frames defined in the FK file(s) provided as additional kernels. If the
frame name specified on the command line or frame ID picked from the
primary SPK file is not recognized after loading the kernel files
provided using ``-k''/``-k1'' for the ``-r1'' frames, or provided using
``-k''/``-k2'' for the ``-r2'' frames, the program signals an error.
Not all six items have to be specified for every program run. In many
cases only one body, center, or frame is given and the program will set
the rest to default values based on the given body, center, or frame
and/or by examining the primary SPK file(s). The three subsections below
discuss specifying and picking defaults for the bodies, centers, and
frames frames.
Top
Specifying/Picking Defaults for Bodies
The following rules apply to specifying and picking defaults for the
bodies:
-- If both ``-b1'' and ``-b2'' are specified, trajectories are computed for
these bodies.
-- If only ``-b1'' or only ``-b2'' is specified, the specified body is used
for both bodies.
-- If neither ``-b1'' nor ``-b2'' is specified and only one primary SPK file
is given, the body to be used for both trajectories is determined by
examining segments in this SPK file. If the 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. If the SPK file does not contain data for any spacecraft, the body
from the very last segment of the file is picked.
-- If neither ``-b1'' nor ``-b2'' is specified and both primary SPK files are
are provided, the body to be used for both trajectories is determined by
examining segments in the first primary SPK file in the same way as in the
case of only one primary SPK (see above).
-- If neither ``-b1'' nor ``-b2'' is specified and no primary SPK files are
given, the program signals an error.
Top
Specifying/Picking Defaults for Centers
The following rules apply to specifying and picking defaults for
centers:
-- If ``-c1'' and ``-c2'' are specified, trajectories are computed relative to
these centers.
-- If only ``-c1'' or only ``-c2'' is specified, the specified center is used
for both centers.
-- If neither ``-c1'' nor ``-c2'' is specified and only one primary SPK file
is given, the center to be used for both trajectories is determined by
examining segments in this SPK file. The center 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
``Specifying/Picking Defaults for Bodies'' section of this User's Guide).
-- If neither ``-c1'' nor ``-c2'' is specified and both primary SPK files are
given, the center to be used for both trajectories is determined by
examining segments in the first primary SPK file in the same way as in the
case of only one primary SPK (see above).
-- If neither ``-c1'' nor ``-c2'' is specified and no primary SPK files are
given, the program signals an error.
Top
Specifying/Picking Defaults for Frames
The following rules apply to specifying and picking defaults for the
frames:
-- If ``-r1'' and ``-r2'' are specified, trajectories are computed relative to
these frames..
-- If only ``-r1'' or only ``-r2'' is specified, the specified frame is used
for both frames.
-- If neither ``-r1'' nor ``-r2'' is specified and only one primary SPK file
is given, the frame to be used for both trajectories is determined by
examining segments in this SPK file. The frame is set to the frame 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
``Specifying/Picking Defaults for Bodies'' section of this User's Guide).
-- If neither ``-r1'' nor ``-r2'' is specified and both primary SPK files are
given, the frame to be used for both trajectories is determined by
examining segments in the first primary SPK file in the same way as in the
case of only one primary SPK (see above).
-- If neither ``-r1'' nor ``-r2'' is specified and no primary SPK files are
given, the program signals an error.
Top
Body, Center, and Frame Selection Scenarios
A few comparison run scenarios shown below illustrate when some or all
of the options specifying body, center and frame can be omitted and when
they must 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 selections 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 using
either the ``-b1'' option or the ``-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'' option or the ``-b2'' option to prevent
SPKDIFF from automatically picking a different body.
A few sampling run 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 sampling trajectory for a spacecraft from an SPK file containing data
just for that spacecraft or just for that spacecraft and some natural
bodies, and expecting the sampled states to be relative to the same center
and in the same frame as the spacecraft data in the SPK file, 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 SPK file and computes states for the associated body,
center and frame.
-- When sampling spacecraft trajectory for a spacecraft from an SPK file
containing data for more than one spacecraft, the name/ID of that
spacecraft needs to be specified using either the ``-b1'' option or the
``-b2'' option to prevent SPKDIFF from automatically picking another
spacecraft, data for which is also provided in the file.
-- When sampling spacecraft trajectory for a spacecraft or a natural body
relative to a center different from the center with respect to which that
spacecraft's trajectory is provided in the last segment of the given SPK
file, the name/ID of that center needs to be specified using either the
``-c1'' option or the ``-c2'' option to prevent SPKDIFF from automatically
picking the default center based on the data provided in the file.
-- When sampling spacecraft trajectory for a spacecraft or a natural body
relative to a frame different from the frame with respect to which that
spacecraft's trajectory is provided in the last segment of the given SPK
file, the name of that frame needs to be specified using either the ``-r1''
option or the ``-r2'' option to prevent SPKDIFF from automatically picking
the default frame based in the data provided in the file.
-- When sampling spacecraft trajectory without providing a primary SPK, for
example using data from one or more meta-kernels specified using the ``-k''
option, all three items -- body, center, and frame -- must be specified
using the ``-b1'' (or ``-b2''), ``-c1'' (or ``-c2''), and ``-r1'' (or
``-r2'') options because the program cannot pick any defaults without
primary SPK(s).
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
Times for Comparison/Sampling
The program picks times at which states are computed based on the
coverage window determined by examining the primary SPK files(s), SPKs
provided as additional kernel files and listed in the meta-kernels
provided as additional kernel files, and/or specified using the ``-b''
and ``-e'' keys, and on either the number of points within that window
specified using the ``-n'' key or the time step specified using the
``-s'' key''.
The coverage window begin and end times specified using the ``-b'' and
``-e'' options can be in any format accepted by SPICE's str2et_c
function (see str2et_c header for details). If one or both of these
times are provided, an LSK file must be provided as one of the
additional kernels.
The number of points specified using the ``-n'' key must be an integer
between 2 to 1,000,000 while the step specified using the ``-s'' key
must be in seconds and be greater than 1.0E-8. If both ``-n'' and ``-s''
are specified, ``-s'' takes precedence.
The coverage window determined by examining the primary SPK file(s) or
additional SPK files may consist of many intervals, some of which may be
singletons (with the interval begin time equal to the interval end
time). Whether the coverage window consists of only one interval or of
many intervals, the program computes times within the window in such a
way that the interval ends are always included in the set of points. The
rest of times are distributed within the intervals, stepping from the
beginning of each interval with the specified step. If the number of
points is given instead of the step, the step is computed using the
measure of the coverage window (the sum of the lengths of the individual
intervals) and the specified number of points.
Not all of the keys controlling selection of points have to be specified
for every program run. In some cases none of these options are required.
The two subsections below discuss specifics of providing and picking
defaults for the coverage window and step or number of points.
Top
Coverage Window
The program determines the coverage window by examining the primary SPKs
or the additional SPKs to get the ``default coverage window'' and by
further restricting this window by the optional begin and/or end times
provided using the ``-b'' and ``-e'' keys.
The default coverage window is determined either from the primary SPK
files or from the additional SPK files using SPICE's spkcov_c function
to get coverages for the bodies either specified using the
``-b1''/``-b2'' keys or set to default values as described earlier in
this document. Depending on the kernels provided to the program the
default coverage window is determined as follows (in all cases below the
first and the second bodies may be the same body or different bodies):
-- When the two primary SPK files are provided, the default coverage window is
set to the intersection of the coverage window for the first body
determined from the first primary SPK and the coverage window for the
second body determined from the second primary SPK.
-- When one primary SPK file is provided, the default coverage window is set
to the intersection of the coverage windows for the first and second bodies
determined from this SPK.
-- When no primary SPK files are provided, the default coverage window is set
to the intersection of the coverage window for the first body determined
from all additional SPKs provided with and/or listed in meta-kernels
provided with the ``-k'' and ''-k1'' keys and the coverage window for the
second body determined from all additional SPKs provided with and/or listed
in meta-kernels provided with the ``-k'' and ''-k2'' keys.
If the program is given no SPK files, the SPK files don't provide data
for specified bodies, or the coverage windows for the first and second
bodies do not overlap, the program signals an error.
If either ``-b'' or ``-e'', or both ``-b'' and ``-e'' are specified, the
default window is truncated according to these begin and end times. If
the time specified using ``-b'' is before the start of the default
window, this time is ignored. If the time specified using ``-b'' is
after the end of the default coverage window, the program signals an
error. If the time specified using ``-e'' is after the end of the
default window, this time is ignored. If the time specified using ``-e''
is before the start of the default coverage window, the program signals
an error.
Top
Times within Coverage Window
The program picks times within the coverage window based on the number
of points specified using the ``-n'' key or the time step specified
using the ``-s'' key''.
When neither the number of points is specified using ``-n'' nor the step
is specified using ``-s'', the number of points is set to a default
value determined by examining the coverage window. If the total number
of endpoints -- 2 for each non-singleton interval, 1 for each singleton
interval -- for all intervals in the coverage window is greater than
1000, the number of points is set to the number of endpoints and the
step is not computed. Otherwise it is set to 1000 or a number less than
but close to 1000 (the actual number is determined at run-time based on
the lengths of the intervals) and the step is computed by dividing the
measure of the coverage window by the number of points minus the number
of intervals.
When the number of points is specified using ``-n'' but this number is
less than the number of the coverage window interval endpoints, the
value given using ``-n'' is ignored and the number of points is set to
the number of interval endpoints and the step is not computed. Otherwise
the number of points is set to the value provided using ``-n'' or a
number less than but close to this value (the actual number is
determined at run time based on the lengths of the intervals) and the
step is computed by dividing the measure of the coverage window by the
number of points minus the number of intervals.
When step is specified using ``-s'', the number of points is computed by
adding the number of interval endpoints to the total of the numbers of
points that can fit within each non-singleton interval when it's stepped
through with this step. If the resultant number of points is greater
than 1,000,000, the program signals an error.
Whether the step was provided or computed using the provided or default
number of points, the set of times at which trajectory is computed
includes all interval ends -- 2 for each non-singleton interval, 1 for
each singleton interval -- plus additional points computed by stepping
with this step within each non-singleton interval starting from the
interval start time. The last point within each non-singleton interval
is computed such that it always lies inside the 1.5*step to 0.5*step
range off the interval end.
In the very unlikely case of the comparison window containing a single
singleton interval the program does not pick a single time for it.
Depending on the values specified with ``-s'' and ``-n'' it picks the
default number of times 1000 (no ``-s'' and ``-n''), 2 (for ``-s'' with
any value), or the user specified number of times (``-n'' but no ``-s'')
and sets all these times to the same time.
Care should be taken when picking the step using ``-s'' or specifying
the number of points using ``-n''. Picking a very small step for a large
time window, or very many points for any window, leads to very long run
times. In some cases the number of points computed using the step may
even be greater that 1,000,000, preventing the program from running
because its buffers are not large enough to deal with so many points. On
the other hand, picking a large step or too few points prevents the
program from doing a sufficiently dense sampling or a thorough
comparison.
Another important point to keep in mind, especially for the sampling
runs, is that because of the possibility of multiple intervals within
the coverage window and the approach used for picking the last step
within each interval, the program will almost never produce a constant
step output state or state difference table. One or more steps in the
table will almost always be greater or smaller than the others,
prohibiting use of the table in any application that requires a constant
step size.
Top
Times for Comparison/Sampling Selection Scenarios
A few comparison run scenarios below illustrate when some or all of the
options specifying the comparison time window and time step can be
omitted and when they must be provided to achieve the desired result:
-- If the program is run just to find out whether trajectories provided by two
primary 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 a default number of samples over that window and performs a
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
primary SPK 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 a 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
line 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.
A few sampling run 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 sample a trajectory from the primary SPK file
or from a set of additional SPK files over the whole period for which the
coverage of the body of interest is desired, normally only the step needs
to be specified because it is not likely that the step picked by default
will result in the desired output. SPKDIFF finds the overlapping coverage
from the file data, picks sample times based on the given step over that
window and samples the trajectory at these times.
-- If the goal is to sample a trajectory during a particular time interval,
which is usually much shorter than the default coverage window determined
from the primary or additional SPK files (for example for a time window
around a single pericenter for SPKs covering many orbits), both the begin
and end times should be specified to constrain SPKDIFF to that window.
-- Often specifying a time step as 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
Output
In a successful run the program prints to the screen a report consisting
of the report header and report data. The report header provides
complete information about the kernels and control parameters used by
the program. The report data provides information about the trajectory
differences (for comparison runs) or trajectories (for sampling reports)
in a variety of ways, called report types.
Top
Overview of Report Types
The report data can be one of the following types depending on the value
provided using the ``-t'' key:
-
basic
-
the basic report, applicable only to comparison runs, 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 trajectories are different, and
finding the maximum magnitude of this difference. This is the default
report displayed for comparison runs when ``-t'' is omitted.
-
stats
-
the statistics report, applicable only to comparison runs, providing 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 for the first
body-center-frame combination. 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.
-
dump
-
the state or state difference dump report, applicable to sampling and
comparison runs, containing a table with time tagged states (for
sampling runs) or state differences (for comparison runs). This report
is useful for subsequent plotting of trajectories or differences
between trajectories over time or for generating trajectory data tables
for input to other applications (e.g. MKSPK). This is the default
report displayed for sampling runs when ``-t'' is omitted.
-
dumpvf
-
the view frame state difference dump report, applicable only to
comparison runs, containing a table with time tagged differences
between individual states computed for the two body-center-frame
combinations, rotated into the view frame based on states computed for
the first combination. This report is useful for plotting of the
difference between trajectories expressed in the view frame, as a
function of time.
-
dumpc
-
the coverage intervals dump report containing a table listing the start
and stop times and durations for the intervals inside the coverage
window, during which trajectory(ies) can be computed.
-
dumpg
-
the coverage gaps dump report containing a table listing the start and
stop times and duration for the gaps inside the coverage window, during
which trajectory(ies) cannot be computed.
In comparison runs, the ``basic'' and ``stats'' reports are useful for
obtaining a quick assessment of whether and by how much two trajectories
differ while the ``dump'' and ``dumpvf'' reports are useful to capture
detailed information about trajectory differences.
In sampling runs, the ``dump'' report is the main report used to
generate desired trajectory data tables.
The ``dumpc'' and ``dumpg'' reports are useful for SPK coverage and
coverage overlap analysis.
All reports have rigid formats. The only item in the reports that can be
altered by command line options is the format of time tags in ``dump''
and ``dumpvf'' reports, which can be changed using the ``-f'' key.
Top
Time Tag Format for ``dump*'' Reports
The format of the time tags in the ``dump*'' reports is controlled using
the ``-f'' key. By default, time tags in the ``dump*'' report data are
given as TDB seconds past J2000. This default format can be changed by
specifying ``-f'' followed by a time format picture acceptable to the
timout_c function. For example:
YYYY-MM-DDTHR:MN:SC.### ::RND for UTC ISO date
YYYY-DOYTHR:MN:SC.### ::RND for UTC ISO DOY
JULIAND.######### ::TDB for Julian day TDB
``-f'' does not apply to times in the report header and the statistics
report, in which the times are always displayed as TDB in calendar and
seconds past J2000 formats.
Top
Numeric Format for ``dump*'' Reports
The default format of numeric time tags (TDB seconds past J2000), state
component values, and state component difference values in all ``dump*''
reports is the scientific format with 14 significant digits (e.g.
+1.2345678901234E+01). A different number of significant digits can be
specified using the ``-d'' option as an integer in the range from 6 to
17. If specified, the number of significant digits is used for all
numeric items in the ``dump*'' report data part (table) but is not used
for any numbers in the table header or in the data part of the
non-``dump*'' (``basic'' and ``stats'') reports.
The default format, with 14 significant digits, is usually adequate for
output from all comparison runs and from all sampling runs that are
intended to produce tables of states for plotting but, due to round off,
it may not be adequate for sampling runs that are intended to generate
tables of states for subsequent interpolation or packaging into SPK
files. For such outputs the number of significant digits should be
increased to 16 -- if output states are planned to be packaged into an
SPK file using the MKSPK program that employs a custom parser to ingest
input numeric data -- or 17 -- if output states will read by an
application that uses language-native means to parse input numeric
data).
Top
Report Header
The top portion of each report generated by the program is occupied by
the report header providing complete information about the kernels and
control parameters used by the program. The format and the set of
information provided in the report header depends on
-- the type of run (comparison vs. sampling)
-- the type of report (data dump, coverage dump, etc.)
-- the set of kernels that were provided
-- and various miscellaneous control parameters.
All lines in the report header have
#
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 the program.
Neither the ``-f'' nor ``-d'' options used to control the time and
numeric formats in the data part of the output have any effect on the
time and number formats used in all headers.
Top
Report Header for Comparing Two Trajectories
For runs comparing two trajectories the report header has either the
``old'' format used in version 1.0.0 of the program and preserved for
backward compatibility for comparison runs with two primary SPKs, over
comparison window comprised of a single interval, and without
trajectory-specific additional kernels provided using the ``-k1'' and
``-k2'' options (the line numbers shown on the left in this and the next
header are not present in the actual reports; they are provided for
referencing purposes only):
1 #
2 # Comparison of N 'FRAME1NAME'-referenced geometric states
3 #
4 # of 'BODY1NAME' (BODY1ID) relative to 'CEN1NAME' (CEN1ID)
5 # from SPK 'SPK1NAME'
6 #
7 # with N 'FRAME2NAME'-referenced geometric states
8 #
9 # of 'BODY2NAME' (BODY2ID) relative to 'CEN2NAME' (CEN2ID)
10 # from SPK 'SPK2NAME'
11 #
12 # evenly-spaced with STEPSEC second (STEPDHMS) step size
13 # within the time interval
14 #
15 # from 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
16 # to 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
17 #
18 # using additional data from these kernels
19 #
20 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
21 #
or the ``new'' format used for all other comparison cases:
1 #
2 # Comparison of N 'FRAME1NAME'-referenced geometric states
3 #
4 # of 'BODY1NAME' (BODY1ID) relative to 'CEN1NAME' (CEN1ID)
5 # computed using
6 #
7 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
8 # -K1/KERNEL1 -K1/KERNEL2 ... -K1/KERNELm
9 # SPK1NAME
10 #
11 # with N 'FRAME2NAME'-referenced geometric states
12 #
13 # of 'BODY2NAME' (BODY2ID) relative to 'CEN2NAME' (CEN2ID)
14 # computed using
15 #
16 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
17 # -K2/KERNEL1 -K2/KERNEL2 ... -K2/KERNELm
18 # SPK2NAME
19 #
20 # with a STEPSEC second (STEPDHMS) step size
21 # within the continuous time period
22 #
23 # from 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
24 # to 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
25 #
26 # TIMESPEC
27 #
where:
-- on lines 2 and 7 (old) or 11 (new) ``N'' is replaced with the actual number
of comparison points while ``FRAME1NAME'' and ``FRAME2NAME'' are replaced
with the actual names of the frames used to compute states for comparison
-- on lines 4, and 9 (old) or 13 (new) ``BODY1NAME'', ``BODY1ID'',
``CEN1NAME'', ``CEN1ID'', ``BODY2NAME'', ``BODY2ID'', ``CEN2NAME'', and
``CEN2ID'' are replaced with the actual names/IDs of the bodies and centers
used to compute states for comparison
-- lines 5, 10, and 20 (old) or 7, 8, 9, 16, 17, and 18 (new) contain names of
primary kernels provided at the end of the command line and names of
additional kernels provided using the ``-k'', ``-k1'', and ``-k2'' keys. In
the old report, lines 18, 19, 20, and 21 are omitted if no additional
kernels were provided using the ``-k'' option. In the new report any of the
specified lines are present only when corresponding kernel files are given
on the command line; if they are present, the kernels on the lines are
listed in the order in which they were loaded by the program.
-- on line 12 (old) or 20 (new) the actual step printed with 14 significant
digits replaces ``STEPSEC'' while the actual step expressed as days, hours,
minutes, seconds in the old
DDd HRh MMm SS.###s
DDD:MN:HR:SC.######
format replaces ``STEPDHMS''. If states are computed only at the interval
endpoints, the whole line in the new header is replaced with the following
string: ``at continuous coverage intervals' endpoints''.
-- line 21 (new) has the form shown above when there are no gaps in the
coverage window. Otherwise the whole line is replaced with the following
string: ``within the non-continuous (with M gaps) time period'' where ``M''
is replaced with the actual number of gaps.
-- on lines 15 and 16 (old) or 23 and 24 (new) times are replaced with the
first and last times from the set of times for which the comparison was
made.
-- lines 26 and 27 are displayed for all report types except ``basic'' and
``stats''. If no output time type was specified using the ``-f'' key,
TIMESPEC is replaced ``Times are TDB seconds past J2000.'' If an output
time type was specified using the ``-f'' key, TIMESPEC is replaced ``Times
were generated by TIMOUT using '<format>' format.''
Top
Report Header for Coverage/Gaps for Two Trajectories
For runs displaying coverage or gaps in coverage for two trajectories
the report header has the following format (the line numbers given on
the left are not present in the actual report; they are provided only
for referencing purposes):
1 #
2 # Coverage overlap for 'FRAME1NAME'-referenced geometric states
3 #
4 # of 'BODY1NAME' (BODY1ID) relative to 'CEN1NAME' (CEN1ID)
5 # computed using
6 #
7 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
8 # -K1/KERNEL1 -K1/KERNEL2 ... -K1/KERNELm
9 # SPK1NAME
10 #
11 # and 'FRAME2NAME'-referenced geometric states
12 #
13 # of 'BODY2NAME' (BODY2ID) relative to 'CEN2NAME' (CEN2ID)
14 # computed using
15 #
16 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
17 # -K2/KERNEL1 -K2/KERNEL2 ... -K2/KERNELm
18 # SPK2NAME
19 #
20 # with a STEPSEC second (STEPDHMS) step size
21 # within the continuous time period
22 #
23 # from 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
24 # to 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
25 #
26 # TIMESPEC
27 #
where:
-- on lines 2 and 11 ``FRAME1NAME'' and ``FRAME2NAME'' are replaced with the
actual names of the frames used to compute states for comparison
-- on lines 4 and 13 ``BODY1NAME'', ``BODY1ID'', ``CEN1NAME'', ``CEN1ID'',
``BODY2NAME'', ``BODY2ID'', ``CEN2NAME'', and ``CEN2ID'' are replaced with
the actual names/IDs of the bodies and centers used to compute states for
comparison
-- lines 7, 8, 9, 16, 17, and 18 contain names of primary kernels provided at
the end of the command line and names of additional kernels provided using
the ``-k'', ``-k1'', and ``-k2'' keys. Any of these lines are present only
when corresponding kernel files are given on the command line; if they are
present, the kernels on the lines are listed in the order in which they
were loaded by the program.
-- on line 20 the actual step printed with 14 significant digits replaces
``STEPSEC'' while the actual step expressed as days, hours, minutes,
seconds in the
DDD:MN:HR:SC.######
format replaces ``STEPDHMS''. If states are computed only at the interval
endpoints, the whole line in the new header is replaced with the following
string: ``at continuous coverage intervals' endpoints''.
-- line 21 has the form shown above when there are no gaps in the coverage
window. Otherwise the whole line is replaced with the following string:
``within the non-continuous (with M gaps) time period'' where ``M'' is
replaced with the actual number of gaps.
-- on lines 23 and 24 times are replaced with the first and last times from
the set of times for which the comparison was made.
-- on line 26 ``TIMESPEC'' is replaced with ``Times are TDB seconds past
J2000.'' if no output time type was specified using the ``-f'' key or with
``Times were generated by TIMOUT using '<format>' format.'' if an
output time type was specified using the ``-f'' key.
Top
Report Header for Sampling Trajectory
For runs sampling a trajectory the report header has the following
format (the line numbers given on the left are not present in the actual
report; they are provided for referencing purposes only):
1 #
2 # Sampling of N 'FRAMENAME'-referenced geometric states
3 #
4 # of 'BODYNAME' (BODYID) relative to 'CENNAME' (CENID)
5 # computed using
6 #
7 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
8 # -K1/KERNEL1 -K1/KERNEL2 ... -K1/KERNELm
9 # SPKNAME
10 #
11 # with a STEPSEC second (STEPDHMS) step size
12 # within the continuous time period
13 #
14 # from 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
15 # to 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
16 #
17 # TIMESPEC
18 #
where:
-- on line 2 ``N'' is replaced with the actual number of sample points while
``FRAMENAME'' is replaced with the actual name of the frame used to compute
sampled states
-- on line 4 ``BODYNAME'', ``BODYID'', ``CENNAME'', and ``CENID'' are replaced
with the actual names/IDs of the body and center used to compute sampled
states
-- lines 7, 8, and 9 contain names of the primary SPK provided at the end of
the command line and names of additional kernels provided using the ``-k''
and ``-k1'' keys. Any of these lines are present only when corresponding
kernel files are given on the command line; if they are present, the
kernels on the lines are listed in the order in which they were loaded by
the program.
-- on line 11 the actual step printed with 14 significant digits replaces
``STEPSEC'' while the actual step expressed as days, hours, minutes,
seconds in the
DDD:MN:HR:SC.######
format replaces ``STEPDHMS''. If states are computed only at the interval
endpoints, the whole line in the new header is replaced with the following
string: ``at continuous coverage intervals' endpoints''.
-- line 12 has the form shown above when there are no gaps in the coverage
window. Otherwise the whole line is replaced with the following string:
``within the non-continuous (with M gaps) time period'' where ``M'' is
replaced with the actual number of gaps.
-- on lines 14 and 15 times are replaced with the first and last times from
the set of times for which the comparison was made.
-- on line 17 ``TIMESPEC'' is replaced with ``Times are TDB seconds past
J2000.'' if no output time type was specified using the ``-f'' key or with
``Times were generated by TIMOUT using '<format>' format.'' if an
output time type was specified using the ``-f'' key.
Top
Report Header for Coverage/Gaps for Trajectory
For runs displaying coverage or gaps in coverage for a trajectory the
report header has the following format (the line numbers given on the
left are not present in the actual report; they are provided for
referencing purposes only):
1 #
2 # Coverage for 'FRAMENAME'-referenced geometric states
3 #
4 # of 'BODYNAME' (BODYID) relative to 'CENNAME' (CENID)
5 # computed using
6 #
7 # -K/KERNEL1 -K/KERNEL2 ... -K/KERNELn
8 # -K1/KERNEL1 -K1/KERNEL2 ... -K1/KERNELm
9 # SPKNAME
10 #
11 # with a STEPSEC second (STEPDHMS) step size
12 # within the continuous time period
13 #
14 # from 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
15 # to 'YYYY MON DD HR:MN:SC.### TDB' (SSSS.### TDB seconds)
16 #
17 # TIMESPEC
18 #
where:
-- on line 2 ``FRAMENAME'' is replaced with the actual name of the frame used
to compute sampled states
-- on line 4 ``BODYNAME'', ``BODYID'', ``CENNAME'', and ``CENID'' are replaced
with the actual names/IDs of the body and center used to compute sampled
states
-- lines 7, 8, and 9 contain names of the primary SPK provided at the end of
the command line and names of additional kernels provided using the ``-k''
and ``-k1'' keys. Any of these lines are present only when corresponding
kernel files are given on the command line; if they are present, the
kernels on the lines are listed in the order in which they were loaded by
the program.
-- on line 11 the actual step printed with 14 significant digits replaces
``STEPSEC'' while the actual step expressed as days, hours, minutes,
seconds in the
DDD:MN:HR:SC.######
format replaces ``STEPDHMS''. If states are computed only at the interval
endpoints, the whole line in the new header is replaced with the following
string: ``at continuous coverage intervals' endpoints''.
-- line 12 has the form shown above when there are no gaps in the coverage
window. Otherwise the whole line is replaced with the following string:
``within the non-continuous (with M gaps) time period'' where ``M'' is
replaced with the actual number of gaps.
-- on lines 14 and 15 times are replaced with the first and last times from
the set of times for which the comparison was made.
-- on line 17 ``TIMESPEC'' is replaced with ``Times are TDB seconds past
J2000.'' if no output time type was specified using the ``-f'' key or with
``Times were generated by TIMOUT using '<format>' format.'' if an
output time type was specified using the ``-f'' key.
Top
Report Formats
Top
Basic Report (no ``-t'' option or with ``-t basic'')
The basic report shows only the maximum and average magnitudes of
position and velocity vector absolute and relative differences. The
absolute differences are computed by simple subtraction of position and
velocity components for the second trajectory from the corresponding
position and velocity components for the first trajectory while the
relative differences are computed by dividing the absolute differences
in the positions and velocities by the magnitudes of the positions and
velocities for the first trajectory.
This report is generated only for comparison runs 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 comparison reports it follows one
of the two comparison information headers):
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 of values resulting from a
statistical analysis of the state differences rotated into the view
frame. This report is generated only for comparison runs 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
body-center-frame combination 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 comparison
reports it follows one of the two comparison information headers):
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 TDB
seconds past J2000 and calendar format TDB -- 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 for the first trajectory 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
Dump Report (no ``-t'' option or with ``-t dump'')
The dump report contains a table with time tagged states computed for
the specified/default body, center, frame combination (for sampling
cases) or differences between individual states computed for the two
specified/default body, center, frame combinations (for comparison
cases). This report is generated if the ``-t'' option is followed by the
value ``dump'' or if the ``-t'' option is omitted in a sampling run.
For comparison runs this report has the following format (as for all
other comparison reports it follows one of the two comparison
information headers):
# 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
For sampling runs this report has the following format (as for all other
sampling reports it follows the sampling information header):
# time, x, y, z, vx, vy, vz
TIME X Y Z VX VY VZ
TIME X Y Z VX VY VZ
... ... ... ... ... ... ...
TIME X Y Z VX VY VZ
The first line of the report ``names'' the items provided in the table.
As for the lines in the 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 contain 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 state or the
difference between the states. The position components or their
differences are provided in kilometers, the velocity components or their
differences are provided in kilometers per second. All numbers in the
table -- times as TDB seconds past J2000 and state or state difference
components -- are printed in scientific notation, +n.nnnnnnnnnnnnnE+nn,
either with the default 14 significant digits or with the number of
significant digits specified using the ``-d'' option.
Top
View Frame Dump Report (``-t dumpvf'')
The view frame dump report contains a table with time tagged differences
between individual states computed for the two specified/default body,
center, frame combinations, rotated into the view frame based on states
for the first trajectory (see the ``View Frame Statistics Report''
section above for the definition of the view frame). This report is
generated only for comparison runs if the ``-t'' option is followed by
the value ``dumpvf''. This report has the following format (as for all
other comparison reports it follows one of the two comparison
information headers):
# 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 headers 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 the difference between the state computed
for the first trajectory and the state computed for the second
trajectory, rotated into the view frame defined by the state for the
first trajectory. The position component differences are provided in
kilometers, the velocity component differences in kilometers per second.
All numbers in the table -- times as TDB seconds past J2000 and state
difference components -- are printed in scientific notation,
+n.nnnnnnnnnnnnnE+nn, either with the default 14 significant digits or
with the number of significant digits specified using the ``-d'' option.
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 for the first trajectory 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
Coverage Intervals Dump Report (``-t dumpc''):
The coverage intervals dump report displays the start and stop times for
the intervals inside the coverage window, during which trajectories can
be computed. The time tags are displayed in the format specified using
the ``-f'' key, discussed earlier in the document.
The coverage intervals dump report has the following format (and follows
either sampling or comparison coverage/gap header):
# int_start_time, int_end_time, int_duration_sec, int_duration_string
STARTTIME STOPTIME SECONDS DAYS:HR:MN:SC.MMMMMM
...
STARTTIME STOPTIME SECONDS DAYS:HR:MN:SC.MMMMMM
where:
-- Items on each data line are separated by spaces.
-- The interval durations are printed as seconds in the
``x.xxxxxxxxxxxxxE+xx'' format (replaces SECONDS) and in days, hours,
minutes, seconds format (replaces DAYS:HR:MN:SC.MMMMMM). The STARTTIMEs and
STOPTIMEs are displayed in the format specified using the ``-f'' key or as
TDB seconds past J2000 if ``-f'' was not provided. If the STARTTIMEs and
STOPTIMEs are shown as TDB seconds past J2000, they are printed in
scientific notation, +n.nnnnnnnnnnnnnE+nn, either with the default 14
significant digits or with the number of significant digits specified using
the ``-d'' option.
Top
Coverage Gaps Dump Report (``-t dumpg'')
The coverage gaps dump report displays the start and stop times for the
gaps inside the coverage window, during which trajectories cannot be
computed. The time tags are displayed in the format specified using the
``-f'' key, discussed earlier in this document.
The coverage gaps dump report has the following format (and follows
either sampling or comparison coverage/gap header):
# gap_start_time, gap_end_time, gap_duration_sec, gap_duration_string
STARTTIME STOPTIME SECONDS DAYS:HR:MN:SC.MMMMMM
...
STARTTIME STOPTIME SECONDS DAYS:HR:MN:SC.MMMMMM
-- Items on each data line are separated by spaces.
-- The gap durations are printed as seconds in the ``x.xxxxxxxxxxxxxE+xx''
format (replaces SECONDS) and in days, hours, minutes, seconds format
(replaces DAYS:HR:MN:SC.MMMMMM). The STARTTIMEs and STOPTIMEs are displayed
in the format specified using the ``-f'' key or as TDB seconds past J2000
if ``-f'' was not provided. If the STARTTIMEs and STOPTIMEs are shown as
TDB seconds past J2000, they are printed in scientific notation,
+n.nnnnnnnnnnnnnE+nn, either with the default 14 significant digits or with
the number of significant digits specified using the ``-d'' option.
-- If the coverage window has no gaps, the string ``There are no gaps in
coverage.'' is printed instead of the data records.
Top
Troubleshooting
There are many cases when SPKDIFF is not able to perform the requested
sampling or 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'', ``-k1'', or ``-k2'' 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'', ``-k1'', or ``-k2'' option.
-- The program reports an error when either of the two primary SPK files to be
compared or any of the supporting kernels provided using the ``-k'',
``-k1'', or ``'-k2'' 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 primary SPK files together
with supporting kernels does not provide data for the body specified/picked
for that trajectory. The body specification should be re-examined and
corrected for the program to proceed.
-- The program reports an error if either of the primary 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 primary 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 any of the supporting kernels needed to
compute states for the specified body, center, frame combination do not
provide sufficient data. Depending on the 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
for the first trajectory. 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 primary 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, or how it can
be used to sample (dump) states from one or more SPK file.
Top
Comparison: Checking if Two SPKs Provide the Same Trajectory
This very common check usually requires a simple ``yes'' or ``no''
answer and zero or non-zero maximum differences shown by the basic
report provide 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 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 SPK file is one of the files that was used to
create the merged SPK file).
Top
Comparison: Checking if Two SPK files Differ Enough to Matter
This is another very common check frequently used 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 the 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 the 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
Comparison: Checking the Down Track Timing Error
This check is often needed 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 the 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
Comparison: Checking Trajectory Differences Over Time
In order to help with this check SPKDIFF should be run to produce either
the difference dump or the 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 the
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
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' \
mar063.bsp mar080.bsp
produces the following output:
#
# Comparison of 49 'J2000'-referenced geometric states
#
# of 'PHOBOS' (401) relative to 'MARS' (499)
# from SPK 'mar063.bsp'
#
# with 49 'J2000'-referenced geometric states
#
# of 'PHOBOS' (401) relative to 'MARS' (499)
# from SPK 'mar080.bsp'
#
# evenly-spaced with 1800.0000000000 second (0d 0h 30m 0.000000s) s
# within the time interval
#
# from '2006 MAY 10 00:01:05.185 TDB' (200491265.18535 TDB secon
# to '2006 MAY 11 00:01:05.185 TDB' (200577665.18533 TDB secon
#
# using additional data from these kernels
#
# 'naif0010.tls'
#
# 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
2453865.50075450 -1.7677349027774E+00 -3.9612553944752E-01 -8.19662
2453865.52158780 -1.7510452874102E+00 -2.3447359311290E-01 +5.14871
2453865.54242110 -1.8363070174400E+00 -3.2619989185819E-02 +1.71661
...
2453866.29242110 -2.9303145501717E+00 +4.4487716042933E-01 +1.12475
2453866.31325450 -2.9793146648918E+00 +3.0429412064303E-01 -1.74350
2453866.33408780 -2.9280026753345E+00 +1.1481152946733E-01 -1.45238
...
2453866.45908780 -1.7640987370183E+00 -3.8347618122648E-01 -7.25770
2453866.47992110 -1.7510926977361E+00 -2.1663590085367E-01 +5.79403
2453866.50075440 -1.8437324018375E+00 -1.2674806851279E-02 +1.79887
(To fit into the page width, all lines except for the last line of the
header -- ``time, down_track_p_diff, ...'' -- were truncated at 67th
position.)
The table above shows that differences in Phobos' position provided by
the SPK files are between -3 and -1.7 km down-track, between -0.6 and
0.6 km normal to the orbit plane, and between -0.3 and 0.3 km in the
orbit plane perpendicular to the down-track direction.
Top
Sampling: States from a Single SPK File
In the simplest case SPKDIFF can be run to sample states from an SPK
file by giving the name of that SPK file as the sole argument on the
command line. In this case the program will automatically pick the
default body, center, and frame; determine the coverage window; sample
1000 states; and print these states to the screen tagged with TDB
seconds past J2000.
While such default sampling may be useful in some situations, more
commonly users would want to specify the step size using the ``-s''
option to produce a more appropriate sampling for the type of trajectory
in question, use the ``-b1'' or ``-b2'' (but not both) option to tell
the program to generate states for a particular body rather than for the
body picked by default, and supply an LSK file with the ``-k'' option
and set the output time format picture with the ``-f'' option to
generate more human friendly output time tags.
As an example of a simple sampling, below SPKDIFF is run to generate a
table of states (no ``-t'' option because ``-t dump'' is the default for
sampling cases) of MRO relative to the Mars barycenter in the J2000
inertial reference frame, computed with 60 second step (``-s 60''), with
time tags printed as UTCs in ISO date format using options
-k naif0010.tls -f 'YYYY-MM-DDTHR:MN:SC.### ::RND'
from an MRO SPK file provided in the MRO SPICE archive
(``mro_psp20.bsp''), containing data only for the MRO spacecraft. Note
that in this run the program automatically picks the body, center,
frame, and coverage window from the specified SPK file.
SPKDIFF, run with the options mentioned above and the name of the SPK
file:
> spkdiff -k naif0010.tls \
-f 'YYYY-MM-DDTHR:MN:SC.### ::RND' \
-s 60 \
mro_psp20.bsp
produces the following output:
#
# Sampling of 132541 'J2000'-referenced geometric states
#
# of 'MARS RECON ORBITER' (-74) relative to 'MARS BARYCENTER' (4
# computed using
#
# naif0010.tls
# mro_psp20.bsp
#
# with a 60.000000000000 second (0:00:01:00.000000) step size
# within the continuous time period
#
# from '2011 JUL 01 00:01:06.184 TDB' (362750466.18413 TDB secon
# to '2011 OCT 01 01:01:06.182 TDB' (370702866.18235 TDB secon
#
# Times were generated by TIMOUT using 'YYYY-MM-DDTHR:MN:SC.### ::R
#
# time, x, y, z, vx, vy, vz
2011-07-01T00:00:00.000 -1.2631831919268E+03 -2.1050939423488E+03 -
2011-07-01T00:01:00.000 -1.2070458592754E+03 -2.2708451713874E+03 -
2011-07-01T00:02:00.000 -1.1470661740673E+03 -2.4293953426217E+03 -
...
2011-10-01T00:59:00.002 +2.4573775413008E+03 -2.6139786726625E+03 +
2011-10-01T01:00:00.000 +2.4222378126552E+03 -2.5767734595725E+03 +
(To fit into the page width, the lines were truncated at the 67th
position.)
Top
Sampling: States from Many SPKs Listed in Meta-Kernel(s)
One of the convenient SPKDIFF features is that the program can be used
to sample trajectory data provided in a set of SPK files listed along
with other kernels in a meta-kernel or a set of meta-kernels. In such
cases the program will not be able pick default body, center, and frame
because the meta-kernel(s) will need to be specified using the ``-k''
option and no SPKs will be provided at the end of the command line. The
user will need to specify the body, center, and frame for which states
are to be sampled using the ``-b1'', ``-c1'', and ``-r1'' options. The
user will not need to specify the coverage start and stop time because
the program will automatically determine default coverage for the given
body from all SPKs listed in the meta-kernel(s). The user might still
want to specify the step size using the ``-s'' option to produce a more
appropriate sampling for the type of the trajectory in question and set
the output time format picture with the ``-f'' option to generate more
human friendly output time tags.
As an example of sampling trajectory from meta-kernels, below SPKDIFF is
run to generate a table of states (no ``-t'' option because ``-t dump''
is the default for sampling cases) of Stardust (``-b1 SDU'') relative to
the Sun (``-c1 SUN'') in the Ecliptic of J2000 inertial reference frame
(``-r1 ECLIPJ2000''), computed with 86400 second (1 day) step (``-s
86400''), with time tags printed as UTCs in ISO DOY format
-f 'YYYY-DOYTHR:MN:SC.### ::RND'
using SPKs listed in the latest Stardust SPICE archive meta-kernel (``-k
sdu_v03.tm''). Note that an LSK file does not need to be explicitly
provided on the command line because the meta-kernel includes an LSK
file.
SPKDIFF, run with the options mentioned above:
> spkdiff -k sdu_v03.tm \
-f 'YYYY-DOYTHR:MN:SC.### ::RND' \
-b1 SDU \
-c1 SUN \
-r1 ECLIPJ2000 \
-s 86400
produces the following output:
#
# Sampling of 40968 'ECLIPJ2000'-referenced geometric states
#
# of 'SDU' (-29) relative to 'SUN' (10)
# computed using
#
# sdu_v03.tm
#
# with a 86400.000000000 second (1:00:00:00.000000) step size
# within the non-continuous (with 2 gaps) time period
#
# from '1999 FEB 07 21:32:10.699 TDB' (-28304869.300000 TDB seco
# to '2111 APR 07 00:00:00.000 TDB' (3511080000.0000 TDB secon
#
# Times were generated by TIMOUT using 'YYYY-DOYTHR:MN:SC.### ::RND
#
# time, x, y, z, vx, vy, vz
1999-038T21:31:06.515 -1.1081241906831E+08 +9.7436557730578E+07 -3.
1999-040T00:58:55.815 -1.1308778501370E+08 +9.4731491300541E+07 -8.
1999-040T00:58:55.816 -1.1308777975290E+08 +9.4731487534379E+07 -8.
...
2111-095T00:58:53.818 -3.9989092550623E+07 -2.1645212911162E+08 -1.
2111-096T00:58:53.818 -3.8191514897493E+07 -2.1733323167609E+08 -1.
2111-096T23:58:53.814 -3.6465563483695E+07 -2.1815901299532E+08 -1.
(To fit into the page width, the lines were truncated at the 67th
position.)
Top
Coverage: Coverage for a Single Body
Because of its ability to determine default coverage from the primary
SPK, in some cases SPKDIFF can be used instead of the SPK summary
utility BRIEF to display coverage summary for a given body from a given
SPK file. For that, the user should specify the ``-t dumpc'' option and
provide the name of the SPK file. The program will pick the default body
from the file using the rules described earlier in this User's Guide and
will display a coverage summary for this body. If a summary for a body
different from the default pick is desired, that body needs to be
specified using the ``-b1'' (or ``-b2'') option. For coverage boundary
times to be displayed in a format other that TDB seconds past J2000 the
user can supply an LSK file with the ``-k'' option and set the output
time format picture with the ``-f'' option.
As an example of a simple coverage report, below SPKDIFF is run to show
coverage (``-t dumpc'') for MRO with time tags printed as UTCs in the
ISO date format using options
-k naif0010.tls -f 'YYYY-MM-DDTHR:MN:SC.### ::RND'
provided by the MRO SPK file (``mro_psp20.bsp'') containing data only
for the MRO spacecraft. Note that in this run the program automatically
picks the body from the specified SPK file.
SPKDIFF, run with the options mentioned above and the name of the SPK
file:
> spkdiff -k naif0010.tls \
-f 'YYYY-MM-DDTHR:MN:SC.### ::RND' \
-t dumpc \
mro_psp20.bsp
produces the following output:
#
# Coverage for 'J2000'-referenced geometric states
#
# of 'MARS RECON ORBITER' (-74) relative to 'MARS BARYCENTER' (4)
# computed using
#
# ../lsk/naif0010.tls
# mro_psp20.bsp
#
# with a 7960.3603585812 second (0:02:12:40.360359) step size
# within the continuous time period
#
# from '2011 JUL 01 00:01:06.184 TDB' (362750466.18413 TDB secon
# to '2011 OCT 01 01:01:06.182 TDB' (370702866.18235 TDB secon
#
# Times were generated by TIMOUT using 'YYYY-MM-DDTHR:MN:SC.### ::R
#
# interval_start, interval_stop, interval_duration_sec, interval_du
2011-07-01T00:00:00.000 2011-10-01T01:00:00.000 7952399.998223
92:00:59:59.998223
(To fit into the page width, all lines but the last were truncated at
the 67th position; the last line was wrapped.)
As seen in the report, the MRO trajectory provided in this SPK covers
approximately 92 days and 1 hour.
Top
Coverage: Coverage Overlap for Two Bodies
The coverage report can also be used to see the intervals over which
comparison of two trajectories was performed or, in the more general
case, to see the overlap between coverages of two trajectories provided
in two SPKs given as primary kernels or two sets of SPKs given as
additional kernels.
In the example below SPKDIFF is run to show overlap in trajectory
coverage (``-t dumpc'') for MRO between two MRO SPKs (``mro_psp19.bsp''
and ``mro_psp20.bsp''), with time tags printed as UTCs in the ISO date
format using options
-k naif0010.tls -f 'YYYY-MM-DDTHR:MN:SC.### ::RND'
Note that in this run the program automatically picks the body and all
other defaults from the first SPK file.
SPKDIFF, run with the options mentioned above and the names of the SPK
files:
> spkdiff -k naif0010.tls \
-f 'YYYY-MM-DDTHR:MN:SC.### ::RND' \
-t dumpc \
mro_psp19.bsp \
mro_psp20.bsp
produces the following output:
#
# Coverage overlap for 'J2000'-referenced geometric states
#
# of 'MARS RECON ORBITER' (-74) relative to 'MARS BARYCENTER' (4
# computed using
#
# naif0010.tls
# mro_psp19.bsp
#
# and 'J2000'-referenced geometric states
#
# of 'MARS RECON ORBITER' (-74) relative to 'MARS BARYCENTER' (4
# computed using
#
# naif0010.tls
# mro_psp20.bsp
#
# with a 3.6036036024700 second (0:00:00:03.603604) step size
# within the continuous time period
#
# from '2011 JUL 01 00:01:06.184 TDB' (362750466.18413 TDB secon
# to '2011 JUL 01 01:01:06.184 TDB' (362754066.18412 TDB secon
#
# Times were generated by TIMOUT using 'YYYY-MM-DDTHR:MN:SC.### ::R
#
# interval_start, interval_stop, interval_duration_sec, interval_du
2011-07-01T00:00:00.000 2011-07-01T01:00:00.000 3599.999999
0:00:59:59.999999
(To fit into the page width, all lines but the last were truncated at
the 67th position; the last line was wrapped.)
As seen in the report, the overlap between MRO trajectories provided in
these SPKs is approximately 1 hour.
Top
Coverage: Gaps in Coverage
The gap report is useful in determining the presence and size of gaps in
coverage of a trajectory provided by a single SPK given as the sole
primary kernel or a set of SPKs given as additional kernels, or gaps in
the overlap between coverages of two trajectories provided in two SPKs
given as primary kernels or two sets of SPKs given as additional
kernels.
In the example below SPKDIFF is run to show gaps in trajectory coverage
(``-t dumpg'') of Stardust (``-b1 SDU'') relative to the Sun (``-c1
SUN'') in the Ecliptic of J2000 inertial reference frame (``-r1
ECLIPJ2000''), with time tags printed as UTCs in the ISO DOY format
-f 'YYYY-DOYTHR:MN:SC.### ::RND'
for all SPKs listed in the latest Stardust SPICE archive meta-kernel
(``-k sdu_v03.tm''). Note that an LSK file does not need to be
explicitly provided on the command line because the meta-kernel includes
an LSK file.
SPKDIFF, run with the mentioned above options and the names of the SPK
files:
> spkdiff -k sdu_v03.tm \
-f 'YYYY-DOYTHR:MN:SC.### ::RND' \
-b1 SDU \
-c1 SUN \
-r1 ECLIPJ2000 \
-t dumpg
produces the following output:
#
# Coverage for 'ECLIPJ2000'-referenced geometric states
#
# of 'SDU' (-29) relative to 'SUN' (10)
# computed using
#
# sdu_v03.tm
#
# with a 3550034.9742187 second (41:02:07:14.974219) step size
# within the non-continuous (with 2 gaps) time period
#
# from '1999 FEB 07 21:32:10.699 TDB' (-28304869.300000 TDB seco
# to '2111 APR 07 00:00:00.000 TDB' (3511080000.0000 TDB secon
#
# Times were generated by TIMOUT using 'YYYY-DOYTHR:MN:SC.### ::RND
#
# gap_start, gap_stop, gap_duration_sec, gap_duration_string
1999-040T00:58:55.815 1999-040T00:58:55.816 0.000982
0:00:00:00.000982
1999-121T00:58:55.815 1999-121T00:58:55.818 0.003000
0:00:00:00.003000
(To fit into the page width, all lines but the last two were truncated
at the 67th position; the last two lines were wrapped.)
As seen in the report, the SDU trajectory provided by the SPK files
listed in this meta-kernel has two very small gaps (~0.001 and ~0.003
seconds) close to the start of the coverage.
|