440d84ee43c6a5f8a22bfe7886681db4ee7cc202
braney
  Thu Aug 28 16:55:27 2014 -0700
adding more support for bigGenePred in hgc and hgTables.
diff --git src/hg/lib/genePred.c src/hg/lib/genePred.c
index be86222..92c35e8 100644
--- src/hg/lib/genePred.c
+++ src/hg/lib/genePred.c
@@ -2030,15 +2030,59 @@
 
         // Yet to reach the target base... accumulate exon worth
         codingBasesSoFar += (exonEnd - exonStart);
         }
 
     exonIx += (reverse ? -1 : 1);
     }
 
 if (isCoding != NULL && codingBasesSoFar > 0)
     {
     *isCoding = FALSE;
     return codingBasesSoFar;
     }
 return -1;  // introns not okay
 }
+
+struct genePred  *genePredFromBigGenePred( char *chrom, struct bigBedInterval *bb)
+/* build a genePred from a bigGenePred */
+{
+char *extra = cloneString(bb->rest);
+int numCols = 12 + 8 - 3;
+char *row[numCols];
+int wordCount = chopByChar(extra, '\t', row, numCols);
+assert(wordCount == numCols);
+
+struct genePred *gp;
+AllocVar(gp);
+
+gp->chrom = chrom;
+gp->txStart = bb->start;
+gp->txEnd = bb->end;
+gp->name =  cloneString(row[ 0]);
+gp->strand[0] =  row[ 2][0];
+gp->strand[1] =  row[ 2][1];
+gp->cdsStart =  atoi(row[ 3]);
+gp->cdsEnd =  atoi(row[ 4]);
+gp->exonCount =  atoi(row[ 6]);
+int numBlocks;
+sqlUnsignedDynamicArray(row[ 8],  &gp->exonStarts, &numBlocks);
+assert (numBlocks == gp->exonCount);
+sqlUnsignedDynamicArray(row[ 7],  &gp->exonEnds, &numBlocks);
+assert (numBlocks == gp->exonCount);
+
+int ii;
+for(ii=0; ii < numBlocks; ii++)
+    {
+    gp->exonStarts[ii] += bb->start;
+    gp->exonEnds[ii] += gp->exonStarts[ii];
+    }
+
+gp->name2 = cloneString(row[ 9]);
+
+gp->cdsStartStat = parseCdsStat(row[ 10]);
+gp->cdsEndStat = parseCdsStat(row[ 11]);
+sqlSignedDynamicArray(row[ 12],  &gp->exonFrames, &numBlocks);
+assert (numBlocks == gp->exonCount);
+
+return gp;
+}