PDS_VERSION_ID = PDS3 RECORD_TYPE = STREAM RELEASE_ID = 0001 REVISION_ID = 0000 DATA_SET_ID = "MEX-M-ASPERA3-4-DDR-IMA-EXT5-V1.0" PRODUCT_ID = "ASPERA3_SENSOR_GEOMETRY" PRODUCT_CREATION_TIME = 2005-01-27T14:43:37 OBJECT = TEXT PUBLICATION_DATE = 2005-01-31 NOTE = "ASPERA-3 Sensor Frames and Geometry Information. This is a very detailed document and very complex for the novice user. Please start by looking at the ASPERA-3 Sensor Numbering and Frames document (ASPERA3_SENSOR_FRAMES.PDF) found in the DOCUMENT directory. Next, look at the bottom portion of this document for a code example (in both C and FORTRAN). This example shows how to use the SPICE kernels and software functions to retrieve the ASPERA-3 view directions for each sensor sector. The text was taken from the SPICE Mars Express Frames kernel (FK) and the ASPERA-3 Instrument kernel (IK), both of which were produced by NAIF." END_OBJECT = TEXT END ASPERA-3 Sensor Frames and Geometry Information This is the ASPERA-3 information from the Mars Express SPICE Frames kernel: ASPERA Frames ======================================================================== This section of the file contains the definitions of the ASPERA instrument frames. ASPERA Frame Tree -------------------------------------- The diagram below shows the ASPERA frame hierarchy. "J2000" INERTIAL +-----------------------------------------------------+ | | | |<-pck | |<-pck | | | V | V "IAU_MARS" | "IAU_EARTH" MARS BODY-FIXED |<-ck EARTH BODY-FIXED --------------- | ---------------- V "MEX_SPACECRAFT" +-----------------------------------+ | | |<-fixed |<-fixed | | V V "MEX_ASPERA_URF" "MEX_ASPERA_IMA_URF" ---------------- -------------------- | | | |<-fixed | | | V | "MEX_ASPERA_IMA" | ---------------- | | | |<-fixed | | | V | "MEX_ASPERA_IMAS" | ----------------- | | | | "MEX_ASPERA_SS1" "MEX_ASPERA_SS2" | ---------------- ---------------- | | | |<-ck |<-fixed |<-fixed | | | V | | "MEX_ASPERA_SAF" | | -----------------------------------------------------------------+ | | | | |<-fixed |<-fixed |<-fixed fixed->| | | | | V V V V "MEX_ASPERA_ELS" "MEX_ASPERA_NPI" "MEX_ASPERA_NPD1" "MEX_ASPERA_NPD2" ---------------- ---------------- ----------------- ----------------- ASPERA Main Unit URF and SAF Frames -------------------------------------- The ASPERA main unit base is rigidly mounted on the s/c science deck. Therefore, the frame associated with it -- the ASPERA main unit reference frame, MEX_ASPERA_URF, -- is a fixed offset frame with its orientation given relative to the MEX_SPACECRAFT frame. The MEX_ASPERA_URF frame is defined as follows: - +Z axis is along the scanner rotation axis and points from the main unit mounting plate toward the scanner (nominally this axis is co-aligned with the s/c +Z axis); - +X axis is parallel to the longer side of the main unit base and points from the NPD side towards the ELS side for scanner in "90 degrees" position (nominally this axis is co-aligned with the s/c -Y axis); - +Y completes the right handed frame; - the origin of the frame is located at the intersection of the mounting surface of the main unit base and the axis of the mounting screw hole located at NPD2 side for scanner in "90 degrees" position. Nominally this frame is rotated by -90 degrees about Z axis from the s/c frame. Since ASPERA main unit scanner rotates with respect to its base with 0..180 angle range clockwise about Z axis of the MEX_ASPERA_URF frame, the frame associated with it -- the sensor assembly frame, MEX_ASPERA_SAF, -- is defined as a CK frame with its orientation provided in a CK file relative to the MEX_ASPERA_URF frame. The MEX_ASPERA_SAF frame is defined as follows: - +Z axis is along the scanner rotation axis and points from the main unit mounting plate toward the scanner; this axis is co-aligned with the +Z axis of the MEX_ASPERA_URF frame; - +X axis is along the ASPERA sensor assembly central axis and points from the NPD sensor towards the ELS sensor; this axis is co-aligned with the +X axis of the MEX_ASPERA_URF frame when scanner is in "90 degrees" position. - +Y axis completes the right handed frame; - the origin of the MEX_ASPERA_SAF frame is located at the intersection of the scanner rotation axis and the bottom (mounting) surface of the scanner base. This diagram illustrates the MEX_ASPERA_URF and MEX_ASPERA_SAF frames for the scanner angle of 135 degrees: +Z s/c side view: ----------------- "180 deg" position "135 deg" | position `. . ` | HGA +Xsaf ^. ___________ "90 deg" `. \ / position _________ `.__`._____.'__ _________________ -.- \ o +Zsaf | / | | +Xurf <---.'--o +Zurf | / | | .' | | | | | | V|o=| | o-------> +Ysc | | +Ysaf | | | | +Zsc | . | | / | V | | \ | ._________________/ +Yurf |______. \_________________. -Y Solar Array V +Y Solar Array +Xsc | . | "0 deg" +Zsc, +Zsaf and +Zurf position axes are out of the page In general the MEX_ASPERA_SAF frame is rotated with respect to the MEX_ASPERA_URF frame by ( 90- ) degrees about +Z axis for scanner in position. This rotation as a function of time is provided in the ASPERA scanner CK files. Thus, in "0 degrees" scanner position the SAF frame is co-aligned with the s/c frame; in "90 degrees" scanner position the SAF frame is co-aligned with the URF frame: "0 deg" position: "90 deg" position ----------------- ----------------- o-------> +Ysaf +Xsaf <-------o <-----|-o <-----|-o +Xurf | | +Xurf | | | | o-------> +Ysc | | o--------> +Ysc +Xsaf V | | +Ysaf V | | V | V | +Yurf | +Yurf | V V +Xsc +Xsc ASPERA Main Unit Sensor Frames -------------------------------------- Because ASPERA main unit sensors are rigidly mounted on the scanner, their corresponding frames -- MEX_ASPERA_ELS, MEX_ASPERA_NPI, MEX_ASPERA_NPD1, and MEX_ASPERA_NPD2 -- are defined as fixed-offset frames with respect to the MEX_ASPERA_SAF frame. ELS and NPI sensor frames are defined such that their axes are co-aligned with the axes of the MEX_ASPERA_SAF frame and their origins are at the sensors' "focal points", located at the intersection of the sensor's aperture plane and the sensor's symmetry axis. NPD1 and NPD2 sensor frames are defined such that their +Y and +Z axes are in the sensor's aperture plane, with the +Z axis along the central axis of the aperture (view direction of the middle sector), and +X axis is perpendicular to the aperture plane and points in direction of the SAF frame +X axis. The origins of these frames are at the sensor "focal points", which are located in the sensor's aperture plane at the point here the sensor sector view directions intersect. In all cases the "focal point" of a particular sensor is the point from which all sensor view direction are emanating. This diagram illustrates the ELS, NPI, NPD1, and NPD2 sensor frames orientation w.r.t to the SAF, URF and spacecraft frames (for scanner at 90 degrees position: +Xels .--- ^ ---. ELS | | | +Yels |<---o | - - - - - - - - - - - - - - | | ELS aperture +Xnpi ^ -----. NPI plane +Xss2 ^ | | +Ynpi <---o | - - - - - - - - - - - - - ----------- +Yss2 <---o o---> +Yss1 -. NPI aperture / .--------------|----------. | plane | | +Xsaf^ V +Xss1 | | \ | | | | / | +Ysaf <---o +Xnpd1 | | YZ of "npd1" frame | | ^ +Znpd1 are in the aperture \ | .-\--.^.| plane / +Xnpd2 +Ynpd1 <--o' || +Xnpd1 is into the page | ^ `------'| +Ynpd1 and +Znpd1 are \ .---\---. NPD1 | | out of the page / +Ynpd2 <---o | | | | `--.'---' NPD2 Scanner | | YZ of "npd2" frame \ +Znpd2 <'________________________. | are in the aperture / | | | plane | |^ +Xurf | | \ || Base | | +Ynpd1 is into the page \ +Yurf <---o____________________. | +Xnpd1 and +Znpd1 are \ | out of the page +Xsc \____ Nadir deck | <---o \____________ | | \__________________| +Z axes of all frames V +Ysc are out of the page The NPD1 aperture plane is tilted by 15 degrees towards +X axis of the SAF frame about +Y/+Z line of the SAF frame. Thus, to align the SAF frame with the NPD1 frame the SAF frame has to be rotated by +45 degrees about X axis and then by +15 degrees about new position of Y axis. The NPD2 aperture plane is tilted by 15 degrees towards -X axis of the SAF frame about -Y/+Z line of the SAF frame. Thus, to align the SAF frame with the NPD2 frame the SAF frame has to be rotated by -45 degrees about X axis and then by -15 degrees about new position of Y axis. Since the SPICE frames subsystem calls for specifying the reverse transformation--going from the instrument or structure frame to the base frame--as compared to the description given above, the order of rotations assigned to the TKFRAME_*_AXES keyword is also reversed compared to the above text, and the signs associated with the rotation angles assigned to the TKFRAME_*_ANGLES keyword are the opposite from what is written in the above text. The ASPERA Solar Sensor 1 frame, MEX_ASPERA_SS1, is defined as follows: - +X axis is co-aligned with +X axis of the MEX_ASPERA_SAF frame; - +Z axis is 15 degrees off +Z axis of the MEX_ASPERA_SAF frame towards -Y axis of MEX_ASPERA_SAF frame; - +Y completes the right handed frame and is along the sensor boresight direction; - the origin of the frame is located at the sensor's FOV focal point. The ASPERA Solar Sensor 2 frame, MEX_ASPERA_SS2, is defined as follows: - +X axis is co-aligned with -X axis of the MEX_ASPERA_SAF frame; - +Z axis is 15 degrees off +Z axis of the MEX_ASPERA_SAF frame towards +Y axis of MEX_ASPERA_SAF frame; - +Y completes the right handed frame and is along the sensor boresight direction; - the origin of the frame is located at the sensor's FOV focal point. This diagram illustrates the MEX_ASPERA_SS1 and MEX_ASPERA_SS2 frames: ^ +Zsaf | +Zss1 ^ | ^ +Zss2 ..\.|./.. .' \|/ `. +Yss2 <-. .' | `. .-> +Yss1 `-. /|\ .-' . `-. / | \ .-' . . +Xss2`x | o'+Xss1 . . o--------------> +Ysaf . +Xsaf . . . . . . . `. .' ` ......... ' Both frames are defined as fixed offset frames with respect to the MEX_ASPERA_SAF frame. To align the SAF frame with the SS1 frame the SAF frame has to be rotated by +15 degrees about X axis. To align the SAF frame with the SS2 frame the SAF frame has to be rotated by 180 degrees about Z axis and then by +15 degrees about new position of X axis. Since the SPICE frames subsystem calls for specifying the reverse transformation--going from the instrument or structure frame to the base frame--as compared to the description given above, the order of rotations assigned to the TKFRAME_*_AXES keyword is also reversed compared to the above text, and the signs associated with the rotation angles assigned to the TKFRAME_*_ANGLES keyword are the opposite from what is written in the above text. ASPERA Ion Mass Analyzer Unit Frames -------------------------------------- The ASPERA IMA unit is rigidly mounted in the -X/-Y quadrant of the on the s/c -Z ("main engine") deck and has no moving parts. Therefore, the three ASPERA IMA frames -- IMA Unit Reference Frame (MEX_ASPERA_IMA_URF), IMA sensor frame (MEX_ASPERA_IMA), and IMA sensor head frame (MEX_ASPERA_IMAS) -- are defined as fixed offset frames. The MEX_ASPERA_IMA_URF frame is defined as follows: - +Z axis is normal to the UMA unit mounting plate and points from the the mounting plate toward the sensor (nominally this axis is co-aligned with the s/c -Z axis); - +X axis is parallel to the longer side of the IMA unit base and sensor symmetry axis and points towards the sensors aperture side (nominally this axis is co-aligned with the s/c -Y axis); - +Y completes the right handed frame; - the origin of the frame is located at the intersection of the mounting surface of the IMA unit base and the axis of the mounting screw hole located far right from the sensor aperture (as seen on the top view with the sensor aperture at the bottom on the page) The MEX_ASPERA_IMA frame is defined such that its axes are co-aligned with the axes of the MEX_ASPERA_IMA_URF frame and its origin is at the sensor's "focal point", located at the intersection of the sensor's aperture symmetry plane and the sensor's symmetry axis. The MEX_ASPERA_IMAS frame is defined such that its axes are aligned with the axes of the MEX_ASPERA_IMA frame as follows: - +Z-imas points along the +X-ima axis - +X-imas axis points along the +Y-ima axis - +Y-imas axis points along the +Z-ima axis The origin of the MEX_ASPERA_IMAS is also at the sensor's "focal point". These diagrams illustrate the MEX_ASPERA_IMA_URF, MEX_ASPERA_IMA, and MEX_ASPERA_IMAS frames: -Z s/c side view ("main engine" side): -------------------------------------- +Xsc -Y Solar Array ^ +Y Solar Array ._________________ .______|______. .________________. | \ | | | / | | \ | | | / | | | | |+Zsc | | | | +Zimas |+Yimas x------->o| | | +Xima |+Zima +Ysc . | | <----o +Zimau | \ | ._________________/ <----o__________. \_________________. +Ximau | |' `. V /|________\ +Ximas V HGA +Yima +Yimau +Zsc is into the page +Zima, +Zimau, and +Yimas are out of the page -Z s/c side view ("main engine" side) -- zoom in: ------------------------------------------------- -- ^ +Xsc | \ | | \__ | | \_________ | | \ | | \ x-------> IMA |._____________. \ +Zsc +Ysc Aperture || o o | \ .___________________. | \____ +Zimas | | +Yimas | | \ +Xima | | +Zima | | \ <-------o | | | \ | | | | | | IMA | | | | | | | Mounting \ .___|_______________. | plate | | || o <-------o | | +Ximas V |. +Ximau ___|_. / +Yima | | | "Main Engine" .____________|_______________/ Deck | +Yimau V As seen in the diagram two rotations are needed to align the s/c frame (MEX_SPACECRAFT) with the IMA URF frame (MEX_ASPERA_IMA_URF) -- first rotation is by 180 degrees about Y axis, and then by -90 degrees about new position of Z axis. No rotations are needed to align the IMA URF frame (MEX_ASPERA_IMA_URF) with the IMA sensor frame (MEX_ASPERA_IMA). Two rotations -- first by +90 degrees about X axis and then by +90 degrees about Y axis -- are needed to align the IMA sensor frame (MEX_ASPERA_IMA) with the IMA sensor head frame (MEX_ASPERA_IMAS). Since the SPICE frames subsystem calls for specifying the reverse transformation--going from the instrument or structure frame to the base frame--as compared to the description given above, the order of rotations assigned to the TKFRAME_*_AXES keyword is also reversed compared to the above text, and the signs associated with the rotation angles assigned to the TKFRAME_*_ANGLES keyword are the opposite from what is written in the above text. This information is from the Mars Express ASPERA SPICE Instrument Kernel. =========================================================================== This instrument kernel (I-kernel) contains Mars Express ASPERA sensor geometry parameters. References --------------------------------------------------------------------------- 1. ``Kernel Pool Required Reading'', NAIF SPICE document. 2. ``C-kernel Required Reading'', NAIF SPICE document. 3. ``ASPERA-3'' ME-ASP-DS-0002, Draft Rev. 1, 23 April, 1999 *** Archived Doc: ME_ASP_DS_0002.PDF *** 4. Mars Express Frames Definition Kernel (FK), latest version. *** ASPERA-3 frames information included in this document above. *** 5. ASPERA Sensor Numbering, by Stas Barabash, Latest Version, Nov 2003 *** Archived Doc: ASPERA3_SENSOR_FRAMES.PDF *** 6. E-mail from Rudy Frahm, SwRI; September 8, 2004. Conventions for Specifying Data -------------------------------------------------------- Data items are specified using ``keyword=value'' assignments [1]. All keywords referencing values in this I-kernel start with the characters `INS' followed by the NAIF MEX instrument ID code, constructed using the spacecraft ID number (-41) followed by the NAIF three digit ID number for one of its sensors -- Electron Spectrometer, ELS (120), Neutral Particle Imager, NPI (130), Neutral Particle Detector 1, NPD1 (141), Neutral Particle Detector 2, NPD2 (142), Ion Mass Analyser, IMA (151), Ion Mass Analyser Sensor Head, IMAS (152), Solar Sensor 1, SS1 (161), or Solar Sensor 2, SS2 (162.) These IDs are defined in [4] as follows: Instrument name ID -------------------- ------ MEX_ASPERA -41100 MEX_ASPERA_ELS -41120 MEX_ASPERA_NPI -41130 MEX_ASPERA_NPD1 -41141 MEX_ASPERA_NPD2 -41142 MEX_ASPERA_IMA -41151 MEX_ASPERA_IMAS -41152 MEX_ASPERA_SS1 -41161 MEX_ASPERA_SS2 -41162 The remainder of the keyword is an underscore character followed by the unique name of the data item. For example, the number of sectors in the NPI aperture is specified by INS-41130_NUMBER_OF_SECTORS The upper bound on the length of all keywords is 32 characters. If a keyword is included in more then one file, or if the same keyword appears more than once within a single file, the last assignment supersedes any earlier assignments. Overview -------------------------------------------------------- From "ASPERA-3: Analyser of Space Plasmas and Energetic Ions for Mars Express", Barabash, S., et al, ESA Publication, August 2004: Abstract. The general scientific objective of the ASPERA-3 experiment is to study the solar wind-atmosphere interaction and characterize the plasma and neutral gas environment in the near-Mars space through energetic neutral atom (ENA) imaging and local charged particle measurements. The studies performed address the fundamental question: How strongly do the interplanetary plasma and electromagnetic fields affect the Martian atmosphere? This question is directly related to the problem of Martian dehydration. The ASPERA-3 instrument comprises four sensors; two ENA sensors, electron and ion spectrometers. The Neutral Particle Imager (NPI) provides measurements of the integral ENA flux (0.1 - 60 keV) with no mass and energy resolution but high angular resolution. The Neutral Particle Detector (NPD) provides measurements of the ENA flux, resolving velocity (0.1 - 10 keV) and mass (H and O) with a coarse angular resolution. The electron spectrometer (ELS) is a standard top-hat electrostatic analyzer in a very compact design. These three sensors are located on a scanning platform providing a 4pi coverage (maximum possible). The instrument also contains an ion mass composition sensor, IMA (Ion Mass Analyzer). Mechanically, IMA is a separate unit connected by a cable to the ASPERA-3 main unit. IMA provides ion measurements in the energy range 0.01 - 40 keV/q for the main ion components H+, H2+, He+, O+, with 20-80 amu/q. Mounting Alignment -------------------------------------------------------- Refer to the latest version of the Mars Express Frames Definition Kernel (FK) [4] for the ASPERA reference frame definitions and mounting alignment information. *** ASPERA-3 frames information included in this document above. *** Scanner Characteristics -------------------------------------------------------- The following essential parameters of the ASPERA main unit scanner are taken from [3]: ----------------------------- ----------- ------- Parameter name Value Unit ----------------------------- ----------- ------- maximum angle of rotation +/-100.00 deg angular position resolution 0.05 deg operational rotation rate 1.0/3.0/6.0 deg/sec maximum rotation rate 25.0 deg/sec ----------------------------- ----------- ------- Sensor Layout -------------------------------------------------------- This section contains assignments specifying the sensor layout by defining individual sector view directions for each of the ASPERA sensors -- ELS, NPI, NPD1, NPD2, IMA, SS1, and SS2. The combined aperture of each of the sensors is broken down into a number of equally or unequally spaced sectors to achieve the necessary spatial resolution within the sensor's sensor plane and in the direction normal to it (applicable for IMA only, since for the other sensors the cross-plane spatial resolution is achieved by scanning.) This table summarizes the individual sensor sector layout (based on [5]): --------- --------------------- --------------------- Sensor Number of Sectors Sector size, deg Name in-plane cross-plane in-plane cross-plane --------- -------- ----------- -------- ----------- ELS 16 1 22.5 4.0 NPI 32 1 11.25 9.0 NPD1 3 1 30.0 9.0 NPD2 3 1 30.0 9.0 IMA 16 16 22.5 5.625 SS1 1 1 90.0 2.0 SS2 1 1 90.0 2.0 --------- --------------------- --------------------- The parameters from the table are provided for each sensor using the following keywords: NUMBER_OF_SECTORS -- contains two integers for in-plane and cross-plane sector numbers SECTOR_SIZE -- contains two numbers for in-plane and cross-plane sector size, in degrees FRAME -- contains the name of the frame in which the sector view directions are defined SECTOR_DIRECTIONS -- contains sector center view directions for each sector in the sensor symmetry plane. (Note that this keyword does not provide the direction of all 320 IMA sectors but ONLY for the 16 located in the symmetry plane.) The order of vectors in the SECTOR_DIRECTIONS is different for different sensors. It is described for each particular sensor in that sensor's section of this IK. Section "IK Code Example" provided at the bottom of file includes a example C function and an example FORTRAN subroutine that can be used to retrieve values of these parameters for a specific sensor. ELS Sector Layout The ELS's 360.0 x 4.0 degrees aperture is split into 16 22.5 x 4.0 degrees sectors. All sector view directions are equally spaced within the YZ plane of the MEX_ASPERA_ELS frame. The "view direction" of each sector is inwards, from the sector position through the center of the aperture. The boundary between sectors "0" and "15" is coincident with the frame's Z axis, thus the sector "0" view direction is 11.25 degrees off the -Z axis towards -Y axis. This diagram illustrates ELS sector layout: ^ +Zels | S# indicate the sector "#" V7 | V8 position in the sensor V6 ....|.... V9 assembly. .' S15 | S0 `. V5 .' S14 | S1 `. V10 V# indicate the sector "#" . S13 | S2 . view direction. V4 . | . V11 .S12 | S3. For example, for . o--------------> +Yels Sector "1" the view .S11 / +Xels S4. direction is the vector V3 . / . V12 emanating from the .S10 / S5. aperture center through V2 . / S6 . V13 the point designated `. / S8 S7 .' by "V1". V1/ ......... ' V14 / V0 V15 V View direction of sector "1" NPI Sensor Layout The NPI's 360.0 x 9.0 degrees aperture is split into 32 sectors. Each sector's aperture is 11.25 x 9.0 degrees and the sector view directions are 11.25 degrees apart. All sector view directions are equally spaced within the YZ plane of the MEX_ASPERA_NPI frame. The "view direction" of each sector is outwards, from center of the aperture through the sector position. The boundary between sectors "0" and "31" is coincident with the frame's Z axis, thus the "0" sector view direction is 5.625 degrees off the +Z axis towards +Y. This diagram illustrates NPI sector layout: +Znpi Sector "2" ^ view direction | ^ S# indicate the sector "#" V30 | V0 / position in the V28 ....|.... V2 assembly. .' S30 |S0 /`. V26 .'S28 | S2 `. V4 V# indicate the sector "#" .S26 | / S4 . view direction. V24 . | / . V6 .S24 |/ S6. For example, for . o--------------> +Ynpi Sector "2" the view .S22 +Xnpi S8. direction is the vector V22 . . V8 emanating from the .S20 S10. aperture center through V20 . S18 S12 . V10 the point designated `. S16 S14 .' by "V2". V18 ......... ' V12 V16 V14 NPD1 Sensor Layout The NPD1's 90.0 x 9.0 degrees aperture is split into 3 sectors that are 30 degrees apart. Each sector's aperture is 30.0 x 9.0 degrees. The "view direction" of each sector is outwards, from center of the aperture through the sector position. The view direction of sector "1" is along the MEX_ASPERA_NPD1 frame +Z axis. This diagram illustrates NPD1 sector layout: +Znpd1 +Ynpd1 S# indicate the sector "#" <. V0 .> position in the `. ..... .' assembly. V1. .' S0 . .' .`. . .' V# indicate the sector "#" . S1 . .' view direction. V2 . `. . .' . S2 `...' For example, for ...........o Sector "1" the view +Xnpd1 direction is the vector emanating from the aperture center through the point designated by "V1". NPD2 Sensor Layout The NPD2's 90.0 x 9.0 degrees aperture is split into 3 sectors that are 30 degrees apart. Each sector's aperture is 30.0 x 9.0 degrees. The "view direction" of each sector is outwards, from center of the aperture through the sector position. The view direction of sector "1" is along the MEX_ASPERA_NPD2 frame +Z axis. This diagram illustrates NPD2 sector layout: +Znpd2 S# indicate the sector "#" V0 .> position in the ..... .' assembly. . S0 `. .V1 . .'. V# indicate the sector "#" . S1 . view direction. . .' . V2 ..' S2 . For example, for o........... Sector "1" the view +Xnpd2 `. direction is the vector `. emanating from the `. aperture center through `. the point designated `. by "V1". `> +Ynpd2 SS1 Sensor Layout The SS1 has a single 90 x 2 degrees FOV centered around +Y axis of the MEX_ASPERA_SS1 frame. This whole FOV is assumed to be the SS1's only sector. This diagram illustrates SS1 sector layout: ^ +Zsaf | +Zss1 ^ | ' ..\.|....' .' \| '`. .' | ' `. .-> +Yss1 . |\ ' .-' . | \' .-' . . | o'+Xss1 . . o---''--..-----> +Ysaf . +Xsaf ''--.. . . . . . . `. .' ` ......... ' SS2 Sensor Layout The SS2 has a single 90 x 2 degrees FOV centered around +Y axis of the MEX_ASPERA_SS2 frame. This whole FOV is assumed to be the SS2's only sector. This diagram illustrates SS2 sector layout: ^ +Zsaf | ' | ^ +Zss2 '....|./.. .'' |/ `. +Yss2 <-. .' ' | `. V0`-. ' /| . .S0 `-. '/ | . . `x | . . ..--'' o--------------> +Ysaf --'' +Xss2 +Xsaf . . . . . . . `. .' ` ......... ' IMA Sensor Layout The IMA's 360.0 x 90.0 degrees aperture is split into 256 sectors -- 16 in-plane (azimuthal) by 16 cross-plane (polar) -- 22.5 x 5.625 degrees each. The sector view directions are equally spaced in in-plane and cross-plane directions. The "view direction" of each sector is inwards, from the sector position through the center of the aperture. In both dimensions -- in-plane and cross-plane -- the sectors are numbered from "0" to "15". In-plane, the boundary between azimuthal sectors "0" and "1" is coincident with the IMA frame's -Y axis/IMAS frame's -X axis, from which the sectors are counted CCW as seen from the tip of IMA frame's +X axis/IMAS frame's +Z axis. Cross plane, the polar sector "0" "layer" is closest to the IMA frame's -X axis/IMAS frame's -Z axis and the polar sector "15" "layer" is closest to the IMA frame's +X axis/IMAS frame's +Z axis. This diagram illustrates in-plane (azimuthal) IMA sector layout: +Yimas ^ +Zima | A# indicate the azimuthal V5 | V4 sector "#" position in V6 ....|.... V3 the sensor assembly. .' A13 | A12 `. V7 .' A14 | A11`. V2 V# indicate the "#" sector . A15 | A10. view direction. V8 . | . V1 .A0 | A9. +Ximas For example, for . o--------------> +Yima Sector "11" the view .A1 / +Zimas A8. direction is the vector V9 . / +Xima . V0 emanating from the .A2 / A7. aperture center through V10 . / A6 . V15 the point designated `. / A4 A5 .' by "V11". V11 ......... ' V14 / V12 V13 V Azimuthal sector "11" view direction This diagram illustrates cross-plane (polar) IMA sector layout: +Yimas +Zima Polar Sector "3" ^ ^ view dir. A# indicate the polar V8 | V7 / sector "#" position in .----|----. V3 the sensor assembly. V15 ,-' P8|P7 `/. V0 .' | P3 `. `.P15 | / P0.' V# indicate the "#" sector `. | / .' view direction. `. | / .' `. | / .' For example, for polar `. |/+Ximas Sector "3" the view <-------------`o'+Yima direction is the vector +Zimas .' `. emanating from the +Xima .' `. aperture center through .' `. the point designated .' `. by "V2". .'P15 P0`. `. .' V15 `-. P8 P7 ,-' V0 `---------' V8 V7 As seen on the diagrams and pointed out in the text above the sector view direction can be defined in either IMA frame (MEX_ASPERA_IMA) or IMAS frame (MEX_ASPERA_IMAS). Originally only the IMA frame was defined in the MEX FK; the IMAS frame was added later for the reasons explained by Rudy Frahm (see [6]): The IMAS Frame -------------- The IMA frame is very useful in describing how data is related to the ASPERA instruments which are mounted on the scanner; however, it does not describe data in the frame of the instrument well. Due to the way that the IMA is designed, built, and operates, the sensor head of the IMA has a natural spherical coordinate system associated with its orientation. This spherical system best describes the way that IMA collects data. It s advantageous to organize data into the frame of the Sensor head for this purpose. This frame is called the IMAS, for IMA Sensor head. The IMAS frame is organized such that the +Z-imas points along the +X-ima axis, the +X-imas axis points along the +Y-ima axis, and the +Y-ima axis points along the +Z-ima axis. The IMAS system naturally produces the IMA polar angle directed opposite to the spherical polar angle of the IMAS frame and the IMA azimuthal angle in the same direction (with an offset) as the IMAS frame azimuthal angle. The difference between the IMA and IMAS frames is subtle. It involves spherical representation and the way in which the IMA operates. The IMA operates by taking data in a spherical system. Its pixels are similar to a bent trapezoid. the shape of this trapezoid has its parallel sides in an X-IMAS -- Y-IMAS plane. The non-parallel sides to the trapezoid lie along a meridian plane on the sensor head (Z-imas) axis. It is extremely difficult to describe the same meridian line from the IMAS frame using the IMA frame because every point is described by a unique set of IMA frame coordinate values. In a sense, the IMA frame requires describing a field-of-view which is at odd angles and each IMA pixel requires a unique description. The IMA frame can not easily describe the IMA pixel trapezoid because there is no spherical coordinate in the ima frame which aligns with any edge or side of the trapezoid. Thus, the IMAS frame is better oriented for describing objects within the IMA. Since the IMA frame was the only frame defined for the sensor in the earlier versions of the FK, the earlier IK contained just keywords specifying IMA sector layout with respect to it. When the IMAS frame was added, instead of re-defining all IMA parameters with respect to it (which would make the IK backward incompatible), a new, second set of definitions for the same sectors but relative to the IMAS frame was added. Thus, the two blocks of keywords below contain the same IMA sector parameters, except that in the first block they are defined relative to the MEX_ASPERA_IMA frame and are ``tagged'' with instrument ID -41151 while in the second block they are defined relative to the MEX_ASPERA_IMAS frame and are ``tagged'' with instrument ID -41152. In each block the sector directions are listed plane-by-plane, i.e. the first 16 vectors in the array are for azimuthal sectors "0" through "15" in polar plane "0". Platform ID --------------------------------------------------------------------------- This number is the NAIF instrument ID of the platform on which the different parts of the instrument are mounted. IMA is mounted on the IMA base while the other four sensors -- NPI, NPD1, NPD2, and ELS -- are attached to the scanner. IK Code Example --------------------------------------------------------------------------- This section contains an example code, in C and FORTRAN, illustrating how geometry parameters for a given sensor can be retrieved using appropriate SPICE routine. Both examples are presented as stand-alone functions with SPICE-style header, ready to be cut-n-paste and called from an application. C Example /* -Procedure getik ( Get ASPERA IK Data ) -Abstract Return IK data for a given ASPERA sensor. -Required_Reading KERNEL Required Reading (kernel.req) Latest ASPERA IK File (mex_aspera_vXX.ti -- version 5 or higher) Latest MEX FK File (mex_vXX.tf -- version 8 or higher) */ #include "SpiceUsr.h" #include void getik( ConstSpiceChar * sensor, SpiceChar * sensnm, SpiceInt * sensid, SpiceInt secnum[2], SpiceDouble secsiz[2], SpiceChar * secfrm, SpiceDouble * secdir ) /* -Brief_I/O Variable I/O Description -------- --- -------------------------------------------- sensor I Sensor acronym -- ELS,NPI,NPD1,NPD2,IMA,IMAS,SS1,SS2 sensnm O Full NAIF name of the sensor sensid O NAIF ID of the sensor secnum O Sector grid dimensions (in-plane, cross-plane) secsiz O Sector size, degrees (in-plane, cross-plane) secfrm O Frame in this in-plane view directions are defined secdir O Sector center view directions -Detailed Input N/A. -Detailed Output N/A. -Exceptions 1) If NAIF name <-> ID mapping for MEX instruments provided in the MEX FK file have not been loaded, then the error 'NOIDMAPPINGDATA' is signaled. 2) If any of the expected IK keywords provided in the ASPERA IK file have not been found in the POOL, then the error 'NOIKDATA' is signaled. 3) If not enough space should be provided for the sensnm, secfrm, secdir, then memory violations will occur. -Files MEX FK and ASPERA IK files must be loaded prior to calling this function. -Particulars MEX FK file loaded prior to calling this routine should contain MEX instrument naif <-> ID mappings. ASPERA IK file loaded prior to calling this routine should contain the following keywords for each of the sensors: INS#_NUMBER_OF_SECTORS INS#_SECTOR_SIZE INS#_FRAME INS#_SECTOR_DIRECTIONS -Examples In this example the function gets and prints out IK data for ELS. #include #include "SpiceUsr.h" void getik( ConstSpiceChar * sensor, SpiceChar * sensnm, SpiceInt * sensid, SpiceInt secnum[2], SpiceDouble secsiz[2], SpiceChar * secfrm, SpiceDouble * secdir ); int main( int argc, char * argv[] ) { SpiceChar sensnm [33]; SpiceInt sensid; SpiceInt secnum [2]; SpiceDouble secsiz [2]; SpiceChar secfrm [33]; SpiceDouble secdir [256][3]; SpiceInt i; /. Load MEX FK and ASPERA IK files. ./ furnsh_c( "../../../../fk/mex_v08.tf" ); furnsh_c( "../../../mex_aspera_v05.ti" ); /. Get ELS IK data. ./ getik( "ELS", sensnm, &sensid, secnum, secsiz, secfrm, ( SpiceDouble * ) secdir ); /. Report ELS IK data. ./ printf( "SENSOR NAIF NAME: %s \n", sensnm ); printf( "SENSOR NAIF ID: %ld \n", sensid ); printf( "NUMBER OF SECTORS: %ld %ld \n", secnum[0], secnum[1] ); printf( "SECTOR SIZE: %12.3f %12.3f\n", secsiz[0], secsiz[1] ); printf( "REFERENCE FRAME: %s \n", secfrm ); printf( "SECTOR VIEW DIRECTIONS: \n" ); for ( i = 0; i < secnum[0]*secnum[1]; i++ ) { printf( " %12.9f %12.9f %12.9f\n", secdir[i][0], secdir[i][1], secdir[i][2] ); } return(0); } -Restrictions N/A -Literature_References None. -Author_and_Institution B.V. Semenov (JPL) -Version -getik Version 1.2.0, 2003-NOV-22 (BVS) Updated comments to reflect that it also works for SS1 and SS2. -getik Version 1.1.0, 2003-SEP-10 (BVS) Updated to match corrected FK and IK. -getik Version 1.0.0, 2003-JUL-18 (BVS) Initial version -Index_Entries None. -& */ { /* Begin "get IK data */ SpiceChar ikkwd [33]; SpiceInt n; SpiceBoolean found; /* Since all IK variable names contain NAIF ID of the instrument, the inputs sensor acronym, NNN, needs to be expanded into its full name, MEX_ASPERA_NNN, which then can be uses to find the sensor's NAIF ID code. */ strcpy ( sensnm, "MEX_ASPERA_" ); strcat ( sensnm, sensor ); bodn2c_c ( sensnm, sensid, &found ); if ( ! found ) { setmsg_c ( "Cannot determine NAIF ID for #." ); errch_c ( "#", sensnm ); sigerr_c ( "NOIDMAPPINGDATA" ); } /* Now IK routines can be used to retrieve loaded data. First, retrieve the number of sectors provided in the INS-NNNNNN_NUMBER_OF_SECTORS keyword (here -NNNNNN is the NAIF ID of the sensor.) */ strcpy ( ikkwd, "INS#_NUMBER_OF_SECTORS" ); repmi_c ( ikkwd, "#", *sensid, 33, ikkwd ); gipool_c ( ikkwd, 0, 2, &n, secnum, &found ); if ( ! found ) { setmsg_c ( "Loaded IK does not contain #." ); errch_c ( "#", ikkwd ); sigerr_c ( "NOIKDATA" ); } /* Second, retrieve the sector size provided in the INS-NNNNNN_SECTOR_SIZE keyword. */ strcpy ( ikkwd, "INS#_SECTOR_SIZE" ); repmi_c ( ikkwd, "#", *sensid, 33, ikkwd ); gdpool_c ( ikkwd, 0, 2, &n, secsiz, &found ); if ( ! found ) { setmsg_c ( "Loaded IK does not contain #." ); errch_c ( "#", ikkwd ); sigerr_c ( "NOIKDATA" ); } /* Third, retrieve the frame in which sector view direction are defined. It is provided in the INS-NNNNNN_FRAME keyword. */ strcpy ( ikkwd, "INS#_FRAME" ); repmi_c ( ikkwd, "#", *sensid, 33, ikkwd ); gcpool_c ( ikkwd, 0, 1, 33, &n, secfrm, &found ); if ( ! found ) { setmsg_c ( "Loaded IK does not contain #." ); errch_c ( "#", ikkwd ); sigerr_c ( "NOIKDATA" ); } /* Last, retrieve the sector view directions provided in the INS-NNNNNN_SECTOR_DIRECTIONS keyword. */ strcpy ( ikkwd, "INS#_SECTOR_DIRECTIONS" ); repmi_c ( ikkwd, "#", *sensid, 33, ikkwd ); gdpool_c ( ikkwd, 0, (secnum[0]*secnum[1])*3, &n, secdir, &found ); if ( ! found ) { setmsg_c ( "Loaded IK does not contain #." ); errch_c ( "#", ikkwd ); sigerr_c ( "NOIKDATA" ); } } /* End of "get IK data" */ FORTRAN Example C$Procedure GETIK ( Get ASPERA IK Data ) SUBROUTINE GETIK ( SENSOR, SENSNM, SENSID, SECNUM, . SECSIZ, SECFRM, SECDIR ) C$ Abstract C C Return IK data for a given ASPERA sensor. C C$ Copyright C C Copyright (2003), California Institute of Technology. C U.S. Government sponsorship acknowledged. C C$ Required_Reading C C KERNEL Required Reading (kernel.req) C Latest ASPERA IK File (mex_aspera_vXX.ti -- version 5 or above) C Latest MEX FK File (mex_vXX.tf -- version 8 or above) C C$ Keywords C C KERNEL C UTILITY C C$ Declarations IMPLICIT NONE CHARACTER*(*) SENSOR CHARACTER*(*) SENSNM INTEGER SENSID INTEGER SECNUM ( 2 ) DOUBLE PRECISION SECSIZ ( 2 ) CHARACTER*(*) SECFRM DOUBLE PRECISION SECDIR ( 3, * ) C$ Brief_I/O C C VARIABLE I/O DESCRIPTION C -------- --- -------------------------------------------------- C SENSOR I Sensor acronym -- ELS,NPI,NPD1,NPD2,IMA,IMAS,SS1,SS2 C SENSNM O Full NAIF name of the sensor C SENSID O NAIF ID of the sensor C SECNUM O Sector grid dimensions (in-plane, cross-plane) C SECSIZ O Sector size, degrees (in-plane, cross-plane) C SECFRM O Frame in which view directions are defined C SECDIR O Sector center view directions C C$ Detailed_Input C C SENSOR ASPERA sensor acronym -- ELS, NPI, NPD1, NPD2, IMA, C SS1, or SS2. C C$ Detailed_Output C C SENSNM is the full NAIF name of the sensor indicated by C the input argument SENSOR. For example, the C acronym ELS maps to the full name MEX_ASPERA_ELS. C C SENSID is the NAIF integer ID code of the sensor. The C association of sensor names and codes is established C in the MEX frame kernel. C C SECNUM is an array of two integers giving the sector grid C dimensions (in-plane, cross-plane). C C SECSIZ is an array of two double precision numbers giving C the sector size in degrees (in-plane, cross-plane). C C SECFRM the name of the reference frame in which the view C directions are defined. C C SECDIR is an array of in-plane sector center view direction C vectors. The number of vectors is SECNUM(1)*SECNUM(2) C The Ith vector resides in array elements C C SECDIR(J,I) J = 1, 2, 3 C C$ Parameters C C None. C C$ Files C C MEX FK and ASPERA IK files must be loaded prior to calling this C subroutine. C C$ Exceptions C C 1) If NAIF name <-> ID mapping for MEX instruments provided in C the MEX FK file have not been loaded, then the error C NOIDMAPPINGDATA is signaled. C C 2) If any of the expected IK keywords provided in the ASPERA IK C file have not been found in the POOL, then the error NOIKDATA C is signaled. C C 3) If not enough space should be provided for the arguments C SENSNM, SECFRM, SECDIR, then memory violations will occur. C C$ Particulars C C The MEX FK file loaded prior to calling this routine should C contain MEX instrument <-> NAIF ID mappings. C C ASPERA IK file loaded prior to calling this routine should contain C the following keywords for each of the sensors: C C INS#_NUMBER_OF_SECTORS C INS#_SECTOR_SIZE C INS#_FRAME C INS#_SECTOR_DIRECTIONS C C$ Examples C C C In this example the program gets and prints out IK data for ELS. C C PROGRAM GETIK_EXAMPLE C IMPLICIT NONE C C C INTEGER NSEC C PARAMETER ( NSEC = 32 ) C C INTEGER NAMLEN C PARAMETER ( NAMLEN = 32 ) C C CHARACTER*(NAMLEN) SECFRM C CHARACTER*(NAMLEN) SENSNM C C DOUBLE PRECISION SECDIR ( 3, 256 ) C C INTEGER I C INTEGER J C INTEGER SECNUM ( 2 ) C DOUBLE PRECISION SECSIZ ( 2 ) C INTEGER SENSID C C C C C Load MEX FK and ASPERA IK files. C C C CALL FURNSH ( '../../../../fk/mex_v08.tf' ) C CALL FURNSH ( '../../../mex_aspera_v05.ti' ) C C C C C Get ELS IK data. C C C CALL GETIK( 'ELS', SENSNM, SENSID, SECNUM, C . SECSIZ, SECFRM, SECDIR ) C C C C C Report ELS IK data. C C C WRITE ( *, '(1X,2A )' ) 'SENSOR NAIF NAME: ', SENSNM C WRITE ( *, '(1X,A,I9 )' ) 'SENSOR NAIF ID: ', SENSID C WRITE ( *, '(1X,A,2I5 )' ) 'NUMBER OF SECTORS: ', SECNUM C WRITE ( *, '(1X,A,2F9.3 )' ) 'SECTOR SIZE: ', SECSIZ C WRITE ( *, '(1X,2A )' ) 'REFERENCE FRAME: ', SECFRM C WRITE ( *, '(1X,A )' ) 'SECTOR VIEW DIRECTIONS:' C C DO I = 1, SECNUM(1)*SECNUM(2) C WRITE ( *, '(1X,3F12.9)' ) ( SECDIR(J,I), J = 1, 3 ) C END DO C C END C C C$ Restrictions C C None. C C$ Author_and_Institution C C B.V. Semenov (JPL) C N.J. Bachman (JPL) C C$ Literature_References C C None. C C$ Version C C- GETIK Version 1.2.0, 22-NOV-2003 (BVS) C C Updated comments to reflect that it also works for SS1 C and SS2. C C- GETIK Version 1.1.0, 10-SEP-2003 (BVS) C C Updated to match corrected FK and IK. C C- GETIK Version 1.0.0, 15-AUG-2003 (BVS) (NJB) C C-& C C Local parameters C INTEGER NAMLEN PARAMETER ( NAMLEN = 32 ) C C Local variables C CHARACTER*(NAMLEN) IKKWD INTEGER N LOGICAL FOUND C C Since all IK variable names contain NAIF ID of the instrument, C the input sensor acronym, NNN, needs to be expanded into its C full name, MEX_ASPERA_NNN, which then can be used to find the C sensor's NAIF ID code. C SENSNM = 'MEX_ASPERA_' CALL SUFFIX ( SENSOR, 0, SENSNM ) CALL BODN2C ( SENSNM, SENSID, FOUND ) IF ( .NOT. FOUND ) THEN CALL SETMSG ( 'Cannot determine NAIF ID for #.' ) CALL ERRCH ( '#', SENSNM ) CALL SIGERR ( 'NOIDMAPPINGDATA' ) RETURN END IF C C Now IK routines can be used to retrieve loaded data. First, C retrieve the number of sectors provided in the C INS-NNNNNN_NUMBER_OF_SECTORS keyword (here -NNNNNN is the NAIF ID C of the sensor.) C IKKWD = 'INS#_NUMBER_OF_SECTORS' CALL REPMI ( IKKWD, '#', SENSID, IKKWD ) CALL GIPOOL ( IKKWD, 0, 2, N, SECNUM, FOUND ) IF ( .NOT. FOUND ) THEN CALL SETMSG ( 'Loaded IK does not contain #.' ) CALL ERRCH ( '#', IKKWD ) CALL SIGERR ( 'NOIKDATA' ) RETURN END IF C C Second, retrieve the sector size provided in the C INS-NNNNNN_SECTOR_SIZE keyword. C IKKWD = 'INS#_SECTOR_SIZE' CALL REPMI ( IKKWD, '#', SENSID, IKKWD ) CALL GDPOOL ( IKKWD, 0, 2, N, SECSIZ, FOUND ) IF ( .NOT. FOUND ) THEN CALL SETMSG ( 'Loaded IK does not contain #.' ) CALL ERRCH ( '#', IKKWD ) CALL SIGERR ( 'NOIKDATA' ) RETURN END IF C C Third, retrieve the frame in which sector view direction are C defined. It is provided in the INS-NNNNNN_FRAME keyword. C IKKWD = 'INS#_FRAME' CALL REPMI ( IKKWD, '#', SENSID, IKKWD ) CALL GCPOOL ( IKKWD, 0, 1, N, SECFRM, FOUND ) IF ( .NOT. FOUND ) THEN CALL SETMSG ( 'Loaded IK does not contain #.' ) CALL ERRCH ( '#', IKKWD ) CALL SIGERR ( 'NOIKDATA' ) RETURN END IF C C Last, retrieve the sector view directions provided in the C INS-NNNNNN_SECTOR_DIRECTIONS keyword. C IKKWD = 'INS#_SECTOR_DIRECTIONS ' CALL REPMI ( IKKWD, '#', SENSID, IKKWD ) CALL GDPOOL ( IKKWD, 0, SECNUM(1)*SECNUM(2)*3, N, SECDIR, FOUND ) IF ( .NOT. FOUND ) THEN CALL SETMSG ( 'Loaded IK does not contain #.' ) CALL ERRCH ( '#', IKKWD ) CALL SIGERR ( 'NOIKDATA' ) RETURN END IF END