source: branches/help/GDE/PHYML/free.c

Last change on this file was 4073, checked in by westram, 18 years ago
  • phyml 2.4.5
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.5 KB
Line 
1/*
2
3PHYML :  a program that  computes maximum likelihood  phylogenies from
4DNA or AA homologous sequences
5
6Copyright (C) Stephane Guindon. Oct 2003 onward
7
8All parts of  the source except where indicated  are distributed under
9the GNU public licence.  See http://www.opensource.org for details.
10
11*/
12
13#include "utilities.h"
14#include "free.h"
15
16/*********************************************************/
17
18void Free_All_Nodes_Light(arbre *tree)
19{
20  int i;
21  For(i,2*tree->n_otu-2) 
22    Free_Node(tree->noeud[i]);
23}
24
25/*********************************************************/
26
27void Free_All_Edges_Light(arbre *tree)
28{
29  int i;
30  For(i,2*tree->n_otu-3) 
31    if(tree->t_edges[i])
32      Free_Edge(tree->t_edges[i]);
33}
34
35
36/*********************************************************/
37
38void Free_Mat(matrix *mat)
39{
40  int i;
41
42  For(i,mat->n_otu)
43    {
44      Free(mat->P[i]);
45      Free(mat->Q[i]);
46      Free(mat->dist[i]);
47      Free(mat->name[i]);
48    }
49
50  Free(mat->P);
51  Free(mat->Q);
52  Free(mat->dist);
53  Free(mat->name);
54  Free(mat->tip_node);
55     
56  Free(mat->on_off);
57  Free(mat);
58}
59
60/*********************************************************/
61
62void Free_Partial_Lk(double ****p_lk, int len, int n_catg)
63{
64  int i,j;
65
66  For(i,len)
67    {
68      For(j,n_catg) Free((*p_lk)[i][j]);
69      Free((*p_lk)[i]);
70    }
71  Free((*p_lk));
72  (*p_lk) = NULL;
73}
74
75/*********************************************************/
76
77void Free_Tree(arbre *tree)
78{
79  int i,j,k;
80  edge *b;
81  node *n;
82
83
84  if(tree->has_bip)
85    {
86      For(i,2*tree->n_otu-2)
87        {
88          Free(tree->noeud[i]->bip_size);
89          For(j,3)
90            {
91              Free(tree->noeud[i]->bip_node[j]);
92              For(k,tree->n_otu) Free(tree->noeud[i]->bip_name[j][k]);
93              Free(tree->noeud[i]->bip_name[j]);
94            }
95          Free(tree->noeud[i]->bip_node);
96          Free(tree->noeud[i]->bip_name);
97        }
98    }
99
100  For(i,2*tree->n_otu-3)
101    {
102      b = tree->t_edges[i];
103      Free_Edge(b);
104    }
105  Free(tree->t_edges);
106
107
108  For(i,2*tree->n_otu-2)
109    {
110      n = tree->noeud[i];
111      Free_Node(n);
112    }
113  Free(tree->noeud);
114
115  Free(tree);
116}
117
118/*********************************************************/
119
120void Free_Edge(edge *b)
121{
122  Free(b);
123}
124
125/*********************************************************/
126
127void Free_Node(node *n)
128{
129  Free(n->b);
130  Free(n->v);
131  Free(n->l);
132  Free(n->score);
133  Free(n->name);
134/*   Free(n->n_ex_nodes); */
135  Free(n);
136}
137
138/*********************************************************/
139
140void Free_Cseq(allseq *data)
141{
142  int i;
143 
144  Free(data->invar);
145  Free(data->wght);
146  Free(data->ambigu);
147  Free(data->b_frq);
148  Free(data->sitepatt);
149  For(i,data->n_otu)
150    {
151      Free(data->c_seq[i]->name);
152      Free(data->c_seq[i]->state);
153      Free(data->c_seq[i]);
154    }
155  Free(data->c_seq);
156  Free(data);
157}
158
159/*********************************************************/
160
161void Free_Seq(seq **d, int n_otu)
162{
163  int i;
164  For(i,n_otu)
165    {
166      Free(d[i]->name);
167      Free(d[i]->state);
168      Free(d[i]);
169    }
170  Free(d);
171}
172
173
174/*********************************************************/
175
176void Free_All(seq **d, allseq *alldata, arbre *tree)
177{
178  Free_Cseq(alldata);
179  Free_Seq(d,tree->n_otu);
180  Free_Tree(tree);
181}     
182
183/*********************************************************/
184void Free_SubTree(edge *b_fcus, node *a, node *d, arbre *tree)
185{
186  int i;
187
188  if(d->tax) return;
189  else
190    {
191      For(i,3)
192        {
193          if(d->v[i] != a)
194            {
195              Free_SubTree(d->b[i],d,d->v[i],tree);
196              Free_Edge(d->b[i]);
197              Free_Node(d->v[i]);
198            }
199        }
200    }
201}
202
203/*********************************************************/
204void Free_Tree_Ins_Tar(arbre *tree)
205{
206  return;
207}
208
209/*********************************************************/
210
211void Free_Tree_Lk(arbre *tree)
212{
213  int i;
214  edge *b;
215  node *n;
216
217  b = NULL;
218  n = NULL;
219
220  Free(tree->tot_loglk_sorted);
221  Free(tree->tot_dloglk);
222  Free(tree->tot_d2loglk);
223  Free(tree->site_lk);
224
225  For(i,tree->mod->n_catg) Free(tree->log_site_lk_cat[i]);
226  Free(tree->log_site_lk_cat);
227
228                               
229  For(i,2*tree->n_otu-3)
230    {
231      b = tree->t_edges[i];
232     
233      Free_Edge_Lk(tree,b);
234
235    }
236}
237
238
239/*********************************************************/
240
241void Free_dPij(arbre *tree)
242{
243  int i,j,k;
244
245  For(i,2*tree->n_otu-3)
246    {
247      For(j,tree->mod->n_catg)
248        {
249          For(k,tree->mod->ns)
250            {
251              Free(tree->t_edges[i]->dPij_rr[j][k]);
252              Free(tree->t_edges[i]->d2Pij_rr[j][k]);
253            }
254          Free(tree->t_edges[i]->dPij_rr[j]);
255          Free(tree->t_edges[i]->d2Pij_rr[j]);
256        }
257      Free(tree->t_edges[i]->dPij_rr);
258      Free(tree->t_edges[i]->d2Pij_rr);
259      tree->t_edges[i]->dPij_rr = NULL;
260      tree->t_edges[i]->d2Pij_rr = NULL;
261    }
262}
263
264/*********************************************************/
265
266void Free_Edge_P_Lk_Struct(edge *b, arbre *tree)
267{
268  int i,j;
269
270  if(b->p_lk_left) 
271    {
272      For(i,tree->data->crunch_len)
273        {
274          For(j,tree->mod->n_catg) Free(b->p_lk_left[i][j]);
275          Free(b->p_lk_left[i]);
276        }
277      Free(b->p_lk_left);
278      b->p_lk_left = NULL;
279    }
280
281  if(b->p_lk_rght) 
282    {
283      For(i,tree->data->crunch_len)
284        {
285          For(j,tree->mod->n_catg) Free(b->p_lk_rght[i][j]);
286          Free(b->p_lk_rght[i]);
287        }
288      Free(b->p_lk_rght);
289      b->p_lk_rght = NULL;
290    }
291}
292
293/*********************************************************/
294
295void Free_Node_Lk(node *n)
296{
297/*   Free(n->n_ex_nodes); */
298}
299
300/*********************************************************/
301
302void Free_Edge_Lk(arbre *tree, edge *b)
303{
304  int i,j;
305
306  Free(b->ql);
307
308  if(b->p_lk_left)
309    {
310      For(i,tree->data->crunch_len)
311        {
312          For(j,tree->mod->n_catg)
313            {
314              Free(b->p_lk_left[i][j]);
315            }
316          Free(b->p_lk_left[i]);
317        }
318      Free(b->p_lk_left);
319      Free(b->sum_scale_f_left);
320    }
321
322  if(b->p_lk_rght)
323    {
324      For(i,tree->data->crunch_len)
325        {
326          For(j,tree->mod->n_catg)
327            {
328              Free(b->p_lk_rght[i][j]);
329            }
330          Free(b->p_lk_rght[i]);
331        }
332      Free(b->p_lk_rght);
333      Free(b->sum_scale_f_rght);
334    }
335
336  For(i,tree->mod->n_catg)
337    {
338      For(j,tree->mod->ns)
339        {
340          Free(b->Pij_rr[i][j]);
341          Free(b->dPij_rr[i][j]);
342          Free(b->d2Pij_rr[i][j]);
343        }
344
345      Free(b->Pij_rr[i]);
346      Free(b->dPij_rr[i]);
347      Free(b->d2Pij_rr[i]);
348      Free(b->site_p_lk_left[i]);
349      Free(b->site_p_lk_rght[i]);     
350    }
351  Free(b->Pij_rr);
352  Free(b->dPij_rr);
353  Free(b->d2Pij_rr);
354  Free(b->site_p_lk_left);
355  Free(b->site_p_lk_rght);
356  Free(b->site_dlk_rr);
357  Free(b->site_d2lk_rr);
358}
359
360/*********************************************************/
361
362void Free_Model(model *mod)
363{
364  int i,j;
365
366  Free(mod->custom_mod_string);
367  Free(mod->user_b_freq);
368  For(i,6)
369    Free(mod->rr_param_num[i]);
370  Free(mod->rr_param_num);
371  Free(mod->rr_param);
372  Free(mod->rr_param_values);
373  Free(mod->n_rr_param_per_cat);
374  Free(mod->s_opt);
375  Free(mod->pi);
376  Free(mod->r_proba);
377  Free(mod->rr);
378
379  Free(mod->mat_Q);
380  Free(mod->mat_Vr);
381  Free(mod->mat_Vi);
382  Free(mod->vct_eDmr);
383  Free(mod->vct_ev);
384
385  For(i,mod->n_catg)
386    {
387      For(j,mod->ns) Free(mod->Pij_rr[i][j]);
388      Free(mod->Pij_rr[i]);
389    }
390  Free(mod->Pij_rr);
391  For(i,mod->n_catg)
392    {
393      For(j,mod->ns) Free(mod->dPij_rr[i][j]);
394      Free(mod->dPij_rr[i]);
395    }
396  Free(mod->dPij_rr);
397  For(i,mod->n_catg)
398    {
399      For(j,mod->ns) Free(mod->d2Pij_rr[i][j]);
400      Free(mod->d2Pij_rr[i]);
401    }
402  Free(mod->d2Pij_rr);
403
404  Free(mod);
405}
406
407/*********************************************************/
408
409void Free(void *p)
410{
411  free(p);
412}
413
414/*********************************************************/
415
416void Free_Input(option *input)
417{
418  Free(input->seqfile);
419  Free(input->modelname);
420  Free(input->inputtreefile);
421  Free(input->phyml_stat_file);
422  Free(input->phyml_tree_file);
423  Free(input->phyml_lk_file);
424  Free(input->nt_or_cd);
425  Free(input);
426}
427
428/*********************************************************/
429
Note: See TracBrowser for help on using the repository browser.