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