Loading .travis.yml +4 −4 Original line number Diff line number Diff line Loading @@ -33,12 +33,12 @@ install: # Install a supported cmake version (>= 3.10) - | if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; else curl -o miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh; curl -o miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh; fi - bash miniconda.sh -b -p $HOME/miniconda - export PATH="$HOME/miniconda/bin:$PATH" - source $HOME/miniconda/etc/profile.d/conda.sh - conda install -y -c conda-forge cmake script: Loading CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ add_library(usgscsm SHARED src/UsgsAstroPlugin.cpp src/UsgsAstroFrameSensorModel.cpp src/UsgsAstroLsSensorModel.cpp src/UsgsAstroSarSensorModel.cpp src/Distortion.cpp src/Utilities.cpp) Loading include/usgscsm/UsgsAstroSarSensorModel.h +1 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab virtual std::string getModelState() const; std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list) const; static std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list); static std::string getModelNameFromModelState(const std::string& model_state); Loading Loading @@ -194,7 +194,6 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab //////////////////////////// static const std::string _SENSOR_MODEL_NAME; static const std::string _STATE_KEYWORD[]; static const int NUM_PARAM_TYPES; static const std::string PARAM_STRING_ALL[]; static const csm::param::Type PARAM_CHAR_ALL[]; Loading include/usgscsm/Utilities.h +3 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,9 @@ double getCenterTime(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationStartLines(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationStartTimes(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationTimes(nlohmann::json isd, csm::WarningList *list=nullptr); double getExposureDuration(nlohmann::json isd, csm::WarningList *list=nullptr); double getScaledPixelWidth(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getScaleConversionCoefficients(nlohmann::json isd, csm::WarningList *list=nullptr); int getSampleSumming(nlohmann::json isd, csm::WarningList *list=nullptr); int getLineSumming(nlohmann::json isd, csm::WarningList *list=nullptr); double getFocalLength(nlohmann::json isd, csm::WarningList *list=nullptr); Loading src/UsgsAstroSarSensorModel.cpp 0 → 100644 +138 −0 Original line number Diff line number Diff line #include "UsgsAstroSarSensorModel.h" #include "Utilities.h" #include <string.h> #include <json/json.hpp> using json = nlohmann::json; using namespace std; const string UsgsAstroSarSensorModel::_SENSOR_MODEL_NAME = "USGS_ASTRO_SAR_SENSOR_MODEL"; const int UsgsAstroSarSensorModel::NUM_PARAMETERS = 6; const string UsgsAstroSarSensorModel::PARAMETER_NAME[] = { "IT Pos. Bias ", // 0 "CT Pos. Bias ", // 1 "Rad Pos. Bias ", // 2 "X Vel. Bias ", // 3 "Y Vel. Bias ", // 4 "Z Vel. Bias " // 5 }; const int UsgsAstroSarSensorModel::NUM_PARAM_TYPES = 4; const string UsgsAstroSarSensorModel::PARAM_STRING_ALL[] = { "NONE", "FICTITIOUS", "REAL", "FIXED" }; const csm::param::Type UsgsAstroSarSensorModel::PARAM_CHAR_ALL[] = { csm::param::NONE, csm::param::FICTITIOUS, csm::param::REAL, csm::param::FIXED }; string UsgsAstroSarSensorModel::constructStateFromIsd( const string imageSupportData, csm::WarningList *warnings ) { json isd = json::parse(imageSupportData); json state = {}; csm::WarningList* parsingWarnings = new csm::WarningList; int num_params = NUM_PARAMETERS; state["m_modelName"] = getSensorModelName(isd, parsingWarnings); state["m_imageIdentifier"] = getImageId(isd, parsingWarnings); state["m_sensorName"] = getSensorName(isd, parsingWarnings); state["m_platformName"] = getPlatformName(isd, parsingWarnings); state["m_nLines"] = getTotalLines(isd, parsingWarnings); state["m_nSamples"] = getTotalSamples(isd, parsingWarnings); // Zero computed state values state["m_referencePointXyz"] = std::vector<double>(3, 0.0); // sun_position and velocity are required for getIlluminationDirection state["m_sunPosition"]= getSunPositions(isd, parsingWarnings); state["m_sunVelocity"]= getSunVelocities(isd, parsingWarnings); state["m_centerEphemerisTime"] = getCenterTime(isd, parsingWarnings); state["m_startingEphemerisTime"] = getStartingTime(isd, parsingWarnings); state["m_exposureDuration"] = getExposureDuration(isd, parsingWarnings); try { state["m_dtEphem"] = isd.at("dt_ephemeris"); } catch(...) { parsingWarnings->push_back( csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "dt_ephemeris not in ISD", "UsgsAstroSarSensorModel::constructStateFromIsd()")); } try { state["m_t0Ephem"] = isd.at("t0_ephemeris"); } catch(...) { parsingWarnings->push_back( csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "t0_ephemeris not in ISD", "UsgsAstroSarSensorModel::constructStateFromIsd()")); } state["m_positions"] = getSensorPositions(isd, parsingWarnings); state["m_velocities"] = getSensorVelocities(isd, parsingWarnings); state["m_currentParameterValue"] = std::vector<double>(NUM_PARAMETERS, 0.0); // get radii state["m_minorAxis"] = getSemiMinorRadius(isd, parsingWarnings); state["m_majorAxis"] = getSemiMajorRadius(isd, parsingWarnings); // set identifiers state["m_platformIdentifier"] = getPlatformName(isd, parsingWarnings); state["m_sensorIdentifier"] = getSensorName(isd, parsingWarnings); // get reference_height state["m_minElevation"] = -1000; state["m_maxElevation"] = 1000; // SAR specific values state["m_scaledPixelWidth"] = getScaledPixelWidth(isd, parsingWarnings); state["m_scaleConversionCoefficients"] = getScaleConversionCoefficients(isd, parsingWarnings); // Default to identity covariance state["m_covariance"] = std::vector<double>(NUM_PARAMETERS * NUM_PARAMETERS, 0.0); for (int i = 0; i < NUM_PARAMETERS; i++) { state["m_covariance"][i * NUM_PARAMETERS + i] = 1.0; } if (!parsingWarnings->empty()) { if (warnings) { warnings->insert(warnings->end(), parsingWarnings->begin(), parsingWarnings->end()); } delete parsingWarnings; parsingWarnings = nullptr; throw csm::Error(csm::Error::SENSOR_MODEL_NOT_CONSTRUCTIBLE, "ISD is invalid for creating the sensor model.", "UsgsAstroSarSensorModel::constructStateFromIsd"); } delete parsingWarnings; parsingWarnings = nullptr; // The state data will still be updated when a sensor model is created since // some state data is not in the ISD and requires a SM to compute them. return state.dump(); } Loading
.travis.yml +4 −4 Original line number Diff line number Diff line Loading @@ -33,12 +33,12 @@ install: # Install a supported cmake version (>= 3.10) - | if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; else curl -o miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh; curl -o miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh; fi - bash miniconda.sh -b -p $HOME/miniconda - export PATH="$HOME/miniconda/bin:$PATH" - source $HOME/miniconda/etc/profile.d/conda.sh - conda install -y -c conda-forge cmake script: Loading
CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ add_library(usgscsm SHARED src/UsgsAstroPlugin.cpp src/UsgsAstroFrameSensorModel.cpp src/UsgsAstroLsSensorModel.cpp src/UsgsAstroSarSensorModel.cpp src/Distortion.cpp src/Utilities.cpp) Loading
include/usgscsm/UsgsAstroSarSensorModel.h +1 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab virtual std::string getModelState() const; std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list) const; static std::string constructStateFromIsd(const std::string imageSupportData, csm::WarningList *list); static std::string getModelNameFromModelState(const std::string& model_state); Loading Loading @@ -194,7 +194,6 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab //////////////////////////// static const std::string _SENSOR_MODEL_NAME; static const std::string _STATE_KEYWORD[]; static const int NUM_PARAM_TYPES; static const std::string PARAM_STRING_ALL[]; static const csm::param::Type PARAM_CHAR_ALL[]; Loading
include/usgscsm/Utilities.h +3 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,9 @@ double getCenterTime(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationStartLines(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationStartTimes(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getIntegrationTimes(nlohmann::json isd, csm::WarningList *list=nullptr); double getExposureDuration(nlohmann::json isd, csm::WarningList *list=nullptr); double getScaledPixelWidth(nlohmann::json isd, csm::WarningList *list=nullptr); std::vector<double> getScaleConversionCoefficients(nlohmann::json isd, csm::WarningList *list=nullptr); int getSampleSumming(nlohmann::json isd, csm::WarningList *list=nullptr); int getLineSumming(nlohmann::json isd, csm::WarningList *list=nullptr); double getFocalLength(nlohmann::json isd, csm::WarningList *list=nullptr); Loading
src/UsgsAstroSarSensorModel.cpp 0 → 100644 +138 −0 Original line number Diff line number Diff line #include "UsgsAstroSarSensorModel.h" #include "Utilities.h" #include <string.h> #include <json/json.hpp> using json = nlohmann::json; using namespace std; const string UsgsAstroSarSensorModel::_SENSOR_MODEL_NAME = "USGS_ASTRO_SAR_SENSOR_MODEL"; const int UsgsAstroSarSensorModel::NUM_PARAMETERS = 6; const string UsgsAstroSarSensorModel::PARAMETER_NAME[] = { "IT Pos. Bias ", // 0 "CT Pos. Bias ", // 1 "Rad Pos. Bias ", // 2 "X Vel. Bias ", // 3 "Y Vel. Bias ", // 4 "Z Vel. Bias " // 5 }; const int UsgsAstroSarSensorModel::NUM_PARAM_TYPES = 4; const string UsgsAstroSarSensorModel::PARAM_STRING_ALL[] = { "NONE", "FICTITIOUS", "REAL", "FIXED" }; const csm::param::Type UsgsAstroSarSensorModel::PARAM_CHAR_ALL[] = { csm::param::NONE, csm::param::FICTITIOUS, csm::param::REAL, csm::param::FIXED }; string UsgsAstroSarSensorModel::constructStateFromIsd( const string imageSupportData, csm::WarningList *warnings ) { json isd = json::parse(imageSupportData); json state = {}; csm::WarningList* parsingWarnings = new csm::WarningList; int num_params = NUM_PARAMETERS; state["m_modelName"] = getSensorModelName(isd, parsingWarnings); state["m_imageIdentifier"] = getImageId(isd, parsingWarnings); state["m_sensorName"] = getSensorName(isd, parsingWarnings); state["m_platformName"] = getPlatformName(isd, parsingWarnings); state["m_nLines"] = getTotalLines(isd, parsingWarnings); state["m_nSamples"] = getTotalSamples(isd, parsingWarnings); // Zero computed state values state["m_referencePointXyz"] = std::vector<double>(3, 0.0); // sun_position and velocity are required for getIlluminationDirection state["m_sunPosition"]= getSunPositions(isd, parsingWarnings); state["m_sunVelocity"]= getSunVelocities(isd, parsingWarnings); state["m_centerEphemerisTime"] = getCenterTime(isd, parsingWarnings); state["m_startingEphemerisTime"] = getStartingTime(isd, parsingWarnings); state["m_exposureDuration"] = getExposureDuration(isd, parsingWarnings); try { state["m_dtEphem"] = isd.at("dt_ephemeris"); } catch(...) { parsingWarnings->push_back( csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "dt_ephemeris not in ISD", "UsgsAstroSarSensorModel::constructStateFromIsd()")); } try { state["m_t0Ephem"] = isd.at("t0_ephemeris"); } catch(...) { parsingWarnings->push_back( csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "t0_ephemeris not in ISD", "UsgsAstroSarSensorModel::constructStateFromIsd()")); } state["m_positions"] = getSensorPositions(isd, parsingWarnings); state["m_velocities"] = getSensorVelocities(isd, parsingWarnings); state["m_currentParameterValue"] = std::vector<double>(NUM_PARAMETERS, 0.0); // get radii state["m_minorAxis"] = getSemiMinorRadius(isd, parsingWarnings); state["m_majorAxis"] = getSemiMajorRadius(isd, parsingWarnings); // set identifiers state["m_platformIdentifier"] = getPlatformName(isd, parsingWarnings); state["m_sensorIdentifier"] = getSensorName(isd, parsingWarnings); // get reference_height state["m_minElevation"] = -1000; state["m_maxElevation"] = 1000; // SAR specific values state["m_scaledPixelWidth"] = getScaledPixelWidth(isd, parsingWarnings); state["m_scaleConversionCoefficients"] = getScaleConversionCoefficients(isd, parsingWarnings); // Default to identity covariance state["m_covariance"] = std::vector<double>(NUM_PARAMETERS * NUM_PARAMETERS, 0.0); for (int i = 0; i < NUM_PARAMETERS; i++) { state["m_covariance"][i * NUM_PARAMETERS + i] = 1.0; } if (!parsingWarnings->empty()) { if (warnings) { warnings->insert(warnings->end(), parsingWarnings->begin(), parsingWarnings->end()); } delete parsingWarnings; parsingWarnings = nullptr; throw csm::Error(csm::Error::SENSOR_MODEL_NOT_CONSTRUCTIBLE, "ISD is invalid for creating the sensor model.", "UsgsAstroSarSensorModel::constructStateFromIsd"); } delete parsingWarnings; parsingWarnings = nullptr; // The state data will still be updated when a sensor model is created since // some state data is not in the ISD and requires a SM to compute them. return state.dump(); }