1 /*
2 
3 PhyML:  a program that  computes maximum likelihood phylogenies from
4 DNA or AA homologous sequences.
5 
6 Copyright (C) Stephane Guindon. Oct 2003 onward.
7 
8 All parts of the source except where indicated are distributed under
9 the GNU public licence. See http://www.opensource.org for details.
10 
11 */
12 
13 #include <config.h>
14 
15 #ifndef PHYREX_H
16 #define PHYREX_H
17 
18 #include "utilities.h"
19 
20 void PHYREX_XML(char *xml_filename);
21 int PHYREX_Main(int argc, char **argv);
22 int PHYREX_Main_Simulate(int argc, char **argv);
23 phydbl PHYREX_Lk(t_tree *tree);
24 phydbl PHYREX_Lk_RW(t_tree *tree);
25 phydbl PHYREX_Wrap_Lk(t_edge *b, t_tree *tree, supert_tree *stree);
26 phydbl *PHYREX_MCMC(t_tree *tree);
27 int PHYREX_Is_In_Disk(t_geo_coord *coord, t_dsk *disk, t_phyrex_mod *mmod);
28 void PHYREX_Remove_Disk(t_dsk *disk);
29 void PHYREX_Insert_Disk(t_dsk *ins, t_tree *tree);
30 t_ldsk *PHYREX_Prev_Coal_Lindisk(t_ldsk *t);
31 t_ldsk *PHYREX_Next_Coal_Lindisk(t_ldsk *t);
32 int PHYREX_Get_Next_Direction(t_ldsk *young, t_ldsk *old);
33 void PHYREX_Update_Lindisk_List(t_tree *tree);
34 void PHYREX_Update_Lindisk_List_Pre(t_dsk *disk, t_tree *tree);
35 /* void PHYREX_Update_Lindisk_List(phydbl time, t_ldsk **list, int *pos, t_dsk *disk); */
36 /* void PHYREX_Update_Lindisk_List_Pre(t_ldsk *ldsk, phydbl time, t_ldsk **list, int *pos); */
37 void PHYREX_Connect_Ldsk_Given_Disk(t_dsk **disk, int n_disk, t_ldsk *y_ldsk, t_ldsk *o_ldsk, int dir_o_y);
38 void PHYREX_Print_Struct(char sign, t_tree *tree);
39 phydbl PHYREX_Uniform_Path_Density(t_ldsk *y_ldsk, t_ldsk *o_ldsk, t_tree *tree);
40 int PHYREX_Check_Struct(t_tree *tree);
41 void PHYREX_Store_Geo_Coord(t_geo_coord *t);
42 void PHYREX_Restore_Geo_Coord(t_geo_coord *t);
43 int PHYREX_Total_Number_Of_Intervals(t_tree *tree);
44 int PHYREX_Total_Number_Of_Coal_Disks(t_tree *tree);
45 int PHYREX_Total_Number_Of_Hit_Disks(t_tree *tree);
46 phydbl PHYREX_Log_Dunif_Rectangle_Overlap(t_ldsk *ldsk, t_dsk *disk, t_phyrex_mod *mmod);
47 phydbl PHYREX_Runif_Rectangle_Overlap(t_ldsk *ldsk, t_dsk *disk, t_phyrex_mod *mod);
48 int PHYREX_One_New_Traj(t_ldsk *y_ldsk, t_ldsk *o_ldsk, int dir_o_y, t_dsk *xtra_dsk, int n_cur_disk, t_tree *tree);
49 phydbl PHYREX_Wrap_Prior_Radius(t_edge *e, t_tree *tree, supert_tree *st);
50 phydbl PHYREX_LnPrior_Radius(t_tree *tree);
51 void PHYREX_Initial_Ldsk_Pos(t_tree *tree);
52 phydbl PHYREX_Min_Radius(t_tree *tree);
53 void PHYREX_Get_Min_Max_Disk_Given_Ldsk(t_dsk *disk, phydbl **min, phydbl **max, t_tree *tree);
54 void PHYREX_Get_Min_Max_Ldsk_Given_Disk(t_ldsk *ldsk, phydbl **min, phydbl **max, t_tree *tree);
55 void PHYREX_One_New_Traj_Given_Disk(t_ldsk *y_ldsk, t_ldsk *o_ldsk, t_tree *tree);
56 void PHYREX_Update_Disk_Ldsk_Subtree(t_ldsk *root_ldsk, t_tree *tree);
57 void PHYREX_Update_Disk_Ldsk_Subtree_Pre(t_ldsk *old_ldsk, t_ldsk *young_ldsk, t_ldsk *root_ldsk, t_tree *tree);
58 void PHYREX_Restore_Disk_Ldsk_Subtree(t_ldsk *root_ldsk, t_tree *tree);
59 void PHYREX_Restore_Disk_Ldsk_Subtree_Pre(t_ldsk *old_ldsk, t_ldsk *young_ldsk, t_tree *tree);
60 void PHYREX_Proposal_Disk_Ldsk_Subtree(t_ldsk *root_ldsk, phydbl *logdens, t_tree *tree);
61 void PHYREX_Proposal_Disk_Ldsk_Subtree_Pre(t_ldsk *old_ldsk, t_ldsk *young_ldsk, t_ldsk *root_ldsk, phydbl *logdens, t_tree *tree);
62 phydbl PHYREX_LnPrior_Lbda(t_tree *tree);
63 phydbl PHYREX_LnPrior_Mu(t_tree *tree);
64 void PHYREX_Ldsk_To_Tree(t_tree *tree);
65 void PHYREX_Ldsk_To_Tree_Post(t_node *a, t_ldsk *ldsk, int *available, t_tree *tree);
66 phydbl PHYREX_Rnorm_Trunc(t_ldsk *ldsk, t_dsk *disk, t_phyrex_mod *mod);
67 void PHYREX_Remove_Lindisk_Next(t_ldsk *ldsk, t_ldsk *rm);
68 phydbl *PHYREX_Mean_Pairwise_Distance_Between_Lineage_Locations(t_tree *tree);
69 phydbl PHYREX_Random_Select_Time_Between_Jumps(t_tree *tree);
70 int PHYREX_Is_In_Ldscape(t_ldsk *ldsk, t_phyrex_mod *mmod);
71 void PHYREX_Update_Lindisk_List_Core(t_dsk *disk, t_tree *tree);
72 phydbl PHYREX_Mean_Time_Between_Events(t_tree *tree);
73 void PHYREX_All_Pairs_Coal_Times_Dist(t_tree *tree);
74 void PHYREX_Rand_Pairs_Coal_Times_Dist(t_tree *tree);
75 void PHYREX_Read_Tip_Coordinates(t_tree *tree);
76 void MCMC_PHYREX_Sigsq(t_tree *tree);
77 phydbl PHYREX_LnPrior_Sigsq(t_tree *tree);
78 phydbl PHYREX_Tree_Height(t_tree *tree);
79 int PHYREX_Random_Insert_Ldsk_In_Next_List(t_ldsk *ins, t_ldsk *where);
80 void PHYREX_Insert_Ldsk_In_Next_List(t_ldsk *ins, int pos, t_ldsk *where);
81 t_ldsk *PHYREX_Remove_Path(t_ldsk *beg, t_ldsk *end, int *pos_end, t_tree *tree);
82 void PHYREX_Insert_Path(t_ldsk *beg, t_ldsk *end, t_ldsk *path, int pos, t_tree *tree);
83 phydbl PHYREX_Time_Tree_Length(t_tree *tree);
84 void PHYREX_Time_Tree_Length_Pre(t_ldsk *a, t_ldsk *d, phydbl *len, t_tree *tree);
85 int PHYREX_Is_On_Path(t_ldsk *target, t_ldsk *beg, t_ldsk *end);
86 int PHYREX_Path_Len(t_ldsk *beg, t_ldsk *end);
87 phydbl PHYREX_Lk_Core(t_dsk *disk, t_tree *tree);
88 phydbl PHYREX_Lk_RW_Core(t_dsk *disk, t_tree *tree);
89 void PHYREX_Print_Disk_Lk(t_tree *tree);
90 t_ldsk *PHYREX_Find_Lca_Pair_Of_Ldsk(t_ldsk *n1, t_ldsk *n2, t_tree *tree);
91 void PHYREX_Get_List_Of_Ancestors(t_ldsk *start, t_ldsk ***list, int *len, t_tree *tree);
92 phydbl PHYREX_Dist_To_Lca(t_ldsk *d, t_ldsk *lca);
93 phydbl PHYREX_Dist_Between_Two_Ldsk(t_ldsk *n1,  t_ldsk *n2, t_tree *tree);
94 phydbl PHYREX_Lk_Range(t_dsk *young, t_dsk *old, t_tree *tree);
95 phydbl PHYREX_Lk_RW_Range(t_dsk *young, t_dsk *old, t_tree *tree);
96 void PHYREX_Print_MultiTypeTree_Config_File(int n_sites, char *filename, t_tree *tree);
97 int PHYREX_Number_Of_Sampled_Demes(t_tree *tree);
98 void PHYREX_Tree_To_Ldsk(t_tree *tree);
99 void PHYREX_Tree_To_Ldsk_Post(t_node *a, t_node *d, t_dsk *a_disk, t_tree *tree);
100 void PHYREX_Make_And_Connect_Tip_Disks(t_tree *tree);
101 void PHYREX_Simulate_Disk_And_Node_Times(t_tree *tree);
102 int PHYREX_Number_Of_Outgoing_Ldsks(t_dsk *disk);
103 t_ldsk *PHYREX_Random_Select_Outgoing_Ldsk(t_dsk *disk);
104 void PHYREX_Strip_And_Reconnect_Tree(t_tree *tree);
105 int PHYREX_Scale_All(phydbl scale, t_dsk *start_disk, t_tree *tree);
106 void  PHYREX_Update_Lindisk_List_Range(t_dsk *young, t_dsk *old, t_tree *tree);
107 phydbl PHYREX_Lk_Core_Range(t_dsk *young, t_dsk *old, t_tree *tree);
108 int PHYREX_Number_Of_Intervals_Range(t_dsk *young, t_dsk *old, t_tree *tree);
109 void PHYREX_Oldest_Sampled_Disk(t_tree *tree);
110 phydbl PHYREX_Time_Of_Descendants(t_ldsk *ldsk, t_tree *tree);
111 phydbl PHYREX_Time_Of_Prev_Sampled_Disk(t_dsk *disk, t_tree *tree);
112 phydbl PHYREX_Time_Of_Next_Sampled_Disk(t_dsk *disk, t_tree *tree);
113 phydbl PHYREX_Lk_Time_Component(t_tree *tree);
114 phydbl PHYREX_Lk_Space_Component(t_tree *tree);
115 t_ldsk *PHYREX_Find_Ldsk_From_Id(char *id, t_ldsk *root);
116 t_geo_coord *PHYREX_Mean_Next_Loc(t_ldsk *ldsk, t_tree *tree);
117 phydbl PHYREX_Root_To_Tip_Realized_Sigsq(t_tree *tree);
118 phydbl PHYREX_Tip_To_Root_Realized_Sigsq(t_tree *tree);
119 phydbl PHYREX_Realized_Dispersal_Dist(t_tree *tree);
120 phydbl PHYREX_Tip_To_Root_Realized_Bis_Sigsq(t_tree *tree);
121 void PHYREX_Label_Nodes_With_Locations(t_tree *tree);
122 void PHYREX_Label_Edges(t_tree *tree);
123 phydbl PHYREX_Tip_To_Root_Realized_Ter_Sigsq(t_tree *tree);
124 void PHYREX_Remove_All_Disks_Except_Coal_And_Tips(t_tree *tree);
125 phydbl PHYREX_Path_Logdensity(t_ldsk *young, t_ldsk *old, phydbl sd, t_tree *tree);
126 void PHYREX_Sample_Path(t_ldsk *young, t_ldsk *old, phydbl sd, phydbl *global_hr, t_tree *tree);
127 t_ldsk *PHYREX_Generate_Path(t_ldsk *young, t_ldsk *old, phydbl n_evt, phydbl sd, t_tree *tree);
128 void PHYREX_Simulate_Backward_Core(t_dsk *disk,int avoid_multiple_mergers, t_tree *tree);
129 t_tree *PHYREX_Simulate(int n_otu, int n_sites, phydbl w, phydbl h, phydbl  lbda, phydbl rad, phydbl mu, int r_seed, int modid);
130 phydbl PHYREX_Update_Sigsq(t_tree *tree);
131 
132 #endif
133