Added reporting functions for counting number of cached shortcuts/separatorMarginals in BayesTree

release/4.3a0
Alex Cunningham 2012-09-21 20:57:30 +00:00
parent 0e60b8cc4d
commit df2a6bfdee
6 changed files with 58 additions and 2 deletions

View File

@ -810,6 +810,8 @@ virtual class BayesTree {
void clear();
void deleteCachedShorcuts();
void insert(const CLIQUE* subtree);
size_t numCachedShortcuts() const;
size_t numCachedSeparatorMarginals() const;
};
template<CONDITIONAL>
@ -822,6 +824,8 @@ virtual class BayesTreeClique {
void print(string s) const;
void printTree() const; // Default indent of ""
void printTree(string indent) const;
size_t numCachedShortcuts() const;
size_t numCachedSeparatorMarginals() const;
CONDITIONAL* conditional() const;
bool isRoot() const;

View File

@ -56,6 +56,18 @@ namespace gtsam {
}
}
/* ************************************************************************* */
template<class CONDITIONAL, class CLIQUE>
size_t BayesTree<CONDITIONAL,CLIQUE>::numCachedShortcuts() const {
return (root_) ? root_->numCachedShortcuts() : 0;
}
/* ************************************************************************* */
template<class CONDITIONAL, class CLIQUE>
size_t BayesTree<CONDITIONAL,CLIQUE>::numCachedSeparatorMarginals() const {
return (root_) ? root_->numCachedSeparatorMarginals() : 0;
}
/* ************************************************************************* */
template<class CONDITIONAL, class CLIQUE>
void BayesTree<CONDITIONAL,CLIQUE>::saveGraph(const std::string &s, const IndexFormatter& indexFormatter) const {

View File

@ -176,6 +176,12 @@ namespace gtsam {
/** Gather data on all cliques */
CliqueData getCliqueData() const;
/** Collect number of cliques with cached shortcuts */
size_t numCachedShortcuts() const;
/** Collect number of cliques with cached separator marginals */
size_t numCachedSeparatorMarginals() const;
/** return marginal on any variable */
typename FactorType::shared_ptr marginalFactor(Index j, Eliminate function) const;

View File

@ -90,14 +90,40 @@ namespace gtsam {
size_t BayesTreeCliqueBase<DERIVED, CONDITIONAL>::treeSize() const {
size_t size = 1;
BOOST_FOREACH(const derived_ptr& child, children_)
size += child->treeSize();
size += child->treeSize();
return size;
}
/* ************************************************************************* */
template<class DERIVED, class CONDITIONAL>
size_t BayesTreeCliqueBase<DERIVED, CONDITIONAL>::numCachedShortcuts() const {
if (!cachedShortcut_)
return 0;
size_t subtree_count = 1;
BOOST_FOREACH(const derived_ptr& child, children_)
subtree_count += child->numCachedShortcuts();
return subtree_count;
}
/* ************************************************************************* */
template<class DERIVED, class CONDITIONAL>
size_t BayesTreeCliqueBase<DERIVED, CONDITIONAL>::numCachedSeparatorMarginals() const {
if (!cachedSeparatorMarginal_)
return 0;
size_t subtree_count = 1;
BOOST_FOREACH(const derived_ptr& child, children_)
subtree_count += child->numCachedSeparatorMarginals();
return subtree_count;
}
/* ************************************************************************* */
template<class DERIVED, class CONDITIONAL>
void BayesTreeCliqueBase<DERIVED, CONDITIONAL>::printTree(
const std::string& indent, const IndexFormatter& indexFormatter) const {
const std::string& indent, const IndexFormatter& indexFormatter) const {
asDerived(this)->print(indent, indexFormatter);
BOOST_FOREACH(const derived_ptr& child, children_)
child->printTree(indent + " ", indexFormatter);

View File

@ -125,6 +125,12 @@ namespace gtsam {
/** The size of subtree rooted at this clique, i.e., nr of Cliques */
size_t treeSize() const;
/** Collect number of cliques with cached shortcuts in subtree */
size_t numCachedShortcuts() const;
/** Collect number of cliques with cached separator marginals */
size_t numCachedSeparatorMarginals() const;
/** The arrow operator accesses the conditional */
const ConditionalType* operator->() const {
return conditional_.get();

View File

@ -293,6 +293,8 @@ TEST( BayesTree, shortcutCheck )
bool notCleared = clique->cachedShortcut();
CHECK( notCleared == false);
}
EXPECT_LONGS_EQUAL(0, rootClique->numCachedShortcuts());
EXPECT_LONGS_EQUAL(0, rootClique->numCachedSeparatorMarginals());
// BOOST_FOREACH(SymbolicBayesTree::sharedClique& clique, allCliques) {
// clique->print("Clique#");