This file is indexed.

/usr/include/clustalo/clustal/muscle_tree.h is in libclustalo-dev 1.2.1-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
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