]> git.donarmstrong.com Git - mothur.git/blobdiff - uchime_src/seqdb.h
added uchime_src folder. added biom parameter to make.shared. added biom as a current...
[mothur.git] / uchime_src / seqdb.h
diff --git a/uchime_src/seqdb.h b/uchime_src/seqdb.h
new file mode 100644 (file)
index 0000000..e4af984
--- /dev/null
@@ -0,0 +1,108 @@
+#ifndef seqdb_h\r
+#define seqdb_h\r
+\r
+#include <vector>\r
+#include <map>\r
+\r
+struct SeqData;\r
+\r
+using namespace std;\r
+\r
+struct SeqDB\r
+       {\r
+private:\r
+       SeqDB(const SeqDB &rhs);\r
+       SeqDB &operator=(const SeqDB &rhs);\r
+\r
+public:\r
+       string m_FileName;\r
+       char **m_Labels;\r
+       byte **m_Seqs;\r
+       unsigned *m_SeqLengths;\r
+       unsigned m_SeqCount;\r
+       unsigned m_Size;\r
+\r
+       bool m_Aligned;\r
+       bool m_IsNucleo;\r
+       bool m_IsNucleoSet;\r
+\r
+public:\r
+       SeqDB();\r
+       ~SeqDB();\r
+       void Clear(bool ctor = false);\r
+       void InitEmpty(bool Nucleo);\r
+\r
+       unsigned AddSeq(const char *Label, const byte *Seq, unsigned L);\r
+\r
+       byte *GetSeq(unsigned SeqIndex) const\r
+               {\r
+               asserta(SeqIndex < m_SeqCount);\r
+               return m_Seqs[SeqIndex];\r
+               }\r
+\r
+       const char *GetLabel(unsigned SeqIndex) const\r
+               {\r
+               asserta(SeqIndex < m_SeqCount);\r
+               return m_Labels[SeqIndex];\r
+               }\r
+\r
+       unsigned GetSeqLength(unsigned SeqIndex) const\r
+               {\r
+               asserta(SeqIndex < m_SeqCount);\r
+               return m_SeqLengths[SeqIndex];\r
+               }\r
+\r
+       unsigned GetSeqCount() const\r
+               {\r
+               return m_SeqCount;\r
+               }\r
+\r
+       unsigned GetPairCount() const\r
+               {\r
+               unsigned SeqCount = GetSeqCount();\r
+               return (SeqCount*(SeqCount - 1))/2;\r
+               }\r
+\r
+       unsigned GetPairIndex(unsigned SeqIndex1, unsigned SeqIndex2) const\r
+               {\r
+               if (SeqIndex1 > SeqIndex2)\r
+                       return (SeqIndex1*(SeqIndex1 - 1))/2 + SeqIndex2;\r
+               return (SeqIndex2*(SeqIndex2 - 1))/2 + SeqIndex1;\r
+               }\r
+\r
+       unsigned GetColCount() const\r
+               {\r
+               if (!m_Aligned)\r
+                       Die("SeqDB::GetColCount, not aligned");\r
+               if (m_SeqCount == 0)\r
+                       Die("SeqDB::GetColCount, empty");\r
+               return m_SeqLengths[0];\r
+               }\r
+\r
+       bool IsNucleo() const\r
+               {\r
+               asserta(m_IsNucleoSet);\r
+               return m_IsNucleo;\r
+               }\r
+\r
+       void GetSeqData(unsigned Id, SeqData &Buffer) const;\r
+\r
+       unsigned GetMaxLabelLength() const;\r
+       unsigned GetMaxSeqLength() const;\r
+       void SetIsNucleo();\r
+       unsigned GetIndex(const char *Label) const;\r
+       void MakeLabelToIndex(map<string, unsigned> &LabelToIndex);\r
+\r
+       void LogMe() const;\r
+       void FromFasta(const string &FileName, bool AllowGaps = false);\r
+\r
+       void ToFasta(const string &FileName) const;\r
+       void ToFasta(FILE *f, unsigned SeqIndex) const;\r
+       void SeqToFasta(FILE *f, unsigned SeqIndex, bool WithLabel = false) const;\r
+\r
+       unsigned GetTotalLength() const;\r
+       };\r
+\r
+bool isgap(byte c);\r
+\r
+#endif\r