SPKCOV ( SPK coverage )
SUBROUTINE SPKCOV ( SPK, IDCODE, COVER )
Find the coverage window for a specified ephemeris object in a
specified SPK file.
CELLS
DAF
SPK
TIME
WINDOWS
EPHEMERIS
TIME
UTILITY
INTEGER LBCELL
PARAMETER ( LBCELL = -5 )
CHARACTER*(*) SPK
INTEGER IDCODE
DOUBLE PRECISION COVER ( LBCELL : * )
Variable I/O Description
-------- --- --------------------------------------------------
SPK I Name of SPK file.
IDCODE I ID code of ephemeris object.
COVER I/O Window giving coverage in SPK for IDCODE.
SPK is the name of an SPK file.
IDCODE is the integer ID code of an object for which
ephemeris data are expected to exist in the
specified SPK file.
COVER is an initialized SPICELIB window data structure.
COVER optionally may contain coverage data on
input; on output, the data already present in
COVER will be combined with coverage found for the
object designated by IDCODE in the file SPK.
If COVER contains no data on input, its size and
cardinality still must be initialized.
COVER is a SPICELIB window data structure which
represents the merged coverage for IDCODE. This is
the set of time intervals for which data for
IDCODE are present in the file SPK, merged with
the set of time intervals present in COVER on
input. The merged coverage is represented as the
union of one or more disjoint time intervals. The
window COVER contains the pairs of endpoints of
these intervals.
The interval endpoints contained in COVER are
ephemeris times, expressed as seconds past J2000
TDB.
See the Examples section below for a complete
example program showing how to retrieve the
endpoints from COVER.
None.
1) If the input file has transfer format, the error
SPICE(INVALIDFORMAT) is signaled.
2) If the input file is not a transfer file but has architecture
other than DAF, the the error SPICE(BADARCHTYPE) is signaled.
3) If the input file is a binary DAF file of type other than
SPK, the error SPICE(BADFILETYPE) is signaled.
4) If the SPK file cannot be opened or read, the error will
be diagnosed by routines called by this routine. The output
window will not be modified.
5) If the size of the output window argument COVER is
insufficient to contain the actual number of intervals in the
coverage window for IDCODE, the error will be diagnosed by
routines called by this routine.
This routine reads an SPK file.
This routine provides an API via which applications can determine
the coverage a specified SPK file provides for a specified
ephemeris object.
1) This example demonstrates combined usage of SPKCOV and the
related SPK utility SKOBJ.
Display the coverage for each object in a specified SPK file.
Find the set of objects in the file; for each object, find
and display the coverage.
PROGRAM IDCOV
IMPLICIT NONE
C
C SPICELIB functions
C
INTEGER CARDI
INTEGER WNCARD
C
C Local parameters
C
C
C Declare the coverage window. Make enough room
C for MAXIV intervals.
C
INTEGER FILSIZ
PARAMETER ( FILSIZ = 255 )
INTEGER LBCELL
PARAMETER ( LBCELL = -5 )
INTEGER MAXIV
PARAMETER ( MAXIV = 1000 )
INTEGER WINSIZ
PARAMETER ( WINSIZ = 2 * MAXIV )
INTEGER TIMLEN
PARAMETER ( TIMLEN = 50 )
INTEGER MAXOBJ
PARAMETER ( MAXOBJ = 1000 )
C
C Local variables
C
CHARACTER*(FILSIZ) LSK
CHARACTER*(FILSIZ) SPK
CHARACTER*(TIMLEN) TIMSTR
DOUBLE PRECISION B
DOUBLE PRECISION COVER ( LBCELL : WINSIZ )
DOUBLE PRECISION E
INTEGER I
INTEGER IDS ( LBCELL : MAXOBJ )
INTEGER J
INTEGER NIV
C
C Load a leapseconds kernel for output time conversion.
C SPKCOV itself does not require a leapseconds kernel.
C
CALL PROMPT ( 'Name of leapseconds kernel > ', LSK )
CALL FURNSH ( LSK )
C
C Get name of SPK file.
C
CALL PROMPT ( 'Name of SPK file > ', SPK )
C
C Initialize the set IDS.
C
CALL SSIZEI ( MAXOBJ, IDS )
C
C Initialize the window COVER.
C
CALL SSIZED ( WINSIZ, COVER )
C
C Find the set of objects in the SPK file.
C
CALL SPKOBJ ( SPK, IDS )
C
C We want to display the coverage for each object. Loop
C over the contents of the ID code set, find the coverage
C for each item in the set, and display the coverage.
C
DO I = 1, CARDI( IDS )
C
C Find the coverage window for the current
C object. Empty the coverage window each time
C so we don't include data for the previous object.
C
CALL SCARDD ( 0, COVER )
CALL SPKCOV ( SPK, IDS(I), COVER )
C
C Get the number of intervals in the coverage
C window.
C
NIV = WNCARD ( COVER )
C
C Display a simple banner.
C
WRITE (*,*) '========================================'
WRITE (*,*) 'Coverage for object ', IDS(I)
C
C Convert the coverage interval start and stop
C times to TDB calendar strings.
C
DO J = 1, NIV
C
C Get the endpoints of the Jth interval.
C
CALL WNFETD ( COVER, J, B, E )
C
C Convert the endpoints to TDB calendar
C format time strings and display them.
C
CALL TIMOUT ( B,
. 'YYYY MON DD HR:MN:SC.### ' //
. '(TDB) ::TDB',
. TIMSTR )
WRITE (*,*) ' '
WRITE (*,*) 'Interval: ', J
WRITE (*,*) 'Start: ', TIMSTR
CALL TIMOUT ( E,
. 'YYYY MON DD HR:MN:SC.### ' //
. '(TDB) ::TDB',
. TIMSTR )
WRITE (*,*) 'Stop: ', TIMSTR
WRITE (*,*) ' '
END DO
WRITE (*,*) '========================================'
END DO
END
2) Find the coverage for the object designated by IDCODE
provided by the set of SPK files loaded via a metakernel.
(The metakernel must also specify a leapseconds kernel.)
PROGRAM METCOV
IMPLICIT NONE
C
C SPICELIB functions
C
INTEGER WNCARD
C
C Local parameters
C
INTEGER LBCELL
PARAMETER ( LBCELL = -5 )
INTEGER FILSIZ
PARAMETER ( FILSIZ = 255 )
INTEGER LNSIZE
PARAMETER ( LNSIZE = 80 )
INTEGER MAXCOV
PARAMETER ( MAXCOV = 100000 )
INTEGER TIMLEN
PARAMETER ( TIMLEN = 50 )
C
C Local variables
C
CHARACTER*(FILSIZ) FILE
CHARACTER*(LNSIZE) IDCH
CHARACTER*(FILSIZ) META
CHARACTER*(FILSIZ) SOURCE
CHARACTER*(TIMLEN) TIMSTR
CHARACTER*(LNSIZE) TYPE
DOUBLE PRECISION B
DOUBLE PRECISION COVER ( LBCELL : 2*MAXCOV )
DOUBLE PRECISION E
INTEGER COUNT
INTEGER HANDLE
INTEGER I
INTEGER IDCODE
INTEGER NIV
LOGICAL FOUND
C
C Prompt for the metakernel name; load the metakernel.
C The metakernel lists the SPK files whose coverage
C for IDCODE we'd like to determine. The metakernel
C must also specify a leapseconds kernel.
C
CALL PROMPT ( 'Enter name of metakernel > ', META )
CALL FURNSH ( META )
C
C Get the ID code of interest.
C
CALL PROMPT ( 'Enter ID code > ', IDCH )
CALL PRSINT ( IDCH, IDCODE )
C
C Initialize the coverage window.
C
CALL SSIZED ( MAXCOV, COVER )
C
C Find out how many kernels are loaded. Loop over the
C kernels: for each loaded SPK file, add its coverage
C for IDCODE, if any, to the coverage window.
C
CALL KTOTAL ( 'SPK', COUNT )
DO I = 1, COUNT
CALL KDATA ( I, 'SPK', FILE, TYPE,
. SOURCE, HANDLE, FOUND )
CALL SPKCOV ( FILE, IDCODE, COVER )
END DO
C
C Display results.
C
C Get the number of intervals in the coverage
C window.
C
NIV = WNCARD ( COVER )
C
C Display a simple banner.
C
WRITE (*,*) ' '
WRITE (*,*) 'Coverage for object ', IDCODE
C
C Convert the coverage interval start and stop
C times to TDB calendar strings.
C
DO I = 1, NIV
C
C Get the endpoints of the Ith interval.
C
CALL WNFETD ( COVER, I, B, E )
C
C Convert the endpoints to TDB calendar
C format time strings and display them.
C
CALL TIMOUT ( B,
. 'YYYY MON DD HR:MN:SC.### ' //
. '(TDB) ::TDB',
. TIMSTR )
WRITE (*,*) ' '
WRITE (*,*) 'Interval: ', I
WRITE (*,*) 'Start: ', TIMSTR
CALL TIMOUT ( E,
. 'YYYY MON DD HR:MN:SC.### ' //
. '(TDB) ::TDB',
. TIMSTR )
WRITE (*,*) 'Stop: ', TIMSTR
WRITE (*,*) ' '
END DO
END
1) If an error occurs while this routine is updating the window
COVER, the window may be corrupted.
None.
N.J. Bachman (JPL)
SPICELIB Version 1.0.1, 30-NOV-2007 (NJB)
Corrected bug in first program in header Examples section:
program now empties the coverage window prior to collecting
data for the current object. Updated examples to use WNCARD
rather than CARDD.
SPICELIB Version 1.0.0, 30-DEC-2004 (NJB)
|