KPL/IK ORX OCAMS Instrument Kernel ============================================================================== This instrument kernel (I-kernel) contains references to the mounting alignment, internal and FOV geometry for the OSIRIS-REX Camera Suite (OCAMS) instruments. Version and Date ---------------------------------------------------------- Version 0.4 -- June 30, 2016 -- Brian Carcich, KinetX Starting with orex_ocams_v03.ti renamed to orx_ocams_v04.ti Added INX-6436x_SPOC_FITS_NAXIS* keywords. Version 0.3 -- August 24, 2014 -- Boris Semenov, NAIF Starting with orex_ocams_v02.ti renamed to orx_ocams_v03.ti Removed TEXT_KERNEL_ID, INS-64*_PLATFORM_ID keywords. Version 0.2 -- May 16, 2013 -- Boris Semenov, NAIF Touch-up updates: wrapped comments to 80 chars, adjusted indentation, spell-checked, replaced INS-82 with INS-64 in all keywords, moved name/ID mapping keywords to FK. Version 0.1 -- May 1, 2013 -- John Ivens, LPL/UofA Information provided by the OCAMS team - Ellyne Kinney-Spano, Bashar Rizk. Initial Prototype Release for Review. References ---------------------------------------------------------- 1. ``OCAMS Level 3 Requirements'' 2. OSIRIS-REX Spacecraft Frames Definition Kernel. 3. OSIRIS-REX Project Web Page describing the instruments. Contact Information ---------------------------------------------------------- Direct questions, comments or concerns about the contents of this kernel to: John Ivens, LPL/UofA, jivens@orex.lpl.arizona.edu Boris Semenov, NAIF/JPL, Boris.Semenov@jpl.nasa.gov Implementation Notes ---------------------------------------------------------- This file is used by the SPICE system as follows: programs that make use of this kernel must ``load'' the kernel, normally during program initialization. The SPICE routine FURNSH loads a kernel file into the pool as shown below. CALL FURNSH ( 'frame_kernel_name; ) -- FORTRAN furnsh_c ( "frame_kernel_name" ); -- C cspice_furnsh, frame_kernel_name -- IDL cspice_furnsh( 'frame_kernel_name' ) -- MATLAB Once the file has been loaded, the SPICE routine GETFOV (getfov_c in C, cspice_getfov in IDL and MATLAB) can be used to retrieve FOV parameters for a given instrument or structure. This file was created and may be updated with a text editor or word processor. Naming Conventions ---------------------------------------------------------- All names referencing values in this I-kernel start with the characters `INS' followed by the NAIF OSIRIS-REX spacecraft ID number (-64) followed by a NAIF three digit ID code for the OCAMS instruments. (POLYCAM = 360, MAPCAM = 361, SAMCAM = 362). The remainder of the name is an underscore character followed by the unique name of the data item. For example, the OCAMS POLYCAM boresight direction in the OCAMS POLYCAM optics frame (``ORX_OCAMS_POLYCAM'' -- see [2]) is specified by: INS-64360_BORESIGHT The upper bound on the length of the name of any data item is 32 characters. If the same item is included in more than one file, or if the same item appears more than once within a single file, the latest value supersedes any earlier values. OCAMS description ---------------------------------------------------------- From [3]: ``OSIRIS-REX Camera Suite (OCAMS) ..... OCAMS calibrations will be performed.'' OCAMS First Order Optical Parameters ---------------------------------------------------------- The first order optical parameters for the three cameras that constitute the OCAMS detectors: -- PolyCam Camera -- MapCam Camera -- SamCam Camera are compiled into the following table: ------------------------------ ----------- ----------- ----------- parameter POLYCAM MAPCAM SAMCAM ------------------------------ ----------- ----------- ----------- Effective Focal Length, mm 630.00 125.00 24.00 Estimated Uncertainty, mm 5.00 25.00 1.00 Spectral Range, nm 500-800 500-800 500-800 F/number 3.40 3.3 6.0 ------------------------------ ----------- ----------- ----------- All PolyCam numbers are quoted at infinity. At 200m Range we have: ------------------------------ ----------- ------------- parameter POLYCAM(inf) POLYCAM(200m) ------------------------------ ----------- ------------- Effective Focal Length, mm 630.00 611.00 Estimated Uncertainty, mm 5.00 5.00 Spectral Range, nm 500-800 500-800 F/number 3.40 3.3 ------------------------------ ----------- --------------- These values are given in the keywords below in the same units as the table above. PolyCam is focused at infinity: PolyCam (POLYCAM): \begindata INS-64360_FOCAL_LENGTH = ( 630.00 ) INS-64360_FL_UNCERTAINTY = ( 5.00 ) INS-64360_WAVELENGTH_RANGE = ( 500, 800 ) INS-64360_F/NUMBER = ( 3.40 ) \begintext MapCam (MAPCAM): \begindata INS-64361_FOCAL_LENGTH = ( 125.00 ) INS-64361_FL_UNCERTAINTY = ( 25.00 ) INS-64361_WAVELENGTH_RANGE = ( 500, 800 ) INS-64361_F/NUMBER = ( 3.30 ) \begintext SamCam (SAMCAM): \begindata INS-64362_FOCAL_LENGTH = ( 24.00 ) INS-64362_FL_UNCERTAINTY = ( 1.00 ) INS-64362_WAVELENGTH_RANGE = ( 500, 800 ) INS-64362_F/NUMBER = ( 6.00 ) \begintext OCAMS Field of View Parameters ---------------------------------------------------------- Note that in the below diagram, although the instruments appear to be co-boresighted, they are not. Refer to the ORX Frames Kernel for information on the alignments of the boresights with respect to the spacecraft frame. While PolyCam and MapCam are co-boresighted, SamCam is angled slightly towards the -Y in order to image the TAGSAM head. FOV Sizes (in degrees) Spacecraft Frame: Ysc ^ | | x-----> Zsc Xsc ^ | Ycm | \____________________________________________________ ___ | | | | | | | | | | \____________________________ ___ | | | | | | | | | | \______________ ____ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Xcm | | | x | 0.792| 3.99 | 20.80 --> | | | Zcm | | | | | | | | | POLYCAM | | | | | | | | |______________|__|_ | | | | | | |-----0.792----| | | | | | |____________________________| _|_ | | | MAPCAM | | Lines | |-----------3.99-------------| | | ^ | | | + |____________________________________________________| _|_ + SAMCAM + |----------------------20.80-------------------------| + (0,0) + + + > Samples The FOVs of the OCAMS detectors have the following angular sizes: ------------ ---------------- ---------------- Detector Horizontal Vertical ------------ ---------------- ---------------- POLYCAM 0.792 degrees 0.792 degrees MAPCAM 3.99 degrees 3.99 degrees SAMCAM 20.80 degrees 20.80 degrees ------------ ---------------- ---------------- The CCD geometry parameters are provided below: ------------------------------ ----------- ----------- ----------- parameter POLYCAM MAPCAM SAMCAM ------------------------------ ----------- ----------- ----------- Detector Array Size 1024x1024 1024x1024 1024x1024 Pixel Size, microns 8.5x8.5 8.5x8.5 8.5x8.5 FOV Angular Size, degrees 0.792x0.792 3.99x3.99 20.8x20.8 IFOV, microradian/pixel 13.476 67.979 354.199 ------------------------------ ----------- ----------- ----------- With the keywords and their values: PolyCam (POLYCAM): \begindata INS-64360_PIXEL_SAMPLES = ( 1024 ) INS-64360_PIXEL_LINES = ( 1024 ) INS-64360_PIXEL_SIZE = ( 8.5 ) INS-64360_CCD_CENTER = ( 511.5, 511.5 ) INS-64360_IFOV = ( 13.476 ) \begintext MapCam (MAPCAM): \begindata INS-64361_PIXEL_SAMPLES = ( 1024 ) INS-64361_PIXEL_LINES = ( 1024 ) INS-64361_PIXEL_SIZE = ( 8.5 ) INS-64361_CCD_CENTER = ( 511.5, 511.5 ) INS-64361_IFOV = ( 67.979 ) \begintext SamCam (SAMCAM): \begindata INS-64362_PIXEL_SAMPLES = ( 1024 ) INS-64362_PIXEL_LINES = ( 1024 ) INS-64362_PIXEL_SIZE = ( 8.5 ) INS-64362_CCD_CENTER = ( 511.5, 511.5 ) INS-64362_IFOV = ( 354.199 ) \begintext The keywords INS[ID]_FOV_FRAME, INS[ID]_FOV_SHAPE, INS[ID]_BORESIGHT, and FOV ANGLES specification keywords defined below are used to describe the instrument field of view. Since PolyCam, MapCam, and SamCam have square fields of view, the INS[ID]_FOV_SHAPE keyword will always be 'RECTANGLE', and GETFOV will return the four vectors in the instrument frame that describe the edges of the FOV cone. Both the PolyCam and MapCam boresights lie along the Z-axis. The SamCam boresight is angled slightly towards the -Y axis in order to image the TAGSAM head before the sample is stowed in the SRC. PolyCam (POLYCAM) FOV Definition Since the POLYCAM's angular separation is 0.792 degrees, looking up the Y-axis in the ORX_OCAMS_POLYCAM frame we have: (Note we are arbitrarily choosing vectors that terminate in the Z=1 plane.) ^ X | ins | | /| | / | | / | | / o | |/ 0.396 | o---------------> Y \ | Z ins \ | ins \ | \ | \| |-- 1.0 --| Plane Y = 0 Now from here we see that the Y components of the boundary corners are: Y Component = +/- 1.0 * tan ( 0.396 degrees ) = +/- 0.00691161 Since the field of view is square this holds for the X components as well. These FOV values as well as the values from the preceding table are given in the keywords below in the same units as listed above: PolyCam (POLYCAM): \begindata INS-64360_FOV_FRAME = 'ORX_OCAMS_POLYCAM' INS-64360_FOV_SHAPE = 'RECTANGLE' INS-64360_BORESIGHT = ( 0.0000000000000000 0.0000000000000000 +1.0000000000000000 ) INS-64360_FOV_CLASS_SPEC = 'ANGLES' INS-64360_FOV_REF_VECTOR = ( +1.0000000000000000 0.0000000000000000 0.0000000000000000 ) INS-64360_FOV_REF_ANGLE = ( 0.396 ) INS-64360_FOV_CROSS_ANGLE = ( 0.396 ) INS-64360_FOV_ANGLE_UNITS = 'DEGREES' \begintext MapCam (MAPCAM) FOV Definition Since MAPCAM is also a square field of view, similar calculations as to those made for POLYCAM hold. The half angle of interest is 1.995 degrees as opposed to 0.396. Looking up the Y-axis in the ORX_OCAMS_MAPCAM frame we have: (Note we are arbitrarily choosing vectors that terminate in the Z=1 plane.) ^ X | ins | | /| | / | | / | | / o | |/ 1.995 | o---------------> Y \ | Z ins \ | ins \ | \ | \| |-- 1.0 --| Plane Y = 0 Now from here we see that the X components of the boundary corners are: X Component = +/- 1.0 * tan ( 1.995 degrees ) = +/- 0.034833969 Again since the field of view is square this computation holds for the Y components as well. All of these values are collected in the FOV keywords defined below. Utilizing the ANGLES FOV specification: MapCam (MAPCAM): \begindata INS-64361_FOV_FRAME = 'ORX_OCAMS_MAPCAM' INS-64361_FOV_SHAPE = 'RECTANGLE' INS-64361_BORESIGHT = ( 0.0000000000000000 0.0000000000000000 +1.0000000000000000 ) INS-64361_FOV_CLASS_SPEC = 'ANGLES' INS-64361_FOV_REF_VECTOR = ( +1.0000000000000000 0.0000000000000000 0.0000000000000000 ) INS-64361_FOV_REF_ANGLE = ( 1.995 ) INS-64361_FOV_CROSS_ANGLE = ( 1.995 ) INS-64361_FOV_ANGLE_UNITS = 'DEGREES' \begintext SamCam (SAMCAM) FOV Definition Since SAMCAM is also a square field of view, similar calculations as to those made for POLYCAM hold. The half angle of interest is 10.40 degrees as opposed to 0.396. Looking up the Y-axis in the ORX_OCAMS_SAMCAM frame we have: (Note we are arbitrarily choosing vectors that terminate in the Z=1 plane.) ^ X | ins | | /| | / | | / | | / o | |/ 10.40 | o---------------> Y \ | Z ins \ | ins \ | \ | \| |-- 1.0 --| Plane Y = 0 Now from here we see that the X components of the boundary corners are: X Component = +/- 1.0 * tan ( 10.40 degrees ) = +/- 0.18353434 Again since the field of view is square this computation holds for the Y components as well. All of these values are collected in the FOV keywords defined below. Utilizing the ANGLES FOV specification: SamCam (SAMCAM): \begindata INS-64362_FOV_FRAME = 'ORX_OCAMS_SAMCAM' INS-64362_FOV_SHAPE = 'RECTANGLE' INS-64362_BORESIGHT = ( 0.0000000000000000 0.0000000000000000 +1.0000000000000000 ) INS-64362_FOV_CLASS_SPEC = 'ANGLES' INS-64362_FOV_REF_VECTOR = ( +1.0000000000000000 0.0000000000000000 0.0000000000000000 ) INS-64362_FOV_REF_ANGLE = ( 10.40 ) INS-64362_FOV_CROSS_ANGLE = ( 10.40 ) INS-64362_FOV_ANGLE_UNITS = 'DEGREES' \begintext Pixel Parameters ---------------------------------------------------------- These parameters describe the pixel structure associated with the instruments and their fields of views. In some cases this is a generalization of the notion of pixel, in that instead of representing pixels on a CCD they may represent a collection of individual detectors. The FOV_CENTER_PIXEL keyword is precisely the same as the CCD_CENTER defined in the CCD geometry keywords above. PolyCam (POLYCAM) \begindata INS-64360_FOV_CENTER_PIXEL = ( 511.5, 511.5 ) \begintext MapCam (MAPCAM) \begindata INS-64361_FOV_CENTER_PIXEL = ( 511.5, 511.5 ) \begintext SamCam (SAMCAM) \begindata INS-64362_FOV_CENTER_PIXEL = ( 511.5, 511.5 ) \begintext Vectors dInstrumentFrame/dNAXIS1 and dInstrumentFrame/NAXIS2 for FITS ---------------------------------------------------------- These Kernel Pool Variables (KPVs) compose the unit vectors in the directions dInstrumentFrame/dNAXIS1 and dInstrumentFrame/dNAXIS2. These KPVs are used by the SPOC SpatialGen code to calculate values for keywords in in OCAMS FITS headers, most notably the WCS keywords CD1_1, CD1_2, CD2_1, CD2_2. The InstrumentFrame names are defined in the KPVs INS-6436x_FOV_FRAME above. The values in this IK are based on the OCAMS frames defined in FK orx_v04.tf, which defines the OCAMS instrument frames as nominally aligned with the spacecraft frame (ORX_SPACECRAFT): they are identical to the spacecraft frame for PolyCam and MapCam; they are slightly rotated (-9.4 degrees) around +X for SamCam. N.B. Some observations are apropo this version (v04) of the OCAMS IK 1) Theses definitions are wholly dependent on the convention used by SPOC to decommutate the telemetered packets and write pixel data to FITS files. 1.1) This is complicated by the left-tap and right-tap hardware on the OCAMS detectors which make the pixel measurements, and the firmware that drives the taps. 1.1.1) At the time this is being written (2016-06-30), the SPOC code converts all modes of left- and right-tap operation to a left-tap-only convention for Level 0 data i.e. as if the columns in each row were read in the order of increasing distance from the left tap. 1.2) The SPOC code writes Level 0 (L0) OCAMS FITS files such that the pixel position along the FITS NAXIS1 direction increases with increasing column distance from the left tap, and that pixel position along the FITS NAXIS2 direction increases with increasing row distance from the taps. 1.3) We currently assume that the higher-level (L1, L2, etc.) OCAMS FITS files use the same convention. 2) The description of the OCAMS instrument frames in the *COMMENTS* of FK orx_v04.tf is currently *INCONSISTENT* with the definitions, in the *KPVs* of that FK, of those frames for PolyCam and MapCam, which state that +X and +Y in those instrument frames are parallel to the CCD lines and columns, respectively. 2.1) If the OCAMS Kernel Pool Variables in the FK are updated, then these KPVs may also need to be updated. 3) Because the boresights for all OCAMS instruments are +Z, the cross product of dInstrumentFrame/dNAXIS1 (INS-6436x_SPOC_FITS_NAXIS1) with the boresight does *NOT* result in dInstrumentFrame/dNAXIS2 (INS-6436x_SPOC_FITS_NAXIS2). The implication is that display of FITS images using the left-to-right (NAXIS1) and bottom-to-top (NAXIS2) convention will yield an left-right inverted image of what the actual imaged scene looked like. PolyCam (POLYCAM) \begindata INS-64360_SPOC_FITS_NAXIS1 = ( 0.0, -1.0, 0.0 ) INS-64360_SPOC_FITS_NAXIS2 = ( 1.0, 0.0, 0.0 ) \begintext MapCam (MAPCAM) \begindata INS-64361_SPOC_FITS_NAXIS1 = ( 0.0, -1.0, 0.0 ) INS-64361_SPOC_FITS_NAXIS2 = ( 1.0, 0.0, 0.0 ) \begintext SamCam (SAMCAM) \begindata INS-64362_SPOC_FITS_NAXIS1 = ( 1.0, 0.0, 0.0 ) INS-64362_SPOC_FITS_NAXIS2 = ( 0.0, 1.0, 0.0 ) \begintext End of IK file.