Next version of JABA
[jabaws.git] / binaries / src / muscle / objscore.cpp
1 #include "muscle.h"\r
2 #include "msa.h"\r
3 #include "objscore.h"\r
4 #include "profile.h"\r
5 #include "timing.h"\r
6 \r
7 #if     TIMING\r
8 TICKS g_ticksObjScore = 0;\r
9 #endif\r
10 \r
11 SCORE ObjScore(const MSA &msa, const unsigned SeqIndexes1[],\r
12   unsigned uSeqCount1, const unsigned SeqIndexes2[], unsigned uSeqCount2)\r
13         {\r
14 #if     TIMING\r
15         TICKS t1 = GetClockTicks();\r
16 #endif\r
17         const unsigned uSeqCount = msa.GetSeqCount();\r
18 \r
19         OBJSCORE OS = g_ObjScore;\r
20         if (g_ObjScore == OBJSCORE_SPM)\r
21                 {\r
22         if (uSeqCount <= 100)\r
23                         OS = OBJSCORE_XP;\r
24                 else\r
25                         OS = OBJSCORE_SPF;\r
26                 }\r
27 \r
28         MSA msa1;\r
29         MSA msa2;\r
30 \r
31         switch (OS)\r
32                 {\r
33         case OBJSCORE_DP:\r
34         case OBJSCORE_XP:\r
35                 MSAFromSeqSubset(msa, SeqIndexes1, uSeqCount1, msa1);\r
36                 MSAFromSeqSubset(msa, SeqIndexes2, uSeqCount2, msa2);\r
37 \r
38                 SetMSAWeightsMuscle(msa1);\r
39                 SetMSAWeightsMuscle(msa2);\r
40                 break;\r
41 \r
42         case OBJSCORE_SP:\r
43         case OBJSCORE_SPF:\r
44         case OBJSCORE_PS:\r
45         // Yuck -- casting away const (design flaw)\r
46                 SetMSAWeightsMuscle((MSA &) msa);\r
47                 break;\r
48                 }\r
49 \r
50         SCORE Score = 0;\r
51         switch (OS)\r
52                 {\r
53         case OBJSCORE_SP:\r
54                 Score = ObjScoreSP(msa);\r
55                 break;\r
56 \r
57         case OBJSCORE_DP:\r
58                 Score = ObjScoreDP(msa1, msa2);\r
59                 break;\r
60 \r
61         case OBJSCORE_XP:\r
62                 Score = ObjScoreXP(msa1, msa2);\r
63                 break;\r
64 \r
65         case OBJSCORE_PS:\r
66                 Score = ObjScorePS(msa);\r
67                 break;\r
68 \r
69         case OBJSCORE_SPF:\r
70                 Score = ObjScoreSPDimer(msa);\r
71                 break;\r
72         \r
73         default:\r
74                 Quit("Invalid g_ObjScore=%d", g_ObjScore);\r
75                 }\r
76 #if     TIMING\r
77         TICKS t2 = GetClockTicks();\r
78         g_ticksObjScore += (t2 - t1);\r
79 #endif\r
80         return Score;\r
81         }\r
82 \r
83 SCORE ObjScoreIds(const MSA &msa, const unsigned Ids1[],\r
84   unsigned uCount1, const unsigned Ids2[], unsigned uCount2)\r
85         {\r
86 #if     TIMING\r
87         TICKS t1 = GetClockTicks();\r
88 #endif\r
89         unsigned *SeqIndexes1 = new unsigned[uCount1];\r
90         unsigned *SeqIndexes2 = new unsigned[uCount2];\r
91 \r
92         for (unsigned n = 0; n < uCount1; ++n)\r
93                 SeqIndexes1[n] = msa.GetSeqIndex(Ids1[n]);\r
94 \r
95         for (unsigned n = 0; n < uCount2; ++n)\r
96                 SeqIndexes2[n] = msa.GetSeqIndex(Ids2[n]);\r
97 \r
98 #if DOUBLE_AFFINE\r
99         extern SCORE ObjScoreDA(const MSA &msa, SCORE *ptrLetters, SCORE *ptrGaps);\r
100         SCORE Letters, Gaps;\r
101         SCORE dObjScore = ObjScoreDA(msa, &Letters, &Gaps);\r
102 \r
103         delete[] SeqIndexes1;\r
104         delete[] SeqIndexes2;\r
105 #else\r
106         SCORE dObjScore = ObjScore(msa, SeqIndexes1, uCount1, SeqIndexes2, uCount2);\r
107 #endif\r
108 #if     TIMING\r
109         TICKS t2 = GetClockTicks();\r
110         g_ticksObjScore += (t2 - t1);\r
111 #endif\r
112         return dObjScore;\r
113         }\r