90f2a73fa25ff0ce351a5cdc571f4ccce621bd2a
braney
  Thu Feb 24 12:39:18 2011 -0800
output a more efficient bedgraph
diff --git src/utils/bigWigToBedGraph/bigWigToBedGraph.c src/utils/bigWigToBedGraph/bigWigToBedGraph.c
index 72813bb..cd6fa82 100644
--- src/utils/bigWigToBedGraph/bigWigToBedGraph.c
+++ src/utils/bigWigToBedGraph/bigWigToBedGraph.c
@@ -33,43 +33,68 @@
    {"chrom", OPTION_STRING},
    {"start", OPTION_INT},
    {"end", OPTION_INT},
    {"udcDir", OPTION_STRING},
    {NULL, 0},
 };
 
 void bigWigToBedGraph(char *inFile, char *outFile)
 /* bigWigToBedGraph - Convert from bigWig to bedGraph format.. */
 {
 struct bbiFile *bwf = bigWigFileOpen(inFile);
 FILE *f = mustOpen(outFile, "w");
 struct bbiChromInfo *chrom, *chromList = bbiChromList(bwf);
 for (chrom = chromList; chrom != NULL; chrom = chrom->next)
     {
+    boolean firstTime = TRUE;
+    int saveStart, prevEnd;
+    double saveVal;
+
     if (clChrom != NULL && !sameString(clChrom, chrom->name))
         continue;
     char *chromName = chrom->name;
     struct lm *lm = lmInit(0);
     int start = 0, end = chrom->size;
     if (clStart > 0)
         start = clStart;
     if (clEnd > 0)
         end = clEnd;
     struct bbiInterval *interval, *intervalList = bigWigIntervalQuery(bwf, chromName, 
     	start, end, lm);
     for (interval = intervalList; interval != NULL; interval = interval->next)
-        fprintf(f, "%s\t%u\t%u\t%g\n", chromName, interval->start, interval->end, interval->val);
+	{
+	if (firstTime)
+	    {
+	    saveStart = interval->start;
+	    saveVal = interval->val;
+	    firstTime = FALSE;
+	    }
+	else
+	    {
+	    if (!((prevEnd == interval->start) && (saveVal == interval->val)))
+		{
+		fprintf(f, "%s\t%u\t%u\t%g\n", chromName, saveStart, prevEnd, saveVal);
+		saveStart = interval->start;
+		saveVal = interval->val;
+		}
+
+	    }
+	prevEnd = interval->end;
+	}
+    if (!firstTime)
+	fprintf(f, "%s\t%u\t%u\t%g\n", chromName, saveStart, prevEnd, saveVal);
+
     lmCleanup(&lm);
     }
 bbiChromInfoFreeList(&chromList);
 carefulClose(&f);
 bbiFileClose(&bwf);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 clChrom = optionVal("chrom", clChrom);
 clStart = optionInt("start", clStart);
 clEnd = optionInt("end", clEnd);
 udcSetDefaultDir(optionVal("udcDir", udcDefaultDir()));