+/* me.c 2012-02-09 */
+
+/* Copyright 2007-2008 Olivier Gascuel, Rick Desper,
+ R port by Vincent Lefort, me_*() below modified by Emmanuel Paradis */
+
+/* This file is part of the R-package `ape'. */
+/* See the file ../COPYING for licensing issues. */
+
-tree *BMEaddSpecies(tree *T,node *v, double **D, double **A);
+tree *BMEaddSpecies(tree *T, node *v, double **D, double **A);
void assignBMEWeights(tree *T, double **A);
void makeBMEAveragesTable(tree *T, double **D, double **A);
//functions from me_ols.c
void assignBMEWeights(tree *T, double **A);
void makeBMEAveragesTable(tree *T, double **D, double **A);
//functions from me_ols.c
-tree *GMEaddSpecies(tree *T,node *v, double **D, double **A);
+tree *GMEaddSpecies(tree *T, node *v, double **D, double **A);
void assignOLSWeights(tree *T, double **A);
void makeOLSAveragesTable(tree *T, double **D, double **A);
//functions from bNNI.c
void bNNI(tree *T, double **avgDistArray, int *count, double **D, int numSpecies);
//functions from NNI.c
void NNI(tree *T, double **avgDistArray, int *count, double **D, int numSpecies);
void assignOLSWeights(tree *T, double **A);
void makeOLSAveragesTable(tree *T, double **D, double **A);
//functions from bNNI.c
void bNNI(tree *T, double **avgDistArray, int *count, double **D, int numSpecies);
//functions from NNI.c
void NNI(tree *T, double **avgDistArray, int *count, double **D, int numSpecies);
-void me_b(double *X, int *N, char **labels, char **treeStr, int *nni)
+void me_b(double *X, int *N, char **labels,
+ int *nni, int *spr, int *tbr,
+ int *edge1, int *edge2, double *el, char **tl)
species = (set *) malloc(sizeof(set));
species->firstNode = NULL;
species->secondNode = NULL;
species = (set *) malloc(sizeof(set));
species->firstNode = NULL;
species->secondNode = NULL;
- str = (char *)R_alloc(MAX_INPUT_SIZE, sizeof(char));
- /* added by EP */
- if (strlen(str))
- strncpy(str, "", strlen(str));
- /* end */
- D = loadMatrix (X, labels, n, species);
- A = initDoubleMatrix(2 * n - 2);
+ D = loadMatrix(X, labels, n, species);
+ A = initDoubleMatrix(2*n - 2);
for(slooper = species; NULL != slooper; slooper = slooper->secondNode)
{
addNode = copyNode(slooper->firstNode);
for(slooper = species; NULL != slooper; slooper = slooper->secondNode)
{
addNode = copyNode(slooper->firstNode);
- T = BMEaddSpecies(T,addNode,D,A);
+ T = BMEaddSpecies(T, addNode, D, A);
- if (*nni == 1)
- bNNI(T,A,&nniCount,D,n);
+ if (*nni) bNNI(T, A, &nniCount, D, n);
- NewickPrintTreeStr(T,str);
+ if (*spr) SPR(T, D, A, &nniCount);
+ if (*tbr) TBR(T, D, A);
- if (strlen (str) < MAX_INPUT_SIZE -1)
- {
- *treeStr = (char *)R_alloc(MAX_INPUT_SIZE, sizeof(char));
- /* added by EP */
- if (strlen(*treeStr))
- strncpy(*treeStr, "", strlen(*treeStr));
- /* end */
- strncpy (*treeStr, str, strlen(str));
- }
+ tree2phylo(T, edge1, edge2, el, tl, n);
-void me_o(double *X, int *N, char **labels, char **treeStr, int *nni)
+void me_o(double *X, int *N, char **labels, int *nni,
+ int *edge1, int *edge2, double *el, char **tl)
species = (set *) malloc(sizeof(set));
species->firstNode = NULL;
species->secondNode = NULL;
species = (set *) malloc(sizeof(set));
species->firstNode = NULL;
species->secondNode = NULL;
D = loadMatrix (X, labels, n, species);
A = initDoubleMatrix(2 * n - 2);
D = loadMatrix (X, labels, n, species);
A = initDoubleMatrix(2 * n - 2);
- NewickPrintTreeStr(T,str);
-
- if (strlen (str) < MAX_INPUT_SIZE -1)
- {
- *treeStr = (char *)R_alloc(MAX_INPUT_SIZE, sizeof(char));
- /* added by EP */
- if (strlen(*treeStr))
- strncpy(*treeStr, "", strlen(*treeStr));
- /* end */
- strncpy (*treeStr, str, strlen (str));
- }
+ tree2phylo(T, edge1, edge2, el, tl, n);
}
e = depthFirstTraverse(T,e);
}
for(X = S; NULL != X; X = X->secondNode)
if (X->firstNode->index2 > -1)
{
}
e = depthFirstTraverse(T,e);
}
for(X = S; NULL != X; X = X->secondNode)
if (X->firstNode->index2 > -1)
{