Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / scorepp.cpp
diff --git a/website/archive/binaries/mac/src/muscle/scorepp.cpp b/website/archive/binaries/mac/src/muscle/scorepp.cpp
new file mode 100644 (file)
index 0000000..541e7ff
--- /dev/null
@@ -0,0 +1,104 @@
+#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