53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
/* ----------------------------------------------------------------------------
|
|
|
|
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
|
* Atlanta, Georgia 30332-0415
|
|
* All Rights Reserved
|
|
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
|
|
|
* See LICENSE for the license information
|
|
|
|
* -------------------------------------------------------------------------- */
|
|
|
|
/**
|
|
* @file nonlinearExceptions.h
|
|
* @brief Exceptions that may be thrown by nonlinear optimization components
|
|
* @author Richard Roberts
|
|
* @date Aug 17, 2012
|
|
*/
|
|
#pragma once
|
|
|
|
#include <exception>
|
|
|
|
#include <gtsam/inference/Key.h>
|
|
|
|
namespace gtsam {
|
|
|
|
/**
|
|
Thrown when requesting to marginalize out variables from ISAM2 that are not
|
|
leaves. To make the variables you would like to marginalize be leaves, their
|
|
ordering should be constrained using the constrainedKeys argument to
|
|
ISAM2::update().
|
|
*/
|
|
class MarginalizeNonleafException : public std::exception {
|
|
Key key_;
|
|
KeyFormatter formatter_;
|
|
mutable std::string what_;
|
|
public:
|
|
MarginalizeNonleafException(Key key, KeyFormatter formatter = DefaultKeyFormatter) noexcept :
|
|
key_(key), formatter_(formatter) {}
|
|
virtual ~MarginalizeNonleafException() noexcept {}
|
|
Key key() const { return key_; }
|
|
const char* what() const noexcept override {
|
|
if(what_.empty())
|
|
what_ =
|
|
"\nRequested to marginalize out variable " + formatter_(key_) + ", but this variable\n\
|
|
is not a leaf. To make the variables you would like to marginalize be leaves,\n\
|
|
their ordering should be constrained using the constrainedKeys argument to\n\
|
|
ISAM2::update().\n";
|
|
return what_.c_str();
|
|
}
|
|
};
|
|
|
|
}
|