3
PHYML : a program that computes maximum likelihood phyLOGenies from
4
DNA or AA homologous sequences
6
Copyright (C) Stephane Guindon. Oct 2003 onward
8
All parts of the source except where indicated are distributed under
9
the GNU public licence. See http://www.opensource.org for details.
16
//////////////////////////////////////////////////////////////
17
//////////////////////////////////////////////////////////////
19
void Free_All_Nodes_Light(t_tree *mixt_tree)
27
For(i,2*tree->n_otu-1) Free_Node(tree->a_nodes[i]);
35
//////////////////////////////////////////////////////////////
36
//////////////////////////////////////////////////////////////
38
void Free_All_Edges_Light(t_tree *mixt_tree)
45
For(i,2*tree->n_otu-1)
47
Free_Scalar_Dbl(tree->a_edges[i]->l);
48
Free_Scalar_Dbl(tree->a_edges[i]->l_old);
49
Free_Scalar_Dbl(tree->a_edges[i]->l_var);
50
Free_Scalar_Dbl(tree->a_edges[i]->l_var_old);
54
For(i,2*tree->n_otu-1) Free_Edge(tree->a_edges[i]);
61
//////////////////////////////////////////////////////////////
62
//////////////////////////////////////////////////////////////
64
void Free_Edge_Labels(t_edge *b)
70
For(i,b->n_labels-(b->n_labels%BLOCK_LABELS)+BLOCK_LABELS) Free(b->labels[i]);
76
//////////////////////////////////////////////////////////////
77
//////////////////////////////////////////////////////////////
79
void Free_Edge(t_edge *b)
85
//////////////////////////////////////////////////////////////
86
//////////////////////////////////////////////////////////////
88
void Free_Edge_Core(t_edge *b)
93
//////////////////////////////////////////////////////////////
94
//////////////////////////////////////////////////////////////
97
void Free_Node(t_node *n)
105
if(n->ori_name) { Free(n->ori_name); n->ori_name = NULL; }
107
/* if(n->name) { Free(n->name); n->name = NULL; } */
108
/* Don't do that: see Copy_Tax_Names_To_Tip_Labels
109
tree->a_nodes[i]->ori_name = tree->a_nodes[i]->name; */
114
//////////////////////////////////////////////////////////////
115
//////////////////////////////////////////////////////////////
118
void Free_Mat(matrix *mat)
140
//////////////////////////////////////////////////////////////
141
//////////////////////////////////////////////////////////////
144
void Free_Partial_Lk(phydbl *p_lk, int len, int n_catg)
151
/* For(j,n_catg) Free((*p_lk)[i][j]); */
152
/* Free((*p_lk)[i]); */
155
/* (*p_lk) = NULL; */
158
//////////////////////////////////////////////////////////////
159
//////////////////////////////////////////////////////////////
162
void Free_Tree(t_tree *mixt_tree)
170
if(tree->mat) Free_Mat(tree->mat);
172
if(tree->short_l) Free(tree->short_l);
173
if(tree->mutmap) Free(tree->mutmap);
175
Free(tree->curr_path);
180
Free_All_Edges_Light(mixt_tree);
181
Free_All_Nodes_Light(mixt_tree);
184
next = mixt_tree->next;
196
//////////////////////////////////////////////////////////////
197
//////////////////////////////////////////////////////////////
200
void Free_Bip(t_tree *tree)
206
For(i,2*tree->n_otu-2)
208
Free(tree->a_nodes[i]->bip_size);
209
For(j,3) Free(tree->a_nodes[i]->bip_node[j]);
210
Free(tree->a_nodes[i]->bip_node);
216
//////////////////////////////////////////////////////////////
217
//////////////////////////////////////////////////////////////
220
void Free_Cseq(calign *data)
228
Free(data->sitepatt);
231
Free(data->c_seq[i]->name);
232
if(data->c_seq[i]->state)
234
Free(data->c_seq[i]->state);
235
Free(data->c_seq[i]->d_state);
236
if(data->c_seq[i]->is_ambigu) Free(data->c_seq[i]->is_ambigu);
238
Free(data->c_seq[i]);
244
//////////////////////////////////////////////////////////////
245
//////////////////////////////////////////////////////////////
248
void Free_Seq(align **d, int n_otu)
256
if(d[i]->is_ambigu) Free(d[i]->is_ambigu);
263
//////////////////////////////////////////////////////////////
264
//////////////////////////////////////////////////////////////
267
void Free_All(align **d, calign *cdata, t_tree *tree)
270
Free_Seq(d,tree->n_otu);
274
//////////////////////////////////////////////////////////////
275
//////////////////////////////////////////////////////////////
277
void Free_SubTree(t_edge *b_fcus, t_node *a, t_node *d, t_tree *tree)
288
Free_SubTree(d->b[i],d,d->v[i],tree);
296
//////////////////////////////////////////////////////////////
297
//////////////////////////////////////////////////////////////
299
void Free_Tree_Ins_Tar(t_tree *tree)
304
//////////////////////////////////////////////////////////////
305
//////////////////////////////////////////////////////////////
307
void Free_Tree_Pars(t_tree *mixt_tree)
315
Free(tree->step_mat);
316
Free(tree->site_pars);
318
For(i,2*tree->n_otu-3) Free_Edge_Pars(tree->a_edges[i]);
322
Free_Edge_Pars_Left(tree->n_root->b[1]);
323
Free_Edge_Pars_Left(tree->n_root->b[2]);
327
Free_Edge_Pars(tree->a_edges[2*tree->n_otu-3]);
328
Free_Edge_Pars(tree->a_edges[2*tree->n_otu-2]);
336
//////////////////////////////////////////////////////////////
337
//////////////////////////////////////////////////////////////
339
void Free_Edge_Pars_Left(t_edge *b)
341
if(b->pars_l) Free(b->pars_l);
342
if(b->ui_l) Free(b->ui_l);
343
if(b->p_pars_l) Free(b->p_pars_l);
346
//////////////////////////////////////////////////////////////
347
//////////////////////////////////////////////////////////////
349
void Free_Edge_Pars_Rght(t_edge *b)
351
if(b->pars_r) Free(b->pars_r);
352
if(b->ui_r) Free(b->ui_r);
353
if(b->p_pars_r) Free(b->p_pars_r);
356
//////////////////////////////////////////////////////////////
357
//////////////////////////////////////////////////////////////
359
void Free_Edge_Pars(t_edge *b)
361
Free_Edge_Pars_Left(b);
362
Free_Edge_Pars_Rght(b);
365
//////////////////////////////////////////////////////////////
366
//////////////////////////////////////////////////////////////
369
void Free_Tree_Lk(t_tree *mixt_tree)
377
Free(tree->c_lnL_sorted);
378
Free(tree->cur_site_lk);
379
Free(tree->old_site_lk);
380
Free(tree->site_lk_cat);
382
For(i,3) Free(tree->log_lks_aLRT[i]);
383
Free(tree->log_lks_aLRT);
385
For(i,MAX(tree->mod->ras->n_catg,tree->mod->n_mixt_classes))
386
Free(tree->log_site_lk_cat[i]);
387
Free(tree->log_site_lk_cat);
389
For(i,2*tree->n_otu-3) Free_Edge_Lk(tree->a_edges[i]);
393
Free(tree->n_root->b[1]->nni);
394
Free(tree->n_root->b[2]->nni);
395
Free(tree->n_root->b[1]->Pij_rr);
396
Free(tree->n_root->b[2]->Pij_rr);
397
Free_Edge_Lk_Left(tree->n_root->b[1]);
398
Free_Edge_Lk_Left(tree->n_root->b[2]);
402
Free_Edge_Lk(tree->a_edges[2*tree->n_otu-3]);
403
Free_Edge_Lk(tree->a_edges[2*tree->n_otu-2]);
411
//////////////////////////////////////////////////////////////
412
//////////////////////////////////////////////////////////////
415
void Free_Node_Lk(t_node *n)
417
/* Free(n->n_ex_nodes); */
420
//////////////////////////////////////////////////////////////
421
//////////////////////////////////////////////////////////////
423
void Free_Edge_Lk_Rght(t_edge *b)
425
Free(b->div_post_pred_rght);
430
if(b->sum_scale_rght) Free(b->sum_scale_rght);
433
if(b->p_lk_tip_r) Free(b->p_lk_tip_r);
435
Free(b->sum_scale_rght_cat);
436
Free(b->patt_id_rght);
437
Free(b->p_lk_loc_rght);
441
//////////////////////////////////////////////////////////////
442
//////////////////////////////////////////////////////////////
444
void Free_Edge_Lk_Left(t_edge *b)
447
Free(b->div_post_pred_left);
452
if(b->sum_scale_left) Free(b->sum_scale_left);
455
if(b->p_lk_tip_l) Free(b->p_lk_tip_l);
457
Free(b->sum_scale_left_cat);
458
Free(b->patt_id_left);
459
Free(b->p_lk_loc_left);
463
//////////////////////////////////////////////////////////////
464
//////////////////////////////////////////////////////////////
466
void Free_Edge_Lk(t_edge *b)
470
Free_Edge_Lk_Left(b);
471
Free_Edge_Lk_Rght(b);
474
//////////////////////////////////////////////////////////////
475
//////////////////////////////////////////////////////////////
477
void Free_Model_Complete(t_mod *mixt_mod)
479
Free_Eigen(mixt_mod->eigen);
480
Free_Rmat(mixt_mod->r_mat);
481
Free_Efrq(mixt_mod->e_frq);
482
Free_Vect_Dbl(mixt_mod->Pij_rr);
483
mixt_mod->r_mat = NULL;
484
mixt_mod->e_frq = NULL;
487
//////////////////////////////////////////////////////////////
488
//////////////////////////////////////////////////////////////
490
void Free_Model_Basic(t_mod *mixt_mod)
494
Free_RAS(mixt_mod->ras);
495
Free_Vect_Dbl(mixt_mod->user_b_freq);
496
Free_Scalar_Dbl(mixt_mod->mr);
497
Free_Scalar_Dbl(mixt_mod->kappa);
498
Free_Scalar_Dbl(mixt_mod->lambda);
499
Free_Scalar_Dbl(mixt_mod->br_len_multiplier);
500
Free_Scalar_Dbl(mixt_mod->e_frq_weight);
501
Free_Scalar_Dbl(mixt_mod->r_mat_weight);
502
Free_String(mixt_mod->modelname);
503
Free_String(mixt_mod->custom_mod_string);
504
Free_String(mixt_mod->aa_rate_mat_file);
524
//////////////////////////////////////////////////////////////
525
//////////////////////////////////////////////////////////////
527
void Free_Vect_Dbl(vect_dbl *v)
538
if(v) next = v->next;
543
//////////////////////////////////////////////////////////////
544
//////////////////////////////////////////////////////////////
546
void Free_Scalar_Dbl(scalar_dbl *v)
555
if(v) next = v->next;
560
//////////////////////////////////////////////////////////////
561
//////////////////////////////////////////////////////////////
563
void Free_String(t_string *ts)
574
if(ts) next = ts->next;
579
//////////////////////////////////////////////////////////////
580
//////////////////////////////////////////////////////////////
582
void Free_Custom_Model(t_mod *mod)
584
if(mod->r_mat->rr->v)
586
Free(mod->r_mat->rr_num->v);
587
Free(mod->r_mat->rr->v);
588
Free(mod->r_mat->rr_val->v);
589
Free(mod->r_mat->n_rr_per_cat->v);
593
//////////////////////////////////////////////////////////////
594
//////////////////////////////////////////////////////////////
596
void Free_Efrq(t_efrq *e_frq)
601
Free(e_frq->pi_unscaled->v);
602
Free(e_frq->pi_unscaled);
604
if(e_frq->next) Free_Efrq(e_frq->next);
609
//////////////////////////////////////////////////////////////
610
//////////////////////////////////////////////////////////////
612
void Free_Rmat(t_rmat *r_mat)
617
Free(r_mat->rr_num->v);
619
Free(r_mat->rr_val->v);
622
Free(r_mat->n_rr_per_cat->v);
623
Free(r_mat->n_rr_per_cat);
627
Free(r_mat->qmat->v);
630
Free(r_mat->qmat_buff->v);
631
Free(r_mat->qmat_buff);
633
if(r_mat->next) Free_Rmat(r_mat->next);
638
//////////////////////////////////////////////////////////////
639
//////////////////////////////////////////////////////////////
641
void Free_RAS(t_ras *ras)
643
if(ras->gamma_r_proba->v)
645
Free(ras->gamma_r_proba->v);
646
Free(ras->gamma_r_proba_unscaled->v);
647
Free(ras->gamma_rr->v);
648
Free(ras->gamma_rr_unscaled->v);
651
Free(ras->gamma_r_proba);
652
Free(ras->skip_rate_cat);
654
Free(ras->gamma_r_proba_unscaled);
656
Free(ras->gamma_rr_unscaled);
657
Free_Scalar_Dbl(ras->pinvar);
658
Free_Scalar_Dbl(ras->alpha);
659
Free_Scalar_Dbl(ras->free_rate_mr);
661
if(ras->next) Free_RAS(ras->next);
667
//////////////////////////////////////////////////////////////
668
//////////////////////////////////////////////////////////////
670
void Free_Model(t_mod *mod)
672
Free_Custom_Model(mod);
673
Free_Model_Complete(mod);
674
if(mod->m4mod) M4_Free_M4_Model(mod->m4mod);
675
Free_Model_Basic(mod);
679
//////////////////////////////////////////////////////////////
680
//////////////////////////////////////////////////////////////
689
//////////////////////////////////////////////////////////////
690
//////////////////////////////////////////////////////////////
693
void Free_Input(option *io)
699
RATES_Free_Rates(io->rates);
700
MCMC_Free_MCMC(io->mcmc);
701
Free(io->in_align_file);
702
Free(io->in_tree_file);
703
Free(io->in_constraint_tree_file);
704
Free(io->out_tree_file);
705
Free(io->out_trees_file);
706
Free(io->out_boot_tree_file);
707
Free(io->out_boot_stats_file);
708
Free(io->out_stats_file);
709
Free(io->out_lk_file);
710
Free(io->out_ps_file);
711
Free(io->out_trace_file);
713
Free(io->run_id_string);
714
Free(io->clade_list_file);
715
For(i,T_MAX_ALPHABET) Free(io->alphabet[i]);
717
if(io->short_tax_names)
719
For(i,io->size_tax_names)
721
Free(io->short_tax_names[i]);
722
Free(io->long_tax_names[i]);
724
Free(io->long_tax_names);
725
Free(io->short_tax_names);
727
Free_Tree_List(io->treelist);
729
if(io->lon) Free(io->lon);
730
if(io->lat) Free(io->lat);
746
//////////////////////////////////////////////////////////////
747
//////////////////////////////////////////////////////////////
749
void Free_Tree_List(t_treelist *list)
755
//////////////////////////////////////////////////////////////
756
//////////////////////////////////////////////////////////////
758
void Free_St(supert_tree *st)
762
For(i,2*st->tree->n_otu-1)
763
Free(st->tree->a_edges[i]->nni);
765
For(i,st->n_part) Free(st->match_st_node_in_gt[i]);
767
Free(st->match_st_node_in_gt);
774
//////////////////////////////////////////////////////////////
775
//////////////////////////////////////////////////////////////
778
void Free_Eigen(eigen *eigen_struct)
780
Free(eigen_struct->space_int);
781
Free(eigen_struct->space);
782
Free(eigen_struct->e_val);
783
Free(eigen_struct->e_val_im);
784
Free(eigen_struct->r_e_vect);
785
Free(eigen_struct->r_e_vect_im);
786
Free(eigen_struct->l_e_vect);
787
Free(eigen_struct->q);
789
if(eigen_struct->next) Free_Eigen(eigen_struct->next);
794
//////////////////////////////////////////////////////////////
795
//////////////////////////////////////////////////////////////
798
void Free_One_Spr(t_spr *this_spr)
800
Free(this_spr->path);
804
//////////////////////////////////////////////////////////////
805
//////////////////////////////////////////////////////////////
807
void Free_Spr_List(t_tree *mixt_tree)
815
For(i,tree->size_spr_list+1) Free_One_Spr(tree->spr_list[i]);
816
Free(tree->spr_list);
817
Free_One_Spr(tree->best_spr);
824
//////////////////////////////////////////////////////////////
825
//////////////////////////////////////////////////////////////
827
void Free_Triplet(triplet *t)
838
For(k,t->mod->ras->n_catg)
842
For(j,t->size) Free(t->core[k][i][j]);
851
For(j,t->size) Free(t->p_one_site[i][j]);
852
Free(t->p_one_site[i]);
858
For(j,t->size) Free(t->sum_p_one_site[i][j]);
859
Free(t->sum_p_one_site[i]);
861
Free(t->sum_p_one_site);
863
Free_Eigen(t->eigen_struct);
865
if(t->next) Free_Triplet(t->next);
870
//////////////////////////////////////////////////////////////
871
//////////////////////////////////////////////////////////////
874
void Free_Actual_CSeq(calign *data)
879
Free(data->c_seq[i]->state);
880
Free(data->c_seq[i]->d_state);
881
data->c_seq[i]->state = NULL;
885
//////////////////////////////////////////////////////////////
886
//////////////////////////////////////////////////////////////
889
void Free_Prefix_Tree(pnode *n, int size)
897
Free_Prefix_Tree(n->next[i],size);
903
//////////////////////////////////////////////////////////////
904
//////////////////////////////////////////////////////////////
907
void Free_Pnode(pnode *n)
913
//////////////////////////////////////////////////////////////
914
//////////////////////////////////////////////////////////////
916
void Free_Optimiz(t_opt *s_opt)
921
//////////////////////////////////////////////////////////////
922
//////////////////////////////////////////////////////////////
924
void Free_Nexus(option *io)
930
For(j,io->nex_com_list[i]->nparm) Free_Nexus_Parm(io->nex_com_list[i]->parm[j]);
931
Free(io->nex_com_list[i]->parm);
932
Free(io->nex_com_list[i]->name);
933
Free(io->nex_com_list[i]);
935
Free(io->nex_com_list);
938
//////////////////////////////////////////////////////////////
939
//////////////////////////////////////////////////////////////
942
void Free_Nexus_Com(nexcom **com)
955
//////////////////////////////////////////////////////////////
956
//////////////////////////////////////////////////////////////
958
void Free_Nexus_Parm(nexparm *parm)
965
//////////////////////////////////////////////////////////////
966
//////////////////////////////////////////////////////////////
968
void XML_Free_XML_Tree(xml_node *node)
970
if(node->child) XML_Free_XML_Tree(node->child);
971
if(node->next) XML_Free_XML_Tree(node->next);
972
XML_Free_XML_Node(node);
975
//////////////////////////////////////////////////////////////
976
//////////////////////////////////////////////////////////////
978
void XML_Free_XML_Node(xml_node *node)
983
XML_Free_XML_Ds(node->ds);
984
XML_Free_XML_Attr(node->attr);
988
//////////////////////////////////////////////////////////////
989
//////////////////////////////////////////////////////////////
991
void XML_Free_XML_Attr(xml_attr *attr)
997
if(attr->next) XML_Free_XML_Attr(attr->next);
1002
//////////////////////////////////////////////////////////////
1003
//////////////////////////////////////////////////////////////
1005
void XML_Free_XML_Ds(t_ds *ds)
1007
if(ds->next) XML_Free_XML_Ds(ds->next);
1011
//////////////////////////////////////////////////////////////
1012
//////////////////////////////////////////////////////////////
1014
//////////////////////////////////////////////////////////////
1015
//////////////////////////////////////////////////////////////
1017
void MCMC_Free_MCMC(t_mcmc *mcmc)
1021
Free(mcmc->move_type);
1022
Free(mcmc->adjust_tuning);
1023
Free(mcmc->out_filename);
1024
Free(mcmc->move_weight);
1025
Free(mcmc->acc_move);
1026
Free(mcmc->run_move);
1027
Free(mcmc->prev_acc_move);
1028
Free(mcmc->prev_run_move);
1029
Free(mcmc->acc_rate);
1030
Free(mcmc->tune_move);
1031
For(i,mcmc->n_moves) Free(mcmc->move_name[i]);
1032
Free(mcmc->move_name);
1033
Free(mcmc->ess_run);
1034
Free(mcmc->start_ess);
1036
Free(mcmc->sum_val);
1037
Free(mcmc->sum_valsq);
1038
Free(mcmc->sum_curval_nextval);
1039
Free(mcmc->first_val);
1040
Free(mcmc->old_param_val);
1041
Free(mcmc->new_param_val);
1045
//////////////////////////////////////////////////////////////
1046
//////////////////////////////////////////////////////////////
1049
//////////////////////////////////////////////////////////////
1050
//////////////////////////////////////////////////////////////
1052
void M4_Free_M4_Model(m4 *m4mod)
1058
For(i,m4mod->n_h) Free(m4mod->o_mats[i]);
1059
Free(m4mod->o_mats);
1065
Free(m4mod->multipl);
1066
Free(m4mod->multipl_unscaled);
1067
Free(m4mod->h_fq_unscaled);
1073
//////////////////////////////////////////////////////////////
1074
//////////////////////////////////////////////////////////////
1076
void RATES_Free_Rates(t_rate *rates)
1078
if(rates->is_allocated == YES)
1082
Free(rates->buff_r);
1083
Free(rates->true_r);
1084
Free(rates->buff_t);
1086
Free(rates->true_t);
1087
Free(rates->t_prior);
1088
Free(rates->t_mean);
1089
Free(rates->t_prior_min);
1090
Free(rates->t_prior_max);
1091
Free(rates->t_floor);
1092
Free(rates->t_has_prior);
1093
Free(rates->t_ranked);
1095
Free(rates->triplet);
1098
Free(rates->cond_var);
1099
Free(rates->invcov);
1102
Free(rates->u_ml_l);
1103
Free(rates->u_cur_l);
1106
Free(rates->trip_cond_cov);
1107
Free(rates->trip_reg_coeff);
1108
Free(rates->_2n_vect1);
1109
Free(rates->_2n_vect2);
1110
Free(rates->_2n_vect3);
1111
Free(rates->_2n_vect4);
1112
Free(rates->_2n_vect5);
1113
Free(rates->_2n2n_vect1);
1114
Free(rates->_2n2n_vect2);
1116
Free(rates->mean_l);
1117
Free(rates->mean_t);
1118
Free(rates->grad_l);
1119
Free(rates->br_do_updt);
1120
Free(rates->cur_gamma_prior_mean);
1121
Free(rates->cur_gamma_prior_var);
1122
Free(rates->n_tips_below);
1123
Free(rates->time_slice_lims);
1124
Free(rates->n_time_slice_spans);
1125
Free(rates->curr_slice);
1126
Free(rates->has_survived);
1127
Free(rates->survival_rank);
1128
Free(rates->survival_dur);
1129
Free(rates->calib_prob);
1131
Free_Calib(rates->calib);
1135
//////////////////////////////////////////////////////////////
1136
//////////////////////////////////////////////////////////////
1138
void Free_Calib(t_cal *cal)
1141
else Free_Calib(cal->next);