source: trunk/GDE/PHYML/free.c

Last change on this file was 19480, checked in by westram, 17 months ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.0 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/*********************************************************/
184
185void Free_Tree_Lk(arbre *tree)
186{
187  int i;
188  edge *b;
189
190  b = NULL;
191
192  Free(tree->tot_loglk_sorted);
193  Free(tree->tot_dloglk);
194  Free(tree->tot_d2loglk);
195  Free(tree->site_lk);
196
197  For(i,tree->mod->n_catg) Free(tree->log_site_lk_cat[i]);
198  Free(tree->log_site_lk_cat);
199
200                               
201  For(i,2*tree->n_otu-3)
202    {
203      b = tree->t_edges[i];
204     
205      Free_Edge_Lk(tree,b);
206
207    }
208}
209
210
211/*********************************************************/
212
213void Free_dPij(arbre *tree)
214{
215  int i,j,k;
216
217  For(i,2*tree->n_otu-3)
218    {
219      For(j,tree->mod->n_catg)
220        {
221          For(k,tree->mod->ns)
222            {
223              Free(tree->t_edges[i]->dPij_rr[j][k]);
224              Free(tree->t_edges[i]->d2Pij_rr[j][k]);
225            }
226          Free(tree->t_edges[i]->dPij_rr[j]);
227          Free(tree->t_edges[i]->d2Pij_rr[j]);
228        }
229      Free(tree->t_edges[i]->dPij_rr);
230      Free(tree->t_edges[i]->d2Pij_rr);
231      tree->t_edges[i]->dPij_rr = NULL;
232      tree->t_edges[i]->d2Pij_rr = NULL;
233    }
234}
235
236/*********************************************************/
237
238void Free_Edge_P_Lk_Struct(edge *b, arbre *tree)
239{
240  int i,j;
241
242  if(b->p_lk_left) 
243    {
244      For(i,tree->data->crunch_len)
245        {
246          For(j,tree->mod->n_catg) Free(b->p_lk_left[i][j]);
247          Free(b->p_lk_left[i]);
248        }
249      Free(b->p_lk_left);
250      b->p_lk_left = NULL;
251    }
252
253  if(b->p_lk_rght) 
254    {
255      For(i,tree->data->crunch_len)
256        {
257          For(j,tree->mod->n_catg) Free(b->p_lk_rght[i][j]);
258          Free(b->p_lk_rght[i]);
259        }
260      Free(b->p_lk_rght);
261      b->p_lk_rght = NULL;
262    }
263}
264
265/*********************************************************/
266
267void Free_Edge_Lk(arbre *tree, edge *b)
268{
269  int i,j;
270
271  Free(b->ql);
272
273  if(b->p_lk_left)
274    {
275      For(i,tree->data->crunch_len)
276        {
277          For(j,tree->mod->n_catg)
278            {
279              Free(b->p_lk_left[i][j]);
280            }
281          Free(b->p_lk_left[i]);
282        }
283      Free(b->p_lk_left);
284      Free(b->sum_scale_f_left);
285    }
286
287  if(b->p_lk_rght)
288    {
289      For(i,tree->data->crunch_len)
290        {
291          For(j,tree->mod->n_catg)
292            {
293              Free(b->p_lk_rght[i][j]);
294            }
295          Free(b->p_lk_rght[i]);
296        }
297      Free(b->p_lk_rght);
298      Free(b->sum_scale_f_rght);
299    }
300
301  For(i,tree->mod->n_catg)
302    {
303      For(j,tree->mod->ns)
304        {
305          Free(b->Pij_rr[i][j]);
306          Free(b->dPij_rr[i][j]);
307          Free(b->d2Pij_rr[i][j]);
308        }
309
310      Free(b->Pij_rr[i]);
311      Free(b->dPij_rr[i]);
312      Free(b->d2Pij_rr[i]);
313      Free(b->site_p_lk_left[i]);
314      Free(b->site_p_lk_rght[i]);     
315    }
316  Free(b->Pij_rr);
317  Free(b->dPij_rr);
318  Free(b->d2Pij_rr);
319  Free(b->site_p_lk_left);
320  Free(b->site_p_lk_rght);
321  Free(b->site_dlk_rr);
322  Free(b->site_d2lk_rr);
323}
324
325/*********************************************************/
326
327void Free_Model(model *mod)
328{
329  int i,j;
330
331  Free(mod->custom_mod_string);
332  Free(mod->user_b_freq);
333  For(i,6)
334    Free(mod->rr_param_num[i]);
335  Free(mod->rr_param_num);
336  Free(mod->rr_param);
337  Free(mod->rr_param_values);
338  Free(mod->n_rr_param_per_cat);
339  Free(mod->s_opt);
340  Free(mod->pi);
341  Free(mod->r_proba);
342  Free(mod->rr);
343
344  Free(mod->mat_Q);
345  Free(mod->mat_Vr);
346  Free(mod->mat_Vi);
347  Free(mod->vct_eDmr);
348  Free(mod->vct_ev);
349
350  For(i,mod->n_catg)
351    {
352      For(j,mod->ns) Free(mod->Pij_rr[i][j]);
353      Free(mod->Pij_rr[i]);
354    }
355  Free(mod->Pij_rr);
356  For(i,mod->n_catg)
357    {
358      For(j,mod->ns) Free(mod->dPij_rr[i][j]);
359      Free(mod->dPij_rr[i]);
360    }
361  Free(mod->dPij_rr);
362  For(i,mod->n_catg)
363    {
364      For(j,mod->ns) Free(mod->d2Pij_rr[i][j]);
365      Free(mod->d2Pij_rr[i]);
366    }
367  Free(mod->d2Pij_rr);
368
369  Free(mod);
370}
371
372/*********************************************************/
373
374void Free(void *p)
375{
376  free(p);
377}
378
379/*********************************************************/
380
381void Free_Input(option *input)
382{
383  Free(input->seqfile);
384  Free(input->modelname);
385  Free(input->inputtreefile);
386  Free(input->phyml_stat_file);
387  Free(input->phyml_tree_file);
388  Free(input->phyml_lk_file);
389  Free(input->nt_or_cd);
390  Free(input);
391}
392
393/*********************************************************/
394
Note: See TracBrowser for help on using the repository browser.