Skip to content
Snippets Groups Projects
Select Git revision
  • 516ba90b9882f3d1a6aec64f5614c65f0b8a5f1e
  • 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
      516ba90b
      Updated MDIS test to use portions of actual kernels and an actual image label (#249) · 516ba90b
      Jesse Mapel authored
      * Sample MDIS test
      
      * All tests at least running
      
      * Tests now passing with relative paths
      
      * Removed leftover code
      
      * Removed leftover code
      
      * added DS_Store to gitignore
      
      * added binary kernels to git ignore
      
      * Moved getting kernels and converting to binary to conftest
      
      * Updated after merge from upstream
      
      * Fixed multiple assignment
      
      * Removed extra slice assignment
      
      * Cleaned up convert_kernels
      516ba90b
      History
      Updated MDIS test to use portions of actual kernels and an actual image label (#249)
      Jesse Mapel authored
      * Sample MDIS test
      
      * All tests at least running
      
      * Tests now passing with relative paths
      
      * Removed leftover code
      
      * Removed leftover code
      
      * added DS_Store to gitignore
      
      * added binary kernels to git ignore
      
      * Moved getting kernels and converting to binary to conftest
      
      * Updated after merge from upstream
      
      * Fixed multiple assignment
      
      * Removed extra slice assignment
      
      * Cleaned up convert_kernels
    SarTests.cpp 5.67 KiB
    #define _USE_MATH_DEFINES
    
    #include "UsgsAstroSarSensorModel.h"
    
    #include "Fixtures.h"
    #include "Warning.h"
    
    #include <gtest/gtest.h>
    #include <nlohmann/json.hpp>
    
    #include <math.h>
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using json = nlohmann::json;
    
    TEST_F(SarSensorModel, stateFromIsd) {
      std::ifstream isdFile("data/orbitalSar.json");
      json isdJson;
      isdFile >> isdJson;
      std::string isdString = isdJson.dump();
      csm::WarningList warnings;
      std::string stateString;
      try {
        stateString = sensorModel->constructStateFromIsd(isdString, &warnings);
      } catch (...) {
        for (auto &warn : warnings) {
          std::cerr << "Warning in " << warn.getFunction() << std::endl;
          std::cerr << "  " << warn.getMessage() << std::endl;
        }
        FAIL() << "constructStateFromIsd errored";
      }
      EXPECT_TRUE(warnings.empty());
    }
    
    TEST_F(SarSensorModel, State) {
      std::string modelState = sensorModel->getModelState();
      EXPECT_NO_THROW(sensorModel->replaceModelState(modelState));
      EXPECT_EQ(sensorModel->getModelState(), modelState);
    }
    
    TEST_F(SarSensorModel, Center) {
      csm::ImageCoord imagePt(500.0, 500.0);
      csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0);
      EXPECT_NEAR(groundPt.x, 1737387.8671710272, 1e-3);
      EXPECT_NEAR(groundPt.y, -5300.6282306119301, 1e-3);
      EXPECT_NEAR(groundPt.z, -3749.9796183814506, 1e-3);
    }
    
    TEST_F(SarSensorModel, GroundToImage) {
      csm::EcefCoord groundPt(1737387.8671710272, -5300.6282306119301, -3749.9796358514604);
      csm::ImageCoord imagePt = sensorModel->groundToImage(groundPt, 0.001);
      EXPECT_NEAR(imagePt.line, 500.0, 1e-3);
      EXPECT_NEAR(imagePt.samp, 500.0, 1e-3);
    }
    
    TEST_F(SarSensorModel, spacecraftPosition) {
      csm::EcefVector position = sensorModel->getSpacecraftPosition(-0.0025);
      EXPECT_NEAR(position.x, 3.73740000e+06, 1e-8);
      EXPECT_NEAR(position.y, 0.00000000e+00, 1e-8);
      EXPECT_NEAR(position.z, 0.00000000e+00, 1e-8);
    }
    
    TEST_F(SarSensorModel, spacecraftVelocity) {
      csm::EcefVector velocity = sensorModel->getSensorVelocity(-0.0025);
      EXPECT_NEAR(velocity.x, 0.00000000e+00, 1e-8);
      EXPECT_NEAR(velocity.y, 0.00000000e+00, 1e-8);
      EXPECT_NEAR(velocity.z, -3.73740000e+06, 1e-8);
    }
    
    TEST_F(SarSensorModel, getRangeCoefficients) {
      std::vector<double> coeffs = sensorModel->getRangeCoefficients(-0.0025);
      EXPECT_NEAR(coeffs[0], 2000000.0, 1e-8);
      EXPECT_NEAR(coeffs[1], 0.0040333608396661775, 1e-8);
      EXPECT_NEAR(coeffs[2], 0.0, 1e-8);
      EXPECT_NEAR(coeffs[3], 0.0, 1e-8);
    }
    
    TEST_F(SarSensorModel, computeGroundPartials) {
      csm::EcefCoord groundPt(1737400.0, 0.0, 0.0);
      std::vector<double> partials = sensorModel->computeGroundPartials(groundPt);
      ASSERT_EQ(partials.size(), 6);
      EXPECT_NEAR(partials[0], 6.5128150576280552e-09, 1e-8);
      EXPECT_NEAR(partials[1], -5.1810407815840636e-15, 1e-8);
      EXPECT_NEAR(partials[2], -0.13333333443071135, 1e-8);
      EXPECT_NEAR(partials[3], -33.057625791698072, 1e-8);
      EXPECT_NEAR(partials[4], 6.1985123841926308e-05, 1e-8);
      EXPECT_NEAR(partials[5], 0.0077565105243007169, 1e-8);
    }
    
    TEST_F(SarSensorModel, imageToProximateImagingLocus) {
      double precision;
      csm::WarningList warnings;
      csm::EcefLocus locus = sensorModel->imageToProximateImagingLocus(
          csm::ImageCoord(500.0, 500.0),
          csm::EcefCoord(1737287.8590770673, -5403.280537826621,
                         -3849.9796183814506),
          0.001,
          &precision,
          &warnings);
      EXPECT_NEAR(locus.point.x, 1737388.1411342232, 1e-2);
      EXPECT_NEAR(locus.point.y, -5403.0102509726485, 1e-2);
      EXPECT_NEAR(locus.point.z, -3749.9801945280433, 1e-2);
      EXPECT_NEAR(locus.direction.x, 0.002701478402694769, 1e-5);
      EXPECT_NEAR(locus.direction.y, -0.9999963509835628, 1e-5);
      EXPECT_NEAR(locus.direction.z, -5.830873570731962e-06, 1e-5);
      EXPECT_LT(precision, 0.001);
      EXPECT_TRUE(warnings.empty());
    }
    
    TEST_F(SarSensorModel, imageToRemoteImagingLocus) {
      double precision;
      csm::WarningList warnings;
      csm::ImageCoord imagePt(500.0, 500.0);
      csm::EcefLocus locus = sensorModel->imageToRemoteImagingLocus(
          imagePt,
          0.001,
          &precision,
          &warnings);
    
      csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0);
      csm::EcefCoord sensorPt = sensorModel->getSensorPosition(imagePt);
    
      double lookX = groundPt.x - sensorPt.x;
      double lookY = groundPt.y - sensorPt.y;
      double lookZ = groundPt.z - sensorPt.z;
      double lookMag = sqrt(lookX * lookX + lookY * lookY + lookZ * lookZ);
      lookX /= lookMag;
      lookY /= lookMag;
      lookZ /= lookMag;
    
      EXPECT_NEAR(locus.direction.x, lookX, 1e-10);
      EXPECT_NEAR(locus.direction.y, lookY, 1e-10);
      EXPECT_NEAR(locus.direction.z, lookZ, 1e-10);
    
      EXPECT_LT(precision, 0.001);
      EXPECT_TRUE(warnings.empty());
    }
    
    TEST_F(SarSensorModel, adjustedPositionVelocity) {
      std::vector<double> adjustments = {1000000.0, 0.2, -10.0,
                                         -20.0,     0.5, 2000000.0};
      csm::EcefCoord sensorPosition = sensorModel->getSensorPosition(0.0);
      csm::EcefVector sensorVelocity = sensorModel->getSensorVelocity(0.0);
      csm::EcefCoord adjPosition =
          sensorModel->getAdjustedSensorPosition(0.0, adjustments);
      csm::EcefVector adjVelocity =
          sensorModel->getAdjustedSensorVelocity(0.0, adjustments);
    
      EXPECT_NEAR(adjPosition.x, sensorPosition.x + adjustments[0], 1e-2);
      EXPECT_NEAR(adjPosition.y, sensorPosition.y + adjustments[1], 1e-2);
      EXPECT_NEAR(adjPosition.z, sensorPosition.z + adjustments[2], 1e-2);
      EXPECT_NEAR(adjVelocity.x, sensorVelocity.x + adjustments[3], 1e-8);
      EXPECT_NEAR(adjVelocity.y, sensorVelocity.y + adjustments[4], 1e-8);
      EXPECT_NEAR(adjVelocity.z, sensorVelocity.z + adjustments[5], 1e-2);
    }
    
    TEST_F(SarSensorModel, ReferenceDateTime) {
      std::string date = sensorModel->getReferenceDateAndTime();
      EXPECT_EQ(date, "2000-01-01T00:00:04Z");
    }