📄 phyfromclust.cpp
字号:
#include "muscle.h"
#include "tree.h"
#include "clust.h"
void Tree::InitCache(unsigned uCacheCount)
{
m_uCacheCount = uCacheCount;
m_uNeighbor1 = new unsigned[m_uCacheCount];
m_uNeighbor2 = new unsigned[m_uCacheCount];
m_uNeighbor3 = new unsigned[m_uCacheCount];
m_Ids = new unsigned[m_uCacheCount];
m_dEdgeLength1 = new double[m_uCacheCount];
m_dEdgeLength2 = new double[m_uCacheCount];
m_dEdgeLength3 = new double[m_uCacheCount];
m_dHeight = new double[m_uCacheCount];
m_bHasEdgeLength1 = new bool[m_uCacheCount];
m_bHasEdgeLength2 = new bool[m_uCacheCount];
m_bHasEdgeLength3 = new bool[m_uCacheCount];
m_bHasHeight = new bool[m_uCacheCount];
m_ptrName = new char *[m_uCacheCount];
for (unsigned uNodeIndex = 0; uNodeIndex < m_uNodeCount; ++uNodeIndex)
{
m_uNeighbor1[uNodeIndex] = NULL_NEIGHBOR;
m_uNeighbor2[uNodeIndex] = NULL_NEIGHBOR;
m_uNeighbor3[uNodeIndex] = NULL_NEIGHBOR;
m_bHasEdgeLength1[uNodeIndex] = false;
m_bHasEdgeLength2[uNodeIndex] = false;
m_bHasEdgeLength3[uNodeIndex] = false;
m_bHasHeight[uNodeIndex] = false;
m_dEdgeLength1[uNodeIndex] = dInsane;
m_dEdgeLength2[uNodeIndex] = dInsane;
m_dEdgeLength3[uNodeIndex] = dInsane;
m_dHeight[uNodeIndex] = dInsane;
m_ptrName[uNodeIndex] = 0;
m_Ids[uNodeIndex] = uInsane;
}
}
void Tree::FromClust(Clust &C)
{
Clear();
m_uNodeCount = C.GetNodeCount();
InitCache(m_uNodeCount);
// Cluster is always rooted. An unrooted cluster
// is represented by a pseudo-root, which we fix later.
m_bRooted = true;
const unsigned uRoot = C.GetRootNodeIndex();
m_uRootNodeIndex = uRoot;
m_uNeighbor1[uRoot] = NULL_NEIGHBOR;
m_bHasEdgeLength1[uRoot] = false;
for (unsigned uNodeIndex = 0; uNodeIndex < m_uNodeCount; ++uNodeIndex)
{
if (C.IsLeaf(uNodeIndex))
{
const char *ptrName = C.GetNodeName(uNodeIndex);
m_ptrName[uNodeIndex] = strsave(ptrName);
m_Ids[uNodeIndex] = C.GetNodeId(uNodeIndex);
continue;
}
const unsigned uLeft = C.GetLeftIndex(uNodeIndex);
const unsigned uRight = C.GetRightIndex(uNodeIndex);
const double dLeftLength = C.GetLength(uLeft);
const double dRightLength = C.GetLength(uRight);
m_uNeighbor2[uNodeIndex] = uLeft;
m_uNeighbor3[uNodeIndex] = uRight;
m_dEdgeLength1[uLeft] = dLeftLength;
m_dEdgeLength1[uRight] = dRightLength;
m_uNeighbor1[uLeft] = uNodeIndex;
m_uNeighbor1[uRight] = uNodeIndex;
m_bHasEdgeLength1[uLeft] = true;
m_bHasEdgeLength1[uRight] = true;
m_dEdgeLength2[uNodeIndex] = dLeftLength;
m_dEdgeLength3[uNodeIndex] = dRightLength;
m_bHasEdgeLength2[uNodeIndex] = true;
m_bHasEdgeLength3[uNodeIndex] = true;
}
Validate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -