source: trunk/GDE/MUSCLE/src/cluster.h

Last change on this file was 10390, checked in by aboeckma, 11 years ago

added muscle sourcles amd makefile

File size: 2.3 KB
Line 
1class DistFunc;
2
3class ClusterNode
4        {
5        friend class ClusterTree;
6public:
7        ClusterNode()
8                {
9                m_dWeight = 0.0;
10                m_dWeight2 = 0.0;
11                m_ptrLeft = 0;
12                m_ptrRight = 0;
13                m_ptrParent = 0;
14                m_uIndex = 0;
15                m_ptrPrevDisjoint = 0;
16                m_ptrNextDisjoint = 0;
17                }
18        ~ClusterNode() {}
19
20public:
21        unsigned GetIndex() const { return m_uIndex; }
22        ClusterNode *GetLeft() const { return m_ptrLeft; }
23        ClusterNode *GetRight() const { return m_ptrRight; }
24        ClusterNode *GetParent() const { return m_ptrParent; }
25        double GetWeight() const { return m_dWeight; }
26
27        const ClusterNode *GetClusterLeaf(unsigned uLeafIndex) const;
28        unsigned GetClusterSize() const;
29        double GetClusterWeight() const;
30        double GetLeftBranchWeight() const;
31        double GetRightBranchWeight() const;
32        double GetLeftWeight() const;
33        double GetRightWeight() const;
34
35        void LogMe() const;
36
37        double GetWeight2() const { return m_dWeight2; }
38        void SetWeight2(double dWeight2) { m_dWeight2 = dWeight2; }
39
40protected:
41        void SetIndex(unsigned uIndex) { m_uIndex = uIndex; }
42        void SetWeight(double dWeight) { m_dWeight = dWeight; }
43        void SetLeft(ClusterNode *ptrLeft) { m_ptrLeft = ptrLeft; }
44        void SetRight(ClusterNode *ptrRight) { m_ptrRight = ptrRight; }
45        void SetParent(ClusterNode *ptrParent) { m_ptrParent = ptrParent; }
46        void SetNextDisjoint(ClusterNode *ptrNode) { m_ptrNextDisjoint = ptrNode; }
47        void SetPrevDisjoint(ClusterNode *ptrNode) { m_ptrPrevDisjoint = ptrNode; }
48
49        ClusterNode *GetNextDisjoint() { return m_ptrNextDisjoint; }
50        ClusterNode *GetPrevDisjoint() { return m_ptrPrevDisjoint; }
51
52private:
53        double m_dWeight;
54        double m_dWeight2;
55        unsigned m_uIndex;
56        ClusterNode *m_ptrLeft;
57        ClusterNode *m_ptrRight;
58        ClusterNode *m_ptrParent;
59        ClusterNode *m_ptrNextDisjoint;
60        ClusterNode *m_ptrPrevDisjoint;
61        };
62
63class ClusterTree
64        {
65public:
66        ClusterTree();
67        virtual ~ClusterTree();
68
69        void Create(const DistFunc &DF);
70
71        ClusterNode *GetRoot() const;
72        void LogMe() const;
73
74protected:
75        void Join(ClusterNode *ptrNode1, ClusterNode *ptrNode2,
76          ClusterNode *ptrJoin);
77        void AddToDisjoints(ClusterNode *ptrNode);
78        void DeleteFromDisjoints(ClusterNode *ptrNode);
79        void Validate(unsigned uNodeCount);
80
81private:
82        ClusterNode *m_ptrDisjoints;
83        ClusterNode *m_Nodes;
84        unsigned m_uNodeCount;
85        unsigned m_uLeafCount;
86        };
Note: See TracBrowser for help on using the repository browser.