Commit ef20a822 authored by Tyler Thatcher's avatar Tyler Thatcher Committed by Jesse Mapel
Browse files

MEX Drivers and Tests (#297)

* First round of changes for mex test.

* Updatd mex test and refactored image reading code.

* Merged testing and refactored code.

* First round of changes based off of comments.

* Updated tests to use load function.

* Updated method documentation for reading the image data.

* Fixed typo and removed unused imports.

* Driver for MEX and Tests for MEX Driver

* Address review comments, part one - testing push to branch

* Update testing re: comments and hopefully fix failing tests

* Added documentation to new properties and removed isis_bytes property as it was unused.

* Add parent instrument_id check
parent 8c996b08
Loading
Loading
Loading
Loading
+222 −59
Original line number Original line Diff line number Diff line
@@ -9,8 +9,11 @@ import spiceypy as spice
import warnings
import warnings


from ale.base import Driver
from ale.base import Driver
from ale.base.data_isis import read_table_data
from ale.base.data_isis import parse_table
from ale.base.data_naif import NaifSpice
from ale.base.data_naif import NaifSpice
from ale.base.label_pds3 import Pds3Label
from ale.base.label_pds3 import Pds3Label
from ale.base.label_isis import IsisLabel
from ale.base.type_sensor import LineScanner
from ale.base.type_sensor import LineScanner
from ale.base.type_distortion import RadialDistortion
from ale.base.type_distortion import RadialDistortion
from ale.util import find_latest_metakernel
from ale.util import find_latest_metakernel
@@ -130,7 +133,7 @@ class MexHrscPds3NaifSpiceDriver(LineScanner, Pds3Label, NaifSpice, RadialDistor
        : int
        : int
          Naif ID code used in calculating focal length
          Naif ID code used in calculating focal length
        """
        """
        return spice.bods2c(self.label['DETECTOR_ID'])
        return spice.bods2c(self.instrument_id)




    # TODO Since HRSC has different frames based on filters, need to check that
    # TODO Since HRSC has different frames based on filters, need to check that
@@ -164,6 +167,8 @@ class MexHrscPds3NaifSpiceDriver(LineScanner, Pds3Label, NaifSpice, RadialDistor
        : str
        : str
          Short name of the instrument
          Short name of the instrument
        """
        """
        if(super().instrument_id != "HRSC"):
            raise Exception ("Instrument ID is wrong.")
        return self.label['DETECTOR_ID']
        return self.label['DETECTOR_ID']




@@ -323,30 +328,88 @@ class MexHrscPds3NaifSpiceDriver(LineScanner, Pds3Label, NaifSpice, RadialDistor
        """
        """
        Returns a 2D array of line scan rates.
        Returns a 2D array of line scan rates.


        For HRSC, this data is actually imbedded in the binary data of the image
        For HRSC, the ephemeris times and exposure durations are
        itself. Each line is stored in what is referred to as a "record" within
        stored in the image data.
        the image. The label will have the size of each record, the number of
        records, and the number of records in the label, so the beginning of
        binary data can be calculated.


        For each line/record of the binary data, the first 8 bytes make up the
        Returns
        double presicion value of the ephemeris time, with the next 4 bytes
        -------
        making up the float value of the line exposure duration for the
        : list
        associated line. NOTE: The image label specifies MSB_INTEGER as the byte
          Line scan rates
        order, however, to match ISIS values, we used python struct's little
        """
        endian functionality.
        times = [time - self.center_ephemeris_time for time in self.binary_ephemeris_times]
        return (self.binary_lines, times, self.binary_exposure_durations)


    @property
    def binary_exposure_durations(self):
        """
        Returns the exposure durations taken from the binary image data.

        For HRSC, the exposure durations are imbedded in the binary data of the image.
        The expsoure durations start at the 9th byte of the line/record and are 4 bytes long.


        Returns
        Returns
        -------
        -------
        : list
        : list
          Start lines
          Exposure durations
        """
        if not hasattr(self, '_binary_exposure_durations'):
            self.read_image_data()
        return self._binary_exposure_durations


    @property
    def binary_ephemeris_times(self):
        """
        Returns the ephemeris times taken from the binary image data.

        For HRSC, the ephemeris times are imbedded in the binary data of the image.
        The ephemeris times start at the first byte of the line/records and are 8 bytes long.

        Returns
        -------
        : list
        : list
          Line times
          Ephemeris times
        """
        if not hasattr(self, '_binary_ephemeris_times'):
            self.read_image_data()
        return self._binary_ephemeris_times


    @property
    def binary_lines(self):
        """
        Returns the lines of the binary image data.

        For example, the first entry would be the first line of the image.

        Returns
        -------
        : list
        : list
          Exposure durations
          Image lines
        """
        if not hasattr(self, '_binary_lines'):
            self.read_image_data()
        return self._binary_lines


    def read_image_data(self):
        """
        Reads data off of image and stores in binary_exposure_durations, binary_lines,
        and binary_ephemeris_times.

        For HRSC, the exposure durations and ephemeris times are imbedded in the binary
        data of the image itself. Each line is stored in what is referred to as a
        "record" within the image. The label will have the size of each record,
        the number of records, and the number of records in the label, so the
        beginning of binary data can be calculated.

        For each line/record of the binary data, the first 8 bytes make up the
        double presicion value of the ephemeris time, with the next 4 bytes
        making up the float value of the line exposure duration for the
        associated line. NOTE: The prefix data is always LSB, regardless
        of the overall file format.
        """
        """
        if not hasattr(self, '_line_scan_rate'):
            self._line_scan_rate = None
        lines = []
        lines = []
        times = []
        times = []
        durations = []
        durations = []
@@ -363,35 +426,30 @@ class MexHrscPds3NaifSpiceDriver(LineScanner, Pds3Label, NaifSpice, RadialDistor
                record_bytes = image_file.read(bytes_per_record)
                record_bytes = image_file.read(bytes_per_record)
                eph_time = struct.unpack('<d', record_bytes[:8])[0]
                eph_time = struct.unpack('<d', record_bytes[:8])[0]
                exp_dur = struct.unpack('<f', record_bytes[8:12])[0] / 1000
                exp_dur = struct.unpack('<f', record_bytes[8:12])[0] / 1000
                    #if record == 0:
                # Offset for zero-based corrections, and then offest for ISIS pixel definition
                # Offset for zero-based corrections, and then offest for ISIS pixel definition
                lines.append(record+1-0.5)
                lines.append(record+1-0.5)
                times.append(eph_time)
                times.append(eph_time)
                durations.append(exp_dur)
                durations.append(exp_dur)
                # Only add records if exposure duration has changed since the line before

                    #elif exp_dur != durations[-1]:
        self._binary_exposure_durations = durations
                    #    # Offset for zero-based corrections, and then offest for ISIS pixel definition
        self._binary_lines = lines
                    #    lines.append(record+1-0.5)
        self._binary_ephemeris_times = times
                    #    times.append(eph_time)

                    #    durations.append(exp_dur)
            self._ephemeris_stop_time = times[-1] + durations[-1]
            self._center_ephemeris_time = (self.ephemeris_stop_time + self.ephemeris_start_time) / 2
            times = [time - self.center_ephemeris_time for time in times]
            # print(self.ephemeris_stop_time, self.center_ephemeris_time)

            self._line_scan_rate = (lines, times, durations)
        return self._line_scan_rate
    @property
    def center_ephemeris_time(self):
        if not hasattr(self, '_center_ephemeris_time'):
            self._center_ephemeris_time = (self.ephemeris_stop_time - self._ephemeris_start_time) / 2
        return self._center_ephemeris_time


    @property
    @property
    def ephemeris_stop_time(self):
    def ephemeris_stop_time(self):
        if not hasattr(self, '_ephemeris_stop_time'):
        """
            _, _, _ = self.line_scan_rate
        Returns the ephemeris stop time.
        return self._ephemeris_stop_time

        For HRSC, the ephemeris stop time is calculated from the binary image data.

        Returns
        -------
        : float
          Ephemeris stop time
        """
        return self.binary_ephemeris_times[-1] + self.binary_exposure_durations[-1]



    # TODO We need to confirm that returning nothing here does not affect
    # TODO We need to confirm that returning nothing here does not affect
    # calculations elsewhere in code. Or is there possibly just a better way of
    # calculations elsewhere in code. Or is there possibly just a better way of
@@ -422,3 +480,108 @@ class MexHrscPds3NaifSpiceDriver(LineScanner, Pds3Label, NaifSpice, RadialDistor
          ISIS sensor model version
          ISIS sensor model version
        """
        """
        return 1
        return 1

class MexHrscIsisLabelNaifSpiceDriver(LineScanner, IsisLabel, NaifSpice, RadialDistortion, Driver):

        @property
        def instrument_id(self):
            """
            Returns the name of the instrument

            Returns
            -------
            : str
              Name of the instrument
            """
            if(super().instrument_id != "HRSC"):
                raise Exception ("Instrument ID is wrong.")

            return super().instrument_id

        @property
        def sensor_model_version(self):
            """
            Returns
            -------
            : int
              ISIS sensor model version
            """
            return 1

        @property
        def times_table(self):
            """
            Returns EphermisTime, ExposureTime, and LinesStart informtation which was stored as 
            binary information in the ISIS cube.

            Returns
            -------
            : dict
              Dictionary with EphemerisTime, ExposureTime, and LineStart.
            """
            isis_bytes = read_table_data(self.label['Table'], self._file)
            return parse_table(self.label['Table'], isis_bytes)

        @property
        def line_scan_rate(self):
            """
            Returns
            -------
            : tuple
              list of lines, list of ephemeris times, and list of exposure
              times
            """
            return self.times_table['LineStart'], self.times_table['EphemerisTime'], self.times_table['ExposureTime']

        @property
        def ephemeris_start_time(self):
            """
            Returns
            -------
            : float
              starting ephemeris time
            """
            return self.times_table['EphemerisTime'][0]

        @property
        def ephemeris_stop_time(self):
            """
            Returns
            -------
            : float
              ephemeris stop time
            """
            last_line = self.times_table['LineStart'][-1]
            return self.times_table['EphemerisTime'][-1] + ((self.image_lines - last_line + 1) * self.times_table['ExposureTime'][-1])

        @property
        def ikid(self):
            """
            Returns the Naif ID code for the HRSC head instrument

            This would be the Naif ID code for the base (or "head") instrument.

            Returns
            -------
            : int
              Naif ID used to for indentifying the instrument in Spice kernels
            """
            return spice.bods2c("MEX_HRSC_HEAD")


        @property
        def fikid(self):
            """
            Naif ID code of the filter dependent instrument codes.

            Expects filter_number to be defined. This should be an integer containing
            the filter number from the pds3 label.
            Expects ikid to be defined. This should be the integer Naid ID code for
            the instrument.

            Returns
            -------
            : int
              Naif ID code used in calculating focal length
            """
            return spice.bods2c(self.instrument_id)
+1 −1
Original line number Original line Diff line number Diff line
@@ -10,7 +10,7 @@ parser.add_argument('mk_path', action='store', help='Path containing metakernel
parser.add_argument('new_data_path', action='store', help='new data path containing kernel, this path will overwrite the current data path in the metakernels')
parser.add_argument('new_data_path', action='store', help='new data path containing kernel, this path will overwrite the current data path in the metakernels')
args = parser.parse_args()
args = parser.parse_args()


mks = glob(path.join(args.mk_path,'*.tm'))
mks = glob(path.join(args.mk_path,'*.[Tt][Mm]'))


for mk in mks:
for mk in mks:
    with open(mk, 'r') as f:
    with open(mk, 'r') as f:
+320 −0
Original line number Original line Diff line number Diff line
DAFETF NAIF DAF ENCODED TRANSFER FILE
'DAF/CK  '
'2'
'6'
'MEX CK; MEASURED; OBTAINED FROM TELEMETRY                   '
BEGIN_ARRAY 1 299
'MEX MEASURED ATTITUDE                   '
'8D09944AC2A^B'
'8D09A5CD464^B'
'-A029'
'1'
'3'
'1'
299
'195CA1F16184AC^0'
'-8FB78691C24E78^0'
'B5DB15946D13D^0'
'69AC2FB182E918^0'
'113D090CB55617^-2'
'34CFC638ACA394^-2'
'10ADDB73F0BAB^-2'
'199BD240149D3A^0'
'-8FA86A0031A5A8^0'
'B5B370002956D^0'
'69F597FFE3100C^0'
'1135A28CA60B01^-2'
'34E4458AF3BF4C^-2'
'10BC727228C41B^-2'
'1A2705BFFFD733^0'
'-8F8703FFD1CD6^0'
'B55BEBFFFF0F78^0'
'6A964EFFE311C4^0'
'11509A9378535B^-2'
'3521B0499B2A5A^-2'
'10CE97A92D7721^-2'
'1AB2B3800E71F8^0'
'-8F650000052768^0'
'B50363FFDD2F18^0'
'6B377D00170D48^0'
'115AC4E246BCD5^-2'
'353FF677B026E2^-2'
'10E35C0863225E^-2'
'1B3EAC7FE69A47^0'
'-8F428FFFCC5A6^0'
'B4A9F7FFFC303^0'
'6BD8A8FFE74C18^0'
'115BD23BE8FA63^-2'
'356C934DBCEC32^-2'
'111F269C5074D4^-2'
'1BCB6F000536E^0'
'-8F200600185568^0'
'B44F5A00329D1^0'
'6C79C7FFF9EEF^0'
'116FCF1E520FD2^-2'
'35A649B5CE12C^-2'
'1134A650C32C7C^-2'
'1C58B4401BCB79^0'
'-8EFCE5FFF2C0B^0'
'B3F3B800037D58^0'
'6D1B3B0017633^0'
'118AB44D40C385^-2'
'35DFB7374EFA4E^-2'
'1138819F28F0EB^-2'
'1CE64D7FCF3DF7^0'
'-8ED901FFD89488^0'
'B3972E0029ACB^0'
'6DBD1C0028D43C^0'
'11A2FAEE11247A^-2'
'360A134CF72BDE^-2'
'1161445E9B0DEF^-2'
'1D74547FE5E79C^0'
'-8EB4D7FFDA0B1^0'
'B33971FFF9545^0'
'6E5F2F0016D2E^0'
'11BE05C140746^-2'
'365C2DF004442E^-2'
'117E757F5ACEBC^-2'
'1E031DBFFA189A^0'
'-8E9001FFDA4C58^0'
'B2DA83FFE067B8^0'
'6F01D7000D892C^0'
'11F812AEEAC027^-2'
'36BACDFE2BC05E^-2'
'1189FEE4DBE7DA^-2'
'1E9267C010785F^0'
'-8E6A460025A5E8^0'
'B27A4DFFE14DF^0'
'6FA58D0036BA3^0'
'1221E13AA48FCF^-2'
'36F91EBB3431D4^-2'
'1151C1CE6D51AF^-2'
'1F2185402E33E9^0'
'-8E43160021ACD8^0'
'B2199000050BF^0'
'7049FA0028F328^0'
'12325A913EBAF7^-2'
'3723C0374847BE^-2'
'117722333783DA^-2'
'1FB11A800E2139^0'
'-8E1B8C003186C^0'
'B1B7ADFFF8B648^0'
'70EE7D0018C518^0'
'12445D322FB645^-2'
'374A2A7FBADF48^-2'
'11ACC243B68848^-2'
'2041347FDBCFC2^0'
'-8DF3DC00278A6^0'
'B1548200106A3^0'
'719306FFE4D75^0'
'126031AF1E2924^-2'
'37784788817486^-2'
'11C03FA3FEE61B^-2'
'20D195FFF42608^0'
'-8DCB9DFFF116A^0'
'B0F042001447C^0'
'7237D400128C84^0'
'126C0032E4B4^-2'
'37B2B784A7C0BE^-2'
'11D14576D4A6E9^-2'
'21627EFFEC3238^0'
'-8DA2A9FFEC7F88^0'
'B08B05FFF7B12^0'
'72DCD100270618^0'
'126DAFC36AAE18^-2'
'37CEE58A833EBA^-2'
'120DA823ECB5E5^-2'
'21F3FFFFDDA3E8^0'
'-8D79AA00253118^0'
'B0249200112AA^0'
'738188FFE41374^0'
'127C4B973ED659^-2'
'37FC295567696C^-2'
'123D080232F506^-2'
'228612FFE71F6C^0'
'-8D505E002A362^0'
'AFBCDE001B9BD^0'
'742647FFEB5498^0'
'12A9FBD15999C9^-2'
'383110A21EEE2C^-2'
'1260F31E4B9D59^-2'
'231873801C9E5A^0'
'-8D26AA001C9A1^0'
'AF53C7FFE8C0E8^0'
'74CB79FFCD099C^0'
'1295AA90BBD28A^-2'
'38823D57E5A2A2^-2'
'1290971EB1DDBA^-2'
'23AC14FFEE16B2^0'
'-8CFC53FFDAB6E^0'
'AEE99C001A39E8^0'
'75709EFFF122A8^0'
'12A30F725053D6^-2'
'38A774DFEEDC22^-2'
'12BF088E04D8E4^-2'
'244031FFDC8D98^0'
'-8CD1BA0018331^0'
'AE7E36001E0648^0'
'7615B100085094^0'
'12B363233BAB12^-2'
'38D858A68658F4^-2'
'12D2B55D3EDC6B^-2'
'24D4B1FFF72E9^0'
'-8CA67E0021682^0'
'AE11C3FFE5213^0'
'76BADEFFFE7324^0'
'12E071502EC87C^-2'
'39068FE2E1556E^-2'
'12EC367A6E5EEE^-2'
'25695880291818^0'
'-8C7AC4001A632^0'
'ADA403FFE4B338^0'
'77606C00352D54^0'
'12D205BF9D9EEC^-2'
'39271334E3C36E^-2'
'1313E31D82FC3F^-2'
'25FE9C7FCA5CFE^0'
'-8C4EA7FFE218A8^0'
'AD354C001D5708^0'
'78058DFFFAA50C^0'
'12D6F0A815E4D2^-2'
'3952F80BBA347E^-2'
'1314B5DE56E966^-2'
'269429001F21BE^0'
'-8C21B6001123C^0'
'ACC5C6002681D^0'
'78AAA7FFE8F7E^0'
'130C3E06B821FB^-2'
'39B2F1F0D68C96^-2'
'1325F83999DA2B^-2'
'272A3E7FDDFFD2^0'
'-8BF3D3FFE272^0'
'AC54D2002FA928^0'
'7950A30013AEDC^0'
'132F760288126D^-2'
'39F7667FF3EBA8^-2'
'1339762301734A^-2'
'27C0BD00185724^0'
'-8BC52E002D1C5^0'
'ABE299FFD0424^0'
'79F70D002D474^0'
'134D99165A236F^-2'
'3A4627E6536BCC^-2'
'133B4C5C20A42A^-2'
'2857A8FFDB4576^0'
'-8B957E0030DE6^0'
'AB6F47FFE99CC8^0'
'7A9DF8FFD4B8B4^0'
'137A1C69B8F118^-2'
'3A75CCACD4715A^-2'
'133928F331BDB4^-2'
'28EE86FFE5B336^0'
'-8B64FC001994F8^0'
'AAFADA0017FC18^0'
'7B454A000C10F^0'
'138AE0FEC4D5B8^-2'
'3AAC271DAE8DC8^-2'
'134A2C56312456^-2'
'2985C8001C4B08^0'
'-8B33B9FFF9469^0'
'AA8553FFD8FF1^0'
'7BECB40031AFF8^0'
'139F34E2173774^-2'
'3ADB5BE4F40CF8^-2'
'1380BB0D32AC12^-2'
'2A1D998004A246^0'
'-8B022C00133F3^0'
'AA0E61FFFDBB5^0'
'7C94180007FFD8^0'
'13B1DC666044C1^-2'
'3B087198473336^-2'
'13B74967FEB0EF^-2'
'2AB5F9001970E4^0'
'-8AD053FFEF5488^0'
'A996080003CFD^0'
'7D3B6B0035214C^0'
'13BD2F85673DA5^-2'
'3B28A704B6A99E^-2'
'13D025E1443C6E^-2'
'2B4E99802C25C6^0'
'-8A9DF5FFE40AE^0'
'A91C9BFFEBD728^0'
'7DE28F00086F84^0'
'13C715F674D887^-2'
'3B532266443AC8^-2'
'13FF4643C39DB7^-2'
'2BE7C40011CC1A^0'
'-8A6B3600156F4^0'
'A8A1E7FFEDB158^0'
'7E8984FFEAC294^0'
'13CCB57FE47E08^-2'
'3B7FB1520C6EFA^-2'
'1417F982C6893B^-2'
'2C8159FFF833B2^0'
'-8A37D00026FA1^0'
'A82621FFD17E58^0'
'7F3053002B69A8^0'
'13EAB7B40C0DF3^-2'
'3BB388D3E0B78A^-2'
'1421C7B8290C72^-2'
'2D1B1BFFD9CD38^0'
'-8A039FFFF49E48^0'
'A7A935FFFD62^0'
'7FD752FFDAAAD8^0'
'1409FE9737BE28^-2'
'3BDCAB1FCBE926^-2'
'14323F4462AC88^-2'
'2D71C536EA5692^0'
'-89E5F1A37B517^0'
'A7624660DBC46^0'
'80357A37A9077^0'
'140E7B13D9D7B5^-2'
'3BF451CD8DBB56^-2'
'144DD04F22D5FE^-2'
'8D09944AC2A^B'
'8D09948531D^B'
'8D09950531D^B'
'8D09958531D^B'
'8D09960531D^B'
'8D09968531D^B'
'8D09970531D^B'
'8D09978531D^B'
'8D09980531D^B'
'8D09988531D^B'
'8D09990531D^B'
'8D09998531D^B'
'8D099A0531D^B'
'8D099A8531D^B'
'8D099B0531D^B'
'8D099B8531D^B'
'8D099C0531D^B'
'8D099C8531D^B'
'8D099D0531D^B'
'8D099D8531D^B'
'8D099E0531D^B'
'8D099E8531D^B'
'8D099F0531D^B'
'8D099F8531D^B'
'8D09A00531D^B'
'8D09A08531D^B'
'8D09A10531D^B'
'8D09A18531D^B'
'8D09A205321^B'
'8D09A285321^B'
'8D09A305321^B'
'8D09A385321^B'
'8D09A405321^B'
'8D09A485321^B'
'8D09A505321^B'
'8D09A585321^B'
'8D09A5CD464^B'
'8D09944AC2A^B'
'1^1'
'25^2'
END_ARRAY 1 299
TOTAL_ARRAYS 1
 ~NAIF/SPC BEGIN COMMENTS~
This CK is for testing with the image: /home/kdlee/builds/ale/tests/pytests/data/h5270_0000_ir2/h5270_0000_ir2.cub

This CK was generated using the following command: {}
 ~NAIF/SPC END COMMENTS~
+312 −0
Original line number Original line Diff line number Diff line
DAFETF NAIF DAF ENCODED TRANSFER FILE
'DAF/CK  '
'2'
'6'
'MEX CK; MEASURED; OBTAINED FROM TELEMETRY                   '
BEGIN_ARRAY 1 291
'MEX MEASURED ATTITUDE                   '
'8D09C70D596^B'
'8D09D86B6D5^B'
'-A029'
'1'
'3'
'1'
291
'56851BCF0F5F48^0'
'-7655A56A3B7D0C^0'
'7CB67BA01B93F^0'
'A8CD2E3998D12^0'
'170D06613CC0F2^-2'
'42A330AABC682^-2'
'1944CC3AC1E04^-2'
'5714F7FFDB8BE4^0'
'-75FC0FFFEC22C4^0'
'7BFD2F0035BF5C^0'
'A94A3C0021BE08^0'
'170DCA76D8F23C^-2'
'4295372B6504E8^-2'
'196296BE978A65^-2'
'57AE5FFFD0F858^0'
'-759C2C00021124^0'
'7B367A001A58D^0'
'A9CEA5FFEC4F7^0'
'170D77105DA0C7^-2'
'4285EA117A58FC^-2'
'196DC1B725EFFA^-2'
'58475100005E7C^0'
'-753BE4FFEBD574^0'
'7A6F1DFFE43418^0'
'AA51FC0010FDF^0'
'170891AC0078F5^-2'
'4254AD3C74575C^-2'
'1981AA2446168E^-2'
'58DFA8FFCD8704^0'
'-74DB9FFFCB62FC^0'
'79A746FFFC76A^0'
'AAD3EA001704B^0'
'171D96A29C332A^-2'
'4272E8220C66F^-2'
'1980D4FFE4A9C2^-2'
'597798FFF601EC^0'
'-747A8700080F4C^0'
'78DE6A002756D8^0'
'AB554FFFD1EFC^0'
'1715F70FF7187B^-2'
'428E8A966C2414^-2'
'195D9CE1FEA66F^-2'
'5A0EF2001FFBEC^0'
'-7418370007BCD8^0'
'781515002358A4^0'
'ABD61FFFF732^0'
'16F56556827683^-2'
'42AACBEB894074^-2'
'1936D81E5423E2^-2'
'5AA5D800018E94^0'
'-73B4860032F664^0'
'774B92002E5F4C^0'
'AC56320009388^0'
'16EFA35067AA1A^-2'
'42A438DDF523C4^-2'
'193964420E7D5C^-2'
'5B3C47001D1AE8^0'
'-735044FFCDFBD8^0'
'768180001209F4^0'
'ACD53E002DDCB8^0'
'16EE2FD5D2FE04^-2'
'429D08C4B58ADC^-2'
'1949F0162D98F9^-2'
'5BD25AFFE3A21^0'
'-72EB95FFE2F7FC^0'
'75B6BC001323B4^0'
'AD5335FFD0B71^0'
'16F2E24286F951^-2'
'427BD008EA9EC^-2'
'19550E61080C06^-2'
'5C67C9FFF327C4^0'
'-7286BEFFE854A8^0'
'74EB65FFFC33A^0'
'ADCFFDFFEEB9E8^0'
'16FBA484A6B04B^-2'
'425A1C7FFE4504^-2'
'1959E0E5821E46^-2'
'5CFC7AFFEF71B8^0'
'-7221BCFFED6404^0'
'741F81002BDB0C^0'
'AE4BA600362F08^0'
'1711ECB0381A1B^-2'
'4238E1383F46B8^-2'
'196A8FBF51D08F^-2'
'5D907700187CF^0'
'-71BCB8FFFCAA28^0'
'7352D4000D651C^0'
'AEC636001047D8^0'
'170B9FA61583BB^-2'
'4217B155523FD4^-2'
'19760F895CC27B^-2'
'5E23E3001F4788^0'
'-715780FFCBA5FC^0'
'7285B800000DC^0'
'AF3F81FFEFC5E8^0'
'17161C016BEB46^-2'
'4210BFE77F9D64^-2'
'197AAF6E32DD68^-2'
'5EB6BD000E085^0'
'-70F1DA0019B3E4^0'
'71B7E600249308^0'
'AFB7DFFFD543D8^0'
'1705E3B991429B^-2'
'41EE1F7EC88FB^-2'
'1994D97E8FCB4D^-2'
'5F493E000B80A^0'
'-708C0FFFD0A5E4^0'
'70E9AC0036773^0'
'B02ED00028B1E^0'
'170BDB6D2595E3^-2'
'41C4AE0FBD63FC^-2'
'19D6EFD1FD623^-2'
'5FDBA100343B18^0'
'-70269DFFEBEF38^0'
'701A930001C064^0'
'B0A431FFD5AE6^0'
'16FBB7472D46FD^-2'
'4194090779A10C^-2'
'19CB0F7971492B^-2'
'606D290001ED1^0'
'-6FC0EDFFFA002^0'
'6F4B6D000F6DA8^0'
'B1184600291588^0'
'172FBF7D075F1A^-2'
'4184ECF1DCE4CC^-2'
'19BE34B5A3AE7B^-2'
'60FD96FFDA6CFC^0'
'-6F5B0A0035BA34^0'
'6E7B4EFFE8392C^0'
'B18BC0001F5A7^0'
'1713D293FA8EB^-2'
'4185431F2C38^-2'
'19A98B1C8C96EE^-2'
'618D7AFFDFFB7C^0'
'-6EF441FFD66EC8^0'
'6DAB0E0005CFC8^0'
'B1FE3BFFFF61F^0'
'16FDE2FEAE266C^-2'
'41710D006254EC^-2'
'199EBD8D9664A4^-2'
'621CC20005AD6C^0'
'-6E8CEA0030C9C4^0'
'6CDAA8FFFF595C^0'
'B26F920027801^0'
'16F581FF733A0B^-2'
'418129D539463^-2'
'198FC63AD9B9B8^-2'
'62AB860034AE34^0'
'-6E24AAFFFF7168^0'
'6C09CAFFCF1FE8^0'
'B2E01E000BB798^0'
'16E2E2D776477B^-2'
'4195E3FA20C25^-2'
'197B457F7CBD5C^-2'
'6339CEFFD62F38^0'
'-6DBB5FFFFF5B14^0'
'6B38950016761C^0'
'B34FDE002432D^0'
'16DCAC677F1629^-2'
'417A364E7B224^-2'
'198FF9EF0655D3^-2'
'63C7AAFFEC8B9^0'
'-6D51E9000412D^0'
'6A66E80029D28^0'
'B3BE55FFE88D58^0'
'16B9C39B88D7B9^-2'
'41FE9FAE2806E^-2'
'19C1C5BD584E^-2'
'6456A3FFE8C7C4^0'
'-6CE686FFF371A4^0'
'6993EA001704B^0'
'B42C36002175E^0'
'16D4A4C162D8C8^-2'
'415D1308C1A72^-2'
'198B7ECB38DD4F^-2'
'64E345FFD1777C^0'
'-6C7C2AFFD032C8^0'
'68C16D00051ED4^0'
'B49893FFE497C^0'
'16F010C50D5A68^-2'
'411864B955A4A4^-2'
'1973BA64E0017D^-2'
'656E80000972EC^0'
'-6C1204FFE30774^0'
'67EEAC0004A4D8^0'
'B503DFFFF79FF^0'
'16C60466597626^-2'
'40C3C8268A8D54^-2'
'1974DDFC6D038A^-2'
'65F8F5FFDEE374^0'
'-6BA80000293B5^0'
'671C5DFFDE9EBC^0'
'B56D69FFFFD358^0'
'16C1ADD3489E54^-2'
'408E4B3D454DA4^-2'
'19615CFDA11262^-2'
'66825FFFE596^0'
'-6B3DDF0022870C^0'
'664A0AFFD2219^0'
'B5D5C400153BB8^0'
'16C5E771658697^-2'
'4057C9132D1D0C^-2'
'194DD51E7486C5^-2'
'670AAFFFF71684^0'
'-6AD3B5FFD6BA6^0'
'65779FFFD24234^0'
'B63CFDFFE622E^0'
'16BA68B12260B3^-2'
'403AB4A9845908^-2'
'194D478D7BD8AC^-2'
'67925DFFD44FE8^0'
'-6A6942002E0CD4^0'
'64A501FFFAF0A4^0'
'B6A30A0027FBC8^0'
'16BC69706D6F09^-2'
'4009E83B342DDC^-2'
'1958258CD52AB5^-2'
'681955FFE365F^0'
'-69FEE5000FE958^0'
'63D219FFE5BBCC^0'
'B707CC001FEAC^0'
'16ABB76AD6B81F^-2'
'3FEC3A84C8C4EE^-2'
'196776BB8519C5^-2'
'689FE0FFF963C8^0'
'-699451002EC138^0'
'62FEF8001CD478^0'
'B76B3DFFEC9428^0'
'1697D5B4004286^-2'
'3FE7D1BF662202^-2'
'1952F3B77CB284^-2'
'6925C5FFEF881^0'
'-6929030025EFC8^0'
'622BBA00070504^0'
'B7CDC2002D30F^0'
'1697C214D7F517^-2'
'3FC2E9D791D136^-2'
'19497B8D77A6FA^-2'
'69AAD0FFF37BF4^0'
'-68BD8A001CD108^0'
'61584B000F8C94^0'
'B82F2E0000716^0'
'1693FB9825ABEF^-2'
'3F964AD7576B04^-2'
'194AFF253D0D4F^-2'
'6A1485DA9A3D9C^0'
'-6867B6EE62BA7^0'
'60AF54034C014^0'
'B87C149C7F50C^0'
'169100559FD6A7^-2'
'3F7D1D805BF804^-2'
'19473AE8DA7D8E^-2'
'8D09C70D596^B'
'8D09C78532^B'
'8D09C80532^B'
'8D09C88532^B'
'8D09C90532^B'
'8D09C98532^B'
'8D09CA0532^B'
'8D09CA8532^B'
'8D09CB0532^B'
'8D09CB8532^B'
'8D09CC0532^B'
'8D09CC8532^B'
'8D09CD0532^B'
'8D09CD8532^B'
'8D09CE0532^B'
'8D09CE8532^B'
'8D09CF0532^B'
'8D09CF8532^B'
'8D09D00532^B'
'8D09D08532^B'
'8D09D10532^B'
'8D09D18532^B'
'8D09D205315^B'
'8D09D285315^B'
'8D09D305315^B'
'8D09D385315^B'
'8D09D405315^B'
'8D09D485315^B'
'8D09D505315^B'
'8D09D585315^B'
'8D09D605315^B'
'8D09D685315^B'
'8D09D705315^B'
'8D09D785315^B'
'8D09D805315^B'
'8D09D86B6D5^B'
'8D09C70D596^B'
'1^1'
'24^2'
END_ARRAY 1 291
TOTAL_ARRAYS 1
 ~NAIF/SPC BEGIN COMMENTS~
This CK is for testing with the image: /home/kdlee/builds/ale/tests/pytests/data/h5270_0000_ir2/h5270_0000_ir2.cub

This CK was generated using the following command: {}
 ~NAIF/SPC END COMMENTS~
+1287 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading