1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include "muscle.h"
#include "msa.h"
#include "tree.h"
#include "clust.h"
#include "clustsetmsa.h"
#include "distcalc.h"
static void TreeFromMSA_NJ(const MSA &msa, Tree &tree, CLUSTER Cluster,
DISTANCE Distance)
{
MSADist MD(Distance);
ClustSetMSA Set(msa, MD);
Clust C;
C.Create(Set, Cluster);
tree.FromClust(C);
}
static void TreeFromMSA_UPGMA(const MSA &msa, Tree &tree, CLUSTER Cluster,
DISTANCE Distance)
{
LINKAGE Linkage = LINKAGE_Undefined;
switch (Cluster)
{
case CLUSTER_UPGMA:
Linkage = LINKAGE_Avg;
break;
case CLUSTER_UPGMAMin:
Linkage = LINKAGE_Min;
break;
case CLUSTER_UPGMAMax:
Linkage = LINKAGE_Max;
break;
case CLUSTER_UPGMB:
Linkage = LINKAGE_Biased;
break;
default:
Quit("TreeFromMSA_UPGMA, CLUSTER_%u not supported", Cluster);
}
DistCalcMSA DC;
DC.Init(msa, Distance);
UPGMA2(DC, tree, Linkage);
}
void TreeFromMSA(const MSA &msa, Tree &tree, CLUSTER Cluster,
DISTANCE Distance, ROOT Root)
{
if (CLUSTER_NeighborJoining == Cluster)
TreeFromMSA_NJ(msa, tree, Cluster, Distance);
else
TreeFromMSA_UPGMA(msa, tree, Cluster, Distance);
FixRoot(tree, Root);
}
|