/usr/include/clustalo/clustal/muscle_tree.h is in libclustalo-dev 1.2.1-1.
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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | /* This a mix of tree functions and data-structures from
* Bob Edgar's Muscle (version 3.7) ported to pure C.
*
* Used files: phy.cpp, tree.h, phytofile.cpp and phyfromclust.cpp
*
* Muscle's code is public domain and so is this code here.
* From http://www.drive5.com/muscle/license.htm:
* """
* MUSCLE is public domain software
*
* The MUSCLE software, including object and source code and
* documentation, is hereby donated to the public domain.
*
* Disclaimer of warranty
* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* """
*
*/
/*
* RCS $Id: muscle_tree.h 230 2011-04-09 15:37:50Z andreas $
*/
#ifndef CLUSTALO_MUSCLE_CLUSTALO_TREE_H
#define CLUSTALO_MUSCLE_CLUSTALO_TREE_H
#include <stdio.h>
#include "util.h"
#ifndef uint
/* limit use of uint (see coding_style_guideline.txt) */
typedef unsigned int uint;
#endif
static const uint NULL_NEIGHBOR = UINT_MAX;
/**
* @brief guide-tree structure
*
* @note We kept the original variable names here, to make it easy to
* search through Muscle's source code.
* From phy.cpp:
* Node has 0 to 3 neighbors:
* 0 neighbors: singleton root
* 1 neighbor: leaf, neighbor is parent
* 2 neigbors: non-singleton root
* 3 neighbors: internal node (other than root)
*
* Minimal rooted tree is single node.
* Minimal unrooted tree is single edge.
* Leaf node always has nulls in neighbors 2 and 3, neighbor 1 is parent.
* When tree is rooted, neighbor 1=parent, 2=left, 3=right.
*
*/
typedef struct {
uint m_uNodeCount;/**< number of nodes */
uint m_uCacheCount;/**< reserved memory */
uint *m_uNeighbor1;/**< parent node */
uint *m_uNeighbor2;/**< left node */
uint *m_uNeighbor3;/**< right node */
/* do we have edge lengths info stored (m_dEdgeLength[123]) */
bool *m_bHasEdgeLength1;
bool *m_bHasEdgeLength2;
bool *m_bHasEdgeLength3;
double *m_dEdgeLength1;
double *m_dEdgeLength2;
double *m_dEdgeLength3;
#if USE_HEIGHT
/* unused in our version of the code. we might need it at some
* stage so keep it in here, but disable via USE_HEIGHT throughout
* the code */
double *m_dHeight;
bool *m_bHasHeight;
#endif
/**
* leaf labels.
* index range: 0 -- (m_uNodeCount+1)/2
*/
char **m_ptrName;
/**
* node id.
* index range: 0 -- m_uNodeCount
*/
uint *m_Ids;
bool m_bRooted; /**< tree is rooted */
uint m_uRootNodeIndex;
} tree_t;
extern 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);
extern void
MuscleTreeToFile(FILE *fp, tree_t *tree);
extern int
MuscleTreeFromFile(tree_t *tree, char *ftree);
extern void
FreeMuscleTree(tree_t *tree);
extern void
LogTree(tree_t *tree, FILE *fp);
extern bool
IsRooted(tree_t *tree);
extern uint
GetNodeCount(tree_t *tree);
extern uint
GetLeafCount(tree_t *tree);
extern uint
FirstDepthFirstNode(tree_t *tree);
extern uint
NextDepthFirstNode(uint nodeindex, tree_t *tree);
extern bool
IsLeaf(uint nodeindex, tree_t *tree);
extern void
SetLeafId(tree_t *tree, uint uNodeIndex, uint uId);
extern uint
GetLeafId(uint nodeindex, tree_t *tree);
extern char *
GetLeafName(unsigned uNodeIndex, tree_t *tree);
extern uint
GetLeft(uint nodeindex, tree_t *tree);
extern uint
GetRight(uint nodeindex, tree_t *tree);
extern uint
GetRootNodeIndex(tree_t *tree);
extern bool
IsRoot(uint uNodeIndex, tree_t *tree);
extern uint
GetParent(unsigned uNodeIndex, tree_t *tree);
extern double
GetEdgeLength(uint uNodeIndex1, uint uNodeIndex2, tree_t *tree);
extern uint
LeafIndexToNodeIndex(uint uLeafIndex, tree_t *prTree);
extern void
AppendTree(tree_t *prDstTree,
uint uDstTreeNodeIndex, tree_t *prSrcTree);
extern void
TreeValidate(tree_t *tree);
#endif
|