+++ /dev/null
-#include "muscle.h"\r
-#include "profile.h"\r
-\r
-char ConsensusChar(const ProfPos &PP)\r
- {\r
- unsigned uMostCommonLetter = 0;\r
- FCOUNT fcMostCommon = PP.m_fcCounts[0];\r
- bool bMoreThanOneLetter = false;\r
- bool bAnyLetter = false;\r
- for (unsigned uLetter = 0; uLetter < g_AlphaSize; ++uLetter)\r
- {\r
- const FCOUNT fc = PP.m_fcCounts[uLetter];\r
- if (fc > 0)\r
- {\r
- if (bAnyLetter)\r
- bMoreThanOneLetter = true;\r
- bAnyLetter = true;\r
- }\r
- if (fc > fcMostCommon)\r
- {\r
- uMostCommonLetter = uLetter;\r
- fcMostCommon = fc;\r
- }\r
- }\r
- if (!bAnyLetter)\r
- return '-';\r
- char c = LetterToChar(uMostCommonLetter);\r
- if (bMoreThanOneLetter)\r
- return UnalignChar(c);\r
- return c;\r
- }\r
-\r
-SCORE ScoreProfPos2LA(const ProfPos &PPA, const ProfPos &PPB)\r
- {\r
- SCORE Score = 0;\r
- for (unsigned n = 0; n < 20; ++n)\r
- {\r
- const unsigned uLetter = PPA.m_uSortOrder[n];\r
- const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];\r
- if (0 == fcLetter)\r
- break;\r
- Score += fcLetter*PPB.m_AAScores[uLetter];\r
- }\r
- if (0 == Score)\r
- return -2.5;\r
- SCORE logScore = logf(Score);\r
- return (SCORE) ((logScore - g_scoreCenter)*(PPA.m_fOcc * PPB.m_fOcc));\r
- }\r
-\r
-SCORE ScoreProfPos2NS(const ProfPos &PPA, const ProfPos &PPB)\r
- {\r
- SCORE Score = 0;\r
- for (unsigned n = 0; n < 20; ++n)\r
- {\r
- const unsigned uLetter = PPA.m_uSortOrder[n];\r
- const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];\r
- if (0 == fcLetter)\r
- break;\r
- Score += fcLetter*PPB.m_AAScores[uLetter];\r
- }\r
- return Score - g_scoreCenter;\r
- }\r
-\r
-SCORE ScoreProfPos2SP(const ProfPos &PPA, const ProfPos &PPB)\r
- {\r
- SCORE Score = 0;\r
- for (unsigned n = 0; n < 20; ++n)\r
- {\r
- const unsigned uLetter = PPA.m_uSortOrder[n];\r
- const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];\r
- if (0 == fcLetter)\r
- break;\r
- Score += fcLetter*PPB.m_AAScores[uLetter];\r
- }\r
- return Score - g_scoreCenter;\r
- }\r
-\r
-SCORE ScoreProfPos2SPN(const ProfPos &PPA, const ProfPos &PPB)\r
- {\r
- SCORE Score = 0;\r
- for (unsigned n = 0; n < 4; ++n)\r
- {\r
- const unsigned uLetter = PPA.m_uSortOrder[n];\r
- const FCOUNT fcLetter = PPA.m_fcCounts[uLetter];\r
- if (0 == fcLetter)\r
- break;\r
- Score += fcLetter*PPB.m_AAScores[uLetter];\r
- }\r
- return Score - g_scoreCenter;\r
- }\r
-\r
-SCORE ScoreProfPos2(const ProfPos &PPA, const ProfPos &PPB)\r
- {\r
- if (PPSCORE_SP == g_PPScore)\r
- return ScoreProfPos2NS(PPA, PPB);\r
- else if (PPSCORE_LE == g_PPScore)\r
- return ScoreProfPos2LA(PPA, PPB);\r
- else if (PPSCORE_SV == g_PPScore)\r
- return ScoreProfPos2SP(PPA, PPB);\r
- else if (PPSCORE_SPN == g_PPScore)\r
- return ScoreProfPos2SPN(PPA, PPB);\r
- Quit("Invalid g_PPScore");\r
- return 0;\r
- }\r