void getoptions() { /* interactively set options */ long reps0; long inseed, inseed0, loopcount, loopcount2; Char ch; boolean done1; data = seqs; seq = dna; blocksize = 1; fracsample = 1.0; interleaved = true; loopcount = 0; initseed(&inseed, &inseed0, seed); /* These warnings only appear when user has changed an option that * subsequently became inapplicable */ } /* getoptions */
void maketree() { /* construct the tree */ long i; if (usertree) { /* Open in binary: ftell() is broken for UNIX line-endings under WIN32 */ openfile(&intree,INTREE,"input tree file", "rb",progname,intreename); numtrees = countsemic(&intree); if(numtrees > MAXSHIMOTREES) shimotrees = MAXSHIMOTREES; else shimotrees = numtrees; if (numtrees > 2) initseed(&inseed, &inseed0, seed); if (treeprint) { fprintf(outfile, "User-defined tree"); if (numtrees > 1) putc('s', outfile); putc('\n', outfile); } setuptree(&curtree, nonodes2); for (which = 1; which <= spp; which++) inittip(which, &curtree); which = 1; while (which <= numtrees) { for (i = 0 ; i < nonodes2 ; i++) { if ( i > spp) { /* must do this since not all nodes may be used if an unrooted tree is read in after a rooted one */ curtree.nodep[i]->back = NULL; curtree.nodep[i]->next->back = NULL; curtree.nodep[i]->next->next->back = NULL; } else curtree.nodep[i]->back = NULL; } treeread2 (intree, &curtree.start, curtree.nodep, lengths, &trweight, &goteof, &haslengths, &spp,false,nonodes2); curtree.start = curtree.nodep[outgrno - 1]->back; treevaluate(); printree(); summarize(); which++; } FClose(intree); if (numtrees > 1 && loci > 1 ) { weight = (long *)Malloc(loci*sizeof(long)); for (i = 0; i < loci; i++) weight[i] = 1; standev2(numtrees, maxwhich, 0, loci-1, maxlogl, l0gl, l0gf, seed); free(weight); fprintf(outfile, "\n\n"); } } else { /* if ( !usertree ) */ if (jumb == 1) { setuptree(&curtree, nonodes2); setuptree(&priortree, nonodes2); setuptree(&bestree, nonodes2); if (njumble > 1) setuptree(&bestree2, nonodes2); } for (i = 1; i <= spp; i++) enterorder[i - 1] = i; if (jumble) randumize(seed, enterorder); nextsp = 3; buildsimpletree(&curtree); curtree.start = curtree.nodep[enterorder[0] - 1]->back; if (jumb == 1) numtrees = 1; nextsp = 4; if (progress) { printf("Adding species:\n"); writename(0, 3, enterorder); #ifdef WIN32 phyFillScreenColor(); #endif } while (nextsp <= spp) { buildnewtip(enterorder[nextsp - 1], &curtree, nextsp); copy_(&curtree, &priortree); bestree.likelihood = -DBL_MAX; addtraverse(curtree.nodep[enterorder[nextsp - 1] - 1]->back, curtree.start, true ); copy_(&bestree, &curtree); if (progress) { writename(nextsp - 1, 1, enterorder); #ifdef WIN32 phyFillScreenColor(); #endif } if (global && nextsp == spp) { if (progress) { printf("\nDoing global rearrangements\n"); printf(" !"); for (i = 1; i <= spp - 2; i++) if ( (i - spp) % (( nonodes2 / 72 ) + 1 ) == 0 ) putchar('-'); printf("!\n"); printf(" "); } } succeeded = true; while (succeeded) { succeeded = false; if ( global && nextsp == spp ) globrearrange(); else rearrange(curtree.start); if (global && nextsp == spp) putc('\n', outfile); } if (global && nextsp == spp && progress) putchar('\n'); if (njumble > 1) { if (jumb == 1 && nextsp == spp) copy_(&bestree, &bestree2); else if (nextsp == spp) { if (bestree2.likelihood < bestree.likelihood) copy_(&bestree, &bestree2); } } if (nextsp == spp && jumb == njumble) { if (njumble > 1) copy_(&bestree2, &curtree); curtree.start = curtree.nodep[outgrno - 1]->back; printree(); summarize(); } nextsp++; } } if ( jumb < njumble) return; if (progress) { printf("\nOutput written to file \"%s\"\n", outfilename); if (trout) printf("\nTree also written onto file \"%s\"\n", outtreename); } freeview(&curtree, nonodes2); if (!usertree) { freeview(&bestree, nonodes2); freeview(&priortree, nonodes2); } for (i = 0; i < spp; i++) free(x[i]); if (!contchars) { free(locus); free(pbar); } } /* maketree */
void getoptions() { /* interactively set options */ long reps0; long inseed, inseed0, loopcount, loopcount2; Char ch; boolean done1; data = seqs; seq = dna; bootstrap = true; jackknife = false; permute = false; ild = false; lockhart = false; blocksize = 1; regular = true; fracsample = 1.0; all = false; reps = 100; weights = false; mixture = false; ancvar = false; categories = false; justwts = false; printdata = false; dotdiff = true; progress = true; interleaved = true; xml = false; nexus = false; factors = false; loopcount = 0; for (;;) { cleerhome(); printf("\nBootstrapping algorithm, version %s\n\n",VERSION); printf("Settings for this run:\n"); printf(" D Sequence, Morph, Rest., Gene Freqs? %s\n", (data == seqs ) ? "Molecular sequences" : (data == morphology ) ? "Discrete Morphology" : (data == restsites) ? "Restriction Sites" : (data == genefreqs) ? "Gene Frequencies" : ""); if (data == restsites) printf(" E Number of enzymes? %s\n", enzymes ? "Present in input file" : "Not present in input file"); if (data == genefreqs) printf(" A All alleles present at each locus? %s\n", all ? "Yes" : "No, one absent at each locus"); if ((!lockhart) && (data == morphology)) printf(" F Use factors information? %s\n", factors ? "Yes" : "No"); printf(" J Bootstrap, Jackknife, Permute, Rewrite? %s\n", regular && jackknife ? "Delete-half jackknife" : (!regular) && jackknife ? "Delete-fraction jackknife" : permute ? "Permute species for each character" : ild ? "Permute character order" : lockhart ? "Permute within species" : regular && bootstrap ? "Bootstrap" : (!regular) && bootstrap ? "Partial bootstrap" : rewrite ? "Rewrite data" : "(unknown)" ); if (bootstrap || jackknife) { printf(" %% Regular or altered sampling fraction? "); if (regular) printf("regular\n"); else { if (fabs(fracsample*100 - (int)(fracsample*100)) > 0.01) { printf("%.1f%% sampled\n", 100.0*fracsample); } else { printf("%.0f%% sampled\n", 100.0*fracsample); } } } if ((data == seqs) && rewrite) { printf(" P PHYLIP, NEXUS, or XML output format? %s\n", nexus ? "NEXUS" : xml ? "XML" : "PHYLIP"); if (xml || ((data == seqs) && nexus)) { printf(" S Type of molecular sequences? " ); switch (seq) { case (dna) : printf("DNA\n"); break; case (rna) : printf("RNA\n"); break; case (protein) : printf("Protein\n"); break; } } } if ((data == morphology) && rewrite) printf(" P PHYLIP or NEXUS output format? %s\n", nexus ? "NEXUS" : "PHYLIP"); if (bootstrap) { if (blocksize > 1) printf(" B Block size for block-bootstrapping? %ld\n", blocksize); else printf(" B Block size for block-bootstrapping? %ld (regular bootstrap)\n", blocksize); } if (!rewrite) printf(" R How many replicates? %ld\n", reps); if (jackknife || bootstrap || permute || ild) { printf(" W Read weights of characters? %s\n", (weights ? "Yes" : "No")); if (data == morphology) { printf(" X Read mixture file? %s\n", (mixture ? "Yes" : "No")); printf(" N Read ancestors file? %s\n", (ancvar ? "Yes" : "No")); } if (data == seqs) printf(" C Read categories of sites? %s\n", (categories ? "Yes" : "No")); if ((!permute)) { printf(" S Write out data sets or just weights? %s\n", (justwts ? "Just weights" : "Data sets")); } } if (data == seqs || data == restsites) printf(" I Input sequences interleaved? %s\n", interleaved ? "Yes" : "No, sequential"); printf(" 0 Terminal type (IBM PC, ANSI, none)? %s\n", ibmpc ? "IBM PC" : ansi ? "ANSI" : "(none)"); printf(" 1 Print out the data at start of run %s\n", printdata ? "Yes" : "No"); if (printdata) printf(" . Use dot-differencing to display them %s\n", dotdiff ? "Yes" : "No"); printf(" 2 Print indications of progress of run %s\n", progress ? "Yes" : "No"); printf("\n Y to accept these or type the letter for one to change\n"); #ifdef WIN32 phyFillScreenColor(); #endif fflush(stdout); scanf("%c%*[^\n]", &ch); getchar(); uppercase(&ch); if (ch == 'Y') break; if ( (bootstrap && (strchr("ABCDEFSJPRWXNI%1.20",ch) != NULL)) || (jackknife && (strchr("ACDEFSJPRWXNI%1.20",ch) != NULL)) || (permute && (strchr("ACDEFSJPRWXNI%1.20",ch) != NULL)) || ((ild || lockhart) && (strchr("ACDESJPRXNI%1.20",ch) != NULL)) || ((!(bootstrap || jackknife || permute || ild || lockhart)) && ((!xml) && (strchr("ADEFJPI1.20",ch) != NULL))) || (((data == morphology) || (data == seqs)) && (nexus || xml) && (strchr("ADEFJPSI1.20",ch) != NULL)) ) { switch (ch) { case 'D': if (data == genefreqs) data = seqs; else data = (datatype)((long)data + 1); break; case 'A': all = !all; break; case 'E': enzymes = !enzymes; break; case 'J': if (bootstrap) { bootstrap = false; jackknife = true; } else if (jackknife) { jackknife = false; permute = true; } else if (permute) { permute = false; ild = true; } else if (ild) { ild = false; lockhart = true; } else if (lockhart) { lockhart = false; rewrite = true; } else if (rewrite) { rewrite = false; bootstrap = true; } else { assert(0); /* Shouldn't happen */ bootstrap = true; jackknife = permute = ild = lockhart = rewrite = false; } break; case '%': regular = !regular; if (!regular) { loopcount2 = 0; do { printf("Samples as percentage of"); if ((data == seqs) || (data == restsites)) printf(" sites?\n"); if (data == morphology) printf(" characters?\n"); if (data == genefreqs) printf(" loci?\n"); fflush(stdout); scanf("%lf%*[^\n]", &fracsample); getchar(); done1 = (fracsample > 0.0); if (!done1) { printf("BAD NUMBER: must be positive\n"); } fracsample = fracsample/100.0; countup(&loopcount2, 10); } while (done1 != true); } break; case 'P': if (data == seqs) { if (!xml && !nexus) nexus = true; else { if (nexus) { nexus = false; xml = true; } else xml = false; } } if (data == morphology) { nexus = !nexus; xml = false; } break; case 'S': if(!rewrite){ justwts = !justwts; } else { switch (seq) { case (dna): seq = rna; break; case (rna): seq = protein; break; case (protein): seq = dna; break; } } break; case 'B': loopcount2 = 0; do { printf("Block size?\n"); #ifdef WIN32 phyFillScreenColor(); #endif fflush(stdout); scanf("%ld%*[^\n]", &blocksize); getchar(); done1 = (blocksize > 0); if (!done1) { printf("BAD NUMBER: must be positive\n"); } countup(&loopcount2, 10); } while (done1 != true); break; case 'R': reps0 = reps; loopcount2 = 0; do { printf("Number of replicates?\n"); #ifdef WIN32 phyFillScreenColor(); #endif fflush(stdout); scanf("%ld%*[^\n]", &reps); getchar(); done1 = (reps > 0); if (!done1) { printf("BAD NUMBER: must be positive\n"); reps = reps0; } countup(&loopcount2, 10); } while (done1 != true); break; case 'W': weights = !weights; break; case 'X': mixture = !mixture; break; case 'N': ancvar = !ancvar; break; case 'C': categories = !categories; break; case 'F': factors = !factors; break; case 'I': interleaved = !interleaved; break; case '0': initterminal(&ibmpc, &ansi); break; case '1': printdata = !printdata; break; case '.': dotdiff = !dotdiff; break; case '2': progress = !progress; break; } } else printf("Not a possible option!\n"); countup(&loopcount, 100); } if (bootstrap || jackknife) { if (jackknife && regular) fracsample = 0.5; if (bootstrap && regular) fracsample = 1.0; } if (!rewrite) initseed(&inseed, &inseed0, seed); /* These warnings only appear when user has changed an option that * subsequently became inapplicable */ if (factors && lockhart) { printf("Warning: Cannot use factors when permuting within species.\n"); factors = false; } if (data != seqs) { if (xml) { printf("warning: XML output not available for this type of data\n"); xml = false; } if (categories) { printf("warning: cannot use categories file with this type of data\n"); categories = false; } } if (data != morphology) { if (mixture) { printf("warning: cannot use mixture file with this type of data\n"); mixture = false; } if (ancvar) { printf("warning: cannot use ancestors file with this type of data\n"); ancvar = false; } } } /* getoptions */
void getoptions() { /* interactively set options */ long inseed0=0, loopcount; Char ch; boolean done=false; putchar('\n'); minev = false; global = false; jumble = false; njumble = 1; lengths = false; lower = false; negallowed = false; outgrno = 1; outgropt = false; power = 2.0; replicates = false; trout = true; upper = false; usertree = false; printdata = false; progress = true; treeprint = true; loopcount = 0; do { cleerhome(); printf("\nFitch-Margoliash method version %s\n\n",VERSION); printf("Settings for this run:\n"); printf(" D Method (F-M, Minimum Evolution)? %s\n", (minev ? "Minimum Evolution" : "Fitch-Margoliash")); printf(" U Search for best tree? %s\n", (usertree ? "No, use user trees in input file" : "Yes")); if (usertree) { printf(" N Use lengths from user trees? %s\n", (lengths ? "Yes" : "No")); } printf(" P Power?%9.5f\n",power); printf(" - Negative branch lengths allowed? %s\n", negallowed ? "Yes" : "No"); printf(" O Outgroup root?"); if (outgropt) printf(" Yes, at species number%3ld\n", outgrno); else printf(" No, use as outgroup species%3ld\n", outgrno); printf(" L Lower-triangular data matrix?"); if (lower) printf(" Yes\n"); else printf(" No\n"); printf(" R Upper-triangular data matrix?"); if (upper) printf(" Yes\n"); else printf(" No\n"); printf(" S Subreplicates?"); if (replicates) printf(" Yes\n"); else printf(" No\n"); if (!usertree) { printf(" G Global rearrangements?"); if (global) printf(" Yes\n"); else printf(" No\n"); printf(" J Randomize input order of species?"); if (jumble) printf(" Yes (seed =%8ld,%3ld times)\n", inseed0, njumble); else printf(" No. Use input order\n"); } printf(" M Analyze multiple data sets?"); if (mulsets) printf(" Yes, %2ld sets\n", datasets); else printf(" No\n"); printf(" 0 Terminal type (IBM PC, ANSI, none)?"); if (ibmpc) printf(" IBM PC\n"); if (ansi) printf(" ANSI\n"); if (!(ibmpc || ansi)) printf(" (none)\n"); printf(" 1 Print out the data at start of run"); if (printdata) printf(" Yes\n"); else printf(" No\n"); printf(" 2 Print indications of progress of run"); if (progress) printf(" Yes\n"); else printf(" No\n"); printf(" 3 Print out tree"); if (treeprint) printf(" Yes\n"); else printf(" No\n"); printf(" 4 Write out trees onto tree file?"); if (trout) printf(" Yes\n"); else printf(" No\n"); printf( "\n Y to accept these or type the letter for one to change\n"); #ifdef WIN32 phyFillScreenColor(); #endif scanf("%c%*[^\n]", &ch); getchar(); uppercase(&ch); done = (ch == 'Y'); if (!done) { if (strchr("DJOUNPG-LRSM01234",ch) != NULL) { switch (ch) { case 'D': minev = !minev; if (minev && (!negallowed)) negallowed = true; break; case '-': negallowed = !negallowed; break; case 'G': global = !global; break; case 'J': jumble = !jumble; if (jumble) initjumble(&inseed, &inseed0, seed, &njumble); else njumble = 1; break; case 'L': lower = !lower; break; case 'N': lengths = !lengths; break; case 'O': outgropt = !outgropt; if (outgropt) initoutgroup(&outgrno, spp); break; case 'P': initpower(&power); break; case 'R': upper = !upper; break; case 'S': replicates = !replicates; break; case 'U': usertree = !usertree; break; case 'M': mulsets = !mulsets; if (mulsets) initdatasets(&datasets); jumble = true; if (jumble) initseed(&inseed, &inseed0, seed); break; case '0': initterminal(&ibmpc, &ansi); break; case '1': printdata = !printdata; break; case '2': progress = !progress; break; case '3': treeprint = !treeprint; break; case '4': trout = !trout; break; } } else printf("Not a possible option!\n"); } countup(&loopcount, 100); } while (!done); if (lower && upper) { printf("ERROR: Data matrix cannot be both uppeR and Lower triangular\n"); exxit(-1); } } /* getoptions */
void getoptions() { /* interactively set options */ long inseed0 = 0, loopcount; Char ch; fprintf(outfile, "\nNeighbor-Joining/UPGMA method version %s\n\n",VERSION); putchar('\n'); jumble = false; lower = false; outgrno = 1; outgropt = false; replicates = false; trout = true; upper = false; printdata = false; progress = true; treeprint = true; njoin = true; loopcount = 0; for(;;) { cleerhome(); printf("\nNeighbor-Joining/UPGMA method version %s\n\n",VERSION); printf("Settings for this run:\n"); printf(" N Neighbor-joining or UPGMA tree? %s\n", (njoin ? "Neighbor-joining" : "UPGMA")); if (njoin) { printf(" O Outgroup root?"); if (outgropt) printf(" Yes, at species number%3ld\n", outgrno); else printf(" No, use as outgroup species%3ld\n", outgrno); } printf(" L Lower-triangular data matrix? %s\n", (lower ? "Yes" : "No")); printf(" R Upper-triangular data matrix? %s\n", (upper ? "Yes" : "No")); printf(" S Subreplicates? %s\n", (replicates ? "Yes" : "No")); printf(" J Randomize input order of species?"); if (jumble) printf(" Yes (random number seed =%8ld)\n", inseed0); else printf(" No. Use input order\n"); printf(" M Analyze multiple data sets?"); if (mulsets) printf(" Yes, %2ld sets\n", datasets); else printf(" No\n"); printf(" 0 Terminal type (IBM PC, ANSI, none)? %s\n", (ibmpc ? "IBM PC" : ansi ? "ANSI" : "(none)")); printf(" 1 Print out the data at start of run %s\n", (printdata ? "Yes" : "No")); printf(" 2 Print indications of progress of run %s\n", (progress ? "Yes" : "No")); printf(" 3 Print out tree %s\n", (treeprint ? "Yes" : "No")); printf(" 4 Write out trees onto tree file? %s\n", (trout ? "Yes" : "No")); printf("\n\n Y to accept these or type the letter for one to change\n"); #ifdef WIN32 phyFillScreenColor(); #endif scanf("%c%*[^\n]", &ch); getchar(); if (ch == '\n') ch = ' '; uppercase(&ch); if (ch == 'Y') break; if (strchr("NJOULRSM01234",ch) != NULL){ switch (ch) { case 'J': jumble = !jumble; if (jumble) initseed(&inseed, &inseed0, seed); break; case 'L': lower = !lower; break; case 'O': outgropt = !outgropt; if (outgropt) initoutgroup(&outgrno, spp); else outgrno = 1; break; case 'R': upper = !upper; break; case 'S': replicates = !replicates; break; case 'N': njoin = !njoin; break; case 'M': mulsets = !mulsets; if (mulsets) initdatasets(&datasets); jumble = true; if (jumble) initseed(&inseed, &inseed0, seed); break; case '0': initterminal(&ibmpc, &ansi); break; case '1': printdata = !printdata; break; case '2': progress = !progress; break; case '3': treeprint = !treeprint; break; case '4': trout = !trout; break; } } else printf("Not a possible option!\n"); countup(&loopcount, 100); } } /* getoptions */