1 | /* |
---|
2 | * protml.h Adachi, J. 1996.07.01 |
---|
3 | * Copyright (C) 1992-1996 J. Adachi & M. Hasegawa. All rights reserved. |
---|
4 | */ |
---|
5 | |
---|
6 | #include "molphy.h" |
---|
7 | #include "matrixut.h" |
---|
8 | /* unit time (length) is a number of substitutions per 100 sites */ |
---|
9 | #define UPPERLIMIT 500.0 /* upper limit on branch length (subsutitutions) */ |
---|
10 | #define LOWERLIMIT 0.001 /* lower limit on branch length (subsutitutions) */ |
---|
11 | #define EPSILON 0.001 /* stopping value of error (branch length) */ |
---|
12 | #define DEPSILON 0.0001 /* stopping value of error (distance) */ |
---|
13 | #define REPSILON 0.005 /* stopping value of error (local rearrangement) */ |
---|
14 | #define NUMBOOTS 10000 /* number of bootstrap resamplings */ |
---|
15 | #define NUMBOOTSR 1000 /* number of bootstrap resamplings (reliability) */ |
---|
16 | #define MAXIT 50 /* maximum number of iterates of smoothing */ |
---|
17 | #define TBLRATE 0.3 /* if number of possible trees > 945 (OTUs > 7) */ |
---|
18 | #define TBLRATE7 2.0 /* if number of possible trees <= 945 (OTUs <= 7) */ |
---|
19 | #define MAXALTREES 105 |
---|
20 | #define NUMQLTREES 50 |
---|
21 | #define MAXQLBUF 9 |
---|
22 | #define MAXSLBUF 30 /* 20 */ |
---|
23 | #define RSRATE 0.5 |
---|
24 | #define QRSRATE 1.15 |
---|
25 | #define SRSRATE 1.5 /* 1.3 */ |
---|
26 | #define NUMTBLBIN 20 |
---|
27 | #define INITCOEFMLE 0.5 |
---|
28 | |
---|
29 | #define VARITPM 0 |
---|
30 | |
---|
31 | #define MINFREQ 0.005 |
---|
32 | #define NUMAMI 20 |
---|
33 | #define NUMNUC 4 |
---|
34 | |
---|
35 | #define MTREVNAME "mtREV24" |
---|
36 | #define LLSFILEEXT ".lls" |
---|
37 | #define EPSFILEEXT ".eps" |
---|
38 | #ifndef NUC |
---|
39 | #define TPMRADIX NUMAMI |
---|
40 | #define INFOMOL "Amino" |
---|
41 | #define RSRINFILE "prot.rsr" |
---|
42 | #define RSROUTFILE "p.rsr" |
---|
43 | #define TPMOUTFILE "p.src" |
---|
44 | #define TPLFILE "protml.tpl" |
---|
45 | #define TREFILE "protml.tre" |
---|
46 | #define EPSFILE "protml.eps" |
---|
47 | #define LOGFILE "Protml.log" |
---|
48 | #else /* NUC*/ |
---|
49 | #define TPMRADIX NUMNUC |
---|
50 | #define INFOMOL "Nucleic" |
---|
51 | #define RSRINFILE "nuc.rsr" |
---|
52 | #define RSROUTFILE "n.rsr" |
---|
53 | #define TPMOUTFILE "n.src" |
---|
54 | #define TPLFILE "nucml.tpl" |
---|
55 | #define TREFILE "nucml.tre" |
---|
56 | #define EPSFILE "nucml.eps" |
---|
57 | #define LOGFILE "Nucml.log" |
---|
58 | #define ALPHABETA 4.0 |
---|
59 | #define ALPHAYR 1.0 |
---|
60 | #define BETA12 1.0 |
---|
61 | #define MINAB 0.5 |
---|
62 | #define MAXAB 100.0 |
---|
63 | #define MINAYR 0.1 |
---|
64 | #define MAXAYR 5.0 |
---|
65 | #define MINB12 0.1 |
---|
66 | #define MAXB12 10.0 |
---|
67 | #endif /* NUC*/ |
---|
68 | |
---|
69 | #define MAXCOLUMN 80 |
---|
70 | #define LINESITES 60 |
---|
71 | #define BUFLINE 512 |
---|
72 | #define MAXWORD 32 |
---|
73 | #define MAXOVER 50 |
---|
74 | #define MAXLENG 30 |
---|
75 | #define MIDLIMIT 100.0 |
---|
76 | #define NMLNGTH 10 /* max. num. of characters in species name with S or I */ |
---|
77 | #define VERSION "2.3b3" /* beta 2 */ |
---|
78 | #define DATE "July 1 1996" |
---|
79 | |
---|
80 | typedef int ivectpmty[TPMRADIX]; |
---|
81 | typedef double dvectpmty[TPMRADIX]; |
---|
82 | typedef dvectpmty dmattpmty[TPMRADIX]; |
---|
83 | |
---|
84 | typedef struct node { |
---|
85 | struct node *isop; |
---|
86 | struct node *kinp; |
---|
87 | int descen; |
---|
88 | int num; |
---|
89 | double length; |
---|
90 | double lklhdl; |
---|
91 | double reliab; |
---|
92 | ivector paths; |
---|
93 | ivector eprob; |
---|
94 | dmatrix iprob; |
---|
95 | } Node; |
---|
96 | |
---|
97 | typedef struct tree { |
---|
98 | Node *rootp; |
---|
99 | Node *firstp; |
---|
100 | Node **ebrnchp; |
---|
101 | Node **ibrnchp; |
---|
102 | double lklhd; |
---|
103 | double varilkl; |
---|
104 | double lklmin; |
---|
105 | double lklmean; |
---|
106 | double aic; |
---|
107 | double aproxl; |
---|
108 | double tblength; |
---|
109 | double tbldis; |
---|
110 | double rssleast; |
---|
111 | int npara; |
---|
112 | int numorder; |
---|
113 | ivector bturn; |
---|
114 | } Tree; |
---|
115 | |
---|
116 | typedef struct infotree { |
---|
117 | int npara; |
---|
118 | int bsprob; |
---|
119 | int mlsite; |
---|
120 | double lklhd; |
---|
121 | double varilkl; |
---|
122 | double lklaprox; |
---|
123 | double lklbs; |
---|
124 | double aic; |
---|
125 | double tblength; |
---|
126 | double abdistan; |
---|
127 | char *ltplgy; |
---|
128 | } Infotree; |
---|
129 | |
---|
130 | typedef struct infoaltree { |
---|
131 | struct infoaltree *up; |
---|
132 | double lklaprox; |
---|
133 | double tbl; |
---|
134 | double rss; |
---|
135 | char *ltplgy; |
---|
136 | } Infoaltree; |
---|
137 | |
---|
138 | typedef struct infoqltree { |
---|
139 | struct infoqltree *up; |
---|
140 | Node *ap; |
---|
141 | double lklaprox; |
---|
142 | double residual; |
---|
143 | dvector lengths; |
---|
144 | } Infoqltree; |
---|
145 | |
---|
146 | typedef struct infoaddtree { |
---|
147 | struct infoaddtree *dp; |
---|
148 | double lklaprox; |
---|
149 | int frequency; |
---|
150 | char *ltplgy; |
---|
151 | } Infoaddtree; |
---|
152 | |
---|
153 | typedef struct infosltree { |
---|
154 | struct infosltree *up; |
---|
155 | Node *ibp; |
---|
156 | Node *jbp; |
---|
157 | double lklaprox; |
---|
158 | double residual; |
---|
159 | dvector lengths; |
---|
160 | } Infosltree; |
---|
161 | |
---|
162 | extern char *Cacid1[]; |
---|
163 | extern char *Cacid3[]; |
---|
164 | |
---|
165 | |
---|
166 | #ifdef MAIN_MODULE |
---|
167 | |
---|
168 | #define EXTERN |
---|
169 | int Tpmradix = TPMRADIX; |
---|
170 | char *Infomol = INFOMOL; |
---|
171 | |
---|
172 | #else |
---|
173 | |
---|
174 | #define EXTERN extern |
---|
175 | EXTERN int Tpmradix; |
---|
176 | EXTERN char *Infomol; |
---|
177 | |
---|
178 | #endif |
---|
179 | |
---|
180 | |
---|
181 | EXTERN FILE *Epsfp; |
---|
182 | EXTERN FILE *Tplfp; |
---|
183 | EXTERN FILE *Trefp; |
---|
184 | EXTERN FILE *Lklfp; |
---|
185 | EXTERN FILE *Logfp; |
---|
186 | EXTERN FILE *Rtfofp; /* TPM! */ |
---|
187 | EXTERN FILE *Rtfifp; /* TPM! */ |
---|
188 | EXTERN FILE *Tpmofp; /* TPM! */ |
---|
189 | EXTERN time_t Ct0; |
---|
190 | EXTERN time_t Ct1; |
---|
191 | |
---|
192 | #define SWITCHES "aAbCdDefFhHiIjl:LmMn:No:pP:qQrRsSt:TuvVwXzZ" |
---|
193 | /* Bc E G JkK O U Wx */ |
---|
194 | EXTERN boolean Aneal_optn; /* a option Annealing */ |
---|
195 | EXTERN boolean Aprox_optn; /* A option Approximate likelihood */ |
---|
196 | EXTERN boolean Boots_optn; /* b option no Bootstrap probability */ |
---|
197 | EXTERN boolean Ctacit_optn; /* C option taCiturnity */ |
---|
198 | EXTERN boolean Dayhf_optn; /* d option Dayhoff model */ |
---|
199 | EXTERN boolean Distn_optn; /* D option Distance matrix only */ |
---|
200 | EXTERN boolean Exhau_optn; /* e option Exhaustive search */ |
---|
201 | EXTERN boolean Frequ_optn; /* f option with data frequency */ |
---|
202 | EXTERN boolean Logdet_optn; /* F option */ |
---|
203 | EXTERN boolean Info_optn; /* i option */ |
---|
204 | EXTERN boolean Inlvd_optn; /* I option interleaved input format */ |
---|
205 | EXTERN boolean Jtt_optn; /* j option JTT model */ |
---|
206 | EXTERN boolean Lklhd_optn; /* l option */ |
---|
207 | EXTERN boolean Logfl_optn; /* L option */ |
---|
208 | EXTERN boolean Mtrev_optn; /* m option Mitochondrial model */ |
---|
209 | EXTERN boolean Mevol_optn; /* M option minimum evolution */ |
---|
210 | EXTERN boolean Njoin_optn; /* N option NJ */ |
---|
211 | EXTERN boolean Outgr_optn; /* o option */ |
---|
212 | EXTERN boolean Poisn_optn; /* p option Poisson process */ |
---|
213 | EXTERN boolean Percnt_optn; /* P option Per cent */ |
---|
214 | EXTERN boolean Quick_optn; /* q option quick mode */ |
---|
215 | EXTERN boolean Quick1_optn; /* Q option quick 1 mode */ |
---|
216 | EXTERN boolean Rrsr_optn; /* r option Read RSR, TPM */ |
---|
217 | EXTERN boolean Relia_optn; /* R option Reliability of a branch */ |
---|
218 | EXTERN boolean Stard_optn; /* s option Star Decomposition */ |
---|
219 | EXTERN boolean Seque_optn; /* S option PHYLIP Sequential input format */ |
---|
220 | EXTERN boolean Tstv_optn; /* t option with decimal number */ |
---|
221 | EXTERN boolean Toptim_optn; /* t option without decimal number */ |
---|
222 | EXTERN boolean Triad_optn; /* T option */ |
---|
223 | EXTERN boolean User_optn; /* u option designate user trees */ |
---|
224 | EXTERN boolean Verbs_optn; /* v option Verbose to stderr */ |
---|
225 | EXTERN boolean Varia_optn; /* V option Variance */ |
---|
226 | EXTERN boolean Write_optn; /* w option output sequence infomation */ |
---|
227 | EXTERN boolean Xreli_optn; /* X option Reliability of a branch 2 */ |
---|
228 | EXTERN boolean Debug_optn; /* z option */ |
---|
229 | EXTERN boolean Debug; /* Z option */ |
---|
230 | EXTERN boolean Const_optn; /* option with constrained_tree */ |
---|
231 | |
---|
232 | #ifndef NUC |
---|
233 | #else /* NUC */ |
---|
234 | EXTERN double AlphaBeta; |
---|
235 | EXTERN double AlphaYR; |
---|
236 | EXTERN double Beta12; |
---|
237 | #endif /* NUC */ |
---|
238 | |
---|
239 | EXTERN boolean Converg; |
---|
240 | EXTERN boolean Topting; |
---|
241 | EXTERN char *Prog_name; |
---|
242 | EXTERN char Modelname[64]; |
---|
243 | EXTERN char *Comment; |
---|
244 | EXTERN char *Llsfile; |
---|
245 | EXTERN char *Epsfile; |
---|
246 | EXTERN int Aneal_mode; |
---|
247 | EXTERN int Maxspc; |
---|
248 | EXTERN int Numspc; |
---|
249 | EXTERN int Maxibrnch; |
---|
250 | EXTERN int Numibrnch; |
---|
251 | EXTERN int Maxbrnch; |
---|
252 | EXTERN int Numbrnch; |
---|
253 | EXTERN int Maxpair; |
---|
254 | EXTERN int Numpair; |
---|
255 | EXTERN int Maxsite; |
---|
256 | EXTERN int Numsite; |
---|
257 | EXTERN int Numptrn; |
---|
258 | EXTERN int Numtree; |
---|
259 | EXTERN int Maxaltree; |
---|
260 | EXTERN int Numaltree; |
---|
261 | EXTERN int Numqltree; |
---|
262 | EXTERN int Numaddtree; |
---|
263 | EXTERN int Cnotree; |
---|
264 | EXTERN int Maxlkltree; |
---|
265 | EXTERN int Minaictree; |
---|
266 | EXTERN int Mintbltree; |
---|
267 | EXTERN int Numexe; |
---|
268 | EXTERN int Cnoexe; |
---|
269 | EXTERN int Numit; |
---|
270 | EXTERN int Linesites; |
---|
271 | EXTERN int Outgroup1; |
---|
272 | EXTERN int Outgroup2; |
---|
273 | EXTERN int Numverbs; |
---|
274 | EXTERN int Tblunder; |
---|
275 | EXTERN int Tblover; |
---|
276 | EXTERN double Epsilon; |
---|
277 | EXTERN double Ulimit; |
---|
278 | EXTERN double Llimit; |
---|
279 | EXTERN double Mlimit; |
---|
280 | EXTERN double Numtplgy; |
---|
281 | EXTERN double Maxlkl; |
---|
282 | EXTERN double Minaic; |
---|
283 | EXTERN double Mintbl; |
---|
284 | EXTERN double Mintbldm; |
---|
285 | EXTERN double Maxtbldm; |
---|
286 | EXTERN double Basetbldm; |
---|
287 | EXTERN double Proportion; |
---|
288 | EXTERN double Percent; |
---|
289 | EXTERN double Tblrate; |
---|
290 | EXTERN double Tblcoef; |
---|
291 | EXTERN ivector Numsites; /* Mar 22 1995 */ |
---|
292 | |
---|
293 | EXTERN Tree *Ctree; |
---|
294 | EXTERN Infotree *Infotrees; |
---|
295 | EXTERN Infoaltree *Infoaltrees; |
---|
296 | EXTERN Infoaltree Atail, Ahead; |
---|
297 | EXTERN Infoqltree *Infoqltrees; |
---|
298 | EXTERN Infoqltree *Qtail, *Qhead; |
---|
299 | |
---|
300 | EXTERN char **Identif; |
---|
301 | EXTERN char **Sciname; |
---|
302 | EXTERN char **Engname; |
---|
303 | EXTERN cmatrix Seqchar; |
---|
304 | EXTERN imatrix Seqconint; |
---|
305 | EXTERN ivector Weight; |
---|
306 | EXTERN dmatrix Distanmat; |
---|
307 | EXTERN dvector Distanvec; |
---|
308 | EXTERN dvector Brnlength; |
---|
309 | EXTERN cvector Strtree; |
---|
310 | EXTERN ivector Poolorder; |
---|
311 | EXTERN ivector Relistat; |
---|
312 | EXTERN imatrix Relinum; |
---|
313 | EXTERN dvector Relidiff; |
---|
314 | EXTERN dmatrix Reliprob; |
---|
315 | EXTERN ivector Tblbin; |
---|
316 | EXTERN dvector Relitrif; |
---|
317 | |
---|
318 | #ifdef LIGHT |
---|
319 | #define LPMATRIX fmatrix |
---|
320 | #define LPVECTOR fvector |
---|
321 | #define LPCUBE fcube |
---|
322 | #define NEW_LPMATRIX new_fmatrix |
---|
323 | #define NEW_LPVECTOR new_fvector |
---|
324 | #define NEW_LPCUBE new_fcube |
---|
325 | #define FREE_LPMATRIX free_fmatrix |
---|
326 | #define FREE_LPVECTOR free_fvector |
---|
327 | #define FREE_LPCUBE free_fcube |
---|
328 | #else /* LIGHT */ |
---|
329 | #define LPMATRIX dmatrix |
---|
330 | #define LPVECTOR dvector |
---|
331 | #define LPCUBE dcube |
---|
332 | #define NEW_LPMATRIX new_dmatrix |
---|
333 | #define NEW_LPVECTOR new_dvector |
---|
334 | #define NEW_LPCUBE new_dcube |
---|
335 | #define FREE_LPMATRIX free_dmatrix |
---|
336 | #define FREE_LPVECTOR free_dvector |
---|
337 | #define FREE_LPCUBE free_dcube |
---|
338 | #endif /* LIGHT */ |
---|
339 | |
---|
340 | EXTERN LPMATRIX Lklptrn; |
---|
341 | EXTERN LPVECTOR Alklptrn; |
---|
342 | |
---|
343 | EXTERN dvectpmty Freqemp; |
---|
344 | EXTERN dvectpmty Freqtpm; |
---|
345 | EXTERN dvectpmty Eval; |
---|
346 | EXTERN dvectpmty Evl2; |
---|
347 | EXTERN dmattpmty Evec; |
---|
348 | EXTERN dmattpmty Ievc; |
---|
349 | |
---|
350 | #ifdef TPM |
---|
351 | EXTERN dmattpmty Rtf; /* TPM! */ |
---|
352 | EXTERN dmattpmty Tpm; /* TPM! */ |
---|
353 | EXTERN int Itpm; /* TPM! */ |
---|
354 | EXTERN int Jtpm; /* TPM! */ |
---|
355 | #endif /* TPM */ |
---|