00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGATOOLS_REFERENCE_CRRFILE_HPP_
00016 #define CGATOOLS_REFERENCE_CRRFILE_HPP_ 1
00017
00020
00021 #include "cgatools/core.hpp"
00022 #include "cgatools/reference/range.hpp"
00023 #include "cgatools/reference/CrrFileWriter.hpp"
00024 #include "cgatools/reference/CompactDnaSequence.hpp"
00025
00026 #include <vector>
00027 #include <string>
00028 #include <boost/iostreams/device/mapped_file.hpp>
00029
00030 namespace cgatools { namespace reference {
00031
00034 class CrrFile
00035 {
00036 public:
00037 CrrFile();
00038 CrrFile(const std::string& path);
00039 void open(const std::string& path);
00040
00042 const std::vector<CompactDnaSequence>& listChromosomes() const;
00043
00047 std::vector<Range> listContigs(uint32_t minGapLength = 50) const;
00048
00050 std::string getSequence(const Range& range) const;
00051
00053 char getBase(const Location& loc) const;
00054
00056 uint16_t getChromosomeId(const std::string& chromosomeName) const;
00057
00059 void validate() const;
00060
00062 static uint32_t currentVersion();
00063
00066 Location getLocation(const std::string& chromosomeName,
00067 boost::uint32_t offset) const
00068 {
00069 return Location(getChromosomeId(chromosomeName), offset);
00070 }
00071
00072 private:
00073 void readHeader(const std::string& path, std::istream& in, uint64_t* chrTableOffset);
00074 void readChromosomeTable(std::istream& in,
00075 std::vector<CrrFileWriter::ChromosomeInfo>* pInfo,
00076 std::vector<util::Md5Digest>* pDigests);
00077
00078 boost::shared_ptr<boost::iostreams::mapped_file_source> file_;
00079 std::vector<CompactDnaSequence> chromosomes_;
00080 };
00081
00082 } }
00083
00084 #endif // CGATOOLS_REFERENCE_CRRFILE_HPP_