source: branches/profile/GDE/FASTDNAML/fastDNAml.h

Last change on this file was 775, checked in by westram, 22 years ago

original version 1.2.2

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.2 KB
Line 
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  \
39115792089237316195423570985008687907853269984665640564039457584007913129639936.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
79typedef  int     boolean;
80typedef  double  xtype;
81
82typedef  struct  likelihood_vector {
83    xtype        a, c, g, t;
84    long         exp;
85    } likelivector;
86
87typedef  struct  xmantyp {
88    struct xmantyp  *prev;
89    struct xmantyp  *next;
90    struct noderec  *owner;
91    likelivector    *lv;
92    } xarray;
93
94typedef  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
105typedef  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
123typedef  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
134typedef  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
156typedef 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
164typedef  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
181typedef 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
194typedef  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
212typedef  struct {
213    double           tipmax;
214    int              tipy;
215    } drawdata;
216
217void  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
231char *likelihood_key   = "likelihood";
232char *ntaxa_key        = "ntaxa";
233char *opt_level_key    = "opt_level";
234char *smoothed_key     = "smoothed";
235
236#define dnaml_h
237#endif  /* #if undef dnaml_h */
Note: See TracBrowser for help on using the repository browser.