File: mums.cpp

package info (click to toggle)
seqan2 2.4.0%2Bdfsg-16
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 224,180 kB
  • sloc: cpp: 256,886; ansic: 91,672; python: 8,330; sh: 995; xml: 570; makefile: 252; awk: 51; javascript: 21
file content (45 lines) | stat: -rw-r--r-- 1,630 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
///A tutorial about finding Mums.
#include <iostream>
#include <seqan/index.h>

using namespace seqan;

int main()
{
    // We begin with a StringSet that stores multiple strings.
    StringSet<String<char> > mySet;
    resize(mySet, 3);
    mySet[0] = "SeqAn is a library for sequence analysis.";
    mySet[1] = "The String class is the fundamental sequence type in SeqAn.";
    mySet[2] = "Subsequences can be handled with SeqAn's Segment class.";

    // Then we create an Index of this StringSet.
    typedef Index<StringSet<String<char> > > TMyIndex;
    TMyIndex myIndex(mySet);

    // To find maximal unique matches (Mums), we use the Mums Iterator and set the minimum MUM length to 3.
    Iterator<TMyIndex, Mums>::Type myMUMiterator(myIndex, 3);
    String<SAValue<TMyIndex>::Type> occs;

    while (!atEnd(myMUMiterator))
    {
        // A multiple match can be represented by the positions it occurs at in every sequence and its length.
        // getOccurrences@ returns an unordered sequence of pairs (seqNo,seqOfs) the match occurs at.
        occs = getOccurrences(myMUMiterator);
        //To order them ascending according seqNo we use orderOccurrences.
        orderOccurrences(occs);

        for (unsigned i = 0; i < length(occs); ++i)
            std::cout << getValueI2(occs[i]) << ", ";

        // repLength returns the length of the match.
        std::cout << repLength(myMUMiterator) << "   ";

        // The match string itself can be determined with representative.
        std::cout << "\t\"" << representative(myMUMiterator) << '\"' << std::endl;

        ++myMUMiterator;
    }

    return 0;
}