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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <iostream>
#include <seqan/store.h>
#include <seqan/misc/interval_tree.h>
#include <seqan/parallel.h>
using namespace seqan2;
//![definitions]
// define used types
typedef FragmentStore<> TStore;
typedef Value<TStore::TAnnotationStore>::Type TAnnotation;
typedef TAnnotation::TId TId;
typedef TAnnotation::TPos TPos;
typedef IntervalAndCargo<TPos, TId> TInterval;
//![definitions]
//![definitions_end]
//
// 1. Load annotations and alignments from files
//
bool loadFiles(TStore & store, std::string const & annotationFileName, std::string const & alignmentFileName)
{
BamFileIn alignmentFile;
if (!open(alignmentFile, alignmentFileName.c_str()))
{
std::cerr << "Couldn't open alignment file " << alignmentFileName << std::endl;
return false;
}
std::cout << "Loading read alignments ..... " << std::flush;
readRecords(store, alignmentFile);
std::cout << "[" << length(store.alignedReadStore) << "]" << std::endl;
// load annotations
GffFileIn annotationFile;
if (!open(annotationFile, toCString(annotationFileName)))
{
std::cerr << "Couldn't open annotation file" << annotationFileName << std::endl;
return false;
}
std::cout << "Loading genome annotation ... " << std::flush;
readRecords(store, annotationFile);
std::cout << "[" << length(store.annotationStore) << "]" << std::endl;
return true;
}
//![definitions_end]
//![yourcode]
//
// 3. Extract intervals from gene annotations (grouped by contigId)
//
void extractGeneIntervals(String<String<TInterval> > & intervals, TStore const & store)
{
(void) intervals;
(void) store;
// INSERT YOUR CODE HERE ...
//
}
//![yourcode]
//![yourcode_end]
int main(int, char const **)
{
//![main]
TStore store;
String<String<TInterval> > intervals;
//![main]
//![main_end]
std::string annotationFileName = getAbsolutePath("demos/tutorial/simple_rna_seq/example.gtf");
std::string alignmentFileName = getAbsolutePath("demos/tutorial/simple_rna_seq/example.sam");
if (!loadFiles(store, annotationFileName, alignmentFileName))
return 1;
//![main_end]
//![main2]
extractGeneIntervals(intervals, store);
//![main2]
//![main2_end]
return 0;
}
//![main2_end]
|