Commit c10f6a79 authored by Kelvin Rodriguez's avatar Kelvin Rodriguez Committed by Jesse Mapel
Browse files

Updated LS ISD parsing code to match Framer (#186)

* updated LS ISD parsing to match style in framer

* reverted the 1 to 0

* Fixed attitude test, removed all cerr lines

* removed image flip flag

* added tests
parent bc3a612b
Loading
Loading
Loading
Loading
+46 −51
Original line number Diff line number Diff line
@@ -63,60 +63,55 @@ public:
  std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list) const;

   // State data elements;
   std::string  m_imageIdentifier;                // 1
   std::string  m_sensorType;                     // 2
   int          m_totalLines;                     // 3
   int          m_totalSamples;                   // 4
   double       m_offsetLines;                    // 5
   double       m_offsetSamples;                  // 6
   int          m_platformFlag;                   // 7
   int          m_aberrFlag;                      // 8
   int          m_atmRefFlag;                     // 9
   std::string  m_imageIdentifier;
   std::string  m_sensorName;
   int          m_nLines;
   int          m_nSamples;
   int          m_platformFlag;
   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
   double       m_startingSample;                 // 14
   int          m_ikCode;                         // 15
   double       m_focal;                          // 16
   double       m_zDirection;                     // 17
   double       m_opticalDistCoef[3];             // 18
   double       m_iTransS[3];                     // 19
   double       m_iTransL[3];                     // 20
   double       m_detectorSampleOrigin;           // 21
   double       m_detectorLineOrigin;             // 22
   double       m_detectorLineOffset;             // 23
   double       m_mountingMatrix[9];              // 24
   double       m_semiMajorAxis;                  // 25
   double       m_semiMinorAxis;                  // 26
   std::string  m_referenceDateAndTime;           // 27
   std::string  m_platformIdentifier;             // 28
   std::string  m_sensorIdentifier;               // 29
   std::string  m_trajectoryIdentifier;           // 30
   std::string  m_collectionIdentifier;           // 31
   double       m_refElevation;                   // 32
   double       m_minElevation;                   // 33
   double       m_maxElevation;                   // 34
   double       m_dtEphem;                        // 35
   double       m_t0Ephem;                        // 36
   double       m_dtQuat;                         // 37
   double       m_t0Quat;                         // 38
   int          m_numEphem;                       // 39
   int          m_numQuaternions;                 // 40
   std::vector<double> m_ephemPts;                // 41
   std::vector<double> m_ephemRates;              // 42
   std::vector<double> m_quaternions;             // 43
   std::vector<double> m_parameterVals;           // 44
   std::vector<csm::param::Type> m_parameterType; // 45
   csm::EcefCoord m_referencePointXyz;            // 46
   double       m_gsd;                            // 47
   double       m_flyingHeight;                   // 48
   double       m_halfSwath;                      // 49
   double       m_halfTime;                       // 50
   std::vector<double> m_covariance;              // 51
   int          m_imageFlipFlag;                  // 52
   double       m_startingEphemerisTime;
   double       m_centerEphemerisTime;
   double       m_detectorSampleSumming;
   double       m_startingSample;
   int          m_ikCode;
   double       m_focalLength;
   double       m_zDirection;
   double       m_opticalDistCoef[3];
   double       m_iTransS[3];
   double       m_iTransL[3];
   double       m_detectorSampleOrigin;
   double       m_detectorLineOrigin;
   double       m_mountingMatrix[9];
   double       m_majorAxis;
   double       m_minorAxis;
   std::string  m_referenceDateAndTime;
   std::string  m_platformIdentifier;
   std::string  m_sensorIdentifier;
   std::string  m_trajectoryIdentifier;
   std::string  m_collectionIdentifier;
   double       m_refElevation;
   double       m_minElevation;
   double       m_maxElevation;
   double       m_dtEphem;
   double       m_t0Ephem;
   double       m_dtQuat;
   double       m_t0Quat;
   int          m_numPositions;
   int          m_numQuaternions;
   std::vector<double> m_positions;
   std::vector<double> m_velocities;
   std::vector<double> m_quaternions;
   std::vector<double> m_currentParameterValue;
   std::vector<csm::param::Type> m_parameterType;
   csm::EcefCoord m_referencePointXyz;
   double       m_gsd;
   double       m_flyingHeight;
   double       m_halfSwath;
   double       m_halfTime;
   std::vector<double> m_covariance;
   int          m_imageFlipFlag;

   // Hardcoded
   static const std::string      _SENSOR_MODEL_NAME; // state date element 0
+0 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ void computeDistortedFocalPlaneCoordinates(
  const double& lineOrigin,
  const double& sampleSumming,
  const double& startingSample,
  const double& lineOffset,
  const double iTransS[],
  const double iTransL[],
  std::tuple<double, double>& natFocalPlane);
+0 −12
Original line number Diff line number Diff line
@@ -803,18 +803,15 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd(const std::string&
    state["m_imageIdentifier"] = getImageId(isd, parsingWarnings);
    state["m_sensorName"] = getSensorName(isd, parsingWarnings);
    state["m_platformName"] = getPlatformName(isd, parsingWarnings);
    std::cerr << "Model Name Parsed!" << std::endl;

    state["m_startingDetectorSample"] = getDetectorStartingSample(isd, parsingWarnings);
    state["m_startingDetectorLine"] = getDetectorStartingLine(isd, parsingWarnings);

    std::cerr << "Detector Starting Pixel Parsed!" << std::endl;

    // get focal length
    state["m_focalLength"] = getFocalLength(isd, parsingWarnings);
    state["m_focalLengthEpsilon"] = getFocalLengthEpsilon(isd, parsingWarnings);

    std::cerr << "Focal Length Parsed!" << std::endl;

    state["m_currentParameterValue"] = json();

@@ -847,13 +844,11 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd(const std::string&
      state["m_spacecraftVelocity"] = velocity;
    }

    std::cerr << "Sensor Location Parsed!" << std::endl;

    // get sun_position
    // sun position is not strictly necessary, but is required for getIlluminationDirection.
    state["m_sunPosition"] = getSunPositions(isd);

    std::cerr << "Sun Position Parsed!" << std::endl;

    // get sensor_orientation quaternion
    std::vector<double> quaternion = getSensorOrientations(isd, parsingWarnings);
@@ -871,31 +866,26 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd(const std::string&
      state["m_currentParameterValue"][6] = quaternion[3];
    }

    std::cerr << "Sensor Orientation Parsed!" << std::endl;

    // get optical_distortion
    state["m_odtX"] = getTransverseDistortionX(isd, parsingWarnings);
    state["m_odtY"] = getTransverseDistortionY(isd, parsingWarnings);

    std::cerr << "Distortion Parsed!" << std::endl;

    // get detector_center
    state["m_ccdCenter"][0] = getDetectorCenterLine(isd, parsingWarnings);
    state["m_ccdCenter"][1] = getDetectorCenterSample(isd, parsingWarnings);

    std::cerr << "Detector Center Parsed!" << std::endl;

    // get radii
    state["m_minorAxis"] = getSemiMinorRadius(isd, parsingWarnings);
    state["m_majorAxis"] = getSemiMajorRadius(isd, parsingWarnings);

    std::cerr << "Target Radii Parsed!" << std::endl;

    // get reference_height
    state["m_minElevation"] = getMinHeight(isd, parsingWarnings);
    state["m_maxElevation"] = getMaxHeight(isd, parsingWarnings);

    std::cerr << "Reference Height Parsed!" << std::endl;

    state["m_ephemerisTime"] = getCenterTime(isd, parsingWarnings);
    state["m_nLines"] = getTotalLines(isd, parsingWarnings);
@@ -928,13 +918,11 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd(const std::string&
          "UsgsAstroFrameSensorModel::constructStateFromIsd()"));
    }

    std::cerr << "Focal To Pixel Transformation Parsed!" << std::endl;

    state["m_referencePointXyz"] = std::vector<double>(3, 0.0);
    state["m_currentParameterCovariance"] = std::vector<double>(NUM_PARAMETERS*NUM_PARAMETERS,0.0);
    state["m_collectionIdentifier"] = "";

    std::cerr << "Constants Set!" << std::endl;

    if (!parsingWarnings->empty()) {
      if (warnings) {
+236 −309

File changed.

Preview size limit exceeded, changes collapsed.

+2 −3
Original line number Diff line number Diff line
@@ -55,17 +55,16 @@ void computeDistortedFocalPlaneCoordinates(
    const double& lineOrigin,
    const double& sampleSumming,
    const double& startingSample,
    const double& lineOffset,
    const double iTransS[],
    const double iTransL[],
    std::tuple<double, double>& natFocalPlane)
{
  double detSample = (sample - 1.0) * sampleSumming + startingSample;
  double detSample = sample * sampleSumming + startingSample;
  double m11 = iTransL[1];
  double m12 = iTransL[2];
  double m21 = iTransS[1];
  double m22 = iTransS[2];
  double t1 = line + lineOffset - lineOrigin - iTransL[0];
  double t1 = line - lineOrigin - iTransL[0];
  double t2 = detSample - sampleOrigin - iTransS[0];
  double determinant = m11 * m22 - m12 * m21;
  double p11 = m11 / determinant;
Loading