Page Index Count Children
Example for using a countChildren and countOccurrences for indices.
This example shows how to iterate over a suffix tree and print the number of children and the number of occurrences of the node representatitves.
///An example to demonstrate the functions countChildren and countOccurrences
#include <iostream>
#include <seqan/index.h>
using namespace seqan;
int main()
{
//We begin with a String to store our sequence.
String<char> myString = "How many wood would a woodchuck chuck. A woodchuck chucks as much wood as a woodchuck could";
//Then we create an Index of this StringSet.
typedef Index<String<char> > TMyIndex;
TMyIndex myIndex(myString);
// We will use a TopDown Iterator that supports parent links, ommits
// empty edges and traverses the index in preorder to print out the number of
// children at each node (not the number of leafs in the subtree).
Iterator<TMyIndex, TopDown<ParentLinks<PreorderEmptyEdges> > >::Type tdIterator(myIndex);
Size<TMyIndex>::Type count;
while (!atEnd(tdIterator))
{
//We print out the representatives of all nodes that have more than 3
//children and the number of occurrences. Also, we print a message if a node
//is a leaf.
count = countChildren(tdIterator);
if (count >= 3)
{
std::cout << "Representative " << representative(tdIterator) << " has " << count << " children and ";
std::cout << countOccurrences(tdIterator) << " occurrences " << std::endl;
}
if (isLeaf(tdIterator))
std::cout << "The node is a leaf " << std::endl;
tdIterator++;
}
return 0;
}
The only maximal matches that occur in all 3 sequences are "SeqAn" and "sequence". They occur exactly once and thus are maximal unique matches.