JWS-112 Bumping version of ClustalO (src, binaries and windows) to version 1.2.4.
[jabaws.git] / binaries / src / clustalo / src / hhalign / hhutil-C.h
index 9c87a69..b7b2981 100644 (file)
  ********************************************************************/
 
 /*
- * RCS $Id: hhutil-C.h 246 2011-06-15 12:41:04Z fabian $
+ * RCS $Id: hhutil-C.h 315 2016-12-15 17:18:30Z fabian $
  */
 
+#define PARAMETERSFROMFILE 0
+
+extern bool nucleomode;
 //////////////////////////////////////////////////////////////////////////////
 // Transform a character to lower case and '.' to '-' and vice versa
 //////////////////////////////////////////////////////////////////////////////
 
-
 inline char 
 MatchChr(char c)  {return ((c>='a' && c<='z')? c-'a'+'A' : (c=='.'? '-':c) );}
 
@@ -40,40 +43,61 @@ WordChr(char c) {return (int)((c>='A' && c<='Z') || (c>='a' && c<='z'));}
 inline char 
 aa2i(char c)
 {
-  //A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V
   if (c>='a' && c<='z') c+='A'-'a';
-  switch (c)
-    {
+  if(!nucleomode)
+  {      
+         // proteins!
+         // A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V
+         switch (c)
+               {
+               case 'A': return 0;
+               case 'R': return 1;
+               case 'N': return 2;
+               case 'D': return 3;
+               case 'C': return 4;
+               case 'Q': return 5;
+               case 'E': return 6;
+               case 'G': return 7;
+               case 'H': return 8;
+               case 'I': return 9;
+               case 'L': return 10;
+               case 'K': return 11;
+               case 'M': return 12;
+               case 'F': return 13;
+               case 'P': return 14;
+               case 'S': return 15;
+               case 'T': return 16;
+               case 'W': return 17;
+               case 'Y': return 18;
+               case 'V': return 19;
+               case 'X': return ANY;
+               case 'J': return ANY;
+               case 'O': return ANY;
+               case 'U': return 4;  //Selenocystein -> Cystein
+               case 'B': return 3;  //D (or N)
+               case 'Z': return 6;  //E (or Q)
+               case '-': return GAP;
+               case '.': return GAP;
+               case '_': return GAP;
+               }
+  }
+  else
+  {
+               // nucleotides!
+       switch(c)
+       {
     case 'A': return 0;
-    case 'R': return 1;
-    case 'N': return 2;
-    case 'D': return 3;
-    case 'C': return 4;
-    case 'Q': return 5;
-    case 'E': return 6;
-    case 'G': return 7;
-    case 'H': return 8;
-    case 'I': return 9;
-    case 'L': return 10;
-    case 'K': return 11;
-    case 'M': return 12;
-    case 'F': return 13;
-    case 'P': return 14;
-    case 'S': return 15;
-    case 'T': return 16;
-    case 'W': return 17;
-    case 'Y': return 18;
-    case 'V': return 19;
-    case 'X': return ANY;
-    case 'J': return ANY;
-    case 'O': return ANY;
-    case 'U': return 4;  //Selenocystein -> Cystein
-    case 'B': return 3;  //D (or N)
-    case 'Z': return 6;  //E (or Q)
+    case 'C': return 1;
+    case 'G': return 2;
+    case 'T': return 3;
+    case 'U': return 4;
+    case 'N': return ANY;
     case '-': return GAP;
     case '.': return GAP;
     case '_': return GAP;
-    }
+       default: return ANY;
+       }
+  }
   if (c>=0 && c<=32) return -1; // white space and control characters
   return -2;
 }
@@ -86,6 +110,8 @@ inline char
 i2aa(char c)
 {
   //A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V
+  if(!nucleomode)
+  {
   switch (c)
     {
     case 0: return 'A';
@@ -112,6 +138,22 @@ i2aa(char c)
     case GAP: return '-';
     case ENDGAP: return '-';
     }
+  }
+  else
+  {
+       // DNA/RNA
+       switch(c)
+       {
+               case 0: return 'A';
+               case 1: return 'C';
+               case 2: return 'G';
+               case 3: return 'T';
+               case 4: return 'U';
+               case ANY: return 'N';
+               case GAP: return '-';
+               case ENDGAP: return '-';
+       }
+  }
   return '?';
 }
 
@@ -471,12 +513,12 @@ ReadDefaultsFile(int& argc_conf, char** argv_conf)
              if (*c=='\0' || *c=='\n' || *c=='#')         //Is end of line reached?
                {
                  *c='\0'; 
-                 argv_conf[argc_conf]=new(char[strlen(c_first)+1]);
+                 argv_conf[argc_conf]=new char[strlen(c_first)+1];
                  strcpy(argv_conf[argc_conf++],c_first); 
                  break;
                }
              *c='\0'; 
-             argv_conf[argc_conf]=new(char[strlen(c_first)+1]);
+             argv_conf[argc_conf]=new char[strlen(c_first)+1];
              strcpy(argv_conf[argc_conf++],c_first);
              printf("Argument: %s\n",c_first);
              c++;
@@ -505,7 +547,7 @@ ReadDefaultsFile(int& argc_conf, char** argv_conf)
  * @brief Set default parameter values
  */
 void 
-SetDefaults()
+SetDefaults(hhalign_para rHhalignPara)
 {
     
   par.append=0;                // overwrite output file
@@ -543,7 +585,7 @@ SetDefaults()
 
   par.matrix=0;                // Subst.matrix 0: Gonnet, 1: HSDM, 2: BLOSUM50 3: BLOSUM62 
   par.pcm=2;                   // pseudocount mode: default=divergence-dependent (but not column-specific)
-#if 1 /* Nelder-Meade on Baliscore */
+#if 1 /* Nelder-Meade on Baliscore*/
   par.pca=1.712190f;                // default values for substitution matrix pseudocounts 
   par.pcb=1.039640f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
   par.pcc=0.878067f;                // pcs are reduced prop. to 1/Neff^pcc
@@ -598,7 +640,7 @@ SetDefaults()
   par.gapfV=0.151634;                // factor for increasing gap open penalty for deletes
   par.gapgV=0.641516;                // factor for increasing gap open penalty for inserts
   par.gaphV=0.266434;                // factor for increasing gap extension penalty for deletes
-  par.gapiV=0.598414;                // factor for increasing gap extension penalty for inserts
+  par.gapiV=0.598414;                // factor for increasing gap extension penalty for inserts 
 #else /* Soeding default*/ 
   par.pcaV=1.0f;                // default values for substitution matrix pseudocounts 
   par.pcbV=1.5f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
@@ -662,13 +704,180 @@ SetDefaults()
   strcpy(par.psifile,""); 
   par.exclstr=NULL; 
 
-#if 0  /* read parameter file from home-dir */
-#include "hhutil-C-help.h"
-#endif /* read parameter file from home-dir */
+
+  //#if PARAMETERSFROMFILE  /* read parameter file from home-dir */
+  //#include "hhutil-C-help.h"
+  //#endif /* read parameter file from home-dir */
+  if (rHhalignPara.pca  >= 0.00){ par.pca  = rHhalignPara.pca;  }
+  if (rHhalignPara.pcb  >= 0.00){ par.pcb  = rHhalignPara.pcb;  }
+  if (rHhalignPara.pcc  >= 0.00){ par.pcc  = rHhalignPara.pcc;  }
+  if (rHhalignPara.pcw  >= 0.00){ par.pcw  = rHhalignPara.pcw;  }
+  if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
+  if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
+  if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
+  if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
+  if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
+  if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
+  if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
+  if (rHhalignPara.pcaV  >= 0.00){ par.pcaV  = rHhalignPara.pcaV;  }
+  if (rHhalignPara.pcbV  >= 0.00){ par.pcbV  = rHhalignPara.pcbV;  }
+  if (rHhalignPara.pccV  >= 0.00){ par.pccV  = rHhalignPara.pccV;  }
+  if (rHhalignPara.pcwV  >= 0.00){ par.pcwV  = rHhalignPara.pcwV;  }
+  if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
+  if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
+  if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
+  if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
+  if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
+  if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
+  if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
 
    return;
 } /** this is the end of SetDefaults() **/
 
+void SetRnaDefaults(hhalign_para rHhalignPara)
+{
+  par.pca=1.28f;                // default values for substitution matrix pseudocounts 
+  par.pcb=1.75f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pcc=0.87f;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcw=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapb=0.80;                // default values for transition pseudocounts
+  par.gapd=0.34;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gape=2.25;                // gap extension penalty pseudocount
+  par.gapf=0.51;                // factor for increasing gap open penalty for deletes
+  par.gapg=1.01;                // factor for increasing gap open penalty for inserts
+  par.gaph=1.24;                // factor for increasing gap extension penalty for deletes
+  par.gapi=0.45;                // factor for increasing gap extension penalty for inserts
+
+#if 0  /* these are the parameters determined by Dave (pre r274) */
+  par.pcaV=2.57f;                // default values for substitution matrix pseudocounts 
+  par.pcbV=2.34f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pccV=0.88f;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcwV=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapbV=1.41;                // default values for transition pseudocounts
+  par.gapdV=1.8;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gapeV=1.5;                // gap extension penalty pseudocount
+  par.gapfV=1.03;                // factor for increasing gap open penalty for deletes
+  par.gapgV=0.89;                // factor for increasing gap open penalty for inserts
+  par.gaphV=0.54;                // factor for increasing gap extension penalty for deletes
+  par.gapiV=0.86;                // factor for increasing gap extension penalty for inserts  
+#else /* parameters determined for r274, using Bralibase, FS */
+  par.pcaV=1.655620f;                // default values for substitution matrix pseudocounts 
+  par.pcbV=0.438399f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pccV=0.371491f;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcwV=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapbV=1.914490;                // default values for transition pseudocounts
+  par.gapdV=0.104278;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gapeV=1.100210;                // gap extension penalty pseudocount
+  par.gapfV=0.335152;                // factor for increasing gap open penalty for deletes
+  par.gapgV=0.786688;                // factor for increasing gap open penalty for inserts
+  par.gaphV=0.667143;                // factor for increasing gap extension penalty for deletes
+  par.gapiV=0.711993;                // factor for increasing gap extension penalty for inserts  
+#endif
+
+  //#if PARAMETERSFROMFILE  /* read parameter file from home-dir */
+  //#include "hhutil-C-help.h"
+  //#endif /* read parameter file from home-dir */
+  if (rHhalignPara.pca  >= 0.00){ par.pca  = rHhalignPara.pca;  }
+  if (rHhalignPara.pcb  >= 0.00){ par.pcb  = rHhalignPara.pcb;  }
+  if (rHhalignPara.pcc  >= 0.00){ par.pcc  = rHhalignPara.pcc;  }
+  if (rHhalignPara.pcw  >= 0.00){ par.pcw  = rHhalignPara.pcw;  }
+  if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
+  if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
+  if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
+  if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
+  if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
+  if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
+  if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
+  if (rHhalignPara.pcaV  >= 0.00){ par.pcaV  = rHhalignPara.pcaV;  }
+  if (rHhalignPara.pcbV  >= 0.00){ par.pcbV  = rHhalignPara.pcbV;  }
+  if (rHhalignPara.pccV  >= 0.00){ par.pccV  = rHhalignPara.pccV;  }
+  if (rHhalignPara.pcwV  >= 0.00){ par.pcwV  = rHhalignPara.pcwV;  }
+  if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
+  if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
+  if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
+  if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
+  if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
+  if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
+  if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
+
+} /* this is the end of SetRnaDefaults() */
+
+void SetDnaDefaults(hhalign_para rHhalignPara)
+{
+  par.pca=2.89f;                // default values for substitution matrix pseudocounts 
+  par.pcb=1.17f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pcc=0.88f;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcw=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapb=0.80;                // default values for transition pseudocounts
+  par.gapd=0.34;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gape=2.25;                // gap extension penalty pseudocount
+  par.gapf=0.78;                // factor for increasing gap open penalty for deletes
+  par.gapg=1.01;                // factor for increasing gap open penalty for inserts
+  par.gaph=1.24;                // factor for increasing gap extension penalty for deletes
+  par.gapi=0.45;                // factor for increasing gap extension penalty for inserts
+  
+#if 0 /* these are the parameters determined by Dave (pre r274) */
+  par.pcaV=1.712f;                // default values for substitution matrix pseudocounts 
+  par.pcbV=1.039f;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pccV=0.266f;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcwV=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapbV=1.405;                // default values for transition pseudocounts
+  par.gapdV=1.8;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gapeV=2.25;                // gap extension penalty pseudocount
+  par.gapfV=1.034;                // factor for increasing gap open penalty for deletes
+  par.gapgV=2.025;                // factor for increasing gap open penalty for inserts
+  par.gaphV=0.544;                // factor for increasing gap extension penalty for deletes
+  par.gapiV=1.35;                // factor for increasing gap extension penalty for inserts }
+#else /* parameters determined for r274, using mdsa, FS */
+  par.pcaV=2.196;                // default values for substitution matrix pseudocounts 
+  par.pcbV=0.329;                // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
+  par.pccV=0.393;                // pcs are reduced prop. to 1/Neff^pcc
+  par.pcwV=0.0f;                // wc>0 weighs columns according to their intra-clomun similarity
+
+  par.gapbV=0.570;                // default values for transition pseudocounts
+  par.gapdV=0.048;               // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
+  par.gapeV=1.692;                // gap extension penalty pseudocount
+  par.gapfV=0.398;                // factor for increasing gap open penalty for deletes
+  par.gapgV=0.121;                // factor for increasing gap open penalty for inserts
+  par.gaphV=0.012;                // factor for increasing gap extension penalty for deletes
+  par.gapiV=0.645;                // factor for increasing gap extension penalty for inserts }
+#endif
+
+  //#if PARAMETERSFROMFILE  /* read parameter file from home-dir */
+  //#include "hhutil-C-help.h"
+  //#endif /* read parameter file from home-dir */
+  if (rHhalignPara.pca  >= 0.00){ par.pca  = rHhalignPara.pca;  }
+  if (rHhalignPara.pcb  >= 0.00){ par.pcb  = rHhalignPara.pcb;  }
+  if (rHhalignPara.pcc  >= 0.00){ par.pcc  = rHhalignPara.pcc;  }
+  if (rHhalignPara.pcw  >= 0.00){ par.pcw  = rHhalignPara.pcw;  }
+  if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
+  if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
+  if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
+  if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
+  if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
+  if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
+  if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
+  if (rHhalignPara.pcaV  >= 0.00){ par.pcaV  = rHhalignPara.pcaV;  }
+  if (rHhalignPara.pcbV  >= 0.00){ par.pcbV  = rHhalignPara.pcbV;  }
+  if (rHhalignPara.pccV  >= 0.00){ par.pccV  = rHhalignPara.pccV;  }
+  if (rHhalignPara.pcwV  >= 0.00){ par.pcwV  = rHhalignPara.pcwV;  }
+  if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
+  if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
+  if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
+  if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
+  if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
+  if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
+  if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
+
+
+} /* this is the end of SetDnaDefaults() */
+
+
 /*
  * EOF hhutil-C.h
  */