f6b440a99776b79f399a2646442a5e079723cb0e markd Sun Feb 6 13:49:28 2022 -0800 don't crash if geneName or color not found for a genePred diff --git src/hg/utils/genePredToBigGenePred/genePredToBigGenePred.c src/hg/utils/genePredToBigGenePred/genePredToBigGenePred.c index 3678f35..d656223 100644 --- src/hg/utils/genePredToBigGenePred/genePredToBigGenePred.c +++ src/hg/utils/genePredToBigGenePred/genePredToBigGenePred.c @@ -92,57 +92,67 @@ bgp.score = 0; if (scoreHash) { char *val = hashFindVal(scoreHash, gp->name); if (val != NULL) bgp.score = sqlUnsigned(val); } bgp.strand[0] = gp->strand[0]; bgp.strand[1] = gp->strand[1]; bgp.thickStart = gp->cdsStart; bgp.thickEnd = gp->cdsEnd; bgp.itemRgb = 0; // BLACK if (colorsHash) { struct rgbColor *color = hashFindVal(colorsHash, gp->name); + if (color == NULL) + warn("Warning: no color found for %s", gp->name); + else + { bgp.itemRgb = ( ((color->r) & 0xff) << 16) | (((color->g) & 0xff) << 8) | ((color->b) & 0xff); } + } bgp.blockCount = gp->exonCount; bgp.blockSizes = (unsigned *)blockSizes; bgp.chromStarts = (unsigned *)blockStarts; int ii; for(ii=0; ii < bgp.blockCount; ii++) { blockStarts[ii] = gp->exonStarts[ii] - bgp.chromStart; blockSizes[ii] = gp->exonEnds[ii] - gp->exonStarts[ii]; } bgp.name2 = gp->name2; bgp.cdsStartStat = gp->cdsStartStat; bgp.cdsEndStat = gp->cdsEndStat; bgp.exonFrames = gp->exonFrames; bgp.type = NULL; bgp.geneName = gp->name; bgp.geneName2 = gp->name2; if (geneHash) { struct geneNames *gn = hashFindVal(geneHash, gp->name); + if (gn == NULL) + warn("Warning: no gene name found for %s", gp->name); + else + { bgp.geneName = gn->name; bgp.geneName2 = gn->name2; } + } bgp.geneType = NULL; bigGenePredOutput(&bgp, fp, '\t', '\n'); } void genePredToBigGenePred(char *genePredFile, char *bigGeneOutput) /* genePredToBigGenePred - converts genePred or genePredExt to bigGenePred. */ { struct genePred *gp; if (isKnown) gp = genePredKnownLoadAll(genePredFile) ; else gp = genePredExtLoadAll(genePredFile) ;