This is an automated email from the git hooks/post-receive script. malex-guest pushed a commit to branch master in repository seq-gen.
commit 95dced205a29151807e7b4bbac80785456eb410d Author: Alexandre Mestiashvili <[email protected]> Date: Mon Oct 2 16:23:50 2017 +0200 New upstream version 1.3.4 --- .gitignore | 5 + documentation/Seq-Gen.Manual.html | 55 +++++++++- examples/seqs+trees.phy | 7 ++ source/aamodels.c | 4 +- source/aamodels.h | 4 +- source/eigen.c | 4 +- source/eigen.h | 4 +- source/evolve.c | 4 +- source/evolve.h | 4 +- source/gamma.c | 4 +- source/gamma.h | 4 +- source/global.c | 9 +- source/global.h | 4 +- source/model.c | 4 +- source/model.h | 4 +- source/nucmodels.c | 4 +- source/nucmodels.h | 4 +- source/progress.c | 4 +- source/progress.h | 4 +- source/seq-gen.c | 213 +++++++++++++++++++++----------------- source/tree.h | 4 +- source/treefile.c | 14 +-- source/treefile.h | 4 +- source/twister.c | 4 +- source/twister.h | 4 +- 25 files changed, 231 insertions(+), 148 deletions(-) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e519cba --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +._* +*.o +*~ +*.swp +source/seq-gen diff --git a/documentation/Seq-Gen.Manual.html b/documentation/Seq-Gen.Manual.html index 843bf10..850779a 100755 --- a/documentation/Seq-Gen.Manual.html +++ b/documentation/Seq-Gen.Manual.html @@ -2,18 +2,31 @@ <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <title>Seq-Gen: Simulation of molecular sequences</title> + <style>body { font-family: Helvetica, Arial, Sans-Serif; }</style> </head> <body> <center> <h1><i>Seq-Gen</i></h1> <h2>Sequence-Generator: An application for the Monte Carlo simulation of molecular sequence evolution along phylogenetic trees. <br> - Version 1.3.2</h2> + Version 1.3.4</h2> <p align="center"> <img width="32" height="32" src="icon.gif"> </p> - <h2><i>© Copyright 1996-2005<br> - Andrew Rambaut and Nick C. Grassly</i></h2> - <h2>Supported by <a href="http://www.royalsoc.ac.uk/">The Royal Society</a></h2> + <h2><i>© Copyright 1996-2017<br> + Andrew Rambaut and Nicholas C. Grassly</i></h2> + <h2>Supported by <a href="http://www.royalsoc.ac.uk/">The Royal Society of London</a></h2> + <address> + Institute of Evolutionary Biology, + <br> + University of Edinburgh, + <br> + Ashworth Laboratories, + <br> + King's Buildings, + <br> + Edinburgh EH9 2FL, U.K. + </address> + <br />Originally developed at: <address> Department of Zoology, <br> @@ -23,7 +36,41 @@ <br> Oxford OX1 3PS, U.K. </address> + <br /> </center> + <h4>New features and bugs fixed in version 1.3.4 - 16 Sept 2017</h4> + <ul> + <li> + FASTA format output (thanks to Kevin Murray) + </li> + <li> + Errors now return a non-zero error code. + </li> + <li> + White space at the end of the last sequence no longer prevents the tree from being read. + </li> + <li> + If the tree file was specified as a command line option the program was hanging. + </li> + <li> + Command line options now allows a space for the model (i.e., -m HKY). + </li> + <li> + Long standing error fixed when expanding memory allocated for big trees (thanks Fr�d�ric Lemoine). + </li> + </ul> + <h4>New features and bugs fixed in version 1.3.3 - 28 Oct 2011</h4> + <ul> + <li> + MtArt amino acid model added by Lars Jermiin. + </li> + <li> + Memory allocation bugs (thanks to Graham Jones for submitting a fix) + </li> + <li> + Rare array overflow causing odd characters in sequence. Thanks to Howard Ross, Jeff Thorne and Michael Ott for independently spotting this error and Michael and Lars Jermiin for submitting a fix. + </li> + </ul> <h4>Bug fixed in version 1.3.2 - 7 Jan 2005</h4> <ul> <li> diff --git a/examples/seqs+trees.phy b/examples/seqs+trees.phy new file mode 100644 index 0000000..ff20088 --- /dev/null +++ b/examples/seqs+trees.phy @@ -0,0 +1,7 @@ + 4 40 +Taxon1 ATCTTTGTAGTCATCGCCGTATTAGCATTCTTAGATCTAA +Taxon2 ATCCTAGTAGTCGCTTGCGCACTAGCCTTCCGAAATCTAG +Taxon3 ACTTCTGTGTTTACTGAGCTACTAGCTTCCCTAAATCTAG +Taxon4 ATTCCTATATTCGCTAATTTCTTAGCTTTCCTGAATCTGG +1 +(((Taxon1:0.2,Taxon2:0.2):0.1,Taxon3:0.3):0.1,Taxon4:0.4); diff --git a/source/aamodels.c b/source/aamodels.c index 3337ff4..f30f288 100755 --- a/source/aamodels.c +++ b/source/aamodels.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/aamodels.h b/source/aamodels.h index 815d392..f3e08f6 100755 --- a/source/aamodels.h +++ b/source/aamodels.h @@ -1,8 +1,8 @@ /* Header file for aamodels.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/eigen.c b/source/eigen.c index 4525c0f..d2468a0 100755 --- a/source/eigen.c +++ b/source/eigen.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh The code in this file is taken from Ziheng Yang's PAML package. diff --git a/source/eigen.h b/source/eigen.h index c23ac5c..23d23b2 100755 --- a/source/eigen.h +++ b/source/eigen.h @@ -1,8 +1,8 @@ /* Header file for eigen.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh The code in this file is taken from Ziheng Yang's PAML package. diff --git a/source/evolve.c b/source/evolve.c index 559bdd5..710d15f 100755 --- a/source/evolve.c +++ b/source/evolve.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/evolve.h b/source/evolve.h index 7f71fb5..be82c23 100755 --- a/source/evolve.h +++ b/source/evolve.h @@ -1,8 +1,8 @@ /* Header file for evolve.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/gamma.c b/source/gamma.c index 7d5f36e..8f34618 100755 --- a/source/gamma.c +++ b/source/gamma.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh The code in this file is taken from Ziheng Yang's PAML package. diff --git a/source/gamma.h b/source/gamma.h index a98bf60..9779b14 100755 --- a/source/gamma.h +++ b/source/gamma.h @@ -1,8 +1,8 @@ /* Header file for gamma.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh The code in this file is taken from Ziheng Yang's PAML package. diff --git a/source/global.c b/source/global.c index 3739d44..0df2ca3 100755 --- a/source/global.c +++ b/source/global.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. @@ -171,7 +171,7 @@ int GetUnsignedLongParams(int argc, char **argv, int *argn, char *pos, int numPa if (st==NULL) return -1; } - + if (sscanf(st, "%lu", params+i)!=1) return -1; i++; @@ -188,7 +188,7 @@ int GetStrParam(int argc, char **argv, int *argn, char *pos, char *param, int le { int i; char *st, *P, buf[256]; - + i=0; strcpy(buf, pos); st=strtok(buf, "\t,/"); @@ -202,6 +202,7 @@ int GetStrParam(int argc, char **argv, int *argn, char *pos, char *param, int le if (st==NULL) return -1; } + strncpy(param, st, len); param[len]='\0'; P=param; diff --git a/source/global.h b/source/global.h index 16bdef2..b028bca 100755 --- a/source/global.h +++ b/source/global.h @@ -1,8 +1,8 @@ /* Header file for global.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/model.c b/source/model.c index c148114..117a8ea 100755 --- a/source/model.c +++ b/source/model.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/model.h b/source/model.h index e3a755a..de1437e 100755 --- a/source/model.h +++ b/source/model.h @@ -1,8 +1,8 @@ /* Header file for model.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/nucmodels.c b/source/nucmodels.c index 7345b2b..71e33b0 100755 --- a/source/nucmodels.c +++ b/source/nucmodels.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/nucmodels.h b/source/nucmodels.h index 21d5568..918bd0a 100755 --- a/source/nucmodels.h +++ b/source/nucmodels.h @@ -1,8 +1,8 @@ /* Header file for nucmodels.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/progress.c b/source/progress.c index e484294..70b3ebd 100755 --- a/source/progress.c +++ b/source/progress.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/progress.h b/source/progress.h index b97d0ae..9ebc39d 100755 --- a/source/progress.h +++ b/source/progress.h @@ -1,8 +1,8 @@ /* Header file for progress.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/seq-gen.c b/source/seq-gen.c index 4372408..eb384bb 100755 --- a/source/seq-gen.c +++ b/source/seq-gen.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. @@ -54,7 +54,7 @@ #include "twister.h" #define PROGRAM_NAME "seq-gen" -#define VERSION_NUMBER "Version 1.3.2x" +#define VERSION_NUMBER "Version 1.3.4" int treeFile, textFile, numDatasets, numTrees; int scaleTrees, scaleBranches, ancestorSeq, writeAncestors, writeRates; @@ -87,9 +87,10 @@ static void PrintTitle() { fprintf(stderr, "Sequence Generator - %s\n", PROGRAM_NAME); fprintf(stderr, "%s\n", VERSION_NUMBER); - fprintf(stderr, "(c) Copyright, 1996-2004 Andrew Rambaut and Nick Grassly\n"); - fprintf(stderr, "Department of Zoology, University of Oxford\n"); - fprintf(stderr, "South Parks Road, Oxford OX1 3PS, U.K.\n\n"); + fprintf(stderr, "(c) Copyright, 1996-2017 Andrew Rambaut and Nick Grassly\n"); + fprintf(stderr, "Institute of Evolutionary Biology, University of Edinburgh\n\n"); + fprintf(stderr, "Originally developed at:\n"); + fprintf(stderr, "Department of Zoology, University of Oxford\n\n"); } static void PrintUsage() @@ -141,8 +142,9 @@ static void PrintUsage() void ReadParams(int argc, char **argv) { - int i, j; + int i, j, k; char ch, *P, st[4]; + int modelTwoArgs = 0; model=NONE; @@ -206,18 +208,16 @@ void ReadParams(int argc, char **argv) exit(0); break; case 'M': + k = i; if (GetStrParam(argc, argv, &i, P, st, 3)) { fprintf(stderr, "Bad (or missing) Model Code: %s\n\n", argv[i]); - exit(0); + exit(1); } - P=st; - while (*P) { - *P=toupper(*P); - P++; + if (i > k) { + modelTwoArgs = 1; } - P=st; - + model=-1; for (j=F84; j<numModels; j++) { if (strncmp(P, modelNames[j], 3)==0) { @@ -238,7 +238,7 @@ void ReadParams(int argc, char **argv) } if (model==-1) { fprintf(stderr, "Unknown Model: %s\n\n", argv[i]); - exit(0); + exit(1); } break; @@ -249,7 +249,7 @@ void ReadParams(int argc, char **argv) if (model==NONE) { fprintf(stderr, "No model has been specified (use the -m option)\n\n"); PrintUsage(); - exit(0); + exit(1); } for (i=1; i<argc; i++) { @@ -258,7 +258,7 @@ void ReadParams(int argc, char **argv) if (treeFile) { fprintf(stderr, "Illegal command parameter: %s\n\n", argv[i]); PrintUsage(); - exit(0); + exit(1); } treeFile=1; strcpy(treeFileName, argv[i]); @@ -280,73 +280,77 @@ void ReadParams(int argc, char **argv) break; case 'M': // already delt with + if (modelTwoArgs) { + // the model took two arguments so skip the second one. + i++; + } break; case 'L': if (GetIntParams(argc, argv, &i, P, 1, &numSites) || numSites<1) { fprintf(stderr, "Bad (or missing) sequence length: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'N': if (GetIntParams(argc, argv, &i, P, 1, &numDatasets) || numDatasets<1) { fprintf(stderr, "Bad (or missing) number of datasets: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'P': if (GetIntParams(argc, argv, &i, P, 1, &maxPartitions) || maxPartitions < 1) { fprintf(stderr, "Bad number of partitions: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'C': if (!isNucModel) { fprintf(stderr, "You can only have codon rates when using nucleotide models\n\n"); - exit(0); + exit(1); } if (rateHetero==GammaRates) { fprintf(stderr, "You can only have codon rates or gamma rates not both\n\n"); - exit(0); + exit(1); } numCats=3; rateHetero=CodonRates; if (GetDoubleParams(argc, argv, &i, P, 3, catRate) || catRate[0] <= 0.0 || catRate[1] <= 0.0 || catRate[2] <= 0.0 ) { fprintf(stderr, "Bad Category Rates: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'I': if (GetDoubleParams(argc, argv, &i, P, 1, &proportionInvariable) || proportionInvariable < 0.0 || proportionInvariable >= 1.0) { fprintf(stderr, "Bad Proportion of Invariable Sites: %s\n\n", argv[i]); - exit(0); + exit(1); } invariableSites = 1; break; case 'A': if (rateHetero==CodonRates) { fprintf(stderr, "You can only have codon rates or gamma rates not both\n\n"); - exit(0); + exit(1); } if (rateHetero==NoRates) rateHetero=GammaRates; if (GetDoubleParams(argc, argv, &i, P, 1, &gammaShape) || gammaShape<=0.0) { fprintf(stderr, "Bad Gamma Shape: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'G': if (rateHetero==CodonRates) { fprintf(stderr, "You can only have codon rates or gamma rates not both\n\n"); - exit(0); + exit(1); } rateHetero=DiscreteGammaRates; if (GetIntParams(argc, argv, &i, P, 1, &numCats) || numCats<2 || numCats>MAX_RATE_CATS) { fprintf(stderr, "Bad number of Gamma Categories: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'F': @@ -357,7 +361,7 @@ void ReadParams(int argc, char **argv) equalFreqs = 0; if (GetDoubleParams(argc, argv, &i, P, NUM_NUC, nucFreq)) { fprintf(stderr, "Bad Nucleotide Frequencies: %s\n\n", argv[i]); - exit(0); + exit(1); } } } else { @@ -371,7 +375,7 @@ void ReadParams(int argc, char **argv) equalFreqs = 0; if (GetDoubleParams(argc, argv, &i, P, NUM_AA, aaFreq)) { fprintf(stderr, "Bad Amino Acid Frequencies: %s\n\n", argv[i]); - exit(0); + exit(1); } } } @@ -379,19 +383,19 @@ void ReadParams(int argc, char **argv) case 'T': if (model != HKY && model != F84) { fprintf(stderr, "You can only have a transition/transversion ratio when using HKY or F84 models\n\n"); - exit(0); + exit(1); } equalTstv = 0; if (GetDoubleParams(argc, argv, &i, P, 1, &tstv)) { fprintf(stderr, "Bad Transition-Transversion Ratio: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'R': if (model == GTR) { if (GetDoubleParams(argc, argv, &i, P, NUM_NUC_REL_RATES, nucRelativeRates)) { fprintf(stderr, "Bad General Nucleotide Rate Matrix: %s\n\n", argv[i]); - exit(0); + exit(1); } if (nucRelativeRates[NUM_NUC_REL_RATES - 1]!=1.0) { for (j=0; j < NUM_NUC_REL_RATES - 1; j++) @@ -401,46 +405,46 @@ void ReadParams(int argc, char **argv) } else if ( model == GENERAL) { if (GetDoubleParams(argc, argv, &i, P, NUM_AA_REL_RATES, aaRelativeRate)) { fprintf(stderr, "Bad General Amino Acid Rate Matrix: %s\n\n", argv[i]); - exit(0); + exit(1); } } else { fprintf(stderr, "You can only have a general rate matrix when using GTR or GENERAL models\n\n"); - exit(0); + exit(1); } break; case 'D': scaleTrees=1; if (GetDoubleParams(argc, argv, &i, P, 1, &treeScale) || treeScale<=0.0) { fprintf(stderr, "Bad Total Tree Scale: %s\n\n", argv[i]); - exit(0); + exit(1); } if (scaleBranches) { fprintf(stderr, "You can't specify both the -d and -s options\n\n"); - exit(0); + exit(1); } break; case 'S': scaleBranches=1; if (GetDoubleParams(argc, argv, &i, P, 1, &branchScale) || branchScale<=0.0) { fprintf(stderr, "Bad Branch Length Scale: %s\n\n", argv[i]); - exit(0); + exit(1); } if (scaleTrees) { fprintf(stderr, "You can't specify both the -d and -s options\n\n"); - exit(0); + exit(1); } break; case 'K': if (GetIntParams(argc, argv, &i, P, 1, &ancestorSeq) || ancestorSeq<1) { fprintf(stderr, "Bad ancestral sequence number: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'Z': userSeed = 1; if (GetUnsignedLongParams(argc, argv, &i, P, 1, &randomSeed)) { fprintf(stderr, "Bad random number generator seed: %s\n\n", argv[i]); - exit(0); + exit(1); } break; case 'O': @@ -452,7 +456,7 @@ void ReadParams(int argc, char **argv) default: fprintf(stderr, "Unknown output format: %s\n\n", argv[i]); PrintUsage(); - exit(0); + exit(1); } break; case 'W': @@ -462,7 +466,7 @@ void ReadParams(int argc, char **argv) default: fprintf(stderr, "Unknown write mode: %s\n\n", argv[i]); PrintUsage(); - exit(0); + exit(1); } break; case 'Q': @@ -471,7 +475,7 @@ void ReadParams(int argc, char **argv) default: fprintf(stderr, "Illegal command parameter: %s\n\n", argv[i]); PrintUsage(); - exit(0); + exit(1); break; } } @@ -496,6 +500,13 @@ void PrintVerbose(FILE *fv) fputc('\n', fv); + if (hasAlignment) { + fprintf(fv, "Alignment read: numSequences = %d, numAlignmentSites = %d\n", numSequences, numAlignmentSites); + if (ancestorSeq > 0) { + fprintf(fv, "Using sequence %d as the ancestral sequence\n", ancestorSeq); + } + fputc('\n', fv); + } if (scaleTrees) { fprintf(fv, "Branch lengths of trees scaled so that tree is %G from root to tip\n\n", treeScale); @@ -562,21 +573,24 @@ void ReadFileParams() hasAlignment=0; - ch=fgetc(stdin); - while (!feof(stdin) && isspace(ch)) - ch=fgetc(stdin); + ch=fgetc(tree_fv); + while (!feof(tree_fv) && isspace(ch)) { + ch=fgetc(tree_fv); + } - ungetc(ch, stdin); + ungetc(ch, tree_fv); if (ch!='(' && isdigit(ch)) { - fgets(st, 255, stdin); + fgets(st, 255, tree_fv); if ( sscanf( st, " %d %d", &numSequences, &numAlignmentSites)!=2 ) { fprintf(stderr, "Unable to read parameters from standard input\n"); - exit(0); + exit(2); } + hasAlignment=1; - } +// fprintf(stderr, "%d sequences, %d sites\n", numSequences, numAlignmentSites); + } } void AllocateMemory() @@ -599,56 +613,64 @@ void ReadFile() n=0; do { - ch=fgetc(stdin); - while ( !feof(stdin) && isspace(ch)) - ch=fgetc(stdin); + ch=fgetc(tree_fv); + while ( !feof(tree_fv) && isspace(ch)) { + ch=fgetc(tree_fv); + } - if ( feof(stdin) ) { + if ( feof(tree_fv) ) { fprintf(stderr, "Unexpected end of file on standard input\n"); - exit(0); + exit(2); } - + i=0; - while ( i<MAX_NAME_LEN && !feof(stdin) && !isspace(ch) ) { + while ( i<MAX_NAME_LEN && !feof(tree_fv) && !isspace(ch) ) { names[n][i]=ch; - ch=fgetc(stdin); + ch=fgetc(tree_fv); i++; } names[n][i]='\0'; if (i==0) { fprintf(stderr, "Name missing for species %d\n", n+1); - exit(0); + exit(2); + } + while (!feof(tree_fv) && isspace(ch)) { + ch=fgetc(tree_fv); } - while (!feof(stdin) && isspace(ch)) - ch=fgetc(stdin); - if ( feof(stdin) ) { + if ( feof(tree_fv) ) { fprintf(stderr, "Unexpected end of file on standard input\n"); - exit(0); + exit(2); } b=0; - while ( !feof(stdin) && b<numAlignmentSites) { + while ( !feof(tree_fv) && b<numAlignmentSites) { if ( !isspace(ch) ) { sequences[n][b]=ch; b++; } - ch=toupper(fgetc(stdin)); + ch=toupper(fgetc(tree_fv)); } - + if ( b<numAlignmentSites ) { fprintf(stderr, "Unexpected end of file on standard input\n"); - exit(0); + exit(2); } - /*fprintf(stderr, "%d: %s, bases read: %d\n", n+1, names[n], b);*/ +// fprintf(stderr, "%d: %s, bases read: %d, %s\n", n+1, names[n], b, sequences[n]); + n++; - if ( n<numSequences && feof(stdin) ) { + if ( n<numSequences && feof(tree_fv) ) { fprintf(stderr, "Too few sequences in input file\n"); - exit(0); + exit(2); } } while ( n<numSequences ); + + while (!feof(tree_fv) && isspace(ch)) { + ch=fgetc(tree_fv); + } + ungetc(ch, tree_fv); } int OpenTreeFile() @@ -659,7 +681,7 @@ int OpenTreeFile() if (treeFile) { if ( (tree_fv=fopen(treeFileName, "rt"))==NULL ) { fprintf(stderr, "Error opening tree file: '%s'\n", treeFileName); - exit(0); + exit(3); } n=CountTrees(tree_fv); } else { @@ -668,7 +690,7 @@ int OpenTreeFile() fgets(st, 255, stdin); if ( sscanf(st, " %d ", &n)!=1 ) { fprintf(stderr, "Tree is missing from end of sequence file\n"); - exit(0); + exit(3); } } else n=CountTrees(stdin); @@ -693,7 +715,7 @@ int main(int argc, char **argv) if (rateHetero == CodonRates && invariableSites) { fprintf(stderr, "Invariable sites model cannot be used with codon rate heterogeneity.\n"); - exit(0); + exit(4); } if (writeAncestors && fileFormat == NEXUSFormat) { @@ -702,7 +724,7 @@ int main(int argc, char **argv) if (writeAncestors && maxPartitions > 1) { fprintf(stderr, "Writing ancestral sequences can only be used for a single partition.\n"); - exit(0); + exit(4); } if (!userSeed) @@ -713,19 +735,22 @@ int main(int argc, char **argv) if (!quiet) PrintTitle(); - if (!treeFile) { + numTrees = OpenTreeFile(); + + /* if (!treeFile) { */ ReadFileParams(); - } - + /*} */ + + if ((ancestorSeq>0 && !hasAlignment) || ancestorSeq>numSequences) { - fprintf(stderr, "Bad ancestral sequence number\n"); - exit(0); + fprintf(stderr, "Bad ancestral sequence number: %d (%d sequences loaded)\n", ancestorSeq, numSequences); + exit(4); } if (textFile) { if ( (text_fv=fopen(textFileName, "rt"))==NULL ) { fprintf(stderr, "Error opening text file for insertion into output: '%s'\n", textFileName); - exit(0); + exit(4); } } @@ -739,8 +764,8 @@ int main(int argc, char **argv) if (ancestorSeq>0) { if (numSites!=numAlignmentSites) { - fprintf(stderr, "Ancestral sequence is of a different length to the simulated sequences\n"); - exit(0); + fprintf(stderr, "Ancestral sequence is of a different length to the simulated sequences (%d)\n", numAlignmentSites); + exit(4); } ancestor=sequences[ancestorSeq-1]; } @@ -755,30 +780,28 @@ int main(int argc, char **argv) treeSet = (TTree **)malloc(sizeof(TTree **) * maxPartitions); if (treeSet==NULL) { fprintf(stderr, "Out of memory\n"); - exit(0); + exit(5); } partitionLengths = (int *)malloc(sizeof(int) * maxPartitions); if (partitionLengths==NULL) { fprintf(stderr, "Out of memory\n"); - exit(0); + exit(5); } partitionRates = (double *)malloc(sizeof(double) * maxPartitions); if (partitionRates==NULL) { fprintf(stderr, "Out of memory\n"); - exit(0); + exit(5); } for (i = 0; i < maxPartitions; i++) { if ((treeSet[i]=NewTree())==NULL) { fprintf(stderr, "Out of memory\n"); - exit(0); + exit(5); } } - - numTrees = OpenTreeFile(); - + CreateRates(); treeNo=0; @@ -800,7 +823,7 @@ int main(int argc, char **argv) } } else if (treeSet[0]->numTips != numTaxa) { fprintf(stderr, "All trees must have the same number of tips.\n"); - exit(0); + exit(4); } if (maxPartitions == 1) { @@ -817,7 +840,7 @@ int main(int argc, char **argv) if (!IsTreeAvail(tree_fv)) { fprintf(stderr, "\nA set of trees number %d had less partition length (%d) than\n", treeNo + 1, sumLength); fprintf(stderr, "was required to make a sequence of length %d.\n", numSites); - exit(0); + exit(4); } ReadTree(tree_fv, treeSet[i], treeNo+1, treeSet[0]->numTips, treeSet[0]->names, @@ -825,7 +848,7 @@ int main(int argc, char **argv) if (treeSet[i]->numTips != numTaxa) { fprintf(stderr, "All trees must have the same number of tips.\n"); - exit(0); + exit(4); } sumLength += partitionLengths[i]; @@ -840,7 +863,7 @@ int main(int argc, char **argv) if (sumLength != numSites) { fprintf(stderr, "The sum of the partition lengths in the treefile does not equal\n"); fprintf(stderr, "the specified number of sites.\n"); - exit(0); + exit(4); } for (i = 0; i < numPartitions; i++) @@ -871,7 +894,7 @@ int main(int argc, char **argv) if (scaleTrees) { if (!treeSet[j]->rooted) { fprintf(stderr, "To scale tree length, they must be rooted and ultrametric.\n"); - exit(0); + exit(4); } scale *= treeScale/treeSet[j]->totalLength; } else if (scaleBranches) diff --git a/source/tree.h b/source/tree.h index e1c564e..ca16b78 100755 --- a/source/tree.h +++ b/source/tree.h @@ -1,8 +1,8 @@ /* Header file to define tree and node structures */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/treefile.c b/source/treefile.c index e42b597..fbd33fc 100755 --- a/source/treefile.c +++ b/source/treefile.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. @@ -386,7 +386,7 @@ TNode *ReadNode(FILE *fv, TTree *tree, int numNames, char **names, int detectPol fprintf(stderr, "This tree contains nodes which aren't bifurcations. Resolve the node\n"); fprintf(stderr, "with zero branch lengths to obtain correct results. This can be done\n"); fprintf(stderr, "with a program called TreeEdit: http://evolve.zoo.ox.ac.uk/software/TreeEdit\n"); - exit(0); + exit(4); } if (feof(fv)) { @@ -475,7 +475,7 @@ void ReadTree(FILE *fv, TTree *tree, int treeNum, int numNames, char **names, if (ch == '[') { if (fscanf(fv, "%d", outNumSites)!=1) { sprintf(treeErrorMsg, "Unable to read partition length"); - exit(0); + exit(4); } ch=fgetc(fv); @@ -485,7 +485,7 @@ void ReadTree(FILE *fv, TTree *tree, int treeNum, int numNames, char **names, if (ch == ',') { if (fscanf(fv, "%lf", outRelRate)!=1) { sprintf(treeErrorMsg, "Unable to read partition relative rate"); - exit(0); + exit(4); } ch=fgetc(fv); @@ -496,7 +496,7 @@ void ReadTree(FILE *fv, TTree *tree, int treeNum, int numNames, char **names, if (ch!='(' || (tree->root=ReadNode(fv, tree, numNames, names, 0))==NULL) { fprintf(stderr, "Error reading tree number %d: %s.\n", treeNum, treeErrorMsg); - exit(0); + exit(4); } ch=fgetc(fv); @@ -507,7 +507,7 @@ void ReadTree(FILE *fv, TTree *tree, int treeNum, int numNames, char **names, tree->rooted=0; if ((tree->root->branch0=ReadBranch(fv, tree, numNames, names))==NULL) { fprintf(stderr, "Error reading tree number %d: %s.\n", treeNum, treeErrorMsg); - exit(0); + exit(4); } tree->root->branch0->branch0=tree->root; tree->root->length0=tree->root->branch0->length0; diff --git a/source/treefile.h b/source/treefile.h index 1e02fa4..81ca52f 100755 --- a/source/treefile.h +++ b/source/treefile.h @@ -1,8 +1,8 @@ /* Header file for treefile.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. diff --git a/source/twister.c b/source/twister.c index 07e90ca..38dbbd6 100755 --- a/source/twister.c +++ b/source/twister.c @@ -1,6 +1,6 @@ /* - Sequence Generator - seq-gen, version 1.3.3 - 1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh The code in this file is covered by the license and copyright message diff --git a/source/twister.h b/source/twister.h index 1e544b4..446db90 100755 --- a/source/twister.h +++ b/source/twister.h @@ -1,8 +1,8 @@ /* Header file for twister.c */ /* - Sequence Generator - seq-gen, version 1.3.3 - Copyright (c)1996-2011, Andrew Rambaut & Nick Grassly + Sequence Generator - seq-gen, version 1.3.4 + Copyright (c)1996-2017, Andrew Rambaut & Nick Grassly Institute of Evolutionary Biology, University of Edinburgh All rights reserved. -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/seq-gen.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
