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