--- /dev/null
+#include "muscle.h"\r
+#include "msa.h"\r
+#include "tree.h"\r
+#include "seqvect.h"\r
+\r
+#if DEBUG\r
+static SeqVect *g_ptrMuscleSeqVect = 0;\r
+static MSA MuscleInputMSA;\r
+\r
+void SetMuscleInputMSA(MSA &msa)\r
+ {\r
+ MuscleInputMSA.Copy(msa);\r
+ }\r
+\r
+void SetMuscleSeqVect(SeqVect &v)\r
+ {\r
+ g_ptrMuscleSeqVect = &v;\r
+ }\r
+\r
+void ValidateMuscleIdsSeqVect(const MSA &msa)\r
+ {\r
+ const unsigned uSeqCount = msa.GetSeqCount();\r
+ for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
+ {\r
+ const unsigned uId = msa.GetSeqId(uSeqIndex);\r
+ const char *ptrNameMSA = msa.GetSeqName(uSeqIndex);\r
+ const char *ptrName = g_ptrMuscleSeqVect->GetSeqName(uId);\r
+ if (0 != strcmp(ptrNameMSA, ptrName))\r
+ Quit("ValidateMuscleIdsSeqVect, names don't match");\r
+ }\r
+ }\r
+\r
+void ValidateMuscleIdsMSA(const MSA &msa)\r
+ {\r
+ const unsigned uSeqCount = msa.GetSeqCount();\r
+ for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
+ {\r
+ const unsigned uId = msa.GetSeqId(uSeqIndex);\r
+ const char *ptrNameMSA = msa.GetSeqName(uSeqIndex);\r
+ const char *ptrName = MuscleInputMSA.GetSeqName(uId);\r
+ if (0 != strcmp(ptrNameMSA, ptrName))\r
+ {\r
+ Log("Input MSA:\n");\r
+ MuscleInputMSA.LogMe();\r
+ Log("MSA being tested:\n");\r
+ msa.LogMe();\r
+ Log("Id=%u\n", uId);\r
+ Log("Input name=%s\n", ptrName);\r
+ Log("Test name=%s\n", ptrNameMSA);\r
+ Quit("ValidateMuscleIdsMSA, names don't match");\r
+ }\r
+ }\r
+ }\r
+\r
+void ValidateMuscleIds(const MSA &msa)\r
+ {\r
+ if (0 != g_ptrMuscleSeqVect)\r
+ ValidateMuscleIdsSeqVect(msa);\r
+ else if (0 != MuscleInputMSA.GetSeqCount())\r
+ ValidateMuscleIdsMSA(msa);\r
+ else\r
+ Quit("ValidateMuscleIds, ptrMuscleSeqVect=0 && 0 == MuscleInputMSA.SeqCount()");\r
+\r
+ }\r
+\r
+void ValidateMuscleIdsSeqVect(const Tree &tree)\r
+ {\r
+ const unsigned uSeqCount = g_ptrMuscleSeqVect->GetSeqCount();\r
+ const unsigned uNodeCount = tree.GetNodeCount();\r
+ for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)\r
+ {\r
+ if (!tree.IsLeaf(uNodeIndex))\r
+ continue;\r
+ const unsigned uId = tree.GetLeafId(uNodeIndex);\r
+ if (uId >= uSeqCount)\r
+ {\r
+ tree.LogMe();\r
+ Quit("Leaf with node index %u has id=%u, there are %u seqs",\r
+ uNodeIndex, uId, uSeqCount);\r
+ }\r
+ const char *ptrNameTree = tree.GetLeafName(uNodeIndex);\r
+ const char *ptrName = g_ptrMuscleSeqVect->GetSeqName(uId);\r
+ if (0 != strcmp(ptrNameTree, ptrName))\r
+ Quit("ValidateMuscleIds: names don't match");\r
+ }\r
+ }\r
+\r
+void ValidateMuscleIdsMSA(const Tree &tree)\r
+ {\r
+ const unsigned uNodeCount = tree.GetNodeCount();\r
+ for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)\r
+ {\r
+ if (!tree.IsLeaf(uNodeIndex))\r
+ continue;\r
+ const unsigned uId = tree.GetLeafId(uNodeIndex);\r
+ const char *ptrNameTree = tree.GetLeafName(uNodeIndex);\r
+ const char *ptrName = MuscleInputMSA.GetSeqName(uId);\r
+ if (0 != strcmp(ptrNameTree, ptrName))\r
+ Quit("ValidateMuscleIds: names don't match");\r
+ }\r
+ }\r
+\r
+void ValidateMuscleIds(const Tree &tree)\r
+ {\r
+ if (0 != g_ptrMuscleSeqVect)\r
+ ValidateMuscleIdsSeqVect(tree);\r
+ else if (0 != MuscleInputMSA.GetSeqCount())\r
+ ValidateMuscleIdsMSA(tree);\r
+ else\r
+ Quit("ValidateMuscleIds, ptrMuscleSeqVect=0 && 0 == MuscleInputMSA.SeqCount");\r
+ }\r
+#endif\r