00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGATOOLS_REFERENCE_GENEDATASTORE_HPP_
00016 #define CGATOOLS_REFERENCE_GENEDATASTORE_HPP_ 1
00017
00019
00020 #include "cgatools/core.hpp"
00021 #include "cgatools/util/RangeIntersector.hpp"
00022 #include "cgatools/util/DelimitedFile.hpp"
00023 #include "cgatools/reference/CrrFile.hpp"
00024
00025 namespace cgatools { namespace reference {
00026
00027 struct GeneDescriptionData
00028 {
00029 std::string mrnaAcc_, proteinAcc_, geneId_, symbol_;
00030 bool strand_;
00031 std::vector<Range> exonRanges_;
00032 Range genomeCodingRange_;
00033 };
00034
00035 class GeneDataStore
00036 {
00037 private:
00038 typedef util::IntervalTree<Range,
00039 Location,
00040 GeneDescriptionData,
00041 RangeOverlap,
00042 GetRangeBoundary > DataStore;
00043 public:
00044 typedef DataStore::QueryResultType QueryResultType;
00045
00046 GeneDataStore(const reference::CrrFile& crr, const std::string& fn)
00047 {
00048 load(crr, fn);
00049 }
00050
00051 const util::DelimitedFileMetadata& getMetadata() const
00052 {
00053 return metadata_;
00054 }
00055
00056 void intersect(const reference::Range& range,
00057 std::vector<QueryResultType>& result) const
00058 {
00059 tree_.intersect(range, result);
00060 }
00061
00062 private:
00063 util::DelimitedFileMetadata metadata_;
00064 DataStore tree_;
00065
00066 void load(const reference::CrrFile& crr, const std::string& fn);
00067 };
00068
00069 }}
00070
00071 #endif