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

Added support for variable exposure rate and HRSC (#25)

* Added HRSC ISD

* Changed integration time in line scan state data.

* Added support for changed line scan state in line scan plugin

* Finished implemented HRSC support

* Fixed ctx state test file

* Fixed a bug where ls state data would have an extra int time entry.

* Added state file for HRSC test

* Added simple HRSC initialization test

* fixed tab spacing in ctx test state

* Fixed half line timing issue with CTX line scan model

* Fixed HRSC test ISD

* Removed image flip from line scan time calculations

* Fixed timing in line scan model

* Fixed timing issue with constant scan rate cameras

* Turned on HRSC test

* Updated HRSC state JSON file

* Added HRSC plugin testing

* Fixed typo in pixel to camera x, y calculation.

* Added HRSC ground to image tests

* Added new HRSC test data

* Added better HRSC tests. Now does forward, aft, and nadir.

* Moved HRSC test fixtures into genericls test file.
parent 4a69e010
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -85,7 +85,9 @@ class UsgsAstroLsStateData
   int          m_PlatformFlag;                   // 7
   int          m_AberrFlag;                      // 8
   int          m_AtmRefFlag;                     // 9
   double       m_IntTime;                        // 10
   std::vector<double> m_IntTimeLines;
   std::vector<double> m_IntTimeStartTimes;
   std::vector<double> m_IntTimes;
   double       m_StartingEphemerisTime;          // 11
   double       m_CenterEphemerisTime;            // 12
   double       m_DetectorSampleSumming;          // 13
@@ -151,7 +153,9 @@ class UsgsAstroLsStateData
       STA_PLATFORM_FLAG,
       STA_ABERR_FLAG,
       STA_ATMREF_FLAG,
       STA_INT_TIME,
       STA_INT_TIME_LINES,
       STA_INT_TIME_START_TIMES,
       STA_INT_TIMES,
       STA_STARTING_EPHEMERIS_TIME,
       STA_CENTER_EPHEMERIS_TIME,
       STA_DETECTOR_SAMPLE_SUMMING,
+17 −2
Original line number Diff line number Diff line
@@ -108,7 +108,9 @@ const std::string UsgsAstroLsPlugin::mSTATE_KEYWORDS[] =
   "STA_PLATFORM_FLAG",
   "STA_ABERR_FLAG",
   "STA_ATMREF_FLAG",
   "STA_INT_TIME",
   "STA_INT_TIME_LINES",
   "STA_INT_TIME_START_TIMES",
   "STA_INT_TIMES",
   "STA_STARTING_EPHEMERIS_TIME",
   "STA_CENTER_EPHEMERIS_TIME",
   "STA_DETECTOR_SAMPLE_SUMMING",
@@ -421,9 +423,22 @@ std::string UsgsAstroLsPlugin::convertISDToModelState(
   state.m_PlatformFlag = atoi(image_support_data.param("PLATFORM").c_str());
   state.m_AberrFlag = atoi(image_support_data.param("ABERR").c_str());
   state.m_AtmRefFlag = atoi(image_support_data.param("ATMREF").c_str());
   state.m_IntTime = atof(image_support_data.param("INT_TIME").c_str());
   state.m_StartingEphemerisTime = atof(image_support_data.param("STARTING_EPHEMERIS_TIME").c_str());
   state.m_CenterEphemerisTime = atof(image_support_data.param("CENTER_EPHEMERIS_TIME").c_str());
   if (image_support_data.param("NUMBER_OF_INT_TIMES").empty()) {
     state.m_IntTimeLines = {0.5};
     state.m_IntTimeStartTimes = {state.m_StartingEphemerisTime - state.m_CenterEphemerisTime};
     state.m_IntTimes = {atof(image_support_data.param("INT_TIME").c_str())};
   }
   else {
     int numIntTimes = atoi(image_support_data.param("NUMBER_OF_INT_TIMES").c_str());
     for (int i = 0; i < numIntTimes; i++) {
       state.m_IntTimeLines.push_back(atof(image_support_data.param("INT_TIME", i*3).c_str()));
       state.m_IntTimeStartTimes.push_back(atof(image_support_data.param("INT_TIME", i*3 + 1).c_str()));
       state.m_IntTimes.push_back(atof(image_support_data.param("INT_TIME", i*3 + 2).c_str()));
     }
   }
   state.m_CenterEphemerisTime = atof(image_support_data.param("CENTER_EPHEMERIS_TIME").c_str());
   state.m_DetectorSampleSumming = atoi(image_support_data.param("DETECTOR_SAMPLE_SUMMING").c_str());
   state.m_StartingSample = atoi(image_support_data.param("STARTING_SAMPLE").c_str());
   state.m_IkCode = atoi(image_support_data.param("IKCODE").c_str());
+18 −10
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include "genericls/UsgsAstroLsSensorModel.h"

#include <algorithm>
#include <iostream>
#include <sstream>
#include <math.h>
@@ -108,7 +109,9 @@ void UsgsAstroLsSensorModel::updateState()
   _data.m_HalfSwath = _data.m_Gsd * _data.m_TotalSamples / 2.0;

   // Compute half time duration
   _data.m_HalfTime = _data.m_IntTime * _data.m_TotalLines / 2.0;
   double fullImageTime = _data.m_IntTimeStartTimes.back() - _data.m_IntTimeStartTimes.front()
                          + _data.m_IntTimes.back() * (_data.m_TotalLines - _data.m_IntTimeLines.back());
   _data.m_HalfTime = fullImageTime / 2.0;

   // Parameter covariance, hardcoded accuracy values
   int num_params = _data.NUM_PARAMETERS;
@@ -870,8 +873,6 @@ double UsgsAstroLsSensorModel::getImageTime(
{
   // Flip image taken backwards
   double line1 = image_pt.line;
   if (_data.m_ImageFlipFlag == 1)
      line1 = _data.m_TotalLines - 1 - image_pt.line;

   // CSM image convention: UL pixel center == (0.5, 0.5)
   // USGS image convention: UL pixel center == (1.0, 1.0)
@@ -879,13 +880,20 @@ double UsgsAstroLsSensorModel::getImageTime(
   double lineCSMFull = line1 + _data.m_OffsetLines;
   double lineUSGSFull = lineCSMFull + 0.5;

   // USGS timing reference leftmost-side 1st full row
   double timeUsgs = _data.m_IntTime * (lineUSGSFull - 0.5)
      + _data.m_StartingEphemerisTime;
   // These calculation assumes that the values in the integration time
   // vectors are in terms of ISIS' pixels
   auto referenceLineIt = std::upper_bound(_data.m_IntTimeLines.begin(),
                                           _data.m_IntTimeLines.end(),
                                           lineUSGSFull);
   if (referenceLineIt != _data.m_IntTimeLines.begin()) {
      --referenceLineIt;
   }
   size_t referenceIndex = std::distance(_data.m_IntTimeLines.begin(), referenceLineIt);

   double time = _data.m_IntTimeStartTimes[referenceIndex]
      + _data.m_IntTimes[referenceIndex] * (lineUSGSFull - _data.m_IntTimeLines[referenceIndex]);

   // Translate time origin to image geometric center
   // Same as ephemeris and attitude time origin
   return timeUsgs - _data.m_CenterEphemerisTime;
   return time;

}

@@ -1355,7 +1363,7 @@ void UsgsAstroLsSensorModel::losToEcf(
   double p12 = -m12 / determinant;
   double p21 = -m21 / determinant;
   double p22 = m22 / determinant;
   double isisNatFocalPlaneX = p11 * t1 + p21 * t2;
   double isisNatFocalPlaneX = p11 * t1 + p12 * t2;
   double isisNatFocalPlaneY = p21 * t1 + p22 * t2;

   // Remove lens distortion
+30 −5
Original line number Diff line number Diff line
@@ -72,7 +72,9 @@ const std::string UsgsAstroLsStateData::STATE_KEYWORD[] =
   "STA_PLATFORM_FLAG",
   "STA_ABERR_FLAG",
   "STA_ATMREF_FLAG",
   "STA_INT_TIME",
   "STA_INT_TIME_LINES",
   "STA_INT_TIME_START_TIMES",
   "STA_INT_TIMES",
   "STA_STARTING_EPHEMERIS_TIME",
   "STA_CENTER_EPHEMERIS_TIME",
   "STA_DETECTOR_SAMPLE_SUMMING",
@@ -147,7 +149,9 @@ std::string UsgsAstroLsStateData::toJson() const {
        {STATE_KEYWORD[STA_PLATFORM_FLAG], m_PlatformFlag},
        {STATE_KEYWORD[STA_ABERR_FLAG], m_AberrFlag},
        {STATE_KEYWORD[STA_ATMREF_FLAG], m_AtmRefFlag},
        {STATE_KEYWORD[STA_INT_TIME], m_IntTime},
        {STATE_KEYWORD[STA_INT_TIME_LINES], m_IntTimeLines},
        {STATE_KEYWORD[STA_INT_TIME_START_TIMES], m_IntTimeStartTimes},
        {STATE_KEYWORD[STA_INT_TIMES], m_IntTimes},
        {STATE_KEYWORD[STA_STARTING_EPHEMERIS_TIME], m_StartingEphemerisTime},
        {STATE_KEYWORD[STA_CENTER_EPHEMERIS_TIME], m_CenterEphemerisTime},
        {STATE_KEYWORD[STA_DETECTOR_SAMPLE_SUMMING], m_DetectorSampleSumming},
@@ -214,7 +218,24 @@ std::string UsgsAstroLsStateData::toString() const
   state_stream << STATE_KEYWORD[STA_PLATFORM_FLAG]     << " " << m_PlatformFlag      << "\n";  // 9
   state_stream << STATE_KEYWORD[STA_ABERR_FLAG] << " " << m_AberrFlag         << "\n";  // 10
   state_stream << STATE_KEYWORD[STA_ATMREF_FLAG]<< " " << m_AtmRefFlag        << "\n";  // 11
   state_stream << STATE_KEYWORD[STA_INT_TIME]   << " " << m_IntTime           << "\n";  // 12
   state_stream << STATE_KEYWORD[STA_INT_TIME_LINES]    << " " ;
   for (size_t i = 0; i < m_IntTimeLines.size(); i++)
   {
      state_stream << m_IntTimeLines[i] << " ";
   }
   state_stream << "\n";
   state_stream << STATE_KEYWORD[STA_INT_TIME_START_TIMES] << " " ;
   for (size_t i = 0; i < m_IntTimeStartTimes.size(); i++)
   {
      state_stream << m_IntTimeStartTimes[i] << " ";
   }
   state_stream << "\n";
   state_stream << STATE_KEYWORD[STA_INT_TIMES]         << " " ;
   for (size_t i = 0; i < m_IntTimes.size(); i++)
   {
      state_stream << m_IntTimes[i] << " ";
   }
   state_stream << "\n";
   state_stream << STATE_KEYWORD[STA_STARTING_EPHEMERIS_TIME]  << " "
                                           << m_StartingEphemerisTime << "\n";  // 13
   state_stream << STATE_KEYWORD[STA_CENTER_EPHEMERIS_TIME]    << " "
@@ -345,7 +366,9 @@ void UsgsAstroLsStateData::setState(const std::string &stateString )
   m_PlatformFlag = j["STA_PLATFORM_FLAG"];
   m_AberrFlag = j["STA_ABERR_FLAG"];
   m_AtmRefFlag = j["STA_ATMREF_FLAG"];
   m_IntTime = j["STA_INT_TIME"];
   m_IntTimeLines = j["STA_INT_TIME_LINES"].get<std::vector<double>>();
   m_IntTimeStartTimes = j["STA_INT_TIME_START_TIMES"].get<std::vector<double>>();
   m_IntTimes = j["STA_INT_TIMES"].get<std::vector<double>>();
   m_StartingEphemerisTime = j["STA_STARTING_EPHEMERIS_TIME"];
   m_CenterEphemerisTime = j["STA_CENTER_EPHEMERIS_TIME"];
   m_DetectorSampleSumming = j["STA_DETECTOR_SAMPLE_SUMMING"];
@@ -443,7 +466,9 @@ void UsgsAstroLsStateData::reset()
   m_PlatformFlag  = 1;                       // 9
   m_AberrFlag     = 0;                       // 10
   m_AtmRefFlag    = 0;                       // 11
   m_IntTime       = 0.001;                   // 12
   m_IntTimeLines.clear();
   m_IntTimeStartTimes.clear();
   m_IntTimes.clear();
   m_StartingEphemerisTime = 0.0;             // 13
   m_CenterEphemerisTime = 0.0;               // 14
   m_DetectorSampleSumming = 1.0;             // 15
+3 −1
Original line number Diff line number Diff line
@@ -8,7 +8,9 @@ STA_OFFSET_SAMPLES 0
STA_PLATFORM_FLAG 1
STA_ABERR_FLAG 0
STA_ATMREF_FLAG 0
STA_INT_TIME 0.001877
STA_INT_TIME_LINES 0.5
STA_INT_TIME_START_TIMES 517362754.228396
STA_INT_TIMES 0.001877
STA_STARTING_EPHEMERIS_TIME 517362754.2284
STA_CENTER_EPHEMERIS_TIME 517362771.52589
STA_DETECTOR_SAMPLE_SUMMING 1
Loading