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