+++ /dev/null
-#include "muscle.h"\r
-#include "seqvect.h"\r
-#include "distfunc.h"\r
-#include "clust.h"\r
-#include "clustsetdf.h"\r
-#include "tree.h"\r
-#include "clust.h"\r
-#include "distcalc.h"\r
-#include <math.h>\r
-\r
-static void TreeFromSeqVect_NJ(const DistFunc &DF, CLUSTER Cluster, Tree &tree)\r
- {\r
- ClustSetDF CSD(DF);\r
-\r
- Clust C;\r
- C.Create(CSD, Cluster);\r
-\r
- tree.FromClust(C);\r
- }\r
-\r
-static void TreeFromSeqVect_UPGMA(const DistFunc &DF, CLUSTER Cluster, Tree &tree)\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("TreeFromSeqVect_UPGMA, CLUSTER_%u not supported", Cluster);\r
- }\r
- \r
- DistCalcDF DC;\r
- DC.Init(DF);\r
- UPGMA2(DC, tree, Linkage);\r
- }\r
-\r
-static void SaveDF(const SeqVect &v, DistFunc &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 = v.GetSeqCount();\r
- fprintf(f, "%u\n", n);\r
- for (unsigned i = 0; i < n; ++i)\r
- {\r
- fprintf(f, "%10.10s ", v.GetSeqName(i));\r
- for (unsigned j = 0; j < i; ++j)\r
- fprintf(f, " %9g", d.GetDist(i, j));\r
- fprintf(f, "\n");\r
- }\r
- fclose(f);\r
- }\r
-\r
-void TreeFromSeqVect(const SeqVect &v, Tree &tree, CLUSTER Cluster,\r
- DISTANCE Distance, ROOT Root, const char *SaveFileName)\r
- {\r
- DistFunc DF;\r
- DistUnaligned(v, Distance, DF);\r
- if (SaveFileName != 0)\r
- SaveDF(v, DF, SaveFileName);\r
- if (CLUSTER_NeighborJoining == Cluster)\r
- TreeFromSeqVect_NJ(DF, Cluster, tree);\r
- else\r
- TreeFromSeqVect_UPGMA(DF, Cluster, tree);\r
- FixRoot(tree, Root);\r
- }\r