This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository raxml.

commit b5ace89968896512a9ae0458cb746c1dd3dcfc9d
Author: Andreas Tille <[email protected]>
Date:   Mon Mar 14 11:16:20 2016 +0100

    Imported Upstream version 8.2.7+dfsg
---
 README               |  13 ++-
 Release-Notes        |  13 ---
 axml.c               | 242 +++++++++++++++++++++++++++++++++++++++++++++++++--
 axml.h               |  12 +--
 bipartitionList.c    |  30 +++----
 manual/NewManual.odt | Bin 136386 -> 136750 bytes
 manual/NewManual.pdf | Bin 633051 -> 633998 bytes
 multiple.c           |  32 +++----
 optimizeModel.c      |   2 +-
 treeIO.c             |  56 ++++++++++--
 10 files changed, 337 insertions(+), 63 deletions(-)

diff --git a/README b/README
index 6c63aed..1132b20 100644
--- a/README
+++ b/README
@@ -1,6 +1,15 @@
-Standard RAxML version 8.2.3
+Standard RAxML version 8.2.7
 
-Compiling under Linux:
+============================================================================================================
+
+When using RAxML please cite the following paper:
+
+A. Stamatakis: "RAxML Version 8: A tool for Phylogenetic Analysis and 
Post-Analysis of Large Phylogenies". 
+Bioinformatics (2014) 30 (9): 1312-1313.
+
+============================================================================================================
+
+Quick start under Linux:
 
 standard, SSE3 or AVX version?
 
diff --git a/Release-Notes b/Release-Notes
deleted file mode 100644
index 842f227..0000000
--- a/Release-Notes
+++ /dev/null
@@ -1,13 +0,0 @@
-RAxML v8.2.3
-
-We view RAxML code development as permanent work in progress.
-
-As such, there are no fixed version available via github but only perpetual 
code modifications.
-
-For reproducible science, we suggest that you actually include a copy of the 
actual RAxML source code you used 
-in any data you make available or you intend to archive with the respective 
publication.
-
-If you want to see what has been changed, have a look at the commit history 
under:
-
-https://github.com/stamatak/standard-RAxML/commits/master/
-
diff --git a/axml.c b/axml.c
index ea01887..e10fc12 100644
--- a/axml.c
+++ b/axml.c
@@ -3050,7 +3050,181 @@ static void checkSequences(tree *tr, rawdata *rdta, 
analdef *adef)
 
 
 
+static void printPartitionFile(tree *tr, analdef *adef, char* newPartitionFile)
+{
+  if(adef->useMultipleModel && !filexists(newPartitionFile))
+    {
+      FILE 
+       *newFile = myfopen(newPartitionFile, "wb");
+     
+      int      
+       i,
+       l = 1,
+       partitions = 0;
+
+      printBothOpen("\n\nA partitioned model file with model assignments for 
bootstrap alignments \n");
+      printBothOpen("is printed to file %s\n",newPartitionFile);
+      printBothOpen("IMPORTANT: You MUST use this new model file and NOT the 
original one when running RAxML and ExaML on these bootstrapped 
alignments!\n\n");
+
+
+      for(i = 1; i < tr->cdta->endsite; i++)
+       assert(tr->model[i] >= tr->model[i-1]); 
+              
+      for(i = 0; i < tr->NumberOfModels; i++)
+       {
+         int      
+           lower, 
+           upper;
+
+           switch(tr->partitionData[i].dataType)
+             {
+             case AA_DATA:
+               {
+                 char
+                   AAmodel[1024];
+
+                 if(tr->partitionData[i].protModels != PROT_FILE)
+                   {
+                     if(tr->partitionData[i].ascBias)
+                       {
+                         strcpy(AAmodel, "ASC_");
+                         strcat(AAmodel, 
protModels[tr->partitionData[i].protModels]);
+                       }
+                     else
+                       strcpy(AAmodel, 
protModels[tr->partitionData[i].protModels]);
+                     if(tr->partitionData[i].usePredefinedProtFreqs == FALSE)
+                       strcat(AAmodel, "F");
+
+                     if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                       strcat(AAmodel, "X");
+
+                     assert(!(tr->partitionData[i].optimizeBaseFrequencies && 
tr->partitionData[i].usePredefinedProtFreqs));
+
+                     fprintf(newFile, "%s, ", AAmodel);
+                   }
+                 else
+                   fprintf(newFile, "[%s], ", 
tr->partitionData[i].proteinSubstitutionFileName);
+               }
+               break;
+             case DNA_DATA:
+               if(tr->partitionData[i].ascBias)
+                 {
+                   if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "ASC_DNAX, ");
+                   else
+                     fprintf(newFile, "ASC_DNA, ");
+                 }
+               else
+                 {
+                   if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "DNAX, ");
+                   else
+                     fprintf(newFile, "DNA, ");
+                 }
+               break;
+             case BINARY_DATA:
+                if(tr->partitionData[i].ascBias)
+                  {
+                    if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                      fprintf(newFile, "ASC_BINX, ");
+                    else
+                      fprintf(newFile, "ASC_BIN, ");
+                  }
+                else
+                  {
+                    if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                      fprintf(newFile, "BINX, ");
+                    else
+                      fprintf(newFile, "BIN, ");
+                  }
+               break;
+             case GENERIC_32:
+               if(tr->partitionData[i].ascBias)
+                 {
+                   if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "ASC_MULTIX, ");
+                   else
+                     fprintf(newFile, "ASC_MULTI, ");
+                 }
+               else
+                 {
+                    if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "MULTIX, ");
+                    else
+                     fprintf(newFile, "MULTI, ");
+                 }
+               break;
+             case GENERIC_64:
+               if(tr->partitionData[i].ascBias)
+                 {
+                   if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "ASC_CODONX, ");
+                   else
+                     fprintf(newFile, "ASC_CODON, ");
+                 }
+               else
+                 {
+                    if(tr->partitionData[i].optimizeBaseFrequencies == TRUE)
+                     fprintf(newFile, "CODONX, ");
+                   else
+                     fprintf(newFile, "CODON, ");
+                 }
+               break;
+             default:
+               assert(0);
+             }
 
+           fprintf(newFile, "%s = ", tr->partitionData[i].partitionName);
+
+           int 
+             k = 0;
+           
+           while(k < tr->cdta->endsite)
+             {
+               if(tr->model[k] == i)
+                 {
+                   lower = l;
+                   
+                   do
+                     {
+                       l += tr->cdta->aliaswgt[k];
+                     }
+                   while((++k < tr->cdta->endsite) && (tr->model[k] == i) );
+                   
+                   upper = l-1;
+
+                   if(lower == upper)                                 
+                     fprintf(newFile, "%d", lower);             
+                   else
+                     {
+                       assert(lower < upper);                  
+                       fprintf(newFile, "%d-%d", lower, upper);                
  
+                     }            
+                   partitions++;
+                 }
+               else
+                 k++;
+             }
+            //printf("k: %d, cdta: %d\n", k, tr->cdta->endsite);
+            assert(k == tr->cdta->endsite);        
+           fprintf(newFile, "\n");
+       }
+      
+      assert(partitions == tr->NumberOfModels);
+      //printf("l:%d, rdta: %d\n", l, tr->rdta->sites);
+      assert(l == tr->rdta->sites + 1);
+      //assert(parts == tr->NumberOfModels);
+      fclose(newFile);      
+    }
+  else
+    {
+      if(adef->useMultipleModel)
+       {
+         printBothOpen("\nA partitioned model file with model assignments for 
bootstrap alignments\n");
+         printBothOpen("has already been printed to  file 
%s\n",newPartitionFile);
+       }
+    }
+}
 
 static void generateBS(tree *tr, analdef *adef)
 {
@@ -3060,11 +3234,28 @@ static void generateBS(tree *tr, analdef *adef)
     k, 
     w;
   
-  char outName[1024], buf[16];
+  char outName[1024], partName[1024], buf[16];
   FILE *of;
 
   assert(adef->boot != 0);
 
+  {
+    int 
+      i,
+      w = 0;
+
+    for(i = 0; i < tr->cdta->endsite; i++)
+      w += tr->cdta->aliaswgt[i];        
+
+    if(w < tr->rdta->sites)
+      {
+       printBothOpen("Error in BS replicate generation. Apparently your input 
alignment contains %d completely undetermined sites.\n", tr->rdta->sites - w);
+       printBothOpen("RAxML cowardly refuses to generate BS replicate MSAs on 
original MSAs containing entirely undetermined sites.\n\n");
+       errorExit(-1);
+      }
+  }
+  
+
   for(i = 0; i < adef->multipleRuns; i++)
     {
       int 
@@ -3078,6 +3269,17 @@ static void generateBS(tree *tr, analdef *adef)
 
       assert(count == tr->fullSites);
 
+      /* generate model file name */
+      strcpy(partName, workdir);
+      strcat(partName, modelFileName);
+      strcat(partName, ".BS");
+      sprintf(buf, "%d", i);
+      strcat(partName, buf);
+      
+      printPartitionFile(tr, adef, partName);
+      /*******/
+       
+
       strcpy(outName, workdir);
       strcat(outName, seq_file);
       strcat(outName, ".BS");
@@ -3085,6 +3287,7 @@ static void generateBS(tree *tr, analdef *adef)
       strcat(outName, buf);
       printf("Printing replicate %d to %s\n", i, outName);
 
+
       of = myfopen(outName, "wb");
 
       fprintf(of, "%d %d\n", tr->mxtips, count);
@@ -3499,6 +3702,8 @@ static void initAdef(analdef *adef)
   adef->noSequenceCheck = FALSE;
   adef->useBFGS = TRUE;
   adef->setThreadAffinity = FALSE;
+  adef->bootstopPermutations = 100;
+  adef->fcThreshold = 99;
 }
 
 static int modelExists(char *model, analdef *adef)
@@ -4776,6 +4981,7 @@ static void printREADME(void)
 #if (defined(_WAYNE_MPI) && defined(_USE_PTHREADS))
   printf("      [--set-thread-affinity]\n");
 #endif
+  printf("      [--bootstop-perms=number]\n");
   printf("\n");
   printf("      -a      Specify a column weight file name to assign individual 
weights to each column of \n");
   printf("              the alignment. Those weights must be integers 
separated by any type and number \n");
@@ -5219,6 +5425,11 @@ static void printREADME(void)
   printf("                  DEFAULT: Off\n");  
   printf("\n");
 #endif
+  printf("\n");
+  printf("      --bootstop-perms=number specify the number of permutations to 
be conducted for the bootstopping/bootstrap convergence test.\n");
+  printf("                  The allowed minimum number is 100!\n");
+  printf("\n");
+  printf("                  DEFAULT: 100\n"); 
   printf("\n\n\n\n");
 
 }
@@ -5368,7 +5579,7 @@ static void get_args(int argc, char *argv[], analdef 
*adef, tree *tr)
   while(1)
     {      
       static struct 
-       option long_options[15] =
+       option long_options[16] =
        {        
          {"mesquite",                  no_argument,       &flag, 1},
          {"silent",                    no_argument,       &flag, 1},
@@ -5384,6 +5595,7 @@ static void get_args(int argc, char *argv[], analdef 
*adef, tree *tr)
          {"K80",                       no_argument,       &flag, 1},
          {"HKY85",                     no_argument,       &flag, 1},           
         
          {"set-thread-affinity",       no_argument,       &flag, 1},
+         {"bootstop-perms",            required_argument, &flag, 1},
          {0, 0, 0, 0}
        };
       
@@ -5573,6 +5785,21 @@ static void get_args(int argc, char *argv[], analdef 
*adef, tree *tr)
              printf("Warning: flag --set-thread-affinity has no effect if you 
don't use the hybrid MPI-PThreads version\n");
 #endif
              break;
+           case 14:
+             {
+               int 
+                 perms = -1;
+               
+               if(sscanf(optarg,"%d", &perms) != 1 || (perms < 100))
+                 {
+                   printf("\nError parsing number of bootstop permutations to 
execute, RAxML expects a positive integer value larger or equal to 100\n\n");
+                   errorExit(-1);
+                 }
+               
+               adef->bootstopPermutations = perms;
+               adef->fcThreshold = perms - round((double)perms / 100.0);       
        
+             }
+             break;
            default:
              if(flagCheck)
                {
@@ -9779,10 +10006,13 @@ static void execFunction(tree *tr, tree *localTree, 
int tid, int n)
        {
          for(model = 0; model < localTree->NumberOfModels; model++)
            {
-             memcpy(localTree->partitionData[model].EIGN_LG4[0],    
tr->partitionData[model].EIGN_LG4[0],    sizeof(double) * 19);
-             memcpy(localTree->partitionData[model].EIGN_LG4[1],    
tr->partitionData[model].EIGN_LG4[1],    sizeof(double) * 19);
-             memcpy(localTree->partitionData[model].EIGN_LG4[2],    
tr->partitionData[model].EIGN_LG4[2],    sizeof(double) * 19);
-             memcpy(localTree->partitionData[model].EIGN_LG4[3],    
tr->partitionData[model].EIGN_LG4[3],    sizeof(double) * 19);
+             if(tr->partitionData[model].protModels == LG4 || 
tr->partitionData[model].protModels == LG4X)
+               {
+                 memcpy(localTree->partitionData[model].EIGN_LG4[0],    
tr->partitionData[model].EIGN_LG4[0],    sizeof(double) * 19);
+                 memcpy(localTree->partitionData[model].EIGN_LG4[1],    
tr->partitionData[model].EIGN_LG4[1],    sizeof(double) * 19);
+                 memcpy(localTree->partitionData[model].EIGN_LG4[2],    
tr->partitionData[model].EIGN_LG4[2],    sizeof(double) * 19);
+                 memcpy(localTree->partitionData[model].EIGN_LG4[3],    
tr->partitionData[model].EIGN_LG4[3],    sizeof(double) * 19);
+               }
            }
        }
       break;
diff --git a/axml.h b/axml.h
index c3eca24..ee7933a 100644
--- a/axml.h
+++ b/axml.h
@@ -168,9 +168,9 @@
 #define PointGamma(prob,alpha,beta)  PointChi2(prob,2.0*(alpha))/(2.0*(beta))
 
 #define programName        "RAxML"
-#define programVersion     "8.2.4"
-#define programVersionInt   8240
-#define programDate        "October 02 2015"
+#define programVersion     "8.2.7"
+#define programVersionInt   8270
+#define programDate        "March 10 2016"
 
 
 #define  TREE_EVALUATION                 0
@@ -268,10 +268,10 @@
 
 /* bootstopping stuff */
 
-#define BOOTSTOP_PERMUTATIONS 100
+//#define BOOTSTOP_PERMUTATIONS 100
 #define START_BSTOP_TEST      10
 
-#define FC_THRESHOLD          99
+//#define FC_THRESHOLD          99
 #define FC_SPACING            50
 #define FC_LOWER              0.99
 #define FC_INIT               20
@@ -1173,6 +1173,8 @@ typedef  struct {
   boolean       noSequenceCheck;
   boolean       useBFGS;
   boolean       setThreadAffinity;
+  int           bootstopPermutations;
+  int           fcThreshold; 
 } analdef;
 
 
diff --git a/bipartitionList.c b/bipartitionList.c
index 05dc1c0..f17930f 100644
--- a/bipartitionList.c
+++ b/bipartitionList.c
@@ -3685,7 +3685,7 @@ void computeBootStopOnly(tree *tr, char 
*bootStrapFileName, analdef *adef)
 
   checkTreeNumber(tr->numberOfTrees, bootStrapFileName);
 
-  assert((FC_SPACING % 2 == 0) && (FC_THRESHOLD < BOOTSTOP_PERMUTATIONS));
+  assert((FC_SPACING % 2 == 0) && (adef->fcThreshold < 
adef->bootstopPermutations));
    
   numberOfTrees = tr->numberOfTrees;
  
@@ -3738,10 +3738,10 @@ void computeBootStopOnly(tree *tr, char 
*bootStrapFileName, analdef *adef)
          switch(tr->bootStopCriterion)
            {
            case FREQUENCY_STOP:
-             avg = frequencyCriterion(i, h, &countBetter, 
BOOTSTOP_PERMUTATIONS, adef);                          
+             avg = frequencyCriterion(i, h, &countBetter, 
adef->bootstopPermutations, adef);                     
              printBothOpen("%d \t\t\t %f \t\t\t\t %d\n", i, avg, countBetter);
                  
-             stop = (countBetter >= FC_THRESHOLD && avg >= FC_LOWER);          
 
+             stop = (countBetter >= adef->fcThreshold && avg >= FC_LOWER);     
         
              break;
            case MR_STOP:
            case MRE_STOP:
@@ -3750,10 +3750,10 @@ void computeBootStopOnly(tree *tr, char 
*bootStrapFileName, analdef *adef)
                double 
                  wrf_thresh_avg = 0.0,
                  wrf_avg = 0.0;
-               avg = wcCriterion(i, h, &countBetter, &wrf_thresh_avg, 
&wrf_avg, tr, vectorLength, BOOTSTOP_PERMUTATIONS, adef);
+               avg = wcCriterion(i, h, &countBetter, &wrf_thresh_avg, 
&wrf_avg, tr, vectorLength, adef->bootstopPermutations, adef);
                printBothOpen("%d \t\t %1.2f \t\t\t %d\n", i, avg, 
countBetter);               
                
-               stop = (countBetter >= FC_THRESHOLD && wrf_avg <= 
wrf_thresh_avg);
+               stop = (countBetter >= adef->fcThreshold && wrf_avg <= 
wrf_thresh_avg);
              }
              break;
            default:
@@ -3825,10 +3825,10 @@ boolean computeBootStopMPI(tree *tr, char 
*bootStrapFileName, analdef *adef, dou
   assert(sizeof(unsigned char) == 1);
   
 
-  if(BOOTSTOP_PERMUTATIONS % processes == 0)
-    bootStopPermutations = BOOTSTOP_PERMUTATIONS / processes;
+  if(adef->bootstopPermutations % processes == 0)
+    bootStopPermutations = adef->bootstopPermutations / processes;
   else
-    bootStopPermutations = 1 + (BOOTSTOP_PERMUTATIONS / processes);
+    bootStopPermutations = 1 + (adef->bootstopPermutations / processes);
   
   /*printf("Perms %d\n",  bootStopPermutations);*/
 
@@ -3869,7 +3869,7 @@ boolean computeBootStopMPI(tree *tr, char 
*bootStrapFileName, analdef *adef, dou
        
        /*printf("%d %f %f\n", processID, allIn[0], allIn[1]);*/
 
-       stop = (((int)allIn[0]) >= FC_THRESHOLD && (allIn[1] / 
((double)processes)) >= FC_LOWER);
+       stop = (((int)allIn[0]) >= adef->fcThreshold && (allIn[1] / 
((double)processes)) >= FC_LOWER);
 
        *pearsonAverage = (allIn[1] / ((double)processes));
       }
@@ -3899,7 +3899,7 @@ boolean computeBootStopMPI(tree *tr, char 
*bootStrapFileName, analdef *adef, dou
        
        /*printf("%d %f %f %f\n", processID, allIn[0], allIn[1], allIn[2]);*/
        
-       stop = (((int)allIn[0]) >= FC_THRESHOLD && (allIn[2] / 
((double)processes)) <= (allIn[1] / ((double)processes)));
+       stop = (((int)allIn[0]) >= adef->fcThreshold && (allIn[2] / 
((double)processes)) <= (allIn[1] / ((double)processes)));
 
        *pearsonAverage = (allIn[3] / ((double)processes));
       }
@@ -3926,7 +3926,7 @@ boolean bootStop(tree *tr, hashtable *h, int 
numberOfTrees, double *pearsonAvera
     n = numberOfTrees + 1,
     bCount = 0;
 
-  assert((FC_SPACING % 2 == 0) && (FC_THRESHOLD < BOOTSTOP_PERMUTATIONS));
+  assert((FC_SPACING % 2 == 0) && (adef->fcThreshold < 
adef->bootstopPermutations));
   assert(tr->mxtips == tr->rdta->numsp);
 
   bitVectorInitravSpecial(bitVectors, tr->nodep[1]->back, tr->mxtips, 
vectorLength, h, numberOfTrees, BIPARTITIONS_BOOTSTOP, (branchInfo *)NULL,
@@ -3940,9 +3940,9 @@ boolean bootStop(tree *tr, hashtable *h, int 
numberOfTrees, double *pearsonAvera
       switch(tr->bootStopCriterion)
        {
        case FREQUENCY_STOP:
-         *pearsonAverage = frequencyCriterion(n, h, &countBetter, 
BOOTSTOP_PERMUTATIONS, adef);                                       
+         *pearsonAverage = frequencyCriterion(n, h, &countBetter, 
adef->bootstopPermutations, adef);                                  
 
-         if(countBetter >= FC_THRESHOLD && *pearsonAverage >= FC_LOWER)
+         if(countBetter >= adef->fcThreshold && *pearsonAverage >= FC_LOWER)
            return TRUE;
          else
            return FALSE;
@@ -3955,9 +3955,9 @@ boolean bootStop(tree *tr, hashtable *h, int 
numberOfTrees, double *pearsonAvera
             wrf_thresh_avg = 0.0,
             wrf_avg = 0.0;
           
-          *pearsonAverage = wcCriterion(n, h, &countBetter, &wrf_thresh_avg, 
&wrf_avg, tr, vectorLength, BOOTSTOP_PERMUTATIONS, adef);
+          *pearsonAverage = wcCriterion(n, h, &countBetter, &wrf_thresh_avg, 
&wrf_avg, tr, vectorLength, adef->bootstopPermutations, adef);
          
-          if(countBetter >= FC_THRESHOLD && wrf_avg <= wrf_thresh_avg)
+          if(countBetter >= adef->fcThreshold && wrf_avg <= wrf_thresh_avg)
             return TRUE;
           else
             return FALSE;
diff --git a/manual/NewManual.odt b/manual/NewManual.odt
index 9147d01..ac948ca 100644
Binary files a/manual/NewManual.odt and b/manual/NewManual.odt differ
diff --git a/manual/NewManual.pdf b/manual/NewManual.pdf
index 91d74da..5212877 100644
Binary files a/manual/NewManual.pdf and b/manual/NewManual.pdf differ
diff --git a/multiple.c b/multiple.c
index 1eba14a..8c1c2d9 100644
--- a/multiple.c
+++ b/multiple.c
@@ -827,19 +827,19 @@ void doAllInOne(tree *tr, analdef *adef)
              {
              case FREQUENCY_STOP:
                printBothOpenMPI("Stopped Rapid BS search after %d replicates 
with FC Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",BOOTSTOP_PERMUTATIONS , pearsonAverage);         
+               printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",adef->bootstopPermutations , pearsonAverage);            
                break;
              case MR_STOP:
                printBothOpenMPI("Stopped Rapid BS search after %d replicates 
with MR-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);            
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);       
                break;
              case MRE_STOP:
                printBothOpenMPI("Stopped Rapid BS search after %d replicates 
with MRE-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);            
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);       
                break;
              case MRE_IGN_STOP:
                printBothOpenMPI("Stopped Rapid BS search after %d replicates 
with MRE_IGN-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);            
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);       
                break;
              default:
                assert(0);
@@ -851,19 +851,19 @@ void doAllInOne(tree *tr, analdef *adef)
              {
              case FREQUENCY_STOP:
                printBothOpenMPI("Rapid BS search did not converge after %d 
replicates with FC Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",BOOTSTOP_PERMUTATIONS , pearsonAverage);
+               printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",adef->bootstopPermutations , pearsonAverage);
                break;
              case MR_STOP:
                printBothOpenMPI("Rapid BS search did not converge after %d 
replicates with MR-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
                break;
              case MRE_STOP:
                printBothOpenMPI("Rapid BS search did not converge after %d 
replicates with MRE-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
                break;
              case MRE_IGN_STOP:
                printBothOpenMPI("Rapid BS search did not converge after %d 
replicates with MR_IGN-based Bootstopping criterion\n", bootstrapsPerformed);
-               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+               printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
                break;
              default:
                assert(0);
@@ -1344,19 +1344,19 @@ void doBootstrap(tree *tr, analdef *adef, rawdata 
*rdta, cruncheddata *cdta)
            {
            case FREQUENCY_STOP:
              printBothOpenMPI("Stopped Standard BS search after %d replicates 
with FC Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",BOOTSTOP_PERMUTATIONS , pearsonAverage);           
+             printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",adef->bootstopPermutations , pearsonAverage);              
              break;
            case MR_STOP:
              printBothOpenMPI("Stopped Standard BS search after %d replicates 
with MR-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);      
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);         
              break;
            case MRE_STOP:
              printBothOpenMPI("Stopped Standard BS search after %d replicates 
with MRE-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);      
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);         
              break;
            case MRE_IGN_STOP:
              printBothOpenMPI("Stopped Standard BS search after %d replicates 
with MRE_IGN-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);      
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);         
              break;
            default:
              assert(0);
@@ -1368,19 +1368,19 @@ void doBootstrap(tree *tr, analdef *adef, rawdata 
*rdta, cruncheddata *cdta)
            {
            case FREQUENCY_STOP:
              printBothOpenMPI("Standard BS search did not converge after %d 
replicates with FC Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",BOOTSTOP_PERMUTATIONS , pearsonAverage);
+             printBothOpenMPI("Pearson Average of %d random splits: 
%f\n",adef->bootstopPermutations , pearsonAverage);
              break;
            case MR_STOP:
              printBothOpenMPI("Standard BS search did not converge after %d 
replicates with MR-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
              break;
            case MRE_STOP:
              printBothOpenMPI("Standard BS search did not converge after %d 
replicates with MRE-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
              break;
            case MRE_IGN_STOP:
              printBothOpenMPI("Standard BS search did not converge after %d 
replicates with MR_IGN-based Bootstopping criterion\n", bootstrapsPerformed);
-             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
BOOTSTOP_PERMUTATIONS, pearsonAverage);
+             printBothOpenMPI("WRF Average of %d random splits: %f\n", 
adef->bootstopPermutations, pearsonAverage);
              break;
            default:
              assert(0);
diff --git a/optimizeModel.c b/optimizeModel.c
index 9976fd4..05fcac6 100644
--- a/optimizeModel.c
+++ b/optimizeModel.c
@@ -432,7 +432,7 @@ static void optimizeWeights(tree *tr, double modelEpsilon, 
linkageList *ll, int
     initialLH = 0.0,
     finalLH   = 0.0;
 
-  evaluateGeneric(tr, tr->start);
+  evaluateGenericInitrav(tr, tr->start);
  
   initialLH = tr->likelihood;
   //printf("W: %f %f [%f] ->", tr->perPartitionLH[0], tr->perPartitionLH[1], 
initialLH);
diff --git a/treeIO.c b/treeIO.c
index 6c96773..f323d8b 100644
--- a/treeIO.c
+++ b/treeIO.c
@@ -755,7 +755,7 @@ static boolean treeLabelEnd (int ch)
   return FALSE;
 } 
 
-static void treeEchoContext (FILE *fp1, FILE *fp2, int n);
+static int treeEchoContext (FILE *fp1, FILE *fp2, int n);
 
 static boolean  treeGetLabel (FILE *fp, char *lblPtr, int maxlen, boolean 
taxonLabel)
 {
@@ -861,10 +861,11 @@ int treeFindTipName(FILE *fp, tree *tr, boolean check)
 
 
 
-static void treeEchoContext (FILE *fp1, FILE *fp2, int n)
+static int treeEchoContext (FILE *fp1, FILE *fp2, int n)
 { /* treeEchoContext */
   
-  int      
+  int 
+    offset = 0,
     ch;
 
   int64_t 
@@ -878,8 +879,10 @@ static void treeEchoContext (FILE *fp1, FILE *fp2, int n)
 
   fgetpos(fp1, &pos);
 
-  fseek(fp1, MAX(current - n / 2, 0), SEEK_SET);
+  fseek(fp1, MAX(current - (int64_t)n / 2, 0), SEEK_SET);
        
+  if((current - (int64_t)n / 2) < 0)
+    offset = (int)(current - (int64_t)n / 2);
   
   while (n > 0 && ((ch = getc(fp1)) != EOF)) 
     {
@@ -902,6 +905,8 @@ static void treeEchoContext (FILE *fp1, FILE *fp2, int n)
 
   fsetpos(fp1, &pos);
 
+  return offset;
+
   /*boolean  
     waswhite = TRUE;
   
@@ -1538,6 +1543,12 @@ static boolean  addElementLenMULT (FILE *fp, tree *tr, 
nodeptr p, int partitionC
   int      n, ch, fres;
   double randomResolution;
   int old;
+  
+  fpos_t start_pos;
+
+  fgetpos(fp, &start_pos);
+     
+
     
   tr->constraintVector[p->number] = partitionCounter; 
 
@@ -1563,7 +1574,42 @@ static boolean  addElementLenMULT (FILE *fp, tree *tr, 
nodeptr p, int partitionC
       q = tr->nodep[n];
       tr->constraintVector[q->number] = *partCount;
       if (! addElementLenMULT(fp, tr, q->next, old, adef, partCount))        
return FALSE;
-      if (! treeNeedCh(fp, ',', "in"))             return FALSE;
+    
+      if (! treeNeedCh(fp, ',', "in")) 
+       { 
+         int 
+           c2 = treeGetCh(fp);
+         
+         if(c2 == ')')
+           {
+             int 
+               offset; 
+             
+             printf("Could it be that you are using excess parenthesis 
starting here:\n\n");
+             fsetpos(fp, &start_pos);   
+             offset = treeEchoContext(fp, stdout, 40);
+             printf("\n");
+             if(offset == 0)
+               printf("                    ^\n\n");
+             else
+               {
+                 int 
+                   spaces = 20 + offset,
+                   k;
+
+                 assert(offset < 0);
+                 
+                 for(k = 0; k < spaces; k++)
+                   printf(" ");
+                 printf("^\n\n");                
+               }
+           }
+         
+         ungetc(c2, fp);
+         
+         errorExit(-1);         
+       }
+      
       if (! addElementLenMULT(fp, tr, q->next->next, old, adef, partCount))  
return FALSE;
                  
       hookupDefault(p, q, tr->numBranches);

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/debian-med/raxml.git

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to