Commit bf720ec2 authored by jlaura's avatar jlaura Committed by Jesse Mapel
Browse files

Initial stab at PDS3 NAIF CTX (#171)

* Initial stab at PDS3 NAIF CTX

* Update for comments

* updates tests
parent 56f1b361
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner,
        return "MRO"


class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, RadialDistortion):
class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, NaifSpice, LineScanner, RadialDistortion, Driver):
    """
    Driver for reading CTX PDS3 labels. Requires a Spice mixin to acquire addtional
    ephemeris and instrument data located exclusively in spice kernels.
@@ -111,7 +111,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner,
        if not hasattr(self, '_metakernel'):
            self._metakernel = None
            for mk in mks:
                if str(self.start_time.year) in os.path.basename(mk):
                if str(self.utc_start_time.year) in os.path.basename(mk):
                    self._metakernel = mk
        return self._metakernel

@@ -131,7 +131,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner,
            'CONTEXT CAMERA':'MRO_CTX'
        }

        return id_lookup[self.label['INSTRUMENT_NAME']]
        return id_lookup[super().instrument_id]

    @property
    def spacecraft_name(self):
@@ -147,4 +147,16 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner,
        name_lookup = {
            'MARS_RECONNAISSANCE_ORBITER': 'MRO'
        }
        return name_lookup[self.label['SPACECRAFT_NAME']]
        return name_lookup[super().spacecraft_name]

    @property
    def detector_start_line(self):
        return 1

    @property
    def detector_start_sample(self):
        return self.label.get('SAMPLE_FIRST_PIXEL', 0)
    
    @property
    def sensor_model_version(self):
        return 1
+21 −52
Original line number Diff line number Diff line
from unittest.mock import patch

import pytest

import ale
@@ -19,58 +21,25 @@ from ale.drivers.mro_drivers import MroCtxPds3LabelNaifSpiceDriver
MroCtxPds3LabelNaifSpiceDriver.metakernel = get_mockkernels

@pytest.fixture
def mroctx_label():
    return """
    PDS_VERSION_ID = PDS3
    FILE_NAME = "D10_031011_1864_XI_06N201W.IMG"
    RECORD_TYPE = FIXED_LENGTH
    RECORD_BYTES = 5056
    FILE_RECORDS = 7169
    LABEL_RECORDS = 1
    ^IMAGE = 2
    SPACECRAFT_NAME = MARS_RECONNAISSANCE_ORBITER
    INSTRUMENT_NAME = "CONTEXT CAMERA"
    INSTRUMENT_HOST_NAME = "MARS RECONNAISSANCE ORBITER"
    MISSION_PHASE_NAME = "ESP"
    TARGET_NAME = MARS
    INSTRUMENT_ID = CTX
    PRODUCER_ID = MRO_CTX_TEAM
    DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0"
    PRODUCT_CREATION_TIME = 2013-08-27T20:37:16
    SOFTWARE_NAME = "makepds05 $Revision: 1.16 $"
    UPLOAD_ID = "UNK"
    ORIGINAL_PRODUCT_ID = "4A_04_109D009200"
    PRODUCT_ID = "D10_031011_1864_XI_06N201W"
    START_TIME = 2013-03-08T21:38:44.237
    STOP_TIME = 2013-03-08T21:38:57.689
    SPACECRAFT_CLOCK_START_COUNT = "1047245959:234"
    SPACECRAFT_CLOCK_STOP_COUNT = "N/A"
    FOCAL_PLANE_TEMPERATURE = 298.0 <K>
    SAMPLE_BIT_MODE_ID = "SQROOT"
    OFFSET_MODE_ID = "196/234/217"
    LINE_EXPOSURE_DURATION = 1.877 <MSEC>
    SAMPLING_FACTOR = 1
    SAMPLE_FIRST_PIXEL = 0
    RATIONALE_DESC = "Dark slope streak monitor in MOC SP1-25706 and E05-01077 and others"
    DATA_QUALITY_DESC = "OK"
    ORBIT_NUMBER = 31011
    OBJECT = IMAGE
    LINES = 7168
    LINE_SAMPLES = 5056
    LINE_PREFIX_BYTES = 0
    LINE_SUFFIX_BYTES = 0
    SAMPLE_TYPE = UNSIGNED_INTEGER
    SAMPLE_BITS = 8
    SAMPLE_BIT_MASK = 2#11111111#
    CHECKSUM = 16#0C902B7F#
    END_OBJECT = IMAGE
    END"""
def driver():
    return MroCtxPds3LabelNaifSpiceDriver("")

@patch('ale.base.label_pds3.Pds3Label.instrument_id', 'CONTEXT CAMERA')
def test_instrument_id(driver):
    assert driver.instrument_id == 'MRO_CTX'

@patch('ale.base.label_pds3.Pds3Label.spacecraft_name', 'MARS_RECONNAISSANCE_ORBITER')
def test_spacecraft_name(driver):
    assert driver.spacecraft_name == 'MRO'

def test_detector_start_line(driver):
    assert driver.detector_start_line == 1

def test_ctx_creation(mroctx_label):
    #with MroCtxPds3LabelNaifSpiceDriver(mroctx_label) as m:
    #    d = m.to_dict()
    #assert isinstance(d, dict)
def test_detector_start_sample(driver):
    # I am not sure how to accomplish this with a fixture and
    # a decorator. Therefore, using a context
    with patch.dict(driver.label, SAMPLE_FIRST_PIXEL=0) as f:
        assert driver.detector_start_sample == 0

    # Need to insert new tests here, one for each property unique to this driver
    assert True
def test_sensor_model_version(driver):
    assert driver.sensor_model_version == 1