Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
ckgr05

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     CKGR05 ( C-kernel, get record, type 05 )

     SUBROUTINE CKGR05 ( HANDLE, DESCR, RECNO, RECORD )

Abstract

     Return a specified pointing instance from a CK type 05 segment.
     The segment is identified by a CK file handle and segment
     descriptor.

Required_Reading

     CK
     DAF

Keywords

     POINTING

Declarations

     IMPLICIT NONE

     INCLUDE 'ck05.inc'

     INTEGER               HANDLE
     DOUBLE PRECISION      DESCR   ( * )
     INTEGER               RECNO
     DOUBLE PRECISION      RECORD  ( * )

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     HANDLE     I   The handle of the file containing the segment.
     DESCR      I   The segment descriptor.
     RECNO      I   The number of the pointing instance to be returned.
     RECORD     O   The pointing record.

Detailed_Input

     HANDLE   is the handle of the binary CK file containing the
              desired segment.

     DESCR    is the packed descriptor of the data type 5 segment.

     RECNO    is the number of the discrete pointing instance to be
              returned from the data type 5 segment.

Detailed_Output

     RECORD   is the pointing instance indexed by RECNO in the
              segment. The contents are as follows:

                 RECORD( 1 ) = CLKOUT

              CLKOUT is the encoded spacecraft clock time associated
              with the returned pointing values.

                 RECORD( 2 ) = SUBTYP

              SUBTYP is the CK type 5 subtype code. This code
              identifies the structure and meaning of the rest
              of the record. However, all subtypes have a
              quaternion stored in elements 3-6.

                 RECORD( 3 ) = q0
                 RECORD( 4 ) = q1
                 RECORD( 5 ) = q2
                 RECORD( 6 ) = q3

              Subtype 1 ends here; there are no angular velocity
              data. Angular velocity is derived by differentiating
              Lagrange interpolating polynomials.

                 RECORD(  7 ) =  ]
                 RECORD(  8 ) =  ] --- For subtypes 0 and 2, these
                 RECORD(  9 ) =  ]     elements contain a quaternion
                 RECORD( 10 ) =  ]     derivative. For subtype 3,
                                       elements 7-9 contain an
                                       angular velocity vector;
                                       element 10 is unassigned.

                                       All subtypes except subtype
                                       2 stop here.

                 RECORD( 11 ) =  ]
                 RECORD( 12 ) =  ] --- For subtype 2, these
                 RECORD( 13 ) =  ]     elements contain an angular
                                       velocity vector.


                 RECORD( 14 ) =  ]
                 RECORD( 15 ) =  ] --- For subtype 2, these
                 RECORD( 16 ) =  ]     elements contain the
                                       derivative of an angular
                                       velocity vector.

              The quantities q0 - q3 are the components of the
              quaternion that represents the C-matrix that transforms
              vectors from the inertial reference frame of the
              segment to the instrument frame at time CLKOUT.

              Quaternion derivatives, angular velocity, or the
              derivative of angular velocity are returned only
              these are supported by the segment subtype and
              if the segment descriptor indicates that angular
              velocity is present.

              The components of the angular velocity vector are
              specified relative to the inertial reference frame of
              the segment.

Parameters

     None.

Exceptions

     1)  If the segment is not of data type 5, the error
         SPICE(CKWRONGDATATYPE) is signaled.

     2)  If RECNO is less than one or greater than the number of
         records in the specified segment, the error
         SPICE(CKNONEXISTREC) is signaled.

     3)  If the specified handle does not belong to any DAF file that
         is currently known to be open, an error is signaled by a
         routine in the call tree of this routine.

     4)  If DESCR is not a valid descriptor of a segment in the CK
         file specified by HANDLE, the results of this routine are
         unpredictable.

     5)  If the segment subtype is not recognized, the error
         SPICE(NOTSUPPORTED) is signaled.

Files

     The file specified by HANDLE should be open for read or
     write access.

Particulars

     For a detailed description of the structure of a type 5 segment,
     see the CK required reading.

     This is a utility routine that may be used to read the individual
     pointing instances that make up a type 5 segment. It is normally
     used in conjunction with CKNR05, which gives the number of
     pointing instances stored in a segment.

Examples

     Suppose that MOC.BC is a CK file that contains segments of
     data type 5. Then the following code fragment extracts the
     SCLK time and boresight vector for each pointing instance
     in the first segment in the file.


           INTEGER               ICD     ( 6 )
           INTEGER               HANDLE
           INTEGER               NREC
           INTEGER               I

           DOUBLE PRECISION      DCD     ( 2 )
           DOUBLE PRECISION      DESCR   ( 5 )
           DOUBLE PRECISION      RECORD  ( 16 )
           DOUBLE PRECISION      QUAT    ( 4 )
           DOUBLE PRECISION      BORE    ( 3 )
           DOUBLE PRECISION      CMAT    ( 3, 3 )
           DOUBLE PRECISION      SCLKDP

           LOGICAL               FOUND

     C
     C     First load the file. (The file may also be opened by using
     C     CKLPF.)
     C
           CALL DAFOPR ( 'MOC.BC', HANDLE )

     C
     C     Begin forward search. Find the first array.
     C
           CALL DAFBFS ( HANDLE )
           CALL DAFFNA ( FOUND  )

     C
     C     Get segment descriptor.
     C
           CALL DAFGS ( DESCR )

     C
     C     Unpack the segment descriptor into its double precision
     C     and integer components.
     C
           CALL DAFUS ( DESCR, 2, 6, DCD, ICD )

     C
     C     The data type for a segment is located in the third integer
     C     component of the descriptor.
     C
           IF ( ICD( 3 ) .EQ. 5 ) THEN
     C
     C        How many records does this segment contain?
     C
              CALL CKNR05 ( HANDLE, DESCR, NREC )

              DO I = 1, NREC
     C
     C           Get the Ith pointing instance in the segment.
     C
                 CALL CKGR05 ( HANDLE, DESCR, I, RECORD )

     C
     C           Unpack from RECORD the time tag and quaternion.
     C           The locations of these items in the record are
     C           independent of the subtype.
     C
                 SCLKDP = RECORD ( 1 )

                 CALL MOVED ( RECORD(3), 4, QUAT )

     C
     C           The boresight vector is the third row of the C-matrix.
     C
                 CALL Q2M ( QUAT, CMAT )

                 BORE(1) = CMAT(3,1)
                 BORE(2) = CMAT(3,2)
                 BORE(3) = CMAT(3,3)
     C
     C           Write out the results.
     C
                 WRITE (*,*) 'Record: ', I
                 WRITE (*,*)
                 WRITE (*,*) 'SCLK time = ', SCLKDP
                 WRITE (*,*)
                 WRITE (*,*) 'boresight: ', BORE

              END DO

           END IF

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     N.J. Bachman       (JPL)
     J. Diaz del Rio    (ODC Space)
     J.M. Lynch         (JPL)

Version

    SPICELIB Version 1.1.0, 26-OCT-2021 (JDR) (NJB)

        Edited the header to comply with NAIF standard.

        Bug fix: added FAILED tests after all DAFGDA calls but the
        last.

        Added explicit conversion to INTEGER for SUBTYP.

    SPICELIB Version 1.0.0, 27-AUG-2002 (NJB) (JML)
Fri Dec 31 18:36:02 2021