| 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 | }
|
|