Example Program
Interval Tree
Construction and usage demo for the interval tree.
An example for using interval trees.
1 | #include <iostream>
|
2 | #include <seqan/graph_align.h>
|
3 |
|
4 | using namespace seqan;
|
5 |
|
6 | int main()
|
7 | {
|
8 |
|
9 | typedef CharString TCargo; // id type
|
10 | typedef int TValue; // position type
|
11 |
|
12 | typedef IntervalAndCargo<TValue, TCargo> TInterval;
|
13 | typedef IntervalTree<TValue, TCargo> TIntervalTree;
|
14 |
|
15 | String<TInterval> intervals;
|
16 | resize(intervals, 5);
|
17 |
|
18 | intervals[0].i1 = 5; intervals[0].i2 = 1000;
|
19 | intervals[0].cargo = "gene";
|
20 |
|
21 | intervals[1].i1 = 50; intervals[1].i2 = 200;
|
22 | intervals[1].cargo = "exon";
|
23 |
|
24 | intervals[2].i1 = 600; intervals[2].i2 = 800;
|
25 | intervals[2].cargo = "exon";
|
26 |
|
27 | intervals[3].i1 = 100; intervals[3].i2 = 200;
|
28 | intervals[3].cargo = "coding";
|
29 |
|
30 | intervals[4].i1 = 600; intervals[4].i2 = 700;
|
31 | intervals[4].cargo = "coding";
|
32 |
|
33 | TIntervalTree tree(intervals);
|
34 |
|
35 | TInterval interval;
|
36 | interval.i1 = 200; interval.i2 = 600;
|
37 | interval.cargo = "intron";
|
38 |
|
39 | addInterval(tree, interval);
|
40 |
|
41 | TValue delBegin = 300;
|
42 | TValue delEnd = 500;
|
43 | String<TCargo> results;
|
44 |
|
45 | findIntervals(tree, delBegin, delEnd, results);
|
46 |
|
47 | std::cout << "Deletion " << delBegin << ".." << delEnd << " overlaps with ";
|
48 | for (unsigned i = 0; i < length(results); ++i)
|
49 | std::cout << results[i] << ",";
|
50 | std::cout << std::endl;
|
51 |
|
52 | TValue snpPos = 150;
|
53 | findIntervals(tree, snpPos, results);
|
54 |
|
55 | std::cout << "SNP " << snpPos << " overlaps with ";
|
56 | for (unsigned i = 0; i < length(results); ++i)
|
57 | std::cout << results[i] << ",";
|
58 | std::cout << std::endl;
|
59 |
|
60 | CharString iCargo("exon");
|
61 | bool res = removeInterval(tree, 50, 200, iCargo);
|
62 | if (res)
|
63 | std::cout << "Removed exon interval 50..200.\n";
|
64 |
|
65 | String<TCargo> results2;
|
66 | findIntervals(tree, snpPos, results2);
|
67 |
|
68 | std::cout << "SNP " << snpPos << " overlaps with ";
|
69 | for (unsigned i = 0; i < length(results2); ++i)
|
70 | std::cout << results2[i] << ",";
|
71 | std::cout << std::endl;
|
72 |
|
73 | return 0;
|
74 | }
|