1 /* fastDNAml.h */ 2 3 #define headerName "fastDNAml.h" 4 #define headerVersion "1.2.1" 5 #define headerDate "March 9, 1998" 6 7 #ifndef dnaml_h 8 9 /* Compile time switches for various updates to program: 10 * 0 gives original version 11 * 1 gives new version 12 */ 13 14 #define ReturnSmoothedView 1 /* Propagate changes back after smooth */ 15 #define BestInsertAverage 1 /* Build three taxon tree analytically */ 16 #define DeleteCheckpointFile 0 /* Remove checkpoint file when done */ 17 18 #define Debug 0 19 20 /* Program constants and parameters */ 21 22 #define maxlogf 1024 /* maximum number of user trees */ 23 #define maxcategories 35 /* maximum number of site types */ 24 25 #define smoothings 32 /* maximum smoothing passes through tree */ 26 #define iterations 10 /* maximum iterations of makenewz per insert */ 27 #define newzpercycle 1 /* iterations of makenewz per tree traversal */ 28 #define nmlngth 10 /* number of characters in species name */ 29 #define deltaz 0.00001 /* test of net branch length change in update */ 30 #define zmin 1.0E-15 /* max branch prop. to -log(zmin) (= 34) */ 31 #define zmax (1.0 - 1.0E-6) /* min branch prop. to 1.0-zmax (= 1.0E-6) */ 32 #define defaultz 0.9 /* value of z assigned as starting point */ 33 #define unlikely -1.0E300 /* low likelihood for initialization */ 34 35 /* These values are used to rescale the lilelihoods at a given site so that 36 * there is no floating point underflow. 37 */ 38 #define twotothe256 \ 39 115792089237316195423570985008687907853269984665640564039457584007913129639936.0 40 /* 2**256 (exactly) */ 41 #define minlikelihood (1.0/twotothe256) /* 2**(-256) */ 42 #define log_minlikelihood (-177.445678223345993274) /* log(1.0/twotothe256) */ 43 44 /* The next two values are used for scaling the tree that is sketched in the 45 * output file. 46 */ 47 #define down 2 48 #define over 60 49 50 #define checkpointname "checkpoint" 51 52 #define badEval 1.0 53 #define badZ 0.0 54 #define badRear -1 55 #define badSigma -1.0 56 57 #define TRUE 1 58 #define FALSE 0 59 60 #define treeNone 0 61 #define treeNewick 1 62 #define treeProlog 2 63 #define treePHYLIP 3 64 #define treeMaxType 3 65 #define treeDefType treePHYLIP 66 67 #define ABS(x) (((x)<0) ? (-(x)) : (x)) 68 #define MIN(x,y) (((x)<(y)) ? (x) : (y)) 69 #define MAX(x,y) (((x)>(y)) ? (x) : (y)) 70 #define LOG(x) (((x)>0) ? log(x) : hang("log domain error")) 71 #define NINT(x) ((int) ((x)>0 ? ((x)+0.5) : ((x)-0.5))) 72 73 #if ! Vectorize 74 typedef char yType; 75 #else 76 typedef int yType; 77 #endif 78 79 typedef int boolean; 80 typedef double xtype; 81 82 typedef struct likelihood_vector { 83 xtype a, c, g, t; 84 long exp; 85 } likelivector; 86 87 typedef struct xmantyp { 88 struct xmantyp *prev; 89 struct xmantyp *next; 90 struct noderec *owner; 91 likelivector *lv; 92 } xarray; 93 94 typedef struct noderec { 95 double z, z0; 96 struct noderec *next; 97 struct noderec *back; 98 int number; 99 xarray *x; 100 int xcoord, ycoord, ymin, ymax; 101 char name[nmlngth+1]; /* Space for null termination */ 102 yType *tip; /* Pointer to sequence data */ 103 } node, *nodeptr; 104 105 typedef struct { 106 int numsp; /* number of species (also tr->mxtips) */ 107 int sites; /* number of input sequence positions */ 108 yType **y; /* sequence data array */ 109 boolean freqread; /* user base frequencies have been read */ 110 /* To do: DNA specific values should get packaged into structure */ 111 double freqa, freqc, freqg, freqt, /* base frequencies */ 112 freqr, freqy, invfreqr, invfreqy, 113 freqar, freqcy, freqgr, freqty; 114 double ttratio, xi, xv, fracchange; /* transition/transversion */ 115 /* End of DNA specific values */ 116 int *wgt; /* weight per sequence pos */ 117 int *wgt2; /* weight per pos (booted) */ 118 int categs; /* number of rate categories */ 119 double catrat[maxcategories+1]; /* rates per categories */ 120 int *sitecat; /* category per sequence pos */ 121 } rawdata; 122 123 typedef struct { 124 int *alias; /* site representing a pattern */ 125 int *aliaswgt; /* weight by pattern */ 126 int endsite; /* # of sequence patterns */ 127 int wgtsum; /* sum of weights of positions */ 128 int *patcat; /* category per pattern */ 129 double *patrat; /* rates per pattern */ 130 double *wr; /* weighted rate per pattern */ 131 double *wr2; /* weight*rate**2 per pattern */ 132 } cruncheddata; 133 134 typedef struct { 135 double likelihood; 136 double *log_f; /* info for signif. of trees */ 137 node **nodep; 138 node *start; 139 node *outgrnode; 140 int mxtips; 141 int ntips; 142 int nextnode; 143 int opt_level; 144 int log_f_valid; /* log_f value sites */ 145 int global; /* branches to cross in full tree */ 146 int partswap; /* branches to cross in partial tree */ 147 int outgr; /* sequence number to use in rooting tree */ 148 boolean prelabeled; /* the possible tip names are known */ 149 boolean smoothed; 150 boolean rooted; 151 boolean userlen; /* use user-supplied branch lengths */ 152 rawdata *rdta; /* raw data structure */ 153 cruncheddata *cdta; /* crunched data structure */ 154 } tree; 155 156 typedef struct conntyp { 157 double z; /* branch length */ 158 node *p, *q; /* parent and child sectors */ 159 void *valptr; /* pointer to value of subtree */ 160 int descend; /* pointer to first connect of child */ 161 int sibling; /* next connect from same parent */ 162 } connect, *connptr; 163 164 typedef struct { 165 double likelihood; 166 double *log_f; /* info for signif. of trees */ 167 connect *links; /* pointer to first connect (start) */ 168 node *start; 169 int nextlink; /* index of next available connect */ 170 /* tr->start = tpl->links->p */ 171 int ntips; 172 int nextnode; 173 int opt_level; /* degree of branch swapping explored */ 174 int scrNum; /* position in sorted list of scores */ 175 int tplNum; /* position in sorted list of trees */ 176 int log_f_valid; /* log_f value sites */ 177 boolean prelabeled; /* the possible tip names are known */ 178 boolean smoothed; /* branch optimization converged? */ 179 } topol; 180 181 typedef struct { 182 double best; /* highest score saved */ 183 double worst; /* lowest score saved */ 184 topol *start; /* starting tree for optimization */ 185 topol **byScore; 186 topol **byTopol; 187 int nkeep; /* maximum topologies to save */ 188 int nvalid; /* number of topologies saved */ 189 int ninit; /* number of topologies initialized */ 190 int numtrees; /* number of alternatives tested */ 191 boolean improved; 192 } bestlist; 193 194 typedef struct { 195 long boot; /* bootstrap random number seed */ 196 int extra; /* extra output information switch */ 197 boolean empf; /* use empirical base frequencies */ 198 boolean interleaved; /* input data are in interleaved format */ 199 long jumble; /* jumble random number seed */ 200 int nkeep; /* number of best trees to keep */ 201 int numutrees; /* number of user trees to read */ 202 boolean prdata; /* echo data to output stream */ 203 boolean qadd; /* test addition without full smoothing */ 204 boolean restart; /* resume addition to partial tree */ 205 boolean root; /* use user-supplied outgroup */ 206 boolean trprint; /* print tree to output stream */ 207 int trout; /* write tree to "treefile" */ 208 boolean usertree; /* use user-supplied trees */ 209 boolean userwgt; /* use user-supplied position weight mask */ 210 } analdef; 211 212 typedef struct { 213 double tipmax; 214 int tipy; 215 } drawdata; 216 217 void exit(); 218 219 #if ANSI || MALLOC_VOID 220 void *malloc(); 221 #else 222 char *malloc(); 223 #endif 224 225 #define Malloc(x) malloc((unsigned) (x)) /* BSD */ 226 /* #define Malloc(x) malloc((size_t) (x)) */ /* System V */ 227 228 #define Free(x) (void) free((char *) (x)) /* BSD */ 229 /* #define Free(x) free((void *) (x)) */ /* System V */ 230 231 char *likelihood_key = "likelihood"; 232 char *ntaxa_key = "ntaxa"; 233 char *opt_level_key = "opt_level"; 234 char *smoothed_key = "smoothed"; 235 236 #define dnaml_h 237 #endif /* #if undef dnaml_h */ 238