source: trunk/GDE/MUSCLE/src/fastscorepath2.cpp

Last change on this file was 10390, checked in by aboeckma, 11 years ago

added muscle sourcles amd makefile

File size: 3.5 KB
Line 
1#include "muscle.h"
2#include "profile.h"
3#include "pwpath.h"
4
5SCORE FastScorePath2(const ProfPos *PA, unsigned uLengthA,
6  const ProfPos *PB, unsigned uLengthB, const PWPath &Path)
7        {
8        const unsigned uEdgeCount = Path.GetEdgeCount();
9        Log("Edge  SS     PLA   PLB   Match     Gap    Total\n");
10        Log("----  --     ---   ---   -----     ---    -----\n");
11        char cType = 'S';
12        SCORE scoreTotal = 0;
13        for (unsigned uEdgeIndex = 0; uEdgeIndex < uEdgeCount; ++uEdgeIndex)
14                {
15                const PWEdge &Edge = Path.GetEdge(uEdgeIndex);
16                const char cPrevType = cType;
17                cType = Edge.cType;
18                const unsigned uPrefixLengthA = Edge.uPrefixLengthA;
19                const unsigned uPrefixLengthB = Edge.uPrefixLengthB;
20                bool bGap = false;
21                bool bMatch = false;
22                SCORE scoreGap = 0;
23                SCORE scoreMatch = 0;
24
25                switch (cType)
26                        {
27                case 'M':
28                        {
29                        if (0 == uPrefixLengthA || 0 == uPrefixLengthB)
30                                Quit("FastScorePath2, M zero length");
31
32                        const ProfPos &PPA = PA[uPrefixLengthA - 1];
33                        const ProfPos &PPB = PB[uPrefixLengthB - 1];
34
35                        bMatch = true;
36                        scoreMatch = ScoreProfPos2(PPA, PPB);
37
38                        if ('D' == cPrevType)
39                                {
40                                bGap = true;
41                                assert(uPrefixLengthA > 1);
42                                scoreGap = PA[uPrefixLengthA-2].m_scoreGapClose;
43                                }
44                        else if ('I' == cPrevType)
45                                {
46                                bGap = true;
47                                assert(uPrefixLengthB > 1);
48                                scoreGap = PB[uPrefixLengthB-2].m_scoreGapClose;
49                                }
50                        break;
51                        }
52
53                case 'D':
54                        {
55                        if (0 == uPrefixLengthA)
56                                Quit("FastScorePath2, D zero length");
57
58                        const ProfPos &PPA = PA[uPrefixLengthA - 1];
59                        bGap = true;
60                        switch (cPrevType)
61                                {
62                        case 'S':
63                                scoreGap = PPA.m_scoreGapOpen;
64                                break;
65                        case 'M':
66                                scoreGap = PPA.m_scoreGapOpen;
67                                break;
68                        case 'D':
69//                              scoreGap = g_scoreGapExtend;
70                                scoreGap = 0;
71                                break;
72                        case 'I':
73                                Quit("FastScorePath2 DI");
74                                }
75                        break;
76                        }
77
78                case 'I':
79                        {
80                        if (0 == uPrefixLengthB)
81                                Quit("FastScorePath2, I zero length");
82
83                        const ProfPos &PPB = PB[uPrefixLengthB - 1];
84                        bGap = true;
85                        switch (cPrevType)
86                                {
87                        case 'S':
88                                scoreGap = PPB.m_scoreGapOpen;
89                                break;
90                        case 'M':
91                                scoreGap = PPB.m_scoreGapOpen;
92                                break;
93                        case 'I':
94                                scoreGap = 0;
95//                              scoreGap = g_scoreGapExtend;
96                                break;
97                        case 'D':
98                                Quit("FastScorePath2 DI");
99                                }
100                        break;
101                        }
102
103                case 'U':
104                        {
105                        Quit("FastScorePath2 U");
106                        }
107
108                default:
109                        Quit("FastScorePath2: invalid type %c", cType);
110                        }
111
112                Log("%4u  %c%c  %4u  %4u  ", uEdgeIndex, cPrevType, cType,
113                  uPrefixLengthA, uPrefixLengthB);
114                if (bMatch)
115                        Log("%7.1f  ", scoreMatch);
116                else
117                        Log("         ");
118                if (bGap)
119                        Log("%7.1f  ", scoreGap);
120                else
121                        Log("         ");
122                SCORE scoreEdge = scoreMatch + scoreGap;
123                scoreTotal += scoreEdge;
124                Log("%7.1f  %7.1f", scoreEdge, scoreTotal);
125                Log("\n");
126                }
127
128        SCORE scoreGap = 0;
129//      if (!g_bTermGapsHalf)
130                switch (cType)
131                        {
132                case 'M':
133                        scoreGap = 0;
134                        break;
135
136                case 'D':
137                        {
138                        const ProfPos &LastPPA = PA[uLengthA - 1];
139                        scoreGap = LastPPA.m_scoreGapClose;
140                        break;
141                        }
142
143                case 'I':
144                        {
145                        const ProfPos &LastPPB = PB[uLengthB - 1];
146                        scoreGap = LastPPB.m_scoreGapClose;
147                        break;
148                        }
149
150                case 'U':
151                        Quit("Unaligned regions not supported");
152
153                case 'S':
154                        break;
155
156                default:
157                        Quit("Invalid type %c", cType);
158                        }
159
160        Log("      %cE  %4u  %4u           %7.1f\n", cType, uLengthA, uLengthB, scoreGap);
161        scoreTotal += scoreGap;
162
163        Log("Total = %g\n", scoreTotal);
164        return scoreTotal;
165        }
Note: See TracBrowser for help on using the repository browser.