c9b7830e130a43e817566cedfb1be819cc2164c5
galt
  Thu Feb 19 17:42:22 2026 -0800
fix oops do not want duplicate usage line. refs #28109

diff --git src/utils/bigWigToBedGraph/bigWigToBedGraph.c src/utils/bigWigToBedGraph/bigWigToBedGraph.c
index a576b7688cd..1eaaa0b6490 100644
--- src/utils/bigWigToBedGraph/bigWigToBedGraph.c
+++ src/utils/bigWigToBedGraph/bigWigToBedGraph.c
@@ -1,179 +1,179 @@
 /* bigWigToBedGraph - Convert from bigWig to bedGraph format.. */
 
 /* Copyright (C) 2011 The Regents of the University of California 
  * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "localmem.h"
 #include "udc.h"
 #include "bigWig.h"
 #include "obscure.h"
 #include "basicBed.h"
 #include "bigBedCmdSupport.h"
 
 
 char *clChrom = NULL;
 int clStart = -1;
 int clEnd = -1;
 char *clBed = NULL;
 char *clPos = NULL;
 struct slName *clRange = NULL;
 struct hash *chromHash = NULL;
 boolean skipChromCheck = FALSE;
 
 struct lm *lm = NULL;
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "bigWigToBedGraph - Convert from bigWig to bedGraph format.\n"
   "usage:\n"
   "   bigWigToBedGraph in.bigWig out.bedGraph\n"
   "options:\n"
   "   -chrom=chr1 - if set restrict output to given chromosome\n"
   "   -start=N - if set, restrict output to only that over start\n"
   "   -end=N - if set, restict output to only that under end\n"
   "   -range=\"chrom start end\" - if set, restrict output to only that within range from start to end. \n"
   "          This range start is a half-open 0-based coordinate like used in BED files. \n"
   "   -range=chrom:start-end - if set, restrict output to only that within range from start to end. \n"
   "          This range start is a 1-based start position. \n"
   "    Do not use range with chrom, start, and/or end options. \n"
   "   -range may be specified multiple times for multiple ranges. \n"
   "   -bed=in.bed - restrict output to all regions in a BED file\n"
   "   -positions=in.pos - restrict output to all regions in a position file with 1-based start\n"
   "   -udcDir=/dir/to/cache - place to put cache for remote bigBed/bigWigs\n"
   "   -skipChromCheck - skip checking chrom name.\n"
   );
 }
 
 static struct optionSpec options[] = {
    {"chrom", OPTION_STRING},
    {"start", OPTION_INT},
    {"end", OPTION_INT},
    {"bed", OPTION_STRING},
    {"range", OPTION_STRING|OPTION_MULTI},
    {"positions", OPTION_STRING},
    {"udcDir", OPTION_STRING},
    {"skipChromCheck", OPTION_BOOLEAN},
    {NULL, 0},
 };
 
 static void processChromChunk(struct bbiFile *bbi, char *chrom,
                               int start, int end, char *bedName, FILE *f)
 /* Output one chunk.  Only blocks where start is in the range will be written
- * to avoid outputting a block multiple tines.  */
+ * to avoid outputting a block multiple times.  */
 {
 boolean firstTime = TRUE;
 int saveStart = -1, prevEnd = -1;
 double saveVal = -1.0;
 
 char *chromName = chrom;
 
 struct bbiInterval *interval, *intervalList = bigWigIntervalQuery(bbi, chromName, 
     start, end, lm);
 for (interval = intervalList; interval != NULL; interval = interval->next)
     {
     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);
 
 }
 
 void bigWigToBedGraph(char *inFile, char *outFile)
 /* bigWigToBedGraph - Convert from bigWig to bedGraph format.. */
 {
 struct bbiFile *bbi = bigWigFileOpen(inFile);
 FILE *f = mustOpen(outFile, "w");
 struct bbiChromInfo *chrom, *chromList = bbiChromList(bbi);
 if (!skipChromCheck)
     chromHash = makeChromHash(chromList);
 if (clBed != NULL)
     {
     genericBigToNonBigFromBed(bbi, chromHash, clBed, f, &processChromChunk);
     }
 else if (clPos != NULL)
     {
     genericBigToNonBigFromPos(bbi, chromHash, clPos, f, &processChromChunk);
     }
 else if (clRange != NULL)
     {
     genericBigToNonBigFromRange(bbi, chromHash, f, clRange, &processChromChunk);
     }
 else
     {
     boolean chromFound = FALSE;
     for (chrom = chromList; chrom != NULL; chrom = chrom->next)
 	{
 	if (clChrom != NULL && !sameString(clChrom, chrom->name))
 	    continue;
 
 	chromFound = TRUE;
 	int start = 0, end = chrom->size;
 	if (clStart >= 0)
 	    start = clStart;
 	if (clEnd >= 0)
 	    {
 	    end = clEnd;
 	    if (end > chrom->size)
 		end = chrom->size;
 	    }
 	if (start > end)
 	    errAbort("invalid range, start=%d > end=%d", start, end);
 	processChromChunk(bbi, chrom->name, start, end, NULL, f);
 	}
     if (clChrom && !chromFound && !skipChromCheck)
 	errAbort("specified chrom %s not found in bigWig", clChrom);
     }
 bbiChromInfoFreeList(&chromList);
 carefulClose(&f);
 bbiFileClose(&bbi);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 lm = lmInit(0);
 optionInit(&argc, argv, options);
 clChrom = optionVal("chrom", clChrom);
 clStart = optionInt("start", clStart);
 clEnd = optionInt("end", clEnd);
 clRange =optionMultiVal("range", clRange);
 clBed = optionVal("bed", clBed);
 clPos = optionVal("positions", clPos);
 udcSetDefaultDir(optionVal("udcDir", udcDefaultDir()));
 skipChromCheck = optionExists("skipChromCheck");
 if (argc != 3)
     usage();
 
 if ((clBed || clPos || clRange) && (clChrom || (clStart >= 0) || (clEnd >= 0)))
     errAbort("-bed or -positions or -range can not be used with -chrom -start or -end options");
 if ((clBed && clPos) || (clBed && clRange) || (clPos && clRange))
     errAbort("-bed, -positions, and -range can not be used together");
 
 bigWigToBedGraph(argv[1], argv[2]);
 
 lmCleanup(&lm);
 if (verboseLevel() > 1)
     printVmPeak();
 return 0;
 }