]> git.donarmstrong.com Git - mothur.git/blob - seqdb.h
6907015095f7f004ff9b1cd0d07450b0c4a1bb41
[mothur.git] / seqdb.h
1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.\r
2 \r
3 #ifndef seqdb_h\r
4 #define seqdb_h\r
5 \r
6 #include <vector>\r
7 #include <map>\r
8 #include "myutils.h"\r
9 \r
10 struct SeqData;\r
11 \r
12 using namespace std;\r
13 \r
14 struct SeqDB\r
15         {\r
16 private:\r
17         SeqDB(const SeqDB &rhs);\r
18         SeqDB &operator=(const SeqDB &rhs);\r
19 \r
20 public:\r
21         string m_FileName;\r
22         char **m_Labels;\r
23         byte **m_Seqs;\r
24         unsigned *m_SeqLengths;\r
25         unsigned m_SeqCount;\r
26         unsigned m_Size;\r
27 \r
28         bool m_Aligned;\r
29         bool m_IsNucleo;\r
30         bool m_IsNucleoSet;\r
31 \r
32 public:\r
33         SeqDB();\r
34         ~SeqDB();\r
35         void Clear(bool ctor = false);\r
36         void InitEmpty(bool Nucleo);\r
37 \r
38         unsigned AddSeq(const char *Label, const byte *Seq, unsigned L);\r
39 \r
40         byte *GetSeq(unsigned SeqIndex) const\r
41                 {\r
42                 asserta(SeqIndex < m_SeqCount);\r
43                 return m_Seqs[SeqIndex];\r
44                 }\r
45 \r
46         const char *GetLabel(unsigned SeqIndex) const\r
47                 {\r
48                 asserta(SeqIndex < m_SeqCount);\r
49                 return m_Labels[SeqIndex];\r
50                 }\r
51 \r
52         unsigned GetSeqLength(unsigned SeqIndex) const\r
53                 {\r
54                 asserta(SeqIndex < m_SeqCount);\r
55                 return m_SeqLengths[SeqIndex];\r
56                 }\r
57 \r
58         unsigned GetSeqCount() const\r
59                 {\r
60                 return m_SeqCount;\r
61                 }\r
62 \r
63         unsigned GetPairCount() const\r
64                 {\r
65                 unsigned SeqCount = GetSeqCount();\r
66                 return (SeqCount*(SeqCount - 1))/2;\r
67                 }\r
68 \r
69         unsigned GetPairIndex(unsigned SeqIndex1, unsigned SeqIndex2) const\r
70                 {\r
71                 if (SeqIndex1 > SeqIndex2)\r
72                         return (SeqIndex1*(SeqIndex1 - 1))/2 + SeqIndex2;\r
73                 return (SeqIndex2*(SeqIndex2 - 1))/2 + SeqIndex1;\r
74                 }\r
75 \r
76         unsigned GetColCount() const\r
77                 {\r
78                 if (!m_Aligned)\r
79                         Die("SeqDB::GetColCount, not aligned");\r
80                 if (m_SeqCount == 0)\r
81                         Die("SeqDB::GetColCount, empty");\r
82                 return m_SeqLengths[0];\r
83                 }\r
84 \r
85         bool IsNucleo() const\r
86                 {\r
87                 asserta(m_IsNucleoSet);\r
88                 return m_IsNucleo;\r
89                 }\r
90 \r
91         void GetSeqData(unsigned Id, SeqData &Buffer) const;\r
92 \r
93         unsigned GetMaxLabelLength() const;\r
94         unsigned GetMaxSeqLength() const;\r
95         void SetIsNucleo();\r
96         unsigned GetIndex(const char *Label) const;\r
97         void MakeLabelToIndex(map<string, unsigned> &LabelToIndex);\r
98 \r
99         void LogMe() const;\r
100         void FromFasta(const string &FileName, bool AllowGaps = false);\r
101 \r
102         void ToFasta(const string &FileName) const;\r
103         void ToFasta(FILE *f, unsigned SeqIndex) const;\r
104         void SeqToFasta(FILE *f, unsigned SeqIndex, bool WithLabel = false) const;\r
105 \r
106         unsigned GetTotalLength() const;\r
107         };\r
108 \r
109 bool isgap(byte c);\r
110 \r
111 #endif\r