Clustal Omega  1.2.4
muscle_tree.h
Go to the documentation of this file.
1 /* This a mix of tree functions and data-structures from
2  * Bob Edgar's Muscle (version 3.7) ported to pure C.
3  *
4  * Used files: phy.cpp, tree.h, phytofile.cpp and phyfromclust.cpp
5  *
6  * Muscle's code is public domain and so is this code here.
7 
8  * From http://www.drive5.com/muscle/license.htm:
9  * """
10  * MUSCLE is public domain software
11  *
12  * The MUSCLE software, including object and source code and
13  * documentation, is hereby donated to the public domain.
14  *
15  * Disclaimer of warranty
16  * THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
17  * EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * """
20  *
21  */
22 
23 /*
24  * RCS $Id: muscle_tree.h 230 2011-04-09 15:37:50Z andreas $
25  */
26 
27 
28 #ifndef CLUSTALO_MUSCLE_CLUSTALO_TREE_H
29 #define CLUSTALO_MUSCLE_CLUSTALO_TREE_H
30 
31 #include <stdio.h>
32 #include "util.h"
33 
34 #ifndef uint
35 /* limit use of uint (see coding_style_guideline.txt) */
36 typedef unsigned int uint;
37 #endif
38 
39 static const uint NULL_NEIGHBOR = UINT_MAX;
40 
59 typedef struct {
67  /* do we have edge lengths info stored (m_dEdgeLength[123]) */
71 
72  double *m_dEdgeLength1;
73  double *m_dEdgeLength2;
74  double *m_dEdgeLength3;
75 
76 #if USE_HEIGHT
77  /* unused in our version of the code. we might need it at some
78  * stage so keep it in here, but disable via USE_HEIGHT throughout
79  * the code */
80  double *m_dHeight;
81  bool *m_bHasHeight;
82 #endif
83 
88  char **m_ptrName;
89 
95 
96  bool m_bRooted;
98 } tree_t;
99 
100 
101 extern void
102 MuscleTreeCreate(tree_t *tree, uint uLeafCount, uint uRoot, const uint *Left,
103  const uint *Right, const float *LeftLength, const float* RightLength,
104  const uint *LeafIds, char **LeafNames);
105 
106 extern void
107 MuscleTreeToFile(FILE *fp, tree_t *tree);
108 
109 extern int
110 MuscleTreeFromFile(tree_t *tree, char *ftree);
111 
112 extern void
113 FreeMuscleTree(tree_t *tree);
114 
115 extern void
116 LogTree(tree_t *tree, FILE *fp);
117 
118 extern bool
119 IsRooted(tree_t *tree);
120 
121 extern uint
122 GetNodeCount(tree_t *tree);
123 
124 extern uint
125 GetLeafCount(tree_t *tree);
126 
127 extern uint
129 
130 extern uint
131 NextDepthFirstNode(uint nodeindex, tree_t *tree);
132 
133 extern bool
134 IsLeaf(uint nodeindex, tree_t *tree);
135 
136 extern void
137 SetLeafId(tree_t *tree, uint uNodeIndex, uint uId);
138 
139 extern uint
140 GetLeafId(uint nodeindex, tree_t *tree);
141 
142 extern char *
143 GetLeafName(unsigned uNodeIndex, tree_t *tree);
144 
145 extern uint
146 GetLeft(uint nodeindex, tree_t *tree);
147 
148 extern uint
149 GetRight(uint nodeindex, tree_t *tree);
150 
151 extern uint
152 GetRootNodeIndex(tree_t *tree);
153 
154 extern bool
155 IsRoot(uint uNodeIndex, tree_t *tree);
156 
157 extern uint
158 GetParent(unsigned uNodeIndex, tree_t *tree);
159 
160 extern double
161 GetEdgeLength(uint uNodeIndex1, uint uNodeIndex2, tree_t *tree);
162 
163 extern uint
164 LeafIndexToNodeIndex(uint uLeafIndex, tree_t *prTree);
165 
166 extern void
167 AppendTree(tree_t *prDstTree,
168  uint uDstTreeNodeIndex, tree_t *prSrcTree);
169 
170 extern void
171 TreeValidate(tree_t *tree);
172 
173 #endif
void LogTree(tree_t *tree, FILE *fp)
Definition: muscle_tree.c:1559
void TreeValidate(tree_t *tree)
Definition: muscle_tree.c:719
uint * m_uNeighbor2
Definition: muscle_tree.h:64
uint GetLeafCount(tree_t *tree)
Definition: muscle_tree.c:1642
void SetLeafId(tree_t *tree, uint uNodeIndex, uint uId)
Definition: muscle_tree.c:1694
uint GetParent(unsigned uNodeIndex, tree_t *tree)
Definition: muscle_tree.c:506
uint GetLeafId(uint nodeindex, tree_t *tree)
Definition: muscle_tree.c:156
double * m_dEdgeLength2
Definition: muscle_tree.h:73
bool IsLeaf(uint nodeindex, tree_t *tree)
check if given node is a leaf node
Definition: muscle_tree.c:460
double GetEdgeLength(uint uNodeIndex1, uint uNodeIndex2, tree_t *tree)
Definition: muscle_tree.c:555
uint * m_uNeighbor1
Definition: muscle_tree.h:63
uint m_uRootNodeIndex
Definition: muscle_tree.h:97
uint GetLeft(uint nodeindex, tree_t *tree)
Definition: muscle_tree.c:119
bool m_bRooted
Definition: muscle_tree.h:96
guide-tree structure
Definition: muscle_tree.h:59
uint GetRight(uint nodeindex, tree_t *tree)
Definition: muscle_tree.c:138
void AppendTree(tree_t *prDstTree, uint uDstTreeNodeIndex, tree_t *prSrcTree)
Append a (source) tree to a (dest) tree to a given node which will be replaced. All other nodes in th...
Definition: muscle_tree.c:1778
bool * m_bHasEdgeLength1
Definition: muscle_tree.h:68
bool * m_bHasEdgeLength2
Definition: muscle_tree.h:69
void MuscleTreeToFile(FILE *fp, tree_t *tree)
write a muscle tree to a file in newick format (distances and all names)
Definition: muscle_tree.c:432
double * m_dEdgeLength3
Definition: muscle_tree.h:74
uint m_uCacheCount
Definition: muscle_tree.h:61
uint GetRootNodeIndex(tree_t *tree)
Definition: muscle_tree.c:1707
uint * m_uNeighbor3
Definition: muscle_tree.h:65
bool * m_bHasEdgeLength3
Definition: muscle_tree.h:70
uint GetNodeCount(tree_t *tree)
Definition: muscle_tree.c:1656
char * GetLeafName(unsigned uNodeIndex, tree_t *tree)
Definition: muscle_tree.c:173
uint FirstDepthFirstNode(tree_t *tree)
returns first leaf node for a depth-first traversal of tree
Definition: muscle_tree.c:196
bool IsRooted(tree_t *tree)
check if tree is a rooted tree
Definition: muscle_tree.c:267
int MuscleTreeFromFile(tree_t *tree, char *ftree)
Definition: muscle_tree.c:874
uint LeafIndexToNodeIndex(uint uLeafIndex, tree_t *prTree)
Definition: muscle_tree.c:1722
uint NextDepthFirstNode(uint nodeindex, tree_t *tree)
returns next leaf node index for depth-first traversal of tree
Definition: muscle_tree.c:226
char ** m_ptrName
Definition: muscle_tree.h:88
void MuscleTreeCreate(tree_t *tree, uint uLeafCount, uint uRoot, const uint *Left, const uint *Right, const float *LeftLength, const float *RightLength, const uint *LeafIds, char **LeafNames)
create a muscle tree
Definition: muscle_tree.c:367
void FreeMuscleTree(tree_t *tree)
Definition: muscle_tree.c:279
uint m_uNodeCount
Definition: muscle_tree.h:60
double * m_dEdgeLength1
Definition: muscle_tree.h:72
uint * m_Ids
Definition: muscle_tree.h:94
bool IsRoot(uint uNodeIndex, tree_t *tree)
Definition: muscle_tree.c:475
unsigned int uint
Definition: muscle_tree.h:36