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