USGSCSM Astro Linescan Sensor Model Class

class UsgsAstroLsSensorModel : public RasterGM, public virtual SettableEllipsoid
#include <UsgsAstroLsSensorModel.h>

Copyright © 2017-2022 BAE Systems Information and Electronic Systems Integration Inc.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Public Functions

void setState(const std::string &state)
virtual void replaceModelState(const std::string &stateString)
std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list)
void reset()
UsgsAstroLsSensorModel()
~UsgsAstroLsSensorModel()
virtual std::string getModelState() const
void set(const std::string &state_data)
virtual csm::ImageCoord groundToImage(const csm::EcefCoord &groundPt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::ImageCoordCovar groundToImage(const csm::EcefCoordCovar &groundPt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::EcefCoord imageToGround(const csm::ImageCoord &imagePt, double height, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::EcefCoordCovar imageToGround(const csm::ImageCoordCovar &imagePt, double height, double heightVariance, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::EcefLocus imageToProximateImagingLocus(const csm::ImageCoord &imagePt, const csm::EcefCoord &groundPt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::EcefLocus imageToRemoteImagingLocus(const csm::ImageCoord &imagePt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::ImageCoord getImageStart() const
virtual csm::ImageVector getImageSize() const
virtual std::pair<csm::ImageCoord, csm::ImageCoord> getValidImageRange() const
virtual std::pair<double, double> getValidHeightRange() const
virtual csm::EcefVector getIlluminationDirection(const csm::EcefCoord &groundPt) const
virtual double getImageTime(const csm::ImageCoord &imagePt) const
virtual csm::EcefCoord getSensorPosition(const csm::ImageCoord &imagePt) const
virtual csm::EcefCoord getSensorPosition(double time) const
virtual csm::EcefVector getSensorVelocity(const csm::ImageCoord &imagePt) const
virtual csm::EcefVector getSensorVelocity(double time) const
virtual csm::RasterGM::SensorPartials computeSensorPartials(int index, const csm::EcefCoord &groundPt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual csm::RasterGM::SensorPartials computeSensorPartials(int index, const csm::ImageCoord &imagePt, const csm::EcefCoord &groundPt, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual std::vector<csm::RasterGM::SensorPartials> computeAllSensorPartials(const csm::EcefCoord &groundPt, csm::param::Set pSet = csm::param::VALID, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual std::vector<csm::RasterGM::SensorPartials> computeAllSensorPartials(const csm::ImageCoord &imagePt, const csm::EcefCoord &groundPt, csm::param::Set pSet = csm::param::VALID, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
virtual std::vector<double> computeGroundPartials(const csm::EcefCoord &groundPt) const
virtual const csm::CorrelationModel &getCorrelationModel() const
virtual std::vector<double> getUnmodeledCrossCovariance(const csm::ImageCoord &pt1, const csm::ImageCoord &pt2) const
virtual csm::EcefCoord getReferencePoint() const
virtual void setReferencePoint(const csm::EcefCoord &groundPt)
virtual int getNumParameters() const
virtual std::string getParameterName(int index) const
virtual std::string getParameterUnits(int index) const
virtual bool hasShareableParameters() const
virtual bool isParameterShareable(int index) const
virtual csm::SharingCriteria getParameterSharingCriteria(int index) const
virtual double getParameterValue(int index) const
virtual void setParameterValue(int index, double value)
virtual csm::param::Type getParameterType(int index) const
virtual void setParameterType(int index, csm::param::Type pType)
virtual std::shared_ptr<spdlog::logger> getLogger()
virtual void setLogger(std::string logName)
virtual double getParameterCovariance(int index1, int index2) const
virtual void setParameterCovariance(int index1, int index2, double covariance)
virtual int getNumGeometricCorrectionSwitches() const
virtual std::string getGeometricCorrectionName(int index) const
virtual void setGeometricCorrectionSwitch(int index, bool value, csm::param::Type pType)
virtual bool getGeometricCorrectionSwitch(int index) const
virtual std::vector<double> getCrossCovarianceMatrix(const csm::GeometricModel &comparisonModel, csm::param::Set pSet = csm::param::VALID, const csm::GeometricModel::GeometricModelList &otherModels = csm::GeometricModel::GeometricModelList()) const
virtual csm::Version getVersion() const
virtual std::string getModelName() const
virtual std::string getPedigree() const
virtual std::string getImageIdentifier() const
virtual void setImageIdentifier(const std::string &imageId, csm::WarningList *warnings = NULL)
virtual std::string getSensorIdentifier() const
virtual std::string getPlatformIdentifier() const
virtual std::string getCollectionIdentifier() const
virtual std::string getTrajectoryIdentifier() const
virtual std::string getSensorType() const
virtual std::string getSensorMode() const
virtual std::string getReferenceDateAndTime() const
virtual csm::Ellipsoid getEllipsoid() const
virtual void setEllipsoid(const csm::Ellipsoid &ellipsoid)
void calculateAttitudeCorrection(const double &time, const std::vector<double> &adj, double attCorr[9]) const
virtual csm::EcefVector getSunPosition(const double imageTime) const

Public Members

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
double m_centerEphemerisTime
double m_detectorSampleSumming
double m_detectorLineSumming
double m_startingDetectorSample
double m_startingDetectorLine
int m_ikCode
double m_focalLength
double m_zDirection
DistortionType m_distortionType
std::vector<double> m_opticalDistCoeffs
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
std::vector<double> m_sunPosition
std::vector<double> m_sunVelocity
std::shared_ptr<spdlog::logger> m_logger = spdlog::get("usgscsm_logger")

Public Static Functions

static std::string getModelNameFromModelState(const std::string &model_state)
static void applyTransformToState(ale::Rotation const &r, ale::Vec3d const &t, std::string &stateString)

Public Static Attributes

static const std::string _SENSOR_MODEL_NAME = "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL"
static const std::string _STATE_KEYWORD[]
static const int NUM_PARAM_TYPES = 4
static const std::string PARAM_STRING_ALL[] = {"NONE", "FICTITIOUS", "REAL", "FIXED"}
static const csm::param::Type PARAM_CHAR_ALL[] = {csm::param::NONE, csm::param::FICTITIOUS, csm::param::REAL, csm::param::FIXED}
static const int NUM_PARAMETERS = 16
static const std::string PARAMETER_NAME[] = {"IT Pos. Bias   ", "CT Pos. Bias   ", "Rad Pos. Bias  ", "IT Vel. Bias   ", "CT Vel. Bias   ", "Rad Vel. Bias  ", "Omega Bias     ", "Phi Bias       ", "Kappa Bias     ", "Omega Rate     ", "Phi Rate       ", "Kappa Rate     ", "Omega Accl     ", "Phi Accl       ", "Kappa Accl     ", "Focal Bias     "}

Private Functions

void determineSensorCovarianceInImageSpace(csm::EcefCoord &gp, double sensor_cov[4]) const
void updateState()
double getValue(int index, const std::vector<double> &adjustments) const
virtual csm::ImageCoord groundToImage(const csm::EcefCoord &groundPt, const std::vector<double> &adjustments, double desiredPrecision = 0.001, double *achievedPrecision = NULL, csm::WarningList *warnings = NULL) const
void reconstructSensorDistortion(double &focalX, double &focalY, const double &desiredPrecision) const
void getQuaternions(const double &time, double quaternion[4]) const
void losToEcf(const double &line, const double &sample, const std::vector<double> &adj, double &xc, double &yc, double &zc, double &vx, double &vy, double &vz, double &bodyFixedX, double &bodyFixedY, double &bodyFixedZ) const
void lightAberrationCorr(const double &vx, const double &vy, const double &vz, const double &xl, const double &yl, const double &zl, double &dxl, double &dyl, double &dzl) const
void losEllipsoidIntersect(const double &height, const double &xc, const double &yc, const double &zc, const double &xl, const double &yl, const double &zl, double &x, double &y, double &z, double &achieved_precision, const double &desired_precision, csm::WarningList *warnings = NULL) const
void getAdjSensorPosVel(const double &time, const std::vector<double> &adj, double &xc, double &yc, double &zc, double &vx, double &vy, double &vz, bool calc_vel = true) const
std::vector<double> computeDetectorView(const double &time, const csm::EcefCoord &groundPoint, const std::vector<double> &adj) const
void computeProjectiveApproximation(const csm::EcefCoord &gp, csm::ImageCoord &ip) const
void createProjectiveApproximation()
double calcDetectorLineErr(double t, csm::ImageCoord const &approxPt, const csm::EcefCoord &groundPt, const std::vector<double> &adj) const

Private Members

csm::NoCorrelationModel _no_corr_model
std::vector<double> _no_adjustment
std::vector<double> m_projTransCoeffs
bool m_useApproxInitTrans