1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.
\r
12 using namespace std;
\r
17 SeqDB(const SeqDB &rhs);
\r
18 SeqDB &operator=(const SeqDB &rhs);
\r
24 unsigned *m_SeqLengths;
\r
25 unsigned m_SeqCount;
\r
35 void Clear(bool ctor = false);
\r
36 void InitEmpty(bool Nucleo);
\r
38 unsigned AddSeq(const char *Label, const byte *Seq, unsigned L);
\r
40 byte *GetSeq(unsigned SeqIndex) const
\r
42 asserta(SeqIndex < m_SeqCount);
\r
43 return m_Seqs[SeqIndex];
\r
46 const char *GetLabel(unsigned SeqIndex) const
\r
48 asserta(SeqIndex < m_SeqCount);
\r
49 return m_Labels[SeqIndex];
\r
52 unsigned GetSeqLength(unsigned SeqIndex) const
\r
54 asserta(SeqIndex < m_SeqCount);
\r
55 return m_SeqLengths[SeqIndex];
\r
58 unsigned GetSeqCount() const
\r
63 unsigned GetPairCount() const
\r
65 unsigned SeqCount = GetSeqCount();
\r
66 return (SeqCount*(SeqCount - 1))/2;
\r
69 unsigned GetPairIndex(unsigned SeqIndex1, unsigned SeqIndex2) const
\r
71 if (SeqIndex1 > SeqIndex2)
\r
72 return (SeqIndex1*(SeqIndex1 - 1))/2 + SeqIndex2;
\r
73 return (SeqIndex2*(SeqIndex2 - 1))/2 + SeqIndex1;
\r
76 unsigned GetColCount() const
\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
85 bool IsNucleo() const
\r
87 asserta(m_IsNucleoSet);
\r
91 void GetSeqData(unsigned Id, SeqData &Buffer) const;
\r
93 unsigned GetMaxLabelLength() const;
\r
94 unsigned GetMaxSeqLength() const;
\r
96 unsigned GetIndex(const char *Label) const;
\r
97 void MakeLabelToIndex(map<string, unsigned> &LabelToIndex);
\r
100 void FromFasta(const string &FileName, bool AllowGaps = false);
\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
106 unsigned GetTotalLength() const;
\r
109 bool isgap(byte c);
\r