96442f8cb891c4f1282446f416ef9f92bc7092a1
markd
  Tue Oct 25 13:41:03 2016 -0700
add option to genePredCheck to get chromsome sizes from file

diff --git src/hg/lib/genePred.c src/hg/lib/genePred.c
index 6165e05..26724d2 100644
--- src/hg/lib/genePred.c
+++ src/hg/lib/genePred.c
@@ -1687,30 +1687,48 @@
 }
 
 int genePredCheckDb(char *desc, FILE* errFh, char* db, struct genePred* gp)
 /* Validate a genePred for consistency.  desc is printed the error messages
  * to file errFh (open /dev/null to discard).  Lookup chromosome size in database if
  * db is not NULL. Returns count of errors. */
 {
 int errorCnt = 0;
 int chromSize = -1;  /* default to not checking */
 if (db != NULL)
     chromSize = lookupChromSize(desc, errFh, db, gp, &errorCnt);
 errorCnt += genePredCheck(desc, errFh, chromSize, gp);
 return errorCnt;
 }
 
+int genePredCheckChromSizes(char *desc, FILE* errFh, struct genePred* gp,
+                            struct hash* chromSizes)
+/* Validate a genePred for consistency.  desc is printed the error messages
+ * to file errFh (open /dev/null to discard).  Lookup chromosome size in hash.
+ */
+{
+int errorCnt = 0;
+int chromSize = hashIntValDefault(chromSizes, gp->chrom, -1);
+if (chromSize < 0)
+    {
+    fprintf(errFh, "Error: %s: %s has invalid chrom for: %s\n", desc, gp->name, gp->chrom);
+    errorCnt++;
+    }
+else
+    errorCnt += genePredCheck(desc, errFh, chromSize, gp);
+return errorCnt;
+}
+
 boolean genePredNmdTarget(struct genePred *gp) 
 /* Return TRUE if cds end is more than 50bp upstream of
    last intron. */
 {
 int gpSize = 0;
 int i = 0;
 int startDist = 0, endDist = 0;
 int blockSize = 0;
 if(gp->exonCount < 2 || gp->cdsStart == gp->cdsEnd)
     return FALSE;
 for(i = 0; i < gp->exonCount; i++)
     {
     int blockStart = gp->exonStarts[i];
     int blockEnd = gp->exonEnds[i];
     blockSize = blockEnd - blockStart;