Skip to content
Snippets Groups Projects
Select Git revision
  • 0e0f0650043b137a2a38a9ee6f08a0c0a043e9ea
  • main default protected
  • Kelvinrr-patch-3
  • radius_update
  • revert-616-apollo_pan
  • vims
  • 0.10
  • Kelvinrr-patch-2
  • revert-563-minirf_fix
  • Kelvinrr-patch-1
  • 0.9
  • acpaquette-patch-3
  • acpaquette-patch-2
  • acpaquette-patch-1
  • spiceql
  • ci-coverage
  • 0.10.0
  • 0.9.1
  • 0.9.0
  • 0.8.7
  • 0.8.8
  • 0.8.6
  • 0.8.3
  • 0.8.4
  • 0.8.5
  • 0.8.2
  • 0.8.1
  • 0.8.0
  • 0.7.3
  • 0.7.2
  • 0.7.1
  • 0.7.0
  • 0.6.5
  • 0.6.4
  • 0.6.3
  • 0.6.2
36 results

test_lro_drivers.py

Blame
    • Jesse Mapel's avatar
      0e0f0650
      Updated LRO test (#262) · 0e0f0650
      Jesse Mapel authored
      * Moved SPK dependency tree logic to utils
      
      * More tests
      
      * Added ck frame function
      
      * updated notebook
      
      * Updated notebook
      
      * Added LRO NAC data
      
      * Updated notebook
      
      * Added new LRO test
      
      * Updated kernel slicing and sun LT
      
      * Updated tests and regenerates kaguya and MRO kernels
      
      * moved comparison ISD to fixture and fixed patch
      0e0f0650
      History
      Updated LRO test (#262)
      Jesse Mapel authored
      * Moved SPK dependency tree logic to utils
      
      * More tests
      
      * Added ck frame function
      
      * updated notebook
      
      * Updated notebook
      
      * Added LRO NAC data
      
      * Updated notebook
      
      * Added new LRO test
      
      * Updated kernel slicing and sun LT
      
      * Updated tests and regenerates kaguya and MRO kernels
      
      * moved comparison ISD to fixture and fixed patch
    test_lro_drivers.py 6.32 KiB
    import pytest
    import numpy as np
    import os
    from unittest.mock import PropertyMock, patch
    
    import ale
    from ale import util
    from ale.drivers import lro_drivers
    from ale.drivers.lro_drivers import LroLrocPds3LabelNaifSpiceDriver
    
    from conftest import get_image_label, get_image_kernels, convert_kernels, compare_dicts
    
    @pytest.fixture()
    def test_kernels():
        kernels = get_image_kernels('M103595705LE')
        updated_kernels, binary_kernels = convert_kernels(kernels)
        yield updated_kernels
        for kern in binary_kernels:
            os.remove(kern)
    
    @pytest.fixture(params=["Pds3NaifDriver"])
    def driver(request):
        if request.param == "Pds3NaifDriver":
            label = get_image_label("M103595705LE", "pds3")
            return LroLrocPds3LabelNaifSpiceDriver(label)
    
    @pytest.fixture()
    def usgscsm_comparison_isd():
        return {
            'radii': {
                'semimajor': 1737.4,
                'semiminor': 1737.4,
                'unit': 'km'},
            'sensor_position': {
                'positions': np.array([[-1207231.46307793,   995625.53174743,  1053981.26081487],
                                       [-1207284.70256369,   995671.36239502,  1053869.44545937],
                                       [-1207337.93600499,   995717.18809878,  1053757.62484255],
                                       [-1207391.16336313,   995763.00882545,  1053645.79904556],
                                       [-1207444.38471462,   995808.82464074,  1053533.96790769],
                                       [-1207497.60002076,   995854.63551139,  1053422.13151007]]),
                'velocities': np.array([[ -644.00247387,   554.38114107, -1352.44702294],
                                        [ -643.92936421,   554.32134372, -1352.51066509],
                                        [ -643.85625085,   554.26154319, -1352.57430092],
                                        [ -643.78313387,   554.20173949, -1352.63793037],
                                        [ -643.71001314,   554.14193256, -1352.70155355],
                                        [ -643.63688874,   554.08212243, -1352.76517038]]),
                'unit': 'm'},
            'sun_position': {
                'positions': np.array([[3.21525248e+10, 1.48548292e+11, -5.42339533e+08]]),
                'velocities': np.array([[366615.76978428, -78679.46821947, -787.76505647]]),
                'unit': 'm'},
            'sensor_orientation': {
                'quaternions': np.array([[ 0.83106252, -0.29729751,  0.44741172,  0.14412506],
                                         [ 0.83104727, -0.29729165,  0.44744078,  0.14413484],
                                         [ 0.83103181, -0.29728538,  0.44747013,  0.14414582],
                                         [ 0.83101642, -0.29727968,  0.44749888,  0.14415708],
                                         [ 0.83100113, -0.29727394,  0.44752759,  0.1441679 ],
                                         [ 0.8309859 , -0.29726798,  0.44755647,  0.14417831]])},
            'detector_sample_summing': 1,
            'detector_line_summing': 1,
            'focal_length_model': {
                'focal_length': 699.62},
            'detector_center': {
                'line': 0.0,
                'sample': 2547.5},
            'starting_detector_line': 0,
            'starting_detector_sample': 0,
            'focal2pixel_lines': [0.0, 142.857, 0.0],
            'focal2pixel_samples': [0.0, 0.0, 142.857],
            'optical_distortion': {
                'lrolrocnac': {
                    'coefficients': [1.81e-05]}},
            'image_lines': 400,
            'image_samples': 5064,
            'name_platform': 'LUNAR RECONNAISSANCE ORBITER',
            'name_sensor': 'LUNAR RECONNAISSANCE ORBITER CAMERA',
            'reference_height': {
                'maxheight': 1000,
                'minheight': -1000,
                'unit': 'm'},
            'name_model': 'USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL',
            'interpolation_method': 'lagrange',
            'line_scan_rate': [[0.5, -0.20668596029281616, 0.0010334295999999998]],
            'starting_ephemeris_time': 302228504.36824864,
            'center_ephemeris_time': 302228504.5749346,
            't0_ephemeris': -0.20668596029281616,
            'dt_ephemeris': 0.08267437219619751,
            't0_quaternion': -0.20668596029281616,
            'dt_quaternion': 0.08267437219619751}
    
    def test_short_mission_name(driver):
        assert driver.short_mission_name=='lro'
    
    def test_instrument_id_left(driver):
        driver.label['FRAME_ID'] = 'LEFT'
        assert driver.instrument_id == 'LRO_LROCNACL'
    
    def test_instrument_id_right(driver):
        driver.label['FRAME_ID'] = 'RIGHT'
        assert driver.instrument_id == 'LRO_LROCNACR'
    
    def test_spacecraft_name(driver):
        assert driver.spacecraft_name == 'LRO'
    
    def test_sensor_model_version(driver):
        assert driver.sensor_model_version == 2
    
    def test_odtk(driver):
        with patch('ale.drivers.lro_drivers.spice.gdpool', return_value=np.array([1.0])) as gdpool, \
             patch('ale.drivers.lro_drivers.spice.bods2c', return_value=-12345) as bods2c:
            assert driver.odtk == [1.0]
            gdpool.assert_called_with('INS-12345_OD_K', 0, 1)
    
    def test_usgscsm_distortion_model(driver):
        with patch('ale.drivers.lro_drivers.LroLrocPds3LabelNaifSpiceDriver.odtk', \
                   new_callable=PropertyMock) as odtk:
            odtk.return_value = [1.0]
            distortion_model = driver.usgscsm_distortion_model
            assert distortion_model['lrolrocnac']['coefficients'] == [1.0]
    
    def test_ephemeris_start_time(driver):
        with patch('ale.drivers.lro_drivers.spice.scs2e', return_value=5) as scs2e, \
             patch('ale.drivers.lro_drivers.LroLrocPds3LabelNaifSpiceDriver.exposure_duration', \
                   new_callable=PropertyMock) as exposure_duration, \
             patch('ale.drivers.lro_drivers.LroLrocPds3LabelNaifSpiceDriver.spacecraft_id', \
                   new_callable=PropertyMock) as spacecraft_id:
            exposure_duration.return_value = 0.1
            spacecraft_id.return_value = 1234
            assert driver.ephemeris_start_time == 107.4
            scs2e.assert_called_with(1234, "1/270649237:07208")
    
    def test_exposure_duration(driver):
        with patch('ale.base.label_pds3.Pds3Label.exposure_duration', \
                   new_callable=PropertyMock) as exposure_duration:
            exposure_duration.return_value = 1
            assert driver.exposure_duration == 1.0045
    
    def test_load(test_kernels, usgscsm_comparison_isd):
        label_file = get_image_label('M103595705LE')
        usgscsm_isd = ale.load(label_file, props={'kernels': test_kernels}, formatter='usgscsm')
        assert compare_dicts(usgscsm_isd, usgscsm_comparison_isd) == []