+++ /dev/null
-#include "muscle.h"\r
-#include "msa.h"\r
-#include "objscore.h"\r
-#include "profile.h"\r
-\r
-#define TRACE 0\r
-#define COMPARE_3_52 0\r
-#define BRUTE_LETTERS 0\r
-\r
-static SCORE ScoreColLetters(const MSA &msa, unsigned uColIndex)\r
- {\r
- SCOREMATRIX &Mx = *g_ptrScoreMatrix;\r
- const unsigned uSeqCount = msa.GetSeqCount();\r
-\r
-#if BRUTE_LETTERS\r
- SCORE BruteScore = 0;\r
- for (unsigned uSeqIndex1 = 0; uSeqIndex1 < uSeqCount; ++uSeqIndex1)\r
- {\r
- unsigned uLetter1 = msa.GetLetterEx(uSeqIndex1, uColIndex);\r
- if (uLetter1 >= g_AlphaSize)\r
- continue;\r
- WEIGHT w1 = msa.GetSeqWeight(uSeqIndex1);\r
- for (unsigned uSeqIndex2 = uSeqIndex1 + 1; uSeqIndex2 < uSeqCount; ++uSeqIndex2)\r
- {\r
- unsigned uLetter2 = msa.GetLetterEx(uSeqIndex2, uColIndex);\r
- if (uLetter2 >= g_AlphaSize)\r
- continue;\r
- WEIGHT w2 = msa.GetSeqWeight(uSeqIndex2);\r
- BruteScore += w1*w2*Mx[uLetter1][uLetter2];\r
- }\r
- }\r
-#endif\r
- \r
- double N = 0;\r
- for (unsigned uSeqIndex1 = 0; uSeqIndex1 < uSeqCount; ++uSeqIndex1)\r
- {\r
- WEIGHT w = msa.GetSeqWeight(uSeqIndex1);\r
- N += w;\r
- }\r
- if (N <= 0)\r
- return 0;\r
-\r
- FCOUNT Freqs[20];\r
- memset(Freqs, 0, sizeof(Freqs));\r
- SCORE Score = 0;\r
- for (unsigned uSeqIndex1 = 0; uSeqIndex1 < uSeqCount; ++uSeqIndex1)\r
- {\r
- unsigned uLetter = msa.GetLetterEx(uSeqIndex1, uColIndex);\r
- if (uLetter >= g_AlphaSize)\r
- continue;\r
- WEIGHT w = msa.GetSeqWeight(uSeqIndex1);\r
- Freqs[uLetter] += w;\r
- Score -= w*w*Mx[uLetter][uLetter];\r
- }\r
-\r
- for (unsigned uLetter1 = 0; uLetter1 < g_AlphaSize; ++uLetter1)\r
- {\r
- const FCOUNT f1 = Freqs[uLetter1];\r
- Score += f1*f1*Mx[uLetter1][uLetter1];\r
- for (unsigned uLetter2 = uLetter1 + 1; uLetter2 < g_AlphaSize; ++uLetter2)\r
- {\r
- const FCOUNT f2 = Freqs[uLetter2];\r
- Score += 2*f1*f2*Mx[uLetter1][uLetter2];\r
- }\r
- }\r
- Score /= 2;\r
-#if BRUTE_LETTERS\r
- assert(BTEq(BruteScore, Score));\r
-#endif\r
- return Score;\r
- }\r
-\r
-static SCORE ScoreLetters(const MSA &msa, const unsigned Edges[],\r
- unsigned uEdgeCount)\r
- {\r
- const unsigned uSeqCount = msa.GetSeqCount();\r
- const unsigned uColCount = msa.GetColCount();\r
-\r
-// Letters\r
- SCORE Score = 0;\r
- for (unsigned uEdgeIndex = 0; uEdgeIndex < uEdgeCount; ++uEdgeIndex)\r
- {\r
- const unsigned uColIndex = Edges[uEdgeIndex];\r
- assert(uColIndex < uColCount);\r
- Score += ScoreColLetters(msa, uColIndex);\r
- }\r
- return Score;\r
- }\r
-\r
-void GetLetterScores(const MSA &msa, SCORE Scores[])\r
- {\r
- const unsigned uColCount = msa.GetColCount();\r
- for (unsigned uColIndex = 0; uColIndex < uColCount; ++uColIndex)\r
- Scores[uColIndex] = ScoreColLetters(msa, uColIndex);\r
- }\r
-\r
-SCORE DiffObjScore(\r
- const MSA &msa1, const PWPath &Path1, const unsigned Edges1[], unsigned uEdgeCount1, \r
- const MSA &msa2, const PWPath &Path2, const unsigned Edges2[], unsigned uEdgeCount2)\r
- {\r
-#if TRACE\r
- {\r
- Log("============DiffObjScore===========\n");\r
- Log("msa1:\n");\r
- msa1.LogMe();\r
- Log("\n");\r
- Log("Cols1: ");\r
- for (unsigned i = 0; i < uEdgeCount1; ++i)\r
- Log(" %u", Edges1[i]);\r
- Log("\n\n");\r
- Log("msa2:\n");\r
- msa2.LogMe();\r
- Log("Cols2: ");\r
- for (unsigned i = 0; i < uEdgeCount2; ++i)\r
- Log(" %u", Edges2[i]);\r
- Log("\n\n");\r
- }\r
-#endif\r
-\r
-#if COMPARE_3_52\r
- extern SCORE g_SPScoreLetters;\r
- extern SCORE g_SPScoreGaps;\r
- SCORE SP1 = ObjScoreSP(msa1);\r
- SCORE SPLetters1 = g_SPScoreLetters;\r
- SCORE SPGaps1 = g_SPScoreGaps;\r
-\r
- SCORE SP2 = ObjScoreSP(msa2);\r
- SCORE SPLetters2 = g_SPScoreLetters;\r
- SCORE SPGaps2 = g_SPScoreGaps;\r
- SCORE SPDiffLetters = SPLetters2 - SPLetters1;\r
- SCORE SPDiffGaps = SPGaps2 - SPGaps1;\r
- SCORE SPDiff = SPDiffLetters + SPDiffGaps;\r
-#endif\r
-\r
- SCORE Letters1 = ScoreLetters(msa1, Edges1, uEdgeCount1);\r
- SCORE Letters2 = ScoreLetters(msa2, Edges2, uEdgeCount2);\r
-\r
- SCORE Gaps1 = ScoreGaps(msa1, Edges1, uEdgeCount1);\r
- SCORE Gaps2 = ScoreGaps(msa2, Edges2, uEdgeCount2);\r
-\r
- SCORE DiffLetters = Letters2 - Letters1;\r
- SCORE DiffGaps = Gaps2 - Gaps1;\r
- SCORE Diff = DiffLetters + DiffGaps;\r
-\r
-#if COMPARE_3_52\r
- Log("ObjScoreSP Letters1=%.4g Letters2=%.4g DiffLetters=%.4g\n",\r
- SPLetters1, SPLetters2, SPDiffLetters);\r
-\r
- Log("DiffObjScore Letters1=%.4g Letters2=%.4g DiffLetters=%.4g\n",\r
- Letters1, Letters2, DiffLetters);\r
-\r
- Log("ObjScoreSP Gaps1=%.4g Gaps2=%.4g DiffGaps=%.4g\n",\r
- SPGaps1, SPGaps2, SPDiffGaps);\r
-\r
- Log("DiffObjScore Gaps1=%.4g Gaps2=%.4g DiffGaps=%.4g\n",\r
- Gaps1, Gaps2, DiffGaps);\r
-\r
- Log("SP diff=%.4g DiffObjScore Diff=%.4g\n", SPDiff, Diff);\r
-#endif\r
-\r
- return Diff;\r
- }\r