ckgr05 |
Table of contents
ProcedureCKGR05 ( C-kernel, get record, type 05 ) SUBROUTINE CKGR05 ( HANDLE, DESCR, RECNO, RECORD ) AbstractReturn a specified pointing instance from a CK type 05 segment. The segment is identified by a CK file handle and segment descriptor. Required_ReadingCK DAF KeywordsPOINTING DeclarationsIMPLICIT NONE INCLUDE 'ck05.inc' INTEGER HANDLE DOUBLE PRECISION DESCR ( * ) INTEGER RECNO DOUBLE PRECISION RECORD ( * ) Brief_I/OVARIABLE 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_InputHANDLE 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_OutputRECORD 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. ParametersNone. Exceptions1) 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. FilesThe file specified by HANDLE should be open for read or write access. ParticularsFor 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. ExamplesSuppose 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 RestrictionsNone. Literature_ReferencesNone. Author_and_InstitutionN.J. Bachman (JPL) J. Diaz del Rio (ODC Space) J.M. Lynch (JPL) VersionSPICELIB 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