Example Program
Local Alignments
Computing local alignments between two sequences.
A tutorial about local alignments.
1#include <iostream>
2#include <seqan/score.h>
3#include <seqan/align.h>
4
5using namespace seqan;
6
7int main()
8{
Example 1: This program applies the Smith-Waterman algorithm to compute the best local alignment between two given sequences.
9    StringSet<CharString> strings;
10    Align<String<char> > ali;
11    resize(rows(ali), 2);
12    assignSource(row(ali, 0), "aphilologicaltheorem");
13    assignSource(row(ali, 1), "bizarreamphibology");
14    int score = localAlignment(ali, Score<int>(3,-3,-2, -2));
15    std::cout << "Score = " << score << std::endl;
16    std::cout << ali;
17    unsigned cBeginPos = clippedBeginPosition(row(ali, 0));
18    unsigned cEndPos = clippedEndPosition(row(ali, 0)) - 1;
19    std::cout << "Aligns Seq1[" << cBeginPos << ":" << cEndPos << "]";
20    std::cout << " and Seq2[" << cBeginPos << ":" << cEndPos << "]" << std::endl << std::endl;
21
22
Example 2: This program applies the Waterman-Eggert algorithm to compute all non-overlapping local alignments with score better or equal 2.
23    Align<String<Dna> > ali2;
24    resize(rows(ali2), 2);
25    assignSource(row(ali2, 0), "ataagcgtctcg");
26    assignSource(row(ali2, 1), "tcatagagttgc");
27
28    Score<int> scoring(2, -1, -2, 0);
29    LocalAlignmentEnumerator<Score<int>, Unbanded> enumerator(scoring, 2);
30    while (nextLocalAlignment(ali2, enumerator))
31    {
32        std::cout << "Score = " << getScore(enumerator) << std::endl;
33        std::cout << ali2;
34        unsigned cBeginPos0 = clippedBeginPosition(row(ali2, 0));
35        unsigned cEndPos0 = clippedEndPosition(row(ali2, 0)) - 1;
36        unsigned cBeginPos1 = clippedBeginPosition(row(ali2, 1));
37        unsigned cEndPos1 = clippedBeginPosition(row(ali2, 1)) - 1;
38        std::cout << "Aligns Seq1[" << cBeginPos0 << ":" << cEndPos0 << "]";
39        std::cout << " and Seq2[" << cBeginPos1 << ":" <<  cEndPos1 << "]";
40        std::cout << std::endl << std::endl;
41    }
42
Example 3
43    Align<String<Dna> > ali3;
44    resize(rows(ali3), 2);
45    assignSource(row(ali3, 0), "cccccc");
46    assignSource(row(ali3, 1), "tttttggccccccgg");
47
48    Score<int> scoring3(1, -1, -1, -1);
49    LocalAlignmentEnumerator<Score<int>, Unbanded> enumerator3(scoring3, 5);
50    while (nextLocalAlignment(ali3, enumerator3))
51    {
52        std::cout << "Score = " << getScore(enumerator3) << std::endl;
53        std::cout << ali3;
54        unsigned cBeginPos0 = clippedBeginPosition(row(ali3, 0));
55        unsigned cEndPos0 = clippedEndPosition(row(ali3, 0)) - 1;
56        unsigned cBeginPos1 = clippedBeginPosition(row(ali3, 1));
57        unsigned cEndPos1 = clippedEndPosition(row(ali3, 1)) - 1;
58        std::cout << "Aligns Seq1[" << cBeginPos0 << ":" << cEndPos0 << "]";
59        std::cout << " and Seq2[" << cBeginPos1 << ":" << cEndPos1 << "]";
60        std::cout << std::endl << std::endl;
61    }
62
Example 4: This program applies the banded Waterman-Eggert algorithm to compute all non-overlapping local alignments with score or equal 5 in the band from diagonal -1 to diagonal 8.
63    Align<String<Dna5> > ali4;
64    resize(rows(ali4), 2);
65    assignSource(row(ali4, 0), "AAAAAAANAAAGGGNGGGGGGGGNGGGGGANAA");
66    assignSource(row(ali4, 1), "GGGGGGCGGGGGGGA");
67
68    LocalAlignmentFinder<> finder4(ali4);
69    Score<int> scoring4(1, -1, -1, -1);
70    LocalAlignmentEnumerator<Score<int>, Banded> enumerator4(scoring3, -1, 8, 5);
71    while (nextLocalAlignment(ali4, enumerator4))
72    {
73        std::cout << "Score = " << getScore(enumerator4) << std::endl;
74        std::cout << ali4;
75        unsigned cBeginPos0 = clippedBeginPosition(row(ali4, 0));
76        unsigned cEndPos0 = clippedEndPosition(row(ali4, 0)) - 1;
77        unsigned cBeginPos1 = clippedBeginPosition(row(ali4, 1));
78        unsigned cEndPos1 = clippedEndPosition(row(ali4, 1)) - 1;
79        std::cout << "Aligns Seq1[" << cBeginPos0 << ":" << cEndPos0 << "]";
80        std::cout << " and Seq2[" << cBeginPos1 << ":" << cEndPos1 << "]";
81        std::cout << std::endl << std::endl;
82    }
83
84    return 0;
85}
SeqAn - Sequence Analysis Library - www.seqan.de
 

Page built @2013/07/11 09:12:35