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 "init.h"
14 #ifdef BEAGLE
15 #include "beagle_utils.h"
16 #endif
17 
Init_Eigen_Struct(eigen * this)18 void Init_Eigen_Struct(eigen *this)
19 {
20   this->next = NULL;
21   this->prev = NULL;
22 }
23 
24 //////////////////////////////////////////////////////////////
25 //////////////////////////////////////////////////////////////
26 
Init_Scalar_Dbl(scalar_dbl * p)27 void Init_Scalar_Dbl(scalar_dbl *p)
28 {
29   p->v     = -1.;
30   p->onoff = ON;
31   p->next  = NULL;
32   p->prev  = NULL;
33 }
34 
35 //////////////////////////////////////////////////////////////
36 //////////////////////////////////////////////////////////////
37 
Init_Scalar_Int(scalar_int * p)38 void Init_Scalar_Int(scalar_int *p)
39 {
40   p->v    = -1.;
41   p->next = NULL;
42   p->prev = NULL;
43 }
44 
45 //////////////////////////////////////////////////////////////
46 //////////////////////////////////////////////////////////////
47 
Init_Vect_Dbl(int len,vect_dbl * p)48 void Init_Vect_Dbl(int len, vect_dbl *p)
49 {
50   p->len  = len;
51   p->next = NULL;
52   p->prev = NULL;
53   p->v    = NULL;
54 }
55 
56 //////////////////////////////////////////////////////////////
57 //////////////////////////////////////////////////////////////
58 
Init_Vect_Int(int len,vect_int * p)59 void Init_Vect_Int(int len, vect_int *p)
60 {
61   p->len  = len;
62   p->next = NULL;
63   p->prev = NULL;
64   p->v    = NULL;
65 }
66 
67 //////////////////////////////////////////////////////////////
68 //////////////////////////////////////////////////////////////
69 
Init_String(t_string * ts)70 void Init_String(t_string *ts)
71 {
72   ts->len  = -1.;
73   ts->next = NULL;
74   ts->prev = NULL;
75 }
76 
77 //////////////////////////////////////////////////////////////
78 //////////////////////////////////////////////////////////////
79 
Init_Efrq(phydbl * b_frq,t_efrq * f)80 void Init_Efrq(phydbl *b_frq, t_efrq *f)
81 {
82   f->user_state_freq      = NO;
83   f->empirical_state_freq = NO;
84   f->next                 = NULL;
85   f->prev                 = NULL;
86 }
87 
88 //////////////////////////////////////////////////////////////
89 //////////////////////////////////////////////////////////////
90 
Init_Tree(t_tree * tree,int n_otu)91 void Init_Tree(t_tree *tree, int n_otu)
92 {
93   tree->n_otu                     = n_otu;
94   tree->mat                       = NULL;
95   tree->n_root                    = NULL;
96   tree->e_root                    = NULL;
97   tree->ps_tree                   = NULL;
98   tree->short_l                   = NULL;
99   tree->mutmap                    = NULL;
100   tree->next                      = NULL;
101   tree->prev                      = NULL;
102   tree->next                      = NULL;
103   tree->prev                      = NULL;
104   tree->mixt_tree                 = NULL;
105   tree->geo                       = NULL;
106   tree->xml_root                  = NULL;
107   tree->extra_tree                = NULL;
108   tree->verbose                   = VL3;
109   tree->edge_list                 = NULL;
110   tree->node_list                 = NULL;
111 
112   tree->is_mixt_tree              = NO;
113   tree->tree_num                  = 0;
114   tree->depth_curr_path           = 0;
115   tree->has_bip                   = NO;
116   tree->n_moves                   = 0;
117   tree->bl_from_node_stamps       = 0;
118   tree->lock_topo                 = NO;
119   tree->ps_page_number            = 0;
120   tree->init_lnL                  = UNLIKELY;
121   tree->best_lnL                  = UNLIKELY;
122   tree->old_lnL                   = UNLIKELY;
123   tree->c_lnL                     = UNLIKELY;
124   tree->sum_min_sum_scale         = .0;
125   tree->n_swap                    = 0;
126   tree->best_pars                 = 1E+5;
127   tree->n_pattern                 = -1;
128   tree->n_root_pos                = -1.;
129   tree->write_labels              = YES;
130   tree->write_br_lens             = YES;
131   tree->num_curr_branch_available = 0;
132   tree->tip_order_score           = .0;
133   tree->write_tax_names           = YES;
134   tree->update_alias_subpatt      = NO;
135   tree->bl_ndigits                = 8;
136   tree->n_short_l                 = 100;
137   tree->norm_scale                = 0.0;
138   tree->br_len_recorded           = NO;
139   tree->apply_lk_scaling          = YES;
140   tree->dp                        = 0;
141   tree->ignore_root               = YES;
142   tree->ignore_mixt_info          = NO;
143   tree->annealing_temp            = 0.;
144   tree->both_sides                = NO;
145   tree->json_num                  = 0;
146   tree->update_eigen_lr           = NO;
147   tree->use_eigen_lr              = NO;
148   tree->eval_alnL                 = YES;
149   tree->eval_rlnL                 = YES;
150   tree->eval_glnL                 = YES;
151   tree->scaling_method            = SCALE_FAST;
152   tree->perform_spr_right_away    = YES;
153   tree->tip_root                  = 0;
154   tree->n_edges_traversed         = 0;
155   tree->fully_nni_opt             = NO;
156   tree->n_tot_bl_opt              = 0;
157   tree->numerical_warning         = NO;
158 
159 #ifdef BEAGLE
160   tree->b_inst                    = UNINITIALIZED;
161 #endif
162 }
163 
164 //////////////////////////////////////////////////////////////
165 //////////////////////////////////////////////////////////////
166 
Init_Edge_Light(t_edge * b,int num)167 void Init_Edge_Light(t_edge *b, int num)
168 {
169   b->num                  = num;
170   b->bip_score            = 0;
171   b->tdist_score          = .0;
172   b->dist_btw_edges       = .0;
173   b->topo_dist_btw_edges  = 0;
174   b->has_zero_br_len      = NO;
175   b->n_jumps              = 0;
176   b->l_var->v             = -1.;
177   b->does_exist           = YES;
178   b->l->v                 = -1.;
179   b->bin_cod_num          = -1.;
180   b->l->onoff             = ON;
181 
182   b->next                 = NULL;
183   b->prev                 = NULL;
184   b->next_mixt            = NULL;
185   b->prev_mixt            = NULL;
186 
187   b->p_lk_left            = NULL;
188   b->p_lk_rght            = NULL;
189   b->p_lk_loc_left        = NULL;
190   b->p_lk_loc_rght        = NULL;
191   b->Pij_rr               = NULL;
192   b->label                = NULL;
193 
194   b->pars_l               = NULL;
195   b->pars_r               = NULL;
196   b->ui_l                 = NULL;
197   b->ui_r                 = NULL;
198   b->p_pars_l             = NULL;
199   b->p_pars_r             = NULL;
200   b->n_diff_states_l      = NULL;
201   b->n_diff_states_r      = NULL;
202 
203   b->update_partial_lk_left = YES;
204   b->update_partial_lk_rght = YES;
205 
206 #ifdef BEAGLE
207   b->p_lk_left_idx         = num;
208   b->p_lk_rght_idx         = UNINITIALIZED; //Will be initialized later when the total number of branches is known (i.e. in Make_Tree_From_Scratch())
209   b->Pij_rr_idx            = num;
210   b->p_lk_tip_idx          = UNINITIALIZED; //Will be initialized later only if this branch is connected to a tip
211 #endif
212 
213 }
214 
215 //////////////////////////////////////////////////////////////
216 //////////////////////////////////////////////////////////////
217 
Init_Node_Light(t_node * n,int num)218 void Init_Node_Light(t_node *n, int num)
219 {
220   n->num                    = num;
221   n->tax                    = -1;
222   n->dist_to_root           = .0;
223   n->common                 = 1;
224   n->ext_node               = NULL;
225   n->name                   = NULL;
226   n->ori_name               = NULL;
227   n->c_seq                  = NULL;
228   n->c_seq_anc              = NULL;
229   n->y_rank                 = 0.;
230   n->y_rank_ori             = 0.;
231   n->y_rank_max             = 0.;
232   n->y_rank_min             = 0.;
233   n->anc                    = NULL;
234   n->rank                   = 0;
235   n->match_node             = NULL;
236   n->id_rank                = 0;
237   n->next                   = NULL;
238   n->prev                   = NULL;
239   n->n_cal                  = 0;
240   n->ldsk                   = NULL;
241   n->rk_next                = NULL;
242   n->rk_prev                = NULL;
243   n->label                  = NULL;
244   /* n->next                 = NULL; */
245   /* n->prev                 = NULL; */
246 }
247 
248 //////////////////////////////////////////////////////////////
249 //////////////////////////////////////////////////////////////
250 
Init_NNI(t_nni * a_nni)251 void Init_NNI(t_nni *a_nni)
252 {
253   a_nni->left         = NULL;
254   a_nni->rght         = NULL;
255   a_nni->b            = NULL;
256   a_nni->init_l       = NULL;
257   a_nni->init_v       = NULL;
258   a_nni->init_lk      = .0;
259   a_nni->score        = +1.0;
260   a_nni->best_l       = NULL;
261   a_nni->best_v       = NULL;
262   a_nni->swap_node_v1 = NULL;
263   a_nni->swap_node_v2 = NULL;
264   a_nni->swap_node_v3 = NULL;
265   a_nni->swap_node_v4 = NULL;
266   a_nni->lk0          = UNLIKELY;
267   a_nni->lk1          = UNLIKELY;
268   a_nni->lk2          = UNLIKELY;
269   a_nni->l0           = NULL;
270   a_nni->l1           = NULL;
271   a_nni->l2           = NULL;
272   a_nni->v0           = NULL;
273   a_nni->v1           = NULL;
274   a_nni->v2           = NULL;
275 }
276 
277 //////////////////////////////////////////////////////////////
278 //////////////////////////////////////////////////////////////
279 
Init_Nexus_Format(nexcom ** com)280 void Init_Nexus_Format(nexcom **com)
281 {
282 
283   /*****************************/
284 
285   strcpy(com[0]->name,"dimensions");
286   com[0]->nparm = 2;
287   com[0]->nxt_token_t = NEXUS_PARM;
288   com[0]->cur_token_t = NEXUS_COM;
289 
290   com[0]->parm[0] = Make_Nexus_Parm();
291   strcpy(com[0]->parm[0]->name,"ntax");
292   com[0]->parm[0]->fp = Read_Nexus_Dimensions;
293   com[0]->parm[0]->com = com[0];
294   com[0]->parm[0]->nxt_token_t = NEXUS_EQUAL;
295   com[0]->parm[0]->cur_token_t = NEXUS_PARM;
296 
297   com[0]->parm[1] = Make_Nexus_Parm();
298   strcpy(com[0]->parm[1]->name,"nchar");
299   com[0]->parm[1]->fp = Read_Nexus_Dimensions;
300   com[0]->parm[1]->com = com[0];
301   com[0]->parm[1]->nxt_token_t = NEXUS_EQUAL;
302   com[0]->parm[1]->cur_token_t = NEXUS_PARM;
303 
304   /*****************************/
305 
306   strcpy(com[1]->name,"format");
307   com[1]->nparm = 11;
308   com[1]->nxt_token_t = NEXUS_PARM;
309   com[1]->cur_token_t = NEXUS_COM;
310 
311   com[1]->parm[0] = Make_Nexus_Parm();
312   strcpy(com[1]->parm[0]->name,"datatype");
313   com[1]->parm[0]->fp = Read_Nexus_Format;
314   com[1]->parm[0]->com = com[1];
315   com[1]->parm[0]->nxt_token_t = NEXUS_EQUAL;
316   com[1]->parm[0]->cur_token_t = NEXUS_PARM;
317 
318   com[1]->parm[1] = Make_Nexus_Parm();
319   strcpy(com[1]->parm[1]->name,"respectcase");
320   com[1]->parm[1]->fp = Read_Nexus_Format;
321   com[1]->parm[1]->com = com[1];
322   com[1]->parm[1]->nxt_token_t = NEXUS_PARM;
323   com[1]->parm[1]->cur_token_t = NEXUS_VALUE;
324 
325   com[1]->parm[2] = Make_Nexus_Parm();
326   strcpy(com[1]->parm[2]->name,"missing");
327   com[1]->parm[2]->fp = Read_Nexus_Format;
328   com[1]->parm[2]->com = com[1];
329   com[1]->parm[2]->nxt_token_t = NEXUS_EQUAL;
330   com[1]->parm[2]->cur_token_t = NEXUS_PARM;
331 
332   com[1]->parm[3] = Make_Nexus_Parm();
333   strcpy(com[1]->parm[3]->name,"gap");
334   com[1]->parm[3]->fp = Read_Nexus_Format;
335   com[1]->parm[3]->com = com[1];
336   com[1]->parm[3]->nxt_token_t = NEXUS_EQUAL;
337   com[1]->parm[3]->cur_token_t = NEXUS_PARM;
338 
339   com[1]->parm[4] = Make_Nexus_Parm();
340   strcpy(com[1]->parm[4]->name,"symbols");
341   com[1]->parm[4]->fp = Read_Nexus_Format;
342   com[1]->parm[4]->com = com[1];
343   com[1]->parm[4]->nxt_token_t = NEXUS_EQUAL;
344   com[1]->parm[4]->cur_token_t = NEXUS_PARM;
345 
346   com[1]->parm[5] = Make_Nexus_Parm();
347   strcpy(com[1]->parm[5]->name,"equate");
348   com[1]->parm[5]->fp = Read_Nexus_Format;
349   com[1]->parm[5]->com = com[1];
350   com[1]->parm[5]->nxt_token_t = NEXUS_EQUAL;
351   com[1]->parm[5]->cur_token_t = NEXUS_PARM;
352 
353   com[1]->parm[6] = Make_Nexus_Parm();
354   strcpy(com[1]->parm[6]->name,"matchchar");
355   com[1]->parm[6]->fp = Read_Nexus_Format;
356   com[1]->parm[6]->com = com[1];
357   com[1]->parm[6]->nxt_token_t = NEXUS_EQUAL;
358   com[1]->parm[6]->cur_token_t = NEXUS_PARM;
359 
360   com[1]->parm[7] = Make_Nexus_Parm();
361   strcpy(com[1]->parm[7]->name,"transpose");
362   com[1]->parm[7]->fp = Read_Nexus_Format;
363   com[1]->parm[7]->com = com[1];
364   com[1]->parm[7]->nxt_token_t = NEXUS_PARM;
365   com[1]->parm[7]->cur_token_t = NEXUS_VALUE;
366 
367   com[1]->parm[8] = Make_Nexus_Parm();
368   strcpy(com[1]->parm[8]->name,"interleave");
369   com[1]->parm[8]->fp = Read_Nexus_Format;
370   com[1]->parm[8]->com = com[1];
371   com[1]->parm[8]->nxt_token_t = NEXUS_PARM;
372   com[1]->parm[8]->cur_token_t = NEXUS_VALUE;
373 
374   com[1]->parm[9] = Make_Nexus_Parm();
375   strcpy(com[1]->parm[9]->name,"items");
376   com[1]->parm[9]->fp = Read_Nexus_Format;
377   com[1]->parm[9]->com = com[1];
378   com[1]->parm[9]->nxt_token_t = NEXUS_EQUAL;
379   com[1]->parm[9]->cur_token_t = NEXUS_PARM;
380 
381   com[1]->parm[10] = Make_Nexus_Parm();
382   strcpy(com[1]->parm[10]->name,"statesformat");
383   com[1]->parm[10]->fp = Read_Nexus_Format;
384   com[1]->parm[10]->com = com[1];
385   com[1]->parm[10]->nxt_token_t = NEXUS_EQUAL;
386   com[1]->parm[10]->cur_token_t = NEXUS_PARM;
387 
388   /*****************************/
389 
390   strcpy(com[2]->name,"eliminate");
391   com[2]->nparm = 0;
392   com[2]->nxt_token_t = NEXUS_VALUE;
393   com[2]->cur_token_t = NEXUS_COM;
394 
395   /*****************************/
396 
397   strcpy(com[3]->name,"taxlabels");
398   com[3]->nparm = 0;
399   com[3]->nxt_token_t = -1;
400   com[3]->cur_token_t = -1;
401 
402  /*****************************/
403 
404   strcpy(com[4]->name,"charstatelabels");
405   com[4]->nparm = 0;
406   com[4]->nxt_token_t = -1;
407   com[4]->cur_token_t = -1;
408 
409   /*****************************/
410 
411   strcpy(com[5]->name,"charlabels");
412   com[5]->nparm = 0;
413   com[5]->nxt_token_t = -1;
414   com[5]->cur_token_t = -1;
415 
416   /*****************************/
417 
418   strcpy(com[6]->name,"statelabels");
419   com[6]->nparm = 0;
420   com[6]->nxt_token_t = -1;
421   com[6]->cur_token_t = -1;
422 
423   /*****************************/
424 
425   strcpy(com[7]->name,"matrix");
426   com[7]->nparm = 1;
427   com[7]->nxt_token_t = NEXUS_COM;
428   com[7]->cur_token_t = NEXUS_VALUE; /* This will allow us to skip directly
429                     to the matrix reading function */
430 
431   com[7]->parm[0] = Make_Nexus_Parm();
432   strcpy(com[7]->parm[0]->name,"matrix");
433   com[7]->parm[0]->fp = Read_Nexus_Matrix;
434   com[7]->parm[0]->com = com[7];
435   com[7]->parm[0]->nxt_token_t = NEXUS_COM;
436   com[7]->parm[0]->cur_token_t = -1;
437 
438   /*****************************/
439 
440   strcpy(com[8]->name,"begin");
441   com[8]->nparm = 3;
442 
443   com[8]->nxt_token_t = NEXUS_PARM;
444   com[8]->cur_token_t = NEXUS_COM;
445 
446   com[8]->parm[0] = Make_Nexus_Parm();
447   strcpy(com[8]->parm[0]->name,"data");
448   com[8]->parm[0]->fp = Read_Nexus_Begin;
449   com[8]->parm[0]->com = com[8];
450   com[8]->parm[0]->nxt_token_t = NEXUS_COM;
451   com[8]->parm[0]->cur_token_t = NEXUS_PARM;
452 
453 
454   com[8]->parm[1] = Make_Nexus_Parm();
455   strcpy(com[8]->parm[1]->name,"trees");
456   com[8]->parm[1]->fp = Read_Nexus_Begin;
457   com[8]->parm[1]->com = com[8];
458   com[8]->parm[1]->nxt_token_t = NEXUS_COM;
459   com[8]->parm[1]->cur_token_t = NEXUS_PARM;
460 
461 
462   com[8]->parm[2] = Make_Nexus_Parm();
463   strcpy(com[8]->parm[2]->name,"taxa");
464   com[8]->parm[2]->fp = Read_Nexus_Taxa;
465   com[8]->parm[2]->com = com[8];
466   com[8]->parm[2]->nxt_token_t = NEXUS_COM;
467   com[8]->parm[2]->cur_token_t = NEXUS_VALUE;
468 
469 
470   /*****************************/
471 
472   strcpy(com[9]->name,"end");
473   com[9]->nparm = 0;
474   com[9]->nxt_token_t = -1;
475   com[9]->cur_token_t = -1;
476 
477   /*****************************/
478 
479   strcpy(com[10]->name,"translate");
480   com[10]->nparm = 1;
481   com[10]->nxt_token_t = NEXUS_COM;
482   com[10]->cur_token_t = NEXUS_VALUE;
483 
484   com[10]->parm[0] = Make_Nexus_Parm();
485   strcpy(com[10]->parm[0]->name,"translate");
486   com[10]->parm[0]->fp = Read_Nexus_Translate;
487   com[10]->parm[0]->com = com[10];
488   com[10]->parm[0]->nxt_token_t = NEXUS_COM;
489   com[10]->parm[0]->cur_token_t = -1;
490 
491   /*****************************/
492 
493   strcpy(com[11]->name,"tree");
494   com[11]->nparm = 1;
495   com[11]->nxt_token_t = NEXUS_COM;
496   com[11]->cur_token_t = NEXUS_VALUE;
497 
498   com[11]->parm[0] = Make_Nexus_Parm();
499   strcpy(com[11]->parm[0]->name,"tree");
500   com[11]->parm[0]->fp = Read_Nexus_Tree;
501   com[11]->parm[0]->com = com[11];
502   com[11]->parm[0]->nxt_token_t = -1;
503   com[11]->parm[0]->cur_token_t = -1;
504 
505 
506   /*****************************/
507 
508 }
509 
510 //////////////////////////////////////////////////////////////
511 //////////////////////////////////////////////////////////////
512 
Init_Mat(matrix * mat,calign * data)513 void Init_Mat(matrix *mat, calign *data)
514 {
515   int i;
516 
517   mat->n_otu = data->n_otu;
518   mat->r = mat->n_otu;
519   mat->curr_int = mat->n_otu;
520   mat->method = 1;
521 
522   for(i=0;i<data->n_otu;i++)
523     {
524       strcpy(mat->name[i],data->c_seq[i]->name);
525       mat->on_off[i] = 1;
526     }
527 }
528 
529 //////////////////////////////////////////////////////////////
530 //////////////////////////////////////////////////////////////
531 
Set_Defaults_Input(option * io)532 void Set_Defaults_Input(option* io)
533 {
534   io->fp_in_align                = NULL;
535   io->fp_in_tree                 = NULL;
536   io->fp_in_constraint_tree      = NULL;
537   io->fp_out_tree                = NULL;
538   io->fp_out_trees               = NULL;
539   io->fp_out_boot_tree           = NULL;
540   io->fp_out_boot_stats          = NULL;
541   io->fp_out_stats               = NULL;
542   io->fp_out_ancestral_seq       = NULL;
543   io->fp_out_ancestral_tree      = NULL;
544   io->fp_in_coord                = NULL;
545   io->fp_out_trace               = NULL;
546   io->fp_weight_file             = NULL;
547   io->fp_out_json_trace          = NULL;
548   io->fp_out_lk                  = NULL;
549   io->fp_out_trace               = NULL;
550   io->long_tax_names             = NULL;
551   io->short_tax_names            = NULL;
552   io->lon                        = NULL;
553   io->lat                        = NULL;
554   io->z_scores                   = NULL;
555   io->cstr_tree                  = NULL;
556   io->next                       = NULL;
557   io->prev                       = NULL;
558   io->tree                       = NULL;
559   io->mod                        = NULL;
560   strcpy(io->nt_or_cd,"nucleotides");
561   io->tbe_bootstrap              = NO;
562   io->n_data_sets                = 1;
563   io->interleaved                = 1;
564   io->in_tree                    = 0;
565   io->out_tree_file_open_mode    = 1;
566   io->out_stats_file_open_mode   = 1;
567   io->init_len                   = -1;
568   io->n_otu                      = -1;
569   io->n_data_set_asked           = -1;
570   io->print_boot_trees           = 1;
571   io->n_part                     = 1;
572   io->ratio_test		 = ABAYES;
573   io->multigene                  = 0;
574   io->config_multigene           = 0;
575   io->curr_interface             = 0;
576   io->r_seed                     = -1;
577   io->collapse_boot              = 0;
578   io->random_boot_seq_order      = YES;
579   io->print_trace                = NO;
580   io->print_json_trace           = NO;
581   io->print_site_lnl             = NO;
582   io->m4_model                   = NO;
583   io->rm_ambigu                  = NO;
584   io->append_run_ID              = NO;
585   io->quiet                      = NO;
586   io->datatype                   = NT;
587   io->colalias                   = YES;
588   io->data_file_format           = PHYLIP;
589   io->tree_file_format           = PHYLIP;
590   io->boot_prog_every            = 20;
591   io->mem_question               = YES;
592   io->do_alias_subpatt           = NO;
593   io->lk_approx                  = EXACT;
594   io->codpos                     = -1;
595   io->mutmap                     = NO;
596   io->state_len                  = 1;
597   io->ancestral                  = NO;
598   io->use_xml                    = NO;
599   io->has_io_weights             = NO;
600   io->do_boot                    = NO;
601   io->do_alrt                    = YES;
602   io->do_tbe                     = NO;
603   io->print_node_num             = NO;
604   io->print_support_val          = NO;
605   io->n_boot_replicates          = 0;
606 
607 #ifdef BEAGLE
608   io->beagle_resource            = 0;
609 #endif
610   io->precision                  = 0;
611 
612   MCMC_Init_MCMC_Struct(NULL,io,io->mcmc);
613   RATES_Init_Rate_Struct(io->rates,NULL,-1);
614   io->rates->model               = LOGNORMAL;
615   TIMES_Init_Time_Struct(io->times,NULL,-1);
616   io->times->model               = COALESCENT;
617 }
618 
619 //////////////////////////////////////////////////////////////
620 //////////////////////////////////////////////////////////////
621 
Init_Rmat(t_rmat * rmat)622 void Init_Rmat(t_rmat *rmat)
623 {
624   rmat->n_diff_rr = 1;
625 }
626 
627 //////////////////////////////////////////////////////////////
628 //////////////////////////////////////////////////////////////
629 
Set_Defaults_Model(t_mod * mod)630 void Set_Defaults_Model(t_mod *mod)
631 {
632   Set_Defaults_Ras(mod->ras);
633 
634   strcpy(mod->modelname->s,"HKY85");
635   strcpy(mod->custom_mod_string->s,"000000");
636   mod->next                    = NULL;
637   mod->prev                    = NULL;
638   mod->next_mixt               = NULL;
639   mod->prev_mixt               = NULL;
640   mod->r_mat                   = NULL;
641   mod->e_frq                   = NULL;
642   mod->whichmodel              = HKY85;
643   mod->n_mixt_classes          = 0;
644   mod->mod_num                 = 0;
645   mod->update_eigen            = NO;
646   mod->is_mixt_mod             = NO;
647 
648   mod->kappa->v                = 4.0;
649   mod->lambda->v               = 1.0;
650   mod->l_var_sigma             = 1.E-2;
651   mod->e_frq_weight->v         = 1.0;
652   mod->r_mat_weight->v         = 1.0;
653 
654   mod->ns                      = 4;
655   mod->use_m4mod               = NO;
656   mod->ras->gamma_median       = NO;
657   mod->m4mod                   = NULL;
658 
659   /* mod->r_mat->n_diff_rr        = 0; */
660   /* mod->r_mat->rr               = NULL; */
661   /* mod->r_mat->rr_val           = NULL; */
662   /* mod->r_mat->n_rr_per_cat     = NULL; */
663 
664   mod->io             = NULL;
665   mod->log_l          = NO;
666   mod->gamma_mgf_bl   = NO;
667   mod->br_len_mult->v = 1.0;
668 
669 
670 #if !(defined PHYTIME || defined PHYREX)
671   mod->l_min = 1.E-8;
672   mod->l_max = 100.0;
673 #else
674   mod->l_min = 1.E-8;
675   mod->l_max = 1.E+3;
676 #endif
677 
678   mod->l_var_min  = mod->l_min;
679   mod->l_var_max  = mod->l_max;
680 
681   mod->br_len_mult->v          = 1.0;
682   mod->br_len_mult_unscaled->v = 1.0;
683   mod->augmented               = NO;
684 }
685 
686 //////////////////////////////////////////////////////////////
687 //////////////////////////////////////////////////////////////
688 
Set_Defaults_Ras(t_ras * ras)689 void Set_Defaults_Ras(t_ras *ras)
690 {
691   ras->n_catg              = 4;
692   ras->normalise_rr        = YES;
693   ras->pinvar->v           = 0.0;
694   ras->alpha->v            = 1.0;
695   ras->invar               = NO;
696   ras->free_mixt_rates     = NO;
697   ras->parent_class_number = 0;
698   ras->init_r_proba        = YES;
699   ras->init_rr             = YES;
700   ras->sort_rate_classes   = NO;
701 }
702 
703 //////////////////////////////////////////////////////////////
704 //////////////////////////////////////////////////////////////
705 
Set_Defaults_Optimiz(t_opt * s_opt)706 void Set_Defaults_Optimiz(t_opt *s_opt)
707 {
708   s_opt->last_opt             = YES;
709   s_opt->opt_subst_param      = YES;
710   s_opt->opt_alpha            = YES;
711   s_opt->opt_kappa            = YES;
712   s_opt->opt_bl               = YES;
713   s_opt->opt_lambda           = NO;
714   s_opt->opt_pinvar           = NO;
715   s_opt->opt_cov_delta        = NO;
716   s_opt->opt_cov_alpha        = NO;
717   s_opt->opt_cov_free_rates   = NO;
718   s_opt->opt_rr               = NO;
719   s_opt->init_lk              = UNLIKELY;
720   s_opt->n_it_max             = 1000;
721   s_opt->opt_topo             = YES;
722   s_opt->topo_search          = NNI_MOVE;
723   s_opt->random_input_tree    = 0;
724   s_opt->n_rand_starts        = 5;
725   s_opt->brent_it_max         = BRENT_IT_MAX;
726   s_opt->steph_spr            = YES;
727   s_opt->opt_br_len_mult      = NO;
728   s_opt->min_n_triple_moves   = 20;
729   s_opt->max_rank_triple_move = 0;
730   s_opt->n_improvements       = 0;
731   s_opt->max_spr_depth        = 0;
732   s_opt->opt_clock_r          = YES;
733 
734   s_opt->min_diff_lk_local    = 1.E-03;
735   s_opt->min_diff_lk_global   = 1.E-03;
736   s_opt->min_diff_lk_move     = 1.E-03;
737 
738   s_opt->p_moves_to_examine   = 0.15;
739   s_opt->fast_nni             = NO;
740   s_opt->greedy               = NO;
741   s_opt->general_pars         = NO;
742   s_opt->tree_size_mult       = 1;
743   s_opt->opt_five_branch      = YES;
744   s_opt->nni_br_len_opt       = YES;
745 
746   s_opt->pars_thresh          = 5;
747 
748   s_opt->hybrid_thresh        = NO;
749   s_opt->quickdirty           = NO;
750   s_opt->spr_pars             = YES;
751   s_opt->spr_lnL              = NO;
752   s_opt->min_depth_path       = 0;
753   s_opt->eval_list_regraft    = NO;
754 
755   s_opt->max_depth_path            = 2000;
756   s_opt->deepest_path              = 2000;
757   s_opt->max_delta_lnL_spr         = 2000000.;
758   s_opt->max_delta_lnL_spr_current = 0.0;
759   s_opt->worst_lnL_spr             = BIG;
760 
761   s_opt->br_len_in_spr        = 10;
762   s_opt->opt_free_mixt_rates  = YES;
763   s_opt->constrained_br_len   = NO;
764   s_opt->opt_gamma_br_len     = NO;
765   s_opt->first_opt_free_mixt_rates = YES;
766 
767   s_opt->wim_n_rgrft          = -1;
768   s_opt->wim_n_globl          = -1;
769   s_opt->wim_max_dist         = -1;
770   s_opt->wim_n_optim          = -1;
771   s_opt->wim_n_best           = -1;
772   s_opt->wim_inside_opt       =  0;
773 
774   s_opt->opt_rmat_weight      = NO;
775   s_opt->opt_efrq_weight      = NO;
776 
777   s_opt->skip_tree_traversal     = NO;
778   s_opt->serial_free_rates       = YES;
779 
780   s_opt->curr_opt_free_rates     = NO;
781 }
782 
783 //////////////////////////////////////////////////////////////
784 //////////////////////////////////////////////////////////////
785 
XML_Init_Attribute(xml_attr * attr)786 void XML_Init_Attribute(xml_attr *attr)
787 {
788 }
789 
790 //////////////////////////////////////////////////////////////
791 //////////////////////////////////////////////////////////////
792 
XML_Init_Node(xml_node * parent,xml_node * new_node,char * name)793 void XML_Init_Node(xml_node *parent, xml_node *new_node, char *name)
794 {
795   if(name) strcpy(new_node->name,name);
796 
797   new_node->parent   = parent ? parent : NULL;
798   new_node->next     = NULL;
799   new_node->prev     = NULL;
800   new_node->child    = NULL;
801   new_node->ds->obj  = NULL;
802   new_node->ds->next = NULL;
803 
804   if(parent)
805     {
806       if(!parent->child)
807         {
808           parent->child = new_node;
809         }
810       else
811         {
812           xml_node *node = parent->child;
813           while(node->next) node = node->next;
814           node->next = new_node;
815           new_node->prev = node;
816         }
817     }
818 
819   new_node->attr = NULL;
820 }
821 
822 //////////////////////////////////////////////////////////////
823 //////////////////////////////////////////////////////////////
824 
RATES_Init_Rate_Struct(t_rate * rates,t_rate * existing_rates,int n_otu)825 void RATES_Init_Rate_Struct(t_rate *rates, t_rate *existing_rates, int n_otu)
826 {
827   int i;
828 
829   if(existing_rates && existing_rates->model != -1)
830     {
831       rates->model = existing_rates->model;
832     }
833   else
834     {
835       rates->model = NONE;
836     }
837 
838   rates->met_within_gibbs = NO;
839   rates->c_lnL_rates      = UNLIKELY;
840   rates->adjust_rates     = 0;
841   rates->use_rates        = 1;
842   rates->lexp             = 1.E-3;
843   rates->norm_fact        = 1.0;
844   rates->inflate_var      = 1.0;
845   rates->br_r_recorded    = NO;
846 
847 
848   rates->max_rate  = 100.0;
849   rates->min_rate  = 0.001;
850 
851   rates->clock_r       = 1.E-4;
852   rates->min_clock     = 1.E-10;
853   rates->max_clock     = 1.E+0;
854 
855   rates->nu            = 1.0E-1;
856   rates->min_nu        = 0.0;
857   rates->max_nu        = 2.0;
858 
859   rates->min_dt        = 0.0;
860 
861   rates->step_rate     = 1.E-4;
862   rates->approx        = 1;
863   rates->bl_from_rt    = NO;
864 
865   rates->update_mean_l = NO;
866   rates->update_cov_l  = NO;
867 
868   rates->p_max         = 0.01;
869 
870   if(n_otu > 0)
871     {
872       for(i=0;i<(2*n_otu-2)*(2*n_otu-2);++i) rates->cov_l[i] = 0.0;
873 
874       for(i=0;i<2*n_otu-2;++i)
875         {
876           rates->mean_r[i] = 1.0;
877           rates->mean_l[i] = 0.0;
878           rates->cur_l[i]  = 0.01;
879         }
880 
881       for(i=0;i<2*n_otu-1;++i)
882         {
883           rates->nd_r[i]   = 1.0;
884           rates->br_r[i]   = 1.0;
885 
886 
887           rates->br_do_updt[i] = YES;
888         }
889     }
890 }
891 
892 //////////////////////////////////////////////////////////////
893 //////////////////////////////////////////////////////////////
894 
TIMES_Init_Time_Struct(t_time * times,t_time * existing_times,int n_otu)895 void TIMES_Init_Time_Struct(t_time *times, t_time *existing_times, int n_otu)
896 {
897   if(existing_times && existing_times->model != -1)
898     {
899       times->model = existing_times->model;
900     }
901   else
902     {
903       times->model = NONE;
904     }
905 
906   times->scaled_pop_size  = 1.0;
907 
908   times->c_lnL_times      = UNLIKELY;
909   times->c_lnL_times      = UNLIKELY;
910   times->c_lnL_jps        = UNLIKELY;
911   times->nd_t_recorded    = NO;
912 
913   times->birth_rate       = 1.E-1;
914   times->birth_rate_min   = 1.E-6;
915   times->birth_rate_max   = 1.E+0;
916   times->birth_rate_pivot = 1.E-1;
917 
918   times->death_rate       = 1.E-1;
919   times->death_rate_min   = 1.E-6;
920   times->death_rate_min   = 1.E+0;
921   times->death_rate_pivot = 1.E-1;
922 
923   if(n_otu > 0)
924     {
925 
926       for(int i=0;i<2*n_otu-2;++i)
927         {
928           times->n_jps[i]  =  -1;
929           times->t_jps[i]  =  -1;
930         }
931 
932       for(int i=0;i<2*n_otu-1;++i)
933         {
934           times->mean_t[i] = 0.0;
935           times->nd_t[i]   = 0.0;
936           times->true_t[i] = 0.0;
937           if(i < n_otu)
938             {
939               times->t_has_prior[i] = YES;
940               times->t_prior_max[i] = 0.0;
941               times->t_prior_min[i] = 0.0;
942             }
943           else
944             {
945               times->t_has_prior[i] = NO;
946               times->t_prior_max[i] =  0.0;
947               times->t_prior_min[i] = -BIG;
948             }
949 
950           times->has_survived[i] = NO;
951           times->t_rank[i] = i;
952         }
953     }
954 
955   times->update_time_norm_const = NO;
956   times->is_asynchronous = NO;
957 }
958 
959 //////////////////////////////////////////////////////////////
960 //////////////////////////////////////////////////////////////
961 
Init_One_Spr(t_spr * a_spr)962 void Init_One_Spr(t_spr *a_spr)
963 {
964   a_spr->lnL              = UNLIKELY;
965   a_spr->pars             = 1E+5;
966   a_spr->depth_path       = 0;
967   a_spr->dist             = 0;
968   a_spr->init_target_l    = NULL;
969   a_spr->init_target_v    = NULL;
970   a_spr->l0               = NULL;
971   a_spr->l1               = NULL;
972   a_spr->l2               = NULL;
973   a_spr->v0               = NULL;
974   a_spr->v1               = NULL;
975   a_spr->v2               = NULL;
976   a_spr->n_link           = NULL;
977   a_spr->n_opp_to_link    = NULL;
978   a_spr->b_opp_to_link    = NULL;
979   a_spr->b_target         = NULL;
980   a_spr->b_init_target    = NULL;
981   a_spr->next             = NULL;
982   a_spr->prev             = NULL;
983   a_spr->next             = NULL;
984   a_spr->prev             = NULL;
985 }
986 
987 //////////////////////////////////////////////////////////////
988 //////////////////////////////////////////////////////////////
989 
Init_Target_Tip(t_clad * clade,t_tree * tree)990 void Init_Target_Tip(t_clad *clade, t_tree *tree)
991 {
992   int i,j;
993 
994   for(i=0;i<clade->n_tax;++i)
995     {
996       for(j=0;j<tree->n_otu;++j)
997         {
998           if(!strcmp(tree->a_nodes[j]->name,clade->tax_list[i]))
999             {
1000               clade->tip_list[i] = tree->a_nodes[j];
1001               break;
1002             }
1003         }
1004       assert(j != tree->n_otu);
1005     }
1006 }
1007 
1008 //////////////////////////////////////////////////////////////
1009 //////////////////////////////////////////////////////////////
1010 
Init_Model(calign * data,t_mod * mod,option * io)1011 void Init_Model(calign *data, t_mod *mod, option *io)
1012 {
1013   int i,j;
1014   phydbl sum,aux;
1015   int result;
1016   phydbl *dr, *di, *space;
1017 
1018   assert(data);
1019   assert(mod);
1020   assert(io);
1021 
1022 #ifdef BEAGLE
1023   mod->b_inst = UNINITIALIZED; //prevents calling an uninitialized BEAGLE instance (for ex: prevents Update_Eigen(), Update_RAS(), from calling BEAGLE)
1024   mod->optimizing_topology = false;
1025 #endif
1026 
1027   mod->ns = io->mod->ns;
1028 
1029   if(io->datatype == GENERIC) mod->whichmodel = JC69;
1030 
1031   dr      = (phydbl *)mCalloc(  mod->ns,sizeof(phydbl));
1032   di      = (phydbl *)mCalloc(  mod->ns,sizeof(phydbl));
1033   space   = (phydbl *)mCalloc(2*mod->ns,sizeof(phydbl));
1034 
1035   if(mod->log_l == YES)
1036     {
1037       mod->l_min = log(mod->l_min);
1038       mod->l_max = log(mod->l_max);
1039     }
1040 
1041   // Init unscaled relative rate frequencies
1042   if(mod->ras->init_r_proba == YES)
1043     {
1044       for(i=0;i<mod->ras->n_catg;i++) mod->ras->gamma_r_proba->v[i]          = (phydbl)1./mod->ras->n_catg;
1045       for(i=0;i<mod->ras->n_catg;i++) mod->ras->gamma_r_proba_unscaled->v[i] = (phydbl)(i+1);
1046     }
1047   else
1048     {
1049       mod->ras->gamma_r_proba_unscaled->v[mod->ras->n_catg-1] = 1.0;
1050       for(i=0;i<mod->ras->n_catg;i++)
1051         {
1052           sum = 0.0;
1053           For(j,i+1) sum += mod->ras->gamma_r_proba->v[j];
1054           mod->ras->gamma_r_proba_unscaled->v[i] = sum * mod->ras->gamma_r_proba_unscaled->v[mod->ras->n_catg-1];
1055         }
1056     }
1057 
1058   // Init unscaled relative rates
1059   if(mod->ras->init_rr == YES)
1060     {
1061       if(mod->ras->n_catg > 1)
1062         {
1063           for(i=0;i<mod->ras->n_catg;i++) mod->ras->gamma_rr->v[i]          = (phydbl)i;
1064           for(i=0;i<mod->ras->n_catg;i++) mod->ras->gamma_rr_unscaled->v[i] = (phydbl)i;
1065         }
1066       else
1067         {
1068           mod->ras->gamma_rr->v[0]          = 1.0;
1069           mod->ras->gamma_rr_unscaled->v[0] = 1.0;
1070         }
1071     }
1072   else
1073     {
1074       for(i=0;i<mod->ras->n_catg;i++) mod->ras->gamma_rr_unscaled->v[i] = mod->ras->gamma_rr->v[i];
1075     }
1076 
1077   if(io->datatype == NT)
1078     {
1079       /* Set the substitution parameters to their default values
1080          if they are not fixed by the user */
1081 
1082       if(mod->s_opt->opt_kappa == YES)
1083         {
1084           mod->kappa->v  = 4.0;
1085           mod->lambda->v = 1.0;
1086         }
1087 
1088 
1089       if(mod->whichmodel == CUSTOM)
1090         {
1091           for(i=0;i<6;i++)
1092             {
1093               mod->r_mat->rr_val->v[i] = 0.0;
1094               mod->r_mat->rr->v[i] = 1.0;
1095             }
1096 
1097           /* Condition below is true if custom model corresponds to TN93 or K80 */
1098           if(mod->r_mat->rr_num->v[AC] == mod->r_mat->rr_num->v[AT] &&
1099              mod->r_mat->rr_num->v[AT] == mod->r_mat->rr_num->v[CG] &&
1100              mod->r_mat->rr_num->v[CG] == mod->r_mat->rr_num->v[GT] &&
1101              mod->r_mat->rr_num->v[AG] != mod->r_mat->rr_num->v[AC] &&
1102              mod->r_mat->rr_num->v[CT] != mod->r_mat->rr_num->v[AC])
1103             {
1104               for(i=1;i<mod->r_mat->n_diff_rr;i++)
1105                 {
1106                   mod->r_mat->rr_val->v[i] = log(2.0);
1107                   mod->r_mat->rr->v[i] = 2.0;
1108                 }
1109             }
1110           else if(mod->r_mat->n_diff_rr == 6) /* Custom <-> GTR model */
1111             {
1112               mod->r_mat->rr_val->v[AG] = log(2.0);
1113               mod->r_mat->rr_val->v[CT] = log(2.0);
1114 
1115               mod->r_mat->rr->v[AG] = 2.0;
1116               mod->r_mat->rr->v[CT] = 2.0;
1117             }
1118         }
1119       else if(mod->whichmodel == GTR)
1120         {
1121           if(mod->s_opt->opt_rr == YES)
1122             {
1123               for(i=0;i<6;i++) mod->r_mat->rr_val->v[i] = 0.0;
1124               for(i=0;i<6;i++) mod->r_mat->rr->v[i] = 1.0;
1125 
1126               mod->r_mat->rr_val->v[AG] = log(2.0);
1127               mod->r_mat->rr_val->v[CT] = log(2.0);
1128 
1129               mod->r_mat->rr->v[AG] = 2.0;
1130               mod->r_mat->rr->v[CT] = 2.0;
1131             }
1132         }
1133     }
1134 
1135   if(mod->s_opt->opt_alpha)  mod->ras->alpha->v  = 1.0;
1136   if(mod->s_opt->opt_pinvar) mod->ras->pinvar->v = 0.2;
1137 
1138   if(io->datatype == NT) /* Nucleotides */
1139     {
1140       /* init for nucleotides */
1141 
1142       if(mod->whichmodel == JC69)
1143         {
1144           mod->e_frq->pi->v[0] = mod->e_frq->pi->v[1] = mod->e_frq->pi->v[2] = mod->e_frq->pi->v[3] = .25;
1145           mod->kappa->v = 1.;
1146           mod->s_opt->opt_state_freq = NO;
1147           mod->s_opt->opt_kappa      = NO;
1148           mod->s_opt->opt_lambda     = NO;
1149           mod->update_eigen          = NO;
1150         }
1151 
1152       if(mod->whichmodel == K80)
1153         {
1154           mod->e_frq->pi->v[0] = mod->e_frq->pi->v[1] = mod->e_frq->pi->v[2] = mod->e_frq->pi->v[3] = .25;
1155           mod->s_opt->opt_state_freq = NO;
1156           mod->s_opt->opt_lambda     = NO;
1157           mod->update_eigen          = NO;
1158         }
1159 
1160       if(mod->whichmodel == F81)
1161         {
1162           if(mod->e_frq->user_state_freq == NO) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1163           else for(i=0;i<4;i++) mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1164           for(i=0;i<mod->ns;i++) mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1165           mod->kappa->v = 1.;
1166           mod->update_eigen = NO;
1167         }
1168 
1169       if(mod->whichmodel == F84)
1170         {
1171           if(mod->e_frq->user_state_freq == NO) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1172           else for(i=0;i<4;i++) mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1173           for(i=0;i<mod->ns;i++) mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1174           aux = ((mod->e_frq->pi->v[0]+mod->e_frq->pi->v[2])-(mod->e_frq->pi->v[1]+mod->e_frq->pi->v[3]))/(2.*mod->kappa->v);
1175           mod->lambda->v = ((mod->e_frq->pi->v[1]+mod->e_frq->pi->v[3]) + aux)/((mod->e_frq->pi->v[0]+mod->e_frq->pi->v[2]) - aux);
1176           mod->update_eigen = NO;
1177         }
1178 
1179       if(mod->whichmodel == TN93)
1180         {
1181           if(mod->e_frq->user_state_freq == NO)
1182             Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1183           else
1184             for(i=0;i<4;i++)
1185               mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1186           for(i=0;i<mod->ns;i++)
1187             mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1188           mod->update_eigen = NO;
1189           if(io->mod->s_opt->opt_kappa) io->mod->s_opt->opt_lambda = YES;
1190 
1191         }
1192 
1193       if(mod->whichmodel == HKY85)
1194         {
1195           if(mod->e_frq->user_state_freq == NO)
1196             Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1197           else
1198             for(i=0;i<4;i++)
1199               mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1200           for(i=0;i<mod->ns;i++)
1201             mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1202           mod->update_eigen = NO;
1203         }
1204 
1205       if(mod->whichmodel == GTR)
1206         {
1207           if (mod->e_frq->user_state_freq == NO)
1208             Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1209           else
1210             for(i=0;i<4;i++)
1211               mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1212           for(i=0;i<mod->ns;i++)
1213             mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1214           mod->kappa->v     = 1.;
1215           mod->update_eigen = NO;
1216         }
1217 
1218       if(mod->whichmodel == CUSTOM)
1219         {
1220           if(mod->e_frq->user_state_freq == NO) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1221           else for(i=0;i<4;i++) mod->e_frq->pi->v[i] = mod->e_frq->user_b_freq->v[i];
1222           for(i=0;i<mod->ns;i++) mod->e_frq->pi_unscaled->v[i] = log(mod->e_frq->pi->v[i]);
1223           mod->kappa->v     = 1.;
1224           mod->update_eigen = NO;
1225         }
1226 
1227       if(mod->whichmodel == GTR)
1228         {
1229           mod->custom_mod_string->s[0] = '0';
1230           mod->custom_mod_string->s[1] = '1';
1231           mod->custom_mod_string->s[2] = '2';
1232           mod->custom_mod_string->s[3] = '3';
1233           mod->custom_mod_string->s[4] = '4';
1234           mod->custom_mod_string->s[5] = '5';
1235           Translate_Custom_Mod_String(mod);
1236         }
1237     }
1238   else if(mod->io->datatype == AA)
1239     {
1240 
1241       /* init for amino-acids */
1242       /* see comments of PMat_Empirical for details */
1243       /* read pi and Q from file */
1244 
1245       /* These initialisations are needed when analysing multiple
1246        * data sets
1247        */
1248       For(i,mod->ns*mod->ns) mod->r_mat->qmat->v[i] = .0;
1249       For(i,mod->ns        ) mod->e_frq->pi->v[i]   = .0;
1250 
1251       switch(mod->whichmodel)
1252         {
1253         case DAYHOFF :
1254           {
1255             Init_Qmat_Dayhoff(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1256             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1257             break;
1258           }
1259         case JTT :
1260           {
1261             Init_Qmat_JTT(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1262             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1263             break;
1264           }
1265         case MTREV :
1266           {
1267             Init_Qmat_MtREV(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1268             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1269             break;
1270           }
1271         case LG :
1272           {
1273             Init_Qmat_LG(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1274             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1275             break;
1276           }
1277         case WAG :
1278           {
1279             Init_Qmat_WAG(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1280             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1281             break;
1282           }
1283         case DCMUT :
1284           {
1285             Init_Qmat_DCMut(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1286             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1287             break;
1288           }
1289         case RTREV :
1290           {
1291             Init_Qmat_RtREV(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1292             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1293             break;
1294           }
1295         case CPREV :
1296           {
1297             Init_Qmat_CpREV(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1298             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1299             break;
1300           }
1301         case VT :
1302           {
1303             Init_Qmat_VT(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1304             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1305             break;
1306           }
1307         case BLOSUM62 :
1308           {
1309             Init_Qmat_Blosum62(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1310             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1311             break;
1312           }
1313         case MTMAM :
1314           {
1315             Init_Qmat_MtMam(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1316             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1317             break;
1318           }
1319         case MTART :
1320           {
1321             Init_Qmat_MtArt(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1322             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1323             break;
1324           }
1325         case HIVW :
1326           {
1327             Init_Qmat_HIVw(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1328             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1329             break;
1330           }
1331         case HIVB :
1332           {
1333             Init_Qmat_HIVb(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1334             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1335             break;
1336           }
1337          case AB :
1338           {
1339             Init_Qmat_AB(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1340             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1341             break;
1342           }
1343         case CUSTOMAA :
1344           {
1345             mod->fp_aa_rate_mat = Openfile(mod->aa_rate_mat_file->s,READ);
1346             Read_Qmat(mod->r_mat->qmat->v,mod->e_frq->pi->v,mod->fp_aa_rate_mat);
1347             fclose(mod->fp_aa_rate_mat);
1348             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1349 	    break;
1350 	  }
1351 	case FLU :
1352 	  {
1353 	    Init_Qmat_FLU(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1354             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1355             break;
1356           }
1357         default :
1358           {
1359             Init_Qmat_LG(mod->r_mat->qmat->v,mod->e_frq->pi->v);
1360             if(mod->e_frq->empirical_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1361             break;
1362           }
1363         }
1364 
1365       if(mod->s_opt->opt_state_freq == YES) Init_Efrqs_Using_Observed_Freqs(mod->e_frq,data->obs_state_frq,mod->ns);
1366 
1367 
1368       // Adjust equilibrium state frequencies if some of them are too close to zero
1369       // in order to avoid numerical precision issues.
1370       int iter = 0;
1371       do
1372         {
1373           for(i=0;i<mod->ns;i++) if(mod->e_frq->pi->v[i] < E_FRQ_MIN) mod->e_frq->pi->v[i] = E_FRQ_MIN;
1374           sum = 0.0;
1375           for(i=0;i<mod->ns;i++) sum += fabs(mod->e_frq->pi->v[i]);
1376           for(i=0;i<mod->ns;i++) mod->e_frq->pi->v[i] /= sum;
1377           iter++;
1378         }
1379       while(iter < 10);
1380 
1381       /* multiply the nth col of Q by the nth term of pi/100 just as in PAML */
1382       for(i=0;i<mod->ns;i++) for(j=0;j<mod->ns;j++) mod->r_mat->qmat->v[i*mod->ns+j] *= mod->e_frq->pi->v[j] / 100.0;
1383 
1384       /* compute diagonal terms of Q and mean rate mr = l/t */
1385       mod->mr->v= .0;
1386       For (i,mod->ns)
1387         {
1388           sum=.0;
1389           For(j, mod->ns) sum += mod->r_mat->qmat->v[i*mod->ns+j];
1390           mod->r_mat->qmat->v[i*mod->ns+i] = -sum;
1391           mod->mr->v += mod->e_frq->pi->v[i] * sum;
1392         }
1393 
1394       /* scale instantaneous rate matrix so that mu=1 */
1395       For (i,mod->ns*mod->ns) mod->r_mat->qmat->v[i] /= mod->mr->v;
1396 
1397       /* compute eigenvectors/values */
1398       result = 0;
1399 
1400       For(i,mod->ns*mod->ns) mod->r_mat->qmat_buff->v[i] = mod->r_mat->qmat->v[i];
1401 
1402       if(!Eigen(1,mod->r_mat->qmat_buff->v,mod->eigen->size,mod->eigen->e_val,
1403                 mod->eigen->e_val_im,mod->eigen->r_e_vect,
1404                 mod->eigen->r_e_vect_im,mod->eigen->space))
1405         {
1406           /* compute inverse(Vr) into Vi */
1407           For (i,mod->ns*mod->ns) mod->eigen->l_e_vect[i] = mod->eigen->r_e_vect[i];
1408           if(!Matinv(mod->eigen->l_e_vect,mod->eigen->size,mod->eigen->size,YES))
1409             {
1410               PhyML_Fprintf(stderr,"\n. Err in file %s at line %d.",__FILE__,__LINE__);
1411               Exit("\n");
1412             }
1413 
1414           /* compute the diagonal terms of exp(D) */
1415           for(i=0;i<mod->ns;i++) mod->eigen->e_val[i] = (phydbl)exp(mod->eigen->e_val[i]);
1416         }
1417       else
1418         {
1419           if (result==-1) PhyML_Printf("\n. Eigenvalues/vectors computation does not converge : computation cancelled");
1420           else if (result==1) PhyML_Printf("\n. Complex eigenvalues/vectors : computation cancelled");
1421         }
1422     }
1423   else if(mod->io->datatype == GENERIC)
1424     {
1425       /* Uniform state frequencies */
1426       for(i=0;i<mod->ns;i++)  mod->e_frq->pi->v[i] = 1./(phydbl)mod->ns;
1427       mod->kappa->v = 1;
1428       mod->s_opt->opt_state_freq = NO;
1429       mod->s_opt->opt_kappa      = NO;
1430       mod->s_opt->opt_lambda     = NO;
1431       mod->update_eigen          = NO;
1432       for(i=0;i<mod->ns*(mod->ns-1)/2;i++) mod->r_mat->rr_val->v[i] = 0.0;
1433       for(i=0;i<mod->ns*(mod->ns-1)/2;i++) mod->r_mat->rr->v[i] = 1.0;
1434     }
1435   else
1436     {
1437       PhyML_Fprintf(stderr,"\n. Datatype not recognized.\n");
1438       PhyML_Fprintf(stderr,"\n. Err. in file %s at line %d\n",__FILE__,__LINE__);
1439       Warn_And_Exit("");
1440     }
1441 
1442   Init_Eigen_Struct(mod->eigen);
1443 
1444   Set_Model_Parameters(mod);
1445 
1446   free(dr);
1447   free(di);
1448   free(space);
1449 }
1450 
1451 //////////////////////////////////////////////////////////////
1452 //////////////////////////////////////////////////////////////
1453 
Init_Efrqs_Using_Observed_Freqs(t_efrq * f,phydbl * o,int ns)1454 void Init_Efrqs_Using_Observed_Freqs(t_efrq *f, phydbl *o, int ns)
1455 {
1456   int i;
1457   phydbl eps,sum;
1458 
1459   assert(f);
1460   assert(o);
1461 
1462   // To avoid numerical prevision issues
1463   eps = 1.E-50;
1464 
1465   for(i=0;i<ns;i++) f->pi->v[i] = MAX(o[i],eps);
1466 
1467   sum = 0.0;
1468   for(i=0;i<ns;i++) sum += f->pi->v[i];
1469 
1470   for(i=0;i<ns;i++) f->pi->v[i] /= sum;;
1471 
1472 }
1473 
1474 //////////////////////////////////////////////////////////////
1475 //////////////////////////////////////////////////////////////
1476 
Init_Qmat_Dayhoff(phydbl * daa,phydbl * pi)1477 int Init_Qmat_Dayhoff(phydbl *daa, phydbl *pi)
1478 {
1479   /* Dayhoff's model data
1480    * Dayhoff, M.O., Schwartz, R.M., Orcutt, B.C. (1978)
1481    * "A model of evolutionary change in proteins."
1482    * Dayhoff, M.O.(ed.) Atlas of Protein Sequence Structur., Vol5, Suppl3.
1483    * National Biomedical Research Foundation, Washington DC, pp.345-352.
1484    */
1485   int i,j,naa;
1486 
1487   naa = 20;
1488 
1489 /*   PhyML_Printf("\n\n. REMINDER : THIS IS NOT DAYHOFF !!!\n\n"); */
1490 
1491 /*   daa[1*20 + 0] = 0.538903;  */
1492 /*   daa[2*20 + 0] = 0.412504;  */
1493 /*   daa[2*20 + 1] = 0.736081;  */
1494 /*   daa[3*20 + 0] = 0.586915;  */
1495 /*   daa[3*20 + 1] = 0.108051;  */
1496 /*   daa[3*20 + 2] = 5.446642;  */
1497 /*   daa[4*20 + 0] = 2.189718;  */
1498 /*   daa[4*20 + 1] = 0.830604;  */
1499 /*   daa[4*20 + 2] = 0.573426;  */
1500 /*   daa[4*20 + 3] = 0.077565;  */
1501 /*   daa[5*20 + 0] = 1.08213;  */
1502 /*   daa[5*20 + 1] = 2.950693;  */
1503 /*   daa[5*20 + 2] = 1.739514;  */
1504 /*   daa[5*20 + 3] = 0.559035;  */
1505 /*   daa[5*20 + 4] = 0.111314;  */
1506 /*   daa[6*20 + 0] = 1.386865;  */
1507 /*   daa[6*20 + 1] = 0.358434;  */
1508 /*   daa[6*20 + 2] = 0.541447;  */
1509 /*   daa[6*20 + 3] = 5.406871;  */
1510 /*   daa[6*20 + 4] = 0.003738;  */
1511 /*   daa[6*20 + 5] = 4.124043;  */
1512 /*   daa[7*20 + 0] = 2.085747;  */
1513 /*   daa[7*20 + 1] = 0.453132;  */
1514 /*   daa[7*20 + 2] = 1.815844;  */
1515 /*   daa[7*20 + 3] = 1.08647;  */
1516 /*   daa[7*20 + 4] = 0.526418;  */
1517 /*   daa[7*20 + 5] = 0.347693;  */
1518 /*   daa[7*20 + 6] = 0.438476;  */
1519 /*   daa[8*20 + 0] = 0.407898;  */
1520 /*   daa[8*20 + 1] = 2.689322;  */
1521 /*   daa[8*20 + 2] = 5.386808;  */
1522 /*   daa[8*20 + 3] = 0.884563;  */
1523 /*   daa[8*20 + 4] = 0.658583;  */
1524 /*   daa[8*20 + 5] = 4.588358;  */
1525 /*   daa[8*20 + 6] = 0.386218;  */
1526 /*   daa[8*20 + 7] = 0.368668;  */
1527 /*   daa[9*20 + 0] = 0.10177;  */
1528 /*   daa[9*20 + 1] = 0.104875;  */
1529 /*   daa[9*20 + 2] = 0.16239;  */
1530 /*   daa[9*20 + 3] = 0.011698;  */
1531 /*   daa[9*20 + 4] = 0.253282;  */
1532 /*   daa[9*20 + 5] = 0.083872;  */
1533 /*   daa[9*20 + 6] = 0.041767;  */
1534 /*   daa[9*20 + 7] = 0.009778;  */
1535 /*   daa[9*20 + 8] = 0.1042;  */
1536 /*   daa[10*20 + 0] = 0.248202;  */
1537 /*   daa[10*20 + 1] = 0.375742;  */
1538 /*   daa[10*20 + 2] = 0.093863;  */
1539 /*   daa[10*20 + 3] = 0.019241;  */
1540 /*   daa[10*20 + 4] = 0.572688;  */
1541 /*   daa[10*20 + 5] = 0.703538;  */
1542 /*   daa[10*20 + 6] = 0.071961;  */
1543 /*   daa[10*20 + 7] = 0.03006;  */
1544 /*   daa[10*20 + 8] = 0.418222;  */
1545 /*   daa[10*20 + 9] = 3.702051;  */
1546 /*   daa[11*20 + 0] = 0.652019;  */
1547 /*   daa[11*20 + 1] = 5.940478;  */
1548 /*   daa[11*20 + 2] = 2.352253;  */
1549 /*   daa[11*20 + 3] = 0.231001;  */
1550 /*   daa[11*20 + 4] = 0.027995;  */
1551 /*   daa[11*20 + 5] = 3.646743;  */
1552 /*   daa[11*20 + 6] = 1.507981;  */
1553 /*   daa[11*20 + 7] = 0.331175;  */
1554 /*   daa[11*20 + 8] = 0.698362;  */
1555 /*   daa[11*20 + 9] = 0.140326;  */
1556 /*   daa[11*20 + 10] = 0.171396;  */
1557 /*   daa[12*20 + 0] = 0.694226;  */
1558 /*   daa[12*20 + 1] = 0.419899;  */
1559 /*   daa[12*20 + 2] = 0.326927;  */
1560 /*   daa[12*20 + 3] = 0.039488;  */
1561 /*   daa[12*20 + 4] = 0.844827;  */
1562 /*   daa[12*20 + 5] = 1.394214;  */
1563 /*   daa[12*20 + 6] = 0.133235;  */
1564 /*   daa[12*20 + 7] = 0.085075;  */
1565 /*   daa[12*20 + 8] = 0.347092;  */
1566 /*   daa[12*20 + 9] = 4.051255;  */
1567 /*   daa[12*20 + 10] = 6.650794;  */
1568 /*   daa[12*20 + 11] = 0.617549;  */
1569 /*   daa[13*20 + 0] = 0.155206;  */
1570 /*   daa[13*20 + 1] = 0.057971;  */
1571 /*   daa[13*20 + 2] = 0.09816;  */
1572 /*   daa[13*20 + 3] = 0.020441;  */
1573 /*   daa[13*20 + 4] = 0.904305;  */
1574 /*   daa[13*20 + 5] = 0.052719;  */
1575 /*   daa[13*20 + 6] = 0.0219;  */
1576 /*   daa[13*20 + 7] = 0.046668;  */
1577 /*   daa[13*20 + 8] = 0.890005;  */
1578 /*   daa[13*20 + 9] = 0.844963;  */
1579 /*   daa[13*20 + 10] = 2.348881;  */
1580 /*   daa[13*20 + 11] = 0.028372;  */
1581 /*   daa[13*20 + 12] = 1.671635;  */
1582 /*   daa[14*20 + 0] = 1.433475;  */
1583 /*   daa[14*20 + 1] = 0.328393;  */
1584 /*   daa[14*20 + 2] = 0.173181;  */
1585 /*   daa[14*20 + 3] = 0.431874;  */
1586 /*   daa[14*20 + 4] = 0.09902;  */
1587 /*   daa[14*20 + 5] = 0.592324;  */
1588 /*   daa[14*20 + 6] = 0.488352;  */
1589 /*   daa[14*20 + 7] = 0.23865;  */
1590 /*   daa[14*20 + 8] = 0.462856;  */
1591 /*   daa[14*20 + 9] = 0.057048;  */
1592 /*   daa[14*20 + 10] = 0.233532;  */
1593 /*   daa[14*20 + 11] = 0.387808;  */
1594 /*   daa[14*20 + 12] = 0.096377;  */
1595 /*   daa[14*20 + 13] = 0.079912;  */
1596 /*   daa[15*20 + 0] = 4.887126;  */
1597 /*   daa[15*20 + 1] = 0.883923;  */
1598 /*   daa[15*20 + 2] = 4.627163;  */
1599 /*   daa[15*20 + 3] = 1.122164;  */
1600 /*   daa[15*20 + 4] = 3.186667;  */
1601 /*   daa[15*20 + 5] = 1.085947;  */
1602 /*   daa[15*20 + 6] = 0.569339;  */
1603 /*   daa[15*20 + 7] = 1.993432;  */
1604 /*   daa[15*20 + 8] = 0.867972;  */
1605 /*   daa[15*20 + 9] = 0.070512;  */
1606 /*   daa[15*20 + 10] = 0.163009;  */
1607 /*   daa[15*20 + 11] = 0.718913;  */
1608 /*   daa[15*20 + 12] = 0.301103;  */
1609 /*   daa[15*20 + 13] = 0.32579;  */
1610 /*   daa[15*20 + 14] = 1.449582;  */
1611 /*   daa[16*20 + 0] = 2.030538;  */
1612 /*   daa[16*20 + 1] = 0.639463;  */
1613 /*   daa[16*20 + 2] = 2.076294;  */
1614 /*   daa[16*20 + 3] = 0.377239;  */
1615 /*   daa[16*20 + 4] = 1.42848;  */
1616 /*   daa[16*20 + 5] = 0.979403;  */
1617 /*   daa[16*20 + 6] = 0.647562;  */
1618 /*   daa[16*20 + 7] = 0.145556;  */
1619 /*   daa[16*20 + 8] = 0.493329;  */
1620 /*   daa[16*20 + 9] = 0.973405;  */
1621 /*   daa[16*20 + 10] = 0.271824;  */
1622 /*   daa[16*20 + 11] = 1.20033;  */
1623 /*   daa[16*20 + 12] = 1.659187;  */
1624 /*   daa[16*20 + 13] = 0.1217;  */
1625 /*   daa[16*20 + 14] = 0.571399;  */
1626 /*   daa[16*20 + 15] = 6.641034;  */
1627 /*   daa[17*20 + 0] = 0.131405;  */
1628 /*   daa[17*20 + 1] = 0.552911;  */
1629 /*   daa[17*20 + 2] = 0.079985;  */
1630 /*   daa[17*20 + 3] = 0.060514;  */
1631 /*   daa[17*20 + 4] = 0.633662;  */
1632 /*   daa[17*20 + 5] = 0.21823;  */
1633 /*   daa[17*20 + 6] = 0.074988;  */
1634 /*   daa[17*20 + 7] = 0.169114;  */
1635 /*   daa[17*20 + 8] = 0.847725;  */
1636 /*   daa[17*20 + 9] = 0.10627;  */
1637 /*   daa[17*20 + 10] = 0.622044;  */
1638 /*   daa[17*20 + 11] = 0.060755;  */
1639 /*   daa[17*20 + 12] = 0.719575;  */
1640 /*   daa[17*20 + 13] = 3.14824;  */
1641 /*   daa[17*20 + 14] = 0.077123;  */
1642 /*   daa[17*20 + 15] = 0.276716;  */
1643 /*   daa[17*20 + 16] = 0.148883;  */
1644 /*   daa[18*20 + 0] = 0.165179;  */
1645 /*   daa[18*20 + 1] = 0.224883;  */
1646 /*   daa[18*20 + 2] = 0.528334;  */
1647 /*   daa[18*20 + 3] = 0.121252;  */
1648 /*   daa[18*20 + 4] = 1.174118;  */
1649 /*   daa[18*20 + 5] = 0.177062;  */
1650 /*   daa[18*20 + 6] = 0.074715;  */
1651 /*   daa[18*20 + 7] = 0.042356;  */
1652 /*   daa[18*20 + 8] = 5.911187;  */
1653 /*   daa[18*20 + 9] = 0.192481;  */
1654 /*   daa[18*20 + 10] = 0.321454;  */
1655 /*   daa[18*20 + 11] = 0.090556;  */
1656 /*   daa[18*20 + 12] = 0.406415;  */
1657 /*   daa[18*20 + 13] = 10.908861;  */
1658 /*   daa[18*20 + 14] = 0.070752;  */
1659 /*   daa[18*20 + 15] = 0.328483;  */
1660 /*   daa[18*20 + 16] = 0.181539;  */
1661 /*   daa[18*20 + 17] = 3.823886;  */
1662 /*   daa[19*20 + 0] = 1.78517;  */
1663 /*   daa[19*20 + 1] = 0.166975;  */
1664 /*   daa[19*20 + 2] = 0.106482;  */
1665 /*   daa[19*20 + 3] = 0.041707;  */
1666 /*   daa[19*20 + 4] = 1.876812;  */
1667 /*   daa[19*20 + 5] = 0.22421;  */
1668 /*   daa[19*20 + 6] = 0.247356;  */
1669 /*   daa[19*20 + 7] = 0.06688;  */
1670 /*   daa[19*20 + 8] = 0.1436;  */
1671 /*   daa[19*20 + 9] = 9.60184;  */
1672 /*   daa[19*20 + 10] = 1.599119;  */
1673 /*   daa[19*20 + 11] = 0.17319;  */
1674 /*   daa[19*20 + 12] = 1.645134;  */
1675 /*   daa[19*20 + 13] = 0.438571;  */
1676 /*   daa[19*20 + 14] = 0.252486;  */
1677 /*   daa[19*20 + 15] = 0.105536;  */
1678 /*   daa[19*20 + 16] = 1.789097;  */
1679 /*   daa[19*20 + 17] = 0.147951;  */
1680 /*   daa[19*20 + 18] = 0.200571; */
1681 
1682 
1683 
1684 /*   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j]; */
1685 
1686 
1687 /*   pi[0] = 0.093862;  */
1688 /*   pi[1] = 0.05757;  */
1689 /*   pi[2] = 0.037017;  */
1690 /*   pi[3] = 0.060952;  */
1691 /*   pi[4] = 0.011004;  */
1692 /*   pi[5] = 0.044631;  */
1693 /*   pi[6] = 0.083648;  */
1694 /*   pi[7] = 0.053004;  */
1695 /*   pi[8] = 0.022528;  */
1696 /*   pi[9] = 0.060152;  */
1697 /*   pi[10] = 0.092314;  */
1698 /*   pi[11] = 0.065886;  */
1699 /*   pi[12] = 0.021075;  */
1700 /*   pi[13] = 0.033928;  */
1701 /*   pi[14] = 0.043333;  */
1702 /*   pi[15] = 0.052957;  */
1703 /*   pi[16] = 0.053465;  */
1704 /*   pi[17] = 0.00928;  */
1705 /*   pi[18] = 0.030025;  */
1706 /*   pi[19] = 0.073369; */
1707 
1708 
1709   daa[ 1*20+ 0] =   27.00; daa[ 2*20+ 0] =   98.00; daa[ 2*20+ 1] =   32.00; daa[ 3*20+ 0] =  120.00;
1710   daa[ 3*20+ 1] =    0.00; daa[ 3*20+ 2] =  905.00; daa[ 4*20+ 0] =   36.00; daa[ 4*20+ 1] =   23.00;
1711   daa[ 4*20+ 2] =    0.00; daa[ 4*20+ 3] =    0.00; daa[ 5*20+ 0] =   89.00; daa[ 5*20+ 1] =  246.00;
1712   daa[ 5*20+ 2] =  103.00; daa[ 5*20+ 3] =  134.00; daa[ 5*20+ 4] =    0.00; daa[ 6*20+ 0] =  198.00;
1713   daa[ 6*20+ 1] =    1.00; daa[ 6*20+ 2] =  148.00; daa[ 6*20+ 3] = 1153.00; daa[ 6*20+ 4] =    0.00;
1714   daa[ 6*20+ 5] =  716.00; daa[ 7*20+ 0] =  240.00; daa[ 7*20+ 1] =    9.00; daa[ 7*20+ 2] =  139.00;
1715   daa[ 7*20+ 3] =  125.00; daa[ 7*20+ 4] =   11.00; daa[ 7*20+ 5] =   28.00; daa[ 7*20+ 6] =   81.00;
1716   daa[ 8*20+ 0] =   23.00; daa[ 8*20+ 1] =  240.00; daa[ 8*20+ 2] =  535.00; daa[ 8*20+ 3] =   86.00;
1717   daa[ 8*20+ 4] =   28.00; daa[ 8*20+ 5] =  606.00; daa[ 8*20+ 6] =   43.00; daa[ 8*20+ 7] =   10.00;
1718   daa[ 9*20+ 0] =   65.00; daa[ 9*20+ 1] =   64.00; daa[ 9*20+ 2] =   77.00; daa[ 9*20+ 3] =   24.00;
1719   daa[ 9*20+ 4] =   44.00; daa[ 9*20+ 5] =   18.00; daa[ 9*20+ 6] =   61.00; daa[ 9*20+ 7] =    0.00;
1720   daa[ 9*20+ 8] =    7.00; daa[10*20+ 0] =   41.00; daa[10*20+ 1] =   15.00; daa[10*20+ 2] =   34.00;
1721   daa[10*20+ 3] =    0.00; daa[10*20+ 4] =    0.00; daa[10*20+ 5] =   73.00; daa[10*20+ 6] =   11.00;
1722   daa[10*20+ 7] =    7.00; daa[10*20+ 8] =   44.00; daa[10*20+ 9] =  257.00; daa[11*20+ 0] =   26.00;
1723   daa[11*20+ 1] =  464.00; daa[11*20+ 2] =  318.00; daa[11*20+ 3] =   71.00; daa[11*20+ 4] =    0.00;
1724   daa[11*20+ 5] =  153.00; daa[11*20+ 6] =   83.00; daa[11*20+ 7] =   27.00; daa[11*20+ 8] =   26.00;
1725   daa[11*20+ 9] =   46.00; daa[11*20+10] =   18.00; daa[12*20+ 0] =   72.00; daa[12*20+ 1] =   90.00;
1726   daa[12*20+ 2] =    1.00; daa[12*20+ 3] =    0.00; daa[12*20+ 4] =    0.00; daa[12*20+ 5] =  114.00;
1727   daa[12*20+ 6] =   30.00; daa[12*20+ 7] =   17.00; daa[12*20+ 8] =    0.00; daa[12*20+ 9] =  336.00;
1728   daa[12*20+10] =  527.00; daa[12*20+11] =  243.00; daa[13*20+ 0] =   18.00; daa[13*20+ 1] =   14.00;
1729   daa[13*20+ 2] =   14.00; daa[13*20+ 3] =    0.00; daa[13*20+ 4] =    0.00; daa[13*20+ 5] =    0.00;
1730   daa[13*20+ 6] =    0.00; daa[13*20+ 7] =   15.00; daa[13*20+ 8] =   48.00; daa[13*20+ 9] =  196.00;
1731   daa[13*20+10] =  157.00; daa[13*20+11] =    0.00; daa[13*20+12] =   92.00; daa[14*20+ 0] =  250.00;
1732   daa[14*20+ 1] =  103.00; daa[14*20+ 2] =   42.00; daa[14*20+ 3] =   13.00; daa[14*20+ 4] =   19.00;
1733   daa[14*20+ 5] =  153.00; daa[14*20+ 6] =   51.00; daa[14*20+ 7] =   34.00; daa[14*20+ 8] =   94.00;
1734   daa[14*20+ 9] =   12.00; daa[14*20+10] =   32.00; daa[14*20+11] =   33.00; daa[14*20+12] =   17.00;
1735   daa[14*20+13] =   11.00; daa[15*20+ 0] =  409.00; daa[15*20+ 1] =  154.00; daa[15*20+ 2] =  495.00;
1736   daa[15*20+ 3] =   95.00; daa[15*20+ 4] =  161.00; daa[15*20+ 5] =   56.00; daa[15*20+ 6] =   79.00;
1737   daa[15*20+ 7] =  234.00; daa[15*20+ 8] =   35.00; daa[15*20+ 9] =   24.00; daa[15*20+10] =   17.00;
1738   daa[15*20+11] =   96.00; daa[15*20+12] =   62.00; daa[15*20+13] =   46.00; daa[15*20+14] =  245.00;
1739   daa[16*20+ 0] =  371.00; daa[16*20+ 1] =   26.00; daa[16*20+ 2] =  229.00; daa[16*20+ 3] =   66.00;
1740   daa[16*20+ 4] =   16.00; daa[16*20+ 5] =   53.00; daa[16*20+ 6] =   34.00; daa[16*20+ 7] =   30.00;
1741   daa[16*20+ 8] =   22.00; daa[16*20+ 9] =  192.00; daa[16*20+10] =   33.00; daa[16*20+11] =  136.00;
1742   daa[16*20+12] =  104.00; daa[16*20+13] =   13.00; daa[16*20+14] =   78.00; daa[16*20+15] =  550.00;
1743   daa[17*20+ 0] =    0.00; daa[17*20+ 1] =  201.00; daa[17*20+ 2] =   23.00; daa[17*20+ 3] =    0.00;
1744   daa[17*20+ 4] =    0.00; daa[17*20+ 5] =    0.00; daa[17*20+ 6] =    0.00; daa[17*20+ 7] =    0.00;
1745   daa[17*20+ 8] =   27.00; daa[17*20+ 9] =    0.00; daa[17*20+10] =   46.00; daa[17*20+11] =    0.00;
1746   daa[17*20+12] =    0.00; daa[17*20+13] =   76.00; daa[17*20+14] =    0.00; daa[17*20+15] =   75.00;
1747   daa[17*20+16] =    0.00; daa[18*20+ 0] =   24.00; daa[18*20+ 1] =    8.00; daa[18*20+ 2] =   95.00;
1748   daa[18*20+ 3] =    0.00; daa[18*20+ 4] =   96.00; daa[18*20+ 5] =    0.00; daa[18*20+ 6] =   22.00;
1749   daa[18*20+ 7] =    0.00; daa[18*20+ 8] =  127.00; daa[18*20+ 9] =   37.00; daa[18*20+10] =   28.00;
1750   daa[18*20+11] =   13.00; daa[18*20+12] =    0.00; daa[18*20+13] =  698.00; daa[18*20+14] =    0.00;
1751   daa[18*20+15] =   34.00; daa[18*20+16] =   42.00; daa[18*20+17] =   61.00; daa[19*20+ 0] =  208.00;
1752   daa[19*20+ 1] =   24.00; daa[19*20+ 2] =   15.00; daa[19*20+ 3] =   18.00; daa[19*20+ 4] =   49.00;
1753   daa[19*20+ 5] =   35.00; daa[19*20+ 6] =   37.00; daa[19*20+ 7] =   54.00; daa[19*20+ 8] =   44.00;
1754   daa[19*20+ 9] =  889.00; daa[19*20+10] =  175.00; daa[19*20+11] =   10.00; daa[19*20+12] =  258.00;
1755   daa[19*20+13] =   12.00; daa[19*20+14] =   48.00; daa[19*20+15] =   30.00; daa[19*20+16] =  157.00;
1756   daa[19*20+17] =    0.00; daa[19*20+18] =   28.00;
1757 
1758   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
1759 
1760   pi[ 0] = 0.087127; pi[ 1] = 0.040904; pi[ 2] = 0.040432; pi[ 3] = 0.046872;
1761   pi[ 4] = 0.033474; pi[ 5] = 0.038255; pi[ 6] = 0.049530; pi[ 7] = 0.088612;
1762   pi[ 8] = 0.033618; pi[ 9] = 0.036886; pi[10] = 0.085357; pi[11] = 0.080482;
1763   pi[12] = 0.014753; pi[13] = 0.039772; pi[14] = 0.050680; pi[15] = 0.069577;
1764   pi[16] = 0.058542; pi[17] = 0.010494; pi[18] = 0.029916; pi[19] = 0.064718;
1765 
1766 
1767 
1768   return 1;
1769 }
1770 
1771 //////////////////////////////////////////////////////////////
1772 //////////////////////////////////////////////////////////////
1773 
1774 
Init_Qmat_DCMut(phydbl * daa,phydbl * pi)1775 int Init_Qmat_DCMut(phydbl *daa, phydbl *pi)
1776 {
1777   /*
1778      DCMut : new implementation based on Dayhoff et al.'s raw data and amino acid mutabilities
1779      C. Kosiol and N. Goldman. (2005),
1780      ``Different versions of the Dayhoff rate matrix'',
1781      Mol. Biol. Evol., 22. 193-199.
1782   */
1783 
1784   int i,j,naa;
1785 
1786   naa = 20;
1787 
1788   daa[ 1*20+ 0] =   26.78280; daa[ 2*20+ 0] =   98.44740; daa[ 2*20+ 1] =   32.70590; daa[ 3*20+ 0] =  119.98050;
1789   daa[ 3*20+ 1] =    0.00000; daa[ 3*20+ 2] =  893.15150; daa[ 4*20+ 0] =   36.00160; daa[ 4*20+ 1] =   23.23740;
1790   daa[ 4*20+ 2] =    0.00000; daa[ 4*20+ 3] =    0.00000; daa[ 5*20+ 0] =   88.77530; daa[ 5*20+ 1] =  243.99390;
1791   daa[ 5*20+ 2] =  102.85090; daa[ 5*20+ 3] =  134.85510; daa[ 5*20+ 4] =    0.00000; daa[ 6*20+ 0] =  196.11670;
1792   daa[ 6*20+ 1] =    0.00000; daa[ 6*20+ 2] =  149.34090; daa[ 6*20+ 3] = 1138.86590; daa[ 6*20+ 4] =    0.00000;
1793   daa[ 6*20+ 5] =  708.60220; daa[ 7*20+ 0] =  238.61110; daa[ 7*20+ 1] =    8.77910; daa[ 7*20+ 2] =  138.53520;
1794   daa[ 7*20+ 3] =  124.09810; daa[ 7*20+ 4] =   10.72780; daa[ 7*20+ 5] =   28.15810; daa[ 7*20+ 6] =   81.19070;
1795   daa[ 8*20+ 0] =   22.81160; daa[ 8*20+ 1] =  238.31480; daa[ 8*20+ 2] =  529.00240; daa[ 8*20+ 3] =   86.82410;
1796   daa[ 8*20+ 4] =   28.27290; daa[ 8*20+ 5] =  601.16130; daa[ 8*20+ 6] =   43.94690; daa[ 8*20+ 7] =   10.68020;
1797   daa[ 9*20+ 0] =   65.34160; daa[ 9*20+ 1] =   63.26290; daa[ 9*20+ 2] =   76.80240; daa[ 9*20+ 3] =   23.92480;
1798   daa[ 9*20+ 4] =   43.80740; daa[ 9*20+ 5] =   18.03930; daa[ 9*20+ 6] =   60.95260; daa[ 9*20+ 7] =    0.00000;
1799   daa[ 9*20+ 8] =    7.69810; daa[10*20+ 0] =   40.64310; daa[10*20+ 1] =   15.49240; daa[10*20+ 2] =   34.11130;
1800   daa[10*20+ 3] =    0.00000; daa[10*20+ 4] =    0.00000; daa[10*20+ 5] =   73.07720; daa[10*20+ 6] =   11.28800;
1801   daa[10*20+ 7] =    7.15140; daa[10*20+ 8] =   44.35040; daa[10*20+ 9] =  255.66850; daa[11*20+ 0] =   25.86350;
1802   daa[11*20+ 1] =  461.01240; daa[11*20+ 2] =  314.83710; daa[11*20+ 3] =   71.69130; daa[11*20+ 4] =    0.00000;
1803   daa[11*20+ 5] =  151.90780; daa[11*20+ 6] =   83.00780; daa[11*20+ 7] =   26.76830; daa[11*20+ 8] =   27.04750;
1804   daa[11*20+ 9] =   46.08570; daa[11*20+10] =   18.06290; daa[12*20+ 0] =   71.78400; daa[12*20+ 1] =   89.63210;
1805   daa[12*20+ 2] =    0.00000; daa[12*20+ 3] =    0.00000; daa[12*20+ 4] =    0.00000; daa[12*20+ 5] =  112.74990;
1806   daa[12*20+ 6] =   30.48030; daa[12*20+ 7] =   17.03720; daa[12*20+ 8] =    0.00000; daa[12*20+ 9] =  333.27320;
1807   daa[12*20+10] =  523.01150; daa[12*20+11] =  241.17390; daa[13*20+ 0] =   18.36410; daa[13*20+ 1] =   13.69060;
1808   daa[13*20+ 2] =   13.85030; daa[13*20+ 3] =    0.00000; daa[13*20+ 4] =    0.00000; daa[13*20+ 5] =    0.00000;
1809   daa[13*20+ 6] =    0.00000; daa[13*20+ 7] =   15.34780; daa[13*20+ 8] =   47.59270; daa[13*20+ 9] =  195.19510;
1810   daa[13*20+10] =  156.51600; daa[13*20+11] =    0.00000; daa[13*20+12] =   92.18600; daa[14*20+ 0] =  248.59200;
1811   daa[14*20+ 1] =  102.83130; daa[14*20+ 2] =   41.92440; daa[14*20+ 3] =   13.39400; daa[14*20+ 4] =   18.75500;
1812   daa[14*20+ 5] =  152.61880; daa[14*20+ 6] =   50.70030; daa[14*20+ 7] =   34.71530; daa[14*20+ 8] =   93.37090;
1813   daa[14*20+ 9] =   11.91520; daa[14*20+10] =   31.62580; daa[14*20+11] =   33.54190; daa[14*20+12] =   17.02050;
1814   daa[14*20+13] =   11.05060; daa[15*20+ 0] =  405.18700; daa[15*20+ 1] =  153.15900; daa[15*20+ 2] =  488.58920;
1815   daa[15*20+ 3] =   95.60970; daa[15*20+ 4] =  159.83560; daa[15*20+ 5] =   56.18280; daa[15*20+ 6] =   79.39990;
1816   daa[15*20+ 7] =  232.22430; daa[15*20+ 8] =   35.36430; daa[15*20+ 9] =   24.79550; daa[15*20+10] =   17.14320;
1817   daa[15*20+11] =   95.45570; daa[15*20+12] =   61.99510; daa[15*20+13] =   45.99010; daa[15*20+14] =  242.72020;
1818   daa[16*20+ 0] =  368.03650; daa[16*20+ 1] =   26.57450; daa[16*20+ 2] =  227.16970; daa[16*20+ 3] =   66.09300;
1819   daa[16*20+ 4] =   16.23660; daa[16*20+ 5] =   52.56510; daa[16*20+ 6] =   34.01560; daa[16*20+ 7] =   30.66620;
1820   daa[16*20+ 8] =   22.63330; daa[16*20+ 9] =  190.07390; daa[16*20+10] =   33.10900; daa[16*20+11] =  135.05990;
1821   daa[16*20+12] =  103.15340; daa[16*20+13] =   13.66550; daa[16*20+14] =   78.28570; daa[16*20+15] =  543.66740;
1822   daa[17*20+ 0] =    0.00000; daa[17*20+ 1] =  200.13750; daa[17*20+ 2] =   22.49680; daa[17*20+ 3] =    0.00000;
1823   daa[17*20+ 4] =    0.00000; daa[17*20+ 5] =    0.00000; daa[17*20+ 6] =    0.00000; daa[17*20+ 7] =    0.00000;
1824   daa[17*20+ 8] =   27.05640; daa[17*20+ 9] =    0.00000; daa[17*20+10] =   46.17760; daa[17*20+11] =    0.00000;
1825   daa[17*20+12] =    0.00000; daa[17*20+13] =   76.23540; daa[17*20+14] =    0.00000; daa[17*20+15] =   74.08190;
1826   daa[17*20+16] =    0.00000; daa[18*20+ 0] =   24.41390; daa[18*20+ 1] =    7.80120; daa[18*20+ 2] =   94.69400;
1827   daa[18*20+ 3] =    0.00000; daa[18*20+ 4] =   95.31640; daa[18*20+ 5] =    0.00000; daa[18*20+ 6] =   21.47170;
1828   daa[18*20+ 7] =    0.00000; daa[18*20+ 8] =  126.54000; daa[18*20+ 9] =   37.48340; daa[18*20+10] =   28.65720;
1829   daa[18*20+11] =   13.21420; daa[18*20+12] =    0.00000; daa[18*20+13] =  695.26290; daa[18*20+14] =    0.00000;
1830   daa[18*20+15] =   33.62890; daa[18*20+16] =   41.78390; daa[18*20+17] =   60.80700; daa[19*20+ 0] =  205.95640;
1831   daa[19*20+ 1] =   24.03680; daa[19*20+ 2] =   15.80670; daa[19*20+ 3] =   17.83160; daa[19*20+ 4] =   48.46780;
1832   daa[19*20+ 5] =   34.69830; daa[19*20+ 6] =   36.72500; daa[19*20+ 7] =   53.81650; daa[19*20+ 8] =   43.87150;
1833   daa[19*20+ 9] =  881.00380; daa[19*20+10] =  174.51560; daa[19*20+11] =   10.38500; daa[19*20+12] =  256.59550;
1834   daa[19*20+13] =   12.36060; daa[19*20+14] =   48.50260; daa[19*20+15] =   30.38360; daa[19*20+16] =  156.19970;
1835   daa[19*20+17] =    0.00000; daa[19*20+18] =   27.93790;
1836 
1837   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
1838 
1839   pi[ 0] = 0.087127; pi[ 1] = 0.040904; pi[ 2] = 0.040432; pi[ 3] = 0.046872;
1840   pi[ 4] = 0.033474; pi[ 5] = 0.038255; pi[ 6] = 0.049530; pi[ 7] = 0.088612;
1841   pi[ 8] = 0.033619; pi[ 9] = 0.036886; pi[10] = 0.085357; pi[11] = 0.080481;
1842   pi[12] = 0.014753; pi[13] = 0.039772; pi[14] = 0.050680; pi[15] = 0.069577;
1843   pi[16] = 0.058542; pi[17] = 0.010494; pi[18] = 0.029916; pi[19] = 0.064718;
1844 
1845   return 1;
1846 }
1847 
1848 //////////////////////////////////////////////////////////////
1849 //////////////////////////////////////////////////////////////
1850 
1851 
Init_Qmat_MtArt(phydbl * daa,phydbl * pi)1852 int Init_Qmat_MtArt(phydbl *daa, phydbl *pi) // Added by Federico Abascal
1853 {
1854     /*
1855        Federico Abascal, April 2005 (c).
1856 
1857        This model has been derived from 36 artropoda mitochondrial genomes.
1858 
1859        Each gene of the given species was aligned individually. Then, alignments of the whole set
1860        of 13 genes where concatenated and passed through GBlocks (Castresana, 2000, in JME) with
1861        parameters and output:
1862 
1863             Minimum Number Of Sequences For A Conserved Position: 20
1864             Minimum Number Of Sequences For A Flanking Position: 32
1865             Maximum Number Of Contiguous Nonconserved Positions: 8
1866             Minimum Length Of A Block: 10
1867             Allowed Gap Positions: With Half
1868             Use Similarity Matrices: Yes
1869 
1870             Flank positions of the 40 selected block(s)
1871             Flanks: [6  22]  [26  44]  [61  70]  [77  143]  [145  185]  [208  236]  [309  640]
1872             [644  802]  [831  941]  [956  966]  [973  1062]  [1085  1339]  [1343  1702]
1873             [1754  1831]  [1840  1911]  [1916  1987]  [2011  2038]  [2097  2118]  [2125  2143]
1874             [2179  2215]  [2243  2268]  [2277  2288]  [2333  2347]  [2476  2518]  [2539  2558]
1875             [2600  2613]  [2637  2672]  [2738  2759]  [2784  2839]  [2882  2924]  [2948  3097]
1876             [3113  3123]  [3210  3235]  [3239  3322]  [3348  3392]  [3406  3526]  [3588  3617]
1877             [3660  3692]  [3803  3830]  [3909  3928]
1878 
1879             New number of positions in MtArt-strict.phy.fasta-gb: <b> 2664 </b> (67% of the original 3933 positions)
1880 
1881        The species included in the analysis were:
1882             Harpiosquilla harpax          [NCBI_TaxID 287944]
1883             Ixodes uriae                  [NCBI_TaxID 59655]
1884             Heptathela hangzhouensis      [NCBI_TaxID 216259]
1885             Triops longicaudatus          [NCBI_TaxID 58777]
1886             Gryllotalpa orientalis        [NCBI_TaxID 213494]
1887             lepidopsocid RS-2001          [NCBI_TaxID 159971]
1888             Locusta migratoria            [NCBI_TaxID 7004]
1889             Drosophila yakuba             [NCBI_TaxID 7245]
1890             Ostrinia furnacalis           [NCBI_TaxID 93504]
1891             Megabalanus volcano           [NCBI_TaxID 266495]
1892             Periplaneta fuliginosa        [NCBI_TaxID 36977]
1893             Thermobia domestica           [NCBI_TaxID 89055]
1894             Aleurochiton aceris           [NCBI_TaxID 266942]
1895             Schizaphis graminum           [NCBI_TaxID 13262]
1896             Pteronarcys princeps          [NCBI_TaxID 285953]
1897             Aleurodicus dugesii           [NCBI_TaxID 30099]
1898             Pollicipes polymerus          [NCBI_TaxID 36137]
1899             Gomphiocephalus hodgsoni      [NCBI_TaxID 221270]
1900             Habronattus oregonensis       [NCBI_TaxID 130930]
1901             Speleonectes tulumensis       [NCBI_TaxID 84346]
1902             Hutchinsoniella macracantha   [NCBI_TaxID 84335]
1903             Haemaphysalis flava           [NCBI_TaxID 181088]
1904             Scutigera coleoptrata         [NCBI_TaxID 29022]
1905             Vargula hilgendorfii          [NCBI_TaxID 6674]
1906             Tricholepidion gertschi       [NCBI_TaxID 89825]
1907             Varroa destructor             [NCBI_TaxID 109461]
1908             Bombyx mandarina              [NCBI_TaxID 7092]
1909             Thyropygus sp.                [NCBI_TaxID 174155]
1910             Tribolium castaneum           [NCBI_TaxID 7070]
1911             Pagurus longicarpus           [NCBI_TaxID 111067]
1912             Limulus polyphemus            [NCBI_TaxID 6850]
1913             Tetrodontophora bielanensis   [NCBI_TaxID 48717]
1914             Penaeus monodon               [NCBI_TaxID 6687]
1915             Daphnia pulex                 [NCBI_TaxID 6669]
1916             Apis mellifera                [NCBI_TaxID 7469]
1917             Anopheles gambiae             [NCBI_TaxID 7165]
1918 
1919        The topology used for inferring the model was:
1920             (((Daph_pulex,Trio_longi),((((((Aleu_aceri,Aleu_duges),Schi_grami),lepi_RS_20),
1921             ((((Ostr_furna,Bomb_manda),(Dros_yakub,Anop_gambi)),Apis_melli),Trib_casta)),
1922             ((Gryl_orien,Locu_migra),(Pter_princ,Peri_fulig))),(Tric_gerts,Ther_domes)),
1923             (Scut_coleo,Thyr_sp),Varg_hilge,Hutc_macra,((((Ixod_uriae,Haem_flava),Varr_destr),
1924             (Habr_orego,Hept_hangz)),Limu_polyp),(Poll_polym,Mega_volca),(Gomp_hodgs,Tetr_biela),
1925             ((Pagu_longi,Pena_monod),Harp_harpa),Spel_tulum));
1926 
1927             Note this is not the ML topology but the consensus one (based on morphological data,
1928             phylogenetic reconstruction using nuclear genes, etc). Where relationships are
1929             not clear, a polytomy was introduced (it contains quite a lot of polytomies!).
1930 
1931        The model was estimated using (the great and helpful) Ziheng Yang's Paml software package.
1932        A four-categorized gamma distribution was used to account for heterogeneity (alpha
1933        was estimated to be 0.47821). Sites with ambiguity data were taken into account.
1934 
1935        If you would like the data related to this matrix, please contact fabascal@uvigo.es.
1936        Federico Abascal (c)2005.
1937     */
1938 
1939     int i,j,naa;
1940     naa = 20;
1941     daa[1*20+ 0] = 0.2;     daa[2*20+ 0] = 0.2;     daa[2*20+ 1] = 0.2;     daa[3*20+ 0] = 0.6;
1942     daa[3*20+ 1] = 4.3;     daa[3*20+ 2] = 500.2;   daa[4*20+ 0] = 253.5;   daa[4*20+ 1] = 35.5;
1943     daa[4*20+ 2] = 98.2;    daa[4*20+ 3] = 10.6;    daa[5*20+ 0] = 0.2;     daa[5*20+ 1] = 154.0;
1944     daa[5*20+ 2] = 261.8;   daa[5*20+ 3] = 0.2;     daa[5*20+ 4] = 0.2;     daa[6*20+ 0] = 0.2;
1945     daa[6*20+ 1] = 0.2;     daa[6*20+ 2] = 183.0;   daa[6*20+ 3] = 861.8;   daa[6*20+ 4] = 0.2;
1946     daa[6*20+ 5] = 261.6;   daa[7*20+ 0] = 199.8;   daa[7*20+ 1] = 0.2;     daa[7*20+ 2] = 120.5;
1947     daa[7*20+ 3] = 12.5;    daa[7*20+ 4] = 80.5;    daa[7*20+ 5] = 2.6;     daa[7*20+ 6] = 43.9;
1948     daa[8*20+ 0] = 0.2;     daa[8*20+ 1] = 41.3;    daa[8*20+ 2] = 179.5;   daa[8*20+ 3] = 0.2;
1949     daa[8*20+ 4] = 12.4;    daa[8*20+ 5] = 313.5;   daa[8*20+ 6] = 15.2;    daa[8*20+ 7] = 0.2;
1950     daa[9*20+ 0] = 25.7;    daa[9*20+ 1] = 1.8;     daa[9*20+ 2] = 21.3;    daa[9*20+ 3] = 6.6;
1951     daa[9*20+ 4] = 63.0;    daa[9*20+ 5] = 10.5;    daa[9*20+ 6] = 6.8;     daa[9*20+ 7] = 2.7;
1952     daa[9*20+ 8] = 0.2;     daa[10*20+ 0] = 3.7;    daa[10*20+ 1] = 1.8;    daa[10*20+ 2] = 12.6;
1953     daa[10*20+ 3] = 1.2;    daa[10*20+ 4] = 78.7;   daa[10*20+ 5] = 16.3;   daa[10*20+ 6] = 1.7;
1954     daa[10*20+ 7] = 1.4;    daa[10*20+ 8] = 5.5;    daa[10*20+ 9] = 514.5;  daa[11*20+ 0] = 0.2;
1955     daa[11*20+ 1] = 208.6;  daa[11*20+ 2] = 467.3;  daa[11*20+ 3] = 1.7;    daa[11*20+ 4] = 0.2;
1956     daa[11*20+ 5] = 349.3;  daa[11*20+ 6] = 106.3;  daa[11*20+ 7] = 0.2;    daa[11*20+ 8] = 0.2;
1957     daa[11*20+ 9] = 3.5;    daa[11*20+ 10] = 3.8;   daa[12*20+ 0] = 120.6;  daa[12*20+ 1] = 5.2;
1958     daa[12*20+ 2] = 78.8;   daa[12*20+ 3] = 0.2;    daa[12*20+ 4] = 312.3;  daa[12*20+ 5] = 67.3;
1959     daa[12*20+ 6] = 0.2;    daa[12*20+ 7] = 55.7;   daa[12*20+ 8] = 0.2;    daa[12*20+ 9] = 514.8;
1960     daa[12*20+ 10] = 885.5; daa[12*20+ 11] = 105.6; daa[13*20+ 0] = 13.1;   daa[13*20+ 1] = 4.7;
1961     daa[13*20+ 2] = 19.7;   daa[13*20+ 3] = 0.2;    daa[13*20+ 4] = 184.1;  daa[13*20+ 5] = 0.2;
1962     daa[13*20+ 6] = 0.2;    daa[13*20+ 7] = 0.8;    daa[13*20+ 8] = 13.8;   daa[13*20+ 9] = 117.9;
1963     daa[13*20+ 10] = 262.6; daa[13*20+ 11] = 10.7;  daa[13*20+ 12] = 321.6; daa[14*20+ 0] = 49.3;
1964     daa[14*20+ 1] = 0.2;    daa[14*20+ 2] = 16.5;   daa[14*20+ 3] = 0.2;    daa[14*20+ 4] = 0.2;
1965     daa[14*20+ 5] = 39.3;   daa[14*20+ 6] = 7.9;    daa[14*20+ 7] = 0.2;    daa[14*20+ 8] = 0.8;
1966     daa[14*20+ 9] = 0.2;    daa[14*20+ 10] = 12.2;  daa[14*20+ 11] = 16.8;  daa[14*20+ 12] = 5.3;
1967     daa[14*20+ 13] = 14.6;  daa[15*20+ 0] = 673.0;  daa[15*20+ 1] = 2.7;    daa[15*20+ 2] = 398.4;
1968     daa[15*20+ 3] = 44.4;   daa[15*20+ 4] = 664.2;  daa[15*20+ 5] = 52.4;   daa[15*20+ 6] = 31.5;
1969     daa[15*20+ 7] = 226.0;  daa[15*20+ 8] = 10.6;   daa[15*20+ 9] = 7.2;    daa[15*20+ 10] = 8.2;
1970     daa[15*20+ 11] = 144.2; daa[15*20+ 12] = 111.7; daa[15*20+ 13] = 36.1;  daa[15*20+ 14] = 86.5;
1971     daa[16*20+ 0] = 243.9;  daa[16*20+ 1] = 0.2;    daa[16*20+ 2] = 165.9;  daa[16*20+ 3] = 0.2;
1972     daa[16*20+ 4] = 182.8;  daa[16*20+ 5] = 43.7;   daa[16*20+ 6] = 43.4;   daa[16*20+ 7] = 0.2;
1973     daa[16*20+ 8] = 18.6;   daa[16*20+ 9] = 203.7;  daa[16*20+ 10] = 47.8;  daa[16*20+ 11] = 69.5;
1974     daa[16*20+ 12] = 288.6; daa[16*20+ 13] = 13.5;  daa[16*20+ 14] = 46.8;  daa[16*20+ 15] = 660.4;
1975     daa[17*20+ 0] = 0.2;    daa[17*20+ 1] = 0.2;    daa[17*20+ 2] = 7.7;    daa[17*20+ 3] = 0.2;
1976     daa[17*20+ 4] = 21.6;   daa[17*20+ 5] = 6.7;    daa[17*20+ 6] = 11.0;   daa[17*20+ 7] = 1.9;
1977     daa[17*20+ 8] = 0.2;    daa[17*20+ 9] = 0.2;    daa[17*20+ 10] = 21.1;  daa[17*20+ 11] = 16.0;
1978     daa[17*20+ 12] = 70.7;  daa[17*20+ 13] = 53.7;  daa[17*20+ 14] = 0.2;   daa[17*20+ 15] = 2.4;
1979     daa[17*20+ 16] = 0.2;   daa[18*20+ 0] = 1.2;    daa[18*20+ 1] = 3.9;    daa[18*20+ 2] = 251.2;
1980     daa[18*20+ 3] = 0.2;    daa[18*20+ 4] = 72.0;   daa[18*20+ 5] = 86.7;   daa[18*20+ 6] = 7.7;
1981     daa[18*20+ 7] = 8.6;    daa[18*20+ 8] = 191.4;  daa[18*20+ 9] = 12.3;   daa[18*20+ 10] = 19.8;
1982     daa[18*20+ 11] = 117.1; daa[18*20+ 12] = 70.9;  daa[18*20+ 13] = 791.6; daa[18*20+ 14] = 18.4;
1983     daa[18*20+ 15] = 30.5;  daa[18*20+ 16] = 46.0;  daa[18*20+ 17] = 37.7;  daa[19*20+ 0] = 339.9;
1984     daa[19*20+ 1] = 0.2;    daa[19*20+ 2] = 22.6;   daa[19*20+ 3] = 0.2;    daa[19*20+ 4] = 350.4;
1985     daa[19*20+ 5] = 0.2;    daa[19*20+ 6] = 13.6;   daa[19*20+ 7] = 2.6;    daa[19*20+ 8] = 0.2;
1986     daa[19*20+ 9] = 1854.5; daa[19*20+ 10] = 84.7;  daa[19*20+ 11] = 26.1;  daa[19*20+ 12] = 281.3;
1987     daa[19*20+ 13] = 51.9;  daa[19*20+ 14] = 31.7;  daa[19*20+ 15] = 60.6;  daa[19*20+ 16] = 544.1;
1988     daa[19*20+ 17] = 0.2;   daa[19*20+ 18] = 1.6;
1989 
1990 /*  MtArt.old: esta es la MtArt que hice con 26 secuencias (2 outgroups) con una topologia incorrecta
1991     daa[1*20+ 0] = 0.2;     daa[2*20+ 0] = 0.2;     daa[2*20+ 1] = 8.0;     daa[3*20+ 0] = 0.2;
1992     daa[3*20+ 1] = 0.2;     daa[3*20+ 2] = 441.7;   daa[4*20+ 0] = 287.9;   daa[4*20+ 1] = 48.4;
1993     daa[4*20+ 2] = 82.4;    daa[4*20+ 3] = 0.2;     daa[5*20+ 0] = 0.2;     daa[5*20+ 1] = 149.9;
1994     daa[5*20+ 2] = 278.6;   daa[5*20+ 3] = 0.2;     daa[5*20+ 4] = 21.7;    daa[6*20+ 0] = 6.6;
1995     daa[6*20+ 1] = 0.2;     daa[6*20+ 2] = 213.9;   daa[6*20+ 3] = 760.8;   daa[6*20+ 4] = 0.2;
1996     daa[6*20+ 5] = 292.9;   daa[7*20+ 0] = 228.2;   daa[7*20+ 1] = 0.2;     daa[7*20+ 2] = 97.1;
1997     daa[7*20+ 3] = 10.4;    daa[7*20+ 4] = 98.4;    daa[7*20+ 5] = 4.0;     daa[7*20+ 6] = 48.7;
1998     daa[8*20+ 0] = 0.2;     daa[8*20+ 1] = 56.7;    daa[8*20+ 2] = 156.4;   daa[8*20+ 3] = 24.5;
1999     daa[8*20+ 4] = 15.5;    daa[8*20+ 5] = 328.6;   daa[8*20+ 6] = 7.0;     daa[8*20+ 7] = 8.4;
2000     daa[9*20+ 0] = 26.4;    daa[9*20+ 1] = 1.6;     daa[9*20+ 2] = 40.1;    daa[9*20+ 3] = 0.2;
2001     daa[9*20+ 4] = 22.1;    daa[9*20+ 5] = 13.8;    daa[9*20+ 6] = 0.2;     daa[9*20+ 7] = 3.6;
2002     daa[9*20+ 8] = 0.2;     daa[10*20+ 0] = 3.4;    daa[10*20+ 1] = 0.6;    daa[10*20+ 2] = 13.8;
2003     daa[10*20+ 3] = 0.7;    daa[10*20+ 4] = 76.9;   daa[10*20+ 5] = 12.1;   daa[10*20+ 6] = 5.4;
2004     daa[10*20+ 7] = 2.5;    daa[10*20+ 8] = 2.9;    daa[10*20+ 9] = 542.6;  daa[11*20+ 0] = 0.2;
2005     daa[11*20+ 1] = 240.2;  daa[11*20+ 2] = 602.8;  daa[11*20+ 3] = 35.5;   daa[11*20+ 4] = 0.2;
2006     daa[11*20+ 5] = 357.6;  daa[11*20+ 6] = 62.6;   daa[11*20+ 7] = 0.2;    daa[11*20+ 8] = 3.3;
2007     daa[11*20+ 9] = 0.2;    daa[11*20+ 10] = 17.5;  daa[12*20+ 0] = 119.0;  daa[12*20+ 1] = 0.2;
2008     daa[12*20+ 2] = 91.4;   daa[12*20+ 3] = 6.4;    daa[12*20+ 4] = 332.3;  daa[12*20+ 5] = 65.4;
2009     daa[12*20+ 6] = 0.2;    daa[12*20+ 7] = 60.4;   daa[12*20+ 8] = 2.4;    daa[12*20+ 9] = 492.5;
2010     daa[12*20+ 10] = 815.8; daa[12*20+ 11] = 67.3;  daa[13*20+ 0] = 8.2;    daa[13*20+ 1] = 6.4;
2011     daa[13*20+ 2] = 31.5;   daa[13*20+ 3] = 3.4;    daa[13*20+ 4] = 174.4;  daa[13*20+ 5] = 5.7;
2012     daa[13*20+ 6] = 5.7;    daa[13*20+ 7] = 2.1;    daa[13*20+ 8] = 11.0;   daa[13*20+ 9] = 94.4;
2013     daa[13*20+ 10] = 243.3; daa[13*20+ 11] = 12.3;  daa[13*20+ 12] = 357.8; daa[14*20+ 0] = 62.5;
2014     daa[14*20+ 1] = 0.4;    daa[14*20+ 2] = 17.5;   daa[14*20+ 3] = 0.2;    daa[14*20+ 4] = 0.2;
2015     daa[14*20+ 5] = 48.6;   daa[14*20+ 6] = 17.7;   daa[14*20+ 7] = 2.7;    daa[14*20+ 8] = 0.2;
2016     daa[14*20+ 9] = 0.2;    daa[14*20+ 10] = 11.2;  daa[14*20+ 11] = 21.7;  daa[14*20+ 12] = 5.2;
2017     daa[14*20+ 13] = 12.6;  daa[15*20+ 0] = 659.0;  daa[15*20+ 1] = 5.2;    daa[15*20+ 2] = 469.8;
2018     daa[15*20+ 3] = 52.3;   daa[15*20+ 4] = 570.7;  daa[15*20+ 5] = 47.8;   daa[15*20+ 6] = 37.3;
2019     daa[15*20+ 7] = 227.8;  daa[15*20+ 8] = 12.7;   daa[15*20+ 9] = 12.3;   daa[15*20+ 10] = 7.4;
2020     daa[15*20+ 11] = 189.0; daa[15*20+ 12] = 155.3; daa[15*20+ 13] = 43.8;  daa[15*20+ 14] = 103.4;
2021     daa[16*20+ 0] = 276.4;  daa[16*20+ 1] = 1.6;    daa[16*20+ 2] = 175.6;  daa[16*20+ 3] = 0.2;
2022     daa[16*20+ 4] = 96.2;   daa[16*20+ 5] = 71.4;   daa[16*20+ 6] = 37.4;   daa[16*20+ 7] = 0.2;
2023     daa[16*20+ 8] = 14.2;   daa[16*20+ 9] = 212.5;  daa[16*20+ 10] = 38.5;  daa[16*20+ 11] = 97.4;
2024     daa[16*20+ 12] = 254.7; daa[16*20+ 13] = 2.1;   daa[16*20+ 14] = 41.6;  daa[16*20+ 15] = 670.6;
2025     daa[17*20+ 0] = 6.2;    daa[17*20+ 1] = 0.2;    daa[17*20+ 2] = 0.2;    daa[17*20+ 3] = 5.6;
2026     daa[17*20+ 4] = 0.2;    daa[17*20+ 5] = 0.2;    daa[17*20+ 6] = 3.1;    daa[17*20+ 7] = 0.4;
2027     daa[17*20+ 8] = 0.2;    daa[17*20+ 9] = 15.2;   daa[17*20+ 10] = 11.5;  daa[17*20+ 11] = 32.6;
2028     daa[17*20+ 12] = 82.4;  daa[17*20+ 13] = 81.9;  daa[17*20+ 14] = 0.2;   daa[17*20+ 15] = 9.7;
2029     daa[17*20+ 16] = 0.2;   daa[18*20+ 0] = 1.6;    daa[18*20+ 1] = 7.7;    daa[18*20+ 2] = 242.5;
2030     daa[18*20+ 3] = 0.2;    daa[18*20+ 4] = 88.0;   daa[18*20+ 5] = 93.1;   daa[18*20+ 6] = 0.2;
2031     daa[18*20+ 7] = 6.0;    daa[18*20+ 8] = 113.7;  daa[18*20+ 9] = 22.1;   daa[18*20+ 10] = 17.2;
2032     daa[18*20+ 11] = 138.5; daa[18*20+ 12] = 37.6;  daa[18*20+ 13] = 770.2; daa[18*20+ 14] = 5.3;
2033     daa[18*20+ 15] = 25.0;  daa[18*20+ 16] = 55.5;  daa[18*20+ 17] = 69.3;  daa[19*20+ 0] = 307.8;
2034     daa[19*20+ 1] = 2.2;    daa[19*20+ 2] = 6.9;    daa[19*20+ 3] = 0.2;    daa[19*20+ 4] = 405.7;
2035     daa[19*20+ 5] = 0.8;    daa[19*20+ 6] = 20.2;   daa[19*20+ 7] = 5.7;    daa[19*20+ 8] = 0.2;
2036     daa[19*20+ 9] = 1687.9; daa[19*20+ 10] = 49.4;  daa[19*20+ 11] = 23.4;  daa[19*20+ 12] = 329.9;
2037     daa[19*20+ 13] = 86.3;  daa[19*20+ 14] = 27.3;  daa[19*20+ 15] = 95.0;  daa[19*20+ 16] = 443.0;
2038     daa[19*20+ 17] = 2.4;   daa[19*20+ 18] = 0.2;
2039 3*/
2040     for (i=0; i<naa; i++) for (j=0; j<i; j++) daa[j*naa+i] = daa[i*naa+j];
2041 
2042     pi[0] = 0.054116;       pi[1] = 0.018227;       pi[2] = 0.039903;       pi[3] = 0.020160;       pi[4] = 0.009709;
2043     pi[5] = 0.018781;       pi[6] = 0.024289;       pi[7] = 0.068183;       pi[8] = 0.024518;       pi[9] = 0.092639;
2044     pi[10] = 0.148658;      pi[11] = 0.021718;      pi[12] = 0.061453;      pi[13] = 0.088668;      pi[14] = 0.041826;
2045     pi[15] = 0.091030;      pi[16] = 0.049194;      pi[17] = 0.029786;      pi[18] = 0.039443;      pi[19] = 0.057701;
2046 /*  pi[0] = 0.055505;       pi[1] = 0.018320;       pi[2] = 0.036614;       pi[3] = 0.019517;    pi[4] = 0.009878;
2047     pi[5] = 0.018732;       pi[6] = 0.021591;       pi[7] = 0.068414;       pi[8] = 0.023638;    pi[9] = 0.092558;
2048     pi[10] = 0.154697;      pi[11] = 0.020168;      pi[12] = 0.062033;      pi[13] = 0.089433;   pi[14] = 0.040642;
2049     pi[15] = 0.090298;      pi[16] = 0.050134;      pi[17] = 0.027693;      pi[18] = 0.038448;   pi[19] = 0.061687;
2050 */
2051     return 1;
2052 }
2053 
2054 //////////////////////////////////////////////////////////////
2055 //////////////////////////////////////////////////////////////
2056 
2057 
Init_Qmat_HIVb(phydbl * daa,phydbl * pi)2058 int Init_Qmat_HIVb(phydbl *daa, phydbl *pi) //added by FEDE
2059 {
2060     /*
2061       Nickle DC, Heath L, Jensen MA, Gilbert PB, Mullins JI, Kosakovsky Pond SL.
2062       HIV-Specific Probabilistic Models of Protein Evolution.
2063       PLoS ONE. 2007 Jun 6;2:e503.
2064 
2065       [thanks to Sergei L. Kosakovsky]
2066 
2067       Translated from HYPHY to Phyml format by Federico Abascal.
2068     */
2069 
2070     int i,j,naa;
2071     naa = 20;
2072 
2073     daa[1*20+0]= 0.307507;        daa[2*20+0]= 0.005;           daa[2*20+1]= 0.295543;        daa[3*20+0]= 1.45504;
2074     daa[3*20+1]= 0.005;           daa[3*20+2]= 17.6612;         daa[4*20+0]= 0.123758;        daa[4*20+1]= 0.351721;
2075     daa[4*20+2]= 0.0860642;       daa[4*20+3]= 0.005;           daa[5*20+0]= 0.0551128;       daa[5*20+1]= 3.4215;
2076     daa[5*20+2]= 0.672052;        daa[5*20+3]= 0.005;           daa[5*20+4]= 0.005;           daa[6*20+0]= 1.48135;
2077     daa[6*20+1]= 0.0749218;       daa[6*20+2]= 0.0792633;       daa[6*20+3]= 10.5872;         daa[6*20+4]= 0.005;
2078     daa[6*20+5]= 2.5602;          daa[7*20+0]= 2.13536;         daa[7*20+1]= 3.65345;         daa[7*20+2]= 0.323401;
2079     daa[7*20+3]= 2.83806;         daa[7*20+4]= 0.897871;        daa[7*20+5]= 0.0619137;       daa[7*20+6]= 3.92775;
2080     daa[8*20+0]= 0.0847613;       daa[8*20+1]= 9.04044;         daa[8*20+2]= 7.64585;         daa[8*20+3]= 1.9169;
2081     daa[8*20+4]= 0.240073;        daa[8*20+5]= 7.05545;         daa[8*20+6]= 0.11974;         daa[8*20+7]= 0.005;
2082     daa[9*20+0]= 0.005;           daa[9*20+1]= 0.677289;        daa[9*20+2]= 0.680565;        daa[9*20+3]= 0.0176792;
2083     daa[9*20+4]= 0.005;           daa[9*20+5]= 0.005;           daa[9*20+6]= 0.00609079;      daa[9*20+7]= 0.005;
2084     daa[9*20+8]= 0.103111;        daa[10*20+0]= 0.215256;       daa[10*20+1]= 0.701427;       daa[10*20+2]= 0.005;
2085     daa[10*20+3]= 0.00876048;     daa[10*20+4]= 0.129777;       daa[10*20+5]= 1.49456;        daa[10*20+6]= 0.005;
2086     daa[10*20+7]= 0.005;          daa[10*20+8]= 1.74171;        daa[10*20+9]= 5.95879;        daa[11*20+0]= 0.005;
2087     daa[11*20+1]= 20.45;          daa[11*20+2]= 7.90443;        daa[11*20+3]= 0.005;          daa[11*20+4]= 0.005;
2088     daa[11*20+5]= 6.54737;        daa[11*20+6]= 4.61482;        daa[11*20+7]= 0.521705;       daa[11*20+8]= 0.005;
2089     daa[11*20+9]= 0.322319;       daa[11*20+10]= 0.0814995;     daa[12*20+0]= 0.0186643;      daa[12*20+1]= 2.51394;
2090     daa[12*20+2]= 0.005;          daa[12*20+3]= 0.005;          daa[12*20+4]= 0.005;          daa[12*20+5]= 0.303676;
2091     daa[12*20+6]= 0.175789;       daa[12*20+7]= 0.005;          daa[12*20+8]= 0.005;          daa[12*20+9]= 11.2065;
2092     daa[12*20+10]= 5.31961;       daa[12*20+11]= 1.28246;       daa[13*20+0]= 0.0141269;      daa[13*20+1]= 0.005;
2093     daa[13*20+2]= 0.005;          daa[13*20+3]= 0.005;          daa[13*20+4]= 9.29815;        daa[13*20+5]= 0.005;
2094     daa[13*20+6]= 0.005;          daa[13*20+7]= 0.291561;       daa[13*20+8]= 0.145558;       daa[13*20+9]= 3.39836;
2095     daa[13*20+10]= 8.52484;       daa[13*20+11]= 0.0342658;     daa[13*20+12]= 0.188025;      daa[14*20+0]= 2.12217;
2096     daa[14*20+1]= 1.28355;        daa[14*20+2]= 0.00739578;     daa[14*20+3]= 0.0342658;      daa[14*20+4]= 0.005;
2097     daa[14*20+5]= 4.47211;        daa[14*20+6]= 0.0120226;      daa[14*20+7]= 0.005;          daa[14*20+8]= 2.45318;
2098     daa[14*20+9]= 0.0410593;      daa[14*20+10]= 2.07757;       daa[14*20+11]= 0.0313862;     daa[14*20+12]= 0.005;
2099     daa[14*20+13]= 0.005;         daa[15*20+0]= 2.46633;        daa[15*20+1]= 3.4791;         daa[15*20+2]= 13.1447;
2100     daa[15*20+3]= 0.52823;        daa[15*20+4]= 4.69314;        daa[15*20+5]= 0.116311;       daa[15*20+6]= 0.005;
2101     daa[15*20+7]= 4.38041;        daa[15*20+8]= 0.382747;       daa[15*20+9]= 1.21803;        daa[15*20+10]= 0.927656;
2102     daa[15*20+11]= 0.504111;      daa[15*20+12]= 0.005;         daa[15*20+13]= 0.956472;      daa[15*20+14]= 5.37762;
2103     daa[16*20+0]= 15.9183;        daa[16*20+1]= 2.86868;        daa[16*20+2]= 6.88667;        daa[16*20+3]= 0.274724;
2104     daa[16*20+4]= 0.739969;       daa[16*20+5]= 0.243589;       daa[16*20+6]= 0.289774;       daa[16*20+7]= 0.369615;
2105     daa[16*20+8]= 0.711594;       daa[16*20+9]= 8.61217;        daa[16*20+10]= 0.0437673;     daa[16*20+11]= 4.67142;
2106     daa[16*20+12]= 4.94026;       daa[16*20+13]= 0.0141269;     daa[16*20+14]= 2.01417;       daa[16*20+15]= 8.93107;
2107     daa[17*20+0]= 0.005;          daa[17*20+1]= 0.991338;       daa[17*20+2]= 0.005;          daa[17*20+3]= 0.005;
2108     daa[17*20+4]= 2.63277;        daa[17*20+5]= 0.026656;       daa[17*20+6]= 0.005;          daa[17*20+7]= 1.21674;
2109     daa[17*20+8]= 0.0695179;      daa[17*20+9]= 0.005;          daa[17*20+10]= 0.748843;      daa[17*20+11]= 0.005;
2110     daa[17*20+12]= 0.089078;      daa[17*20+13]= 0.829343;      daa[17*20+14]= 0.0444506;     daa[17*20+15]= 0.0248728;
2111     daa[17*20+16]= 0.005;         daa[18*20+0]= 0.005;          daa[18*20+1]= 0.00991826;     daa[18*20+2]= 1.76417;
2112     daa[18*20+3]= 0.674653;       daa[18*20+4]= 7.57932;        daa[18*20+5]= 0.113033;       daa[18*20+6]= 0.0792633;
2113     daa[18*20+7]= 0.005;          daa[18*20+8]= 18.6943;        daa[18*20+9]= 0.148168;       daa[18*20+10]= 0.111986;
2114     daa[18*20+11]= 0.005;         daa[18*20+12]= 0.005;         daa[18*20+13]= 15.34;         daa[18*20+14]= 0.0304381;
2115     daa[18*20+15]= 0.648024;      daa[18*20+16]= 0.105652;      daa[18*20+17]= 1.28022;       daa[19*20+0]= 7.61428;
2116     daa[19*20+1]= 0.0812454;      daa[19*20+2]= 0.026656;       daa[19*20+3]= 1.04793;        daa[19*20+4]= 0.420027;
2117     daa[19*20+5]= 0.0209153;      daa[19*20+6]= 1.02847;        daa[19*20+7]= 0.953155;       daa[19*20+8]= 0.005;
2118     daa[19*20+9]= 17.7389;        daa[19*20+10]= 1.41036;       daa[19*20+11]= 0.265829;      daa[19*20+12]= 6.8532;
2119     daa[19*20+13]= 0.723274;      daa[19*20+14]= 0.005;         daa[19*20+15]= 0.0749218;     daa[19*20+16]= 0.709226;
2120     daa[19*20+17]= 0.005;         daa[19*20+18]= 0.0410593;
2121     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2122 
2123     pi[0]= 0.060490222;           pi[1]= 0.066039665;           pi[2]= 0.044127815;           pi[3]= 0.042109048;
2124     pi[4]= 0.020075899;           pi[5]= 0.053606488;           pi[6]= 0.071567447;           pi[7]= 0.072308239;
2125     pi[8]= 0.022293943;           pi[9]= 0.069730629;           pi[10]= 0.098851122;          pi[11]= 0.056968211;
2126     pi[12]= 0.019768318;          pi[13]= 0.028809447;          pi[14]= 0.046025282;          pi[15]= 0.05060433;
2127     pi[16]= 0.053636813;          pi[17]= 0.033011601;          pi[18]= 0.028350243;          pi[19]= 0.061625237;
2128     return 1;
2129 }
2130 
2131 //////////////////////////////////////////////////////////////
2132 //////////////////////////////////////////////////////////////
2133 
Init_Qmat_HIVw(phydbl * daa,phydbl * pi)2134 int Init_Qmat_HIVw(phydbl *daa, phydbl *pi)
2135 {
2136     /*
2137       Nickle DC, Heath L, Jensen MA, Gilbert PB, Mullins JI, Kosakovsky Pond SL.
2138       HIV-Specific Probabilistic Models of Protein Evolution.
2139       PLoS ONE. 2007 Jun 6;2:e503.
2140 
2141       [thanks to Sergei L. Kosakovsky]
2142 
2143       Translated from HYPHY to Phyml format by Federico Abascal.
2144     */
2145 
2146     int i,j,naa;
2147     naa = 20;
2148 
2149     daa[1*20+0]= 0.0744808;       daa[2*20+0]= 0.617509;        daa[2*20+1]= 0.16024;         daa[3*20+0]= 4.43521;
2150     daa[3*20+1]= 0.0674539;       daa[3*20+2]= 29.4087;         daa[4*20+0]= 0.167653;        daa[4*20+1]= 2.86364;
2151     daa[4*20+2]= 0.0604932;       daa[4*20+3]= 0.005;           daa[5*20+0]= 0.005;           daa[5*20+1]= 10.6746;
2152     daa[5*20+2]= 0.342068;        daa[5*20+3]= 0.005;           daa[5*20+4]= 0.005;           daa[6*20+0]= 5.56325;
2153     daa[6*20+1]= 0.0251632;       daa[6*20+2]= 0.201526;        daa[6*20+3]= 12.1233;         daa[6*20+4]= 0.005;
2154     daa[6*20+5]= 3.20656;         daa[7*20+0]= 1.8685;          daa[7*20+1]= 13.4379;         daa[7*20+2]= 0.0604932;
2155     daa[7*20+3]= 10.3969;         daa[7*20+4]= 0.0489798;       daa[7*20+5]= 0.0604932;       daa[7*20+6]= 14.7801;
2156     daa[8*20+0]= 0.005;           daa[8*20+1]= 6.84405;         daa[8*20+2]= 8.59876;         daa[8*20+3]= 2.31779;
2157     daa[8*20+4]= 0.005;           daa[8*20+5]= 18.5465;         daa[8*20+6]= 0.005;           daa[8*20+7]= 0.005;
2158     daa[9*20+0]= 0.005;           daa[9*20+1]= 1.34069;         daa[9*20+2]= 0.987028;        daa[9*20+3]= 0.145124;
2159     daa[9*20+4]= 0.005;           daa[9*20+5]= 0.0342252;       daa[9*20+6]= 0.0390512;       daa[9*20+7]= 0.005;
2160     daa[9*20+8]= 0.005;           daa[10*20+0]= 0.16024;        daa[10*20+1]= 0.586757;       daa[10*20+2]= 0.005;
2161     daa[10*20+3]= 0.005;          daa[10*20+4]= 0.005;          daa[10*20+5]= 2.89048;        daa[10*20+6]= 0.129839;
2162     daa[10*20+7]= 0.0489798;      daa[10*20+8]= 1.76382;        daa[10*20+9]= 9.10246;        daa[11*20+0]= 0.592784;
2163     daa[11*20+1]= 39.8897;        daa[11*20+2]= 10.6655;        daa[11*20+3]= 0.894313;       daa[11*20+4]= 0.005;
2164     daa[11*20+5]= 13.0705;        daa[11*20+6]= 23.9626;        daa[11*20+7]= 0.279425;       daa[11*20+8]= 0.22406;
2165     daa[11*20+9]= 0.817481;       daa[11*20+10]= 0.005;         daa[12*20+0]= 0.005;          daa[12*20+1]= 3.28652;
2166     daa[12*20+2]= 0.201526;       daa[12*20+3]= 0.005;          daa[12*20+4]= 0.005;          daa[12*20+5]= 0.005;
2167     daa[12*20+6]= 0.005;          daa[12*20+7]= 0.0489798;      daa[12*20+8]= 0.005;          daa[12*20+9]= 17.3064;
2168     daa[12*20+10]= 11.3839;       daa[12*20+11]= 4.09564;       daa[13*20+0]= 0.597923;       daa[13*20+1]= 0.005;
2169     daa[13*20+2]= 0.005;          daa[13*20+3]= 0.005;          daa[13*20+4]= 0.362959;       daa[13*20+5]= 0.005;
2170     daa[13*20+6]= 0.005;          daa[13*20+7]= 0.005;          daa[13*20+8]= 0.005;          daa[13*20+9]= 1.48288;
2171     daa[13*20+10]= 7.48781;       daa[13*20+11]= 0.005;         daa[13*20+12]= 0.005;         daa[14*20+0]= 1.00981;
2172     daa[14*20+1]= 0.404723;       daa[14*20+2]= 0.344848;       daa[14*20+3]= 0.005;          daa[14*20+4]= 0.005;
2173     daa[14*20+5]= 3.04502;        daa[14*20+6]= 0.005;          daa[14*20+7]= 0.005;          daa[14*20+8]= 13.9444;
2174     daa[14*20+9]= 0.005;          daa[14*20+10]= 9.83095;       daa[14*20+11]= 0.111928;      daa[14*20+12]= 0.005;
2175     daa[14*20+13]= 0.0342252;     daa[15*20+0]= 8.5942;         daa[15*20+1]= 8.35024;        daa[15*20+2]= 14.5699;
2176     daa[15*20+3]= 0.427881;       daa[15*20+4]= 1.12195;        daa[15*20+5]= 0.16024;        daa[15*20+6]= 0.005;
2177     daa[15*20+7]= 6.27966;        daa[15*20+8]= 0.725157;       daa[15*20+9]= 0.740091;       daa[15*20+10]= 6.14396;
2178     daa[15*20+11]= 0.005;         daa[15*20+12]= 0.392575;      daa[15*20+13]= 4.27939;       daa[15*20+14]= 14.249;
2179     daa[16*20+0]= 24.1422;        daa[16*20+1]= 0.928203;       daa[16*20+2]= 4.54206;        daa[16*20+3]= 0.630395;
2180     daa[16*20+4]= 0.005;          daa[16*20+5]= 0.203091;       daa[16*20+6]= 0.458743;       daa[16*20+7]= 0.0489798;
2181     daa[16*20+8]= 0.95956;        daa[16*20+9]= 9.36345;        daa[16*20+10]= 0.005;         daa[16*20+11]= 4.04802;
2182     daa[16*20+12]= 7.41313;       daa[16*20+13]= 0.114512;      daa[16*20+14]= 4.33701;       daa[16*20+15]= 6.34079;
2183     daa[17*20+0]= 0.005;          daa[17*20+1]= 5.96564;        daa[17*20+2]= 0.005;          daa[17*20+3]= 0.005;
2184     daa[17*20+4]= 5.49894;        daa[17*20+5]= 0.0443298;      daa[17*20+6]= 0.005;          daa[17*20+7]= 2.8258;
2185     daa[17*20+8]= 0.005;          daa[17*20+9]= 0.005;          daa[17*20+10]= 1.37031;       daa[17*20+11]= 0.005;
2186     daa[17*20+12]= 0.005;         daa[17*20+13]= 0.005;         daa[17*20+14]= 0.005;         daa[17*20+15]= 1.10156;
2187     daa[17*20+16]= 0.005;         daa[18*20+0]= 0.005;          daa[18*20+1]= 0.005;          daa[18*20+2]= 5.06475;
2188     daa[18*20+3]= 2.28154;        daa[18*20+4]= 8.34835;        daa[18*20+5]= 0.005;          daa[18*20+6]= 0.005;
2189     daa[18*20+7]= 0.005;          daa[18*20+8]= 47.4889;        daa[18*20+9]= 0.114512;       daa[18*20+10]= 0.005;
2190     daa[18*20+11]= 0.005;         daa[18*20+12]= 0.579198;      daa[18*20+13]= 4.12728;       daa[18*20+14]= 0.005;
2191     daa[18*20+15]= 0.933142;      daa[18*20+16]= 0.490608;      daa[18*20+17]= 0.005;         daa[19*20+0]= 24.8094;
2192     daa[19*20+1]= 0.279425;       daa[19*20+2]= 0.0744808;      daa[19*20+3]= 2.91786;        daa[19*20+4]= 0.005;
2193     daa[19*20+5]= 0.005;          daa[19*20+6]= 2.19952;        daa[19*20+7]= 2.79622;        daa[19*20+8]= 0.827479;
2194     daa[19*20+9]= 24.8231;        daa[19*20+10]= 2.95344;       daa[19*20+11]= 0.128065;      daa[19*20+12]= 14.7683;
2195     daa[19*20+13]= 2.28;          daa[19*20+14]= 0.005;         daa[19*20+15]= 0.862637;      daa[19*20+16]= 0.005;
2196     daa[19*20+17]= 0.005;         daa[19*20+18]= 1.35482;
2197     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2198 
2199     pi[0]= 0.0377494;             pi[1]= 0.057321;              pi[2]= 0.0891129;             pi[3]= 0.0342034;
2200     pi[4]= 0.0240105;             pi[5]= 0.0437824;             pi[6]= 0.0618606;             pi[7]= 0.0838496;
2201     pi[8]= 0.0156076;             pi[9]= 0.0983641;             pi[10]= 0.0577867;            pi[11]= 0.0641682;
2202     pi[12]= 0.0158419;            pi[13]= 0.0422741;            pi[14]= 0.0458601;            pi[15]= 0.0550846;
2203     pi[16]= 0.0813774;            pi[17]= 0.019597;             pi[18]= 0.0205847;            pi[19]= 0.0515639;
2204     return 1;
2205 }
2206 
2207 //////////////////////////////////////////////////////////////
2208 //////////////////////////////////////////////////////////////
2209 
Init_Qmat_JTT(phydbl * daa,phydbl * pi)2210 int Init_Qmat_JTT(phydbl *daa, phydbl *pi)
2211 {
2212   int i,j,naa;
2213 
2214   /* JTT's model data
2215    * D.T.Jones, W.R.Taylor and J.M.Thornton
2216    * "The rapid generation of mutation data matrices from protein sequences"
2217    * CABIOS  vol.8 no.3 1992 pp275-282
2218    */
2219 
2220   naa = 20;
2221 
2222 /*   PhyML_Printf("\n\n. REMINDER : THIS IS NOT JTT !!!\n\n"); */
2223 
2224 
2225 /*   daa[1*20 + 0] = 0.592439084;  */
2226 /*   daa[2*20 + 0] = 0.427686326;  */
2227 /*   daa[2*20 + 1] = 0.795121783;  */
2228 /*   daa[3*20 + 0] = 0.649119246;  */
2229 /*   daa[3*20 + 1] = 0.116285502;  */
2230 /*   daa[3*20 + 2] = 6.004659556;  */
2231 /*   daa[4*20 + 0] = 2.384113318;  */
2232 /*   daa[4*20 + 1] = 0.925080814;  */
2233 /*   daa[4*20 + 2] = 0.648459384;  */
2234 /*   daa[4*20 + 3] = 0.088632079;  */
2235 /*   daa[5*20 + 0] = 1.188499461;  */
2236 /*   daa[5*20 + 1] = 3.230029905;  */
2237 /*   daa[5*20 + 2] = 1.910660418;  */
2238 /*   daa[5*20 + 3] = 0.599639374;  */
2239 /*   daa[5*20 + 4] = 0.123291416;  */
2240 /*   daa[6*20 + 0] = 1.534092487;  */
2241 /*   daa[6*20 + 1] = 0.390654981;  */
2242 /*   daa[6*20 + 2] = 0.566472743;  */
2243 /*   daa[6*20 + 3] = 5.916482256;  */
2244 /*   daa[6*20 + 4] = 0.001457992;  */
2245 /*   daa[6*20 + 5] = 4.564894849;  */
2246 /*   daa[7*20 + 0] = 2.282012114;  */
2247 /*   daa[7*20 + 1] = 0.502549742;  */
2248 /*   daa[7*20 + 2] = 1.97013036;  */
2249 /*   daa[7*20 + 3] = 1.198016556;  */
2250 /*   daa[7*20 + 4] = 0.565245125;  */
2251 /*   daa[7*20 + 5] = 0.382529852;  */
2252 /*   daa[7*20 + 6] = 0.477515495;  */
2253 /*   daa[8*20 + 0] = 0.447587408;  */
2254 /*   daa[8*20 + 1] = 2.948365572;  */
2255 /*   daa[8*20 + 2] = 5.900694893;  */
2256 /*   daa[8*20 + 3] = 0.96157692;  */
2257 /*   daa[8*20 + 4] = 0.757153271;  */
2258 /*   daa[8*20 + 5] = 5.048587596;  */
2259 /*   daa[8*20 + 6] = 0.410583482;  */
2260 /*   daa[8*20 + 7] = 0.406115605;  */
2261 /*   daa[9*20 + 0] = 0.105337934;  */
2262 /*   daa[9*20 + 1] = 0.115421183;  */
2263 /*   daa[9*20 + 2] = 0.178948502;  */
2264 /*   daa[9*20 + 3] = 0.01319564;  */
2265 /*   daa[9*20 + 4] = 0.269637325;  */
2266 /*   daa[9*20 + 5] = 0.087618072;  */
2267 /*   daa[9*20 + 6] = 0.045232757;  */
2268 /*   daa[9*20 + 7] = 0.00958642;  */
2269 /*   daa[9*20 + 8] = 0.116145048;  */
2270 /*   daa[10*20 + 0] = 0.269460438;  */
2271 /*   daa[10*20 + 1] = 0.416549984;  */
2272 /*   daa[10*20 + 2] = 0.100490196;  */
2273 /*   daa[10*20 + 3] = 0.021637571;  */
2274 /*   daa[10*20 + 4] = 0.610442865;  */
2275 /*   daa[10*20 + 5] = 0.782347175;  */
2276 /*   daa[10*20 + 6] = 0.077565847;  */
2277 /*   daa[10*20 + 7] = 0.034916545;  */
2278 /*   daa[10*20 + 8] = 0.456334781;  */
2279 /*   daa[10*20 + 9] = 4.057302736;  */
2280 /*   daa[11*20 + 0] = 0.71706921;  */
2281 /*   daa[11*20 + 1] = 6.469532749;  */
2282 /*   daa[11*20 + 2] = 2.606469511;  */
2283 /*   daa[11*20 + 3] = 0.239488567;  */
2284 /*   daa[11*20 + 4] = 0.020594132;  */
2285 /*   daa[11*20 + 5] = 3.978479772;  */
2286 /*   daa[11*20 + 6] = 1.669092348;  */
2287 /*   daa[11*20 + 7] = 0.368262509;  */
2288 /*   daa[11*20 + 8] = 0.744835535;  */
2289 /*   daa[11*20 + 9] = 0.153626461;  */
2290 /*   daa[11*20 + 10] = 0.186106976;  */
2291 /*   daa[12*20 + 0] = 0.766271778;  */
2292 /*   daa[12*20 + 1] = 0.465902609;  */
2293 /*   daa[12*20 + 2] = 0.352429433;  */
2294 /*   daa[12*20 + 3] = 0.04670109;  */
2295 /*   daa[12*20 + 4] = 0.930016402;  */
2296 /*   daa[12*20 + 5] = 1.529072358;  */
2297 /*   daa[12*20 + 6] = 0.149497081;  */
2298 /*   daa[12*20 + 7] = 0.092795029;  */
2299 /*   daa[12*20 + 8] = 0.367452788;  */
2300 /*   daa[12*20 + 9] = 4.443975824;  */
2301 /*   daa[12*20 + 10] = 7.305963709;  */
2302 /*   daa[12*20 + 11] = 0.691067831;  */
2303 /*   daa[13*20 + 0] = 0.164314785;  */
2304 /*   daa[13*20 + 1] = 0.064046051;  */
2305 /*   daa[13*20 + 2] = 0.108166343;  */
2306 /*   daa[13*20 + 3] = 0.021096631;  */
2307 /*   daa[13*20 + 4] = 0.9869692;  */
2308 /*   daa[13*20 + 5] = 0.054959009;  */
2309 /*   daa[13*20 + 6] = 0.025919221;  */
2310 /*   daa[13*20 + 7] = 0.053577857;  */
2311 /*   daa[13*20 + 8] = 0.933637734;  */
2312 /*   daa[13*20 + 9] = 0.928915383;  */
2313 /*   daa[13*20 + 10] = 2.549658015;  */
2314 /*   daa[13*20 + 11] = 0.032602723;  */
2315 /*   daa[13*20 + 12] = 1.837397986;  */
2316 /*   daa[14*20 + 0] = 1.57937466;  */
2317 /*   daa[14*20 + 1] = 0.360749538;  */
2318 /*   daa[14*20 + 2] = 0.189183366;  */
2319 /*   daa[14*20 + 3] = 0.475387263;  */
2320 /*   daa[14*20 + 4] = 0.108255878;  */
2321 /*   daa[14*20 + 5] = 0.645294956;  */
2322 /*   daa[14*20 + 6] = 0.537278362;  */
2323 /*   daa[14*20 + 7] = 0.264516985;  */
2324 /*   daa[14*20 + 8] = 0.510062949;  */
2325 /*   daa[14*20 + 9] = 0.063380048;  */
2326 /*   daa[14*20 + 10] = 0.25549658;  */
2327 /*   daa[14*20 + 11] = 0.42259906;  */
2328 /*   daa[14*20 + 12] = 0.105330979;  */
2329 /*   daa[14*20 + 13] = 0.092650543;  */
2330 /*   daa[15*20 + 0] = 5.358849732;  */
2331 /*   daa[15*20 + 1] = 0.980362668;  */
2332 /*   daa[15*20 + 2] = 5.114953674;  */
2333 /*   daa[15*20 + 3] = 1.242898123;  */
2334 /*   daa[15*20 + 4] = 3.417258976;  */
2335 /*   daa[15*20 + 5] = 1.199117804;  */
2336 /*   daa[15*20 + 6] = 0.61024061;  */
2337 /*   daa[15*20 + 7] = 2.200746452;  */
2338 /*   daa[15*20 + 8] = 0.928717085;  */
2339 /*   daa[15*20 + 9] = 0.07737779;  */
2340 /*   daa[15*20 + 10] = 0.17657022;  */
2341 /*   daa[15*20 + 11] = 0.768621405;  */
2342 /*   daa[15*20 + 12] = 0.330215244;  */
2343 /*   daa[15*20 + 13] = 0.359985962;  */
2344 /*   daa[15*20 + 14] = 1.559718375;  */
2345 /*   daa[16*20 + 0] = 2.21115657;  */
2346 /*   daa[16*20 + 1] = 0.711040813;  */
2347 /*   daa[16*20 + 2] = 2.273163111;  */
2348 /*   daa[16*20 + 3] = 0.408851733;  */
2349 /*   daa[16*20 + 4] = 1.57572444;  */
2350 /*   daa[16*20 + 5] = 1.074674746;  */
2351 /*   daa[16*20 + 6] = 0.707096016;  */
2352 /*   daa[16*20 + 7] = 0.157418108;  */
2353 /*   daa[16*20 + 8] = 0.543088926;  */
2354 /*   daa[16*20 + 9] = 1.056024176;  */
2355 /*   daa[16*20 + 10] = 0.294118282;  */
2356 /*   daa[16*20 + 11] = 1.325676171;  */
2357 /*   daa[16*20 + 12] = 1.834248079;  */
2358 /*   daa[16*20 + 13] = 0.136987103;  */
2359 /*   daa[16*20 + 14] = 0.63778855;  */
2360 /*   daa[16*20 + 15] = 7.294506488;  */
2361 /*   daa[17*20 + 0] = 0.142106331;  */
2362 /*   daa[17*20 + 1] = 0.600995696;  */
2363 /*   daa[17*20 + 2] = 0.079481793;  */
2364 /*   daa[17*20 + 3] = 0.069125482;  */
2365 /*   daa[17*20 + 4] = 0.701931839;  */
2366 /*   daa[17*20 + 5] = 0.23881661;  */
2367 /*   daa[17*20 + 6] = 0.082469159;  */
2368 /*   daa[17*20 + 7] = 0.185722676;  */
2369 /*   daa[17*20 + 8] = 0.911694299;  */
2370 /*   daa[17*20 + 9] = 0.11679729;  */
2371 /*   daa[17*20 + 10] = 0.688555894;  */
2372 /*   daa[17*20 + 11] = 0.063328042;  */
2373 /*   daa[17*20 + 12] = 0.780079225;  */
2374 /*   daa[17*20 + 13] = 3.432193724;  */
2375 /*   daa[17*20 + 14] = 0.088827331;  */
2376 /*   daa[17*20 + 15] = 0.293602516;  */
2377 /*   daa[17*20 + 16] = 0.158083832;  */
2378 /*   daa[18*20 + 0] = 0.178618354;  */
2379 /*   daa[18*20 + 1] = 0.243634289;  */
2380 /*   daa[18*20 + 2] = 0.567657832;  */
2381 /*   daa[18*20 + 3] = 0.134890583;  */
2382 /*   daa[18*20 + 4] = 1.28093676;  */
2383 /*   daa[18*20 + 5] = 0.180560506;  */
2384 /*   daa[18*20 + 6] = 0.081426157;  */
2385 /*   daa[18*20 + 7] = 0.044067219;  */
2386 /*   daa[18*20 + 8] = 6.464181222;  */
2387 /*   daa[18*20 + 9] = 0.206728215;  */
2388 /*   daa[18*20 + 10] = 0.334379787;  */
2389 /*   daa[18*20 + 11] = 0.102051407;  */
2390 /*   daa[18*20 + 12] = 0.431775879;  */
2391 /*   daa[18*20 + 13] = 11.87781125;  */
2392 /*   daa[18*20 + 14] = 0.078070175;  */
2393 /*   daa[18*20 + 15] = 0.359969114;  */
2394 /*   daa[18*20 + 16] = 0.199064371;  */
2395 /*   daa[18*20 + 17] = 4.185797039;  */
2396 /*   daa[19*20 + 0] = 1.964727121;  */
2397 /*   daa[19*20 + 1] = 0.18579405;  */
2398 /*   daa[19*20 + 2] = 0.113068304;  */
2399 /*   daa[19*20 + 3] = 0.046258503;  */
2400 /*   daa[19*20 + 4] = 2.069983598;  */
2401 /*   daa[19*20 + 5] = 0.247259847;  */
2402 /*   daa[19*20 + 6] = 0.272991021;  */
2403 /*   daa[19*20 + 7] = 0.073432734;  */
2404 /*   daa[19*20 + 8] = 0.158879333;  */
2405 /*   daa[19*20 + 9] = 10.52590329;  */
2406 /*   daa[19*20 + 10] = 1.74812825;  */
2407 /*   daa[19*20 + 11] = 0.188152512;  */
2408 /*   daa[19*20 + 12] = 1.800124087;  */
2409 /*   daa[19*20 + 13] = 0.478606732;  */
2410 /*   daa[19*20 + 14] = 0.277216066;  */
2411 /*   daa[19*20 + 15] = 0.104728903;  */
2412 /*   daa[19*20 + 16] = 1.963379491;  */
2413 /*   daa[19*20 + 17] = 0.16552242;  */
2414 /*   daa[19*20 + 18] = 0.222040517; */
2415 
2416 /*   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j]; */
2417 
2418 /*   pi[0] = 0.093862;  */
2419 /*   pi[1] = 0.05757;  */
2420 /*   pi[2] = 0.037017;  */
2421 /*   pi[3] = 0.060952;  */
2422 /*   pi[4] = 0.011004;  */
2423 /*   pi[5] = 0.044631;  */
2424 /*   pi[6] = 0.083648;  */
2425 /*   pi[7] = 0.053004;  */
2426 /*   pi[8] = 0.022528;  */
2427 /*   pi[9] = 0.060152;  */
2428 /*   pi[10] = 0.092314;  */
2429 /*   pi[11] = 0.065886;  */
2430 /*   pi[12] = 0.021075;  */
2431 /*   pi[13] = 0.033928;  */
2432 /*   pi[14] = 0.043333;  */
2433 /*   pi[15] = 0.052957;  */
2434 /*   pi[16] = 0.053465;  */
2435 /*   pi[17] = 0.00928;  */
2436 /*   pi[18] = 0.030025;  */
2437 /*   pi[19] = 0.073369; */
2438 
2439   daa[ 1*20+ 0] =   58.00; daa[ 2*20+ 0] =   54.00; daa[ 2*20+ 1] =   45.00; daa[ 3*20+ 0] =   81.00;
2440   daa[ 3*20+ 1] =   16.00; daa[ 3*20+ 2] =  528.00; daa[ 4*20+ 0] =   56.00; daa[ 4*20+ 1] =  113.00;
2441   daa[ 4*20+ 2] =   34.00; daa[ 4*20+ 3] =   10.00; daa[ 5*20+ 0] =   57.00; daa[ 5*20+ 1] =  310.00;
2442   daa[ 5*20+ 2] =   86.00; daa[ 5*20+ 3] =   49.00; daa[ 5*20+ 4] =    9.00; daa[ 6*20+ 0] =  105.00;
2443   daa[ 6*20+ 1] =   29.00; daa[ 6*20+ 2] =   58.00; daa[ 6*20+ 3] =  767.00; daa[ 6*20+ 4] =    5.00;
2444   daa[ 6*20+ 5] =  323.00; daa[ 7*20+ 0] =  179.00; daa[ 7*20+ 1] =  137.00; daa[ 7*20+ 2] =   81.00;
2445   daa[ 7*20+ 3] =  130.00; daa[ 7*20+ 4] =   59.00; daa[ 7*20+ 5] =   26.00; daa[ 7*20+ 6] =  119.00;
2446   daa[ 8*20+ 0] =   27.00; daa[ 8*20+ 1] =  328.00; daa[ 8*20+ 2] =  391.00; daa[ 8*20+ 3] =  112.00;
2447   daa[ 8*20+ 4] =   69.00; daa[ 8*20+ 5] =  597.00; daa[ 8*20+ 6] =   26.00; daa[ 8*20+ 7] =   23.00;
2448   daa[ 9*20+ 0] =   36.00; daa[ 9*20+ 1] =   22.00; daa[ 9*20+ 2] =   47.00; daa[ 9*20+ 3] =   11.00;
2449   daa[ 9*20+ 4] =   17.00; daa[ 9*20+ 5] =    9.00; daa[ 9*20+ 6] =   12.00; daa[ 9*20+ 7] =    6.00;
2450   daa[ 9*20+ 8] =   16.00; daa[10*20+ 0] =   30.00; daa[10*20+ 1] =   38.00; daa[10*20+ 2] =   12.00;
2451   daa[10*20+ 3] =    7.00; daa[10*20+ 4] =   23.00; daa[10*20+ 5] =   72.00; daa[10*20+ 6] =    9.00;
2452   daa[10*20+ 7] =    6.00; daa[10*20+ 8] =   56.00; daa[10*20+ 9] =  229.00; daa[11*20+ 0] =   35.00;
2453   daa[11*20+ 1] =  646.00; daa[11*20+ 2] =  263.00; daa[11*20+ 3] =   26.00; daa[11*20+ 4] =    7.00;
2454   daa[11*20+ 5] =  292.00; daa[11*20+ 6] =  181.00; daa[11*20+ 7] =   27.00; daa[11*20+ 8] =   45.00;
2455   daa[11*20+ 9] =   21.00; daa[11*20+10] =   14.00; daa[12*20+ 0] =   54.00; daa[12*20+ 1] =   44.00;
2456   daa[12*20+ 2] =   30.00; daa[12*20+ 3] =   15.00; daa[12*20+ 4] =   31.00; daa[12*20+ 5] =   43.00;
2457   daa[12*20+ 6] =   18.00; daa[12*20+ 7] =   14.00; daa[12*20+ 8] =   33.00; daa[12*20+ 9] =  479.00;
2458   daa[12*20+10] =  388.00; daa[12*20+11] =   65.00; daa[13*20+ 0] =   15.00; daa[13*20+ 1] =    5.00;
2459   daa[13*20+ 2] =   10.00; daa[13*20+ 3] =    4.00; daa[13*20+ 4] =   78.00; daa[13*20+ 5] =    4.00;
2460   daa[13*20+ 6] =    5.00; daa[13*20+ 7] =    5.00; daa[13*20+ 8] =   40.00; daa[13*20+ 9] =   89.00;
2461   daa[13*20+10] =  248.00; daa[13*20+11] =    4.00; daa[13*20+12] =   43.00; daa[14*20+ 0] =  194.00;
2462   daa[14*20+ 1] =   74.00; daa[14*20+ 2] =   15.00; daa[14*20+ 3] =   15.00; daa[14*20+ 4] =   14.00;
2463   daa[14*20+ 5] =  164.00; daa[14*20+ 6] =   18.00; daa[14*20+ 7] =   24.00; daa[14*20+ 8] =  115.00;
2464   daa[14*20+ 9] =   10.00; daa[14*20+10] =  102.00; daa[14*20+11] =   21.00; daa[14*20+12] =   16.00;
2465   daa[14*20+13] =   17.00; daa[15*20+ 0] =  378.00; daa[15*20+ 1] =  101.00; daa[15*20+ 2] =  503.00;
2466   daa[15*20+ 3] =   59.00; daa[15*20+ 4] =  223.00; daa[15*20+ 5] =   53.00; daa[15*20+ 6] =   30.00;
2467   daa[15*20+ 7] =  201.00; daa[15*20+ 8] =   73.00; daa[15*20+ 9] =   40.00; daa[15*20+10] =   59.00;
2468   daa[15*20+11] =   47.00; daa[15*20+12] =   29.00; daa[15*20+13] =   92.00; daa[15*20+14] =  285.00;
2469   daa[16*20+ 0] =  475.00; daa[16*20+ 1] =   64.00; daa[16*20+ 2] =  232.00; daa[16*20+ 3] =   38.00;
2470   daa[16*20+ 4] =   42.00; daa[16*20+ 5] =   51.00; daa[16*20+ 6] =   32.00; daa[16*20+ 7] =   33.00;
2471   daa[16*20+ 8] =   46.00; daa[16*20+ 9] =  245.00; daa[16*20+10] =   25.00; daa[16*20+11] =  103.00;
2472   daa[16*20+12] =  226.00; daa[16*20+13] =   12.00; daa[16*20+14] =  118.00; daa[16*20+15] =  477.00;
2473   daa[17*20+ 0] =    9.00; daa[17*20+ 1] =  126.00; daa[17*20+ 2] =    8.00; daa[17*20+ 3] =    4.00;
2474   daa[17*20+ 4] =  115.00; daa[17*20+ 5] =   18.00; daa[17*20+ 6] =   10.00; daa[17*20+ 7] =   55.00;
2475   daa[17*20+ 8] =    8.00; daa[17*20+ 9] =    9.00; daa[17*20+10] =   52.00; daa[17*20+11] =   10.00;
2476   daa[17*20+12] =   24.00; daa[17*20+13] =   53.00; daa[17*20+14] =    6.00; daa[17*20+15] =   35.00;
2477   daa[17*20+16] =   12.00; daa[18*20+ 0] =   11.00; daa[18*20+ 1] =   20.00; daa[18*20+ 2] =   70.00;
2478   daa[18*20+ 3] =   46.00; daa[18*20+ 4] =  209.00; daa[18*20+ 5] =   24.00; daa[18*20+ 6] =    7.00;
2479   daa[18*20+ 7] =    8.00; daa[18*20+ 8] =  573.00; daa[18*20+ 9] =   32.00; daa[18*20+10] =   24.00;
2480   daa[18*20+11] =    8.00; daa[18*20+12] =   18.00; daa[18*20+13] =  536.00; daa[18*20+14] =   10.00;
2481   daa[18*20+15] =   63.00; daa[18*20+16] =   21.00; daa[18*20+17] =   71.00; daa[19*20+ 0] =  298.00;
2482   daa[19*20+ 1] =   17.00; daa[19*20+ 2] =   16.00; daa[19*20+ 3] =   31.00; daa[19*20+ 4] =   62.00;
2483   daa[19*20+ 5] =   20.00; daa[19*20+ 6] =   45.00; daa[19*20+ 7] =   47.00; daa[19*20+ 8] =   11.00;
2484   daa[19*20+ 9] =  961.00; daa[19*20+10] =  180.00; daa[19*20+11] =   14.00; daa[19*20+12] =  323.00;
2485   daa[19*20+13] =   62.00; daa[19*20+14] =   23.00; daa[19*20+15] =   38.00; daa[19*20+16] =  112.00;
2486   daa[19*20+17] =   25.00; daa[19*20+18] =   16.00;
2487 
2488   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2489 
2490   pi[ 0] = 0.076748; pi[ 1] = 0.051691; pi[ 2] = 0.042645; pi[ 3] = 0.051544;
2491   pi[ 4] = 0.019803; pi[ 5] = 0.040752; pi[ 6] = 0.061830; pi[ 7] = 0.073152;
2492   pi[ 8] = 0.022944; pi[ 9] = 0.053761; pi[10] = 0.091904; pi[11] = 0.058676;
2493   pi[12] = 0.023826; pi[13] = 0.040126; pi[14] = 0.050901; pi[15] = 0.068765;
2494   pi[16] = 0.058565; pi[17] = 0.014261; pi[18] = 0.032102; pi[19] = 0.066005;
2495 
2496  return 1;
2497 }
2498 
2499 //////////////////////////////////////////////////////////////
2500 //////////////////////////////////////////////////////////////
2501 
2502 
Init_Qmat_MtREV(phydbl * daa,phydbl * pi)2503 int Init_Qmat_MtREV(phydbl *daa, phydbl *pi)
2504 {
2505   /* J. Adachi and M. Hasegawa, ``Model of amino acid substitution in proteins
2506      encoded by mitochondrial DNA'' J. Mol. Evol. 42, 459 (1996) */
2507 
2508   int i,j,naa;
2509 
2510   naa = 20;
2511 
2512 
2513   daa[ 1*20+ 0] =   23.18; daa[ 2*20+ 0] =   26.95; daa[ 2*20+ 1] =   13.24; daa[ 3*20+ 0] =   17.67;
2514   daa[ 3*20+ 1] =    1.90; daa[ 3*20+ 2] =  794.38; daa[ 4*20+ 0] =   59.93; daa[ 4*20+ 1] =  103.33;
2515   daa[ 4*20+ 2] =   58.94; daa[ 4*20+ 3] =    1.90; daa[ 5*20+ 0] =    1.90; daa[ 5*20+ 1] =  220.99;
2516   daa[ 5*20+ 2] =  173.56; daa[ 5*20+ 3] =   55.28; daa[ 5*20+ 4] =   75.24; daa[ 6*20+ 0] =    9.77;
2517   daa[ 6*20+ 1] =    1.90; daa[ 6*20+ 2] =   63.05; daa[ 6*20+ 3] =  583.55; daa[ 6*20+ 4] =    1.90;
2518   daa[ 6*20+ 5] =  313.56; daa[ 7*20+ 0] =  120.71; daa[ 7*20+ 1] =   23.03; daa[ 7*20+ 2] =   53.30;
2519   daa[ 7*20+ 3] =   56.77; daa[ 7*20+ 4] =   30.71; daa[ 7*20+ 5] =    6.75; daa[ 7*20+ 6] =   28.28;
2520   daa[ 8*20+ 0] =   13.90; daa[ 8*20+ 1] =  165.23; daa[ 8*20+ 2] =  496.13; daa[ 8*20+ 3] =  113.99;
2521   daa[ 8*20+ 4] =  141.49; daa[ 8*20+ 5] =  582.40; daa[ 8*20+ 6] =   49.12; daa[ 8*20+ 7] =    1.90;
2522   daa[ 9*20+ 0] =   96.49; daa[ 9*20+ 1] =    1.90; daa[ 9*20+ 2] =   27.10; daa[ 9*20+ 3] =    4.34;
2523   daa[ 9*20+ 4] =   62.73; daa[ 9*20+ 5] =    8.34; daa[ 9*20+ 6] =    3.31; daa[ 9*20+ 7] =    5.98;
2524   daa[ 9*20+ 8] =   12.26; daa[10*20+ 0] =   25.46; daa[10*20+ 1] =   15.58; daa[10*20+ 2] =   15.16;
2525   daa[10*20+ 3] =    1.90; daa[10*20+ 4] =   25.65; daa[10*20+ 5] =   39.70; daa[10*20+ 6] =    1.90;
2526   daa[10*20+ 7] =    2.41; daa[10*20+ 8] =   11.49; daa[10*20+ 9] =  329.09; daa[11*20+ 0] =    8.36;
2527   daa[11*20+ 1] =  141.40; daa[11*20+ 2] =  608.70; daa[11*20+ 3] =    2.31; daa[11*20+ 4] =    1.90;
2528   daa[11*20+ 5] =  465.58; daa[11*20+ 6] =  313.86; daa[11*20+ 7] =   22.73; daa[11*20+ 8] =  127.67;
2529   daa[11*20+ 9] =   19.57; daa[11*20+10] =   14.88; daa[12*20+ 0] =  141.88; daa[12*20+ 1] =    1.90;
2530   daa[12*20+ 2] =   65.41; daa[12*20+ 3] =    1.90; daa[12*20+ 4] =    6.18; daa[12*20+ 5] =   47.37;
2531   daa[12*20+ 6] =    1.90; daa[12*20+ 7] =    1.90; daa[12*20+ 8] =   11.97; daa[12*20+ 9] =  517.98;
2532   daa[12*20+10] =  537.53; daa[12*20+11] =   91.37; daa[13*20+ 0] =    6.37; daa[13*20+ 1] =    4.69;
2533   daa[13*20+ 2] =   15.20; daa[13*20+ 3] =    4.98; daa[13*20+ 4] =   70.80; daa[13*20+ 5] =   19.11;
2534   daa[13*20+ 6] =    2.67; daa[13*20+ 7] =    1.90; daa[13*20+ 8] =   48.16; daa[13*20+ 9] =   84.67;
2535   daa[13*20+10] =  216.06; daa[13*20+11] =    6.44; daa[13*20+12] =   90.82; daa[14*20+ 0] =   54.31;
2536   daa[14*20+ 1] =   23.64; daa[14*20+ 2] =   73.31; daa[14*20+ 3] =   13.43; daa[14*20+ 4] =   31.26;
2537   daa[14*20+ 5] =  137.29; daa[14*20+ 6] =   12.83; daa[14*20+ 7] =    1.90; daa[14*20+ 8] =   60.97;
2538   daa[14*20+ 9] =   20.63; daa[14*20+10] =   40.10; daa[14*20+11] =   50.10; daa[14*20+12] =   18.84;
2539   daa[14*20+13] =   17.31; daa[15*20+ 0] =  387.86; daa[15*20+ 1] =    6.04; daa[15*20+ 2] =  494.39;
2540   daa[15*20+ 3] =   69.02; daa[15*20+ 4] =  277.05; daa[15*20+ 5] =   54.11; daa[15*20+ 6] =   54.71;
2541   daa[15*20+ 7] =  125.93; daa[15*20+ 8] =   77.46; daa[15*20+ 9] =   47.70; daa[15*20+10] =   73.61;
2542   daa[15*20+11] =  105.79; daa[15*20+12] =  111.16; daa[15*20+13] =   64.29; daa[15*20+14] =  169.90;
2543   daa[16*20+ 0] =  480.72; daa[16*20+ 1] =    2.08; daa[16*20+ 2] =  238.46; daa[16*20+ 3] =   28.01;
2544   daa[16*20+ 4] =  179.97; daa[16*20+ 5] =   94.93; daa[16*20+ 6] =   14.82; daa[16*20+ 7] =   11.17;
2545   daa[16*20+ 8] =   44.78; daa[16*20+ 9] =  368.43; daa[16*20+10] =  126.40; daa[16*20+11] =  136.33;
2546   daa[16*20+12] =  528.17; daa[16*20+13] =   33.85; daa[16*20+14] =  128.22; daa[16*20+15] =  597.21;
2547   daa[17*20+ 0] =    1.90; daa[17*20+ 1] =   21.95; daa[17*20+ 2] =   10.68; daa[17*20+ 3] =   19.86;
2548   daa[17*20+ 4] =   33.60; daa[17*20+ 5] =    1.90; daa[17*20+ 6] =    1.90; daa[17*20+ 7] =   10.92;
2549   daa[17*20+ 8] =    7.08; daa[17*20+ 9] =    1.90; daa[17*20+10] =   32.44; daa[17*20+11] =   24.00;
2550   daa[17*20+12] =   21.71; daa[17*20+13] =    7.84; daa[17*20+14] =    4.21; daa[17*20+15] =   38.58;
2551   daa[17*20+16] =    9.99; daa[18*20+ 0] =    6.48; daa[18*20+ 1] =    1.90; daa[18*20+ 2] =  191.36;
2552   daa[18*20+ 3] =   21.21; daa[18*20+ 4] =  254.77; daa[18*20+ 5] =   38.82; daa[18*20+ 6] =   13.12;
2553   daa[18*20+ 7] =    3.21; daa[18*20+ 8] =  670.14; daa[18*20+ 9] =   25.01; daa[18*20+10] =   44.15;
2554   daa[18*20+11] =   51.17; daa[18*20+12] =   39.96; daa[18*20+13] =  465.58; daa[18*20+14] =   16.21;
2555   daa[18*20+15] =   64.92; daa[18*20+16] =   38.73; daa[18*20+17] =   26.25; daa[19*20+ 0] =  195.06;
2556   daa[19*20+ 1] =    7.64; daa[19*20+ 2] =    1.90; daa[19*20+ 3] =    1.90; daa[19*20+ 4] =    1.90;
2557   daa[19*20+ 5] =   19.00; daa[19*20+ 6] =   21.14; daa[19*20+ 7] =    2.53; daa[19*20+ 8] =    1.90;
2558   daa[19*20+ 9] = 1222.94; daa[19*20+10] =   91.67; daa[19*20+11] =    1.90; daa[19*20+12] =  387.54;
2559   daa[19*20+13] =    6.35; daa[19*20+14] =    8.23; daa[19*20+15] =    1.90; daa[19*20+16] =  204.54;
2560   daa[19*20+17] =    5.37; daa[19*20+18] =    1.90;
2561 
2562   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2563 
2564   pi[ 0] = 0.072000; pi[ 1] = 0.019000; pi[ 2] = 0.039000; pi[ 3] = 0.019000;
2565   pi[ 4] = 0.006000; pi[ 5] = 0.025000; pi[ 6] = 0.024000; pi[ 7] = 0.056000;
2566   pi[ 8] = 0.028000; pi[ 9] = 0.088000; pi[10] = 0.169000; pi[11] = 0.023000;
2567   pi[12] = 0.054000; pi[13] = 0.061000; pi[14] = 0.054000; pi[15] = 0.072000;
2568   pi[16] = 0.086000; pi[17] = 0.029000; pi[18] = 0.033000; pi[19] = 0.043000;
2569 
2570 
2571   return 1;
2572 }
2573 
2574 
2575 //////////////////////////////////////////////////////////////
2576 //////////////////////////////////////////////////////////////
2577 
Init_Qmat_FLU(phydbl * daa,phydbl * pi)2578 int Init_Qmat_FLU(phydbl *daa, phydbl *pi)
2579 {
2580   int i,j,naa;
2581 
2582   /* FLU model
2583    *  Cuong Cao Dang, Quang Si Le2, Olivier Gascuel and Vinh Sy Le
2584    * 'FLU, an amino acid substitution model for influenza proteins'
2585    */
2586 
2587   naa = 20;
2588 
2589   daa[ 1*20+ 0] =   0.138659;  daa[ 2*20+ 0] =   0.053367;  daa[ 2*20+ 1] =   0.161001;  daa[ 3*20+ 0] =   0.584852;
2590   daa[ 3*20+ 1] =   0.006772;  daa[ 3*20+ 2] =   7.737393;  daa[ 4*20+ 0] =   0.026447;  daa[ 4*20+ 1] =   0.167207;
2591   daa[ 4*20+ 2] =   0.000013;  daa[ 4*20+ 3] =   0.014132;  daa[ 5*20+ 0] =   0.353754;  daa[ 5*20+ 1] =   3.292717;
2592   daa[ 5*20+ 2] =   0.530643;  daa[ 5*20+ 3] =   0.145469;  daa[ 5*20+ 4] =   0.002547;  daa[ 6*20+ 0] =   1.484235;
2593   daa[ 6*20+ 1] =   0.124898;  daa[ 6*20+ 2] =   0.061652;  daa[ 6*20+ 3] =   5.370511;  daa[ 6*20+ 4] =   0.000000;
2594   daa[ 6*20+ 5] =   1.195629;  daa[ 7*20+ 0] =   1.132313;  daa[ 7*20+ 1] =   1.190624;  daa[ 7*20+ 2] =   0.322525;
2595   daa[ 7*20+ 3] =   1.934833;  daa[ 7*20+ 4] =   0.116941;  daa[ 7*20+ 5] =   0.108051;  daa[ 7*20+ 6] =   1.593099;
2596   daa[ 8*20+ 0] =   0.214758;  daa[ 8*20+ 1] =   1.879570;  daa[ 8*20+ 2] =   1.387096;  daa[ 8*20+ 3] =   0.887571;
2597   daa[ 8*20+ 4] =   0.021845;  daa[ 8*20+ 5] =   5.330313;  daa[ 8*20+ 6] =   0.256492;  daa[ 8*20+ 7] =   0.058775;
2598   daa[ 9*20+ 0] =   0.149927;  daa[ 9*20+ 1] =   0.246117;  daa[ 9*20+ 2] =   0.218572;  daa[ 9*20+ 3] =   0.014086;
2599   daa[ 9*20+ 4] =   0.001112;  daa[ 9*20+ 5] =   0.028840;  daa[ 9*20+ 6] =   0.014211;  daa[ 9*20+ 7] =   0.000016;
2600   daa[ 9*20+ 8] =   0.243190;  daa[10*20+ 0] =   0.023117;  daa[10*20+ 1] =   0.296046;  daa[10*20+ 2] =   0.000836;
2601   daa[10*20+ 3] =   0.005731;  daa[10*20+ 4] =   0.005614;  daa[10*20+ 5] =   1.020367;  daa[10*20+ 6] =   0.016500;
2602   daa[10*20+ 7] =   0.006516;  daa[10*20+ 8] =   0.321612;  daa[10*20+ 9] =   3.512072;  daa[11*20+ 0] =   0.474334;
2603   daa[11*20+ 1] =  15.300097;  daa[11*20+ 2] =   2.646848;  daa[11*20+ 3] =   0.290043;  daa[11*20+ 4] =   0.000004;
2604   daa[11*20+ 5] =   2.559587;  daa[11*20+ 6] =   3.881489;  daa[11*20+ 7] =   0.264149;  daa[11*20+ 8] =   0.347303;
2605   daa[11*20+ 9] =   0.227708;  daa[11*20+10] =   0.129224;  daa[12*20+ 0] =   0.058745;  daa[12*20+ 1] =   0.890162;
2606   daa[12*20+ 2] =   0.005252;  daa[12*20+ 3] =   0.041763;  daa[12*20+ 4] =   0.111457;  daa[12*20+ 5] =   0.190259;
2607   daa[12*20+ 6] =   0.313974;  daa[12*20+ 7] =   0.001500;  daa[12*20+ 8] =   0.001274;  daa[12*20+ 9] =   9.017954;
2608   daa[12*20+10] =   6.746936;  daa[12*20+11] =   1.331292;  daa[13*20+ 0] =   0.080491;  daa[13*20+ 1] =   0.016055;
2609   daa[13*20+ 2] =   0.000836;  daa[13*20+ 3] =   0.000001;  daa[13*20+ 4] =   0.104054;  daa[13*20+ 5] =   0.032681;
2610   daa[13*20+ 6] =   0.001004;  daa[13*20+ 7] =   0.001237;  daa[13*20+ 8] =   0.119029;  daa[13*20+ 9] =   1.463357;
2611   daa[13*20+10] =   2.986800;  daa[13*20+11] =   0.319896;  daa[13*20+12] =   0.279911;  daa[14*20+ 0] =   0.659311;
2612   daa[14*20+ 1] =   0.154027;  daa[14*20+ 2] =   0.036442;  daa[14*20+ 3] =   0.188539;  daa[14*20+ 4] =   0.000000;
2613   daa[14*20+ 5] =   0.712770;  daa[14*20+ 6] =   0.319559;  daa[14*20+ 7] =   0.038632;  daa[14*20+ 8] =   0.924467;
2614   daa[14*20+ 9] =   0.080543;  daa[14*20+10] =   0.634309;  daa[14*20+11] =   0.195751;  daa[14*20+12] =   0.056869;
2615   daa[14*20+13] =   0.007132;  daa[15*20+ 0] =   3.011345;  daa[15*20+ 1] =   0.950138;  daa[15*20+ 2] =   3.881311;
2616   daa[15*20+ 3] =   0.338372;  daa[15*20+ 4] =   0.336263;  daa[15*20+ 5] =   0.487822;  daa[15*20+ 6] =   0.307140;
2617   daa[15*20+ 7] =   1.585647;  daa[15*20+ 8] =   0.580704;  daa[15*20+ 9] =   0.290381;  daa[15*20+10] =   0.570767;
2618   daa[15*20+11] =   0.283808;  daa[15*20+12] =   0.007027;  daa[15*20+13] =   0.996686;  daa[15*20+14] =   2.087385;
2619   daa[16*20+ 0] =   5.418298;  daa[16*20+ 1] =   0.183077;  daa[16*20+ 2] =   2.140332;  daa[16*20+ 3] =   0.135481;
2620   daa[16*20+ 4] =   0.011975;  daa[16*20+ 5] =   0.602341;  daa[16*20+ 6] =   0.280125;  daa[16*20+ 7] =   0.018808;
2621   daa[16*20+ 8] =   0.368714;  daa[16*20+ 9] =   2.904052;  daa[16*20+10] =   0.044926;  daa[16*20+11] =   1.526964;
2622   daa[16*20+12] =   2.031511;  daa[16*20+13] =   0.000135;  daa[16*20+14] =   0.542251;  daa[16*20+15] =   2.206860;
2623   daa[17*20+ 0] =   0.195966;  daa[17*20+ 1] =   1.369429;  daa[17*20+ 2] =   0.000536;  daa[17*20+ 3] =   0.000015;
2624   daa[17*20+ 4] =   0.094107;  daa[17*20+ 5] =   0.044021;  daa[17*20+ 6] =   0.155245;  daa[17*20+ 7] =   0.196486;
2625   daa[17*20+ 8] =   0.022373;  daa[17*20+ 9] =   0.032132;  daa[17*20+10] =   0.431278;  daa[17*20+11] =   0.000050;
2626   daa[17*20+12] =   0.070460;  daa[17*20+13] =   0.814753;  daa[17*20+14] =   0.000431;  daa[17*20+15] =   0.099836;
2627   daa[17*20+16] =   0.207066;  daa[18*20+ 0] =   0.018289;  daa[18*20+ 1] =   0.099855;  daa[18*20+ 2] =   0.373102;
2628   daa[18*20+ 3] =   0.525399;  daa[18*20+ 4] =   0.601692;  daa[18*20+ 5] =   0.072206;  daa[18*20+ 6] =   0.104093;
2629   daa[18*20+ 7] =   0.074815;  daa[18*20+ 8] =   6.448954;  daa[18*20+ 9] =   0.273934;  daa[18*20+10] =   0.340058;
2630   daa[18*20+11] =   0.012416;  daa[18*20+12] =   0.874272;  daa[18*20+13] =   5.393924;  daa[18*20+14] =   0.000182;
2631   daa[18*20+15] =   0.392552;  daa[18*20+16] =   0.124898;  daa[18*20+17] =   0.427755;  daa[19*20+ 0] =   3.532005;
2632   daa[19*20+ 1] =   0.103964;  daa[19*20+ 2] =   0.010258;  daa[19*20+ 3] =   0.297124;  daa[19*20+ 4] =   0.054905;
2633   daa[19*20+ 5] =   0.406698;  daa[19*20+ 6] =   0.285048;  daa[19*20+ 7] =   0.337230;  daa[19*20+ 8] =   0.098631;
2634   daa[19*20+ 9] =  14.394052;  daa[19*20+10] =   0.890599;  daa[19*20+11] =   0.073128;  daa[19*20+12] =   4.904842;
2635   daa[19*20+13] =   0.592588;  daa[19*20+14] =   0.058972;  daa[19*20+15] =   0.088256;  daa[19*20+16] =   0.654109;
2636   daa[19*20+17] =   0.256900;  daa[19*20+18] =   0.167582;
2637 
2638   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2639 
2640   pi[0] = 0.047072; pi[1] = 0.050910; pi[2] = 0.074214; pi[3] = 0.047860; pi[4] = 0.025022; pi[5] = 0.033304; pi[6] = 0.054587; pi[7] = 0.076373; pi[8] = 0.019964; pi[9] = 0.067134; pi[10] = 0.071498; pi[11] = 0.056785; pi[12] = 0.018151; pi[13] = 0.030496; pi[14] = 0.050656; pi[15] = 0.088409; pi[16] = 0.074339; pi[17] = 0.018524; pi[18] = 0.031474; pi[19] = 0.063229;
2641 
2642   return 1;
2643 }
2644 
2645 //////////////////////////////////////////////////////////////
2646 //////////////////////////////////////////////////////////////
2647 
Init_Qmat_LG(phydbl * daa,phydbl * pi)2648 int Init_Qmat_LG(phydbl *daa, phydbl *pi)
2649 {
2650   int i,j,naa;
2651 
2652   /* LG model
2653    * Si Quang Le & Olivier Gascuel
2654    * 'An improved general amino-acid replacement matrix'
2655    */
2656 
2657   naa = 20;
2658 
2659   daa[ 1*20+ 0] =   0.425093;  daa[ 2*20+ 0] =   0.276818;  daa[ 2*20+ 1] =   0.751878;  daa[ 3*20+ 0] =   0.395144;
2660   daa[ 3*20+ 1] =   0.123954;  daa[ 3*20+ 2] =   5.076149;  daa[ 4*20+ 0] =   2.489084;  daa[ 4*20+ 1] =   0.534551;
2661   daa[ 4*20+ 2] =   0.528768;  daa[ 4*20+ 3] =   0.062556;  daa[ 5*20+ 0] =   0.969894;  daa[ 5*20+ 1] =   2.807908;
2662   daa[ 5*20+ 2] =   1.695752;  daa[ 5*20+ 3] =   0.523386;  daa[ 5*20+ 4] =   0.084808;  daa[ 6*20+ 0] =   1.038545;
2663   daa[ 6*20+ 1] =   0.363970;  daa[ 6*20+ 2] =   0.541712;  daa[ 6*20+ 3] =   5.243870;  daa[ 6*20+ 4] =   0.003499;
2664   daa[ 6*20+ 5] =   4.128591;  daa[ 7*20+ 0] =   2.066040;  daa[ 7*20+ 1] =   0.390192;  daa[ 7*20+ 2] =   1.437645;
2665   daa[ 7*20+ 3] =   0.844926;  daa[ 7*20+ 4] =   0.569265;  daa[ 7*20+ 5] =   0.267959;  daa[ 7*20+ 6] =   0.348847;
2666   daa[ 8*20+ 0] =   0.358858;  daa[ 8*20+ 1] =   2.426601;  daa[ 8*20+ 2] =   4.509238;  daa[ 8*20+ 3] =   0.927114;
2667   daa[ 8*20+ 4] =   0.640543;  daa[ 8*20+ 5] =   4.813505;  daa[ 8*20+ 6] =   0.423881;  daa[ 8*20+ 7] =   0.311484;
2668   daa[ 9*20+ 0] =   0.149830;  daa[ 9*20+ 1] =   0.126991;  daa[ 9*20+ 2] =   0.191503;  daa[ 9*20+ 3] =   0.010690;
2669   daa[ 9*20+ 4] =   0.320627;  daa[ 9*20+ 5] =   0.072854;  daa[ 9*20+ 6] =   0.044265;  daa[ 9*20+ 7] =   0.008705;
2670   daa[ 9*20+ 8] =   0.108882;  daa[10*20+ 0] =   0.395337;  daa[10*20+ 1] =   0.301848;  daa[10*20+ 2] =   0.068427;
2671   daa[10*20+ 3] =   0.015076;  daa[10*20+ 4] =   0.594007;  daa[10*20+ 5] =   0.582457;  daa[10*20+ 6] =   0.069673;
2672   daa[10*20+ 7] =   0.044261;  daa[10*20+ 8] =   0.366317;  daa[10*20+ 9] =   4.145067;  daa[11*20+ 0] =   0.536518;
2673   daa[11*20+ 1] =   6.326067;  daa[11*20+ 2] =   2.145078;  daa[11*20+ 3] =   0.282959;  daa[11*20+ 4] =   0.013266;
2674   daa[11*20+ 5] =   3.234294;  daa[11*20+ 6] =   1.807177;  daa[11*20+ 7] =   0.296636;  daa[11*20+ 8] =   0.697264;
2675   daa[11*20+ 9] =   0.159069;  daa[11*20+10] =   0.137500;  daa[12*20+ 0] =   1.124035;  daa[12*20+ 1] =   0.484133;
2676   daa[12*20+ 2] =   0.371004;  daa[12*20+ 3] =   0.025548;  daa[12*20+ 4] =   0.893680;  daa[12*20+ 5] =   1.672569;
2677   daa[12*20+ 6] =   0.173735;  daa[12*20+ 7] =   0.139538;  daa[12*20+ 8] =   0.442472;  daa[12*20+ 9] =   4.273607;
2678   daa[12*20+10] =   6.312358;  daa[12*20+11] =   0.656604;  daa[13*20+ 0] =   0.253701;  daa[13*20+ 1] =   0.052722;
2679   daa[13*20+ 2] =   0.089525;  daa[13*20+ 3] =   0.017416;  daa[13*20+ 4] =   1.105251;  daa[13*20+ 5] =   0.035855;
2680   daa[13*20+ 6] =   0.018811;  daa[13*20+ 7] =   0.089586;  daa[13*20+ 8] =   0.682139;  daa[13*20+ 9] =   1.112727;
2681   daa[13*20+10] =   2.592692;  daa[13*20+11] =   0.023918;  daa[13*20+12] =   1.798853;  daa[14*20+ 0] =   1.177651;
2682   daa[14*20+ 1] =   0.332533;  daa[14*20+ 2] =   0.161787;  daa[14*20+ 3] =   0.394456;  daa[14*20+ 4] =   0.075382;
2683   daa[14*20+ 5] =   0.624294;  daa[14*20+ 6] =   0.419409;  daa[14*20+ 7] =   0.196961;  daa[14*20+ 8] =   0.508851;
2684   daa[14*20+ 9] =   0.078281;  daa[14*20+10] =   0.249060;  daa[14*20+11] =   0.390322;  daa[14*20+12] =   0.099849;
2685   daa[14*20+13] =   0.094464;  daa[15*20+ 0] =   4.727182;  daa[15*20+ 1] =   0.858151;  daa[15*20+ 2] =   4.008358;
2686   daa[15*20+ 3] =   1.240275;  daa[15*20+ 4] =   2.784478;  daa[15*20+ 5] =   1.223828;  daa[15*20+ 6] =   0.611973;
2687   daa[15*20+ 7] =   1.739990;  daa[15*20+ 8] =   0.990012;  daa[15*20+ 9] =   0.064105;  daa[15*20+10] =   0.182287;
2688   daa[15*20+11] =   0.748683;  daa[15*20+12] =   0.346960;  daa[15*20+13] =   0.361819;  daa[15*20+14] =   1.338132;
2689   daa[16*20+ 0] =   2.139501;  daa[16*20+ 1] =   0.578987;  daa[16*20+ 2] =   2.000679;  daa[16*20+ 3] =   0.425860;
2690   daa[16*20+ 4] =   1.143480;  daa[16*20+ 5] =   1.080136;  daa[16*20+ 6] =   0.604545;  daa[16*20+ 7] =   0.129836;
2691   daa[16*20+ 8] =   0.584262;  daa[16*20+ 9] =   1.033739;  daa[16*20+10] =   0.302936;  daa[16*20+11] =   1.136863;
2692   daa[16*20+12] =   2.020366;  daa[16*20+13] =   0.165001;  daa[16*20+14] =   0.571468;  daa[16*20+15] =   6.472279;
2693   daa[17*20+ 0] =   0.180717;  daa[17*20+ 1] =   0.593607;  daa[17*20+ 2] =   0.045376;  daa[17*20+ 3] =   0.029890;
2694   daa[17*20+ 4] =   0.670128;  daa[17*20+ 5] =   0.236199;  daa[17*20+ 6] =   0.077852;  daa[17*20+ 7] =   0.268491;
2695   daa[17*20+ 8] =   0.597054;  daa[17*20+ 9] =   0.111660;  daa[17*20+10] =   0.619632;  daa[17*20+11] =   0.049906;
2696   daa[17*20+12] =   0.696175;  daa[17*20+13] =   2.457121;  daa[17*20+14] =   0.095131;  daa[17*20+15] =   0.248862;
2697   daa[17*20+16] =   0.140825;  daa[18*20+ 0] =   0.218959;  daa[18*20+ 1] =   0.314440;  daa[18*20+ 2] =   0.612025;
2698   daa[18*20+ 3] =   0.135107;  daa[18*20+ 4] =   1.165532;  daa[18*20+ 5] =   0.257336;  daa[18*20+ 6] =   0.120037;
2699   daa[18*20+ 7] =   0.054679;  daa[18*20+ 8] =   5.306834;  daa[18*20+ 9] =   0.232523;  daa[18*20+10] =   0.299648;
2700   daa[18*20+11] =   0.131932;  daa[18*20+12] =   0.481306;  daa[18*20+13] =   7.803902;  daa[18*20+14] =   0.089613;
2701   daa[18*20+15] =   0.400547;  daa[18*20+16] =   0.245841;  daa[18*20+17] =   3.151815;  daa[19*20+ 0] =   2.547870;
2702   daa[19*20+ 1] =   0.170887;  daa[19*20+ 2] =   0.083688;  daa[19*20+ 3] =   0.037967;  daa[19*20+ 4] =   1.959291;
2703   daa[19*20+ 5] =   0.210332;  daa[19*20+ 6] =   0.245034;  daa[19*20+ 7] =   0.076701;  daa[19*20+ 8] =   0.119013;
2704   daa[19*20+ 9] =  10.649107;  daa[19*20+10] =   1.702745;  daa[19*20+11] =   0.185202;  daa[19*20+12] =   1.898718;
2705   daa[19*20+13] =   0.654683;  daa[19*20+14] =   0.296501;  daa[19*20+15] =   0.098369;  daa[19*20+16] =   2.188158;
2706   daa[19*20+17] =   0.189510;  daa[19*20+18] =   0.249313;
2707 
2708 
2709   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2710 
2711   pi[0] = 0.079066; pi[1] = 0.055941; pi[2] = 0.041977; pi[3] = 0.053052;
2712   pi[4] = 0.012937; pi[5] = 0.040767; pi[6] = 0.071586; pi[7] = 0.057337;
2713   pi[8] = 0.022355; pi[9] = 0.062157; pi[10] = 0.099081; pi[11] = 0.064600;
2714   pi[12] = 0.022951; pi[13] = 0.042302; pi[14] = 0.044040; pi[15] = 0.061197;
2715   pi[16] = 0.053287; pi[17] = 0.012066; pi[18] = 0.034155; pi[19] = 0.069147;
2716 
2717   return 1;
2718 }
2719 
2720 //////////////////////////////////////////////////////////////
2721 //////////////////////////////////////////////////////////////
2722 
Init_Qmat_WAG(phydbl * daa,phydbl * pi)2723 int Init_Qmat_WAG(phydbl *daa, phydbl *pi)
2724 {
2725   int i,j,naa;
2726 
2727   /* WAG's model data
2728    * Simon Whelan and Nick Goldman
2729    * 'A general empirical model of protein evolution derived from multiple
2730    *  protein families using a maximum-likelihood approach'
2731    * MBE (2001) 18:691-699
2732    */
2733 
2734 
2735   naa = 20;
2736 
2737   daa[ 1*20+ 0] =  55.15710; daa[ 2*20+ 0] =  50.98480; daa[ 2*20+ 1] =  63.53460;
2738   daa[ 3*20+ 0] =  73.89980; daa[ 3*20+ 1] =  14.73040; daa[ 3*20+ 2] = 542.94200;
2739   daa[ 4*20+ 0] = 102.70400; daa[ 4*20+ 1] =  52.81910; daa[ 4*20+ 2] =  26.52560;
2740   daa[ 4*20+ 3] =   3.02949; daa[ 5*20+ 0] =  90.85980; daa[ 5*20+ 1] = 303.55000;
2741   daa[ 5*20+ 2] = 154.36400; daa[ 5*20+ 3] =  61.67830; daa[ 5*20+ 4] =   9.88179;
2742   daa[ 6*20+ 0] = 158.28500; daa[ 6*20+ 1] =  43.91570; daa[ 6*20+ 2] =  94.71980;
2743   daa[ 6*20+ 3] = 617.41600; daa[ 6*20+ 4] =   2.13520; daa[ 6*20+ 5] = 546.94700;
2744   daa[ 7*20+ 0] = 141.67200; daa[ 7*20+ 1] =  58.46650; daa[ 7*20+ 2] = 112.55600;
2745   daa[ 7*20+ 3] =  86.55840; daa[ 7*20+ 4] =  30.66740; daa[ 7*20+ 5] =  33.00520;
2746   daa[ 7*20+ 6] =  56.77170; daa[ 8*20+ 0] =  31.69540; daa[ 8*20+ 1] = 213.71500;
2747   daa[ 8*20+ 2] = 395.62900; daa[ 8*20+ 3] =  93.06760; daa[ 8*20+ 4] =  24.89720;
2748   daa[ 8*20+ 5] = 429.41100; daa[ 8*20+ 6] =  57.00250; daa[ 8*20+ 7] =  24.94100;
2749   daa[ 9*20+ 0] =  19.33350; daa[ 9*20+ 1] =  18.69790; daa[ 9*20+ 2] =  55.42360;
2750   daa[ 9*20+ 3] =   3.94370; daa[ 9*20+ 4] =  17.01350; daa[ 9*20+ 5] =  11.39170;
2751   daa[ 9*20+ 6] =  12.73950; daa[ 9*20+ 7] =   3.04501; daa[ 9*20+ 8] =  13.81900;
2752   daa[10*20+ 0] =  39.79150; daa[10*20+ 1] =  49.76710; daa[10*20+ 2] =  13.15280;
2753   daa[10*20+ 3] =   8.48047; daa[10*20+ 4] =  38.42870; daa[10*20+ 5] =  86.94890;
2754   daa[10*20+ 6] =  15.42630; daa[10*20+ 7] =   6.13037; daa[10*20+ 8] =  49.94620;
2755   daa[10*20+ 9] = 317.09700; daa[11*20+ 0] =  90.62650; daa[11*20+ 1] = 535.14200;
2756   daa[11*20+ 2] = 301.20100; daa[11*20+ 3] =  47.98550; daa[11*20+ 4] =   7.40339;
2757   daa[11*20+ 5] = 389.49000; daa[11*20+ 6] = 258.44300; daa[11*20+ 7] =  37.35580;
2758   daa[11*20+ 8] =  89.04320; daa[11*20+ 9] =  32.38320; daa[11*20+10] =  25.75550;
2759   daa[12*20+ 0] =  89.34960; daa[12*20+ 1] =  68.31620; daa[12*20+ 2] =  19.82210;
2760   daa[12*20+ 3] =  10.37540; daa[12*20+ 4] =  39.04820; daa[12*20+ 5] = 154.52600;
2761   daa[12*20+ 6] =  31.51240; daa[12*20+ 7] =  17.41000; daa[12*20+ 8] =  40.41410;
2762   daa[12*20+ 9] = 425.74600; daa[12*20+10] = 485.40200; daa[12*20+11] =  93.42760;
2763   daa[13*20+ 0] =  21.04940; daa[13*20+ 1] =  10.27110; daa[13*20+ 2] =   9.61621;
2764   daa[13*20+ 3] =   4.67304; daa[13*20+ 4] =  39.80200; daa[13*20+ 5] =   9.99208;
2765   daa[13*20+ 6] =   8.11339; daa[13*20+ 7] =   4.99310; daa[13*20+ 8] =  67.93710;
2766   daa[13*20+ 9] = 105.94700; daa[13*20+10] = 211.51700; daa[13*20+11] =   8.88360;
2767   daa[13*20+12] = 119.06300; daa[14*20+ 0] = 143.85500; daa[14*20+ 1] =  67.94890;
2768   daa[14*20+ 2] =  19.50810; daa[14*20+ 3] =  42.39840; daa[14*20+ 4] =  10.94040;
2769   daa[14*20+ 5] =  93.33720; daa[14*20+ 6] =  68.23550; daa[14*20+ 7] =  24.35700;
2770   daa[14*20+ 8] =  69.61980; daa[14*20+ 9] =   9.99288; daa[14*20+10] =  41.58440;
2771   daa[14*20+11] =  55.68960; daa[14*20+12] =  17.13290; daa[14*20+13] =  16.14440;
2772   daa[15*20+ 0] = 337.07900; daa[15*20+ 1] = 122.41900; daa[15*20+ 2] = 397.42300;
2773   daa[15*20+ 3] = 107.17600; daa[15*20+ 4] = 140.76600; daa[15*20+ 5] = 102.88700;
2774   daa[15*20+ 6] =  70.49390; daa[15*20+ 7] = 134.18200; daa[15*20+ 8] =  74.01690;
2775   daa[15*20+ 9] =  31.94400; daa[15*20+10] =  34.47390; daa[15*20+11] =  96.71300;
2776   daa[15*20+12] =  49.39050; daa[15*20+13] =  54.59310; daa[15*20+14] = 161.32800;
2777   daa[16*20+ 0] = 212.11100; daa[16*20+ 1] =  55.44130; daa[16*20+ 2] = 203.00600;
2778   daa[16*20+ 3] =  37.48660; daa[16*20+ 4] =  51.29840; daa[16*20+ 5] =  85.79280;
2779   daa[16*20+ 6] =  82.27650; daa[16*20+ 7] =  22.58330; daa[16*20+ 8] =  47.33070;
2780   daa[16*20+ 9] = 145.81600; daa[16*20+10] =  32.66220; daa[16*20+11] = 138.69800;
2781   daa[16*20+12] = 151.61200; daa[16*20+13] =  17.19030; daa[16*20+14] =  79.53840;
2782   daa[16*20+15] = 437.80200; daa[17*20+ 0] =  11.31330; daa[17*20+ 1] = 116.39200;
2783   daa[17*20+ 2] =   7.19167; daa[17*20+ 3] =  12.97670; daa[17*20+ 4] =  71.70700;
2784   daa[17*20+ 5] =  21.57370; daa[17*20+ 6] =  15.65570; daa[17*20+ 7] =  33.69830;
2785   daa[17*20+ 8] =  26.25690; daa[17*20+ 9] =  21.24830; daa[17*20+10] =  66.53090;
2786   daa[17*20+11] =  13.75050; daa[17*20+12] =  51.57060; daa[17*20+13] = 152.96400;
2787   daa[17*20+14] =  13.94050; daa[17*20+15] =  52.37420; daa[17*20+16] =  11.08640;
2788   daa[18*20+ 0] =  24.07350; daa[18*20+ 1] =  38.15330; daa[18*20+ 2] = 108.60000;
2789   daa[18*20+ 3] =  32.57110; daa[18*20+ 4] =  54.38330; daa[18*20+ 5] =  22.77100;
2790   daa[18*20+ 6] =  19.63030; daa[18*20+ 7] =  10.36040; daa[18*20+ 8] = 387.34400;
2791   daa[18*20+ 9] =  42.01700; daa[18*20+10] =  39.86180; daa[18*20+11] =  13.32640;
2792   daa[18*20+12] =  42.84370; daa[18*20+13] = 645.42800; daa[18*20+14] =  21.60460;
2793   daa[18*20+15] =  78.69930; daa[18*20+16] =  29.11480; daa[18*20+17] = 248.53900;
2794   daa[19*20+ 0] = 200.60100; daa[19*20+ 1] =  25.18490; daa[19*20+ 2] =  19.62460;
2795   daa[19*20+ 3] =  15.23350; daa[19*20+ 4] = 100.21400; daa[19*20+ 5] =  30.12810;
2796   daa[19*20+ 6] =  58.87310; daa[19*20+ 7] =  18.72470; daa[19*20+ 8] =  11.83580;
2797   daa[19*20+ 9] = 782.13000; daa[19*20+10] = 180.03400; daa[19*20+11] =  30.54340;
2798   daa[19*20+12] = 205.84500; daa[19*20+13] =  64.98920; daa[19*20+14] =  31.48870;
2799   daa[19*20+15] =  23.27390; daa[19*20+16] = 138.82300; daa[19*20+17] =  36.53690;
2800   daa[19*20+18] =  31.47300;
2801 
2802   for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2803 
2804   pi[0] = 0.0866279; pi[1] =  0.043972; pi[2] =  0.0390894; pi[3] =  0.0570451;
2805   pi[4] =  0.0193078; pi[5] =  0.0367281; pi[6] =  0.0580589; pi[7] =  0.0832518;
2806   pi[8] =  0.0244313; pi[9] =  0.048466; pi[10] =  0.086209; pi[11] = 0.0620286;
2807   pi[12] = 0.0195027; pi[13] =  0.0384319; pi[14] =  0.0457631; pi[15] = 0.0695179;
2808   pi[16] =  0.0610127; pi[17] =  0.0143859; pi[18] =  0.0352742; pi[19] =  0.0708956;
2809 
2810 
2811   return 1;
2812 }
2813 
2814 //////////////////////////////////////////////////////////////
2815 //////////////////////////////////////////////////////////////
2816 
2817 
Init_Qmat_RtREV(phydbl * daa,phydbl * pi)2818 int Init_Qmat_RtREV(phydbl *daa, phydbl *pi)
2819 {
2820     /*
2821        This model has been 'translated' from John Huelsenbeck and Fredrik Ronquist
2822        MrBayes program into PHYML format by Federico Abascal. Many thanks to them.
2823     */
2824 
2825     /*
2826     Dimmic M.W., J.S. Rest, D.P. Mindell, and D. Goldstein. 2002. RArtREV:
2827     An amino acid substitution matrix for inference of retrovirus and
2828     reverse transcriptase phylogeny. Journal of Molecular Evolution
2829     55: 65-73.
2830     */
2831 
2832     int i,j,naa;
2833     naa = 20;
2834 
2835     daa[1*20+0]= 34;         daa[2*20+0]= 51;         daa[2*20+1]= 35;         daa[3*20+0]= 10;
2836     daa[3*20+1]= 30;         daa[3*20+2]= 384;        daa[4*20+0]= 439;        daa[4*20+1]= 92;
2837     daa[4*20+2]= 128;        daa[4*20+3]= 1;          daa[5*20+0]= 32;         daa[5*20+1]= 221;
2838     daa[5*20+2]= 236;        daa[5*20+3]= 78;         daa[5*20+4]= 70;         daa[6*20+0]= 81;
2839     daa[6*20+1]= 10;         daa[6*20+2]= 79;         daa[6*20+3]= 542;        daa[6*20+4]= 1;
2840     daa[6*20+5]= 372;        daa[7*20+0]= 135;        daa[7*20+1]= 41;         daa[7*20+2]= 94;
2841     daa[7*20+3]= 61;         daa[7*20+4]= 48;         daa[7*20+5]= 18;         daa[7*20+6]= 70;
2842     daa[8*20+0]= 30;         daa[8*20+1]= 90;         daa[8*20+2]= 320;        daa[8*20+3]= 91;
2843     daa[8*20+4]= 124;        daa[8*20+5]= 387;        daa[8*20+6]= 34;         daa[8*20+7]= 68;
2844     daa[9*20+0]= 1;          daa[9*20+1]= 24;         daa[9*20+2]= 35;         daa[9*20+3]= 1;
2845     daa[9*20+4]= 104;        daa[9*20+5]= 33;         daa[9*20+6]= 1;          daa[9*20+7]= 1;
2846     daa[9*20+8]= 34;         daa[10*20+0]= 45;        daa[10*20+1]= 18;        daa[10*20+2]= 15;
2847     daa[10*20+3]= 5;         daa[10*20+4]= 110;       daa[10*20+5]= 54;        daa[10*20+6]= 21;
2848     daa[10*20+7]= 3;         daa[10*20+8]= 51;        daa[10*20+9]= 385;       daa[11*20+0]= 38;
2849     daa[11*20+1]= 593;       daa[11*20+2]= 123;       daa[11*20+3]= 20;        daa[11*20+4]= 16;
2850     daa[11*20+5]= 309;       daa[11*20+6]= 141;       daa[11*20+7]= 30;        daa[11*20+8]= 76;
2851     daa[11*20+9]= 34;        daa[11*20+10]= 23;       daa[12*20+0]= 235;       daa[12*20+1]= 57;
2852     daa[12*20+2]= 1;         daa[12*20+3]= 1;         daa[12*20+4]= 156;       daa[12*20+5]= 158;
2853     daa[12*20+6]= 1;         daa[12*20+7]= 37;        daa[12*20+8]= 116;       daa[12*20+9]= 375;
2854     daa[12*20+10]= 581;      daa[12*20+11]= 134;      daa[13*20+0]= 1;         daa[13*20+1]= 7;
2855     daa[13*20+2]= 49;        daa[13*20+3]= 1;         daa[13*20+4]= 70;        daa[13*20+5]= 1;
2856     daa[13*20+6]= 1;         daa[13*20+7]= 7;         daa[13*20+8]= 141;       daa[13*20+9]= 64;
2857     daa[13*20+10]= 179;      daa[13*20+11]= 14;       daa[13*20+12]= 247;      daa[14*20+0]= 97;
2858     daa[14*20+1]= 24;        daa[14*20+2]= 33;        daa[14*20+3]= 55;        daa[14*20+4]= 1;
2859     daa[14*20+5]= 68;        daa[14*20+6]= 52;        daa[14*20+7]= 17;        daa[14*20+8]= 44;
2860     daa[14*20+9]= 10;        daa[14*20+10]= 22;       daa[14*20+11]= 43;       daa[14*20+12]= 1;
2861     daa[14*20+13]= 11;       daa[15*20+0]= 460;       daa[15*20+1]= 102;       daa[15*20+2]= 294;
2862     daa[15*20+3]= 136;       daa[15*20+4]= 75;        daa[15*20+5]= 225;       daa[15*20+6]= 95;
2863     daa[15*20+7]= 152;       daa[15*20+8]= 183;       daa[15*20+9]= 4;         daa[15*20+10]= 24;
2864     daa[15*20+11]= 77;       daa[15*20+12]= 1;        daa[15*20+13]= 20;       daa[15*20+14]= 134;
2865     daa[16*20+0]= 258;       daa[16*20+1]= 64;        daa[16*20+2]= 148;       daa[16*20+3]= 55;
2866     daa[16*20+4]= 117;       daa[16*20+5]= 146;       daa[16*20+6]= 82;        daa[16*20+7]= 7;
2867     daa[16*20+8]= 49;        daa[16*20+9]= 72;        daa[16*20+10]= 25;       daa[16*20+11]= 110;
2868     daa[16*20+12]= 131;      daa[16*20+13]= 69;       daa[16*20+14]= 62;       daa[16*20+15]= 671;
2869     daa[17*20+0]= 5;         daa[17*20+1]= 13;        daa[17*20+2]= 16;        daa[17*20+3]= 1;
2870     daa[17*20+4]= 55;        daa[17*20+5]= 10;        daa[17*20+6]= 17;        daa[17*20+7]= 23;
2871     daa[17*20+8]= 48;        daa[17*20+9]= 39;        daa[17*20+10]= 47;       daa[17*20+11]= 6;
2872     daa[17*20+12]= 111;      daa[17*20+13]= 182;      daa[17*20+14]= 9;        daa[17*20+15]= 14;
2873     daa[17*20+16]= 1;        daa[18*20+0]= 55;        daa[18*20+1]= 47;        daa[18*20+2]= 28;
2874     daa[18*20+3]= 1;         daa[18*20+4]= 131;       daa[18*20+5]= 45;        daa[18*20+6]= 1;
2875     daa[18*20+7]= 21;        daa[18*20+8]= 307;       daa[18*20+9]= 26;        daa[18*20+10]= 64;
2876     daa[18*20+11]= 1;        daa[18*20+12]= 74;       daa[18*20+13]= 1017;     daa[18*20+14]= 14;
2877     daa[18*20+15]= 31;       daa[18*20+16]= 34;       daa[18*20+17]= 176;      daa[19*20+0]= 197;
2878     daa[19*20+1]= 29;        daa[19*20+2]= 21;        daa[19*20+3]= 6;         daa[19*20+4]= 295;
2879     daa[19*20+5]= 36;        daa[19*20+6]= 35;        daa[19*20+7]= 3;         daa[19*20+8]= 1;
2880     daa[19*20+9]= 1048;      daa[19*20+10]= 112;      daa[19*20+11]= 19;       daa[19*20+12]= 236;
2881     daa[19*20+13]= 92;       daa[19*20+14]= 25;       daa[19*20+15]= 39;       daa[19*20+16]= 196;
2882     daa[19*20+17]= 26;       daa[19*20+18]= 59;
2883 
2884     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2885 
2886     pi[0]= 0.0646;           pi[1]= 0.0453;           pi[2]= 0.0376;           pi[3]= 0.0422;
2887     pi[4]= 0.0114;           pi[5]= 0.0606;           pi[6]= 0.0607;           pi[7]= 0.0639;
2888     pi[8]= 0.0273;           pi[9]= 0.0679;           pi[10]= 0.1018;          pi[11]= 0.0751;
2889     pi[12]= 0.015;           pi[13]= 0.0287;          pi[14]= 0.0681;          pi[15]= 0.0488;
2890     pi[16]= 0.0622;          pi[17]= 0.0251;          pi[18]= 0.0318;          pi[19]= 0.0619;
2891     return 1;
2892 }
2893 
2894 //////////////////////////////////////////////////////////////
2895 //////////////////////////////////////////////////////////////
2896 
2897 
Init_Qmat_CpREV(phydbl * daa,phydbl * pi)2898 int Init_Qmat_CpREV(phydbl *daa, phydbl *pi)
2899 {
2900     /*
2901        This model has been 'translated' from John Huelsenbeck and Fredrik Ronquist
2902        MrBayes program into PHYML format by Federico Abascal. Many thanks to them.
2903     */
2904 
2905     /*
2906       Adachi, J., P. Waddell, W. Martin, and M. Hasegawa. 2000. Plastid
2907       genome phylogeny and a model of amino acid substitution for proteins
2908       encoded by chloroplast DNA. Journal of Molecular Evolution
2909       50:348-358.
2910     */
2911 
2912     int i,j,naa;
2913     naa = 20;
2914 
2915     daa[1*20+0]= 105;        daa[2*20+0]= 227;        daa[2*20+1]= 357;        daa[3*20+0]= 175;
2916     daa[3*20+1]= 43;         daa[3*20+2]= 4435;       daa[4*20+0]= 669;        daa[4*20+1]= 823;
2917     daa[4*20+2]= 538;        daa[4*20+3]= 10;         daa[5*20+0]= 157;        daa[5*20+1]= 1745;
2918     daa[5*20+2]= 768;        daa[5*20+3]= 400;        daa[5*20+4]= 10;         daa[6*20+0]= 499;
2919     daa[6*20+1]= 152;        daa[6*20+2]= 1055;       daa[6*20+3]= 3691;       daa[6*20+4]= 10;
2920     daa[6*20+5]= 3122;       daa[7*20+0]= 665;        daa[7*20+1]= 243;        daa[7*20+2]= 653;
2921     daa[7*20+3]= 431;        daa[7*20+4]= 303;        daa[7*20+5]= 133;        daa[7*20+6]= 379;
2922     daa[8*20+0]= 66;         daa[8*20+1]= 715;        daa[8*20+2]= 1405;       daa[8*20+3]= 331;
2923     daa[8*20+4]= 441;        daa[8*20+5]= 1269;       daa[8*20+6]= 162;        daa[8*20+7]= 19;
2924     daa[9*20+0]= 145;        daa[9*20+1]= 136;        daa[9*20+2]= 168;        daa[9*20+3]= 10;
2925     daa[9*20+4]= 280;        daa[9*20+5]= 92;         daa[9*20+6]= 148;        daa[9*20+7]= 40;
2926     daa[9*20+8]= 29;         daa[10*20+0]= 197;       daa[10*20+1]= 203;       daa[10*20+2]= 113;
2927     daa[10*20+3]= 10;        daa[10*20+4]= 396;       daa[10*20+5]= 286;       daa[10*20+6]= 82;
2928     daa[10*20+7]= 20;        daa[10*20+8]= 66;        daa[10*20+9]= 1745;      daa[11*20+0]= 236;
2929     daa[11*20+1]= 4482;      daa[11*20+2]= 2430;      daa[11*20+3]= 412;       daa[11*20+4]= 48;
2930     daa[11*20+5]= 3313;      daa[11*20+6]= 2629;      daa[11*20+7]= 263;       daa[11*20+8]= 305;
2931     daa[11*20+9]= 345;       daa[11*20+10]= 218;      daa[12*20+0]= 185;       daa[12*20+1]= 125;
2932     daa[12*20+2]= 61;        daa[12*20+3]= 47;        daa[12*20+4]= 159;       daa[12*20+5]= 202;
2933     daa[12*20+6]= 113;       daa[12*20+7]= 21;        daa[12*20+8]= 10;        daa[12*20+9]= 1772;
2934     daa[12*20+10]= 1351;     daa[12*20+11]= 193;      daa[13*20+0]= 68;        daa[13*20+1]= 53;
2935     daa[13*20+2]= 97;        daa[13*20+3]= 22;        daa[13*20+4]= 726;       daa[13*20+5]= 10;
2936     daa[13*20+6]= 145;       daa[13*20+7]= 25;        daa[13*20+8]= 127;       daa[13*20+9]= 454;
2937     daa[13*20+10]= 1268;     daa[13*20+11]= 72;       daa[13*20+12]= 327;      daa[14*20+0]= 490;
2938     daa[14*20+1]= 87;        daa[14*20+2]= 173;       daa[14*20+3]= 170;       daa[14*20+4]= 285;
2939     daa[14*20+5]= 323;       daa[14*20+6]= 185;       daa[14*20+7]= 28;        daa[14*20+8]= 152;
2940     daa[14*20+9]= 117;       daa[14*20+10]= 219;      daa[14*20+11]= 302;      daa[14*20+12]= 100;
2941     daa[14*20+13]= 43;       daa[15*20+0]= 2440;      daa[15*20+1]= 385;       daa[15*20+2]= 2085;
2942     daa[15*20+3]= 590;       daa[15*20+4]= 2331;      daa[15*20+5]= 396;       daa[15*20+6]= 568;
2943     daa[15*20+7]= 691;       daa[15*20+8]= 303;       daa[15*20+9]= 216;       daa[15*20+10]= 516;
2944     daa[15*20+11]= 868;      daa[15*20+12]= 93;       daa[15*20+13]= 487;      daa[15*20+14]= 1202;
2945     daa[16*20+0]= 1340;      daa[16*20+1]= 314;       daa[16*20+2]= 1393;      daa[16*20+3]= 266;
2946     daa[16*20+4]= 576;       daa[16*20+5]= 241;       daa[16*20+6]= 369;       daa[16*20+7]= 92;
2947     daa[16*20+8]= 32;        daa[16*20+9]= 1040;      daa[16*20+10]= 156;      daa[16*20+11]= 918;
2948     daa[16*20+12]= 645;      daa[16*20+13]= 148;      daa[16*20+14]= 260;      daa[16*20+15]= 2151;
2949     daa[17*20+0]= 14;        daa[17*20+1]= 230;       daa[17*20+2]= 40;        daa[17*20+3]= 18;
2950     daa[17*20+4]= 435;       daa[17*20+5]= 53;        daa[17*20+6]= 63;        daa[17*20+7]= 82;
2951     daa[17*20+8]= 69;        daa[17*20+9]= 42;        daa[17*20+10]= 159;      daa[17*20+11]= 10;
2952     daa[17*20+12]= 86;       daa[17*20+13]= 468;      daa[17*20+14]= 49;       daa[17*20+15]= 73;
2953     daa[17*20+16]= 29;       daa[18*20+0]= 56;        daa[18*20+1]= 323;       daa[18*20+2]= 754;
2954     daa[18*20+3]= 281;       daa[18*20+4]= 1466;      daa[18*20+5]= 391;       daa[18*20+6]= 142;
2955     daa[18*20+7]= 10;        daa[18*20+8]= 1971;      daa[18*20+9]= 89;        daa[18*20+10]= 189;
2956     daa[18*20+11]= 247;      daa[18*20+12]= 215;      daa[18*20+13]= 2370;     daa[18*20+14]= 97;
2957     daa[18*20+15]= 522;      daa[18*20+16]= 71;       daa[18*20+17]= 346;      daa[19*20+0]= 968;
2958     daa[19*20+1]= 92;        daa[19*20+2]= 83;        daa[19*20+3]= 75;        daa[19*20+4]= 592;
2959     daa[19*20+5]= 54;        daa[19*20+6]= 200;       daa[19*20+7]= 91;        daa[19*20+8]= 25;
2960     daa[19*20+9]= 4797;      daa[19*20+10]= 865;      daa[19*20+11]= 249;      daa[19*20+12]= 475;
2961     daa[19*20+13]= 317;      daa[19*20+14]= 122;      daa[19*20+15]= 167;      daa[19*20+16]= 760;
2962     daa[19*20+17]= 10;       daa[19*20+18]= 119;
2963 
2964     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
2965 
2966     pi[0]= 0.076;            pi[1]= 0.062;            pi[2]= 0.041;            pi[3]= 0.037;
2967     pi[4]= 0.009;            pi[5]= 0.038;            pi[6]= 0.049;            pi[7]= 0.084;
2968     pi[8]= 0.025;            pi[9]= 0.081;            pi[10]= 0.101;           pi[11]= 0.05;
2969     pi[12]= 0.022;           pi[13]= 0.051;           pi[14]= 0.043;           pi[15]= 0.062;
2970     pi[16]= 0.054;           pi[17]= 0.018;           pi[18]= 0.031;           pi[19]= 0.066;
2971     return 1;
2972 }
2973 
2974 //////////////////////////////////////////////////////////////
2975 //////////////////////////////////////////////////////////////
2976 
2977 
Init_Qmat_VT(phydbl * daa,phydbl * pi)2978 int Init_Qmat_VT(phydbl *daa, phydbl *pi)
2979 {
2980     /*
2981        This model has been 'translated' from John Huelsenbeck and Fredrik Ronquist
2982        MrBayes program into PHYML format by Federico Abascal. Many thanks to them.
2983     */
2984 
2985     /*
2986       Muller, T., and M. Vingron. 2000. Modeling amino acid replacement.
2987       Journal of Computational Biology 7:761-776.
2988     */
2989 
2990     int i,j,naa;
2991     naa = 20;
2992 
2993     /* daa[1*20+0]= 0.233108;   daa[2*20+0]= 0.199097;   daa[2*20+1]= 0.210797;   daa[3*20+0]= 0.265145;    */
2994     /* daa[3*20+1]= 0.105191;   daa[3*20+2]= 0.883422;   daa[4*20+0]= 0.227333;   daa[4*20+1]= 0.031726;    */
2995     /* daa[4*20+2]= 0.027495;   daa[4*20+3]= 0.010313;   daa[5*20+0]= 0.310084;   daa[5*20+1]= 0.493763;    */
2996     /* daa[5*20+2]= 0.2757;     daa[5*20+3]= 0.205842;   daa[5*20+4]= 0.004315;   daa[6*20+0]= 0.567957;    */
2997     /* daa[6*20+1]= 0.25524;    daa[6*20+2]= 0.270417;   daa[6*20+3]= 1.599461;   daa[6*20+4]= 0.005321;    */
2998     /* daa[6*20+5]= 0.960976;   daa[7*20+0]= 0.876213;   daa[7*20+1]= 0.156945;   daa[7*20+2]= 0.362028;    */
2999     /* daa[7*20+3]= 0.311718;   daa[7*20+4]= 0.050876;   daa[7*20+5]= 0.12866;    daa[7*20+6]= 0.250447;    */
3000     /* daa[8*20+0]= 0.078692;   daa[8*20+1]= 0.213164;   daa[8*20+2]= 0.290006;   daa[8*20+3]= 0.134252;    */
3001     /* daa[8*20+4]= 0.016695;   daa[8*20+5]= 0.315521;   daa[8*20+6]= 0.104458;   daa[8*20+7]= 0.058131;    */
3002     /* daa[9*20+0]= 0.222972;   daa[9*20+1]= 0.08151;    daa[9*20+2]= 0.087225;   daa[9*20+3]= 0.01172;     */
3003     /* daa[9*20+4]= 0.046398;   daa[9*20+5]= 0.054602;   daa[9*20+6]= 0.046589;   daa[9*20+7]= 0.051089;    */
3004     /* daa[9*20+8]= 0.020039;   daa[10*20+0]= 0.42463;   daa[10*20+1]= 0.192364;  daa[10*20+2]= 0.069245;   */
3005     /* daa[10*20+3]= 0.060863;  daa[10*20+4]= 0.091709;  daa[10*20+5]= 0.24353;   daa[10*20+6]= 0.151924;   */
3006     /* daa[10*20+7]= 0.087056;  daa[10*20+8]= 0.103552;  daa[10*20+9]= 2.08989;   daa[11*20+0]= 0.393245;   */
3007     /* daa[11*20+1]= 1.755838;  daa[11*20+2]= 0.50306;   daa[11*20+3]= 0.261101;  daa[11*20+4]= 0.004067;   */
3008     /* daa[11*20+5]= 0.738208;  daa[11*20+6]= 0.88863;   daa[11*20+7]= 0.193243;  daa[11*20+8]= 0.153323;   */
3009     /* daa[11*20+9]= 0.093181;  daa[11*20+10]= 0.201204; daa[12*20+0]= 0.21155;   daa[12*20+1]= 0.08793;    */
3010     /* daa[12*20+2]= 0.05742;   daa[12*20+3]= 0.012182;  daa[12*20+4]= 0.02369;   daa[12*20+5]= 0.120801;   */
3011     /* daa[12*20+6]= 0.058643;  daa[12*20+7]= 0.04656;   daa[12*20+8]= 0.021157;  daa[12*20+9]= 0.493845;   */
3012     /* daa[12*20+10]= 1.105667; daa[12*20+11]= 0.096474; daa[13*20+0]= 0.116646;  daa[13*20+1]= 0.042569;   */
3013     /* daa[13*20+2]= 0.039769;  daa[13*20+3]= 0.016577;  daa[13*20+4]= 0.051127;  daa[13*20+5]= 0.026235;   */
3014     /* daa[13*20+6]= 0.028168;  daa[13*20+7]= 0.050143;  daa[13*20+8]= 0.079807;  daa[13*20+9]= 0.32102;    */
3015     /* daa[13*20+10]= 0.946499; daa[13*20+11]= 0.038261; daa[13*20+12]= 0.173052; daa[14*20+0]= 0.399143;   */
3016     /* daa[14*20+1]= 0.12848;   daa[14*20+2]= 0.083956;  daa[14*20+3]= 0.160063;  daa[14*20+4]= 0.011137;   */
3017     /* daa[14*20+5]= 0.15657;   daa[14*20+6]= 0.205134;  daa[14*20+7]= 0.124492;  daa[14*20+8]= 0.078892;   */
3018     /* daa[14*20+9]= 0.054797;  daa[14*20+10]= 0.169784; daa[14*20+11]= 0.212302; daa[14*20+12]= 0.010363;  */
3019     /* daa[14*20+13]= 0.042564; daa[15*20+0]= 1.817198;  daa[15*20+1]= 0.292327;  daa[15*20+2]= 0.847049;   */
3020     /* daa[15*20+3]= 0.461519;  daa[15*20+4]= 0.17527;   daa[15*20+5]= 0.358017;  daa[15*20+6]= 0.406035;   */
3021     /* daa[15*20+7]= 0.612843;  daa[15*20+8]= 0.167406;  daa[15*20+9]= 0.081567;  daa[15*20+10]= 0.214977;  */
3022     /* daa[15*20+11]= 0.400072; daa[15*20+12]= 0.090515; daa[15*20+13]= 0.138119; daa[15*20+14]= 0.430431;  */
3023     /* daa[16*20+0]= 0.877877;  daa[16*20+1]= 0.204109;  daa[16*20+2]= 0.471268;  daa[16*20+3]= 0.178197;   */
3024     /* daa[16*20+4]= 0.079511;  daa[16*20+5]= 0.248992;  daa[16*20+6]= 0.321028;  daa[16*20+7]= 0.136266;   */
3025     /* daa[16*20+8]= 0.101117;  daa[16*20+9]= 0.376588;  daa[16*20+10]= 0.243227; daa[16*20+11]= 0.446646;  */
3026     /* daa[16*20+12]= 0.184609; daa[16*20+13]= 0.08587;  daa[16*20+14]= 0.207143; daa[16*20+15]= 1.767766;  */
3027     /* daa[17*20+0]= 0.030309;  daa[17*20+1]= 0.046417;  daa[17*20+2]= 0.010459;  daa[17*20+3]= 0.011393;   */
3028     /* daa[17*20+4]= 0.007732;  daa[17*20+5]= 0.021248;  daa[17*20+6]= 0.018844;  daa[17*20+7]= 0.02399;    */
3029     /* daa[17*20+8]= 0.020009;  daa[17*20+9]= 0.034954;  daa[17*20+10]= 0.083439; daa[17*20+11]= 0.023321;  */
3030     /* daa[17*20+12]= 0.022019; daa[17*20+13]= 0.12805;  daa[17*20+14]= 0.014584; daa[17*20+15]= 0.035933;  */
3031     /* daa[17*20+16]= 0.020437; daa[18*20+0]= 0.087061;  daa[18*20+1]= 0.09701;   daa[18*20+2]= 0.093268;   */
3032     /* daa[18*20+3]= 0.051664;  daa[18*20+4]= 0.042823;  daa[18*20+5]= 0.062544;  daa[18*20+6]= 0.0552;     */
3033     /* daa[18*20+7]= 0.037568;  daa[18*20+8]= 0.286027;  daa[18*20+9]= 0.086237;  daa[18*20+10]= 0.189842;  */
3034     /* daa[18*20+11]= 0.068689; daa[18*20+12]= 0.073223; daa[18*20+13]= 0.898663; daa[18*20+14]= 0.032043;  */
3035     /* daa[18*20+15]= 0.121979; daa[18*20+16]= 0.094617; daa[18*20+17]= 0.124746; daa[19*20+0]= 1.230985;   */
3036     /* daa[19*20+1]= 0.113146;  daa[19*20+2]= 0.049824;  daa[19*20+3]= 0.048769;  daa[19*20+4]= 0.163831;   */
3037     /* daa[19*20+5]= 0.112027;  daa[19*20+6]= 0.205868;  daa[19*20+7]= 0.082579;  daa[19*20+8]= 0.068575;   */
3038     /* daa[19*20+9]= 3.65443;   daa[19*20+10]= 1.337571; daa[19*20+11]= 0.144587; daa[19*20+12]= 0.307309;  */
3039     /* daa[19*20+13]= 0.247329; daa[19*20+14]= 0.129315; daa[19*20+15]= 0.1277;   daa[19*20+16]= 0.740372;  */
3040     /* daa[19*20+17]= 0.022134; daa[19*20+18]= 0.125733;  */
3041 
3042     /* for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j]; */
3043 
3044     /* pi[0]= 0.078837;         pi[1]= 0.051238;         pi[2]= 0.042313;         pi[3]= 0.053066;          */
3045     /* pi[4]= 0.015175;         pi[5]= 0.036713;         pi[6]= 0.061924;         pi[7]= 0.070852;          */
3046     /* pi[8]= 0.023082;         pi[9]= 0.062056;         pi[10]= 0.096371;        pi[11]= 0.057324;         */
3047     /* pi[12]= 0.023771;        pi[13]= 0.043296;        pi[14]= 0.043911;        pi[15]= 0.063403;         */
3048     /* pi[16]= 0.055897;        pi[17]= 0.013272;        pi[18]= 0.034399;        pi[19]= 0.073101;         */
3049     /* return 1; */
3050 
3051     /*
3052        This model has been 'translated' from TREE-PUZZLE. Many thanks to  Heiko A. Schmidt,
3053        Korbinian Strimmer, and Arndt von Haeseler.
3054     */
3055 
3056     /*
3057       Muller, T., and M. Vingron. 2000. Modeling amino acid replacement.
3058       Journal of Computational Biology 7:761-776.
3059     */
3060 
3061     daa[ 0*20+ 1] = 1.2412691067876198;  daa[ 0*20+ 2] = 1.2184237953498958;
3062     daa[ 0*20+ 3] = 1.3759368509441177;  daa[ 0*20+ 4] = 2.4731223087544874;
3063     daa[ 0*20+ 5] = 2.2155167805137470;  daa[ 0*20+ 6] = 2.3379911207495061;
3064     daa[ 0*20+ 7] = 3.3386555146457697;  daa[ 0*20+ 8] = 0.9615841926910841;
3065     daa[ 0*20+ 9] = 0.8908203061925510;  daa[ 0*20+10] = 1.0778497408764076;
3066     daa[ 0*20+11] = 1.4932055816372476;  daa[ 0*20+12] = 1.9006455961717605;
3067     daa[ 0*20+13] = 0.6883439026872615;  daa[ 0*20+14] = 2.7355620089953550;
3068     daa[ 0*20+15] = 6.4208961859142883;  daa[ 0*20+16] = 5.2892514169776437;
3069     daa[ 0*20+17] = 0.5488578478106930;  daa[ 0*20+18] = 0.5411769916657778;
3070     daa[ 0*20+19] = 4.6501894691803214;
3071 
3072     daa[ 1*20+ 2] = 1.5720770753326880;  daa[ 1*20+ 3] = 0.7550654439001206;
3073     daa[ 1*20+ 4] = 1.4414262567428417;  daa[ 1*20+ 5] = 5.5120819705248678;
3074     daa[ 1*20+ 6] = 1.3542404860613146;  daa[ 1*20+ 7] = 1.3121700301622004;
3075     daa[ 1*20+ 8] = 4.9238668283945266;  daa[ 1*20+ 9] = 0.4323005487925516;
3076     daa[ 1*20+10] = 0.8386701149158265;  daa[ 1*20+11] = 10.0173308173660018;
3077     daa[ 1*20+12] = 1.2488638689609959;  daa[ 1*20+13] = 0.4224945197276290;
3078     daa[ 1*20+14] = 1.3091837782420783;  daa[ 1*20+15] = 1.9202994262316166;
3079     daa[ 1*20+16] = 1.3363401740560601;  daa[ 1*20+17] = 1.5170142153962840;
3080     daa[ 1*20+18] = 0.8912614404565405;  daa[ 1*20+19] = 0.7807017855806767;
3081 
3082     daa[ 2*20+ 3] = 7.8584219153689405;  daa[ 2*20+ 4] = 0.9784679122774127;
3083     daa[ 2*20+ 5] = 3.0143201670924822;  daa[ 2*20+ 6] = 2.0093434778398112;
3084     daa[ 2*20+ 7] = 2.4117632898861809;  daa[ 2*20+ 8] = 6.1974384977884114;
3085     daa[ 2*20+ 9] = 0.9179291175331520;  daa[ 2*20+10] = 0.4098311270816011;
3086     daa[ 2*20+11] = 4.4034547578962568;  daa[ 2*20+12] = 0.9378803706165143;
3087     daa[ 2*20+13] = 0.5044944273324311;  daa[ 2*20+14] = 0.7103720531974738;
3088     daa[ 2*20+15] = 6.1234512396801764;  daa[ 2*20+16] = 3.8852506105922231;
3089     daa[ 2*20+17] = 0.1808525752605976;  daa[ 2*20+18] = 1.0894926581511342;
3090     daa[ 2*20+19] = 0.4586061981719967;
3091 
3092     daa[ 3*20+ 4] = 0.2272488448121475;  daa[ 3*20+ 5] = 1.6562495638176040;
3093     daa[ 3*20+ 6] = 9.6883451875685065;  daa[ 3*20+ 7] = 1.9142079025990228;
3094     daa[ 3*20+ 8] = 2.1459640610133781;  daa[ 3*20+ 9] = 0.2161660372725585;
3095     daa[ 3*20+10] = 0.3574207468998517;  daa[ 3*20+11] = 1.4521790561663968;
3096     daa[ 3*20+12] = 0.4075239926000898;  daa[ 3*20+13] = 0.1675129724559251;
3097     daa[ 3*20+14] = 1.0714605979577547;  daa[ 3*20+15] = 2.2161944596741829;
3098     daa[ 3*20+16] = 1.5066839872944762;  daa[ 3*20+17] = 0.2496584188151770;
3099     daa[ 3*20+18] = 0.7447620891784513;  daa[ 3*20+19] = 0.4594535241660911;
3100 
3101     daa[ 4*20+ 5] = 0.4587469126746136;  daa[ 4*20+ 6] = 0.4519167943192672;
3102     daa[ 4*20+ 7] = 1.1034605684472507;  daa[ 4*20+ 8] = 1.5196756759380692;
3103     daa[ 4*20+ 9] = 0.9126668032539315;  daa[ 4*20+10] = 1.4081315998413697;
3104     daa[ 4*20+11] = 0.3371091785647479;  daa[ 4*20+12] = 1.2213054800811556;
3105     daa[ 4*20+13] = 1.6953951980808002;  daa[ 4*20+14] = 0.4326227078645523;
3106     daa[ 4*20+15] = 3.6366815408744255;  daa[ 4*20+16] = 1.7557065205837685;
3107     daa[ 4*20+17] = 1.6275179891253113;  daa[ 4*20+18] = 2.1579775140421025;
3108     daa[ 4*20+19] = 2.2627456996290891;
3109 
3110     daa[ 5*20+ 6] = 6.8124601839937675;  daa[ 5*20+ 7] = 0.8776110594765502;
3111     daa[ 5*20+ 8] = 7.9943228564946525;  daa[ 5*20+ 9] = 0.4882733432879921;
3112     daa[ 5*20+10] = 1.3318097154194044;  daa[ 5*20+11] = 6.0519085243118811;
3113     daa[ 5*20+12] = 1.9106190827629084;  daa[ 5*20+13] = 0.3573432522499545;
3114     daa[ 5*20+14] = 2.3019177728300728;  daa[ 5*20+15] = 2.3193703643237220;
3115     daa[ 5*20+16] = 2.1576510103471440;  daa[ 5*20+17] = 0.8959082681546182;
3116     daa[ 5*20+18] = 0.9183596801412757;  daa[ 5*20+19] = 0.6366932501396869;
3117 
3118     daa[ 6*20+ 7] = 1.3860121390169038;  daa[ 6*20+ 8] = 1.6360079688522375;
3119     daa[ 6*20+ 9] = 0.4035497929633328;  daa[ 6*20+10] = 0.5610717242294755;
3120     daa[ 6*20+11] = 4.3290086529582830;  daa[ 6*20+12] = 0.7471936218068498;
3121     daa[ 6*20+13] = 0.2317194387691585;  daa[ 6*20+14] = 1.5132807416252063;
3122     daa[ 6*20+15] = 1.8273535587773553;  daa[ 6*20+16] = 1.5839981708584689;
3123     daa[ 6*20+17] = 0.4198391148111098;  daa[ 6*20+18] = 0.5818111331782764;
3124     daa[ 6*20+19] = 0.8940572875547330;
3125 
3126     daa[ 7*20+ 8] = 0.8561248973045037;  daa[ 7*20+ 9] = 0.2888075033037488;
3127     daa[ 7*20+10] = 0.3578662395745526;  daa[ 7*20+11] = 0.8945563662345198;
3128     daa[ 7*20+12] = 0.5954812791740037;  daa[ 7*20+13] = 0.3693722640980460;
3129     daa[ 7*20+14] = 0.7744933618134962;  daa[ 7*20+15] = 3.0637776193717610;
3130     daa[ 7*20+16] = 0.7147489676267383;  daa[ 7*20+17] = 0.9349753595598769;
3131     daa[ 7*20+18] = 0.3374467649724478;  daa[ 7*20+19] = 0.6193321034173915;
3132 
3133     daa[ 8*20+ 9] = 0.5787937115407940;  daa[ 8*20+10] = 1.0765007949562073;
3134     daa[ 8*20+11] = 1.8085136096039203;  daa[ 8*20+12] = 1.3808291710019667;
3135     daa[ 8*20+13] = 1.3629765501081097;  daa[ 8*20+14] = 1.8370555852070649;
3136     daa[ 8*20+15] = 1.9699895187387506;  daa[ 8*20+16] = 1.6136654573285647;
3137     daa[ 8*20+17] = 0.6301954684360302;  daa[ 8*20+18] = 7.7587442309146040;
3138     daa[ 8*20+19] = 0.5333220944030346;
3139 
3140     daa[ 9*20+10] = 6.0019110258426362;  daa[ 9*20+11] = 0.6244297525127139;
3141     daa[ 9*20+12] = 6.7597899772045418;  daa[ 9*20+13] = 2.2864286949316077;
3142     daa[ 9*20+14] = 0.4811402387911145;  daa[ 9*20+15] = 0.6047491507504744;
3143     daa[ 9*20+16] = 2.6344778384442731;  daa[ 9*20+17] = 0.5604648274060783;
3144     daa[ 9*20+18] = 0.8626796044156272;  daa[ 9*20+19] = 14.8729334615190609;
3145 
3146     daa[10*20+11] = 0.5642322882556321;  daa[10*20+12] = 8.0327792947421148;
3147     daa[10*20+13] = 4.3611548063555778;  daa[10*20+14] = 1.0084320519837335;
3148     daa[10*20+15] = 0.8953754669269811;  daa[10*20+16] = 1.0192004372506540;
3149     daa[10*20+17] = 1.5183114434679339;  daa[10*20+18] = 1.2452243224541324;
3150     daa[10*20+19] = 3.5458093276667237;
3151 
3152     daa[11*20+12] = 1.7129670976916258;  daa[11*20+13] = 0.3910559903834828;
3153     daa[11*20+14] = 1.3918935593582853;  daa[11*20+15] = 1.9776630140912268;
3154     daa[11*20+16] = 2.5513781312660280;  daa[11*20+17] = 0.5851920879490173;
3155     daa[11*20+18] = 0.7835447533710449;  daa[11*20+19] = 0.7801080335991272;
3156 
3157     daa[12*20+13] = 2.3201373546296349;  daa[12*20+14] = 0.4953193808676289;
3158     daa[12*20+15] = 1.0657482318076852;  daa[12*20+16] = 3.3628488360462363;
3159     daa[12*20+17] = 1.4680478689711018;  daa[12*20+18] = 1.0899165770956820;
3160     daa[12*20+19] = 4.0584577156753401;
3161 
3162     daa[13*20+14] = 0.3746821107962129;  daa[13*20+15] = 1.1079144700606407;
3163     daa[13*20+16] = 0.6882725908872254;  daa[13*20+17] = 3.3448437239772266;
3164     daa[13*20+18] = 10.3848523331334590;  daa[13*20+19] = 1.7039730522675411;
3165 
3166     daa[14*20+15] = 3.5465914843628927;  daa[14*20+16] = 1.9485376673137556;
3167     daa[14*20+17] = 0.4326058001438786;  daa[14*20+18] = 0.4819109019647465;
3168     daa[14*20+19] = 0.5985498912985666;
3169 
3170     daa[15*20+16] = 8.8479984061248178;  daa[15*20+17] = 0.6791126595939816;
3171     daa[15*20+18] = 0.9547229305958682;  daa[15*20+19] = 0.9305232113028208;
3172 
3173     daa[16*20+17] = 0.4514203099376473;  daa[16*20+18] = 0.8564314184691215;
3174     daa[16*20+19] = 3.4242218450865543;
3175 
3176     daa[17*20+18] = 4.5377235790405388;  daa[17*20+19] = 0.5658969249032649;
3177 
3178     daa[18*20+19] = 1.0000000000000000;
3179 
3180     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[i*naa+j] = daa[j*naa+i];
3181 
3182     pi[ 0]=0.0770764620135024 ; pi[ 1]=0.0500819370772208 ;
3183     pi[ 2]=0.0462377395993731 ; pi[ 3]=0.0537929860758246 ;
3184     pi[ 4]=0.0144533387583345 ; pi[ 5]=0.0408923608974345 ;
3185     pi[ 6]=0.0633579339160905 ; pi[ 7]=0.0655672355884439 ;
3186     pi[ 8]=0.0218802687005936 ; pi[ 9]=0.0591969699027449 ;
3187     pi[10]=0.0976461276528445 ; pi[11]=0.0592079410822730 ;
3188     pi[12]=0.0220695876653368 ; pi[13]=0.0413508521834260 ;
3189     pi[14]=0.0476871596856874 ; pi[15]=0.0707295165111524 ;
3190     pi[16]=0.0567759161524817 ; pi[17]=0.0127019797647213 ;
3191     pi[18]=0.0323746050281867 ; pi[19]=0.0669190817443274 ;
3192 
3193     return 1;
3194 }
3195 
3196 //////////////////////////////////////////////////////////////
3197 //////////////////////////////////////////////////////////////
3198 
3199 
Init_Qmat_Blosum62(phydbl * daa,phydbl * pi)3200 int Init_Qmat_Blosum62(phydbl *daa, phydbl *pi)
3201 {
3202 
3203     /*
3204        This model has been 'translated' from John Huelsenbeck and Fredrik Ronquist
3205        MrBayes program into PHYML format by Federico Abascal. Many thanks to them.
3206     */
3207 
3208     /*
3209       Henikoff, S., and J. G. Henikoff. 1992. Amino acid substitution
3210       matrices from protein blocks. Proc. Natl. Acad. Sci., U.S.A.
3211       89:10915-10919.
3212     */
3213 
3214     int i,j,naa;
3215     naa = 20;
3216 
3217     daa[1*20+0]= 0.735790389698;  daa[2*20+0]= 0.485391055466;  daa[2*20+1]= 1.297446705134;  daa[3*20+0]= 0.543161820899;
3218     daa[3*20+1]= 0.500964408555;  daa[3*20+2]= 3.180100048216;  daa[4*20+0]= 1.45999531047;   daa[4*20+1]= 0.227826574209;
3219     daa[4*20+2]= 0.397358949897;  daa[4*20+3]= 0.240836614802;  daa[5*20+0]= 1.199705704602;  daa[5*20+1]= 3.020833610064;
3220     daa[5*20+2]= 1.839216146992;  daa[5*20+3]= 1.190945703396;  daa[5*20+4]= 0.32980150463;   daa[6*20+0]= 1.1709490428;
3221     daa[6*20+1]= 1.36057419042;   daa[6*20+2]= 1.24048850864;   daa[6*20+3]= 3.761625208368;  daa[6*20+4]= 0.140748891814;
3222     daa[6*20+5]= 5.528919177928;  daa[7*20+0]= 1.95588357496;   daa[7*20+1]= 0.418763308518;  daa[7*20+2]= 1.355872344485;
3223     daa[7*20+3]= 0.798473248968;  daa[7*20+4]= 0.418203192284;  daa[7*20+5]= 0.609846305383;  daa[7*20+6]= 0.423579992176;
3224     daa[8*20+0]= 0.716241444998;  daa[8*20+1]= 1.456141166336;  daa[8*20+2]= 2.414501434208;  daa[8*20+3]= 0.778142664022;
3225     daa[8*20+4]= 0.354058109831;  daa[8*20+5]= 2.43534113114;   daa[8*20+6]= 1.626891056982;  daa[8*20+7]= 0.539859124954;
3226     daa[9*20+0]= 0.605899003687;  daa[9*20+1]= 0.232036445142;  daa[9*20+2]= 0.283017326278;  daa[9*20+3]= 0.418555732462;
3227     daa[9*20+4]= 0.774894022794;  daa[9*20+5]= 0.236202451204;  daa[9*20+6]= 0.186848046932;  daa[9*20+7]= 0.189296292376;
3228     daa[9*20+8]= 0.252718447885;  daa[10*20+0]= 0.800016530518; daa[10*20+1]= 0.622711669692; daa[10*20+2]= 0.211888159615;
3229     daa[10*20+3]= 0.218131577594; daa[10*20+4]= 0.831842640142; daa[10*20+5]= 0.580737093181; daa[10*20+6]= 0.372625175087;
3230     daa[10*20+7]= 0.217721159236; daa[10*20+8]= 0.348072209797; daa[10*20+9]= 3.890963773304; daa[11*20+0]= 1.295201266783;
3231     daa[11*20+1]= 5.411115141489; daa[11*20+2]= 1.593137043457; daa[11*20+3]= 1.032447924952; daa[11*20+4]= 0.285078800906;
3232     daa[11*20+5]= 3.945277674515; daa[11*20+6]= 2.802427151679; daa[11*20+7]= 0.752042440303; daa[11*20+8]= 1.022507035889;
3233     daa[11*20+9]= 0.406193586642; daa[11*20+10]= 0.445570274261;daa[12*20+0]= 1.253758266664; daa[12*20+1]= 0.983692987457;
3234     daa[12*20+2]= 0.648441278787; daa[12*20+3]= 0.222621897958; daa[12*20+4]= 0.76768882348;  daa[12*20+5]= 2.494896077113;
3235     daa[12*20+6]= 0.55541539747;  daa[12*20+7]= 0.459436173579; daa[12*20+8]= 0.984311525359; daa[12*20+9]= 3.364797763104;
3236     daa[12*20+10]= 6.030559379572;daa[12*20+11]= 1.073061184332;daa[13*20+0]= 0.492964679748; daa[13*20+1]= 0.371644693209;
3237     daa[13*20+2]= 0.354861249223; daa[13*20+3]= 0.281730694207; daa[13*20+4]= 0.441337471187; daa[13*20+5]= 0.14435695975;
3238     daa[13*20+6]= 0.291409084165; daa[13*20+7]= 0.368166464453; daa[13*20+8]= 0.714533703928; daa[13*20+9]= 1.517359325954;
3239     daa[13*20+10]= 2.064839703237;daa[13*20+11]= 0.266924750511;daa[13*20+12]= 1.77385516883; daa[14*20+0]= 1.173275900924;
3240     daa[14*20+1]= 0.448133661718; daa[14*20+2]= 0.494887043702; daa[14*20+3]= 0.730628272998; daa[14*20+4]= 0.356008498769;
3241     daa[14*20+5]= 0.858570575674; daa[14*20+6]= 0.926563934846; daa[14*20+7]= 0.504086599527; daa[14*20+8]= 0.527007339151;
3242     daa[14*20+9]= 0.388355409206; daa[14*20+10]= 0.374555687471;daa[14*20+11]= 1.047383450722;daa[14*20+12]= 0.454123625103;
3243     daa[14*20+13]= 0.233597909629;daa[15*20+0]= 4.325092687057; daa[15*20+1]= 1.12278310421;  daa[15*20+2]= 2.904101656456;
3244     daa[15*20+3]= 1.582754142065; daa[15*20+4]= 1.197188415094; daa[15*20+5]= 1.934870924596; daa[15*20+6]= 1.769893238937;
3245     daa[15*20+7]= 1.509326253224; daa[15*20+8]= 1.11702976291;  daa[15*20+9]= 0.35754441246;  daa[15*20+10]= 0.352969184527;
3246     daa[15*20+11]= 1.752165917819;daa[15*20+12]= 0.918723415746;daa[15*20+13]= 0.540027644824;daa[15*20+14]= 1.169129577716;
3247     daa[16*20+0]= 1.729178019485; daa[16*20+1]= 0.914665954563; daa[16*20+2]= 1.898173634533; daa[16*20+3]= 0.934187509431;
3248     daa[16*20+4]= 1.119831358516; daa[16*20+5]= 1.277480294596; daa[16*20+6]= 1.071097236007; daa[16*20+7]= 0.641436011405;
3249     daa[16*20+8]= 0.585407090225; daa[16*20+9]= 1.17909119726;  daa[16*20+10]= 0.915259857694;daa[16*20+11]= 1.303875200799;
3250     daa[16*20+12]= 1.488548053722;daa[16*20+13]= 0.488206118793;daa[16*20+14]= 1.005451683149;daa[16*20+15]= 5.15155629227;
3251     daa[17*20+0]= 0.465839367725; daa[17*20+1]= 0.426382310122; daa[17*20+2]= 0.191482046247; daa[17*20+3]= 0.145345046279;
3252     daa[17*20+4]= 0.527664418872; daa[17*20+5]= 0.758653808642; daa[17*20+6]= 0.407635648938; daa[17*20+7]= 0.508358924638;
3253     daa[17*20+8]= 0.30124860078;  daa[17*20+9]= 0.34198578754;  daa[17*20+10]= 0.6914746346;  daa[17*20+11]= 0.332243040634;
3254     daa[17*20+12]= 0.888101098152;daa[17*20+13]= 2.074324893497;daa[17*20+14]= 0.252214830027;daa[17*20+15]= 0.387925622098;
3255     daa[17*20+16]= 0.513128126891;daa[18*20+0]= 0.718206697586; daa[18*20+1]= 0.720517441216; daa[18*20+2]= 0.538222519037;
3256     daa[18*20+3]= 0.261422208965; daa[18*20+4]= 0.470237733696; daa[18*20+5]= 0.95898974285;  daa[18*20+6]= 0.596719300346;
3257     daa[18*20+7]= 0.308055737035; daa[18*20+8]= 4.218953969389; daa[18*20+9]= 0.674617093228; daa[18*20+10]= 0.811245856323;
3258     daa[18*20+11]= 0.7179934869;  daa[18*20+12]= 0.951682162246;daa[18*20+13]= 6.747260430801;daa[18*20+14]= 0.369405319355;
3259     daa[18*20+15]= 0.796751520761;daa[18*20+16]= 0.801010243199;daa[18*20+17]= 4.054419006558;daa[19*20+0]= 2.187774522005;
3260     daa[19*20+1]= 0.438388343772; daa[19*20+2]= 0.312858797993; daa[19*20+3]= 0.258129289418; daa[19*20+4]= 1.116352478606;
3261     daa[19*20+5]= 0.530785790125; daa[19*20+6]= 0.524253846338; daa[19*20+7]= 0.25334079019;  daa[19*20+8]= 0.20155597175;
3262     daa[19*20+9]= 8.311839405458; daa[19*20+10]= 2.231405688913;daa[19*20+11]= 0.498138475304;daa[19*20+12]= 2.575850755315;
3263     daa[19*20+13]= 0.838119610178;daa[19*20+14]= 0.496908410676;daa[19*20+15]= 0.561925457442;daa[19*20+16]= 2.253074051176;
3264     daa[19*20+17]= 0.266508731426;daa[19*20+18]= 1;
3265 
3266     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
3267 
3268     pi[0]= 0.074;                 pi[1]= 0.052;                 pi[2]= 0.045;                 pi[3]= 0.054;
3269     pi[4]= 0.025;                 pi[5]= 0.034;                 pi[6]= 0.054;                 pi[7]= 0.074;
3270     pi[8]= 0.026;                 pi[9]= 0.068;                 pi[10]= 0.099;                pi[11]= 0.058;
3271     pi[12]= 0.025;                pi[13]= 0.047;                pi[14]= 0.039;                pi[15]= 0.057;
3272     pi[16]= 0.051;                pi[17]= 0.013;                pi[18]= 0.032;                pi[19]= 0.073;
3273 
3274     return 1;
3275   }
3276 
3277 //////////////////////////////////////////////////////////////
3278 //////////////////////////////////////////////////////////////
3279 
3280 
Init_Qmat_MtMam(phydbl * daa,phydbl * pi)3281 int Init_Qmat_MtMam(phydbl *daa, phydbl *pi)
3282 {
3283     /*
3284        This model has been 'translated' from Ziheng Yang's PAML program
3285        into PHYML format by Federico Abascal. Many thanks to them.
3286     */
3287 
3288     /*
3289       Cao, Y. et al. 1998 Conflict amongst individual mitochondrial
3290       proteins in resolving the phylogeny of eutherian orders. Journal
3291       of Molecular Evolution 15:1600-1611.
3292     */
3293 
3294     int i,j,naa;
3295     naa = 20;
3296 
3297     daa[1*20+0]= 32;              daa[2*20+0]= 2;    daa[2*20+1]= 4;               daa[3*20+0]= 11;
3298     daa[3*20+1]= 0;               daa[3*20+2]= 864;  daa[4*20+0]= 0;               daa[4*20+1]= 186;
3299     daa[4*20+2]= 0;               daa[4*20+3]= 0;    daa[5*20+0]= 0;               daa[5*20+1]= 246;
3300     daa[5*20+2]= 8;               daa[5*20+3]= 49;   daa[5*20+4]= 0;               daa[6*20+0]= 0;
3301     daa[6*20+1]= 0;               daa[6*20+2]= 0;    daa[6*20+3]= 569;             daa[6*20+4]= 0;
3302     daa[6*20+5]= 274;             daa[7*20+0]= 78;   daa[7*20+1]= 18;              daa[7*20+2]= 47;
3303     daa[7*20+3]= 79;              daa[7*20+4]= 0;    daa[7*20+5]= 0;               daa[7*20+6]= 22;
3304     daa[8*20+0]= 8;               daa[8*20+1]= 232;  daa[8*20+2]= 458;             daa[8*20+3]= 11;
3305     daa[8*20+4]= 305;             daa[8*20+5]= 550;  daa[8*20+6]= 22;              daa[8*20+7]= 0;
3306     daa[9*20+0]= 75;              daa[9*20+1]= 0;    daa[9*20+2]= 19;              daa[9*20+3]= 0;
3307     daa[9*20+4]= 41;              daa[9*20+5]= 0;    daa[9*20+6]= 0;               daa[9*20+7]= 0;
3308     daa[9*20+8]= 0;               daa[10*20+0]= 21;  daa[10*20+1]= 6;              daa[10*20+2]= 0;
3309     daa[10*20+3]= 0;              daa[10*20+4]= 27;  daa[10*20+5]= 20;             daa[10*20+6]= 0;
3310     daa[10*20+7]= 0;              daa[10*20+8]= 26;  daa[10*20+9]= 232;            daa[11*20+0]= 0;
3311     daa[11*20+1]= 50;             daa[11*20+2]= 408; daa[11*20+3]= 0;              daa[11*20+4]= 0;
3312     daa[11*20+5]= 242;            daa[11*20+6]= 215; daa[11*20+7]= 0;              daa[11*20+8]= 0;
3313     daa[11*20+9]= 6;              daa[11*20+10]= 4;  daa[12*20+0]= 76;             daa[12*20+1]= 0;
3314     daa[12*20+2]= 21;             daa[12*20+3]= 0;   daa[12*20+4]= 0;              daa[12*20+5]= 22;
3315     daa[12*20+6]= 0;              daa[12*20+7]= 0;   daa[12*20+8]= 0;              daa[12*20+9]= 378;
3316     daa[12*20+10]= 609;           daa[12*20+11]= 59; daa[13*20+0]= 0;              daa[13*20+1]= 0;
3317     daa[13*20+2]= 6;              daa[13*20+3]= 5;   daa[13*20+4]= 7;              daa[13*20+5]= 0;
3318     daa[13*20+6]= 0;              daa[13*20+7]= 0;   daa[13*20+8]= 0;              daa[13*20+9]= 57;
3319     daa[13*20+10]= 246;           daa[13*20+11]= 0;  daa[13*20+12]= 11;            daa[14*20+0]= 53;
3320     daa[14*20+1]= 9;              daa[14*20+2]= 33;  daa[14*20+3]= 2;              daa[14*20+4]= 0;
3321     daa[14*20+5]= 51;             daa[14*20+6]= 0;   daa[14*20+7]= 0;              daa[14*20+8]= 53;
3322     daa[14*20+9]= 5;              daa[14*20+10]= 43; daa[14*20+11]= 18;            daa[14*20+12]= 0;
3323     daa[14*20+13]= 17;            daa[15*20+0]= 342; daa[15*20+1]= 3;              daa[15*20+2]= 446;
3324     daa[15*20+3]= 16;             daa[15*20+4]= 347; daa[15*20+5]= 30;             daa[15*20+6]= 21;
3325     daa[15*20+7]= 112;            daa[15*20+8]= 20;  daa[15*20+9]= 0;              daa[15*20+10]= 74;
3326     daa[15*20+11]= 65;            daa[15*20+12]= 47; daa[15*20+13]= 90;            daa[15*20+14]= 202;
3327     daa[16*20+0]= 681;            daa[16*20+1]= 0;   daa[16*20+2]= 110;            daa[16*20+3]= 0;
3328     daa[16*20+4]= 114;            daa[16*20+5]= 0;   daa[16*20+6]= 4;              daa[16*20+7]= 0;
3329     daa[16*20+8]= 1;              daa[16*20+9]= 360; daa[16*20+10]= 34;            daa[16*20+11]= 50;
3330     daa[16*20+12]= 691;           daa[16*20+13]= 8;  daa[16*20+14]= 78;            daa[16*20+15]= 614;
3331     daa[17*20+0]= 5;              daa[17*20+1]= 16;  daa[17*20+2]= 6;              daa[17*20+3]= 0;
3332     daa[17*20+4]= 65;             daa[17*20+5]= 0;   daa[17*20+6]= 0;              daa[17*20+7]= 0;
3333     daa[17*20+8]= 0;              daa[17*20+9]= 0;   daa[17*20+10]= 12;            daa[17*20+11]= 0;
3334     daa[17*20+12]= 13;            daa[17*20+13]= 0;  daa[17*20+14]= 7;             daa[17*20+15]= 17;
3335     daa[17*20+16]= 0;             daa[18*20+0]= 0;   daa[18*20+1]= 0;              daa[18*20+2]= 156;
3336     daa[18*20+3]= 0;              daa[18*20+4]= 530; daa[18*20+5]= 54;             daa[18*20+6]= 0;
3337     daa[18*20+7]= 1;              daa[18*20+8]= 1525;daa[18*20+9]= 16;             daa[18*20+10]= 25;
3338     daa[18*20+11]= 67;            daa[18*20+12]= 0;  daa[18*20+13]= 682;           daa[18*20+14]= 8;
3339     daa[18*20+15]= 107;           daa[18*20+16]= 0;  daa[18*20+17]= 14;            daa[19*20+0]= 398;
3340     daa[19*20+1]= 0;              daa[19*20+2]= 0;   daa[19*20+3]= 10;             daa[19*20+4]= 0;
3341     daa[19*20+5]= 33;             daa[19*20+6]= 20;  daa[19*20+7]= 5;              daa[19*20+8]= 0;
3342     daa[19*20+9]= 2220;           daa[19*20+10]= 100;daa[19*20+11]= 0;             daa[19*20+12]= 832;
3343     daa[19*20+13]= 6;             daa[19*20+14]= 0;  daa[19*20+15]= 0;             daa[19*20+16]= 237;
3344     daa[19*20+17]= 0;             daa[19*20+18]= 0;
3345 
3346     for (i=0; i<naa; i++) for (j=0; j<i; j++) daa[j*naa+i] = daa[i*naa+j];
3347 
3348     pi[0]= 0.0692;  pi[1]=  0.0184;  pi[2]= 0.04;    pi[3]= 0.0186;
3349     pi[4]= 0.0065;  pi[5]=  0.0238;  pi[6]= 0.0236;  pi[7]= 0.0557;
3350     pi[8]= 0.0277;  pi[9]=  0.0905;  pi[10]=0.1675;  pi[11]= 0.0221;
3351     pi[12]=0.0561;  pi[13]= 0.0611;  pi[14]=0.0536;  pi[15]= 0.0725;
3352     pi[16]=0.087;   pi[17]= 0.0293;  pi[18]=0.034;   pi[19]= 0.0428;
3353 
3354     return 1;
3355 }
3356 
3357 //////////////////////////////////////////////////////////////
3358 //////////////////////////////////////////////////////////////
3359 
3360 
Init_Qmat_AB(phydbl * daa,phydbl * pi)3361 int Init_Qmat_AB(phydbl *daa, phydbl *pi)
3362 {
3363     /*
3364        This model has been 'translated' from Alexander Mirsky,Linda Kazandjian and Maria Anisimova into PHYML format by J-E Longueville.
3365        Many thanks to them.
3366     */
3367 
3368     /*
3369     Antibody-Specific Model of Amino Acid Substitution for Immunological Inferences from Alignments of Antibody Sequences
3370     Alexander Mirsky, Linda Kazandjian and Maria Anisimova
3371     Mol Biol Evol (2015) 32 (3): 806-819. doi: 10.1093/molbev/msu340 First published online: December 21, 2014
3372     */
3373 
3374     int i,j,naa;
3375     naa = 20;
3376 
3377     daa[1*20+0]= 1.784266E-01;         daa[2*20+0]= 9.291290E-02;       daa[2*20+1]= 7.829130E-01;       daa[3*20+0]= 1.241095E+00;
3378     daa[3*20+1]= 5.795374E-02;         daa[3*20+2]= 7.185182E+00;       daa[4*20+0]= 8.929181E-03;       daa[4*20+1]= 1.821885E-01;
3379     daa[4*20+2]= 1.374268E-06;         daa[4*20+3]= 2.340019E-02;       daa[5*20+0]= 1.992269E-01;       daa[5*20+1]= 1.923901E+00;
3380     daa[5*20+2]= 8.705989E-02;         daa[5*20+3]= 1.843856E-01;       daa[5*20+4]= 1.046446E-08;       daa[6*20+0]= 9.521821E-01;
3381     daa[6*20+1]= 6.273863E-02;         daa[6*20+2]= 5.038373E-01;       daa[6*20+3]= 7.426619E+00;       daa[6*20+4]= 7.519215E-11;
3382     daa[6*20+5]= 3.691671E+00;         daa[7*20+0]= 1.851951E+00;       daa[7*20+1]= 1.089400E+00;       daa[7*20+2]= 4.868901E-01;
3383     daa[7*20+3]= 2.112400E+00;         daa[7*20+4]= 5.891123E-02;       daa[7*20+5]= 5.516340E-02;       daa[7*20+6]= 1.389370E+00;
3384     daa[8*20+0]= 5.241316E+00;         daa[8*20+1]= 1.049550E+01;       daa[8*20+2]= 1.405444E+01;       daa[8*20+3]= 1.126995E+01;
3385     daa[8*20+4]= 3.963388E+00;         daa[8*20+5]= 8.908434E+00;       daa[8*20+6]= 7.298080E+00;       daa[8*20+7]= 9.139518E+00;
3386     daa[9*20+0]= 1.140412E-01;          daa[9*20+1]= 3.245175E-01;         daa[9*20+2]= 1.762721E+00;         daa[9*20+3]= 3.916999E-02;
3387     daa[9*20+4]= 6.594967E-04;        daa[9*20+5]= 6.712736E-06;         daa[9*20+6]= 1.029959E-04;          daa[9*20+7]= 3.560482E-02;
3388     daa[9*20+8]= 4.706586E+00;         daa[10*20+0]= 6.969101E-02;        daa[10*20+1]= 3.932002E-01;        daa[10*20+2]= 2.769442E-02;
3389     daa[10*20+3]= 3.020502E-02;         daa[10*20+4]= 6.079219E-03;       daa[10*20+5]= 6.802781E-01;        daa[10*20+6]= 1.283121E-03;
3390     daa[10*20+7]= 2.157936E-02;         daa[10*20+8]= 5.879103E+00;        daa[10*20+9]= 1.601123E+00;       daa[11*20+0]= 7.388355E-02;
3391     daa[11*20+1]= 7.549240E+00;       daa[11*20+2]= 6.190318E+00;       daa[11*20+3]= 6.622772E-02;        daa[11*20+4]= 3.722878E-16;
3392     daa[11*20+5]= 3.030805E+00;       daa[11*20+6]= 3.608816E+00;       daa[11*20+7]= 5.504400E-02;        daa[11*20+8]= 1.455741E+00;
3393     daa[11*20+9]= 5.059793E-01;        daa[11*20+10]= 2.158451E-02;       daa[12*20+0]= 6.299271E-02;       daa[12*20+1]= 3.362326E-01;
3394     daa[12*20+2]= 3.972173E-02;         daa[12*20+3]= 3.357577E-02;         daa[12*20+4]= 7.213178E-03;       daa[12*20+5]= 1.233336E-03;
3395     daa[12*20+6]= 7.659566E-02;         daa[12*20+7]= 2.187264E-02;        daa[12*20+8]= 2.298295E+00;       daa[12*20+9]= 1.096748E+01;
3396     daa[12*20+10]= 5.647985E+00;      daa[12*20+11]= 1.238634E+00;      daa[13*20+0]= 1.130146E-01;         daa[13*20+1]= 8.208677E-02;
3397     daa[13*20+2]= 1.955446E-01;        daa[13*20+3]= 1.031734E-01;         daa[13*20+4]= 1.993818E-01;        daa[13*20+5]= 1.496610E-03;
3398     daa[13*20+6]= 5.288625E-02;         daa[13*20+7]= 1.984772E-01;         daa[13*20+8]= 5.642309E+00;       daa[13*20+9]= 2.714705E+00;
3399     daa[13*20+10]= 3.390618E+00;      daa[13*20+11]= 4.649035E-03;       daa[13*20+12]= 3.947940E+00;      daa[14*20+0]= 1.800713E+00;
3400     daa[14*20+1]= 3.498713E-01;        daa[14*20+2]= 7.342554E-03;        daa[14*20+3]= 1.509482E-01;        daa[14*20+4]= 4.878395E-03;
3401     daa[14*20+5]= 7.426909E-01;        daa[14*20+6]= 2.889815E-02;        daa[14*20+7]= 7.915056E-02;        daa[14*20+8]= 1.049496E+01;
3402     daa[14*20+9]= 5.016568E-02;        daa[14*20+10]= 1.149931E+00;       daa[14*20+11]= 9.948994E-03;       daa[14*20+12]= 7.417279E-02;
3403     daa[14*20+13]= 3.556198E-01;       daa[15*20+0]= 9.988358E-01;       daa[15*20+1]= 1.926435E+00;       daa[15*20+2]= 7.348346E+00;
3404     daa[15*20+3]= 5.822988E-01;       daa[15*20+4]= 2.639482E-01;        daa[15*20+5]= 5.906405E-04;       daa[15*20+6]= 6.776709E-02;
3405     daa[15*20+7]= 9.984215E-01;       daa[15*20+8]= 5.439116E+00;       daa[15*20+9]= 6.007607E-01;         daa[15*20+10]= 1.580539E-01;
3406     daa[15*20+11]= 8.688405E-02;       daa[15*20+12]= 1.861354E-02;        daa[15*20+13]= 9.813064E-01;       daa[15*20+14]= 1.284651E+00;
3407     daa[16*20+0]= 2.912317E+00;       daa[16*20+1]= 2.147175E+00;        daa[16*20+2]= 1.135258E+00;       daa[16*20+3]= 1.516881E-01;
3408     daa[16*20+4]= 3.225214E-06;       daa[16*20+5]= 1.202094E-01;       daa[16*20+6]= 6.016624E-02;        daa[16*20+7]= 7.862767E-02;
3409     daa[16*20+8]= 3.443285E+00;        daa[16*20+9]= 3.087152E+00;        daa[16*20+10]= 5.702792E-01;       daa[16*20+11]= 1.039298E+00;
3410     daa[16*20+12]= 1.415612E+00;      daa[16*20+13]= 3.674486E-02;       daa[16*20+14]= 9.057112E-01;       daa[16*20+15]= 3.058575E+00;
3411     daa[17*20+0]= 7.939549E-02;         daa[17*20+1]= 5.724286E-01;        daa[17*20+2]= 7.310937E-04;        daa[17*20+3]= 1.423897E-02;
3412     daa[17*20+4]= 4.440833E-01;        daa[17*20+5]= 4.332983E-05;        daa[17*20+6]= 2.252612E-02;        daa[17*20+7]= 1.386853E-01;
3413     daa[17*20+8]= 7.013890E+00;        daa[17*20+9]= 6.318748E-02;        daa[17*20+10]= 3.378544E-01;       daa[17*20+11]= 8.024263E-03;
3414     daa[17*20+12]= 1.011149E-01;      daa[17*20+13]= 2.199856E-01;      daa[17*20+14]= 5.516074E-03;        daa[17*20+15]= 1.385142E-01;
3415     daa[17*20+16]= 1.412361E-02;        daa[18*20+0]= 1.433528E-01;        daa[18*20+1]= 1.711315E-01;        daa[18*20+2]= 2.622763E+00;
3416     daa[18*20+3]= 9.078338E-01;         daa[18*20+4]= 7.741612E-01;       daa[18*20+5]= 2.737091E-02;        daa[18*20+6]= 1.240642E-01;
3417     daa[18*20+7]= 2.295842E-01;        daa[18*20+8]= 2.055414E+01;       daa[18*20+9]= 2.903165E-01;        daa[18*20+10]= 1.521320E-01;
3418     daa[18*20+11]= 7.109973E-02;        daa[18*20+12]= 2.246759E-03;       daa[18*20+13]= 7.074464E+00;     daa[18*20+14]= 1.992133E-01;
3419     daa[18*20+15]= 8.104751E-01;       daa[18*20+16]= 9.984255E-02;       daa[18*20+17]= 6.121284E-01;      daa[19*20+0]= 3.774477E+00;
3420     daa[19*20+1]= 1.366145E-01;        daa[19*20+2]= 4.931206E-02;        daa[19*20+3]= 4.076074E-01;         daa[19*20+4]= 2.243512E-02;
3421     daa[19*20+5]= 9.047737E-03;        daa[19*20+6]= 5.795409E-01;        daa[19*20+7]= 4.228200E-01;         daa[19*20+8]= 6.890244E+00;
3422     daa[19*20+9]= 7.926675E+00;      daa[19*20+10]= 3.595310E+00;      daa[19*20+11]= 3.493440E-02;       daa[19*20+12]= 4.396720E+00;
3423     daa[19*20+13]= 1.643946E+00;       daa[19*20+14]= 2.217442E-01;       daa[19*20+15]= 7.477041E-02;       daa[19*20+16]= 2.166054E-01;
3424     daa[19*20+17]= 9.663569E-02;       daa[19*20+18]= 5.010635E-01;
3425 
3426     for (i=0; i<naa; i++)  for (j=0; j<i; j++)  daa[j*naa+i] = daa[i*naa+j];
3427 
3428     pi[0]= 6.541704E-02;     pi[1]= 4.708366E-02;     pi[2]= 3.168984E-02;     pi[3]= 4.688141E-02 ;
3429     pi[4]= 2.150693E-02;     pi[5]= 4.240711E-02;     pi[6]= 2.842211E-02;     pi[7]= 1.005278E-01;
3430     pi[8]= 9.812606E-03;     pi[9]= 3.424424E-02;     pi[10]= 6.222565E-02;    pi[11]= 4.844488E-02;
3431     pi[12]= 1.760370E-02;    pi[13]= 3.478555E-02;    pi[14]= 3.962469E-02;    pi[15]= 1.280566E-01;
3432     pi[16]= 8.199314E-02;    pi[17]= 3.393045E-02;    pi[18]= 7.586119E-02;    pi[19]= 4.948141E-02;
3433 
3434     return 1;
3435 }
3436 
3437 //////////////////////////////////////////////////////////////
3438 //////////////////////////////////////////////////////////////
3439 
3440 
GEO_Init_Coord(t_geo_coord * t,int n_dim)3441 void GEO_Init_Coord(t_geo_coord *t, int n_dim)
3442 {
3443   t->dim = n_dim;
3444   Random_String(t->id,3);
3445 }
3446 
3447 //////////////////////////////////////////////////////////////
3448 //////////////////////////////////////////////////////////////
3449 
PHYREX_Init_Disk_Event(t_dsk * t,int n_dim,t_phyrex_mod * mmod)3450 void PHYREX_Init_Disk_Event(t_dsk *t, int n_dim, t_phyrex_mod *mmod)
3451 {
3452   t->prev      = NULL;
3453   t->next      = NULL;
3454   t->mmod      = NULL;
3455   t->age_fixed = NO;
3456 
3457   Random_String(t->id,3);
3458   GEO_Init_Coord(t->centr,n_dim);
3459 
3460   if(mmod != NULL) t->mmod = mmod;
3461 }
3462 
3463 //////////////////////////////////////////////////////////////
3464 //////////////////////////////////////////////////////////////
3465 
PHYREX_Init_Migrep_Mod(t_phyrex_mod * t,int n_dim,phydbl min_lat,phydbl min_lon,phydbl max_lat,phydbl max_lon)3466 void PHYREX_Init_Migrep_Mod(t_phyrex_mod *t, int n_dim, phydbl min_lat, phydbl min_lon, phydbl max_lat, phydbl max_lon)
3467 {
3468   assert(n_dim == 2);
3469 
3470   if(t->id == -1) t->id = SLFV_GAUSSIAN;
3471   t->n_dim              = n_dim;
3472 
3473   t->lim_up->lonlat[0]   = max_lat;
3474   t->lim_up->lonlat[1]   = max_lon;
3475 
3476   t->lim_do->lonlat[0]   = min_lat;
3477   t->lim_do->lonlat[1]   = min_lon;
3478 
3479   t->min_rad           = 0.0;
3480   t->max_rad           = 1.0*((max_lat-min_lat)+(max_lon-min_lon));
3481   t->rad               = 0.01*((max_lat-min_lat)+(max_lon-min_lon));
3482   t->prior_param_rad   = 1./(0.1*((max_lat-min_lat)+(max_lon-min_lon)));
3483 
3484 }
3485 
3486 //////////////////////////////////////////////////////////////
3487 //////////////////////////////////////////////////////////////
3488 
PHYREX_Set_Default_Migrep_Mod(int n_otu,t_phyrex_mod * t)3489 void PHYREX_Set_Default_Migrep_Mod(int n_otu, t_phyrex_mod *t)
3490 {
3491   for(int i=0;i<2*n_otu-2;++i) t->sigsq_scale[i] = 1.0;
3492 
3493   t->id          = -1;
3494   t->safe_phyrex = NO;
3495 
3496   t->lim_up->lonlat[0] = 100.;
3497   t->lim_up->lonlat[1] = 100.;
3498 
3499   t->lim_do->lonlat[0] = 0.0;
3500   t->lim_do->lonlat[1] = 0.0;
3501 
3502   t->lbda              = 1.E-0;
3503   t->min_lbda          = 1.E-6;
3504   t->max_lbda          = 1.E+4;
3505   t->prior_param_lbda  = 1.0;
3506 
3507   t->mu                = 0.800;
3508   t->min_mu            = 0.000;
3509   t->max_mu            = 1.000;
3510   t->prior_param_mu    = 1.000;
3511 
3512   t->min_rad           = 0.0;
3513   t->max_rad           = 100.;
3514   t->rad               = 4.;
3515   t->prior_param_rad   = 1.;
3516   t->update_rad        = NO;
3517 
3518   t->min_sigsq         = 0.0;
3519   t->max_sigsq         = 1.E+2;
3520   t->sigsq             = 1.0;
3521   t->prior_param_sigsq = 10.0;
3522 
3523   t->nu                = 1.0;
3524 
3525   t->c_lnL             = UNLIKELY;
3526   t->c_ln_prior_rad    = UNLIKELY;
3527   t->c_ln_prior_lbda   = UNLIKELY;
3528   t->c_ln_prior_mu     = UNLIKELY;
3529 
3530   t->soft_bound_area   = 0.1;
3531 
3532 
3533   t->max_num_of_intervals = 1000000;
3534 }
3535 
3536 //////////////////////////////////////////////////////////////
3537 //////////////////////////////////////////////////////////////
3538 
PHYREX_Init_Lindisk_Node(t_ldsk * t,t_dsk * disk,int n_dim)3539 void PHYREX_Init_Lindisk_Node(t_ldsk *t, t_dsk *disk, int n_dim)
3540 {
3541   t->disk    = disk;
3542   /* disk->ldsk = t; */
3543   t->prev    = NULL;
3544   t->next    = NULL;
3545   t->nd      = NULL;
3546   t->is_hit  = NO;
3547   t->n_next  = 0;
3548   GEO_Init_Coord(t->coord,    n_dim);
3549   GEO_Init_Coord(t->cpy_coord,n_dim);
3550 }
3551 
3552 //////////////////////////////////////////////////////////////
3553 //////////////////////////////////////////////////////////////
3554 
MCMC_Init_MCMC_Struct(char * filename,option * io,t_mcmc * mcmc)3555 void MCMC_Init_MCMC_Struct(char *filename, option *io, t_mcmc *mcmc)
3556 {
3557   int pid;
3558 
3559   assert(mcmc);
3560 
3561   mcmc->io               = io;
3562   mcmc->is               = NO;
3563   mcmc->run              = 0;
3564   mcmc->sample_interval  = 1E+3;
3565   mcmc->chain_len        = 1E+7;
3566   mcmc->chain_len_burnin = 1E+4;
3567   mcmc->randomize        = YES;
3568   mcmc->norm_freq        = 1E+3;
3569   mcmc->max_tune         = 1.E+20;
3570   mcmc->min_tune         = 1.E-10;
3571   mcmc->print_every      = 2;
3572   mcmc->is_burnin        = NO;
3573   mcmc->nd_t_digits      = 4;
3574   mcmc->always_yes       = NO;
3575   mcmc->max_lag          = 1000;
3576   mcmc->sample_num       = 0;
3577 
3578   if(filename)
3579     {
3580       char *s;
3581 
3582       s = (char *)mCalloc(T_MAX_NAME,sizeof(char));
3583 
3584       strcpy(mcmc->out_filename,filename);
3585       pid = getpid();
3586       sprintf(mcmc->out_filename+strlen(mcmc->out_filename),".%d",pid);
3587 
3588       strcpy(s,mcmc->io->in_align_file);
3589       strcat(s,"_");
3590       strcat(s,mcmc->out_filename);
3591       strcat(s,".stats");
3592       mcmc->out_fp_stats = fopen(s,"w");
3593 
3594       strcpy(s,mcmc->io->in_align_file);
3595       strcat(s,"_");
3596       strcat(s,mcmc->out_filename);
3597       strcat(s,".trees");
3598       mcmc->out_fp_trees = fopen(s,"w");
3599 
3600       strcpy(s,mcmc->io->in_align_file);
3601       strcat(s,"_");
3602       strcat(s,mcmc->out_filename);
3603       strcat(s,".constree");
3604       mcmc->out_fp_constree = fopen(s,"w");
3605 
3606 /*       strcpy(s,tree->mcmc->out_filename); */
3607 /*       strcat(s,".means"); */
3608 /*       tree->mcmc->out_fp_means = fopen(s,"w"); */
3609 
3610 /*       strcpy(s,tree->mcmc->out_filename); */
3611 /*       strcat(s,".lasts"); */
3612 /*       tree->mcmc->out_fp_last  = fopen(s,"w"); */
3613 
3614       Free(s);
3615     }
3616   else
3617     {
3618       mcmc->out_fp_stats = stderr;
3619       mcmc->out_fp_trees = stderr;
3620       /* tree->mcmc->out_fp_means = stderr; */
3621       /* tree->mcmc->out_fp_last  = stderr; */
3622     }
3623 }
3624 
3625 //////////////////////////////////////////////////////////////
3626 //////////////////////////////////////////////////////////////
3627 
Init_Calibration(t_cal * cal)3628 void Init_Calibration(t_cal *cal)
3629 {
3630   cal->next             = NULL;
3631   cal->prev             = NULL;
3632   cal->lower            = -1.;
3633   cal->upper            = -1.;
3634   cal->is_primary       = FALSE;
3635   cal->alpha_proba_list = NULL;
3636   cal->clade_list       = NULL;
3637   cal->clade_list_size  = 0;
3638   cal->id               = NULL;
3639 }
3640 
3641 //////////////////////////////////////////////////////////////
3642 //////////////////////////////////////////////////////////////
3643 
Init_All_Calibration(t_tree * tree)3644 void Init_All_Calibration(t_tree *tree)
3645 {
3646   int i;
3647   assert(tree->rates && tree->times->a_cal);
3648   For(i,2*tree->n_otu-1) Init_Calibration(tree->times->a_cal[i]);
3649 }
3650 
3651 //////////////////////////////////////////////////////////////
3652 //////////////////////////////////////////////////////////////
3653 
Init_Sarea(t_sarea * s)3654 void Init_Sarea(t_sarea *s)
3655 {
3656   assert(s);
3657   s->n_poly = 0;
3658 }
3659 
3660 //////////////////////////////////////////////////////////////
3661 //////////////////////////////////////////////////////////////
3662 
Init_Calign(int n_otu,int crunch_len,int init_len,calign * this)3663 void Init_Calign(int n_otu, int crunch_len, int init_len, calign *this)
3664 {
3665   this->obs_pinvar  = .0;
3666   this->n_otu       = n_otu;
3667   this->clean_len   = -1;
3668   this->crunch_len  = crunch_len;
3669   this->init_len    = init_len;
3670   this->format      = 0;
3671   this->io_wght     = NULL;
3672 
3673   for(int i=0; i<n_otu; ++i) Init_Cseq(this->c_seq[i]);
3674 
3675 }
3676 
3677 //////////////////////////////////////////////////////////////
3678 //////////////////////////////////////////////////////////////
3679 
Init_Cseq(align * this)3680 void Init_Cseq(align *this)
3681 {
3682   this->is_duplicate = NO;
3683 }
3684 
3685 //////////////////////////////////////////////////////////////
3686 //////////////////////////////////////////////////////////////
3687 
Init_Linked_List(t_ll * list)3688 void Init_Linked_List(t_ll *list)
3689 {
3690   list->head = list;
3691   list->tail = list;
3692   list->next = NULL;
3693   list->prev = NULL;
3694   list->v    = NULL;
3695 }
3696 
3697 //////////////////////////////////////////////////////////////
3698 //////////////////////////////////////////////////////////////
3699 
Init_NNI_Score(phydbl val,t_edge * b,t_tree * tree)3700 void Init_NNI_Score(phydbl val, t_edge *b, t_tree *tree)
3701 {
3702   b->nni->score = val;
3703   if(tree->is_mixt_tree == YES) MIXT_Init_NNI_Score(val,b,tree);
3704 }
3705 
3706 //////////////////////////////////////////////////////////////
3707 //////////////////////////////////////////////////////////////
3708 
3709 #ifdef M4
M4_Init_Model(m4 * m4mod,calign * data,t_mod * mod)3710 void M4_Init_Model(m4 *m4mod, calign *data, t_mod *mod)
3711 {
3712   int i,j,ct;
3713   phydbl fq;
3714 
3715   if(mod->io->datatype == NT)      m4mod->n_o = 4;
3716   else if(mod->io->datatype == AA) m4mod->n_o = 20;
3717   else
3718     {
3719       PhyML_Fprintf(stderr,"\n. Not implemented yet.");
3720       PhyML_Fprintf(stderr,"\n. Err in file %s at line %d\n",__FILE__,__LINE__);
3721       Warn_And_Exit("");
3722     }
3723 
3724   mod->ns = m4mod->n_o * m4mod->n_h;
3725 
3726   for(i=0;i<m4mod->n_o;i++) m4mod->o_fq[i] = mod->e_frq->pi->v[i]; /*! At that stage, the mod->pi vector as been initialized
3727                                                              under a standard non covarion type of model. Use these
3728                                                              frequencies as they have been set according to the
3729                                                              nucleotide substitution model chosen (e.g., 1/4 for JC69). !*/
3730   For(i,(int)(m4mod->n_h)) m4mod->multipl[i] = 1.;
3731 
3732   ct = 0;
3733   for(i=0;i<m4mod->n_o-1;i++)
3734     {
3735       for(j=i+1;j<m4mod->n_o;j++)
3736         {
3737           m4mod->o_rr[ct] = MAX(mod->r_mat->qmat->v[i*m4mod->n_o+j],1.E-5);
3738           ct++;
3739         }
3740     }
3741 
3742   For(i,(int)(m4mod->n_h*(m4mod->n_h-1)/2)) m4mod->h_rr[i] = 1.;
3743   fq = (phydbl)(1./m4mod->n_h);
3744 
3745   if(mod->s_opt->opt_cov_delta) m4mod->delta = 1.0;
3746   if(mod->s_opt->opt_cov_alpha) m4mod->alpha = 1.0;
3747   for(i=0;i<m4mod->n_h;i++) m4mod->h_fq[i] = fq;
3748   for(i=0;i<m4mod->n_h;i++) m4mod->h_fq_unscaled[i] = 1.0;
3749   for(i=0;i<m4mod->n_h;i++) m4mod->multipl[i] = (phydbl)i;
3750   for(i=0;i<m4mod->n_h;i++) m4mod->multipl_unscaled[i] = (phydbl)i;
3751 
3752   Set_Update_Eigen(YES,mod);
3753   M4_Update_Qmat(m4mod,mod);
3754 }
3755 #endif
3756 
3757 //////////////////////////////////////////////////////////////
3758 //////////////////////////////////////////////////////////////
3759 
3760 // Initialise x values using coordinates at the tip nodes along
3761 // one dimension (with index dim_idx)
RW_Init_Contrasts(int dim_idx,t_tree * tree)3762 void RW_Init_Contrasts(int dim_idx, t_tree *tree)
3763 {
3764   for(int i=0;i<tree->n_otu;++i)
3765     {
3766       tree->ctrst->x[i] = tree->a_nodes[i]->ldsk->coord->lonlat[dim_idx];
3767     }
3768 
3769   for(int i=0;i<2*tree->n_otu-1;++i)
3770     {
3771       tree->ctrst->tprime[i] = tree->times->nd_t[i];
3772     }
3773 }
3774 
3775 //////////////////////////////////////////////////////////////
3776 //////////////////////////////////////////////////////////////
3777 //////////////////////////////////////////////////////////////
3778 //////////////////////////////////////////////////////////////
3779 //////////////////////////////////////////////////////////////
3780 //////////////////////////////////////////////////////////////
3781 //////////////////////////////////////////////////////////////
3782 //////////////////////////////////////////////////////////////
3783 //////////////////////////////////////////////////////////////
3784 //////////////////////////////////////////////////////////////
3785 
3786