c6d365fd7d447135c5f167aa5c8898850538729d hiram Fri Feb 28 14:45:11 2020 -0800 and allow -fillSpace to fixup names with space characters refs #23891 diff --git src/hg/genePredToBed/genePredToBed.c src/hg/genePredToBed/genePredToBed.c index 8d982c0..965d114 100644 --- src/hg/genePredToBed/genePredToBed.c +++ src/hg/genePredToBed/genePredToBed.c @@ -1,86 +1,96 @@ /* genePredToBed - Convert from genePred to bed format.. */ /* Copyright (C) 2013 The Regents of the University of California * See README in this or parent directory for licensing information. */ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" #include "genePred.h" void usage() /* Explain usage and exit. */ { errAbort( "genePredToBed - Convert from genePred to bed format. Does not yet handle genePredExt\n" "usage:\n" " genePredToBed in.genePred out.bed\n" "options:\n" " -tab - genePred fields are separated by tab instead of just white space\n" + " -fillSpace - when tab input, fill space chars in 'name' with underscore: _\n" " -score=N - set score to N in bed output (default 0)" ); } /* Command line validation table. */ static struct optionSpec options[] = { {"tab", OPTION_BOOLEAN}, + {"fillSpace", OPTION_BOOLEAN}, {"score", OPTION_INT}, {NULL, 0}, }; boolean tabSep = FALSE; +boolean fillSpace = FALSE; int defaultScore = 0; void convertGenePredToBed(char *inFile, char *outFile) /* genePredToBed - Convert from genePred to bed format.. */ { struct genePred *gp = NULL; struct genePred *gpList = NULL; if (tabSep) gpList= genePredLoadAllByChar(inFile, '\t'); else gpList= genePredLoadAll(inFile); FILE *f = mustOpen(outFile, "w"); for (gp = gpList; gp != NULL; gp = gp->next) { /* Print scalar bed fields. */ fprintf(f, "%s\t", gp->chrom); fprintf(f, "%u\t", gp->txStart); fprintf(f, "%u\t", gp->txEnd); + if (tabSep && fillSpace) + { + replaceChar(gp->name, ' ', '_'); + fprintf(f, "%s\t", gp->name); + } + else fprintf(f, "%s\t", gp->name); fprintf(f, "%u\t", defaultScore); fprintf(f, "%s\t", gp->strand); fprintf(f, "%u\t", gp->cdsStart); fprintf(f, "%u\t", gp->cdsEnd); fprintf(f, "%u\t", 0); fprintf(f, "%u\t", gp->exonCount); /* Print exon-by-exon fields. */ int i; /* Print exon sizes */ for (i=0; i<gp->exonCount; ++i) fprintf(f, "%u,", gp->exonEnds[i] - gp->exonStarts[i]); fprintf(f, "\t"); /* Print exons starts */ for (i=0; i<gp->exonCount; ++i) fprintf(f, "%u,", gp->exonStarts[i] - gp->txStart); fprintf(f, "\n"); } carefulClose(&f); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 3) usage(); tabSep = optionExists("tab"); +fillSpace = optionExists("fillSpace"); defaultScore = optionInt("score", defaultScore); convertGenePredToBed(argv[1], argv[2]); return 0; }