ab38adb3e68ab9cf4c53d9b0df0ebf46f51ca999
markd
  Fri Sep 4 11:31:15 2020 -0700
added bigGenePredToGenePred command

diff --git src/hg/utils/bigGenePredToGenePred/bigGenePredToGenePred.c src/hg/utils/bigGenePredToGenePred/bigGenePredToGenePred.c
new file mode 100644
index 0000000..0a27cf0
--- /dev/null
+++ src/hg/utils/bigGenePredToGenePred/bigGenePredToGenePred.c
@@ -0,0 +1,50 @@
+/* bigGenePredToGenePred - convert bigGenePred file to genePred. */
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "options.h"
+#include "bigGenePred.h"
+
+void usage()
+/* Explain usage and exit. */
+{
+errAbort(
+  "bigGenePredToGenePred - convert bigGenePred file to genePred.\n"
+  "usage:\n"
+  "   bigGenePredToGenePred bigGenePred.bb genePred.gp\n"
+  "\n"
+  );
+}
+
+/* Command line validation table. */
+static struct optionSpec options[] = {
+   {NULL, 0},
+};
+
+void bigGenePredToGenePred(char *bigGenePredFile, char *genePredFile)
+/* bigGenePredToGenePred - convert bigGenePred file to genePred. */
+{
+struct bbiFile *bbi = bigBedFileOpen(bigGenePredFile);
+struct lm *lm = lmInit(0);
+FILE *gpFh = mustOpen(genePredFile, "w");
+struct bbiChromInfo *chrom, *chromList = bbiChromList(bbi);
+for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+    {
+    struct bigBedInterval *bbList = bigBedIntervalQuery(bbi, chrom->name, 0, chrom->size, 0, lm);
+    for(; bbList != NULL; bbList = bbList->next)
+        {
+        struct genePredExt *gp = genePredFromBigGenePred(chrom->name, bbList);
+        genePredTabOut((struct genePred *)gp, gpFh);
+        }
+    }
+}
+
+int main(int argc, char *argv[])
+/* Process command line. */
+{
+optionInit(&argc, argv, options);
+if (argc != 3)
+    usage();
+bigGenePredToGenePred(argv[1], argv[2]);
+return 0;
+}