814df69886d2dc7c791db10417901a9768931c88
angie
  Mon Jun 1 17:16:44 2015 -0700
Added support for bigGenePred to anno* libs for hgVai and hgIntegrator.
While updating annoFormatVep.c to use column indices from autoSql instead of
hardcoding genePred indices, I found that I had been using an incorrect index
for strand anyway -- so I removed 3 lines of no-op code.
refs #15439

diff --git src/hg/lib/genePred.c src/hg/lib/genePred.c
index f13f060..b5d690d 100644
--- src/hg/lib/genePred.c
+++ src/hg/lib/genePred.c
@@ -2097,15 +2097,60 @@
     {
     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);
 gp->optFields |= genePredExonFramesFld;
 assert (numBlocks == gp->exonCount);
 
 return gp;
 }
+
+static void sqlUnsignedDynamicArrayNoClobber(char *s, unsigned **retArray, int *retSize)
+/* Make a copy of s on stack and chop that up so we don't mangle s. */
+{
+char copy[strlen(s)+1];
+safecpy(copy, sizeof(copy), s);
+sqlUnsignedDynamicArray(copy, retArray, retSize);
+}
+
+struct genePred  *genePredFromBigGenePredRow(char **row)
+/* build a genePred from a bigGenePred row */
+{
+struct genePred *gp;
+AllocVar(gp);
+gp->chrom = cloneString(row[0]);
+gp->txStart = sqlUnsigned(row[1]);
+gp->txEnd = sqlUnsigned(row[2]);
+gp->name = cloneString(row[3]);
+gp->strand[0] = row[5][0];
+gp->strand[1] = row[5][1];
+gp->cdsStart = sqlUnsigned(row[6]);
+gp->cdsEnd = sqlUnsigned(row[7]);
+gp->exonCount = sqlUnsigned(row[9]);
+int numBlocks;
+sqlUnsignedDynamicArrayNoClobber(row[11], &gp->exonStarts, &numBlocks);
+assert (numBlocks == gp->exonCount);
+// First put blockSizes in exonEnds:
+sqlUnsignedDynamicArrayNoClobber(row[10], &gp->exonEnds, &numBlocks);
+assert (numBlocks == gp->exonCount);
+// Then add in txStart to relative starts, and add starts to block sizes to get ends:
+int ii;
+for(ii=0; ii < numBlocks; ii++)
+    {
+    gp->exonStarts[ii] += gp->txStart;
+    gp->exonEnds[ii] += gp->exonStarts[ii];
+    }
+gp->name2 = cloneString(row[12]);
+gp->cdsStartStat = parseCdsStat(row[13]);
+gp->cdsEndStat = parseCdsStat(row[14]);
+gp->optFields |= genePredCdsStatFld;
+sqlSignedDynamicArray(row[15],  &gp->exonFrames, &numBlocks);
+assert (numBlocks == gp->exonCount);
+gp->optFields |= genePredExonFramesFld;
+return gp;
+}