Switched to templated version of liquefy() to allow for use with non-default clique types

release/4.3a0
Alex Cunningham 2013-06-11 14:36:53 +00:00
parent 83a1483e9f
commit 083e0c849e
2 changed files with 24 additions and 24 deletions

View File

@ -127,26 +127,6 @@ findPathCliques(const GaussianBayesTree::sharedClique& initial) {
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

View File

@ -67,13 +67,33 @@ GTSAM_UNSTABLE_EXPORT std::deque<GaussianBayesTree::sharedClique>
findPathCliques(const GaussianBayesTree::sharedClique& initial);
/**
* Liquefies a GaussianBayesTree into a GaussianFactorGraph recursively, given either a
* root clique or a full bayes tree.
* Liquefies a BayesTree into a GaussianFactorGraph recursively, given a
* root clique
*
* @param splitConditionals flag enables spliting multi-frontal conditionals into separate factors
*/
GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree::sharedClique& root, bool splitConditionals = false);
GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree& bayesTree, bool splitConditionals = false);
template <class BAYESTREE>
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