+++ /dev/null
-#include "muscle.h"\r
-#include "msa.h"\r
-#include <errno.h>\r
-\r
-extern float VTML_SP[32][32];\r
-extern float NUC_SP[32][32];\r
-\r
-static double GetColScore(const MSA &msa, unsigned uCol)\r
- {\r
- const unsigned uSeqCount = msa.GetSeqCount();\r
- unsigned uPairCount = 0;\r
- double dSum = 0.0;\r
- for (unsigned uSeq1 = 0; uSeq1 < uSeqCount; ++uSeq1)\r
- {\r
- if (msa.IsGap(uSeq1, uCol))\r
- continue;\r
- unsigned uLetter1 = msa.GetLetterEx(uSeq1, uCol);\r
- if (uLetter1 >= g_AlphaSize)\r
- continue;\r
- for (unsigned uSeq2 = uSeq1 + 1; uSeq2 < uSeqCount; ++uSeq2)\r
- {\r
- if (msa.IsGap(uSeq2, uCol))\r
- continue;\r
- unsigned uLetter2 = msa.GetLetterEx(uSeq2, uCol);\r
- if (uLetter2 >= g_AlphaSize)\r
- continue;\r
- double Score;\r
- switch (g_Alpha)\r
- {\r
- case ALPHA_Amino:\r
- Score = VTML_SP[uLetter1][uLetter2];\r
- break;\r
- case ALPHA_DNA:\r
- case ALPHA_RNA:\r
- Score = NUC_SP[uLetter1][uLetter2];\r
- break;\r
- default:\r
- Quit("GetColScore: invalid alpha=%d", g_Alpha);\r
- }\r
- dSum += Score;\r
- ++uPairCount;\r
- }\r
- }\r
- if (0 == uPairCount)\r
- return 0;\r
- return dSum / uPairCount;\r
- }\r
-\r
-void WriteScoreFile(const MSA &msa)\r
- {\r
- FILE *f = fopen(g_pstrScoreFileName, "w");\r
- if (0 == f)\r
- Quit("Cannot open score file '%s' errno=%d", g_pstrScoreFileName, errno);\r
-\r
- const unsigned uColCount = msa.GetColCount();\r
- const unsigned uSeqCount = msa.GetSeqCount();\r
- for (unsigned uCol = 0; uCol < uColCount; ++uCol)\r
- {\r
- double Score = GetColScore(msa, uCol);\r
- fprintf(f, "%10.3f ", Score);\r
- for (unsigned uSeq = 0; uSeq < uSeqCount; ++uSeq)\r
- {\r
- char c = msa.GetChar(uSeq, uCol);\r
- fprintf(f, "%c", c);\r
- }\r
- fprintf(f, "\n");\r
- }\r
- fclose(f);\r
- }\r