Commit 885f9ef9 authored by paarongiroux's avatar paarongiroux Committed by Jesse Mapel
Browse files

Updated MroCtxIsisLabelNaifSpiceDriver and Tests (#183)

* mro isis naif driver update and tests

* added docstring

* fixed docstring
parent 3dbad619
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -134,3 +134,15 @@ class IsisLabel():
            # if no units are available, assume the exposure duration is given in milliseconds
            exposure_duration = self.label['IsisCube']['Instrument']['ExposureDuration'].value * 0.001
        return exposure_duration

    @property
    def line_exposure_duration(self):
        """
        The line exposure duration of the image, in seconds

        Returns
        -------
        : float
          Line exposure duration in seconds
        """
        return self.label['IsisCube']['Instrument']['LineExposureDuration'] * 0.001 # scale to seconds
+45 −9
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ class MroCtxIsisLabelIsisSpiceDriver(Driver, IsisSpice, LineScanner, RadialDisto
        return self.label["IsisCube"]["Instrument"]["LineExposureDuration"].value * 0.001 # Scale to seconds


class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner, RadialDistortion):
class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, NaifSpice, LineScanner, RadialDistortion, Driver):
    """
    Driver for reading CTX ISIS labels.
    """
@@ -70,7 +70,20 @@ class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner,

    @property
    def instrument_id(self):
        return "MRO_CTX"
        """
        Returns an instrument id for uniquely identifying the instrument, but often
        also used to be piped into Spice Kernels to acquire IKIDs. Therefore they
        the same ID the Spice expects in bods2c calls.

        Returns
        -------
        : str
          instrument id
        """
        id_lookup = {
        "CTX" : "MRO_CTX"
        }
        return id_lookup[super().instrument_id]

    @property
    def ephemeris_start_time(self):
@@ -80,15 +93,38 @@ class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner,
        return self._ephemeris_start_time

    @property
    def line_exposure_duration(self):
        if not hasattr(self, '_line_exposure_duration'):
            self._line_exposure_duration = self.label['IsisCube']['Instrument']['LineExposureDuration'].value * 0.001
        return self._line_exposure_duration
    def spacecraft_name(self):
        """
        Returns the spacecraft name used in various Spice calls to acquire
        ephemeris data.

        Returns
        -------
        : str
          spacecraft name
        """
        name_lookup = {
            'Mars_Reconnaissance_Orbiter': 'MRO'
        }
        return name_lookup[super().platform_name]

    @property
    def spacecraft_name(self):
        return "MRO"
    def detector_start_line(self):
        return 1

    @property
    def detector_start_sample(self):
        return self.label['IsisCube']['Instrument']['SampleFirstPixel']

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

class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, NaifSpice, LineScanner, RadialDistortion, Driver):
    """
+5 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ DpuId = DPU-A
PivotAngle            = -18.805847167969 <Degrees>
Unlutted              = 1
LutInversionTable     = $messenger/calibration/LUT_INVERT/MDISLUTINV_0.TAB
# added to allow for testing
LineExposureDuration  = 1000
End_Group

Group = Archive
@@ -132,3 +134,6 @@ def test_platform_name(test_cube_label):

def test_sensor_name(test_cube_label):
    assert test_cube_label.sensor_name.lower() == "mercury dual imaging system narrow angle camera"

def test_line_exposure_duration(test_cube_label):
    assert test_cube_label.line_exposure_duration == 1
+42 −12
Original line number Diff line number Diff line
@@ -17,29 +17,59 @@ mro_drivers.spice = simplespice
label_pds3.spice = simplespice

from ale.drivers.mro_drivers import MroCtxPds3LabelNaifSpiceDriver
from ale.drivers.mro_drivers import MroCtxIsisLabelNaifSpiceDriver

MroCtxPds3LabelNaifSpiceDriver.metakernel = get_mockkernels

@pytest.fixture
def driver():
def Pds3NaifDriver():
    return MroCtxPds3LabelNaifSpiceDriver("")

@pytest.fixture
def IsisLabelNaifDriver():
    return MroCtxIsisLabelNaifSpiceDriver("")

@patch('ale.base.label_pds3.Pds3Label.instrument_id', 'CONTEXT CAMERA')
def test_instrument_id(driver):
    assert driver.instrument_id == 'MRO_CTX'
def test_instrument_id_pds3(Pds3NaifDriver):
    assert Pds3NaifDriver.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_spacecraft_name_pds3(Pds3NaifDriver):
    assert Pds3NaifDriver.spacecraft_name == 'MRO'

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

def test_detector_start_sample(driver):
def test_detector_start_sample_pds3(Pds3NaifDriver):
    # 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
    with patch.dict(Pds3NaifDriver.label, SAMPLE_FIRST_PIXEL=0) as f:
        assert Pds3NaifDriver.detector_start_sample == 0

def test_sensor_model_version_pds3(Pds3NaifDriver):
    assert Pds3NaifDriver.sensor_model_version == 1

@patch('ale.base.label_isis.IsisLabel.instrument_id', 'CTX')
def test_instrument_id_isis(IsisLabelNaifDriver):
    assert IsisLabelNaifDriver.instrument_id == 'MRO_CTX'

@patch('ale.base.label_isis.IsisLabel.platform_name', 'Mars_Reconnaissance_Orbiter')
def test_spacecraft_name_isis(IsisLabelNaifDriver):
    assert IsisLabelNaifDriver.spacecraft_name == 'MRO'

@patch('ale.base.label_isis.IsisLabel.platform_name', 'Mars_Reconnaissance_Orbiter')
def test_ephemeris_start_time_isis(IsisLabelNaifDriver):
    with patch.dict(IsisLabelNaifDriver.label, {'IsisCube' : {'Instrument' :
        {'SpacecraftClockCount' : 800}}}) as f:
        assert IsisLabelNaifDriver.ephemeris_start_time == 0.1

def test_detector_start_line_isis(IsisLabelNaifDriver):
    assert IsisLabelNaifDriver.detector_start_line == 1

def test_detector_start_sample_isis(IsisLabelNaifDriver):
    with patch.dict(IsisLabelNaifDriver.label, {'IsisCube' : {'Instrument' :
        {'SampleFirstPixel' : 0}}}) as f:
        assert IsisLabelNaifDriver.detector_start_sample == 0

def test_sensor_model_version(driver):
    assert driver.sensor_model_version == 1
def test_sensor_model_version_isis(IsisLabelNaifDriver):
    assert IsisLabelNaifDriver.sensor_model_version == 1