1 /*
2 ** spr.h: Header file for the SPR routines.
3 **
4 ** Wim Hordijk   Last modified: 28 August 2006
5 */
6 
7 #include <config.h>
8 
9 #ifndef _SPR_H_
10 #define _SPR_H_
11 
12 #include "utilities.h"
13 
14 #define ALL   1
15 #define BEST  2
16 #define ONE   3
17 
18 /*
19 ** _move_: Structure for holding the relevant information for candidate SPR moves.
20 */
21 
22 typedef struct
23 {
24   t_node   *v_prune, *u_prune, *v_n, *v_nx1, *u_n, **path;
25   t_edge   *e_prune, *e_regraft;
26   phydbl  l_connect, l_est[3], delta_lk, d_L, d_up_v, d_un_v;
27   int     dist, rgrft_rank, optim_rank, globl_rank;
28 } _move_;
29 
30 
31 
32 void Init_SPR          (t_tree *tree);
33 void Clean_SPR         (t_tree *tree);
34 void Optim_SPR         (t_tree *tree, int max_size, int method);
35 int  Perform_SPR_Moves (t_tree *tree, int max_size);
36 int  Perform_Best_SPR  (t_tree *tree, int max_size);
37 int  Perform_One_SPR   (t_tree *tree, int max_size);
38 
39 void Prune            (t_edge *e, t_node *v, t_edge **e_connect, t_edge **e_avail,
40 		       t_tree *tree);
41 void Regraft          (t_edge *e, t_node *v, t_edge *avail, t_tree *tree);
42 void PostOrder_v      (t_tree *tree, t_node *v, t_edge *e);
43 void PostOrder_w      (t_tree *tree, t_node *v, t_edge *v_e, t_node *w, t_edge *e);
44 
45 
46 
47 
48 
49 void Speed_Spr(t_tree *tree, phydbl prop_spr, int max_cycles, phydbl delta_lnL);
50 void Global_Spr_Search(t_tree *tree);
51 void Make_Spr_List(t_tree *tree);
52 void Init_One_Spr(t_spr *a_spr);
53 t_spr *Make_One_Spr(t_tree *tree);
54 int Spr(phydbl init_lnL, phydbl prop_spr, t_tree *tree);
55 int Spr_Recur(t_node *a, t_node *d, t_tree *tree);
56 int Test_All_Spr_Targets(t_edge *pulled, t_node *link, t_tree *tree);
57 void Randomize_Spr_List(t_tree *tree);
58 void Test_One_Spr_Target_Recur(t_node *a, t_node *d, t_edge *pulled, t_node *link, t_edge *residual, t_edge *init_target, int *best_found, t_spr *prev_move, t_tree *tree);
59 t_spr *Test_One_Spr_Target(t_edge *b_target, t_edge *b_arrow, t_node *n_link, t_edge *b_residual, t_edge *init_target, t_node *polarity, t_tree *tree);
60 void Apply_Spr_Moves_One_By_One(t_tree *tree);
61 int Try_One_Spr_Move_Triple(t_spr *move, t_tree *tree);
62 int Try_One_Spr_Move_Full(t_spr *move, short int apply_move, t_tree *tree);
63 void Make_Best_Spr(t_tree *tree);
64 void Random_Spr(int n_moves, t_tree *tree);
65 unsigned int Include_One_Spr_To_List_Of_Spr(t_spr **list, int list_size, t_spr *move, t_tree *tree);
66 void Reset_Spr_List(t_spr **list, int size);
67 int Evaluate_List_Of_Regraft_Pos_Triple(t_spr **spr_list, int list_size, t_tree *tree);
68 void Best_Spr(t_tree *tree);
69 int Check_Spr_Move_Validity(t_spr *this_spr_move, t_tree *tree);
70 void Spr_Subtree(t_edge *b, t_node *link, t_tree *tree);
71 void Spr_Pars(int threshold, int n_round_max, t_tree *tree);
72 void Spr_Shuffle(t_tree *tree);
73 void Sort_Spr_List_Depth(t_tree *tree);
74 void Sort_Spr_List_LnL(t_spr **list, int list_size, t_tree *tree);
75 void Spr_Random_Explore(t_tree *tree, phydbl anneal_temp, phydbl prop_spr, int do_rnd, int max_cycles);
76 void Sort_Spr_List_Pars(t_tree *tree);
77 void Spr_List_Of_Trees(t_tree *tree);
78 void Prune_Regraft_Time_Tree(t_tree *tree);
79 void Spr_Pre_Order(t_node *a, t_node *d, t_edge *b, t_tree *tree);
80 
81 
82 
83 #endif  /* _SPR_H_ */
84 
85 
86 /*
87 ** EOF: spr.h
88 */
89