Switched to templated version of liquefy() to allow for use with non-default clique types
parent
83a1483e9f
commit
083e0c849e
|
@ -127,26 +127,6 @@ findPathCliques(const GaussianBayesTree::sharedClique& initial) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
|
||||||
GaussianFactorGraph liquefy(const GaussianBayesTree::sharedClique& root, bool splitConditionals) {
|
|
||||||
GaussianFactorGraph result;
|
|
||||||
if (root && root->conditional()) {
|
|
||||||
GaussianConditional::shared_ptr conditional = root->conditional();
|
|
||||||
if (!splitConditionals)
|
|
||||||
result.push_back(conditional->toFactor());
|
|
||||||
else
|
|
||||||
result.push_back(splitFactor(conditional->toFactor()));
|
|
||||||
}
|
|
||||||
BOOST_FOREACH(const GaussianBayesTree::sharedClique& child, root->children())
|
|
||||||
result.push_back(liquefy(child, splitConditionals));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ************************************************************************* */
|
|
||||||
GaussianFactorGraph liquefy(const GaussianBayesTree& bayesTree, bool splitConditionals) {
|
|
||||||
return liquefy(bayesTree.root(), splitConditionals);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
} // \namespace gtsam
|
} // \namespace gtsam
|
||||||
|
|
||||||
|
|
|
@ -67,13 +67,33 @@ GTSAM_UNSTABLE_EXPORT std::deque<GaussianBayesTree::sharedClique>
|
||||||
findPathCliques(const GaussianBayesTree::sharedClique& initial);
|
findPathCliques(const GaussianBayesTree::sharedClique& initial);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Liquefies a GaussianBayesTree into a GaussianFactorGraph recursively, given either a
|
* Liquefies a BayesTree into a GaussianFactorGraph recursively, given a
|
||||||
* root clique or a full bayes tree.
|
* root clique
|
||||||
*
|
*
|
||||||
* @param splitConditionals flag enables spliting multi-frontal conditionals into separate factors
|
* @param splitConditionals flag enables spliting multi-frontal conditionals into separate factors
|
||||||
*/
|
*/
|
||||||
GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree::sharedClique& root, bool splitConditionals = false);
|
template <class BAYESTREE>
|
||||||
GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree& bayesTree, bool splitConditionals = false);
|
GaussianFactorGraph liquefy(const typename BAYESTREE::sharedClique& root, bool splitConditionals = false) {
|
||||||
|
GaussianFactorGraph result;
|
||||||
|
if (root && root->conditional()) {
|
||||||
|
GaussianConditional::shared_ptr conditional = root->conditional();
|
||||||
|
if (!splitConditionals)
|
||||||
|
result.push_back(conditional->toFactor());
|
||||||
|
else
|
||||||
|
result.push_back(splitFactor(conditional->toFactor()));
|
||||||
|
}
|
||||||
|
BOOST_FOREACH(const typename BAYESTREE::sharedClique& child, root->children())
|
||||||
|
result.push_back(liquefy<BAYESTREE>(child, splitConditionals));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liquefies a BayesTree into a GaussianFactorGraph recursively, from a full bayes tree.
|
||||||
|
*/
|
||||||
|
template <class BAYESTREE>
|
||||||
|
GaussianFactorGraph liquefy(const BAYESTREE& bayesTree, bool splitConditionals = false) {
|
||||||
|
return liquefy<BAYESTREE>(bayesTree.root(), splitConditionals);
|
||||||
|
}
|
||||||
|
|
||||||
} // \namespace gtsam
|
} // \namespace gtsam
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue