/usr/include/libMUSCLE-3.7/libMUSCLE/clust.h is in libmuscle-3.7-dev 3.7+4565-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | #ifndef Clust_h
#define Clust_h
namespace muscle {
class Clust;
class ClustNode;
class ClustSet;
class Phylip;
class SortedNode;
const unsigned RB_NIL = ((unsigned) 0xfff0);
class ClustNode
{
public:
ClustNode()
{
m_uIndex = uInsane;
m_uSize = uInsane;
m_dLength = (float) dInsane;
m_ptrLeft = 0;
m_ptrRight = 0;
m_ptrParent = 0;
m_ptrNextCluster = 0;
m_ptrPrevCluster = 0;
m_uLeafIndexes = 0;
}
~ClustNode()
{
delete[] m_uLeafIndexes;
}
unsigned m_uIndex;
unsigned m_uSize;
float m_dLength;
ClustNode *m_ptrLeft;
ClustNode *m_ptrRight;
ClustNode *m_ptrParent;
ClustNode *m_ptrNextCluster;
ClustNode *m_ptrPrevCluster;
unsigned *m_uLeafIndexes;
};
class Clust
{
public:
Clust();
virtual ~Clust();
void Create(ClustSet &Set, CLUSTER Method);
unsigned GetLeafCount() const;
unsigned GetClusterCount() const;
unsigned GetClusterSize(unsigned uNodeIndex) const;
unsigned GetLeaf(unsigned uClusterIndex, unsigned uLeafIndex) const;
unsigned GetNodeCount() const { return 2*m_uLeafCount - 1; }
const ClustNode &GetRoot() const { return m_Nodes[GetRootNodeIndex()]; }
unsigned GetRootNodeIndex() const { return m_uNodeCount - 1; }
const ClustNode &GetNode(unsigned uNodeIndex) const;
bool IsLeaf(unsigned uNodeIndex) const;
unsigned GetLeftIndex(unsigned uNodeIndex) const;
unsigned GetRightIndex(unsigned uNodeIndex) const;
float GetLength(unsigned uNodeIndex) const;
float GetHeight(unsigned uNodeIndex) const;
const char *GetNodeName(unsigned uNodeIndex) const;
unsigned GetNodeId(unsigned uNodeIndex) const;
JOIN GetJoinStyle() const { return m_JoinStyle; }
LINKAGE GetCentroidStyle() const { return m_CentroidStyle; }
void SetDist(unsigned uIndex1, unsigned uIndex2, float dDist);
float GetDist(unsigned uIndex1, unsigned uIndex2) const;
void ToPhylip(Phylip &tree);
void LogMe() const;
//private:
void SetLeafCount(unsigned uLeafCount);
void CreateCluster();
void JoinNodes(unsigned uLeftNodeIndex, unsigned uRightNodeIndex,
float dLeftLength, float dRightLength, unsigned uNewNodeIndex);
void ChooseJoin(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
void ChooseJoinNeighborJoining(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
void ChooseJoinNearestNeighbor(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
float ComputeDist(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistAverageLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistMinLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistMaxLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistNeighborJoining(unsigned uNewNewIndex, unsigned uNodeIndex);
float ComputeDistMAFFT(unsigned uNewNewIndex, unsigned uNodeIndex);
float Calc_r(unsigned uNodeIndex) const;
unsigned VectorIndex(unsigned uIndex1, unsigned uIndex2) const;
unsigned GetFirstCluster() const;
unsigned GetNextCluster(unsigned uNodeIndex) const;
float ComputeMetric(unsigned uIndex1, unsigned uIndex2) const;
float ComputeMetricNearestNeighbor(unsigned i, unsigned j) const;
float ComputeMetricNeighborJoining(unsigned i, unsigned j) const;
void InitMetric(unsigned uMaxNodeIndex);
void InsertMetric(unsigned uIndex1, unsigned uIndex2, float dMetric);
float GetMinMetric(unsigned *ptruIndex1, unsigned *ptruIndex2) const;
float GetMinMetricBruteForce(unsigned *ptruIndex1, unsigned *ptruIndex2) const;
void DeleteMetric(unsigned uIndex);
void DeleteMetric(unsigned uIndex1, unsigned uIndex2);
void ListMetric() const;
void DeleteFromClusterList(unsigned uNodeIndex);
void AddToClusterList(unsigned uNodeIndex);
void RBDelete(unsigned RBNode);
unsigned RBInsert(unsigned i, unsigned j, float fMetric);
unsigned RBNext(unsigned RBNode) const;
unsigned RBPrev(unsigned RBNode) const;
unsigned RBMin(unsigned RBNode) const;
unsigned RBMax(unsigned RBNode) const;
void ValidateRB(const char szMsg[] = 0) const;
void ValidateRBNode(unsigned Node, const char szMsg[]) const;
//private:
JOIN m_JoinStyle;
LINKAGE m_CentroidStyle;
ClustNode *m_Nodes;
unsigned *m_ClusterIndexToNodeIndex;
unsigned *m_NodeIndexToClusterIndex;
unsigned m_uLeafCount;
unsigned m_uNodeCount;
unsigned m_uClusterCount;
unsigned m_uTriangularMatrixSize;
float *m_dDist;
ClustSet *m_ptrSet;
ClustNode *m_ptrClusterList;
};
} // namespace muscle
#endif // Clust_h
|