src/hg/regulate/regClusterMakeTableOfTables/regClusterMakeTableOfTables.c 1.4

1.4 2010/05/17 02:21:36 kent
moving literal 6 to variable scoreColIx
Index: src/hg/regulate/regClusterMakeTableOfTables/regClusterMakeTableOfTables.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/regulate/regClusterMakeTableOfTables/regClusterMakeTableOfTables.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 1000000 -r1.3 -r1.4
--- src/hg/regulate/regClusterMakeTableOfTables/regClusterMakeTableOfTables.c	5 May 2010 00:50:37 -0000	1.3
+++ src/hg/regulate/regClusterMakeTableOfTables/regClusterMakeTableOfTables.c	17 May 2010 02:21:36 -0000	1.4
@@ -1,136 +1,137 @@
 /* regClusterMakeTableOfTables - Make up a table of tables for regCluster program. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "obscure.h"
 #include "sqlNum.h"
 #include "hmmstats.h"
 
 static char const rcsid[] = "$Id$";
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "regClusterMakeTableOfTables - Make up a table of tables for regCluster program\n"
   "usage:\n"
   "   regClusterMakeTableOfTables fileListFile output\n"
   "Where the fileListFile is a list of narrowPeak format files.\n"
   );
 }
 
 static struct optionSpec options[] = {
    {NULL, 0},
 };
 
 int commonPrefixSize(struct slName *list)
 /* Return length of common prefix */
 {
 if (list == NULL)
     return 0;
 int commonSize = strlen(list->name);
 struct slName *el, *lastEl = list;
 for (el = list->next; el != NULL; el = el->next)
     {
     int sameSize = countSame(el->name, lastEl->name);
     commonSize = min(sameSize, commonSize);
     lastEl = el;
     }
 return commonSize;
 }
 
 int countSameAtEnd(char *a, char *b)
 /* Count number of characters at end of strings that are same in each string. */
 {
 int count = 0;
 char *aEnd = a + strlen(a);
 char *bEnd = b + strlen(b);
 while  (--aEnd >= a && --bEnd >= b)
     {
     if (*aEnd != *bEnd)
         break;
     ++count;
     }
 return count;
 }
 
 int commonSuffixSize(struct slName *list)
 /* Return length of common suffix */
 {
 if (list == NULL)
     return 0;
 int commonSize = strlen(list->name);
 struct slName *el, *lastEl = list;
 for (el = list->next; el != NULL; el = el->next)
     {
     int sameSize = countSameAtEnd(el->name, lastEl->name);
     commonSize = min(sameSize, commonSize);
     lastEl = el;
     }
 return commonSize;
 }
 
 double calcNormScoreFactor(char *fileName, int scoreCol)
 /* Figure out what to multiply things by to get a nice browser score (0-1000) */
 {
 struct lineFile *lf = lineFileOpen(fileName, TRUE);
 char *row[scoreCol+1];
 double sum = 0, sumSquares = 0;
 int n = 0;
 double minVal=0, maxVal=0;
 while (lineFileRow(lf, row))
     {
     double x = sqlDouble(row[scoreCol]);
     if (n == 0)
         minVal = maxVal = x;
     if (x < minVal) minVal = x;
     if (x > maxVal) maxVal = x;
     sum += x;
     sumSquares += x*x;
     n += 1;
     }
 lineFileClose(&lf);
 double std = calcStdFromSums(sum, sumSquares, n);
 double mean = sum/n;
 double highEnd = mean + std;
 if (highEnd > maxVal) highEnd = maxVal;
 return 1000.0/highEnd;
 }
 
 void makeTableFromFileNames(char *input, char *output)
 /* makeTableFromFileNames - Make up a table of tables for regCluster from
  * input that is a list of file names that include metadata. */
 {
 FILE *f = mustOpen(output, "w");
 struct slName *in, *inList = readAllLines(input);
 int commonPrefix = commonPrefixSize(inList);
 int commonSuffix = commonSuffixSize(inList);
+int scoreColIx = 6;
 for (in = inList; in != NULL; in = in->next)
     {
-    fprintf(f, "%s\t0\t1\t2\t6\t", in->name);
-    fprintf(f, "%g\t", calcNormScoreFactor(in->name, 6));
+    fprintf(f, "%s\t0\t1\t2\tscoreColIx\t", in->name);
+    fprintf(f, "%g\t", calcNormScoreFactor(in->name, scoreColIx));
     char *s = in->name;
     int len = strlen(s);
     char *midString = cloneStringZ(s+commonPrefix, len - commonPrefix - commonSuffix);
     fprintf(f, "%s\n", midString);
     freez(&midString);
     }
 carefulClose(&f);
 }
 
 void regClusterMakeTableOfTables(char *input, char *output)
 /* regClusterMakeTableOfTables - Make up a table of tables for regCluster program. */
 {
 makeTableFromFileNames(input, output);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 3)
     usage();
 regClusterMakeTableOfTables(argv[1], argv[2]);
 return 0;
 }