FUNCTION smei_cam_quaternion, hdr, camera ;+ ; NAME: ; smei_cam_quaternion ; PURPOSE: ; Get quaternion that rotates from ECI (=J2000) frame to UCSD ; camera frame for given Coriolis s/c quaternion and camera. ; CATEGORY: ; camera/idl/frm ; CALLING SEQUENCE: ; qcam = smei_cam_quaternion(hdr) ; qcam = smei_cam_quaternion(quaternion, camera) ; qcam = smei_cam_quaternion(uttime, camera) ; INPUTS: ; hdr array[n]; type: SMEI_FRM_HDR structure ; hdr.quaternion and hdr.camera are used ; to calculate the camera quaternion. ; array[n]; type: time structure ; UT time is used to get the quaternion ; assuming the Coriolis is in its ; nominal attitude. ; array[4] or array[4,n]; type: double ; Coriolis quaternion (as extracted from ; frame header). If 'hdr' is a quaternion ; then 'camera' needs to specified too. ; OPTIONAL INPUTS: ; camera scalar or array[n]; type: integer ; camera number (as extracted from frame header) ; OUTPUTS: ; qcam array[4] or array[4,n]; type: double ; camera quaternion (relative to same coord ; system as Coriolis quaternion) ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; smei_camera, CombineRotations, IsType, smei_property ; IsTime, smei_sgp4_quat ; SEE ALSO: ; smei_orient_test ; PROCEDURE: ; Camera quaternion rotates from J2000 equatorial coordinates to ; UCSD camera coordinates. ; MODIFICATION HISTORY: ; JUN-2003, Paul Hick (UCSD/CASS ; FEB-2008, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Added option to input time and retrieve the ; the nominal quaternion. ;- ; Rotates from ECI (=J2000) frame to HAFB spacecraft frame. CASE 1 OF IsTime(hdr ): quaternion = smei_sgp4_quat(hdr) IsType(hdr, /struct): BEGIN quaternion = smei_property(hdr,/quaternion) camera = smei_property(hdr,/camera) END ELSE: quaternion = hdr ENDCASE qcam = smei_camera(camera=camera, /get_quat) ; UCSD camera frame -> HAFB spacecraft frame qcam[0:2,*] = -qcam[0:2,*] ; HAFB spacecraft frame -> UCSD camera frame ; ECI (=J2000) -> UCSD camera frame qcam = CombineRotations(quaternion, qcam, /quaternion) RETURN, qcam & END