Next version of JABA
[jabaws.git] / binaries / src / muscle / distcalc.cpp
1 #include "muscle.h"\r
2 #include "distfunc.h"\r
3 #include "distcalc.h"\r
4 #include "msa.h"\r
5 \r
6 void DistCalcDF::Init(const DistFunc &DF)\r
7         {\r
8         m_ptrDF = &DF;\r
9         }\r
10 \r
11 void DistCalcDF::CalcDistRange(unsigned i, dist_t Dist[]) const\r
12         {\r
13         for (unsigned j = 0; j < i; ++j)\r
14                 Dist[j] = m_ptrDF->GetDist(i, j);\r
15         }\r
16 \r
17 unsigned DistCalcDF::GetCount() const\r
18         {\r
19         return m_ptrDF->GetCount();\r
20         }\r
21 \r
22 unsigned DistCalcDF::GetId(unsigned i) const\r
23         {\r
24         return m_ptrDF->GetId(i);\r
25         }\r
26 \r
27 const char *DistCalcDF::GetName(unsigned i) const\r
28         {\r
29         return m_ptrDF->GetName(i);\r
30         }\r
31 \r
32 void DistCalcMSA::Init(const MSA &msa, DISTANCE Distance)\r
33         {\r
34         m_ptrMSA = &msa;\r
35         m_Distance = Distance;\r
36         }\r
37 \r
38 void DistCalcMSA::CalcDistRange(unsigned i, dist_t Dist[]) const\r
39         {\r
40         for (unsigned j = 0; j < i; ++j)\r
41                 {\r
42                 switch (m_Distance)\r
43                         {\r
44                 case DISTANCE_PctIdKimura:\r
45                         {\r
46                         const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);\r
47                         Dist[j] = (float) KimuraDist(PctId);\r
48                         break;\r
49                         }\r
50                 case DISTANCE_PctIdLog:\r
51                         {\r
52                         const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);\r
53                         Dist[j] = (float) PctIdToMAFFTDist(PctId);\r
54                         break;\r
55                         }\r
56                 case DISTANCE_ScoreDist:\r
57                         {\r
58                         double GetScoreDist(const MSA &msa, unsigned SeqIndex1, unsigned SeqIndex2);\r
59                         Dist[j] = (float) GetScoreDist(*m_ptrMSA, i, j);\r
60                         continue;\r
61                         }\r
62                 case DISTANCE_Edit:\r
63                         {\r
64                         const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);\r
65                         if (PctId > 1.0)\r
66                                 Quit("Internal error, DISTANCE_Edit, pct id=%.3g", PctId);\r
67                         Dist[j] = (float) 1.0 - PctId;\r
68                         break;\r
69                         }\r
70                 default:\r
71                         Quit("DistCalcMSA: Invalid DISTANCE_%u", m_Distance);\r
72                         }\r
73                 }\r
74         }\r
75 \r
76 unsigned DistCalcMSA::GetCount() const\r
77         {\r
78         return m_ptrMSA->GetSeqCount();\r
79         }\r
80 \r
81 unsigned DistCalcMSA::GetId(unsigned i) const\r
82         {\r
83         return m_ptrMSA->GetSeqId(i);\r
84         }\r
85 \r
86 const char *DistCalcMSA::GetName(unsigned i) const\r
87         {\r
88         return m_ptrMSA->GetSeqName(i);\r
89         }\r