source: trunk/GDE/PHYML20130708/phyml/src/utilities.h

Last change on this file was 10307, checked in by aboeckma, 11 years ago

added most recent version of phyml

File size: 68.0 KB
Line 
1/*
2
3PhyML:  a program that  computes maximum likelihood phylogenies from
4DNA or AA homologous sequences.
5
6Copyright (C) Stephane Guindon. Oct 2003 onward.
7
8All parts of the source except where indicated are distributed under
9the GNU public licence. See http://www.opensource.org for details.
10
11*/
12
13#include <config.h>
14
15#ifndef UTILITIES_H
16#define UTILITIES_H
17
18
19#include <stdio.h>
20#include <stdarg.h>
21#include <stdlib.h>
22#include <math.h>
23#include <ctype.h>
24#include <string.h>
25#include <time.h>
26#include <limits.h>
27#include <errno.h>
28#include <float.h>
29#include <stdbool.h>
30
31extern int n_sec1;
32extern int n_sec2;
33
34#define For(i,n)                     for(i=0; i<n; i++)
35#define Fors(i,n,s)                  for(i=0; i<n; i+=s)
36#define PointGamma(prob,alpha,beta)  PointChi2(prob,2.0*(alpha))/(2.0*(beta))
37#define SHFT2(a,b,c)                 (a)=(b);(b)=(c);
38#define SHFT3(a,b,c,d)               (a)=(b);(b)=(c);(c)=(d);
39#define MAX(a,b)                     ((a)>(b)?(a):(b))
40#define MIN(a,b)                     ((a)<(b)?(a):(b))
41#define SIGN(a,b)                    ((b) > 0.0 ? fabs(a) : -fabs(a))
42#define SHFT(a,b,c,d)                (a)=(b);(b)=(c);(c)=(d);
43
44#define READ  0
45#define WRITE 1
46
47#ifndef isnan
48# define isnan(x)                                                \
49  (sizeof (x) == sizeof (long double) ? isnan_ld (x)             \
50   : sizeof (x) == sizeof (double) ? isnan_d (x)                 \
51   : isnan_f (x))
52static inline int isnan_f  (float       x) { return x != x; }
53static inline int isnan_d  (double      x) { return x != x; }
54static inline int isnan_ld (long double x) { return x != x; }
55#endif
56
57#ifndef isinf
58# define isinf(x)                                                \
59  (sizeof (x) == sizeof (long double) ? isinf_ld (x)             \
60   : sizeof (x) == sizeof (double) ? isinf_d (x)                 \
61   : isinf_f (x))
62static inline int isinf_f  (float       x) { return isnan (x - x); }
63static inline int isinf_d  (double      x) { return isnan (x - x); }
64static inline int isinf_ld (long double x) { return isnan (x - x); }
65#endif
66     
67
68#define MCMC_MOVE_RANDWALK_UNIFORM       0
69#define MCMC_MOVE_LOG_RANDWALK_UNIFORM   1
70#define MCMC_MOVE_RANDWALK_NORMAL        2
71#define MCMC_MOVE_LOG_RANDWALK_NORMAL    3
72#define MCMC_MOVE_SCALE_THORNE           4         
73#define MCMC_MOVE_SCALE_GAMMA            5         
74
75#define N_MAX_MOVES     50
76
77#define N_MAX_NEX_COM   20
78#define T_MAX_NEX_COM   100
79#define N_MAX_NEX_PARM  50
80#define T_MAX_TOKEN     200
81
82#define N_MAX_MIXT_CLASSES 1000
83
84#define NEXUS_COM    0
85#define NEXUS_PARM   1
86#define NEXUS_EQUAL  2
87#define NEXUS_VALUE  3
88#define NEXUS_SPACE  4
89
90#define  NNI_MOVE            0
91#define  SPR_MOVE            1
92#define  BEST_OF_NNI_AND_SPR 2
93
94#define  M_1_SQRT_2_PI   0.398942280401432677939946059934
95#define  M_SQRT_32       5.656854249492380195206754896838
96#define  PI              3.14159265358979311600
97#define  SQRT2PI         2.50662827463100024161
98#define  LOG2PI          1.83787706640934533908
99#define  LOG2            0.69314718055994528623
100#define  LOG_SQRT_2_PI   0.918938533204672741780329736406
101
102#define  NORMAL 1
103#define  EXACT  2
104
105#define  PHYLIP 0
106#define  NEXUS  1
107
108#define  YES 1
109#define  NO  0
110
111#define  TRUE  1
112#define  FALSE 0
113
114#define  ON  1
115#define  OFF 0
116
117#define  NT 0 /*! nucleotides */
118#define  AA 1 /*! amino acids */
119#define  GENERIC 2 /*! custom alphabet */
120#define  UNDEFINED -1
121
122#define  ACGT 0 /*! A,G,G,T encoding */
123#define  RY   1 /*! R,Y     encoding */
124
125#define INTERFACE_DATA_TYPE      0
126#define INTERFACE_MULTIGENE      1
127#define INTERFACE_MODEL          2
128#define INTERFACE_TOPO_SEARCH    3
129#define INTERFACE_BRANCH_SUPPORT 4
130
131#ifndef INFINITY
132#define INFINITY HUGE
133#endif
134
135#define  N_MAX_OPTIONS        100
136
137
138#define  T_MAX_FILE           500
139#define  T_MAX_LINE       2000000
140#define  T_MAX_NAME           100
141#define  T_MAX_ID              20
142#define  T_MAX_SEQ        2000000
143#define  T_MAX_OPTION         100
144#define  T_MAX_LABEL           10
145#define  T_MAX_STATE            5
146#define  N_MAX_LABEL           10
147#define  BLOCK_LABELS         100
148
149#define  NODE_DEG_MAX         500
150#define  BRENT_IT_MAX         500
151#define  BRENT_CGOLD    0.3819660
152#define  BRENT_ZEPS        1.e-10
153#define  MNBRAK_GOLD     1.618034
154#define  MNBRAK_GLIMIT      100.0
155#define  MNBRAK_TINY       1.e-20
156#define  ALPHA_MIN           0.04
157#define  ALPHA_MAX            100
158#define  BL_START          1.e-04
159#define  GOLDEN_R      0.61803399
160#define  GOLDEN_C  (1.0-GOLDEN_R)
161#define  N_MAX_INSERT          20
162#define  N_MAX_OTU           4000
163#define  UNLIKELY          -1.e10
164#define  NJ_SEUIL             0.1
165#define  ROUND_MAX            100
166#define  DIST_MAX            2.00
167#define  AROUND_LK           50.0
168#define  PROP_STEP            1.0
169#define  T_MAX_ALPHABET        22
170#define  MDBL_MIN         FLT_MIN
171#define  MDBL_MAX         FLT_MAX
172#define  POWELL_ITMAX         200
173#define  LINMIN_TOL       2.0E-04
174#define  SCALE_POW             10    /*! Scaling factor will be 2^SCALE_POW or 2^(-SCALE_POW) [[ WARNING: SCALE_POW < 31 ]]*/
175#define  DEFAULT_SIZE_SPR_LIST 20
176#define  NEWICK                 0
177#define  NEXUS                  1
178#define  OUTPUT_TREE_FORMAT NEWICK
179#define  MAX_PARS      1000000000
180
181#define  LIM_SCALE_VAL     1.E-50 /*! Scaling limit (deprecated) */
182
183#define  MIN_CLOCK_RATE   1.E-10
184
185#define  MIN_VAR_BL       1.E-8
186#define  MAX_VAR_BL       1.E+3
187
188#define JC69       1
189#define K80        2
190#define F81        3
191#define HKY85      4
192#define F84        5
193#define TN93       6
194#define GTR        7
195#define CUSTOM     8
196
197#define WAG       11
198#define DAYHOFF   12
199#define JTT       13
200#define BLOSUM62  14
201#define MTREV     15
202#define RTREV     16
203#define CPREV     17
204#define DCMUT     18
205#define VT        19
206#define MTMAM     20
207#define MTART     21
208#define HIVW      22
209#define HIVB      23
210#define CUSTOMAA  24
211#define LG        25
212
213// Amino acid ordering:
214// Ala Arg Asn Asp Cys Gln Glu Gly His Ile Leu Lys Met Phe Pro Ser Thr Trp Tyr Val
215
216#define COMPOUND_COR   0
217#define COMPOUND_NOCOR 1
218#define EXPONENTIAL    2
219#define GAMMA          3
220#define THORNE         4
221#define GUINDON        5
222#define STRICTCLOCK    6
223#define NONE          -1
224
225#define ALRTSTAT       1
226#define ALRTCHI2       2
227#define MINALRTCHI2SH  3
228#define SH             4
229#define ABAYES         5
230
231
232/*  /\* Uncomment the lines below to switch to single precision *\/ */
233/*  typedef     float phydbl; */
234/*  #define LOG logf */
235/*  #define POW powf */
236/*  #define EXP expf */
237/*  #define FABS fabsf */
238/*  #define SQRT sqrtf */
239/*  #define CEIL ceilf */
240/*  #define FLOOR floorf */
241/*  #define RINT rintf */
242/*  #define ROUND roundf */
243/*  #define TRUNC truncf */
244/*  #define COS cosf */
245/*  #define SIN sinf */
246/*  #define TAN tanf */
247/*  #define SMALL FLT_MIN */
248/*  #define BIG  FLT_MAX */
249/*  #define SMALL_PIJ 1.E-10 */
250/*  #define BL_MIN 1.E-5 */
251/*  #define  P_LK_LIM_INF   2.168404e-19 /\* 2^-62 *\/ */
252/*  #define  P_LK_LIM_SUP   4.611686e+18 /\* 2^62 *\/ */
253
254/* Uncomment the line below to switch to double precision */
255typedef double phydbl;
256#define LOG log
257#define POW pow
258#define EXP exp
259#define FABS fabs
260#define SQRT sqrt
261#define CEIL ceil
262#define FLOOR floor
263#define RINT rint
264#define ROUND round
265#define TRUNC trunc
266#define COS cos
267#define SIN sin
268#define TAN tan
269#define SMALL DBL_MIN
270#define BIG  DBL_MAX
271#define SMALL_PIJ 1.E-20
272#define LOGBIG 690.
273#define LOGSMALL -690.
274
275
276#if !(defined PHYTIME || defined SERGEII)
277#define BL_MIN 1.E-8
278#define BL_MAX 100.
279#else
280#define BL_MIN 1.E-6
281#define BL_MAX 1.
282#endif
283
284/* #define P_LK_LIM_INF 7.888609052e-31 */
285/* #define P_LK_LIM_MAX 1.267650600e+30 */
286/* #define P_LK_LIM_INF 4.909093465e-91 /\* R: format(2^(-300),digits=10) *\/ */
287/* #define P_LK_LIM_SUP 2.037035976e+90 /\* R: format(2^(+300),digits=10) *\/ */
288#define  P_LK_LIM_INF   3.054936e-151 /* 2^-500 */
289#define  P_LK_LIM_SUP   3.273391e+150 /* 2^500 */
290
291#define T_MAX_XML_TAG 64
292
293/*!********************************************************/
294
295typedef struct __Scalar_Int {
296  int                      v;
297  struct __Scalar_Int  *next;
298  struct __Scalar_Int  *prev;
299}scalar_int;
300
301
302/*!********************************************************/
303
304typedef struct __Scalar_Dbl {
305  phydbl                  v;
306  bool                onoff;
307  struct __Scalar_Dbl *next;
308  struct __Scalar_Dbl *prev;
309}scalar_dbl;
310
311/*!********************************************************/
312
313typedef struct __Vect_Int {
314  int                  *v;
315  int                 len;
316  struct __Vect_Int *next;
317  struct __Vect_Int *prev;
318}vect_int;
319
320
321/*!********************************************************/
322
323typedef struct __Vect_Dbl {
324  phydbl               *v;
325  int                 len;
326  struct __Vect_Dbl *next;
327  struct __Vect_Dbl *prev;
328}vect_dbl;
329
330/*!********************************************************/
331
332typedef struct __String {
333  char                 *s;
334  int                 len;
335  struct __String   *next;
336  struct __String   *prev;
337}t_string;
338
339/*!********************************************************/
340
341typedef struct __Node {
342  struct __Node                       **v; /*! table of pointers to neighbor nodes. Dimension = 3 */
343  struct __Node               ***bip_node; /*! three lists of pointer to tip nodes. One list for each direction */
344  struct __Edge                       **b; /*! table of pointers to neighbor branches */
345  struct __Node                      *anc; /*! direct ancestor t_node (for rooted tree only) */
346  struct __Node                 *ext_node;
347  struct __Node               *match_node;
348  struct __Align                   *c_seq; /*! corresponding compressed sequence */
349  struct __Align               *c_seq_anc; /*! corresponding compressed ancestral sequence */
350
351
352  struct __Node                     *next; /*! tree->a_nodes[i]->next <=> tree->next->a_nodes[i] */ 
353  struct __Node                   *prev; /*! See above */
354  struct __Node                *next_mixt; /*! Next mixture tree*/
355  struct __Node                *prev_mixt; /*! Parent mixture tree */
356
357  struct __Calibration            **calib;
358  short int             *calib_applies_to;
359  int                             n_calib;
360
361  int                           *bip_size; /*! Size of each of the three lists from bip_node */
362  int                                 num; /*! t_node number */
363  int                                 tax; /*! tax = 1 -> external node, else -> internal t_node */
364  int                        check_branch; /*! check_branch=1 is the corresponding branch is labelled with '*' */
365  char                              *name; /*! taxon name (if exists) */
366  char                          *ori_name; /*! taxon name (if exists) */
367
368  phydbl                           *score; /*! score used in BioNJ to determine the best pair of nodes to agglomerate */
369  phydbl                               *l; /*! lengths of the (three or one) branche(s) connected this t_node */
370  phydbl                     dist_to_root; /*! distance to the root t_node */
371
372  short int                        common;
373  phydbl                           y_rank;
374  phydbl                       y_rank_ori;
375  phydbl                       y_rank_min;
376  phydbl                       y_rank_max;
377
378  int                            *s_ingrp; /*! does the subtree beneath belong to the ingroup */
379  int                           *s_outgrp; /*! does the subtree beneath belong to the outgroup */
380
381  int                             id_rank; /*! order taxa alphabetically and use id_rank to store the ranks */ 
382  int                                rank;
383  int                            rank_max;
384
385}t_node;
386
387
388/*!********************************************************/
389
390typedef struct __Edge {
391  /*!
392    syntax :  (node) [edge]
393(left_1) .                   .(right_1)
394          \ (left)  (right) /
395           \._____________./
396           /    [b_fcus]   \
397          /                 \
398(left_2) .                   .(right_2)
399
400  */
401
402  struct __Node               *left,*rght; /*! t_node on the left/right side of the t_edge */
403  short int         l_r,r_l,l_v1,l_v2,r_v1,r_v2;
404  /*! these are directions (i.e., 0, 1 or 2): */
405  /*! l_r (left to right) -> left[b_fcus->l_r] = right */
406  /*! r_l (right to left) -> right[b_fcus->r_l] = left */
407  /*! l_v1 (left t_node to first t_node != from right) -> left[b_fcus->l_v1] = left_1 */
408  /*! l_v2 (left t_node to secnd t_node != from right) -> left[b_fcus->l_v2] = left_2 */
409  /*! r_v1 (right t_node to first t_node != from left) -> right[b_fcus->r_v1] = right_1 */
410  /*! r_v2 (right t_node to secnd t_node != from left) -> right[b_fcus->r_v2] = right_2 */
411
412  struct __NNI                       *nni;
413  struct __Edge                     *next;
414  struct __Edge                     *prev;
415  struct __Edge                *next_mixt;
416  struct __Edge                *prev_mixt;
417
418  int                                 num; /*! branch number */
419  scalar_dbl                           *l; /*! branch length */
420  scalar_dbl                      *best_l; /*! best branch length found so far */
421  scalar_dbl                       *l_old; /*! old branch length */
422  scalar_dbl                       *l_var; /*! variance of edge length */ 
423  scalar_dbl                   *l_var_old; /*! variance of edge length (previous value) */
424 
425
426  int                           bip_score; /*! score of the bipartition generated by the corresponding edge
427                                              bip_score = 1 iif the branch is found in both trees to be compared,
428                                              bip_score = 0 otherwise. */
429
430  phydbl            *p_lk_left,*p_lk_rght; /*! likelihoods of the subtree on the left and
431                                              right side (for each site and each relative rate category) */
432  short int      *p_lk_tip_r, *p_lk_tip_l; 
433  short int           *div_post_pred_left; /*! posterior prediction of nucleotide/aa diversity (left-hand subtree) */
434  short int           *div_post_pred_rght; /*! posterior prediction of nucleotide/aa diversity (rght-hand subtree) */
435  short int                    does_exist;
436
437  int                       *patt_id_left;
438  int                       *patt_id_rght;
439  int                      *p_lk_loc_left;
440  int                      *p_lk_loc_rght;
441 
442
443  phydbl                          *Pij_rr; /*! matrix of change probabilities and its first and secnd derivates */
444  int                     *pars_l,*pars_r; /*! parsimony of the subtree on the left and right sides (for each site) */
445  unsigned int               *ui_l, *ui_r; /*! union - intersection vectors used in Fitch's parsimony algorithm */
446  int                *p_pars_l, *p_pars_r; /*! conditional parsimony vectors */
447
448  int                         num_st_left; /*! number of the subtree on the left side */
449  int                         num_st_rght; /*! number of the subtree on the right side */
450
451
452  /*! Below are the likelihood scaling factors (used in functions
453     `Get_All_Partial_Lk_Scale' in lk.c */
454  int                 *sum_scale_left_cat;
455  int                 *sum_scale_rght_cat;
456  int                     *sum_scale_left;
457  int                     *sum_scale_rght;
458
459  phydbl                          bootval; /*! bootstrap value (if exists) */
460
461  short int                      is_alive; /*! is_alive = 1 if this t_edge is used in a tree */
462
463  phydbl                   dist_btw_edges;
464  int                 topo_dist_btw_edges;
465
466  int                     has_zero_br_len;
467
468  phydbl                       ratio_test; /*! approximate likelihood ratio test */
469  phydbl                   alrt_statistic; /*! aLRT statistic */
470
471  char                           **labels; /*! string of characters that labels the corresponding t_edge */
472  int                            n_labels; /*! number of labels */
473  int                             n_jumps; /*! number of jumps of substitution rates */
474
475
476  phydbl                      bin_cod_num;
477}t_edge;
478
479/*!********************************************************/
480
481typedef struct __Tree{
482 
483  struct __Node                       *n_root; /*! root t_node */
484  struct __Edge                       *e_root; /*! t_edge on which lies the root */
485  struct __Node                     **a_nodes; /*! array of nodes that defines the tree topology */
486  struct __Edge                     **a_edges; /*! array of edges */
487  struct __Model                         *mod; /*! substitution model */
488  struct __Calign                       *data; /*! sequences */
489  struct __Calign                   *anc_data; /*! ancestral sequences */
490  struct __Tree                         *next; /* set to NULL by default. Used for mixture models */
491  struct __Tree                         *prev; /* set to NULL by default. Used for mixture models */
492  struct __Tree                    *next_mixt; /* set to NULL by default. Used for mixture models */
493  struct __Tree                    *prev_mixt; /* set to NULL by default. Used for mixture models */
494  struct __Tree                    *mixt_tree; /* set to NULL by default. Used for mixture models */
495  struct __Option                         *io; /*! input/output */
496  struct __Matrix                        *mat; /*! pairwise distance matrix */
497  struct __Node                   **curr_path; /*! list of nodes that form a path in the tree */
498  struct __SPR                     **spr_list;
499  struct __SPR                      *best_spr;
500  struct __Tdraw                     *ps_tree; /*! structure for drawing trees in postscript format */
501  struct __T_Rate                       *rates; /*! structure for handling rates of evolution */
502  struct __Tmcmc                        *mcmc;
503  struct __Triplet            *triplet_struct;
504  struct __Phylogeo                      *geo;
505
506  int                            is_mixt_tree;
507  int                                tree_num; /*! tree number. Used for mixture models */
508  int                          ps_page_number; /*! when multiple trees are printed, this variable give the current page number */
509  int                         depth_curr_path; /*! depth of the t_node path defined by curr_path */
510  int                                 has_bip; /*!if has_bip=1, then the structure to compare
511                                                 tree topologies is allocated, has_bip=0 otherwise */
512  int                                   n_otu; /*! number of taxa */
513  int                               curr_site; /*! current site of the alignment to be processed */
514  int                               curr_catg; /*! current class of the discrete gamma rate distribution */
515  int                                  n_swap; /*! number of NNIs performed */
516  int                               n_pattern; /*! number of distinct site patterns */
517  int                      has_branch_lengths; /*! =1 iff input tree displays branch lengths */
518  int                          print_boot_val; /*! if print_boot_val=1, the bootstrap values are printed */
519  int                          print_alrt_val; /*! if print_boot_val=1, the bootstrap values are printed */
520  int                              both_sides; /*! both_sides=1 -> a pre-order and a post-order tree
521                                                  traversals are required to compute the likelihood
522                                                  of every subtree in the phylogeny*/
523  int               num_curr_branch_available; /*!gives the number of the next cell in a_edges that is free to receive a pointer to a branch */
524  short int                            *t_dir;
525  int                          n_improvements;
526  int                                 n_moves;
527
528  int                                      dp; /*! Data partition */
529  int                               s_mod_num; /*! Substitution model number */
530  int                               lock_topo; /*! = 1 any subsequent topological modification will be banished */
531  int                            write_labels;
532  int                           write_br_lens;
533  int                                 *mutmap; /*! Mutational map */
534
535  phydbl                              init_lnL;
536  phydbl                              best_lnL; /*! highest value of the loglikelihood found so far */
537  int                                best_pars; /*! highest value of the parsimony found so far */
538  phydbl                                 c_lnL; /*! loglikelihood */
539  phydbl                               old_lnL; /*! old loglikelihood */
540  phydbl                     sum_min_sum_scale; /*! common factor of scaling factors */
541  phydbl                         *c_lnL_sorted; /*! used to compute c_lnL by adding sorted terms to minimize CPU errors */
542  phydbl                        *cur_site_lk; /*! vector of loglikelihoods at individual sites */
543  phydbl                        *old_site_lk; /*! vector of likelihoods at individual sites */
544  phydbl                     **log_site_lk_cat; /*! loglikelihood at individual sites and for each class of rate*/
545  phydbl                          *site_lk_cat; /*! loglikelihood at a single site and for each class of rate*/
546  phydbl                       unconstraint_lk; /*! unconstrained (or multinomial) likelihood  */
547  phydbl                        **log_lks_aLRT; /*! used to compute several branch supports */
548  phydbl                            n_root_pos; /*! position of the root on its t_edge */
549  phydbl                                  size; /*! tree size */
550  int                              *site_pars;
551  int                                  c_pars;
552  int                               *step_mat;
553
554  int                           size_spr_list;
555  int                  perform_spr_right_away;
556
557  time_t                                t_beg;
558  time_t                            t_current;
559 
560  int                     bl_from_node_stamps; /*! == 1 -> Branch lengths are determined by t_node times */
561  phydbl                        sum_y_dist_sq;
562  phydbl                           sum_y_dist;
563  phydbl                      tip_order_score;
564  int                         write_tax_names;
565  int                    update_alias_subpatt;
566
567  phydbl                           geo_mig_sd; /*! standard deviation of the migration step random variable */
568  phydbl                              geo_lnL; /*! log likelihood of the phylo-geography model */
569
570  int                              bl_ndigits;
571
572  phydbl                             *short_l; /*! Vector of short branch length values */
573  int                               n_short_l; /*! Length of short_l */
574  phydbl                           norm_scale;
575 
576  short int                   br_len_recorded;
577  int                           max_spr_depth;
578 
579  short int                  apply_lk_scaling; /*! Applying scaling of likelihoods. YES/NO */
580
581  phydbl                                   *K;//a vector of the norm.constants for the node times prior.
582
583}t_tree;
584
585/*!********************************************************/
586
587typedef struct __Super_Tree {
588  struct __Tree                           *tree;
589  struct __List_Tree                  *treelist; /*! list of trees. One tree for each data set to be processed */
590  struct __Calign                    *curr_cdata;
591  struct __Option                   **optionlist; /*! list of pointers to input structures (used in supertrees) */
592
593  struct __Node           ***match_st_node_in_gt;
594  /*!  match_st_in_gt_node[subdataset number][supertree t_node number]
595   *  gives the t_node in tree estimated from 'subdataset number' that corresponds
596   *  to 'supertree t_node number' in the supertree
597   */
598
599  struct __Node           *****map_st_node_in_gt;
600  /*!  mat_st_gt_node[gt_num][st_node_num][direction] gives the
601   *  t_node in gt gt_num that maps t_node st_node_num in st.
602   */
603
604  struct __Edge             ***map_st_edge_in_gt;
605  /*!  map_st_gt_br[gt_num][st_branch_num] gives the
606   *  branch in gt gt_num that maps branch st_branch_num
607   *  in st.
608   */
609
610  struct __Edge            ****map_gt_edge_in_st;
611  /*!  mat_gt_st_br[gt_num][gt_branch_num][] is the list of
612   *  branches in st that map branch gt_branch_num
613   *  in gt gt_num.
614   */
615
616  int                   **size_map_gt_edge_in_st;
617  /*!  size_map_gt_st_br[gt_num][gt_branch_num] gives the
618   *  size of the list map_gt_st_br[gt_num][gt_branch_num][]
619   */
620
621
622  struct __Edge             ***match_st_edge_in_gt;
623  /*! match_st_edge_in_gt[gt_num][st_branch_num] gives the
624   * branch in gt gt_num that matches branch st_branch_num
625   */
626
627  struct __Edge             ***match_gt_edge_in_st;
628  /*! match_gt_edge_in_st[gt_num][gt_branch_num] gives the
629   * branch in st that matches branch gt_branch_num
630   */
631
632  struct __Node                  ****closest_match;
633  /*! closest_match[gt_num][st_node_num][dir] gives the
634   * closest t_node in st that matches a t_node in gt gt_num
635   */
636
637  int                              ***closest_dist;
638  /*! closest_dist[gt_num][st_node_num][dir] gives the
639   * number of edges to traverse to get to node
640   * closest_match[gt_num][st_node_num][dir]
641   */
642
643  int                                         n_part;
644  /*! number of trees */
645
646  phydbl                                      **bl;
647  /*! bl[gt_num][gt_branch_num] gives the length of
648   * branch gt_branch_num
649   */
650
651  phydbl                                  **bl_cpy;
652  /*! copy of bl */
653
654  phydbl                                     **bl0;
655  /*! bl estimated during NNI (original topo)
656   * See Mg_NNI.
657   */
658
659  phydbl                                     **bl1;
660  /*! bl estimated during NNI (topo conf 1)
661   * See Mg_NNI.
662   */
663
664  phydbl                                     **bl2;
665  /*! bl estimated during NNI (topo conf 2)
666   * See Mg_NNI.
667   */
668
669  int                                *bl_partition;
670  /*! partition[gt_num] gives the t_edge partition number
671   * gt_num belongs to.
672   */
673  int                                   n_bl_part;
674
675  struct __Model                          **s_mod; /*! substitution model */
676
677  int                                     n_s_mod;
678  int                                 lock_br_len;
679
680}supert_tree;
681
682/*!********************************************************/
683
684typedef struct __List_Tree { /*! a list of trees */
685  struct __Tree   **tree;
686  int           list_size;                /*! number of trees in the list */
687}t_treelist;
688
689/*!********************************************************/
690
691typedef struct __Align {
692  char           *name; /*! sequence name */
693  int              len; /*! sequence length */
694  char          *state; /*! sequence itself */
695  int         *d_state; /*! sequence itself (digits) */
696  short int *is_ambigu; /*! is_ambigu[site] = 1 if state[site] is an ambiguous character. 0 otherwise */
697}align;
698
699/*!********************************************************/
700
701
702typedef struct __Calign {
703  struct __Align **c_seq;             /*! compressed sequences      */
704  phydbl          *b_frq;             /*! observed state frequencies */
705  short int       *invar;             /*! < 0 -> polymorphism observed */
706  int              *wght;             /*! # of each site in c_align */
707  short int      *ambigu;             /*! ambigu[i]=1 is one or more of the sequences at site
708                                        i display an ambiguous character */
709  phydbl      obs_pinvar;
710  int              n_otu;             /*! number of taxa */
711  int          clean_len;             /*! uncrunched sequences lenghts without gaps */
712  int         crunch_len;             /*! crunched sequences lengths */
713  int           init_len;             /*! length of the uncompressed sequences */
714  int          *sitepatt;             /*! this array maps the position of the patterns in the
715                                       compressed alignment to the positions in the uncompressed
716                                       one */
717  int             format;             /*! 0 (default): PHYLIP. 1: NEXUS. */
718}calign;
719
720/*!********************************************************/
721
722typedef struct __Matrix { /*! mostly used in BIONJ */
723  phydbl    **P,**Q,**dist; /*! observed proportions of transition, transverion and  distances
724                               between pairs of  sequences */
725
726  t_tree             *tree; /*! tree... */
727  int              *on_off; /*! on_off[i]=1 if column/line i corresponds to a t_node that has not
728                               been agglomerated yet */
729  int                n_otu; /*! number of taxa */
730  char              **name; /*! sequence names */
731  int                    r; /*! number of nodes that have not been agglomerated yet */
732  struct __Node **tip_node; /*! array of pointer to the leaves of the tree */
733  int             curr_int; /*! used in the NJ/BIONJ algorithms */
734  int               method; /*! if method=1->NJ method is used, BIONJ otherwise */
735}matrix;
736
737/*!********************************************************/
738
739typedef struct __RateMatrix {
740  int                    n_diff_rr; /*! number of different relative substitution rates in the custom model */
741  vect_dbl                     *rr; /*! relative rate parameters of the GTR or custom model (given by rr_val[rr_num[i]]) */
742  vect_dbl                 *rr_val; /*! relative rate parameters of the GTR or custom model */
743  vect_int                 *rr_num; 
744  vect_int           *n_rr_per_cat; /*! number of rate parameters in each category */
745  vect_dbl                   *qmat;
746  vect_dbl              *qmat_buff;
747
748  struct __RateMatrix        *next;
749  struct __RateMatrix        *prev;
750}t_rmat;
751
752/*!********************************************************/
753
754typedef struct __RAS {
755  /*! Rate across sites */
756  int                       n_catg; /*! number of categories in the discrete gamma distribution */
757  int                        invar; /*! =1 iff the substitution model takes into account invariable sites */
758  int                 gamma_median; /*! 1: use the median of each bin in the discrete gamma distribution. 0: the mean is used */
759  vect_dbl          *gamma_r_proba; /*! probabilities of the substitution rates defined by the discrete gamma distribution */
760  vect_dbl *gamma_r_proba_unscaled; 
761  vect_dbl               *gamma_rr; /*! substitution rates defined by the RAS distribution */
762  vect_dbl      *gamma_rr_unscaled; /*! substitution rates defined by the RAS distribution (unscaled) */
763  scalar_dbl                *alpha; /*! gamma shapa parameter */
764  int              free_mixt_rates; 
765  scalar_dbl         *free_rate_mr; /*! mean relative rate as given by the FreeRate model */
766
767
768  int          parent_class_number;
769  scalar_dbl               *pinvar; /*! proportion of invariable sites */
770
771  short int                init_rr;
772  short int           init_r_proba;
773  short int           normalise_rr;
774
775  short int         *skip_rate_cat;
776
777  struct __RAS               *next;
778  struct __RAS               *prev;
779
780}t_ras;
781
782/*!********************************************************/
783
784typedef struct __EquFreq {
785  /*! Equilibrium frequencies */
786  vect_dbl             *pi; /*! states frequencies */
787  vect_dbl    *pi_unscaled; /*! states frequencies (unscaled) */
788 
789  struct __EquFreq   *next;
790  struct __EquFreq   *prev;
791
792}t_efrq;
793
794/*!********************************************************/
795
796typedef struct __Model {
797  struct __Optimiz          *s_opt; /*! pointer to parameters to optimize */
798  struct __Eigen            *eigen;
799  struct __M4               *m4mod;
800  struct __Option              *io;
801  struct __Model             *next;
802  struct __Model             *prev;
803  struct __Model        *next_mixt;
804  struct __Model        *prev_mixt;
805  struct __RateMatrix       *r_mat;
806  struct __EquFreq          *e_frq;
807  struct __RAS                *ras;
808
809  t_string       *aa_rate_mat_file;
810  FILE             *fp_aa_rate_mat;
811
812  vect_dbl            *user_b_freq; /*! user-defined nucleotide frequencies */
813  t_string              *modelname;
814  t_string      *custom_mod_string; /*! string of characters used to define custom models of substitution */
815
816  int                      mod_num; /*! model number */
817
818  int                 update_eigen; /*! update_eigen=1-> eigen values/vectors need to be updated */
819
820  int                   whichmodel;
821  int                  is_mixt_mod;
822
823  int                           ns; /*! number of states (4 for ADN, 20 for AA) */
824
825  int                    bootstrap; /*! Number of bootstrap replicates (0 : no bootstrap analysis is launched) */
826  int                    use_m4mod; /*! Use a Makrkov modulated Markov model ? */
827
828  scalar_dbl                *kappa; /*! transition/transversion rate */
829  scalar_dbl               *lambda; /*! parameter used to define the ts/tv ratios in the F84 and TN93 models */
830  scalar_dbl    *br_len_multiplier;
831
832  vect_dbl                 *Pij_rr; /*! matrix of change probabilities */
833  scalar_dbl                   *mr; /*! mean rate = branch length/time interval  mr = -sum(i)(vct_pi[i].mat_Q[ii]) */
834
835  short int                 log_l; /*! Edge lengths are actually log(Edge lengths) if log_l == YES !*/
836  phydbl                    l_min; /*! Minimum branch length !*/
837  phydbl                    l_max; /*! Maximum branch length !*/
838
839  phydbl              l_var_sigma; /*! For any edge b we have b->l_var->v = l_var_sigma * (b->l->v)^2 */
840  phydbl                l_var_min; /*! Min of variance of branch lengths (used in conjunction with gamma_mgf_bl == YES) */
841  phydbl                l_var_max; /*! Max of variance of branch lengths (used in conjunction with gamma_mgf_bl == YES) */
842
843  int                gamma_mgf_bl; /*! P = \int_0^inf exp(QL) p(L) where L=\int_0^t R(s) ds and p(L) is the gamma density. Set to NO by default !*/
844
845  int              n_mixt_classes; /* Number of classes in the mixture model. */
846
847  scalar_dbl        *r_mat_weight;
848  scalar_dbl        *e_frq_weight;
849
850}t_mod;
851
852/*!********************************************************/
853
854typedef struct __Eigen{
855  int              size;
856  phydbl             *q; /*! matrix which eigen values and vectors are computed */
857  phydbl         *space;
858  int        *space_int;
859  phydbl         *e_val; /*! eigen values (vector), real part. */
860  phydbl      *e_val_im; /*! eigen values (vector), imaginary part */
861  phydbl      *r_e_vect; /*! right eigen vector (matrix), real part */
862  phydbl   *r_e_vect_im; /*! right eigen vector (matrix), imaginary part */
863  phydbl      *l_e_vect; /*! left eigen vector (matrix), real part */
864
865  struct __Eigen  *prev;
866  struct __Eigen  *next;
867}eigen;
868
869/*!********************************************************/
870
871typedef struct __Option { /*! mostly used in 'help.c' */
872  struct __Model                *mod; /*! pointer to a substitution model */
873  struct __Tree                *tree; /*! pointer to the current tree */
874  struct __Align              **data; /*! pointer to the uncompressed sequences */
875  struct __Tree           *cstr_tree; /*! pointer to a constraint tree (can be a multifurcating one) */
876  struct __Calign             *cdata; /*! pointer to the compressed sequences */
877  struct __Super_Tree            *st; /*! pointer to supertree */
878  struct __Tnexcom    **nex_com_list;
879  struct __List_Tree       *treelist; /*! list of trees. */
880  struct __Option              *next;
881  struct __Option              *prev;
882
883  int                    interleaved; /*! interleaved or sequential sequence file format ? */
884  int                        in_tree; /*! =1 iff a user input tree is used as input */
885
886  char                *in_align_file; /*! alignment file name */
887  FILE                  *fp_in_align; /*! pointer to the alignment file */
888
889  char                 *in_tree_file; /*! input tree file name */
890  FILE                   *fp_in_tree; /*! pointer to the input tree file */
891
892  char      *in_constraint_tree_file; /*! input constraint tree file name */
893  FILE        *fp_in_constraint_tree; /*! pointer to the input constraint tree file */
894
895  char                *out_tree_file; /*! name of the tree file */
896  FILE                  *fp_out_tree;
897
898  char               *out_trees_file; /*! name of the tree file */
899  FILE                 *fp_out_trees; /*! pointer to the tree file containing all the trees estimated using random starting trees */
900
901  char           *out_boot_tree_file; /*! name of the tree file */
902  FILE             *fp_out_boot_tree; /*! pointer to the bootstrap tree file */
903
904  char          *out_boot_stats_file; /*! name of the tree file */
905  FILE            *fp_out_boot_stats; /*! pointer to the statistics file */
906
907  char               *out_stats_file; /*! name of the statistics file */
908  FILE                 *fp_out_stats;
909
910  char               *out_trace_file; /*! name of the file in which the likelihood of the model is written */
911  FILE                 *fp_out_trace;
912
913  char                  *out_lk_file; /*! name of the file in which the likelihood of the model is written */
914  FILE                    *fp_out_lk;
915
916  char                  *out_ps_file; /*! name of the file in which tree(s) is(are) written */
917  FILE                    *fp_out_ps;
918
919
920  char              *clade_list_file;
921 
922  int                       datatype; /*! 0->DNA, 1->AA */
923  int               print_boot_trees; /*! =1 if the bootstrapped trees are printed in output */
924  int       out_stats_file_open_mode; /*! opening file mode for statistics file */
925  int        out_tree_file_open_mode; /*! opening file mode for tree file */
926  int                    n_data_sets; /*! number of data sets to be analysed */
927  int                        n_trees; /*! number of trees */
928  int                       init_len; /*! sequence length */
929  int                          n_otu; /*! number of taxa */
930  int               n_data_set_asked; /*! number of bootstrap replicates */
931  char                     *nt_or_cd; /*! nucleotide or codon data ? (not used) */
932  int                      multigene; /*! if=1 -> analyse several partitions. */
933  int               config_multigene;
934  int                         n_part; /*! number of data partitions */
935  int                        curr_gt;
936  int                     ratio_test; /*! from 1 to 4 for specific branch supports, 0 of not */
937  int                    ready_to_go;
938  int                data_file_format; /*! Data format: Phylip or Nexus */
939  int                tree_file_format; /*! Tree format: Phylip or Nexus */
940  int                      state_len;
941
942  int                 curr_interface;
943  int                         r_seed; /*! random seed */
944  int                  collapse_boot; /*! 0 -> branch length on bootstrap trees are not collapsed if too small */
945  int          random_boot_seq_order; /*! !0 -> sequence order in bootstrapped data set is random */
946  int                    print_trace;
947  int                 print_site_lnl;
948  int                       m4_model;
949  int                      rm_ambigu; /*! 0 is the default. 1: columns with ambiguous characters are discarded prior further analysis */
950  int                       colalias;
951  int                  append_run_ID;
952  char                *run_id_string;
953  int                          quiet; /*! 0 is the default. 1: no interactive question (for batch mode) */
954  int                      lk_approx; /* EXACT or NORMAL */
955  char                    **alphabet;
956  int                         codpos;
957  int                         mutmap;
958
959  char              **long_tax_names;
960  char             **short_tax_names;
961  int                 size_tax_names;
962
963  phydbl                    *z_scores;
964  phydbl                         *lat;
965  phydbl                         *lon;
966 
967  int                 boot_prog_every;
968
969  int                    mem_question;
970  int                do_alias_subpatt;
971  struct __Tmcmc                *mcmc;
972  struct __T_Rate              *rates;
973
974
975}option;
976
977/*!********************************************************/
978
979typedef struct __Optimiz { /*! parameters to be optimised (mostly used in 'optimiz.c') */
980  int                 print; /*! =1 -> verbose mode  */
981
982  int             opt_alpha; /*! =1 -> the gamma shape parameter is optimised */
983  int             opt_kappa; /*! =1 -> the ts/tv ratio parameter is optimised */
984  int            opt_lambda; /*! =1 -> the F84|TN93 model specific parameter is optimised */
985  int            opt_pinvar; /*! =1 -> the proportion of invariants is optimised */
986  int        opt_state_freq; /*! =1 -> the nucleotide frequencies are optimised */
987  int                opt_rr; /*! =1 -> the relative rate parameters of the GTR or the customn model are optimised */
988  int       opt_subst_param; /*! if opt_topo=0 and opt_subst_param=1 -> the numerical parameters of the
989                                model are optimised. if opt_topo=0 and opt_free_param=0 -> no parameter is
990                                optimised */
991  int         opt_cov_delta;
992  int         opt_cov_alpha;
993  int    opt_cov_free_rates;
994
995
996  int                opt_bl; /*! =1 -> the branch lengths are optimised */
997  int              opt_topo; /*! =1 -> the tree topology is optimised */
998  int           topo_search;
999  phydbl            init_lk; /*! initial loglikelihood value */
1000  int              n_it_max; /*! maximum bnumber of iteration during an optimisation step */
1001  int              last_opt; /*! =1 -> the numerical parameters are optimised further while the
1002                               tree topology remains fixed */
1003  int     random_input_tree; /*! boolean */
1004  int         n_rand_starts; /*! number of random starting points */
1005  int          brent_it_max;
1006  int             steph_spr;
1007  int       user_state_freq;
1008  int       opt_five_branch;
1009  int           pars_thresh;
1010  int         hybrid_thresh;
1011
1012  phydbl         tree_size_mult; /*! tree size multiplier */
1013  phydbl      min_diff_lk_local;
1014  phydbl     min_diff_lk_global;
1015  phydbl       min_diff_lk_move;
1016  phydbl     p_moves_to_examine;
1017  int                  fast_nni;
1018  int                    greedy;
1019  int              general_pars;
1020  int                quickdirty;
1021  int                  spr_pars;
1022  int                   spr_lnL;
1023  int            max_depth_path;
1024  int            min_depth_path;
1025  int              deepest_path;
1026  phydbl      max_delta_lnL_spr;
1027  int             br_len_in_spr; 
1028  int       opt_free_mixt_rates;
1029  int        constrained_br_len;
1030  int          opt_gamma_br_len;
1031  int first_opt_free_mixt_rates;
1032  int               wim_n_rgrft;
1033  int               wim_n_globl;
1034  int              wim_max_dist;
1035  int               wim_n_optim;
1036  int                wim_n_best;
1037  int            wim_inside_opt;
1038
1039  int           opt_rmat_weight;
1040  int           opt_efrq_weight;
1041
1042  int       skip_tree_traversal;
1043  int         serial_free_rates;
1044
1045  int       curr_opt_free_rates;
1046}t_opt;
1047
1048/*!********************************************************/
1049
1050typedef struct __NNI{
1051
1052  struct __Node         *left;
1053  struct __Node         *rght;
1054  struct __Edge            *b;
1055
1056  phydbl                score;
1057  phydbl               init_l;
1058  phydbl              init_lk;
1059  phydbl               best_l;
1060  phydbl          lk0,lk1,lk2;
1061  phydbl             l0,l1,l2;
1062
1063  struct __Node *swap_node_v1;
1064  struct __Node *swap_node_v2;
1065  struct __Node *swap_node_v3;
1066  struct __Node *swap_node_v4;
1067
1068  int       best_conf;   /*! best topological configuration :
1069                            ((left_1,left_2),right_1,right_2) or
1070                            ((left_1,right_2),right_1,left_2) or
1071                            ((left_1,right_1),right_1,left_2)  */
1072}nni;
1073
1074/*!********************************************************/
1075
1076typedef struct __SPR{
1077  struct __Node         *n_link;
1078  struct __Node  *n_opp_to_link;
1079  struct __Edge  *b_opp_to_link;
1080  struct __Edge       *b_target;
1081  struct __Edge  *b_init_target;
1082  struct __Node          **path;
1083  phydbl          init_target_l;
1084  phydbl          init_target_v;
1085  phydbl               l0,l1,l2;
1086  phydbl               v0,v1,v2;
1087  phydbl                    lnL;
1088  int                depth_path;
1089  int                      pars;
1090  int                      dist;
1091
1092  struct __SPR            *next;
1093  struct __SPR            *prev;
1094  struct __SPR       *next_mixt;
1095  struct __SPR       *prev_mixt;
1096
1097}t_spr;
1098
1099/*!********************************************************/
1100
1101typedef struct __Triplet{
1102  int    size;
1103  phydbl *F_bc;
1104  phydbl *F_cd;
1105  phydbl *F_bd;
1106  phydbl ****core;
1107  phydbl ***p_one_site;
1108  phydbl ***sum_p_one_site;
1109  phydbl *pi_bc;
1110  phydbl *pi_cd;
1111  phydbl *pi_bd;
1112  struct __Eigen *eigen_struct;
1113  struct __Model *mod;
1114
1115  struct __Triplet *next;
1116  struct __Triplet *prev;
1117}triplet;
1118
1119/*!********************************************************/
1120
1121typedef struct __Pnode{
1122  struct __Pnode **next;
1123  int weight;
1124  int num;
1125}pnode;
1126
1127/*!********************************************************/
1128
1129typedef struct __M4 {
1130  int                  n_h; /*! number of hidden states */
1131  int                  n_o; /*! number of observable states  */
1132  int        use_cov_alpha;
1133  int         use_cov_free;
1134
1135  phydbl          **o_mats; /*! set of matrices of substitution rates across observable states */
1136  phydbl          *multipl; /*! vector of values that multiply each o_mats matrix */
1137  phydbl             *o_rr; /*! relative rates (symmetric) of substitution between observable states */
1138  phydbl             *h_rr; /*! relative rates (symmetric) of substitution between hidden states */
1139  phydbl            *h_mat; /*! matrix that describes the substitutions between hidden states (aka switches) */
1140  phydbl             *o_fq; /*! equilibrium frequencies for the observable states */
1141  phydbl             *h_fq; /*! equilibrium frequencies for the hidden states */
1142  phydbl    *h_fq_unscaled; /*! unscaled equilibrium frequencies for the hidden states */
1143  phydbl *multipl_unscaled; /*! unscaled  vector of values that multiply each o_mats matrix */
1144
1145  phydbl             delta; /*! switching rate */
1146  phydbl             alpha; /*! gamma shape parameter */
1147}m4;
1148
1149/*!********************************************************/
1150
1151typedef struct __Tdraw {
1152  phydbl          *xcoord; /*! t_node coordinates on the x axis */
1153  phydbl          *ycoord; /*! t_node coordinates on the y axis */
1154  phydbl        *xcoord_s; /*! t_node coordinates on the x axis (scaled) */
1155  phydbl        *ycoord_s; /*! t_node coordinates on the y axis (scaled) */
1156  int          page_width;
1157  int         page_height;
1158  int      tree_box_width;
1159
1160  int         *cdf_mat;
1161  phydbl       *cdf_mat_x;
1162  phydbl       *cdf_mat_y;
1163
1164
1165  phydbl max_dist_to_root;
1166}tdraw;
1167
1168/*!********************************************************/
1169
1170typedef struct __T_Rate {
1171  phydbl lexp; /*! Parameter of the exponential distribution that governs the rate at which substitution between rate classes ocur */
1172  phydbl alpha;
1173  phydbl less_likely;
1174  phydbl birth_rate;
1175  phydbl birth_rate_min;
1176  phydbl birth_rate_max;
1177  phydbl min_rate;
1178  phydbl max_rate;
1179  phydbl c_lnL1; 
1180  phydbl c_lnL2; 
1181  phydbl c_lnL_rates; /*! Prob(Br len | time stamps, model of rate evolution) */
1182  phydbl c_lnL_times; /*! Prob(time stamps) */
1183  phydbl c_lnL_jps; /*! Prob(# Jumps | time stamps, rates, model of rate evolution) */
1184  phydbl clock_r; /*! Mean substitution rate, i.e., 'molecular clock' rate */
1185  phydbl min_clock;
1186  phydbl max_clock;
1187  phydbl lbda_nu;
1188  phydbl min_dt;
1189  phydbl step_rate;
1190  phydbl true_tree_size;
1191  phydbl p_max;
1192  phydbl norm_fact;
1193  phydbl nu; /*! Parameter of the Exponential distribution for the corresponding model */
1194  phydbl min_nu;
1195  phydbl max_nu;
1196  phydbl covdet;
1197  phydbl sum_invalid_areas;
1198
1199
1200  phydbl     *nd_r;  /*! Current rates at nodes */
1201  phydbl     *br_r;  /*! Current rates along edges */
1202  phydbl     *nd_t; /*! Current t_node times */
1203  phydbl     *triplet;
1204  phydbl     *true_t; /*! true t_node times (including root node) */
1205  phydbl     *true_r; /*! true t_edge rates (on rooted tree) */
1206  phydbl     *buff_t;
1207  phydbl     *buff_r;
1208  phydbl     *dens; /*! Probability densities of mean substitution rates at the nodes */
1209  phydbl     *ml_l; /*! ML t_edge lengths (rooted) */
1210  phydbl     *cur_l; /*! Current t_edge lengths (rooted) */
1211  phydbl     *u_ml_l; /*! ML t_edge lengths (unrooted) */
1212  phydbl     *u_cur_l; /*! Current t_edge lengths (unrooted) */
1213  phydbl     *invcov;
1214  phydbl     *cov_r;
1215  phydbl     *mean_r; /*! average values of br_r taken across the sampled values during the MCMC */ 
1216  phydbl     *mean_t; /*! average values of nd_t taken across the sampled values during the MCMC */
1217  phydbl     *_2n_vect1;
1218  phydbl     *_2n_vect2;
1219  phydbl     *_2n_vect3;
1220  phydbl     *_2n_vect4;
1221  short int  *_2n_vect5;
1222  phydbl     *_2n2n_vect1;
1223  phydbl     *_2n2n_vect2;
1224  phydbl     *trip_cond_cov;
1225  phydbl     *trip_reg_coeff;
1226  phydbl     *cond_var;
1227  phydbl     *reg_coeff;
1228  phydbl     *t_prior;
1229  phydbl     *t_prior_min;
1230  phydbl     *t_prior_max;
1231  phydbl     *t_floor;
1232  phydbl     *t_mean;
1233  int        *t_ranked;
1234  phydbl     *mean_l;
1235  phydbl     *cov_l;
1236  phydbl     *grad_l; /* gradient */
1237  phydbl     inflate_var;
1238  phydbl     *time_slice_lims;
1239  phydbl     *survival_rank;
1240  phydbl     *survival_dur;
1241  phydbl     *calib_prob;
1242
1243  int adjust_rates; /*! if = 1, branch rates are adjusted such that a modification of a given t_node time
1244                       does not modify any branch lengths */
1245  int use_rates; /*! if = 0, branch lengths are expressed as differences between t_node times */
1246  int bl_from_rt; /*! if =1, branch lengths are obtained as the product of cur_r and t */
1247  int approx;
1248  int model; /*! Model number */
1249  int is_allocated;
1250  int met_within_gibbs;
1251
1252  int update_mean_l;
1253  int update_cov_l;
1254       
1255  int *n_jps;
1256  int *t_jps;
1257  int n_time_slices;
1258  int *n_time_slice_spans;
1259  int *curr_slice;
1260  int *n_tips_below;
1261 
1262  short int *t_has_prior;
1263  struct __Node **lca; /*! 2-way table of common ancestral nodes for each pari of nodes */
1264
1265  short int *br_do_updt;
1266  phydbl *cur_gamma_prior_mean;
1267  phydbl *cur_gamma_prior_var;
1268
1269  int model_log_rates;
1270 
1271  short int nd_t_recorded;
1272  short int br_r_recorded;
1273
1274  int *has_survived;
1275
1276  struct __Calibration *calib;
1277  int tot_num_cal;
1278  int *curr_nd_for_cal;
1279  phydbl c_lnL_Hastings_ratio;
1280
1281  phydbl     *t_prior_min_buff;
1282  phydbl     *t_prior_max_buff;
1283  phydbl     *times_partial_proba;
1284
1285}t_rate;
1286
1287/*!********************************************************/
1288
1289typedef struct __Tmcmc {
1290  struct __Option *io;
1291
1292  phydbl *tune_move;
1293  phydbl *move_weight;
1294 
1295  phydbl *acc_rate;
1296  int *acc_move;
1297  int *run_move;
1298  int *prev_acc_move;
1299  int *prev_run_move;
1300  int *num_move;
1301  int *move_type;
1302  char **move_name;
1303
1304  int num_move_nd_r;
1305  int num_move_br_r;
1306  int num_move_nd_t;
1307  int num_move_nu;
1308  int num_move_clock_r;
1309  int num_move_tree_height;
1310  int num_move_subtree_height;
1311  int num_move_kappa;
1312  int num_move_tree_rates;
1313  int num_move_subtree_rates;
1314  int num_move_updown_nu_cr;
1315  int num_move_updown_t_cr;
1316  int num_move_updown_t_br;
1317  int num_move_ras;
1318  int num_move_cov_rates;
1319  int num_move_cov_switch;
1320  int num_move_birth_rate;
1321  int num_move_jump_calibration;
1322  int num_move_geo_lambda;
1323  int num_move_geo_sigma;
1324  int num_move_geo_tau;
1325  int num_move_geo_updown_tau_lbda;
1326  int num_move_geo_updown_lbda_sigma;
1327
1328  int         nd_t_digits;
1329  int *monitor;
1330
1331
1332
1333  char *out_filename;
1334
1335  time_t t_beg;
1336  time_t t_cur;
1337  time_t t_last_print;
1338
1339  FILE *out_fp_stats;
1340  FILE *out_fp_trees;
1341  FILE *out_fp_means;
1342  FILE *out_fp_last;
1343  FILE *out_fp_constree;
1344  FILE *in_fp_par;
1345
1346  int *adjust_tuning;
1347  int n_moves;
1348  int use_data;
1349  int randomize;
1350  int norm_freq;
1351  int run;
1352  int chain_len;
1353  int sample_interval;
1354  int chain_len_burnin;
1355  int print_every;
1356  int is_burnin;
1357
1358  phydbl max_tune;
1359  phydbl min_tune;
1360
1361  phydbl *old_param_val;
1362  phydbl *new_param_val;
1363
1364  phydbl *sum_val;
1365  phydbl *sum_valsq;
1366  phydbl *sum_curval_nextval;
1367  phydbl *ess;
1368  phydbl *first_val;
1369  int    *ess_run;
1370  int    *start_ess;
1371
1372  int is; /* Importance sampling? Yes or NO */
1373}t_mcmc;
1374
1375/*!********************************************************/
1376
1377typedef struct __Tpart {
1378  int *ns;         /*! number of states for each partition (e.g., 2, 4, 3) */
1379  int *cum_ns;     /*! cumulative number of states (e.g., 0, 2, 6) */
1380  int ns_max;      /*! maximum number of states */
1381  int ns_min;      /*! minimum number of states */
1382  int n_partitions; /*! number of partitions */
1383  struct __Eigen    *eigen;
1384}part;
1385
1386/*!********************************************************/
1387
1388typedef struct __Tnexcom {
1389  char *name;
1390  int nparm;
1391  int nxt_token_t;
1392  int cur_token_t;
1393  struct __Tnexparm **parm;
1394}nexcom;
1395
1396/*!********************************************************/
1397
1398typedef struct __Tnexparm {
1399  char *name;
1400  char *value;
1401  int nxt_token_t;
1402  int cur_token_t;
1403  int (*fp)(char *, struct __Tnexparm *, struct __Option *);
1404  struct __Tnexcom *com;
1405}nexparm;
1406
1407/*!********************************************************/
1408
1409typedef struct __ParamInt {
1410  int val;
1411}t_param_int;
1412
1413/*!********************************************************/
1414
1415typedef struct __ParamDbl {
1416  phydbl val;
1417}t_param_dbl;
1418
1419/*!********************************************************/
1420
1421typedef struct __XML_node {
1422
1423  struct __XML_attr *attr;   // Pointer to the first element of a list of attributes
1424  int n_attr;                // Number of attributes
1425  struct __XML_node      *next;   // Next sibling
1426  struct __XML_node      *prev;   // Previous sibling
1427  struct __XML_node    *parent; // Parent of this node
1428  struct __XML_node     *child;  // Child of this node
1429  char *id;
1430  char *name;
1431  char *value;
1432  struct __Generic_Data_Structure *ds; // Pointer to a data strucuture. Can be a scalar, a vector, anything.
1433}xml_node;
1434
1435/*!********************************************************/
1436
1437typedef struct __Generic_Data_Structure {
1438  void *obj;
1439  struct __Generic_Data_Structure *next;
1440}t_ds;
1441
1442
1443/*!********************************************************/
1444
1445typedef struct __XML_attr {
1446  char *name;
1447  char *value;
1448  struct __XML_attr *next; // Next attribute
1449  struct __XML_attr *prev; // Previous attribute
1450}xml_attr;
1451
1452/*!********************************************************/
1453
1454typedef struct __Calibration {
1455  phydbl *proba; // Probability of this calibration (set by the user and fixed throughout)
1456  phydbl lower; // lower bound
1457  phydbl upper; // upper bound
1458  int cur_applies_to;
1459  phydbl calib_proba;
1460  struct __Node **all_applies_to;
1461  int n_all_applies_to;
1462  struct __Calibration *next;
1463  struct __Calibration *prev;
1464}t_cal;
1465
1466/*!********************************************************/
1467
1468typedef struct __Phylogeo{
1469  phydbl               *cov; // Covariance of migrations (n_dim x n_dim)
1470  phydbl             *r_mat; // R matrix. Gives the rates of migrations between locations. See article.
1471  phydbl             *f_mat; // F matrix. See article.
1472  int                *occup; // Vector giving the number of lineages that occupy each location
1473  phydbl           *ldscape; // Coordinates of the locations
1474  int                  *loc; // Location for each lineage
1475  int          *loc_beneath; // Gives the location occupied beneath each node in the tree
1476  int            ldscape_sz; // Landscape size: number of locations
1477  int                 n_dim; // Dimension of the data (e.g., longitude + lattitude -> n_dim = 2)
1478  int           update_fmat;
1479
1480  phydbl              sigma; // Dispersal parameter
1481  phydbl          min_sigma;
1482  phydbl          max_sigma;
1483  phydbl       sigma_thresh; // beyond sigma_thresh, there is no dispersal bias.
1484
1485  phydbl               lbda; // Competition parameter
1486  phydbl           min_lbda;
1487  phydbl           max_lbda;
1488
1489  phydbl              c_lnL;
1490 
1491  struct __Node **sorted_nd; // Table of nodes sorted wrt their heights.
1492
1493  phydbl                tau; // overall migration rate parameter
1494  phydbl            min_tau;
1495  phydbl            max_tau;
1496
1497}t_geo;
1498
1499/*!********************************************************/
1500/*!********************************************************/
1501/*!********************************************************/
1502/*!********************************************************/
1503/*!********************************************************/
1504
1505void Unroot_Tree(char **subtrees);
1506void Init_Tree(t_tree *tree,int n_otu);
1507void Init_Edge_Light(t_edge *b,int num);
1508void Init_Node_Light(t_node *n,int num);
1509void Make_Edge_Dirs(t_edge *b,t_node *a,t_node *d,t_tree *tree);
1510void Init_NNI(nni *a_nni);
1511void Init_Nexus_Format(nexcom **com);
1512void Restrict_To_Coding_Position(align **data,option *io);
1513void Uppercase(char *ch);
1514void Lowercase(char *ch);
1515calign *Compact_Data(align **data,option *io);
1516calign *Compact_Cdata(calign *data,option *io);
1517void Traverse_Prefix_Tree(int site,int seqnum,int *patt_num,int *n_patt,align **data,option *io,pnode *n);
1518pnode *Create_Pnode(int size);
1519void Get_Base_Freqs(calign *data);
1520void Get_AA_Freqs(calign *data);
1521void Swap_Nodes_On_Edges(t_edge *e1,t_edge *e2,int swap,t_tree *tree);
1522void Connect_Edges_To_Nodes_Recur(t_node *a,t_node *d,t_tree *tree);
1523void Connect_One_Edge_To_Two_Nodes(t_node *a,t_node *d,t_edge *b,t_tree *tree);
1524void Update_Dirs(t_tree *tree);
1525void Exit(char *message);
1526void *mCalloc(int nb,size_t size);
1527void *mRealloc(void *p,int nb,size_t size);
1528int Sort_Phydbl_Decrease(const void *a,const void *b);
1529void Qksort_Int(int *A,int *B,int ilo,int ihi);
1530void Qksort(phydbl *A,phydbl *B,int ilo,int ihi);
1531void Qksort_Matrix(phydbl **A,int col,int ilo,int ihi);
1532void Order_Tree_Seq(t_tree *tree,align **data);
1533char *Add_Taxa_To_Constraint_Tree(FILE *fp,calign *cdata);
1534void Check_Constraint_Tree_Taxa_Names(t_tree *tree,calign *cdata);
1535void Order_Tree_CSeq(t_tree *tree,calign *cdata);
1536void Init_Mat(matrix *mat,calign *data);
1537void Copy_Tax_Names_To_Tip_Labels(t_tree *tree,calign *data);
1538void Share_Lk_Struct(t_tree *t_full,t_tree *t_empt);
1539void Share_Spr_Struct(t_tree *t_full,t_tree *t_empt);
1540void Share_Pars_Struct(t_tree *t_full,t_tree *t_empt);
1541int Sort_Edges_NNI_Score(t_tree *tree,t_edge **sorted_edges,int n_elem);
1542int Sort_Edges_Depth(t_tree *tree,t_edge **sorted_edges,int n_elem);
1543void NNI(t_tree *tree,t_edge *b_fcus,int do_swap);
1544void NNI_Pars(t_tree *tree,t_edge *b_fcus,int do_swap);
1545void Swap(t_node *a,t_node *b,t_node *c,t_node *d,t_tree *tree);
1546void Update_All_Partial_Lk(t_edge *b_fcus,t_tree *tree);
1547void Update_SubTree_Partial_Lk(t_edge *b_fcus,t_node *a,t_node *d,t_tree *tree);
1548void Copy_Seq_Names_To_Tip_Labels(t_tree *tree,calign *data);
1549calign *Copy_Cseq(calign *ori,option *io);
1550int Filexists(char *filename);
1551matrix *K80_dist(calign *data,phydbl g_shape);
1552matrix *JC69_Dist(calign *data,t_mod *mod);
1553matrix *Hamming_Dist(calign *data,t_mod *mod);
1554int Is_Invar(int patt_num,int stepsize,int datatype,calign *data);
1555int Is_Ambigu(char *state,int datatype,int stepsize);
1556void Check_Ambiguities(calign *data,int datatype,int stepsize);
1557int Get_State_From_Ui(int ui,int datatype);
1558int Assign_State(char *c,int datatype,int stepsize);
1559char Reciproc_Assign_State(int i_state,int datatype);
1560int Assign_State_With_Ambiguity(char *c,int datatype,int stepsize);
1561void Clean_Tree_Connections(t_tree *tree);
1562void Bootstrap(t_tree *tree);
1563void Br_Len_Involving_Invar(t_tree *tree);
1564void Br_Len_Not_Involving_Invar(t_tree *tree);
1565void Getstring_Stdin(char *s);
1566phydbl Num_Derivatives_One_Param(phydbl (*func)(t_tree *tree), t_tree *tree,
1567                                 phydbl f0, phydbl *param, int which, int n_param, phydbl stepsize, int logt,
1568                                 phydbl *err, int precise, int is_positive);
1569phydbl Num_Derivatives_One_Param_Nonaligned(phydbl (*func)(t_tree *tree), t_tree *tree,
1570                                            phydbl f0, phydbl **param, int which, int n_param, phydbl stepsize, int logt,
1571                                            phydbl *err, int precise, int is_positive);
1572int Num_Derivative_Several_Param(t_tree *tree,phydbl *param,int n_param,phydbl stepsize,int logt,phydbl(*func)(t_tree *tree),phydbl *derivatives, int is_positive);
1573int Num_Derivative_Several_Param_Nonaligned(t_tree *tree, phydbl **param, int n_param, phydbl stepsize, int logt,
1574                                            phydbl (*func)(t_tree *tree), phydbl *derivatives, int is_positive);
1575int Compare_Two_States(char *state1,char *state2,int state_size);
1576void Copy_One_State(char *from,char *to,int state_size);
1577void Copy_Dist(phydbl **cpy,phydbl **orig,int n);
1578t_mod *Copy_Model(t_mod *ori);
1579void Record_Model(t_mod *ori,t_mod *cpy);
1580void Set_Defaults_Input(option *io);
1581void Set_Defaults_Model(t_mod *mod);
1582void Set_Defaults_Optimiz(t_opt *s_opt);
1583void Test_Node_Table_Consistency(t_tree *tree);
1584void Get_Bip(t_node *a,t_node *d,t_tree *tree);
1585void Alloc_Bip(t_tree *tree);
1586int Sort_Phydbl_Increase(const void *a,const void *b);
1587int Sort_String(const void *a,const void *b);
1588int Compare_Bip(t_tree *tree1,t_tree *tree2,int on_existing_edges_only);
1589void Match_Tip_Numbers(t_tree *tree1,t_tree *tree2);
1590void Test_Multiple_Data_Set_Format(option *io);
1591int Are_Compatible(char *statea,char *stateb,int stepsize,int datatype);
1592void Hide_Ambiguities(calign *data);
1593void Copy_Tree(t_tree *ori,t_tree *cpy);
1594void Prune_Subtree(t_node *a,t_node *d,t_edge **target,t_edge **residual,t_tree *tree);
1595void Graft_Subtree(t_edge *target,t_node *link,t_edge *residual,t_tree *tree);
1596void Reassign_Node_Nums(t_node *a,t_node *d,int *curr_ext_node,int *curr_int_node,t_tree *tree);
1597void Reassign_Edge_Nums(t_node *a,t_node *d,int *curr_br,t_tree *tree);
1598void Find_Mutual_Direction(t_node *n1,t_node *n2,short int *dir_n1_to_n2,short int *dir_n2_to_n1);
1599void Update_Dir_To_Tips(t_node *a,t_node *d,t_tree *tree);
1600void Fill_Dir_Table(t_tree *tree);
1601int Get_Subtree_Size(t_node *a,t_node *d);
1602void Fast_Br_Len(t_edge *b,t_tree *tree,int approx);
1603void Init_Eigen_Struct(eigen *this);
1604phydbl Triple_Dist(t_node *a,t_tree *tree,int approx);
1605void Make_Symmetric(phydbl **F,int size);
1606void Round_Down_Freq_Patt(phydbl **F,t_tree *tree);
1607phydbl Get_Sum_Of_Cells(phydbl *F,t_tree *tree);
1608void Divide_Cells(phydbl **F,phydbl div,t_tree *tree);
1609void Divide_Mat_By_Vect(phydbl **F,phydbl *vect,int size);
1610void Multiply_Mat_By_Vect(phydbl **F,phydbl *vect,int size);
1611void Found_In_Subtree(t_node *a,t_node *d,t_node *target,int *match,t_tree *tree);
1612void Get_List_Of_Target_Edges(t_node *a,t_node *d,t_edge **list,int *list_size,t_tree *tree);
1613void Fix_All(t_tree *tree);
1614void Record_Br_Len(t_tree *tree);
1615void Restore_Br_Len(t_tree *tree);
1616void Get_Dist_Btw_Edges(t_node *a,t_node *d,t_tree *tree);
1617void Detect_Polytomies(t_edge *b,phydbl l_thresh,t_tree *tree);
1618void Get_List_Of_Nodes_In_Polytomy(t_node *a,t_node *d,t_node ***list,int *size_list);
1619void Check_Path(t_node *a,t_node *d,t_node *target,t_tree *tree);
1620void Connect_Two_Nodes(t_node *a,t_node *d);
1621void Get_List_Of_Adjacent_Targets(t_node *a,t_node *d,t_node ***node_list,t_edge ***edge_list,int *list_size);
1622void Sort_List_Of_Adjacent_Targets(t_edge ***list,int list_size);
1623t_node *Common_Nodes_Btw_Two_Edges(t_edge *a,t_edge *b);
1624int KH_Test(phydbl *site_lk_M1,phydbl *site_lk_M2,t_tree *tree);
1625void Random_Tree(t_tree *tree);
1626void Reorganize_Edges_Given_Lk_Struct(t_tree *tree);
1627void Random_NNI(int n_moves,t_tree *tree);
1628void Fill_Missing_Dist(matrix *mat);
1629void Fill_Missing_Dist_XY(int x,int y,matrix *mat);
1630phydbl Least_Square_Missing_Dist_XY(int x,int y,phydbl dxy,matrix *mat);
1631void Check_Memory_Amount(t_tree *tree);
1632int Get_State_From_P_Lk(phydbl *p_lk,int pos,t_tree *tree);
1633int Get_State_From_P_Pars(short int *p_pars,int pos,t_tree *tree);
1634void Check_Dirs(t_tree *tree);
1635void Warn_And_Exit(char *s);
1636void Randomize_Sequence_Order(calign *cdata);
1637void Update_Root_Pos(t_tree *tree);
1638void Add_Root(t_edge *target,t_tree *tree);
1639void Update_Ancestors(t_node *a,t_node *d,t_tree *tree);
1640#if (defined PHYTIME || defined SERGEII)
1641t_tree *Generate_Random_Tree_From_Scratch(int n_otu,int rooted);
1642#endif
1643void Random_Lineage_Rates(t_node *a,t_node *d,t_edge *b,phydbl stick_prob,phydbl *rates,int curr_rate,int n_rates,t_tree *tree);
1644t_edge *Find_Edge_With_Label(char *label,t_tree *tree);
1645void Evolve(calign *data,t_mod *mod,t_tree *tree);
1646int Pick_State(int n,phydbl *prob);
1647void Evolve_Recur(t_node *a,t_node *d,t_edge *b,int a_state,int r_class,int site_num,calign *gen_data,t_mod *mod,t_tree *tree);
1648void Site_Diversity(t_tree *tree);
1649void Site_Diversity_Post(t_node *a,t_node *d,t_edge *b,t_tree *tree);
1650void Site_Diversity_Pre(t_node *a,t_node *d,t_edge *b,t_tree *tree);
1651void Subtree_Union(t_node *n,t_edge *b_fcus,t_tree *tree);
1652void Binary_Decomposition(int value,int *bit_vect,int size);
1653void Print_Diversity_Header(FILE *fp,t_tree *tree);
1654phydbl Univariate_Kernel_Density_Estimate(phydbl where,phydbl *x,int sample_size);
1655phydbl Multivariate_Kernel_Density_Estimate(phydbl *where,phydbl **x,int sample_size,int vect_size);
1656phydbl Var(phydbl *x,int n);
1657phydbl Mean(phydbl *x,int n);
1658void Best_Of_NNI_And_SPR(t_tree *tree);
1659int Polint(phydbl *xa,phydbl *ya,int n,phydbl x,phydbl *y,phydbl *dy);
1660void JF(t_tree *tree);
1661t_tree *Dist_And_BioNJ(calign *cdata,t_mod *mod,option *io);
1662void Add_BioNJ_Branch_Lengths(t_tree *tree,calign *cdata,t_mod *mod);
1663char *Bootstrap_From_String(char *s_tree,calign *cdata,t_mod *mod,option *io);
1664char *aLRT_From_String(char *s_tree,calign *cdata,t_mod *mod,option *io);
1665void Prepare_Tree_For_Lk(t_tree *tree);
1666void Find_Common_Tips(t_tree *tree1,t_tree *tree2);
1667phydbl Get_Tree_Size(t_tree *tree);
1668void Dist_To_Root_Pre(t_node *a,t_node *d,t_edge *b,t_tree *tree);
1669void Dist_To_Root(t_node *n_root,t_tree *tree);
1670char *Basename(char *path);
1671t_node *Find_Lca_Pair_Of_Nodes(t_node *n1,t_node *n2,t_tree *tree);
1672t_node *Find_Lca_Clade(t_node **node_list,int node_list_size,t_tree *tree);
1673int Get_List_Of_Ancestors(t_node *ref_node,t_node **list,int *size,t_tree *tree);
1674int Edge_Num_To_Node_Num(int edge_num,t_tree *tree);
1675void Time_To_Branch(t_tree *tree);
1676void Time_To_Branch_Pre(t_node *a,t_node *d,t_tree *tree);
1677void Branch_Lengths_To_Rate_Lengths(t_tree *tree);
1678void Branch_Lengths_To_Rate_Lengths_Pre(t_node *a,t_node *d,t_tree *tree);
1679int Find_Clade(char **tax_name_list,int list_size,t_tree *tree);
1680void Find_Clade_Pre(t_node *a,t_node *d,int *tax_num_list,int list_size,int *num,t_tree *tree);
1681t_edge *Find_Root_Edge(FILE *fp_input_tree,t_tree *tree);
1682void Copy_Tree_Topology_With_Labels(t_tree *ori,t_tree *cpy);
1683void Set_Model_Name(t_mod *mod);
1684void Adjust_Min_Diff_Lk(t_tree *tree);
1685void Translate_Tax_Names(char **tax_names,t_tree *tree);
1686void Skip_Comment(FILE *fp);
1687void Get_Best_Root_Position(t_tree *tree);
1688void Get_Best_Root_Position_Post(t_node *a,t_node *d,int *has_outgrp,t_tree *tree);
1689void Get_Best_Root_Position_Pre(t_node *a,t_node *d,t_tree *tree);
1690void Get_OutIn_Scores(t_node *a,t_node *d);
1691int Check_Sequence_Name(char *s);
1692int Scale_Subtree_Height(t_node *a,phydbl K,phydbl floor,int *n_nodes,t_tree *tree);
1693void Scale_Node_Heights_Post(t_node *a,t_node *d,phydbl K,phydbl floor,int *n_nodes,t_tree *tree);
1694int Scale_Subtree_Rates(t_node *a,phydbl mult,int *n_nodes,t_tree *tree);
1695void Check_Br_Len_Bounds(t_tree *tree);
1696int Scale_Subtree_Rates_Post(t_node *a,t_node *d,phydbl mult,int *n_nodes,t_tree *tree);
1697void Get_Node_Ranks(t_tree *tree);
1698void Get_Node_Ranks_Pre(t_node *a,t_node *d,t_tree *tree);
1699void Log_Br_Len(t_tree *tree);
1700phydbl Diff_Lk_Norm_At_Given_Edge(t_edge *b,t_tree *tree);
1701void Adjust_Variances(t_tree *tree);
1702phydbl Effective_Sample_Size(phydbl first_val,phydbl last_val,phydbl sum,phydbl sumsq,phydbl sumcurnext,int n);
1703void Rescale_Free_Rate_Tree(t_tree *tree);
1704phydbl Rescale_Br_Len_Multiplier_Tree(t_tree *tree);
1705phydbl Unscale_Br_Len_Multiplier_Tree(t_tree *tree);
1706phydbl Reflect(phydbl x,phydbl l,phydbl u);
1707int Are_Equal(phydbl a,phydbl b,phydbl eps);
1708int Check_Topo_Constraints(t_tree *big_tree,t_tree *small_tree);
1709void Prune_Tree(t_tree *big_tree,t_tree *small_tree);
1710void Match_Nodes_In_Small_Tree(t_tree *small_tree,t_tree *big_tree);
1711void Find_Surviving_Edges_In_Small_Tree(t_tree *small_tree,t_tree *big_tree);
1712void Find_Surviving_Edges_In_Small_Tree_Post(t_node *a,t_node *d,t_tree *small_tree,t_tree *big_tree);
1713void Set_Taxa_Id_Ranking(t_tree *tree);
1714void Get_Edge_Binary_Coding_Number(t_tree *tree);
1715void Make_Ancestral_Seq(t_tree *tree);
1716void Make_MutMap(t_tree *tree);
1717int Get_Mutmap_Val(int edge,int site,int mut,t_tree *tree);
1718void Get_Mutmap_Coord(int idx,int *edge,int *site,int *mut,t_tree *tree);
1719void Copy_Edge_Lengths(t_tree *to,t_tree *from);
1720void Init_Scalar_Dbl(scalar_dbl *p);
1721void Init_Scalar_Int(scalar_int *p);
1722void Init_Vect_Dbl(int len,vect_dbl *p);
1723void Init_Vect_Int(int len,vect_int *p);
1724char *To_Lower_String(char *in);
1725phydbl String_To_Dbl(char *string);
1726char *To_Upper_String(char *in);
1727void Connect_CSeqs_To_Nodes(calign *cdata, t_tree *tree);
1728void Switch_Eigen(int state, t_mod *mod);
1729void Joint_Proba_States_Left_Right(phydbl *Pij, phydbl *p_lk_left, phydbl *p_lk_rght, 
1730                                   vect_dbl *pi, int scale_left, int scale_rght, 
1731                                   phydbl *F, int n, int site, t_tree *tree);
1732void Set_Both_Sides(int yesno, t_tree *tree);
1733void Set_D_States(calign *data, int datatype, int stepsize);
1734void Branch_To_Time(t_tree *tree);
1735void Branch_To_Time_Pre(t_node *a, t_node *d, t_tree *tree);
1736void Path_Length(t_node *dep, t_node *arr, phydbl *len, t_tree *tree);
1737phydbl *Dist_Btw_Tips(t_tree *tree);
1738void Random_SPRs_On_Rooted_Tree(t_tree *tree);
1739void Set_P_Lk_One_Side(phydbl **Pij, phydbl **p_lk,  int **sum_scale, t_node *d, t_edge *b, t_tree *tree);
1740void Set_All_P_Lk(t_node **n_v1, t_node **n_v2,
1741                                 phydbl **p_lk , int **sum_scale , int **p_lk_loc,
1742                  phydbl **Pij1, phydbl **p_lk1, int **sum_scale1,
1743                  phydbl **Pij2, phydbl **p_lk2, int **sum_scale2,
1744                  t_node *d, t_edge *b, t_tree *tree);
1745
1746void Optimum_Root_Position_IL_Model(t_tree *tree);
1747void Set_Br_Len_Var(t_tree *tree);
1748void Check_Br_Lens(t_tree *tree);
1749
1750#include "xml.h"
1751#include "free.h"
1752#include "spr.h"
1753#include "lk.h"
1754#include "optimiz.h"
1755#include "models.h"
1756#include "bionj.h"
1757#include "simu.h"
1758#include "eigen.h"
1759#include "pars.h"
1760#include "alrt.h"
1761#include "stats.h"
1762#include "help.h"
1763#include "io.h"
1764#include "make.h"
1765#include "nexus.h"
1766#include "init.h"
1767#include "geo.h"
1768
1769#ifdef MPI
1770#include "mpi_boot.h"
1771#endif
1772
1773#ifdef MG
1774#include "mg.h"
1775#endif
1776
1777#ifdef TIME
1778#include "times.h"
1779#include "rates.h"
1780#endif
1781
1782#ifdef _NOT_NEEDED_A_PRIORI
1783#include "m4.h"
1784#endif
1785
1786
1787#endif
Note: See TracBrowser for help on using the repository browser.