Next version of JABA
[jabaws.git] / binaries / src / muscle / validateids.cpp
1 #include "muscle.h"\r
2 #include "msa.h"\r
3 #include "tree.h"\r
4 #include "seqvect.h"\r
5 \r
6 #if     DEBUG\r
7 static SeqVect *g_ptrMuscleSeqVect = 0;\r
8 static MSA MuscleInputMSA;\r
9 \r
10 void SetMuscleInputMSA(MSA &msa)\r
11         {\r
12         MuscleInputMSA.Copy(msa);\r
13         }\r
14 \r
15 void SetMuscleSeqVect(SeqVect &v)\r
16         {\r
17         g_ptrMuscleSeqVect = &v;\r
18         }\r
19 \r
20 void ValidateMuscleIdsSeqVect(const MSA &msa)\r
21         {\r
22         const unsigned uSeqCount = msa.GetSeqCount();\r
23         for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
24                 {\r
25                 const unsigned uId = msa.GetSeqId(uSeqIndex);\r
26                 const char *ptrNameMSA = msa.GetSeqName(uSeqIndex);\r
27                 const char *ptrName = g_ptrMuscleSeqVect->GetSeqName(uId);\r
28                 if (0 != strcmp(ptrNameMSA, ptrName))\r
29                         Quit("ValidateMuscleIdsSeqVect, names don't match");\r
30                 }\r
31         }\r
32 \r
33 void ValidateMuscleIdsMSA(const MSA &msa)\r
34         {\r
35         const unsigned uSeqCount = msa.GetSeqCount();\r
36         for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
37                 {\r
38                 const unsigned uId = msa.GetSeqId(uSeqIndex);\r
39                 const char *ptrNameMSA = msa.GetSeqName(uSeqIndex);\r
40                 const char *ptrName = MuscleInputMSA.GetSeqName(uId);\r
41                 if (0 != strcmp(ptrNameMSA, ptrName))\r
42                         {\r
43                         Log("Input MSA:\n");\r
44                         MuscleInputMSA.LogMe();\r
45                         Log("MSA being tested:\n");\r
46                         msa.LogMe();\r
47                         Log("Id=%u\n", uId);\r
48                         Log("Input name=%s\n", ptrName);\r
49                         Log("Test name=%s\n", ptrNameMSA);\r
50                         Quit("ValidateMuscleIdsMSA, names don't match");\r
51                         }\r
52                 }\r
53         }\r
54 \r
55 void ValidateMuscleIds(const MSA &msa)\r
56         {\r
57         if (0 != g_ptrMuscleSeqVect)\r
58                 ValidateMuscleIdsSeqVect(msa);\r
59         else if (0 != MuscleInputMSA.GetSeqCount())\r
60                 ValidateMuscleIdsMSA(msa);\r
61         else\r
62                 Quit("ValidateMuscleIds, ptrMuscleSeqVect=0 && 0 == MuscleInputMSA.SeqCount()");\r
63 \r
64         }\r
65 \r
66 void ValidateMuscleIdsSeqVect(const Tree &tree)\r
67         {\r
68         const unsigned uSeqCount = g_ptrMuscleSeqVect->GetSeqCount();\r
69         const unsigned uNodeCount = tree.GetNodeCount();\r
70         for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)\r
71                 {\r
72                 if (!tree.IsLeaf(uNodeIndex))\r
73                         continue;\r
74                 const unsigned uId = tree.GetLeafId(uNodeIndex);\r
75                 if (uId >= uSeqCount)\r
76                         {\r
77                         tree.LogMe();\r
78                         Quit("Leaf with node index %u has id=%u, there are %u seqs",\r
79                           uNodeIndex, uId, uSeqCount);\r
80                         }\r
81                 const char *ptrNameTree = tree.GetLeafName(uNodeIndex);\r
82                 const char *ptrName = g_ptrMuscleSeqVect->GetSeqName(uId);\r
83                 if (0 != strcmp(ptrNameTree, ptrName))\r
84                         Quit("ValidateMuscleIds: names don't match");\r
85                 }\r
86         }\r
87 \r
88 void ValidateMuscleIdsMSA(const Tree &tree)\r
89         {\r
90         const unsigned uNodeCount = tree.GetNodeCount();\r
91         for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)\r
92                 {\r
93                 if (!tree.IsLeaf(uNodeIndex))\r
94                         continue;\r
95                 const unsigned uId = tree.GetLeafId(uNodeIndex);\r
96                 const char *ptrNameTree = tree.GetLeafName(uNodeIndex);\r
97                 const char *ptrName = MuscleInputMSA.GetSeqName(uId);\r
98                 if (0 != strcmp(ptrNameTree, ptrName))\r
99                         Quit("ValidateMuscleIds: names don't match");\r
100                 }\r
101         }\r
102 \r
103 void ValidateMuscleIds(const Tree &tree)\r
104         {\r
105         if (0 != g_ptrMuscleSeqVect)\r
106                 ValidateMuscleIdsSeqVect(tree);\r
107         else if (0 != MuscleInputMSA.GetSeqCount())\r
108                 ValidateMuscleIdsMSA(tree);\r
109         else\r
110                 Quit("ValidateMuscleIds, ptrMuscleSeqVect=0 && 0 == MuscleInputMSA.SeqCount");\r
111         }\r
112 #endif\r