📄 distcalc.cpp
字号:
#include "muscle.h"
#include "distfunc.h"
#include "distcalc.h"
#include "msa.h"
void DistCalcDF::Init(const DistFunc &DF)
{
m_ptrDF = &DF;
}
void DistCalcDF::CalcDistRange(unsigned i, dist_t Dist[]) const
{
for (unsigned j = 0; j < i; ++j)
Dist[j] = m_ptrDF->GetDist(i, j);
}
unsigned DistCalcDF::GetCount() const
{
return m_ptrDF->GetCount();
}
unsigned DistCalcDF::GetId(unsigned i) const
{
return m_ptrDF->GetId(i);
}
const char *DistCalcDF::GetName(unsigned i) const
{
return m_ptrDF->GetName(i);
}
void DistCalcMSA::Init(const MSA &msa, DISTANCE Distance)
{
m_ptrMSA = &msa;
m_Distance = Distance;
}
void DistCalcMSA::CalcDistRange(unsigned i, dist_t Dist[]) const
{
for (unsigned j = 0; j < i; ++j)
{
switch (m_Distance)
{
case DISTANCE_PctIdKimura:
{
const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);
Dist[j] = (float) KimuraDist(PctId);
break;
}
case DISTANCE_PctIdLog:
{
const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);
Dist[j] = (float) PctIdToMAFFTDist(PctId);
break;
}
case DISTANCE_ScoreDist:
{
double GetScoreDist(const MSA &msa, unsigned SeqIndex1, unsigned SeqIndex2);
Dist[j] = (float) GetScoreDist(*m_ptrMSA, i, j);
continue;
}
case DISTANCE_Edit:
{
const float PctId = (float) m_ptrMSA->GetPctIdentityPair(i, j);
if (PctId > 1.0)
Quit("Internal error, DISTANCE_Edit, pct id=%.3g", PctId);
Dist[j] = (float) 1.0 - PctId;
break;
}
default:
Quit("DistCalcMSA: Invalid DISTANCE_%u", m_Distance);
}
}
}
unsigned DistCalcMSA::GetCount() const
{
return m_ptrMSA->GetSeqCount();
}
unsigned DistCalcMSA::GetId(unsigned i) const
{
return m_ptrMSA->GetSeqId(i);
}
const char *DistCalcMSA::GetName(unsigned i) const
{
return m_ptrMSA->GetSeqName(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -