+++ /dev/null
-#include "muscle.h"\r
-#include "profile.h"\r
-#include "pwpath.h"\r
-\r
-SCORE FastScorePath2(const ProfPos *PA, unsigned uLengthA,\r
- const ProfPos *PB, unsigned uLengthB, const PWPath &Path)\r
- {\r
- const unsigned uEdgeCount = Path.GetEdgeCount();\r
- Log("Edge SS PLA PLB Match Gap Total\n");\r
- Log("---- -- --- --- ----- --- -----\n");\r
- char cType = 'S';\r
- SCORE scoreTotal = 0;\r
- for (unsigned uEdgeIndex = 0; uEdgeIndex < uEdgeCount; ++uEdgeIndex)\r
- {\r
- const PWEdge &Edge = Path.GetEdge(uEdgeIndex);\r
- const char cPrevType = cType;\r
- cType = Edge.cType;\r
- const unsigned uPrefixLengthA = Edge.uPrefixLengthA;\r
- const unsigned uPrefixLengthB = Edge.uPrefixLengthB;\r
- bool bGap = false;\r
- bool bMatch = false;\r
- SCORE scoreGap = 0;\r
- SCORE scoreMatch = 0;\r
-\r
- switch (cType)\r
- {\r
- case 'M':\r
- {\r
- if (0 == uPrefixLengthA || 0 == uPrefixLengthB)\r
- Quit("FastScorePath2, M zero length");\r
-\r
- const ProfPos &PPA = PA[uPrefixLengthA - 1];\r
- const ProfPos &PPB = PB[uPrefixLengthB - 1];\r
-\r
- bMatch = true;\r
- scoreMatch = ScoreProfPos2(PPA, PPB);\r
-\r
- if ('D' == cPrevType)\r
- {\r
- bGap = true;\r
- assert(uPrefixLengthA > 1);\r
- scoreGap = PA[uPrefixLengthA-2].m_scoreGapClose;\r
- }\r
- else if ('I' == cPrevType)\r
- {\r
- bGap = true;\r
- assert(uPrefixLengthB > 1);\r
- scoreGap = PB[uPrefixLengthB-2].m_scoreGapClose;\r
- }\r
- break;\r
- }\r
-\r
- case 'D':\r
- {\r
- if (0 == uPrefixLengthA)\r
- Quit("FastScorePath2, D zero length");\r
-\r
- const ProfPos &PPA = PA[uPrefixLengthA - 1];\r
- bGap = true;\r
- switch (cPrevType)\r
- {\r
- case 'S':\r
- scoreGap = PPA.m_scoreGapOpen;\r
- break;\r
- case 'M':\r
- scoreGap = PPA.m_scoreGapOpen;\r
- break;\r
- case 'D':\r
-// scoreGap = g_scoreGapExtend;\r
- scoreGap = 0;\r
- break;\r
- case 'I':\r
- Quit("FastScorePath2 DI");\r
- }\r
- break;\r
- }\r
-\r
- case 'I':\r
- {\r
- if (0 == uPrefixLengthB)\r
- Quit("FastScorePath2, I zero length");\r
-\r
- const ProfPos &PPB = PB[uPrefixLengthB - 1];\r
- bGap = true;\r
- switch (cPrevType)\r
- {\r
- case 'S':\r
- scoreGap = PPB.m_scoreGapOpen;\r
- break;\r
- case 'M':\r
- scoreGap = PPB.m_scoreGapOpen;\r
- break;\r
- case 'I':\r
- scoreGap = 0;\r
-// scoreGap = g_scoreGapExtend;\r
- break;\r
- case 'D':\r
- Quit("FastScorePath2 DI");\r
- }\r
- break;\r
- }\r
-\r
- case 'U':\r
- {\r
- Quit("FastScorePath2 U");\r
- }\r
-\r
- default:\r
- Quit("FastScorePath2: invalid type %c", cType);\r
- }\r
-\r
- Log("%4u %c%c %4u %4u ", uEdgeIndex, cPrevType, cType,\r
- uPrefixLengthA, uPrefixLengthB);\r
- if (bMatch)\r
- Log("%7.1f ", scoreMatch);\r
- else\r
- Log(" ");\r
- if (bGap)\r
- Log("%7.1f ", scoreGap);\r
- else\r
- Log(" ");\r
- SCORE scoreEdge = scoreMatch + scoreGap;\r
- scoreTotal += scoreEdge;\r
- Log("%7.1f %7.1f", scoreEdge, scoreTotal);\r
- Log("\n");\r
- }\r
-\r
- SCORE scoreGap = 0;\r
-// if (!g_bTermGapsHalf)\r
- switch (cType)\r
- {\r
- case 'M':\r
- scoreGap = 0;\r
- break;\r
-\r
- case 'D':\r
- {\r
- const ProfPos &LastPPA = PA[uLengthA - 1];\r
- scoreGap = LastPPA.m_scoreGapClose;\r
- break;\r
- }\r
-\r
- case 'I':\r
- {\r
- const ProfPos &LastPPB = PB[uLengthB - 1];\r
- scoreGap = LastPPB.m_scoreGapClose;\r
- break;\r
- }\r
-\r
- case 'U':\r
- Quit("Unaligned regions not supported");\r
-\r
- case 'S':\r
- break;\r
-\r
- default:\r
- Quit("Invalid type %c", cType);\r
- }\r
-\r
- Log(" %cE %4u %4u %7.1f\n", cType, uLengthA, uLengthB, scoreGap);\r
- scoreTotal += scoreGap;\r
-\r
- Log("Total = %g\n", scoreTotal);\r
- return scoreTotal;\r
- }\r