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;