src/hg/bedItemOverlapCount/bedItemOverlapCount.c 1.17

1.17 2009/09/28 18:52:20 braney
add bounds output
Index: src/hg/bedItemOverlapCount/bedItemOverlapCount.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/bedItemOverlapCount/bedItemOverlapCount.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -b -B -U 4 -r1.16 -r1.17
--- src/hg/bedItemOverlapCount/bedItemOverlapCount.c	25 Sep 2009 23:17:20 -0000	1.16
+++ src/hg/bedItemOverlapCount/bedItemOverlapCount.c	28 Sep 2009 18:52:20 -0000	1.17
@@ -30,8 +30,11 @@
 char *chromSizes = NULL;  /* read chrom sizes from file instead of database . */
 boolean doMax;   /* if overlap count will overflow, just keep max */
 boolean doZero;  /* add blocks with 0 counts */
 boolean doBed12;  /* expect bed12 and process block by block */
+boolean doOutBounds;  /* output min/max to stderr */
+unitSize overMin = ~1;
+unitSize overMax = 0;
 
 /* command line option specifications */
 static struct optionSpec optionSpecs[] = {
     {"chromSize", OPTION_STRING},
@@ -40,8 +43,9 @@
     {"password", OPTION_STRING},
     {"max", OPTION_BOOLEAN},
     {"zero", OPTION_BOOLEAN},
     {"bed12", OPTION_BOOLEAN},
+    {"outBounds", OPTION_BOOLEAN},
     {NULL, 0}
 };
 
 void usage()
@@ -59,8 +63,9 @@
   "   -zero  add blocks with zero count, normally these are ommitted\n"
   "   -bed12 expect bed12 and count based on blocks\n"
   "          normally only first three fields are used.\n"
   "   -max   if counts per base overflows set to max (%lu) instead of exiting\n"
+  "   -outBounds ouput min/max to stderr\n"
   "   -chromSize=sizefile\tRead chrom sizes from file instead of database\n"
   "             sizefile contains two white space separated fields per line:\n"
   "		chrom name and size\n"
   "   -host=hostname\tmysql host used to get chrom sizes\n"
@@ -129,8 +134,15 @@
 unitSize *ptr;
 
 for(ptr=counts; ptr < lastCount - 1; ptr++)
     {
+    if (doOutBounds)
+	{
+	if (ptr[1] < overMin)
+	    overMin = ptr[1];
+	if (ptr[1] > overMax)
+	    overMax = ptr[1];
+	}
     if (ptr[0] != ptr[1])
 	{
 	if (doZero || (ptr[0] != 0))
 	    printf("%s\t%lu\t%lu\t%lu\n", 
@@ -266,12 +279,15 @@
 
 if (outputToDo)
     outputCounts(counts, prevChrom, chromSize);
 
+if (doOutBounds)
+    fprintf(stderr, "min %lu max %lu\n", (unsigned long)overMin, (unsigned long)overMax);
+
 verbose(2,"#\tchrom %s done, size %d\n", prevChrom, chromSize);
 freeMem(counts);
 freez(&prevChrom);
-hashFreeWithVals(&chromHash, freez);
+// hashFreeWithVals(&chromHash, freez);
 freeHash(&seenHash);
 }
 
 int main(int argc, char *argv[])
@@ -287,8 +303,9 @@
 chromSizes = optionVal("chromSize", NULL);
 doMax = optionExists("max");
 doBed12 = optionExists("bed12");
 doZero = optionExists("zero");
+doOutBounds = optionExists("outBounds");
 verbose(2, "#\tworking on database: %s\n", argv[1]);
 bedItemOverlapCount(argv[1], argc-2, argv+2);
 optionFree();
 return 0;