+++ /dev/null
-#include "muscle.h"\r
-#include "msa.h"\r
-#include "tree.h"\r
-#include "clust.h"\r
-#include "clustsetmsa.h"\r
-#include "distcalc.h"\r
-\r
-static void SaveMSADist(const MSA &msa, MSADist &d, const char *FileName)\r
- {\r
- FILE *f = fopen(FileName, "w");\r
- if (f == 0)\r
- Quit("Cannot create %s", FileName);\r
-\r
- unsigned n = msa.GetSeqCount();\r
- for (unsigned i = 0; i < n; ++i)\r
- {\r
- fprintf(f, "%10.10s ", msa.GetSeqName(i));\r
- for (unsigned j = 0; j < n; ++j)\r
- fprintf(f, " %9g", d.ComputeDist(msa, i, j));\r
- fprintf(f, "\n");\r
- }\r
- fclose(f);\r
- }\r
-\r
-static void TreeFromMSA_NJ(const MSA &msa, Tree &tree, CLUSTER Cluster,\r
- DISTANCE Distance, const char *SaveFileName)\r
- {\r
- MSADist MD(Distance);\r
- ClustSetMSA Set(msa, MD);\r
-\r
- if (SaveFileName != 0)\r
- SaveMSADist(msa, MD, SaveFileName);\r
-\r
- Clust C;\r
- C.Create(Set, Cluster);\r
-\r
- tree.FromClust(C);\r
- }\r
-\r
-static void SaveDC(const DistCalcMSA &DC, const char *FileName)\r
- {\r
- FILE *f = fopen(FileName, "w");\r
- if (f == 0)\r
- Quit("Cannot create %s", FileName);\r
-\r
- unsigned n = DC.GetCount();\r
- fprintf(f, "%u\n", n);\r
- float *Dist = new float[n];\r
- for (unsigned i = 0; i < n; ++i)\r
- {\r
- fprintf(f, "%10.10s ", DC.GetName(i));\r
- DC.CalcDistRange(i, Dist);\r
- for (unsigned j = 0; j < i; ++j)\r
- fprintf(f, " %9g", Dist[j]);\r
- fprintf(f, "\n");\r
- }\r
- fclose(f);\r
- }\r
-\r
-static void TreeFromMSA_UPGMA(const MSA &msa, Tree &tree, CLUSTER Cluster,\r
- DISTANCE Distance, const char *SaveFileName)\r
- {\r
- LINKAGE Linkage = LINKAGE_Undefined;\r
- switch (Cluster)\r
- {\r
- case CLUSTER_UPGMA:\r
- Linkage = LINKAGE_Avg;\r
- break;\r
- case CLUSTER_UPGMAMin:\r
- Linkage = LINKAGE_Min;\r
- break;\r
- case CLUSTER_UPGMAMax:\r
- Linkage = LINKAGE_Max;\r
- break;\r
- case CLUSTER_UPGMB:\r
- Linkage = LINKAGE_Biased;\r
- break;\r
- default:\r
- Quit("TreeFromMSA_UPGMA, CLUSTER_%u not supported", Cluster);\r
- }\r
- \r
- DistCalcMSA DC;\r
- DC.Init(msa, Distance);\r
- if (SaveFileName != 0)\r
- SaveDC(DC, SaveFileName);\r
- UPGMA2(DC, tree, Linkage);\r
- }\r
-\r
-void TreeFromMSA(const MSA &msa, Tree &tree, CLUSTER Cluster,\r
- DISTANCE Distance, ROOT Root, const char *SaveFileName)\r
- {\r
- if (CLUSTER_NeighborJoining == Cluster)\r
- TreeFromMSA_NJ(msa, tree, Cluster, Distance, SaveFileName);\r
- else\r
- TreeFromMSA_UPGMA(msa, tree, Cluster, Distance, SaveFileName);\r
- FixRoot(tree, Root);\r
- }\r