📄 scorepp.cpp
字号:
#include "muscle.h"
#include "profile.h"
char ConsensusChar(const ProfPos &PP)
{
unsigned uMostCommonLetter = 0;
FCOUNT fcMostCommon = PP.m_fcCounts[0];
bool bMoreThanOneLetter = false;
bool bAnyLetter = false;
for (unsigned uLetter = 0; uLetter < g_AlphaSize; ++uLetter)
{
const FCOUNT fc = PP.m_fcCounts[uLetter];
if (fc > 0)
{
if (bAnyLetter)
bMoreThanOneLetter = true;
bAnyLetter = true;
}
if (fc > fcMostCommon)
{
uMostCommonLetter = uLetter;
fcMostCommon = fc;
}
}
if (!bAnyLetter)
return '-';
char c = LetterToChar(uMostCommonLetter);
if (bMoreThanOneLetter)
return UnalignChar(c);
return c;
}
SCORE ScoreProfPos2LA(const ProfPos &PPA, const ProfPos &PPB)
{
SCORE Score = 0;
for (unsigned n = 0; n < 20; ++n)
{
const unsigned uLetter = PPA.m_uSortOrder[n];
const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];
if (0 == fcLetter)
break;
Score += fcLetter*PPB.m_AAScores[uLetter];
}
if (0 == Score)
return -2.5;
SCORE logScore = logf(Score);
return (SCORE) ((logScore - g_scoreCenter)*(PPA.m_fOcc * PPB.m_fOcc));
}
SCORE ScoreProfPos2NS(const ProfPos &PPA, const ProfPos &PPB)
{
SCORE Score = 0;
for (unsigned n = 0; n < 20; ++n)
{
const unsigned uLetter = PPA.m_uSortOrder[n];
const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];
if (0 == fcLetter)
break;
Score += fcLetter*PPB.m_AAScores[uLetter];
}
return Score - g_scoreCenter;
}
SCORE ScoreProfPos2SP(const ProfPos &PPA, const ProfPos &PPB)
{
SCORE Score = 0;
for (unsigned n = 0; n < 20; ++n)
{
const unsigned uLetter = PPA.m_uSortOrder[n];
const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];
if (0 == fcLetter)
break;
Score += fcLetter*PPB.m_AAScores[uLetter];
}
return Score - g_scoreCenter;
}
SCORE ScoreProfPos2SPN(const ProfPos &PPA, const ProfPos &PPB)
{
SCORE Score = 0;
for (unsigned n = 0; n < 4; ++n)
{
const unsigned uLetter = PPA.m_uSortOrder[n];
const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];
if (0 == fcLetter)
break;
Score += fcLetter*PPB.m_AAScores[uLetter];
}
return Score - g_scoreCenter;
}
SCORE ScoreProfPos2(const ProfPos &PPA, const ProfPos &PPB)
{
if (PPSCORE_SP == g_PPScore)
return ScoreProfPos2NS(PPA, PPB);
else if (PPSCORE_LE == g_PPScore)
return ScoreProfPos2LA(PPA, PPB);
else if (PPSCORE_SV == g_PPScore)
return ScoreProfPos2SP(PPA, PPB);
else if (PPSCORE_SPN == g_PPScore)
return ScoreProfPos2SPN(PPA, PPB);
Quit("Invalid g_PPScore");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -