--- /dev/null
+#include "muscle.h"\r
+#include "textfile.h"\r
+#include "msa.h"\r
+#include "tree.h"\r
+#include "profile.h"\r
+#include "objscore.h"\r
+\r
+bool g_bTracePPScore = false;\r
+MSA *g_ptrPPScoreMSA1 = 0;\r
+MSA *g_ptrPPScoreMSA2 = 0;\r
+\r
+static ProfPos *ProfileFromMSALocal(MSA &msa, Tree &tree)\r
+ {\r
+ const unsigned uSeqCount = msa.GetSeqCount();\r
+ for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
+ msa.SetSeqId(uSeqIndex, uSeqIndex);\r
+\r
+ TreeFromMSA(msa, tree, g_Cluster2, g_Distance2, g_Root1);\r
+ SetMuscleTree(tree);\r
+ return ProfileFromMSA(msa);\r
+ }\r
+\r
+void PPScore()\r
+ {\r
+ if (0 == g_pstrFileName1 || 0 == g_pstrFileName2)\r
+ Quit("-ppscore needs -in1 and -in2");\r
+\r
+ SetSeqWeightMethod(g_SeqWeight1);\r
+\r
+ TextFile file1(g_pstrFileName1);\r
+ TextFile file2(g_pstrFileName2);\r
+\r
+ MSA msa1;\r
+ MSA msa2;\r
+\r
+ msa1.FromFile(file1);\r
+ msa2.FromFile(file2);\r
+\r
+ const unsigned uLength1 = msa1.GetColCount();\r
+ const unsigned uLength2 = msa2.GetColCount();\r
+\r
+ if (uLength1 != uLength2)\r
+ Quit("Profiles must have the same length");\r
+\r
+ ALPHA Alpha = ALPHA_Undefined;\r
+ switch (g_SeqType)\r
+ {\r
+ case SEQTYPE_Auto:\r
+ Alpha = msa1.GuessAlpha();\r
+ break;\r
+\r
+ case SEQTYPE_Protein:\r
+ Alpha = ALPHA_Amino;\r
+ break;\r
+\r
+ case SEQTYPE_DNA:\r
+ Alpha = ALPHA_DNA;\r
+ break;\r
+\r
+ case SEQTYPE_RNA:\r
+ Alpha = ALPHA_RNA;\r
+ break;\r
+\r
+ default:\r
+ Quit("Invalid SeqType");\r
+ }\r
+ SetAlpha(Alpha);\r
+\r
+ msa1.FixAlpha();\r
+ msa2.FixAlpha();\r
+\r
+ if (ALPHA_DNA == Alpha || ALPHA_RNA == Alpha)\r
+ SetPPScore(PPSCORE_SPN);\r
+\r
+ const unsigned uSeqCount1 = msa1.GetSeqCount();\r
+ const unsigned uSeqCount2 = msa2.GetSeqCount();\r
+ const unsigned uMaxSeqCount = (uSeqCount1 > uSeqCount2 ? uSeqCount1 : uSeqCount2);\r
+ MSA::SetIdCount(uMaxSeqCount);\r
+\r
+ Tree tree1;\r
+ Tree tree2;\r
+ ProfPos *Prof1 = ProfileFromMSALocal(msa1, tree1);\r
+ ProfPos *Prof2 = ProfileFromMSALocal(msa2, tree2);\r
+\r
+ g_bTracePPScore = true;\r
+ g_ptrPPScoreMSA1 = &msa1;\r
+ g_ptrPPScoreMSA2 = &msa2;\r
+\r
+ SCORE Score = ObjScoreDP_Profs(Prof1, Prof2, uLength1);\r
+\r
+ Log("Score=%.4g\n", Score);\r
+ printf("Score=%.4g\n", Score);\r
+ }\r