From a01988bf04f133bb20d953bab60187914b5a63f7 Mon Sep 17 00:00:00 2001 From: Jesse Mapel <jmapel@usgs.gov> Date: Wed, 10 Aug 2022 13:08:50 -0700 Subject: [PATCH] Added log levels (#414) * Added log levels to line scan * Fixed bold in readme * Added flush on exit to ls * Added plugin logging * frame logging * Added output to info logs --- README.md | 25 +- src/UsgsAstroFrameSensorModel.cpp | 258 +++++++++++++-------- src/UsgsAstroLsSensorModel.cpp | 364 ++++++++++++++++++++++-------- src/UsgsAstroPlugin.cpp | 98 ++++---- tests/Fixtures.h | 1 + 5 files changed, 514 insertions(+), 232 deletions(-) diff --git a/README.md b/README.md index c22e4e4..672781c 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ <p align="center"> - <img src="docs/USGSCSM_Logo.svg" alt="USGSCSM" width=200> + <img src="docs/USGSCSM_Logo.svg" alt="USGSCSM" width=200> </p> # USGSCSM -This library provides *Community Sensor Model (CSM)*-compliant sensor models +This library provides *Community Sensor Model (CSM)*-compliant sensor models created by the USGS Astrogeology Science Center. USGSCSM contains three different sensor models. The first is a @@ -71,7 +71,26 @@ camera operations, as described in its Logging of the internal operations in the sensor models can be enabled by setting the `USGSCSM_LOG_FILE` environment variable to the file the log should be written to. To have the logging information printed to the standard output or standard error, set -this to `stdout` or `stderr`. Note that these logs can become several GB in size. +this to `stdout` or `stderr`. + +You can adjust how much information is logged by setting the `USGSCSM_LOG_LEVEL` +environment variable. The log level is not case sensitive. +The log levels are: + +| Level | Description | +| ----- | ----------- | +| trace | Intermediate calculation values | +| debug | All function calls and returns | +| **info** | Only core photogrammetry calls and returns - Default log level | +| warn | CSM warnings | +| err | CSM exceptions | +| critical | Critical errors | +| off | No log messages | + +All log messages of level `USGSCSM_LOG_LEVEL` and below will be logged. For example, +setting the log level to *info* will log all messages of types *info*, *warn*, *err*, +*critical*, and *off*. Note that these logs can become several GB in size when the +log level is set to *debug* or *trace*. --- diff --git a/src/UsgsAstroFrameSensorModel.cpp b/src/UsgsAstroFrameSensorModel.cpp index 363b79a..2b928ab 100644 --- a/src/UsgsAstroFrameSensorModel.cpp +++ b/src/UsgsAstroFrameSensorModel.cpp @@ -13,7 +13,7 @@ #define MESSAGE_LOG(...) \ if (m_logger) { \ - m_logger->info(__VA_ARGS__); \ + m_logger->log(__VA_ARGS__); \ } using json = nlohmann::json; @@ -33,12 +33,12 @@ const std::string UsgsAstroFrameSensorModel::m_parameterName[] = { }; UsgsAstroFrameSensorModel::UsgsAstroFrameSensorModel() { - MESSAGE_LOG("Creating UsgsAstroFrameSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Creating UsgsAstroFrameSensorModel"); reset(); } void UsgsAstroFrameSensorModel::reset() { - MESSAGE_LOG("Resetting UsgsAstroFrameSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Resetting UsgsAstroFrameSensorModel"); m_modelName = _SENSOR_MODEL_NAME; m_platformName = ""; m_sensorName = ""; @@ -106,12 +106,18 @@ csm::ImageCoord UsgsAstroFrameSensorModel::groundToImage( const csm::EcefCoord &groundPt, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing groundToImage(No adjustments) for {}, {}, {}, with desired " "precision {}", groundPt.x, groundPt.y, groundPt.z, desiredPrecision); - return groundToImage(groundPt, m_noAdjustments, desiredPrecision, - achievedPrecision, warnings); + csm::ImageCoord imagePt = groundToImage( + groundPt, m_noAdjustments, desiredPrecision, achievedPrecision, warnings); + MESSAGE_LOG( + spdlog::level::info, + "groundToImage result of ({}, {})", + imagePt.line, imagePt.samp); + return imagePt; } /** @@ -129,6 +135,7 @@ csm::ImageCoord UsgsAstroFrameSensorModel::groundToImage( double desired_precision, double *achieved_precision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing groundToImage for {}, {}, {}, with desired precision {}", groundPt.x, groundPt.y, groundPt.z, desired_precision); @@ -178,8 +185,10 @@ csm::ImageCoord UsgsAstroFrameSensorModel::groundToImage( sample = jitteredSample; } - MESSAGE_LOG("Computed groundToImage for {}, {}, {} as line, sample: {}, {}", - groundPt.x, groundPt.y, groundPt.z, line, sample); + MESSAGE_LOG( + spdlog::level::debug, + "Computed groundToImage for {}, {}, {} as line, sample: {}, {}", + groundPt.x, groundPt.y, groundPt.z, line, sample); return csm::ImageCoord(line, sample); } @@ -188,6 +197,7 @@ csm::ImageCoordCovar UsgsAstroFrameSensorModel::groundToImage( const csm::EcefCoordCovar &groundPt, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing groundToImage(Covar) for {}, {}, {}, with desired precision " "{}", groundPt.x, groundPt.y, groundPt.z, desiredPrecision); @@ -203,6 +213,7 @@ csm::ImageCoordCovar UsgsAstroFrameSensorModel::groundToImage( // This is a partial, incorrect implementation to test if SocetGXP needs // this method implemented in order to load the sensor. MESSAGE_LOG( + spdlog::level::debug, "Computed groundToImage(Covar) for {}, {}, {}, as line, sample: {}, {}", groundPt.x, groundPt.y, groundPt.z, ip.line, ip.samp); return result; @@ -212,6 +223,7 @@ csm::EcefCoord UsgsAstroFrameSensorModel::imageToGround( const csm::ImageCoord &imagePt, double height, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing imageToGround for {}, {}, {}, with desired precision {}", imagePt.line, imagePt.samp, height, desiredPrecision); @@ -222,6 +234,7 @@ csm::EcefCoord UsgsAstroFrameSensorModel::imageToGround( double m[3][3]; calcRotationMatrix(m); MESSAGE_LOG( + spdlog::level::trace, "Calculated rotation matrix [{}, {}, {}], [{}, {}, {}], [{}, {}, {}]", m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2]); @@ -245,8 +258,10 @@ csm::EcefCoord UsgsAstroFrameSensorModel::imageToGround( double undistortedX, undistortedY; removeDistortion(x_camera, y_camera, undistortedX, undistortedY, m_opticalDistCoeffs, m_distortionType); - MESSAGE_LOG("Found undistortedX: {}, and undistortedY: {}", undistortedX, - undistortedY); + MESSAGE_LOG( + spdlog::level::trace, + "Found undistortedX: {}, and undistortedY: {}", + undistortedX, undistortedY); // Now back from distorted mm to pixels double xl, yl, zl; @@ -256,20 +271,25 @@ csm::EcefCoord UsgsAstroFrameSensorModel::imageToGround( m[1][2] * -m_focalLength; zl = m[2][0] * undistortedX + m[2][1] * undistortedY - m[2][2] * -m_focalLength; - MESSAGE_LOG("Compute xl, yl, zl as {}, {}, {}", xl, yl, zl); + MESSAGE_LOG(spdlog::level::trace, "Compute xl, yl, zl as {}, {}, {}", xl, yl, zl); double xc, yc, zc; xc = m_currentParameterValue[0]; yc = m_currentParameterValue[1]; zc = m_currentParameterValue[2]; - MESSAGE_LOG("Set xc, yc, zc to {}, {}, {}", m_currentParameterValue[0], - m_currentParameterValue[1], m_currentParameterValue[2]); + MESSAGE_LOG( + spdlog::level::trace, + "Set xc, yc, zc to {}, {}, {}", m_currentParameterValue[0], + m_currentParameterValue[1], m_currentParameterValue[2]); // Intersect with some height about the ellipsoid. double x, y, z; losEllipsoidIntersect(height, xc, yc, zc, xl, yl, zl, x, y, z, warnings); - MESSAGE_LOG("Resulting EcefCoordinate: {}, {}, {}", x, y, z); + MESSAGE_LOG( + spdlog::level::info, + "Resulting EcefCoordinate: {}, {}, {}", + x, y, z); return csm::EcefCoord(x, y, z); } @@ -279,6 +299,7 @@ csm::EcefCoordCovar UsgsAstroFrameSensorModel::imageToGround( double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing imageToGround(Covar) for {}, {}, {}, with desired precision " "{}", imagePt.line, imagePt.samp, height, desiredPrecision); @@ -286,6 +307,7 @@ csm::EcefCoordCovar UsgsAstroFrameSensorModel::imageToGround( // implemented. MESSAGE_LOG( + spdlog::level::trace, "This is an incomplete implementation to see if SocetGXP needs this " "method implemented"); @@ -298,6 +320,7 @@ csm::EcefLocus UsgsAstroFrameSensorModel::imageToProximateImagingLocus( double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing imageToProximateImagingLocus(No ground) for point {}, {}, {}, " "with desired precision {}", imagePt.line, imagePt.samp, desiredPrecision); @@ -316,19 +339,29 @@ csm::EcefLocus UsgsAstroFrameSensorModel::imageToProximateImagingLocus( csm::EcefVector positionToClosest = dot(remoteLocus.direction, positionToGround) * remoteLocus.direction; - return csm::EcefLocus( + csm::EcefLocus locus( remoteLocus.point.x + positionToClosest.x, remoteLocus.point.y + positionToClosest.y, remoteLocus.point.z + positionToClosest.z, remoteLocus.direction.x, remoteLocus.direction.y, remoteLocus.direction.z); + + MESSAGE_LOG( + spdlog::level::info, + "imageToProximateImagingLocus result of point ({}, {}, {}) " + "direction ({}, {}, {}).", + locus.point.x, locus.point.y, locus.point.z, + locus.direction.x, locus.direction.y, locus.direction.z); + + return locus; } csm::EcefLocus UsgsAstroFrameSensorModel::imageToRemoteImagingLocus( const csm::ImageCoord &imagePt, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing imageToProximateImagingLocus for {}, {}, {}, with desired " "precision {}", imagePt.line, imagePt.samp, desiredPrecision); @@ -371,8 +404,10 @@ csm::EcefLocus UsgsAstroFrameSensorModel::imageToRemoteImagingLocus( } csm::ImageCoord UsgsAstroFrameSensorModel::getImageStart() const { - MESSAGE_LOG("Accessing Image Start line: {}, sample: {}", - m_startingDetectorLine, m_startingDetectorSample); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing Image Start line: {}, sample: {}", + m_startingDetectorLine, m_startingDetectorSample); csm::ImageCoord start; start.samp = m_startingDetectorSample; start.line = m_startingDetectorLine; @@ -380,8 +415,10 @@ csm::ImageCoord UsgsAstroFrameSensorModel::getImageStart() const { } csm::ImageVector UsgsAstroFrameSensorModel::getImageSize() const { - MESSAGE_LOG("Accessing Image Size line: {}, sample: {}", m_nLines, - m_nSamples); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing Image Size line: {}, sample: {}", + m_nLines, m_nSamples); csm::ImageVector size; size.line = m_nLines; size.samp = m_nSamples; @@ -390,26 +427,30 @@ csm::ImageVector UsgsAstroFrameSensorModel::getImageSize() const { std::pair<csm::ImageCoord, csm::ImageCoord> UsgsAstroFrameSensorModel::getValidImageRange() const { - MESSAGE_LOG("Accessing Image Range"); + MESSAGE_LOG(spdlog::level::debug, "Accessing Image Range"); csm::ImageCoord min_pt(m_startingDetectorLine, m_startingDetectorSample); csm::ImageCoord max_pt(m_nLines, m_nSamples); - MESSAGE_LOG("Valid image range: min {}, {} max: {}, {}", min_pt.samp, + MESSAGE_LOG(spdlog::level::debug, "Valid image range: min {}, {} max: {}, {}", min_pt.samp, min_pt.line, max_pt.samp, max_pt.line) return std::pair<csm::ImageCoord, csm::ImageCoord>(min_pt, max_pt); } std::pair<double, double> UsgsAstroFrameSensorModel::getValidHeightRange() const { - MESSAGE_LOG("Accessing Image Height min: {}, max: {}", m_minElevation, - m_maxElevation); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing Image Height min: {}, max: {}", + m_minElevation, m_maxElevation); return std::pair<double, double>(m_minElevation, m_maxElevation); } csm::EcefVector UsgsAstroFrameSensorModel::getIlluminationDirection( const csm::EcefCoord &groundPt) const { // ground (body-fixed) - sun (body-fixed) gives us the illumination direction. - MESSAGE_LOG("Accessing illumination direction for ground point {}, {}, {}", - groundPt.x, groundPt.y, groundPt.z); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing illumination direction for ground point {}, {}, {}", + groundPt.x, groundPt.y, groundPt.z); return csm::EcefVector{groundPt.x - m_sunPosition[0], groundPt.y - m_sunPosition[1], groundPt.z - m_sunPosition[2]}; @@ -417,8 +458,10 @@ csm::EcefVector UsgsAstroFrameSensorModel::getIlluminationDirection( double UsgsAstroFrameSensorModel::getImageTime( const csm::ImageCoord &imagePt) const { - MESSAGE_LOG("Accessing image time for image point {}, {}", imagePt.line, - imagePt.samp); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing image time for image point {}, {}", + imagePt.line, imagePt.samp); // The entire image is aquired at once so image time for all pixels is the // reference time return 0.0; @@ -426,8 +469,10 @@ double UsgsAstroFrameSensorModel::getImageTime( csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition( const csm::ImageCoord &imagePt) const { - MESSAGE_LOG("Accessing sensor position for image point {}, {}", imagePt.line, - imagePt.samp); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing sensor position for image point {}, {}", + imagePt.line, imagePt.samp); // check if the image point is in range if (imagePt.samp >= m_startingDetectorSample && imagePt.samp <= (m_startingDetectorSample + m_nSamples) && @@ -441,6 +486,7 @@ csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition( return sensorPosition; } else { MESSAGE_LOG( + spdlog::level::err, "ERROR: UsgsAstroFrameSensorModel::getSensorPosition: " "Image Coordinate {},{} out of Bounds", imagePt.line, imagePt.samp); @@ -450,7 +496,7 @@ csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition( } csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition(double time) const { - MESSAGE_LOG("Accessing sensor position for time {}", time); + MESSAGE_LOG(spdlog::level::debug, "Accessing sensor position for time {}", time); if (time == 0.0) { csm::EcefCoord sensorPosition; sensorPosition.x = m_currentParameterValue[0]; @@ -460,6 +506,7 @@ csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition(double time) const { return sensorPosition; } else { MESSAGE_LOG( + spdlog::level::err, "ERROR: UsgsAstroFrameSensorModel::getSensorPosition: Valid image time " "is 0.0"); std::string aMessage = "Valid image time is 0.0"; @@ -470,12 +517,14 @@ csm::EcefCoord UsgsAstroFrameSensorModel::getSensorPosition(double time) const { csm::EcefVector UsgsAstroFrameSensorModel::getSensorVelocity( const csm::ImageCoord &imagePt) const { - MESSAGE_LOG("Accessing sensor velocity for image point {}, {}", imagePt.line, - imagePt.samp); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing sensor velocity for image point {}, {}", + imagePt.line, imagePt.samp); // Make sure the passed coordinate is with the image dimensions. if (imagePt.samp < 0.0 || imagePt.samp > m_nSamples || imagePt.line < 0.0 || imagePt.line > m_nLines) { - MESSAGE_LOG("ERROR: Image coordinate out of bounds.") + MESSAGE_LOG(spdlog::level::err, "ERROR: Image coordinate out of bounds.") throw csm::Error(csm::Error::BOUNDS, "Image coordinate out of bounds.", "UsgsAstroFrameSensorModel::getSensorVelocity"); } @@ -487,7 +536,7 @@ csm::EcefVector UsgsAstroFrameSensorModel::getSensorVelocity( csm::EcefVector UsgsAstroFrameSensorModel::getSensorVelocity( double time) const { - MESSAGE_LOG("Accessing sensor position for time {}", time); + MESSAGE_LOG(spdlog::level::debug, "Accessing sensor position for time {}", time); if (time == 0.0) { return csm::EcefVector{m_spacecraftVelocity[0], m_spacecraftVelocity[1], m_spacecraftVelocity[2]}; @@ -502,6 +551,7 @@ csm::RasterGM::SensorPartials UsgsAstroFrameSensorModel::computeSensorPartials( int index, const csm::EcefCoord &groundPt, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing sensor partials image point from ground point {}, {}, {} \ and desiredPrecision: {}", groundPt.x, groundPt.y, groundPt.z, desiredPrecision); @@ -533,6 +583,7 @@ csm::RasterGM::SensorPartials UsgsAstroFrameSensorModel::computeSensorPartials( double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing sensor partials for ground point {}, {}, {}\ with point: {}, {}, index: {}, and desiredPrecision: {}", groundPt.x, groundPt.y, groundPt.z, imagePt.line, imagePt.samp, index, @@ -565,6 +616,7 @@ UsgsAstroFrameSensorModel::computeAllSensorPartials( csm::param::Set pset, double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing all sensor partials for ground point {}, {}, {}\ with point: {}, {}, pset: {}, and desiredPrecision: {}", groundPt.x, groundPt.y, groundPt.z, imagePt.line, imagePt.samp, pset, @@ -580,6 +632,7 @@ UsgsAstroFrameSensorModel::computeAllSensorPartials( double desiredPrecision, double *achievedPrecision, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing all sensor partials image point from ground point {}, {}, {} \ and desiredPrecision: {}", groundPt.x, groundPt.y, groundPt.z, desiredPrecision); @@ -591,8 +644,10 @@ UsgsAstroFrameSensorModel::computeAllSensorPartials( std::vector<double> UsgsAstroFrameSensorModel::computeGroundPartials( const csm::EcefCoord &groundPt) const { - MESSAGE_LOG("Computing ground partials for ground point {}, {}, {}", - groundPt.x, groundPt.y, groundPt.z); + MESSAGE_LOG( + spdlog::level::debug, + "Computing ground partials for ground point {}, {}, {}", + groundPt.x, groundPt.y, groundPt.z); // Partial of line, sample wrt X, Y, Z double x = groundPt.x; double y = groundPt.y; @@ -631,6 +686,7 @@ std::vector<double> UsgsAstroFrameSensorModel::computeGroundPartials( partials[5] = (ipZ.samp - ipB.samp) / pixelGroundSize; MESSAGE_LOG( + spdlog::level::debug, "Computing ground partials results:\nLine: {}, {}, {}\nSample: {}, {}, " "{}", partials[0], partials[1], partials[2], partials[3], partials[4], @@ -641,7 +697,7 @@ std::vector<double> UsgsAstroFrameSensorModel::computeGroundPartials( const csm::CorrelationModel &UsgsAstroFrameSensorModel::getCorrelationModel() const { - MESSAGE_LOG("Accessing correlation model"); + MESSAGE_LOG(spdlog::level::debug, "Accessing correlation model"); return _no_corr_model; } @@ -649,6 +705,7 @@ std::vector<double> UsgsAstroFrameSensorModel::getUnmodeledCrossCovariance( const csm::ImageCoord &pt1, const csm::ImageCoord &pt2) const { // No unmodeled error MESSAGE_LOG( + spdlog::level::debug, "Accessing unmodeled cross covar with \ point1: {}, {} and point2: {}, {}", pt1.line, pt1.samp, pt2.line, pt2.samp); @@ -656,63 +713,63 @@ std::vector<double> UsgsAstroFrameSensorModel::getUnmodeledCrossCovariance( } csm::Version UsgsAstroFrameSensorModel::getVersion() const { - MESSAGE_LOG("Accessing CSM version"); + MESSAGE_LOG(spdlog::level::debug, "Accessing CSM version"); return csm::Version(0, 1, 0); } std::string UsgsAstroFrameSensorModel::getModelName() const { - MESSAGE_LOG("Accessing CSM name {}", _SENSOR_MODEL_NAME); + MESSAGE_LOG(spdlog::level::debug, "Accessing CSM name {}", _SENSOR_MODEL_NAME); return _SENSOR_MODEL_NAME; } std::string UsgsAstroFrameSensorModel::getPedigree() const { - MESSAGE_LOG("Accessing CSM pedigree"); + MESSAGE_LOG(spdlog::level::debug, "Accessing CSM pedigree"); return "USGS_FRAMER"; } std::string UsgsAstroFrameSensorModel::getImageIdentifier() const { - MESSAGE_LOG("Accessing image ID {}", m_imageIdentifier); + MESSAGE_LOG(spdlog::level::debug, "Accessing image ID {}", m_imageIdentifier); return m_imageIdentifier; } void UsgsAstroFrameSensorModel::setImageIdentifier(const std::string &imageId, csm::WarningList *warnings) { - MESSAGE_LOG("Setting image ID to {}", imageId); + MESSAGE_LOG(spdlog::level::debug, "Setting image ID to {}", imageId); m_imageIdentifier = imageId; } std::string UsgsAstroFrameSensorModel::getSensorIdentifier() const { - MESSAGE_LOG("Accessing sensor ID: {}", m_sensorName); + MESSAGE_LOG(spdlog::level::debug, "Accessing sensor ID: {}", m_sensorName); return m_sensorName; } std::string UsgsAstroFrameSensorModel::getPlatformIdentifier() const { - MESSAGE_LOG("Accessing platform ID: {}", m_platformName); + MESSAGE_LOG(spdlog::level::debug, "Accessing platform ID: {}", m_platformName); return m_platformName; } std::string UsgsAstroFrameSensorModel::getCollectionIdentifier() const { - MESSAGE_LOG("Accessing collection ID: {}", m_collectionIdentifier); + MESSAGE_LOG(spdlog::level::debug, "Accessing collection ID: {}", m_collectionIdentifier); return m_collectionIdentifier; } std::string UsgsAstroFrameSensorModel::getTrajectoryIdentifier() const { - MESSAGE_LOG("Accessing trajectory ID"); + MESSAGE_LOG(spdlog::level::debug, "Accessing trajectory ID"); return ""; } std::string UsgsAstroFrameSensorModel::getSensorType() const { - MESSAGE_LOG("Accessing sensor type"); + MESSAGE_LOG(spdlog::level::debug, "Accessing sensor type"); return CSM_SENSOR_TYPE_EO; } std::string UsgsAstroFrameSensorModel::getSensorMode() const { - MESSAGE_LOG("Accessing sensor mode"); + MESSAGE_LOG(spdlog::level::debug, "Accessing sensor mode"); return CSM_SENSOR_MODE_FRAME; } std::string UsgsAstroFrameSensorModel::getReferenceDateAndTime() const { - MESSAGE_LOG("Accessing reference data and time"); + MESSAGE_LOG(spdlog::level::debug, "Accessing reference data and time"); time_t ephemTime = m_ephemerisTime; return ephemTimeToCalendarTime(ephemTime); @@ -745,7 +802,7 @@ std::string UsgsAstroFrameSensorModel::getModelNameFromModelState( } std::string UsgsAstroFrameSensorModel::getModelState() const { - MESSAGE_LOG("Dumping model state"); + MESSAGE_LOG(spdlog::level::debug, "Dumping model state"); json state = { {"m_modelName", _SENSOR_MODEL_NAME}, {"m_sensorName", m_sensorName}, @@ -851,7 +908,7 @@ void UsgsAstroFrameSensorModel::applyTransformToState(ale::Rotation const& r, al bool UsgsAstroFrameSensorModel::isValidModelState( const std::string &stringState, csm::WarningList *warnings) { - MESSAGE_LOG("Checking if model has valid state"); + MESSAGE_LOG(spdlog::level::debug, "Checking if model has valid state"); std::vector<std::string> requiredKeywords = {"m_modelName", "m_majorAxis", "m_minorAxis", @@ -888,7 +945,7 @@ bool UsgsAstroFrameSensorModel::isValidModelState( std::copy(missingKeywords.begin(), missingKeywords.end(), std::ostream_iterator<std::string>(oss, " ")); - MESSAGE_LOG("State has missing keywords: {} ", oss.str()); + MESSAGE_LOG(spdlog::level::warn, "State has missing keywords: {} ", oss.str()); warnings->push_back( csm::Warning(csm::Warning::DATA_NOT_AVAILABLE, @@ -899,7 +956,7 @@ bool UsgsAstroFrameSensorModel::isValidModelState( std::string modelName = jsonState.value<std::string>("m_modelName", ""); if (modelName != _SENSOR_MODEL_NAME && warnings) { - MESSAGE_LOG("Incorrect model name in state, expected {} but got {}", + MESSAGE_LOG(spdlog::level::warn, "Incorrect model name in state, expected {} but got {}", _SENSOR_MODEL_NAME, modelName); warnings->push_back( @@ -918,7 +975,7 @@ bool UsgsAstroFrameSensorModel::isValidIsd(const std::string &Isd, // or rather, it would be a pain to maintain, so just check if // we can get a valid state from ISD. Once ISD schema is 100% clear // we can change this. - MESSAGE_LOG("Building isd to check model state"); + MESSAGE_LOG(spdlog::level::debug, "Building isd to check model state"); try { std::string state = constructStateFromIsd(Isd, warnings); return isValidModelState(state, warnings); @@ -932,7 +989,7 @@ void UsgsAstroFrameSensorModel::replaceModelState( json state = stateAsJson(stringState); - MESSAGE_LOG("Replacing model state"); + MESSAGE_LOG(spdlog::level::debug, "Replacing model state"); // The json library's .at() will except if key is missing try { m_modelName = state.at("m_modelName").get<std::string>(); @@ -991,9 +1048,11 @@ void UsgsAstroFrameSensorModel::replaceModelState( m_lineTimes = state.at("m_lineTimes").get<std::vector<double>>(); } catch (std::out_of_range &e) { - MESSAGE_LOG("State keywords required to generate sensor model missing: " + - std::string(e.what()) + "\nUsing model string: " + stringState + - "UsgsAstroFrameSensorModel::replaceModelState"); + MESSAGE_LOG( + spdlog::level::err, + "State keywords required to generate sensor model missing: " + + std::string(e.what()) + "\nUsing model string: " + stringState + + "UsgsAstroFrameSensorModel::replaceModelState"); throw csm::Error( csm::Error::SENSOR_MODEL_NOT_CONSTRUCTIBLE, "State keywords required to generate sensor model missing: " + @@ -1004,12 +1063,10 @@ void UsgsAstroFrameSensorModel::replaceModelState( std::string UsgsAstroFrameSensorModel::constructStateFromIsd( const std::string &jsonIsd, csm::WarningList *warnings) { - MESSAGE_LOG("Constructing state from isd"); + MESSAGE_LOG(spdlog::level::debug, "Constructing state from isd"); json parsedIsd = json::parse(jsonIsd); json state = {}; - MESSAGE_LOG("Constructing state from isd"); - std::shared_ptr<csm::WarningList> parsingWarnings(new csm::WarningList); state["m_modelName"] = ale::getSensorModelName(parsedIsd); @@ -1053,6 +1110,7 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( if (!positions.empty() && positions.size() != 3) { MESSAGE_LOG( + spdlog::level::warn, "Sensor position does not have 3 values, " "UsgsAstroFrameSensorModel::constructStateFromIsd()"); parsingWarnings->push_back( @@ -1069,6 +1127,7 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( // get sensor_velocity if (!velocities.empty() && velocities.size() != 3) { MESSAGE_LOG( + spdlog::level::warn, "Sensor velocity does not have 3 values, " "UsgsAstroFrameSensorModel::constructStateFromIsd()"); parsingWarnings->push_back( @@ -1142,6 +1201,7 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( if (quaternions.size() != 4) { MESSAGE_LOG( + spdlog::level::warn, "Sensor quaternion does not have 4 values, " "UsgsAstroFrameSensorModel::constructStateFromIsd()"); parsingWarnings->push_back( @@ -1210,6 +1270,7 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( state["m_iTransS"][0].get<double>()); } catch (...) { MESSAGE_LOG( + spdlog::level::warn, "Could not compute detector pixel to focal plane coordinate " "transformation."); parsingWarnings->push_back( @@ -1233,7 +1294,7 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( warnings->insert(warnings->end(), parsingWarnings->begin(), parsingWarnings->end()); } - MESSAGE_LOG("ISD is invalid for creating the sensor model."); + MESSAGE_LOG(spdlog::level::err, "ISD is invalid for creating the sensor model."); throw csm::Error(csm::Error::SENSOR_MODEL_NOT_CONSTRUCTIBLE, "ISD is invalid for creating the sensor model.", @@ -1244,31 +1305,35 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( } csm::EcefCoord UsgsAstroFrameSensorModel::getReferencePoint() const { - MESSAGE_LOG("Accessing reference point x: {}, y: {}, z: {}", - m_referencePointXyz.x, m_referencePointXyz.y, - m_referencePointXyz.z); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing reference point x: {}, y: {}, z: {}", + m_referencePointXyz.x, m_referencePointXyz.y, + m_referencePointXyz.z); return m_referencePointXyz; } void UsgsAstroFrameSensorModel::setReferencePoint( const csm::EcefCoord &groundPt) { - MESSAGE_LOG("Setting reference point to {}, {}, {}", groundPt.x, groundPt.y, - groundPt.z); + MESSAGE_LOG( + spdlog::level::debug, + "Setting reference point to {}, {}, {}", + groundPt.x, groundPt.y, groundPt.z); m_referencePointXyz = groundPt; } int UsgsAstroFrameSensorModel::getNumParameters() const { - MESSAGE_LOG("Accessing num parameters: {}", NUM_PARAMETERS); + MESSAGE_LOG(spdlog::level::debug, "Accessing num parameters: {}", NUM_PARAMETERS); return NUM_PARAMETERS; } std::string UsgsAstroFrameSensorModel::getParameterName(int index) const { - MESSAGE_LOG("Setting parameter name to {}", index); + MESSAGE_LOG(spdlog::level::debug, "Setting parameter name to {}", index); return m_parameterName[index]; } std::string UsgsAstroFrameSensorModel::getParameterUnits(int index) const { - MESSAGE_LOG("Accessing parameter units for {}", index); + MESSAGE_LOG(spdlog::level::debug, "Accessing parameter units for {}", index); if (index < 3) { return "m"; } else { @@ -1277,18 +1342,19 @@ std::string UsgsAstroFrameSensorModel::getParameterUnits(int index) const { } bool UsgsAstroFrameSensorModel::hasShareableParameters() const { - MESSAGE_LOG("Checking for shareable parameters"); + MESSAGE_LOG(spdlog::level::debug, "Checking for shareable parameters"); return false; } bool UsgsAstroFrameSensorModel::isParameterShareable(int index) const { - MESSAGE_LOG("Checking is parameter: {} is shareable", index); + MESSAGE_LOG(spdlog::level::debug, "Checking is parameter: {} is shareable", index); return false; } csm::SharingCriteria UsgsAstroFrameSensorModel::getParameterSharingCriteria( int index) const { MESSAGE_LOG( + spdlog::level::debug, "Checking sharing criteria for parameter {}. " "Sharing is not supported.", index); @@ -1296,52 +1362,59 @@ csm::SharingCriteria UsgsAstroFrameSensorModel::getParameterSharingCriteria( } double UsgsAstroFrameSensorModel::getParameterValue(int index) const { - MESSAGE_LOG("Accessing parameter value {} at index: {}", - m_currentParameterValue[index], index); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing parameter value {} at index: {}", + m_currentParameterValue[index], index); return m_currentParameterValue[index]; } void UsgsAstroFrameSensorModel::setParameterValue(int index, double value) { - MESSAGE_LOG("Setting parameter value: {} at index: {}", value, index); + MESSAGE_LOG(spdlog::level::debug, "Setting parameter value: {} at index: {}", value, index); m_currentParameterValue[index] = value; } csm::param::Type UsgsAstroFrameSensorModel::getParameterType(int index) const { - MESSAGE_LOG("Accessing parameter type: {} at index: {}", + MESSAGE_LOG(spdlog::level::debug, "Accessing parameter type: {} at index: {}", m_parameterType[index], index); return m_parameterType[index]; } void UsgsAstroFrameSensorModel::setParameterType(int index, csm::param::Type pType) { - MESSAGE_LOG("Setting parameter type: {} at index: {}", pType, index); + MESSAGE_LOG(spdlog::level::debug, "Setting parameter type: {} at index: {}", pType, index); m_parameterType[index] = pType; } double UsgsAstroFrameSensorModel::getParameterCovariance(int index1, int index2) const { int index = UsgsAstroFrameSensorModel::NUM_PARAMETERS * index1 + index2; - MESSAGE_LOG("Accessing parameter covar: {} between index1: {} and index2: {}", - m_currentParameterCovariance[index], index1, index2); + MESSAGE_LOG( + spdlog::level::debug, + "Accessing parameter covar: {} between index1: {} and index2: {}", + m_currentParameterCovariance[index], index1, index2); return m_currentParameterCovariance[index]; } void UsgsAstroFrameSensorModel::setParameterCovariance(int index1, int index2, double covariance) { - MESSAGE_LOG("Setting parameter covar: {} between index1: {} and index2: {}", - covariance, index1, index2); + MESSAGE_LOG( + spdlog::level::debug, + "Setting parameter covar: {} between index1: {} and index2: {}", + covariance, index1, index2); int index = UsgsAstroFrameSensorModel::NUM_PARAMETERS * index1 + index2; m_currentParameterCovariance[index] = covariance; } int UsgsAstroFrameSensorModel::getNumGeometricCorrectionSwitches() const { - MESSAGE_LOG("Accessing num geom correction switches"); + MESSAGE_LOG(spdlog::level::debug, "Accessing num geom correction switches"); return 0; } std::string UsgsAstroFrameSensorModel::getGeometricCorrectionName( int index) const { MESSAGE_LOG( + spdlog::level::debug, "Accessing name of geometric correction switch {}. " "Geometric correction switches are not supported, throwing exception", index); @@ -1353,6 +1426,7 @@ std::string UsgsAstroFrameSensorModel::getGeometricCorrectionName( void UsgsAstroFrameSensorModel::setGeometricCorrectionSwitch( int index, bool value, csm::param::Type pType) { MESSAGE_LOG( + spdlog::level::debug, "Setting geometric correction switch {} to {} " "with parameter type {}. " "Geometric correction switches are not supported, throwing exception", @@ -1364,6 +1438,7 @@ void UsgsAstroFrameSensorModel::setGeometricCorrectionSwitch( bool UsgsAstroFrameSensorModel::getGeometricCorrectionSwitch(int index) const { MESSAGE_LOG( + spdlog::level::debug, "Accessing value of geometric correction switch {}. " "Geometric correction switches are not supported, throwing exception", index); @@ -1375,7 +1450,7 @@ bool UsgsAstroFrameSensorModel::getGeometricCorrectionSwitch(int index) const { std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix( const GeometricModel &comparisonModel, csm::param::Set pSet, const GeometricModelList &otherModels) const { - MESSAGE_LOG("Accessing cross covariance matrix"); + MESSAGE_LOG(spdlog::level::debug, "Accessing cross covariance matrix"); // No correlation between models. const std::vector<int> &indices = getParameterSetIndices(pSet); @@ -1388,19 +1463,19 @@ std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix( } csm::Ellipsoid UsgsAstroFrameSensorModel::getEllipsoid() const { - MESSAGE_LOG("Accessing ellipsoid radii {} {}", m_majorAxis, m_minorAxis); + MESSAGE_LOG(spdlog::level::debug, "Accessing ellipsoid radii {} {}", m_majorAxis, m_minorAxis); return csm::Ellipsoid(m_majorAxis, m_minorAxis); } void UsgsAstroFrameSensorModel::setEllipsoid(const csm::Ellipsoid &ellipsoid) { - MESSAGE_LOG("Setting ellipsoid radii {} {}", ellipsoid.getSemiMajorRadius(), + MESSAGE_LOG(spdlog::level::debug, "Setting ellipsoid radii {} {}", ellipsoid.getSemiMajorRadius(), ellipsoid.getSemiMinorRadius()); m_majorAxis = ellipsoid.getSemiMajorRadius(); m_minorAxis = ellipsoid.getSemiMinorRadius(); } void UsgsAstroFrameSensorModel::calcRotationMatrix(double m[3][3]) const { - MESSAGE_LOG("Calculating rotation matrix"); + MESSAGE_LOG(spdlog::level::trace, "Calculating rotation matrix"); // Trigonometric functions for rotation matrix double x = m_currentParameterValue[3]; double y = m_currentParameterValue[4]; @@ -1426,7 +1501,7 @@ void UsgsAstroFrameSensorModel::calcRotationMatrix(double m[3][3]) const { void UsgsAstroFrameSensorModel::calcRotationMatrix( double m[3][3], const std::vector<double> &adjustments) const { - MESSAGE_LOG("Calculating rotation matrix with adjustments"); + MESSAGE_LOG(spdlog::level::trace, "Calculating rotation matrix with adjustments"); // Trigonometric functions for rotation matrix double x = getValue(3, adjustments); double y = getValue(4, adjustments); @@ -1449,6 +1524,7 @@ void UsgsAstroFrameSensorModel::losEllipsoidIntersect( const double xl, const double yl, const double zl, double &x, double &y, double &z, csm::WarningList *warnings) const { MESSAGE_LOG( + spdlog::level::trace, "Calculating losEllipsoidIntersect with height: {},\n\ xc: {}, yc: {}, zc: {}\n\ xl: {}, yl: {}, zl: {}", @@ -1484,7 +1560,7 @@ void UsgsAstroFrameSensorModel::losEllipsoidIntersect( csm::Warning(csm::Warning::NO_INTERSECTION, message, "UsgsAstroFrameSensorModel::losEllipsoidIntersect")); } - MESSAGE_LOG(message); + MESSAGE_LOG(spdlog::level::warn, message); } double scale; @@ -1495,15 +1571,17 @@ void UsgsAstroFrameSensorModel::losEllipsoidIntersect( y = yc + scale * yl; z = zc + scale * zl; - MESSAGE_LOG("Calculated losEllipsoidIntersect at: {}, {}, {}", x, y, z); + MESSAGE_LOG(spdlog::level::trace, "Calculated losEllipsoidIntersect at: {}, {}, {}", x, y, z); } /***** Helper Functions *****/ double UsgsAstroFrameSensorModel::getValue( int index, const std::vector<double> &adjustments) const { - MESSAGE_LOG("Accessing value: {} at index: {}, with adjustments", - m_currentParameterValue[index] + adjustments[index], index); + MESSAGE_LOG( + spdlog::level::trace, + "Accessing value: {} at index: {}, with adjustments", + m_currentParameterValue[index] + adjustments[index], index); return m_currentParameterValue[index] + adjustments[index]; } diff --git a/src/UsgsAstroLsSensorModel.cpp b/src/UsgsAstroLsSensorModel.cpp index 0d0a756..48dd7dd 100644 --- a/src/UsgsAstroLsSensorModel.cpp +++ b/src/UsgsAstroLsSensorModel.cpp @@ -40,7 +40,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MESSAGE_LOG(...) \ if (m_logger) { \ - m_logger->info(__VA_ARGS__); \ + m_logger->log(__VA_ARGS__); \ } using json = nlohmann::json; @@ -130,7 +130,7 @@ const csm::param::Type UsgsAstroLsSensorModel::PARAM_CHAR_ALL[] = { // UsgsAstroLineScannerSensorModel::replaceModelState //*************************************************************************** void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { - MESSAGE_LOG("Replacing model state") + MESSAGE_LOG(spdlog::level::info, "Replacing model state") reset(); auto j = stateAsJson(stateString); @@ -142,6 +142,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_nSamples = j["m_nSamples"]; m_platformFlag = j["m_platformFlag"]; MESSAGE_LOG( + spdlog::level::trace, "m_imageIdentifier: {} " "m_sensorName: {} " "m_nLines: {} " @@ -162,6 +163,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_startingDetectorLine = j["m_startingDetectorLine"]; m_ikCode = j["m_ikCode"]; MESSAGE_LOG( + spdlog::level::trace, "m_startingEphemerisTime: {} " "m_centerEphemerisTime: {} " "m_detectorSampleSumming: {} " @@ -177,6 +179,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_distortionType = (DistortionType)j["m_distortionType"].get<int>(); m_opticalDistCoeffs = j["m_opticalDistCoeffs"].get<std::vector<double>>(); MESSAGE_LOG( + spdlog::level::trace, "m_focalLength: {} " "m_zDirection: {} " "m_distortionType: {} ", @@ -193,6 +196,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_majorAxis = j["m_majorAxis"]; m_minorAxis = j["m_minorAxis"]; MESSAGE_LOG( + spdlog::level::trace, "m_detectorSampleOrigin: {} " "m_detectorLineOrigin: {} " "m_majorAxis: {} " @@ -203,6 +207,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_platformIdentifier = j["m_platformIdentifier"]; m_sensorIdentifier = j["m_sensorIdentifier"]; MESSAGE_LOG( + spdlog::level::trace, "m_platformIdentifier: {} " "m_sensorIdentifier: {} ", j["m_platformIdentifier"].dump(), j["m_sensorIdentifier"].dump()) @@ -210,6 +215,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_minElevation = j["m_minElevation"]; m_maxElevation = j["m_maxElevation"]; MESSAGE_LOG( + spdlog::level::trace, "m_minElevation: {} " "m_maxElevation: {} ", j["m_minElevation"].dump(), j["m_maxElevation"].dump()) @@ -220,6 +226,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_t0Quat = j["m_t0Quat"]; m_numPositions = j["m_numPositions"]; MESSAGE_LOG( + spdlog::level::trace, "m_dtEphem: {} " "m_t0Ephem: {} " "m_dtQuat: {} " @@ -232,6 +239,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_referencePointXyz.y = j["m_referencePointXyz"][1]; m_referencePointXyz.z = j["m_referencePointXyz"][2]; MESSAGE_LOG( + spdlog::level::trace, "m_numQuaternions: {} " "m_referencePointX: {} " "m_referencePointY: {} " @@ -244,6 +252,7 @@ void UsgsAstroLsSensorModel::replaceModelState(const std::string& stateString) { m_halfSwath = j["m_halfSwath"]; m_halfTime = j["m_halfTime"]; MESSAGE_LOG( + spdlog::level::trace, "m_gsd: {} " "m_flyingHeight: {} " "m_halfSwath: {} " @@ -316,7 +325,7 @@ std::string UsgsAstroLsSensorModel::getModelNameFromModelState( // UsgsAstroLineScannerSensorModel::getModelState //*************************************************************************** std::string UsgsAstroLsSensorModel::getModelState() const { - MESSAGE_LOG("Running getModelState") + MESSAGE_LOG(spdlog::level::info, "Running getModelState") json state; state["m_modelName"] = _SENSOR_MODEL_NAME; @@ -328,6 +337,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_nSamples"] = m_nSamples; state["m_platformFlag"] = m_platformFlag; MESSAGE_LOG( + spdlog::level::trace, "m_imageIdentifier: {} " "m_sensorName: {} " "m_nLines: {} " @@ -341,6 +351,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_startingEphemerisTime"] = m_startingEphemerisTime; state["m_centerEphemerisTime"] = m_centerEphemerisTime; MESSAGE_LOG( + spdlog::level::trace, "m_startingEphemerisTime: {} " "m_centerEphemerisTime: {} ", m_startingEphemerisTime, m_centerEphemerisTime) @@ -350,6 +361,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_startingDetectorSample"] = m_startingDetectorSample; state["m_ikCode"] = m_ikCode; MESSAGE_LOG( + spdlog::level::trace, "m_detectorSampleSumming: {} " "m_detectorLineSumming: {} " "m_startingDetectorSample: {} " @@ -362,6 +374,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_distortionType"] = m_distortionType; state["m_opticalDistCoeffs"] = m_opticalDistCoeffs; MESSAGE_LOG( + spdlog::level::trace, "m_focalLength: {} " "m_zDirection: {} " "m_distortionType (0-Radial, 1-Transverse): {} ", @@ -375,6 +388,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_majorAxis"] = m_majorAxis; state["m_minorAxis"] = m_minorAxis; MESSAGE_LOG( + spdlog::level::trace, "m_detectorSampleOrigin: {} " "m_detectorLineOrigin: {} " "m_majorAxis: {} " @@ -386,6 +400,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_minElevation"] = m_minElevation; state["m_maxElevation"] = m_maxElevation; MESSAGE_LOG( + spdlog::level::trace, "m_platformIdentifier: {} " "m_sensorIdentifier: {} " "m_minElevation: {} " @@ -397,6 +412,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_dtQuat"] = m_dtQuat; state["m_t0Quat"] = m_t0Quat; MESSAGE_LOG( + spdlog::level::trace, "m_dtEphem: {} " "m_t0Ephem: {} " "m_dtQuat: {} " @@ -409,6 +425,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_velocities"] = m_velocities; state["m_quaternions"] = m_quaternions; MESSAGE_LOG( + spdlog::level::trace, "m_numPositions: {} " "m_numQuaternions: {} ", m_numPositions, m_numQuaternions) @@ -422,6 +439,7 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_halfTime"] = m_halfTime; state["m_covariance"] = m_covariance; MESSAGE_LOG( + spdlog::level::trace, "m_gsd: {} " "m_flyingHeight: {} " "m_halfSwath: {} " @@ -433,16 +451,17 @@ std::string UsgsAstroLsSensorModel::getModelState() const { state["m_referencePointXyz"][1] = m_referencePointXyz.y; state["m_referencePointXyz"][2] = m_referencePointXyz.z; MESSAGE_LOG( + spdlog::level::trace, "m_referencePointXyz: {} " "m_referencePointXyz: {} " "m_referencePointXyz: {} ", m_referencePointXyz.x, m_referencePointXyz.y, m_referencePointXyz.z) state["m_sunPosition"] = m_sunPosition; - MESSAGE_LOG("num sun positions: {} ", m_sunPosition.size()) + MESSAGE_LOG(spdlog::level::trace, "num sun positions: {} ", m_sunPosition.size()) state["m_sunVelocity"] = m_sunVelocity; - MESSAGE_LOG("num sun velocities: {} ", m_sunVelocity.size()); + MESSAGE_LOG(spdlog::level::trace, "num sun velocities: {} ", m_sunVelocity.size()); // Use dump(2) to avoid creating the model string as a single long line std::string stateString = getModelName() + "\n" + state.dump(2); @@ -490,7 +509,7 @@ void UsgsAstroLsSensorModel::applyTransformToState(ale::Rotation const& r, ale:: // UsgsAstroLineScannerSensorModel::reset //*************************************************************************** void UsgsAstroLsSensorModel::reset() { - MESSAGE_LOG("Running reset()") + MESSAGE_LOG(spdlog::level::debug, "Running reset()") m_useApproxInitTrans = false; // default until an initial approximation is found _no_adjustment.assign(UsgsAstroLsSensorModel::NUM_PARAMETERS, 0.0); @@ -566,7 +585,11 @@ UsgsAstroLsSensorModel::UsgsAstroLsSensorModel() { //***************************************************************************** // UsgsAstroLsSensorModel Destructor //***************************************************************************** -UsgsAstroLsSensorModel::~UsgsAstroLsSensorModel() {} +UsgsAstroLsSensorModel::~UsgsAstroLsSensorModel() { + if (m_logger) { + m_logger->flush(); + } +} //***************************************************************************** // UsgsAstroLsSensorModel updateState @@ -574,19 +597,22 @@ UsgsAstroLsSensorModel::~UsgsAstroLsSensorModel() {} void UsgsAstroLsSensorModel::updateState() { // If sensor model is being created for the first time // This routine will set some parameters not found in the ISD. - MESSAGE_LOG("Updating State") + MESSAGE_LOG(spdlog::level::debug, "Updating State") // Reference point (image center) double lineCtr = m_nLines / 2.0; double sampCtr = m_nSamples / 2.0; csm::ImageCoord ip(lineCtr, sampCtr); - MESSAGE_LOG("updateState: center image coordinate set to {} {}", lineCtr, - sampCtr) + MESSAGE_LOG( + spdlog::level::trace, + "updateState: center image coordinate set to {} {}", + lineCtr, sampCtr) double refHeight = 0; m_referencePointXyz = imageToGround(ip, refHeight); - MESSAGE_LOG("updateState: reference point (x, y, z) {} {} {}", - m_referencePointXyz.x, m_referencePointXyz.y, - m_referencePointXyz.z) + MESSAGE_LOG( + spdlog::level::trace, + "updateState: reference point (x, y, z) {} {} {}", + m_referencePointXyz.x, m_referencePointXyz.y, m_referencePointXyz.z) // Compute ground sample distance ip.line += 1; @@ -597,6 +623,7 @@ void UsgsAstroLsSensorModel::updateState() { double dz = delta.z - m_referencePointXyz.z; m_gsd = sqrt((dx * dx + dy * dy + dz * dz) / 2.0); MESSAGE_LOG( + spdlog::level::trace, "updateState: ground sample distance set to {} " "based on dx {} dy {} dz {}", m_gsd, dx, dy, dz) @@ -608,20 +635,21 @@ void UsgsAstroLsSensorModel::updateState() { dz = sensorPos.z - m_referencePointXyz.z; m_flyingHeight = sqrt(dx * dx + dy * dy + dz * dz); MESSAGE_LOG( + spdlog::level::trace, "updateState: flight height set to {}" "based on dx {} dy {} dz {}", m_flyingHeight, dx, dy, dz) // Compute half swath m_halfSwath = m_gsd * m_nSamples / 2.0; - MESSAGE_LOG("updateState: half swath set to {}", m_halfSwath) + MESSAGE_LOG(spdlog::level::trace, "updateState: half swath set to {}", m_halfSwath) // Compute half time duration double fullImageTime = m_intTimeStartTimes.back() - m_intTimeStartTimes.front() + m_intTimes.back() * (m_nLines - m_intTimeLines.back()); m_halfTime = fullImageTime / 2.0; - MESSAGE_LOG("updateState: half time duration set to {}", m_halfTime) + MESSAGE_LOG(spdlog::level::trace, "updateState: half time duration set to {}", m_halfTime) // Parameter covariance, hardcoded accuracy values // hardcoded ~1 pixel accuracy values @@ -667,13 +695,19 @@ csm::ImageCoord UsgsAstroLsSensorModel::groundToImage( const csm::EcefCoord& ground_pt, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( - "Computing groundToImage(No adjustments) for {}, {}, {}, with desired " + spdlog::level::info, + "Computing groundToImage(No adjustments) for ({}, {}, {}), with desired " "precision {}", ground_pt.x, ground_pt.y, ground_pt.z, desired_precision); // The public interface invokes the private interface with no adjustments. - return groundToImage(ground_pt, _no_adjustment, desired_precision, - achieved_precision, warnings); + csm::ImageCoord imagePt = groundToImage( + ground_pt, _no_adjustment, desired_precision, achieved_precision, warnings); + MESSAGE_LOG( + spdlog::level::info, + "groundToImage result of ({}, {})", + imagePt.line, imagePt.samp); + return imagePt; } //*************************************************************************** @@ -740,8 +774,10 @@ csm::ImageCoord UsgsAstroLsSensorModel::groundToImage( *achievedPrecision = finalUpdate; } - MESSAGE_LOG("groundToImage: image line sample {} {}", approxPt.line, - approxPt.samp) + MESSAGE_LOG( + spdlog::level::debug, + "groundToImage result image line sample {} {}", + approxPt.line, approxPt.samp) if (warnings && (desiredPrecision > 0.0) && (std::abs(finalUpdate) > desiredPrecision)) { @@ -760,6 +796,7 @@ csm::ImageCoordCovar UsgsAstroLsSensorModel::groundToImage( const csm::EcefCoordCovar& groundPt, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing groundToImage(Covar) for {}, {}, {}, with desired precision " "{}", groundPt.x, groundPt.y, groundPt.z, desired_precision); @@ -819,6 +856,7 @@ csm::EcefCoord UsgsAstroLsSensorModel::imageToGround( const csm::ImageCoord& image_pt, double height, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing imageToGround for {}, {}, {}, with desired precision {}", image_pt.line, image_pt.samp, height, desired_precision); double xc, yc, zc; @@ -840,7 +878,10 @@ csm::EcefCoord UsgsAstroLsSensorModel::imageToGround( csm::Warning::PRECISION_NOT_MET, "Desired precision not achieved.", "UsgsAstroLsSensorModel::imageToGround()")); } - MESSAGE_LOG("imageToGround for {} {} {}", image_pt.line, image_pt.samp, height); + MESSAGE_LOG( + spdlog::level::info, + "imageToGround result {} {} {}", + x, y, z); return csm::EcefCoord(x, y, z); } @@ -849,8 +890,10 @@ csm::EcefCoord UsgsAstroLsSensorModel::imageToGround( //*************************************************************************** void UsgsAstroLsSensorModel::determineSensorCovarianceInImageSpace( csm::EcefCoord& gp, double sensor_cov[4]) const { - MESSAGE_LOG("Calculating determineSensorCovarianceInImageSpace for {} {} {}", - gp.x, gp.y, gp.z) + MESSAGE_LOG( + spdlog::level::debug, + "Calculating determineSensorCovarianceInImageSpace for {} {} {}", + gp.x, gp.y, gp.z) int i, j, totalAdjParams; totalAdjParams = getNumParameters(); @@ -885,7 +928,8 @@ csm::EcefCoordCovar UsgsAstroLsSensorModel::imageToGround( double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( - "Calculating imageToGround (with error propagation) for {}, {}, {} with " + spdlog::level::debug, + "Calculating imageToGround (covar) for {}, {}, {} with " "height varinace {} and desired precision {}", image_pt.line, image_pt.samp, height, heightVariance, desired_precision) // Image to ground with error propagation @@ -914,7 +958,7 @@ csm::EcefCoordCovar UsgsAstroLsSensorModel::imageToGround( double zps = (gps.z - gp.z) / DELTA_IMAGE; ip.line = image_pt.line; - ip.samp = image_pt.samp; // +DELTA_IMAGE; + ip.samp = image_pt.samp; csm::EcefCoord gph = imageToGround(ip, height + DELTA_GROUND, desired_precision); double xph = (gph.x - gp.x) / DELTA_GROUND; @@ -972,8 +1016,9 @@ csm::EcefLocus UsgsAstroLsSensorModel::imageToProximateImagingLocus( double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing imageToProximateImagingLocus (ground {}, {}, {}) for image " - "point {}, {} with desired precision {}", + "point ({}, {}) with desired precision {}", ground_pt.x, ground_pt.y, ground_pt.z, image_pt.line, image_pt.samp, desired_precision); @@ -1036,6 +1081,7 @@ csm::EcefLocus UsgsAstroLsSensorModel::imageToRemoteImagingLocus( const csm::ImageCoord& image_pt, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::info, "Calculating imageToRemoteImagingLocus for point {}, {} with desired " "precision {}", image_pt.line, image_pt.samp, desired_precision) @@ -1053,6 +1099,13 @@ csm::EcefLocus UsgsAstroLsSensorModel::imageToRemoteImagingLocus( if (achieved_precision) { *achieved_precision = 0.0; } + + MESSAGE_LOG( + spdlog::level::info, + "imageToProximateImagingLocus result of point ({}, {}, {}) " + "direction ({}, {}, {}).", + locus.point.x, locus.point.y, locus.point.z, + locus.direction.x, locus.direction.y, locus.direction.z); return locus; } @@ -1065,8 +1118,10 @@ csm::EcefLocus UsgsAstroLsSensorModel::imageToRemoteImagingLocus( //*************************************************************************** std::vector<double> UsgsAstroLsSensorModel::computeGroundPartials( const csm::EcefCoord& ground_pt) const { - MESSAGE_LOG("Computing computeGroundPartials for point {}, {}, {}", - ground_pt.x, ground_pt.y, ground_pt.z) + MESSAGE_LOG( + spdlog::level::debug, + "Computing computeGroundPartials for point {}, {}, {}", + ground_pt.x, ground_pt.y, ground_pt.z) double GND_DELTA = m_gsd; // Partial of line, sample wrt X, Y, Z @@ -1097,6 +1152,7 @@ csm::RasterGM::SensorPartials UsgsAstroLsSensorModel::computeSensorPartials( int index, const csm::EcefCoord& ground_pt, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Calculating computeSensorPartials for ground point {}, {}, {} with " "desired precision {}", ground_pt.x, ground_pt.y, ground_pt.z, desired_precision) @@ -1118,6 +1174,7 @@ csm::RasterGM::SensorPartials UsgsAstroLsSensorModel::computeSensorPartials( double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Calculating computeSensorPartials (with image points {}, {}) for ground " "point {}, {}, {} with desired precision {}", image_pt.line, image_pt.samp, ground_pt.x, ground_pt.y, ground_pt.z, @@ -1147,6 +1204,7 @@ UsgsAstroLsSensorModel::computeAllSensorPartials( double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::info, "Computing computeAllSensorPartials for ground point {}, {}, {} with " "desired precision {}", ground_pt.x, ground_pt.y, ground_pt.z, desired_precision) @@ -1166,6 +1224,7 @@ UsgsAstroLsSensorModel::computeAllSensorPartials( csm::param::Set pSet, double desired_precision, double* achieved_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing computeAllSensorPartials for image {} {} and ground {}, {}, " "{} with desired precision {}", image_pt.line, image_pt.samp, ground_pt.x, ground_pt.y, ground_pt.z, @@ -1182,8 +1241,10 @@ double UsgsAstroLsSensorModel::getParameterCovariance(int index1, int index2) const { int index = UsgsAstroLsSensorModel::NUM_PARAMETERS * index1 + index2; - MESSAGE_LOG("getParameterCovariance for {} {} is {}", index1, index2, - m_covariance[index]) + MESSAGE_LOG( + spdlog::level::debug, + "getParameterCovariance for {} {} is {}", + index1, index2, m_covariance[index]) return m_covariance[index]; } @@ -1195,8 +1256,10 @@ void UsgsAstroLsSensorModel::setParameterCovariance(int index1, int index2, double covariance) { int index = UsgsAstroLsSensorModel::NUM_PARAMETERS * index1 + index2; - MESSAGE_LOG("setParameterCovariance for {} {} is {}", index1, index2, - m_covariance[index]) + MESSAGE_LOG( + spdlog::level::debug, + "setParameterCovariance for {} {} is {}", + index1, index2, m_covariance[index]) m_covariance[index] = covariance; } @@ -1232,6 +1295,10 @@ std::string UsgsAstroLsSensorModel::getReferenceDateAndTime() const { //*************************************************************************** double UsgsAstroLsSensorModel::getImageTime( const csm::ImageCoord& image_pt) const { + MESSAGE_LOG( + spdlog::level::debug, + "getImageTime for image line {}", + image_pt.line) double lineFull = image_pt.line; auto referenceLineIt = @@ -1247,7 +1314,10 @@ double UsgsAstroLsSensorModel::getImageTime( m_intTimes[referenceIndex] * (lineFull - m_intTimeLines[referenceIndex] + 0.5); - MESSAGE_LOG("getImageTime for image line {} is {}", image_pt.line, time) + MESSAGE_LOG( + spdlog::level::debug, + "getImageTime is {}", + time) return time; } @@ -1257,7 +1327,10 @@ double UsgsAstroLsSensorModel::getImageTime( //*************************************************************************** csm::EcefCoord UsgsAstroLsSensorModel::getSensorPosition( const csm::ImageCoord& imagePt) const { - MESSAGE_LOG("getSensorPosition at line {}", imagePt.line) + MESSAGE_LOG( + spdlog::level::debug, + "getSensorPosition at image coord ({}, {})", + imagePt.line, imagePt.samp) return getSensorPosition(getImageTime(imagePt)); } @@ -1266,12 +1339,18 @@ csm::EcefCoord UsgsAstroLsSensorModel::getSensorPosition( // UsgsAstroLsSensorModel::getSensorPosition //*************************************************************************** csm::EcefCoord UsgsAstroLsSensorModel::getSensorPosition(double time) const { + MESSAGE_LOG( + spdlog::level::debug, + "getSensorPosition at {}", + time) double x, y, z, vx, vy, vz; bool calc_vel = false; getAdjSensorPosVel(time, _no_adjustment, x, y, z, vx, vy, vz, calc_vel); - MESSAGE_LOG("getSensorPosition at {}", time) - + MESSAGE_LOG( + spdlog::level::debug, + "getSensorPosition is ({}, {}, {})", + x, y, z); return csm::EcefCoord(x, y, z); } @@ -1280,7 +1359,10 @@ csm::EcefCoord UsgsAstroLsSensorModel::getSensorPosition(double time) const { //*************************************************************************** csm::EcefVector UsgsAstroLsSensorModel::getSensorVelocity( const csm::ImageCoord& imagePt) const { - MESSAGE_LOG("getSensorVelocity at {}", imagePt.line) + MESSAGE_LOG( + spdlog::level::debug, + "getSensorVelocity at image coord ({}, {})", + imagePt.line, imagePt.samp); return getSensorVelocity(getImageTime(imagePt)); } @@ -1288,11 +1370,18 @@ csm::EcefVector UsgsAstroLsSensorModel::getSensorVelocity( // UsgsAstroLsSensorModel::getSensorVelocity //*************************************************************************** csm::EcefVector UsgsAstroLsSensorModel::getSensorVelocity(double time) const { + MESSAGE_LOG( + spdlog::level::debug, + "getSensorVelocity at {}", + time); double x, y, z, vx, vy, vz; getAdjSensorPosVel(time, _no_adjustment, x, y, z, vx, vy, vz); - MESSAGE_LOG("getSensorVelocity at {}", time) + MESSAGE_LOG( + spdlog::level::debug, + "getSensorVelocity is ({}, {}, {})", + vx, vy, vz) return csm::EcefVector(vx, vy, vz); } @@ -1455,6 +1544,7 @@ UsgsAstroLsSensorModel::getValidImageRange() const { csm::EcefVector UsgsAstroLsSensorModel::getIlluminationDirection( const csm::EcefCoord& groundPt) const { MESSAGE_LOG( + spdlog::level::debug, "Accessing illumination direction of ground point" "{} {} {}.", groundPt.x, groundPt.y, groundPt.z); @@ -1492,6 +1582,7 @@ int UsgsAstroLsSensorModel::getNumGeometricCorrectionSwitches() const { std::string UsgsAstroLsSensorModel::getGeometricCorrectionName( int index) const { MESSAGE_LOG( + spdlog::level::debug, "Accessing name of geometric correction switch {}. " "Geometric correction switches are not supported, throwing exception", index); @@ -1506,6 +1597,7 @@ std::string UsgsAstroLsSensorModel::getGeometricCorrectionName( void UsgsAstroLsSensorModel::setGeometricCorrectionSwitch( int index, bool value, csm::param::Type pType) { MESSAGE_LOG( + spdlog::level::debug, "Setting geometric correction switch {} to {} " "with parameter type {}. " "Geometric correction switches are not supported, throwing exception", @@ -1520,6 +1612,7 @@ void UsgsAstroLsSensorModel::setGeometricCorrectionSwitch( //*************************************************************************** bool UsgsAstroLsSensorModel::getGeometricCorrectionSwitch(int index) const { MESSAGE_LOG( + spdlog::level::debug, "Accessing value of geometric correction switch {}. " "Geometric correction switches are not supported, throwing exception", index); @@ -1604,6 +1697,7 @@ bool UsgsAstroLsSensorModel::isParameterShareable(int index) const { csm::SharingCriteria UsgsAstroLsSensorModel::getParameterSharingCriteria( int index) const { MESSAGE_LOG( + spdlog::level::debug, "Checking sharing criteria for parameter {}. " "Sharing is not supported.", index); @@ -1662,6 +1756,7 @@ void UsgsAstroLsSensorModel::getQuaternions(const double& time, if (m_numQuaternions < 6 && nOrder == 8) nOrderQuat = 4; MESSAGE_LOG( + spdlog::level::debug, "Calculating getQuaternions for time {} with {}" "order lagrange", time, nOrder) @@ -1676,6 +1771,7 @@ void UsgsAstroLsSensorModel::calculateAttitudeCorrection( const double& time, const std::vector<double>& adj, double attCorr[9]) const { MESSAGE_LOG( + spdlog::level::debug, "Computing calculateAttitudeCorrection (with adjustment)" "for time {}", time) @@ -1692,8 +1788,10 @@ void UsgsAstroLsSensorModel::calculateAttitudeCorrection( euler[2] = (getValue(8, adj) + getValue(11, adj) * nTime + getValue(14, adj) * nTime2) / m_halfSwath; - MESSAGE_LOG("calculateAttitudeCorrection: euler {} {} {}", euler[0], euler[1], - euler[2]) + MESSAGE_LOG( + spdlog::level::trace, + "calculateAttitudeCorrection: euler {} {} {}", + euler[0], euler[1], euler[2]) calculateRotationMatrixFromEuler(euler, attCorr); } @@ -1719,6 +1817,7 @@ void UsgsAstroLsSensorModel::losToEcf( // Computes image ray (look vector) in ecf coordinate system. // Compute adjusted sensor position and velocity MESSAGE_LOG( + spdlog::level::debug, "Computing losToEcf (with adjustments) for" "line {} sample {}", line, sample); @@ -1739,24 +1838,30 @@ void UsgsAstroLsSensorModel::losToEcf( m_detectorSampleSumming, m_detectorLineSumming, m_startingDetectorSample, m_startingDetectorLine, m_iTransS, m_iTransL, distortedFocalPlaneX, distortedFocalPlaneY); - MESSAGE_LOG("losToEcf: distorted focal plane coordinate {} {}", - distortedFocalPlaneX, distortedFocalPlaneY) + MESSAGE_LOG( + spdlog::level::trace, + "losToEcf: distorted focal plane coordinate {} {}", + distortedFocalPlaneX, distortedFocalPlaneY) // Remove lens double undistortedFocalPlaneX, undistortedFocalPlaneY; removeDistortion(distortedFocalPlaneX, distortedFocalPlaneY, undistortedFocalPlaneX, undistortedFocalPlaneY, m_opticalDistCoeffs, m_distortionType); - MESSAGE_LOG("losToEcf: undistorted focal plane coordinate {} {}", - undistortedFocalPlaneX, undistortedFocalPlaneY) + MESSAGE_LOG( + spdlog::level::trace, + "losToEcf: undistorted focal plane coordinate {} {}", + undistortedFocalPlaneX, undistortedFocalPlaneY) // Define imaging ray (look vector) in camera space double cameraLook[3]; createCameraLookVector( undistortedFocalPlaneX, undistortedFocalPlaneY, m_zDirection, m_focalLength * (1 - getValue(15, adj) / m_halfSwath), cameraLook); - MESSAGE_LOG("losToEcf: uncorrected camera look vector {} {} {}", - cameraLook[0], cameraLook[1], cameraLook[2]) + MESSAGE_LOG( + spdlog::level::trace, + "losToEcf: uncorrected camera look vector {} {} {}", + cameraLook[0], cameraLook[1], cameraLook[2]) // Apply attitude correction double attCorr[9]; @@ -1772,9 +1877,10 @@ void UsgsAstroLsSensorModel::losToEcf( correctedCameraLook[2] = attCorr[6] * cameraLook[0] + attCorr[7] * cameraLook[1] + attCorr[8] * cameraLook[2]; - MESSAGE_LOG("losToEcf: corrected camera look vector {} {} {}", - correctedCameraLook[0], correctedCameraLook[1], - correctedCameraLook[2]) + MESSAGE_LOG( + spdlog::level::trace, + "losToEcf: corrected camera look vector {} {} {}", + correctedCameraLook[0], correctedCameraLook[1], correctedCameraLook[2]) // Rotate the look vector into the body fixed frame from the camera reference // frame by applying the rotation matrix from the sensor quaternions double quaternions[4]; @@ -1791,8 +1897,10 @@ void UsgsAstroLsSensorModel::losToEcf( bodyLookZ = cameraToBody[6] * correctedCameraLook[0] + cameraToBody[7] * correctedCameraLook[1] + cameraToBody[8] * correctedCameraLook[2]; - MESSAGE_LOG("losToEcf: body look vector {} {} {}", bodyLookX, bodyLookY, - bodyLookZ) + MESSAGE_LOG( + spdlog::level::debug, + "losToEcf: body look vector {} {} {}", + bodyLookX, bodyLookY, bodyLookZ) } //*************************************************************************** @@ -1803,6 +1911,7 @@ void UsgsAstroLsSensorModel::lightAberrationCorr( const double& yl, const double& zl, double& dxl, double& dyl, double& dzl) const { MESSAGE_LOG( + spdlog::level::debug, "Computing lightAberrationCorr for camera velocity" "{} {} {} and image ray {} {} {}", vx, vy, vz, xl, yl, zl) @@ -1824,6 +1933,7 @@ void UsgsAstroLsSensorModel::lightAberrationCorr( dyl = 0.0; dzl = 0.0; MESSAGE_LOG( + spdlog::level::warn, "lightAberrationCorr: image ray is parallel" "to velocity vector") } @@ -1844,6 +1954,7 @@ void UsgsAstroLsSensorModel::lightAberrationCorr( dyl = cfac * vy; dzl = cfac * vz; MESSAGE_LOG( + spdlog::level::debug, "lightAberrationCorr: light of sight correction" "{} {} {}", dxl, dyl, dzl) @@ -1858,6 +1969,7 @@ void UsgsAstroLsSensorModel::losEllipsoidIntersect( double& z, double& achieved_precision, const double& desired_precision, csm::WarningList* warnings) const { MESSAGE_LOG( + spdlog::level::debug, "Computing losEllipsoidIntersect for camera position " "{} {} {} looking {} {} {} with desired precision {}", xc, yc, zc, xl, yl, zl, desired_precision) @@ -1894,7 +2006,7 @@ void UsgsAstroLsSensorModel::losEllipsoidIntersect( warnings->push_back(csm::Warning( csm::Warning::NO_INTERSECTION, message, "UsgsAstroLsSensorModel::losElliposidIntersect")); } - MESSAGE_LOG(message) + MESSAGE_LOG(spdlog::level::warn, message) } double scale, scale1, h; double sprev, hprev; @@ -1916,6 +2028,7 @@ void UsgsAstroLsSensorModel::losEllipsoidIntersect( achieved_precision = fabs(height - h); MESSAGE_LOG( + spdlog::level::debug, "losEllipsoidIntersect: found intersect at {} {} {}" "with achieved precision of {}", x, y, z, achieved_precision) @@ -1930,7 +2043,10 @@ void UsgsAstroLsSensorModel::getAdjSensorPosVel(const double& time, double& zc, double& vx, double& vy, double& vz, bool calc_vel) const { - MESSAGE_LOG("Calculating getAdjSensorPosVel at time {}", time) + MESSAGE_LOG( + spdlog::level::debug, + "Calculating getAdjSensorPosVel at time {}", + time) // Sensor position and velocity (4th or 8th order Lagrange). int nOrder = 8; @@ -1956,10 +2072,11 @@ void UsgsAstroLsSensorModel::getAdjSensorPosVel(const double& time, vy = 0.0; vz = 0.0; - MESSAGE_LOG("getAdjSensorPosVel: postition {} {} {}" - "and velocity {} {} {}", - xc, yc, zc, vx, vy, vz) - return; + MESSAGE_LOG( + spdlog::level::debug, + "getAdjSensorPosVel: no velocity, postition ({}, {}, {})", + xc, yc, zc) + return; } } @@ -1967,8 +2084,6 @@ void UsgsAstroLsSensorModel::getAdjSensorPosVel(const double& time, lagrangeInterp(m_numPositions / 3, &m_velocities[0], m_t0Ephem, m_dtEphem, time, 3, nOrder, sensVelNom); - MESSAGE_LOG("getAdjSensorPosVel: using {} order Lagrange", nOrder) - // Compute rotation matrix from ICR to ECF double radialUnitVec[3]; double radMag = @@ -2026,8 +2141,9 @@ void UsgsAstroLsSensorModel::getAdjSensorPosVel(const double& time, ecfFromIcr[8] * dr; MESSAGE_LOG( - "getAdjSensorPosVel: postition {} {} {}" - "and velocity {} {} {}", + spdlog::level::debug, + "getAdjSensorPosVel: postition ({}, {}, {}) " + "and velocity ({}, {}, {})", xc, yc, zc, vx, vy, vz) } @@ -2038,6 +2154,7 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( const double& time, const csm::EcefCoord& groundPoint, const std::vector<double>& adj) const { MESSAGE_LOG( + spdlog::level::debug, "Computing computeDetectorView (with adjusments)" "for ground point {} {} {} at time {} ", groundPoint.x, groundPoint.y, groundPoint.z, time); @@ -2054,8 +2171,10 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( double bodyLookX = groundPoint.x - xc; double bodyLookY = groundPoint.y - yc; double bodyLookZ = groundPoint.z - zc; - MESSAGE_LOG("computeDetectorView: look vector {} {} {}", bodyLookX, bodyLookY, - bodyLookZ) + MESSAGE_LOG( + spdlog::level::trace, + "computeDetectorView: look vector {} {} {}", + bodyLookX, bodyLookY, bodyLookZ) // Rotate the look vector into the camera reference frame double quaternions[4]; @@ -2074,6 +2193,7 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( bodyToCamera[5] * bodyLookY + bodyToCamera[8] * bodyLookZ; MESSAGE_LOG( + spdlog::level::trace, "computeDetectorView: look vector (camera ref frame)" "{} {} {}", cameraLookX, cameraLookY, cameraLookZ) @@ -2090,6 +2210,7 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( double adjustedLookZ = attCorr[2] * cameraLookX + attCorr[5] * cameraLookY + attCorr[8] * cameraLookZ; MESSAGE_LOG( + spdlog::level::trace, "computeDetectorView: adjusted look vector" "{} {} {}", adjustedLookX, adjustedLookY, adjustedLookZ) @@ -2100,6 +2221,7 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( double focalY = adjustedLookY * lookScale; MESSAGE_LOG( + spdlog::level::debug, "computeDetectorView: focal plane coordinates" "x:{} y:{} scale:{}", focalX, focalY, lookScale) @@ -2112,6 +2234,10 @@ std::vector<double> UsgsAstroLsSensorModel::computeDetectorView( //*************************************************************************** void UsgsAstroLsSensorModel::computeProjectiveApproximation(const csm::EcefCoord& gp, csm::ImageCoord& ip) const { + MESSAGE_LOG( + spdlog::level::debug, + "Computing projective approximation for ground point ({}, {}, {})", + gp.x, gp.y, gp.z); if (m_useApproxInitTrans) { std::vector<double> const& u = m_projTransCoeffs; // alias, to save on typing @@ -2125,7 +2251,9 @@ void UsgsAstroLsSensorModel::computeProjectiveApproximation(const csm::EcefCoord ip.line = m_nLines / 2.0; ip.samp = m_nSamples / 2.0; - MESSAGE_LOG("Computing initial guess with constant approx line/2 and sample/2"); + MESSAGE_LOG( + spdlog::level::warn, + "Computing initial guess with constant approx line/2 and sample/2"); return; } @@ -2143,20 +2271,23 @@ void UsgsAstroLsSensorModel::computeProjectiveApproximation(const csm::EcefCoord if (ip.samp < 0.0) ip.samp = 0.0; if (ip.samp > numCols) ip.samp = numCols; - - MESSAGE_LOG("Computing initial guess with projective approximation"); } else { ip.line = m_nLines / 2.0; ip.samp = m_nSamples / 2.0; - MESSAGE_LOG("Computing initial guess with constant approx line/2 and sample/2"); } + MESSAGE_LOG( + spdlog::level::debug, + "Projective approximation ({}, {})", + ip.line, ip.samp); } //*************************************************************************** // UsgsAstroLineScannerSensorModel::createProjectiveApproximation //*************************************************************************** void UsgsAstroLsSensorModel::createProjectiveApproximation() { - MESSAGE_LOG("Calculating createProjectiveApproximation"); + MESSAGE_LOG( + spdlog::level::debug, + "Calculating createProjectiveApproximation"); // Use 9 points (9*4 eventual matrix rows) as we need to fit 14 variables. const int numPts = 9; @@ -2169,17 +2300,21 @@ void UsgsAstroLsSensorModel::createProjectiveApproximation() { double height = computeEllipsoidElevation( refPt.x, refPt.y, refPt.z, m_majorAxis, m_minorAxis, desired_precision); if (std::isnan(height)) { - MESSAGE_LOG("createProjectiveApproximation: computeElevation of" - "reference point {} {} {} with desired precision" - "{} returned nan height; nonprojective", - refPt.x, refPt.y, refPt.z, desired_precision); + MESSAGE_LOG( + spdlog::level::warn, + "createProjectiveApproximation: computeElevation of" + "reference point {} {} {} with desired precision" + "{} returned nan height; nonprojective", + refPt.x, refPt.y, refPt.z, desired_precision); m_useApproxInitTrans = false; return; } - MESSAGE_LOG("createProjectiveApproximation: computeElevation of" - "reference point {} {} {} with desired precision" - "{} returned {} height", - refPt.x, refPt.y, refPt.z, desired_precision, height); + MESSAGE_LOG( + spdlog::level::trace, + "createProjectiveApproximation: computeElevation of" + "reference point {} {} {} with desired precision" + "{} returned {} height", + refPt.x, refPt.y, refPt.z, desired_precision, height); double numImageRows = m_nLines; double numImageCols = m_nSamples; @@ -2208,7 +2343,9 @@ void UsgsAstroLsSensorModel::createProjectiveApproximation() { usgscsm::computeBestFitProjectiveTransform(ip, gp, m_projTransCoeffs); m_useApproxInitTrans = true; - MESSAGE_LOG("Completed createProjectiveApproximation"); + MESSAGE_LOG( + spdlog::level::debug, + "Completed createProjectiveApproximation"); } //*************************************************************************** @@ -2217,7 +2354,9 @@ void UsgsAstroLsSensorModel::createProjectiveApproximation() { std::string UsgsAstroLsSensorModel::constructStateFromIsd( const std::string imageSupportData, csm::WarningList* warnings) { json state = {}; - MESSAGE_LOG("Constructing state from Isd") + MESSAGE_LOG( + spdlog::level::debug, + "Constructing state from Isd") // Instantiate UsgsAstroLineScanner sensor model json jsonIsd = json::parse(imageSupportData); std::shared_ptr<csm::WarningList> parsingWarnings(new csm::WarningList); @@ -2227,6 +2366,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_sensorName"] = ale::getSensorName(jsonIsd); state["m_platformName"] = ale::getPlatformName(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_modelName: {} " "m_imageIdentifier: {} " "m_sensorName: {} " @@ -2235,11 +2375,15 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_sensorName"].dump(), state["m_platformName"].dump()) state["m_focalLength"] = ale::getFocalLength(jsonIsd); - MESSAGE_LOG("m_focalLength: {} ", state["m_focalLength"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_focalLength: {} ", + state["m_focalLength"].dump()) state["m_nLines"] = ale::getTotalLines(jsonIsd); state["m_nSamples"] = ale::getTotalSamples(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_nLines: {} " "m_nSamples: {} ", state["m_nLines"].dump(), state["m_nSamples"].dump()) @@ -2247,6 +2391,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_iTransS"] = ale::getFocal2PixelSamples(jsonIsd); state["m_iTransL"] = ale::getFocal2PixelLines(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_iTransS: {} " "m_iTransL: {} ", state["m_iTransS"].dump(), state["m_iTransL"].dump()) @@ -2255,6 +2400,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_ikCode"] = 0; state["m_zDirection"] = 1; MESSAGE_LOG( + spdlog::level::trace, "m_platformFlag: {} " "m_ikCode: {} " "m_zDirection: {} ", @@ -2265,13 +2411,17 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( getDistortionModel(ale::getDistortionModel(jsonIsd)); state["m_opticalDistCoeffs"] = ale::getDistortionCoeffs(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_distortionType: {} " "m_opticalDistCoeffs: {} ", state["m_distortionType"].dump(), state["m_opticalDistCoeffs"].dump()) // Zero computed state values state["m_referencePointXyz"] = std::vector<double>(3, 0.0); - MESSAGE_LOG("m_referencePointXyz: {} ", state["m_referencePointXyz"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_referencePointXyz: {} ", + state["m_referencePointXyz"].dump()) // Sun position and sensor position use the same times so compute that now ale::States inst_state = ale::getInstrumentPosition(jsonIsd); @@ -2290,22 +2440,28 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( try { state["m_dtEphem"] = timeStep; - MESSAGE_LOG("m_dtEphem: {} ", state["m_dtEphem"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_dtEphem: {} ", + state["m_dtEphem"].dump()) } catch (...) { parsingWarnings->push_back(csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "dt_ephemeris not in ISD", "UsgsAstroFrameSensorModel::constructStateFromIsd()")); - MESSAGE_LOG("m_dtEphem not in ISD") + MESSAGE_LOG(spdlog::level::warn, "m_dtEphem not in ISD") } try { state["m_t0Ephem"] = startTime - ale::getCenterTime(jsonIsd); - MESSAGE_LOG("t0_ephemeris: {}", state["m_t0Ephem"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "t0_ephemeris: {}", + state["m_t0Ephem"].dump()) } catch (...) { parsingWarnings->push_back(csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "t0_ephemeris not in ISD", "UsgsAstroFrameSensorModel::constructStateFromIsd()")); - MESSAGE_LOG("t0_ephemeris not in ISD") + MESSAGE_LOG(spdlog::level::warn, "t0_ephemeris not in ISD") } ale::States sunState = ale::getSunPosition(jsonIsd); @@ -2335,6 +2491,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_halfSwath"] = 1000.0; state["m_halfTime"] = 10.0; MESSAGE_LOG( + spdlog::level::trace, "m_gsd: {} " "m_flyingHeight: {} " "m_halfSwath: {} " @@ -2345,6 +2502,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_centerEphemerisTime"] = ale::getCenterTime(jsonIsd); state["m_startingEphemerisTime"] = ale::getStartingTime(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_centerEphemerisTime: {} " "m_startingEphemerisTime: {} ", state["m_centerEphemerisTime"].dump(), @@ -2357,6 +2515,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( getIntegrationStartTimes(lineScanRate, parsingWarnings.get()); state["m_intTimes"] = getIntegrationTimes(lineScanRate, parsingWarnings.get()); MESSAGE_LOG( + spdlog::level::trace, "m_intTimeLines: {} " "m_intTimeStartTimes: {} " "m_intTimes: {} ", @@ -2370,6 +2529,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_detectorSampleOrigin"] = ale::getDetectorCenterSample(jsonIsd); state["m_detectorLineOrigin"] = ale::getDetectorCenterLine(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_detectorSampleSumming: {} " "m_detectorLineSumming: {}" "m_startingDetectorSample: {} " @@ -2404,12 +2564,16 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_positions"] = positions; state["m_numPositions"] = positions.size(); MESSAGE_LOG( + spdlog::level::trace, "m_positions: {}" "m_numPositions: {}", state["m_positions"].dump(), state["m_numPositions"].dump()) state["m_velocities"] = velocities; - MESSAGE_LOG("m_velocities: {}", state["m_velocities"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_velocities: {}", + state["m_velocities"].dump()) // Work-around for issues in ALE <=0.8.5 where Orientations without angular // velocities seg fault when you multiply them. This will make the angular @@ -2441,22 +2605,32 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( (ephemTime.back() - ephemTime.front()) / (ephemTime.size() - 1); try { state["m_dtQuat"] = quatStep; - MESSAGE_LOG("dt_quaternion: {}", state["m_dtQuat"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "dt_quaternion: {}", + state["m_dtQuat"].dump()) } catch (...) { parsingWarnings->push_back(csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "dt_quaternion not in ISD", "UsgsAstroFrameSensorModel::constructStateFromIsd()")); - MESSAGE_LOG("dt_quaternion not in ISD") + MESSAGE_LOG( + spdlog::level::warn, + "dt_quaternion not in ISD") } try { state["m_t0Quat"] = ephemTime[0] - ale::getCenterTime(jsonIsd); - MESSAGE_LOG("m_t0Quat: {}", state["m_t0Quat"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_t0Quat: {}", + state["m_t0Quat"].dump()) } catch (...) { parsingWarnings->push_back(csm::Warning( csm::Warning::DATA_NOT_AVAILABLE, "t0_quaternion not in ISD", "UsgsAstroFrameSensorModel::constructStateFromIsd()")); - MESSAGE_LOG("t0_quaternion not in ISD") + MESSAGE_LOG( + spdlog::level::warn, + "t0_quaternion not in ISD") } std::vector<double> quaternion; std::vector<double> quaternions; @@ -2474,19 +2648,23 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_quaternions"] = quaternions; state["m_numQuaternions"] = quaternions.size(); MESSAGE_LOG( + spdlog::level::trace, "m_quaternions: {}" "m_numQuaternions: {}", state["m_quaternions"].dump(), state["m_numQuaternions"].dump()) state["m_currentParameterValue"] = std::vector<double>(NUM_PARAMETERS, 0.0); - MESSAGE_LOG("m_currentParameterValue: {}", - state["m_currentParameterValue"].dump()) + MESSAGE_LOG( + spdlog::level::trace, + "m_currentParameterValue: {}", + state["m_currentParameterValue"].dump()) // Get radii // ALE operates in km and we want m state["m_minorAxis"] = ale::getSemiMinorRadius(jsonIsd) * 1000; state["m_majorAxis"] = ale::getSemiMajorRadius(jsonIsd) * 1000; MESSAGE_LOG( + spdlog::level::trace, "m_minorAxis: {}" "m_majorAxis: {}", state["m_minorAxis"].dump(), state["m_majorAxis"].dump()) @@ -2495,6 +2673,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_platformIdentifier"] = ale::getPlatformName(jsonIsd); state["m_sensorIdentifier"] = ale::getSensorName(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_platformIdentifier: {}" "m_sensorIdentifier: {}", state["m_platformIdentifier"].dump(), state["m_sensorIdentifier"].dump()) @@ -2503,6 +2682,7 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( state["m_minElevation"] = ale::getMinHeight(jsonIsd); state["m_maxElevation"] = ale::getMaxHeight(jsonIsd); MESSAGE_LOG( + spdlog::level::trace, "m_minElevation: {}" "m_maxElevation: {}", state["m_minElevation"].dump(), state["m_maxElevation"].dump()) @@ -2533,8 +2713,6 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( // UsgsAstroLineScannerSensorModel::getLogger //*************************************************************************** std::shared_ptr<spdlog::logger> UsgsAstroLsSensorModel::getLogger() { - // MESSAGE_LOG("Getting log pointer, logger is {}", - // m_logger) return m_logger; } diff --git a/src/UsgsAstroPlugin.cpp b/src/UsgsAstroPlugin.cpp index b073a46..d90ea7c 100644 --- a/src/UsgsAstroPlugin.cpp +++ b/src/UsgsAstroPlugin.cpp @@ -55,7 +55,7 @@ using json = nlohmann::json; #define MESSAGE_LOG(...) \ if (m_logger) { \ - m_logger->info(__VA_ARGS__); \ + m_logger->log(__VA_ARGS__); \ } // Declaration of static variables @@ -75,21 +75,27 @@ UsgsAstroPlugin::UsgsAstroPlugin() { std::string logFile(logFilePtr); if (logFile != "") { - std::shared_ptr<spdlog::logger> m_logger = spdlog::get("usgscsm_logger"); + m_logger = spdlog::get("usgscsm_logger"); if (!m_logger) { if (logFile == "stdout") { - std::shared_ptr<spdlog::logger> m_logger = - spdlog::stdout_color_mt("usgscsm_logger"); + m_logger = spdlog::stdout_color_mt("usgscsm_logger"); } else if (logFile == "stderr") { - std::shared_ptr<spdlog::logger> m_logger = - spdlog::stderr_color_mt("usgscsm_logger"); + m_logger = spdlog::stderr_color_mt("usgscsm_logger"); } else { - std::shared_ptr<spdlog::logger> m_logger = - spdlog::basic_logger_mt("usgscsm_logger", logFile); + m_logger = spdlog::basic_logger_mt("usgscsm_logger", logFile); } + + char *logLevlPtr = getenv("USGSCSM_LOG_LEVEL"); + if (logLevlPtr != NULL) { + std::string logLevelStr(logLevlPtr); + std::transform(logLevelStr.begin(), logLevelStr.end(), logLevelStr.begin(), + [](unsigned char c){ return std::tolower(c); }); + m_logger->set_level(spdlog::level::from_str(logLevelStr)); + } + } } } @@ -98,27 +104,27 @@ UsgsAstroPlugin::UsgsAstroPlugin() { UsgsAstroPlugin::~UsgsAstroPlugin() {} std::string UsgsAstroPlugin::getPluginName() const { - MESSAGE_LOG("Get Plugin Name: {}", _PLUGIN_NAME); + MESSAGE_LOG(spdlog::level::debug, "Get Plugin Name: {}", _PLUGIN_NAME); return _PLUGIN_NAME; } std::string UsgsAstroPlugin::getManufacturer() const { - MESSAGE_LOG("Get Manufacturer Name: {}", _MANUFACTURER_NAME); + MESSAGE_LOG(spdlog::level::debug, "Get Manufacturer Name: {}", _MANUFACTURER_NAME); return _MANUFACTURER_NAME; } std::string UsgsAstroPlugin::getReleaseDate() const { - MESSAGE_LOG("Get Release Date: {}", _RELEASE_DATE); + MESSAGE_LOG(spdlog::level::debug, "Get Release Date: {}", _RELEASE_DATE); return _RELEASE_DATE; } csm::Version UsgsAstroPlugin::getCsmVersion() const { - MESSAGE_LOG("Get Current CSM Version"); + MESSAGE_LOG(spdlog::level::debug, "Get Current CSM Version"); return CURRENT_CSM_VERSION; } size_t UsgsAstroPlugin::getNumModels() const { - MESSAGE_LOG("Get Number of Sensor Models: {}", _N_SENSOR_MODELS); + MESSAGE_LOG(spdlog::level::debug, "Get Number of Sensor Models: {}", _N_SENSOR_MODELS); return _N_SENSOR_MODELS; } @@ -128,19 +134,19 @@ std::string UsgsAstroPlugin::getModelName(size_t modelIndex) const { UsgsAstroLsSensorModel::_SENSOR_MODEL_NAME, UsgsAstroSarSensorModel::_SENSOR_MODEL_NAME, UsgsAstroPushFrameSensorModel::_SENSOR_MODEL_NAME}; - MESSAGE_LOG("Get Model Name: {}. Used index: {}", + MESSAGE_LOG(spdlog::level::debug, "Get Model Name: {}. Used index: {}", supportedModelNames[modelIndex], modelIndex); return supportedModelNames[modelIndex]; } std::string UsgsAstroPlugin::getModelFamily(size_t modelIndex) const { - MESSAGE_LOG("Get Model Familey: {}", CSM_RASTER_FAMILY); + MESSAGE_LOG(spdlog::level::debug, "Get Model Familey: {}", CSM_RASTER_FAMILY); return CSM_RASTER_FAMILY; } csm::Version UsgsAstroPlugin::getModelVersion( const std::string &modelName) const { - MESSAGE_LOG("Get Model Version"); + MESSAGE_LOG(spdlog::level::debug, "Get Model Version"); return csm::Version(1, 0, 0); } @@ -175,7 +181,7 @@ bool UsgsAstroPlugin::canModelBeConstructedFromState( fullMsg += err_msg; fullMsg += "]"; - MESSAGE_LOG(fullMsg); + MESSAGE_LOG(spdlog::level::err, fullMsg); if (warnings) { warnings->push_back(csm::Warning (csm::Warning::UNKNOWN_WARNING, fullMsg, @@ -200,7 +206,7 @@ bool UsgsAstroPlugin::canModelBeConstructedFromISD( msg += "] with error ["; msg += e.what(); msg += "]"; - MESSAGE_LOG(msg); + MESSAGE_LOG(spdlog::level::warn, msg); warnings->push_back(csm::Warning( csm::Warning::UNKNOWN_WARNING, msg, "UsgsAstroFrameSensorModel::canModelBeConstructedFromISD()")); @@ -210,7 +216,7 @@ bool UsgsAstroPlugin::canModelBeConstructedFromISD( std::string msg = "Could not create model ["; msg += modelName; msg += "] with an unknown error."; - MESSAGE_LOG(msg); + MESSAGE_LOG(spdlog::level::warn, msg); warnings->push_back(csm::Warning( csm::Warning::UNKNOWN_WARNING, msg, "UsgsAstroFrameSensorModel::canModelBeConstructedFromISD()")); @@ -231,7 +237,7 @@ std::string UsgsAstroPlugin::loadImageSupportData( lastIndex = baseName.find_last_of(DIR_DELIMITER_STR); std::string filename = baseName.substr(lastIndex + 1); std::string isdFilename = baseName.append(".json"); - MESSAGE_LOG("Load Image Support Data using: {}, {}, {}, {}, {}", + MESSAGE_LOG(spdlog::level::info, "Load Image Support Data using: {}, {}, {}, {}, {}", imageFilename, lastIndex, baseName, filename, isdFilename); try { std::ifstream isd_sidecar(isdFilename); @@ -246,7 +252,7 @@ std::string UsgsAstroPlugin::loadImageSupportData( errorMessage += "] with error ["; errorMessage += e.what(); errorMessage += "]"; - MESSAGE_LOG(errorMessage); + MESSAGE_LOG(spdlog::level::err, errorMessage); throw csm::Error(csm::Error::FILE_READ, errorMessage, "UsgsAstroPlugin::loadImageSupportData"); } @@ -257,13 +263,13 @@ std::string UsgsAstroPlugin::getModelNameFromModelState( auto state = stateAsJson(modelState); std::string name = state.value<std::string>("name_model", ""); - MESSAGE_LOG("Get model name from model state. State: {}, Name: {}", + MESSAGE_LOG(spdlog::level::debug, "Get model name from model state. State: {}, Name: {}", modelState, name); if (name == "") { csm::Error::ErrorType aErrorType = csm::Error::INVALID_SENSOR_MODEL_STATE; std::string aMessage = "No 'name_model' key in the model state object."; std::string aFunction = "UsgsAstroPlugin::getModelNameFromModelState"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); csm::Error csmErr(aErrorType, aMessage, aFunction); throw(csmErr); } @@ -274,7 +280,7 @@ std::string UsgsAstroPlugin::getModelNameFromModelState( bool UsgsAstroPlugin::canISDBeConvertedToModelState( const csm::Isd &imageSupportData, const std::string &modelName, csm::WarningList *warnings) const { - MESSAGE_LOG("Running canISDBeConvertedToModelState"); + MESSAGE_LOG(spdlog::level::debug, "Running canISDBeConvertedToModelState"); try { convertISDToModelState(imageSupportData, modelName, warnings); } catch (std::exception &e) { @@ -284,7 +290,7 @@ bool UsgsAstroPlugin::canISDBeConvertedToModelState( msg += "] state with error ["; msg += e.what(); msg += "]"; - MESSAGE_LOG(msg); + MESSAGE_LOG(spdlog::level::warn, msg); warnings->push_back(csm::Warning( csm::Warning::UNKNOWN_WARNING, msg, "UsgsAstroFrameSensorModel::canISDBeConvertedToModelState()")); @@ -295,9 +301,9 @@ bool UsgsAstroPlugin::canISDBeConvertedToModelState( } std::string UsgsAstroPlugin::getStateFromISD(csm::Isd imageSupportData) const { - MESSAGE_LOG("Running getStateFromISD"); + MESSAGE_LOG(spdlog::level::debug, "Running getStateFromISD"); std::string stringIsd = loadImageSupportData(imageSupportData); - MESSAGE_LOG("ISD string: {}", stringIsd); + MESSAGE_LOG(spdlog::level::trace, "ISD string: {}", stringIsd); json jsonIsd = json::parse(stringIsd); return convertISDToModelState(imageSupportData, jsonIsd.at("name_model")); } @@ -305,7 +311,7 @@ std::string UsgsAstroPlugin::getStateFromISD(csm::Isd imageSupportData) const { std::string UsgsAstroPlugin::convertISDToModelState( const csm::Isd &imageSupportData, const std::string &modelName, csm::WarningList *warnings) const { - MESSAGE_LOG("Running convertISDToModelState"); + MESSAGE_LOG(spdlog::level::info, "Running convertISDToModelState"); std::shared_ptr<csm::Model> sensor_model (constructModelFromISD(imageSupportData, modelName, warnings)); std::string stateString = sensor_model->getModelState(); @@ -315,17 +321,17 @@ std::string UsgsAstroPlugin::convertISDToModelState( csm::Model *UsgsAstroPlugin::constructModelFromISD( const csm::Isd &imageSupportDataOriginal, const std::string &modelName, csm::WarningList *warnings) const { - MESSAGE_LOG("Running constructModelFromISD"); + MESSAGE_LOG(spdlog::level::info, "Running constructModelFromISD"); std::string stringIsd = loadImageSupportData(imageSupportDataOriginal); - MESSAGE_LOG("ISD String: {}", stringIsd); + MESSAGE_LOG(spdlog::level::trace, "ISD String: {}", stringIsd); if (modelName == UsgsAstroFrameSensorModel::_SENSOR_MODEL_NAME) { UsgsAstroFrameSensorModel *model = new UsgsAstroFrameSensorModel(); try { - MESSAGE_LOG("Trying to construct a UsgsAstroFrameSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Trying to construct a UsgsAstroFrameSensorModel"); model->replaceModelState( model->constructStateFromIsd(stringIsd, warnings)); - MESSAGE_LOG("Constructed model: {}", modelName); + MESSAGE_LOG(spdlog::level::debug, "Constructed model: {}", modelName); } catch (std::exception &e) { delete model; csm::Error::ErrorType aErrorType = @@ -335,7 +341,7 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( aMessage += "] with error ["; aMessage += e.what(); aMessage += "]"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); std::string aFunction = "UsgsAstroPlugin::constructModelFromISD()"; throw csm::Error(aErrorType, aMessage, aFunction); } @@ -343,7 +349,7 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( } else if (modelName == UsgsAstroLsSensorModel::_SENSOR_MODEL_NAME) { UsgsAstroLsSensorModel *model = new UsgsAstroLsSensorModel(); try { - MESSAGE_LOG("Trying to construct a UsgsAstroLsSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Trying to construct a UsgsAstroLsSensorModel"); model->replaceModelState( model->constructStateFromIsd(stringIsd, warnings)); } catch (std::exception &e) { @@ -356,13 +362,13 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( aMessage += e.what(); aMessage += "]"; std::string aFunction = "UsgsAstroPlugin::constructModelFromISD()"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); throw csm::Error(aErrorType, aMessage, aFunction); } return model; } else if (modelName == UsgsAstroSarSensorModel::_SENSOR_MODEL_NAME) { UsgsAstroSarSensorModel *model = new UsgsAstroSarSensorModel(); - MESSAGE_LOG("Trying to construct a UsgsAstroSarSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Trying to construct a UsgsAstroSarSensorModel"); try { model->replaceModelState( model->constructStateFromIsd(stringIsd, warnings)); @@ -376,13 +382,13 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( aMessage += e.what(); aMessage += "]"; std::string aFunction = "UsgsAstroPlugin::constructModelFromISD()"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); throw csm::Error(aErrorType, aMessage, aFunction); } return model; } else if (modelName == UsgsAstroPushFrameSensorModel::_SENSOR_MODEL_NAME) { UsgsAstroPushFrameSensorModel *model = new UsgsAstroPushFrameSensorModel(); - MESSAGE_LOG("Trying to construct a UsgsAstroPushFrameSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Trying to construct a UsgsAstroPushFrameSensorModel"); try { model->replaceModelState( model->constructStateFromIsd(stringIsd, warnings)); @@ -396,7 +402,7 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( aMessage += e.what(); aMessage += "]"; std::string aFunction = "UsgsAstroPlugin::constructModelFromISD()"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); throw csm::Error(aErrorType, aMessage, aFunction); } return model; @@ -404,30 +410,30 @@ csm::Model *UsgsAstroPlugin::constructModelFromISD( csm::Error::ErrorType aErrorType = csm::Error::SENSOR_MODEL_NOT_SUPPORTED; std::string aMessage = "Model [" + modelName + "] not supported: "; std::string aFunction = "UsgsAstroPlugin::constructModelFromISD()"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); throw csm::Error(aErrorType, aMessage, aFunction); } } csm::Model *UsgsAstroPlugin::constructModelFromState( const std::string &modelState, csm::WarningList *warnings) const { - MESSAGE_LOG("Runing constructModelFromState with modelState: {}", modelState); + MESSAGE_LOG(spdlog::level::info, "Runing constructModelFromState with modelState: {}", modelState); json state = stateAsJson(modelState); std::string modelName = state["m_modelName"]; - MESSAGE_LOG("Using model name: {}", modelName); + MESSAGE_LOG(spdlog::level::debug, "Using model name: {}", modelName); if (modelName == UsgsAstroFrameSensorModel::_SENSOR_MODEL_NAME) { - MESSAGE_LOG("Constructing a UsgsAstroFrameSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Constructing a UsgsAstroFrameSensorModel"); UsgsAstroFrameSensorModel *model = new UsgsAstroFrameSensorModel(); model->replaceModelState(modelState); return model; } else if (modelName == UsgsAstroLsSensorModel::_SENSOR_MODEL_NAME) { - MESSAGE_LOG("Constructing a UsgsAstroLsSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Constructing a UsgsAstroLsSensorModel"); UsgsAstroLsSensorModel *model = new UsgsAstroLsSensorModel(); model->replaceModelState(modelState); return model; } else if (modelName == UsgsAstroSarSensorModel::_SENSOR_MODEL_NAME) { - MESSAGE_LOG("Constructing a UsgsAstroSarSensorModel"); + MESSAGE_LOG(spdlog::level::debug, "Constructing a UsgsAstroSarSensorModel"); UsgsAstroSarSensorModel *model = new UsgsAstroSarSensorModel(); model->replaceModelState(modelState); return model; @@ -435,7 +441,7 @@ csm::Model *UsgsAstroPlugin::constructModelFromState( csm::Error::ErrorType aErrorType = csm::Error::ISD_NOT_SUPPORTED; std::string aMessage = "Model" + modelName + " not supported: "; std::string aFunction = "UsgsAstroPlugin::constructModelFromState()"; - MESSAGE_LOG(aMessage); + MESSAGE_LOG(spdlog::level::err, aMessage); throw csm::Error(aErrorType, aMessage, aFunction); } } diff --git a/tests/Fixtures.h b/tests/Fixtures.h index 350bf8f..cf5a2ee 100644 --- a/tests/Fixtures.h +++ b/tests/Fixtures.h @@ -87,6 +87,7 @@ class FrameSensorModelLogging : public ::testing::Test { std::uintptr_t sensorId = reinterpret_cast<std::uintptr_t>(sensorModel); auto logger = std::make_shared<spdlog::logger>(std::to_string(sensorId), ostream_sink); + logger->set_level(spdlog::level::trace); spdlog::register_logger(logger); sensorModel->setLogger(std::to_string(sensorId)); -- GitLab