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; +}