Loading include/genericls/UsgsAstroLsStateData.h +6 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading src/UsgsAstroLsSensorModel.cpp +18 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include "genericls/UsgsAstroLsSensorModel.h" #include <algorithm> #include <iostream> #include <sstream> #include <math.h> Loading Loading @@ -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; Loading Loading @@ -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) Loading @@ -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; } Loading Loading @@ -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 Loading src/UsgsAstroLsStateData.cpp +30 −5 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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}, Loading Loading @@ -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] << " " Loading Loading @@ -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"]; Loading Loading @@ -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 Loading tests/J03_046060_1986_XN_18N282W_8bit_keywords.state +3 −1 Original line number Diff line number Diff line Loading @@ -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 tests/J03_046060_1986_XN_18N282W_8bit_state.json +3 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ "STA_IK_CODE": -74021, "STA_IMAGE_FLIP_FLAG": 0, "STA_IMAGE_IDENTIFIER": "UNKNOWN", "STA_INT_TIME": 0.001877, "STA_INT_TIME_LINES": [0.5], "STA_INT_TIME_START_TIMES": [-17.2974935173988], "STA_INT_TIMES": [0.001877], "STA_ISIS_Z_DIRECTION": 1, "STA_I_TRANS_L": [0.0, 142.85714285714, 0.0], "STA_I_TRANS_S": [0.0, 0.0, 142.85714285714], Loading Loading
include/genericls/UsgsAstroLsStateData.h +6 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading
src/UsgsAstroLsSensorModel.cpp +18 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include "genericls/UsgsAstroLsSensorModel.h" #include <algorithm> #include <iostream> #include <sstream> #include <math.h> Loading Loading @@ -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; Loading Loading @@ -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) Loading @@ -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; } Loading Loading @@ -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 Loading
src/UsgsAstroLsStateData.cpp +30 −5 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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}, Loading Loading @@ -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] << " " Loading Loading @@ -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"]; Loading Loading @@ -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 Loading
tests/J03_046060_1986_XN_18N282W_8bit_keywords.state +3 −1 Original line number Diff line number Diff line Loading @@ -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
tests/J03_046060_1986_XN_18N282W_8bit_state.json +3 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ "STA_IK_CODE": -74021, "STA_IMAGE_FLIP_FLAG": 0, "STA_IMAGE_IDENTIFIER": "UNKNOWN", "STA_INT_TIME": 0.001877, "STA_INT_TIME_LINES": [0.5], "STA_INT_TIME_START_TIMES": [-17.2974935173988], "STA_INT_TIMES": [0.001877], "STA_ISIS_Z_DIRECTION": 1, "STA_I_TRANS_L": [0.0, 142.85714285714, 0.0], "STA_I_TRANS_S": [0.0, 0.0, 142.85714285714], Loading