]> git.donarmstrong.com Git - ape.git/blob - src/me.h
current 2.1 release
[ape.git] / src / me.h
1 //#include <stdio.h>
2 //#include <stdlib.h>
3 //#include <math.h>
4 //#include <string.h>
5 //#include <sys/types.h>
6 //#include <sys/stat.h>
7 //#include "main.h"
8 //#include "graph.h"
9 #include <R.h>
10
11 #ifndef NONE
12 #define NONE 0
13 #endif
14 #ifndef UP
15 #define UP 1
16 #endif
17 #ifndef DOWN
18 #define DOWN 2
19 #endif
20 #ifndef LEFT
21 #define LEFT 3
22 #endif
23 #ifndef RIGHT
24 #define RIGHT 4
25 #endif
26 #ifndef SKEW
27 #define SKEW 5
28 #endif
29 #ifndef MAX_LABEL_LENGTH
30 #define MAX_LABEL_LENGTH 30
31 #endif
32 #ifndef NODE_LABEL_LENGTH
33 #define NODE_LABEL_LENGTH 30
34 #endif
35 #ifndef EDGE_LABEL_LENGTH
36 #define EDGE_LABEL_LENGTH 30
37 #endif
38 #ifndef MAX_DIGITS
39 #define MAX_DIGITS 20
40 #endif
41 #ifndef INPUT_SIZE
42 #define INPUT_SIZE 100
43 #endif
44 #ifndef MAX_INPUT_SIZE
45 #define MAX_INPUT_SIZE 100000
46 #endif
47 #ifndef EPSILON
48 #define EPSILON 1.E-06
49 #endif
50 #ifndef ReadOpenParenthesis
51 #define ReadOpenParenthesis 0
52 #endif
53 #ifndef ReadSubTree
54 #define ReadSubTree 1
55 #endif
56 #ifndef ReadLabel
57 #define ReadLabel 2
58 #endif
59 #ifndef ReadWeight
60 #define ReadWeight 3
61 #endif
62 #ifndef AddEdge
63 #define AddEdge 4
64 #endif
65
66 #define XINDEX(i, j) n*(i - 1) - i*(i - 1)/2 + j - i - 1
67
68 typedef struct word
69 {
70   char name[MAX_LABEL_LENGTH];
71   struct word *suiv;
72 }WORD;
73
74 typedef struct pointers
75 {
76   WORD *head;
77   WORD *tail;
78 }POINTERS;
79
80 typedef struct node {
81   char label[NODE_LABEL_LENGTH];
82   struct edge *parentEdge;
83   struct edge *leftEdge;
84   struct edge *middleEdge;
85   struct edge *rightEdge;
86   int index;
87   int index2;
88 } node;
89
90 typedef struct edge {
91   char label[EDGE_LABEL_LENGTH];
92   struct node *tail; /*for edge (u,v), u is the tail, v is the head*/
93   struct node *head;
94   int bottomsize; /*number of nodes below edge */
95   int topsize;    /*number of nodes above edge */
96   double distance;
97   double totalweight;
98 } edge;
99
100 typedef struct tree {
101   char name[MAX_LABEL_LENGTH];
102   struct node *root;
103   int size;
104   double weight;
105 } tree;
106
107 typedef struct set
108 {
109   struct node *firstNode;
110   struct set *secondNode;
111 } set;
112
113 void me_b(double *X, int *N, char **labels, char **treeStr, int *nni);
114 void me_o(double *X, int *N, char **labels, char **treeStr, int *nni);
115 int whiteSpace(char c);
116 double **initDoubleMatrix(int d);
117 double **loadMatrix (double *X, char **labels, int n, set *S);
118 set *addToSet(node *v, set *X);
119 node *makeNewNode(char *label, int i);
120 node *makeNode(char *label, edge *parentEdge, int index);
121 node *copyNode(node *v);
122 edge *siblingEdge(edge *e);
123 edge *makeEdge(char *label, node *tail, node *head, double weight);
124 tree *newTree();
125 void updateSizes(edge *e, int direction);
126 tree *detrifurcate(tree *T);
127 void compareSets(tree *T, set *S);
128 void partitionSizes(tree *T);
129 edge *depthFirstTraverse(tree *T, edge *e);
130 edge *findBottomLeft(edge *e);
131 edge *moveRight(edge *e);
132 edge *topFirstTraverse(tree *T, edge *e);
133 edge *moveUpRight(edge *e);
134 void freeMatrix(double **D, int size);
135 void freeSet(set *S);
136 void freeTree(tree *T);
137 void freeSubTree(edge *e);
138 int leaf(node *v);
139 tree *readNewickString (char *str, int numLeaves);
140 node *decodeNewickSubtree(char *treeString, tree *T, int *uCount);
141 void NewickPrintSubtree(tree *T, edge *e, char *str);
142 void NewickPrintBinaryTree(tree *T, char *str);
143 void NewickPrintTrinaryTree(tree *T, char *str);
144 void NewickPrintTreeStr(tree *T, char *str);
145