Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / writescorefile.cpp
diff --git a/website/archive/binaries/mac/src/muscle/writescorefile.cpp b/website/archive/binaries/mac/src/muscle/writescorefile.cpp
new file mode 100644 (file)
index 0000000..17f7a81
--- /dev/null
@@ -0,0 +1,69 @@
+#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