5 extern float VTML_SP[32][32];
\r
6 extern float NUC_SP[32][32];
\r
8 static double GetColScore(const MSA &msa, unsigned uCol)
\r
10 const unsigned uSeqCount = msa.GetSeqCount();
\r
11 unsigned uPairCount = 0;
\r
13 for (unsigned uSeq1 = 0; uSeq1 < uSeqCount; ++uSeq1)
\r
15 if (msa.IsGap(uSeq1, uCol))
\r
17 unsigned uLetter1 = msa.GetLetterEx(uSeq1, uCol);
\r
18 if (uLetter1 >= g_AlphaSize)
\r
20 for (unsigned uSeq2 = uSeq1 + 1; uSeq2 < uSeqCount; ++uSeq2)
\r
22 if (msa.IsGap(uSeq2, uCol))
\r
24 unsigned uLetter2 = msa.GetLetterEx(uSeq2, uCol);
\r
25 if (uLetter2 >= g_AlphaSize)
\r
31 Score = VTML_SP[uLetter1][uLetter2];
\r
35 Score = NUC_SP[uLetter1][uLetter2];
\r
38 Quit("GetColScore: invalid alpha=%d", g_Alpha);
\r
44 if (0 == uPairCount)
\r
46 return dSum / uPairCount;
\r
49 void WriteScoreFile(const MSA &msa)
\r
51 FILE *f = fopen(g_pstrScoreFileName, "w");
\r
53 Quit("Cannot open score file '%s' errno=%d", g_pstrScoreFileName, errno);
\r
55 const unsigned uColCount = msa.GetColCount();
\r
56 const unsigned uSeqCount = msa.GetSeqCount();
\r
57 for (unsigned uCol = 0; uCol < uColCount; ++uCol)
\r
59 double Score = GetColScore(msa, uCol);
\r
60 fprintf(f, "%10.3f ", Score);
\r
61 for (unsigned uSeq = 0; uSeq < uSeqCount; ++uSeq)
\r
63 char c = msa.GetChar(uSeq, uCol);
\r
64 fprintf(f, "%c", c);
\r