482d00125fb0fcdf3097ed02cf06fde08331f557 hiram Wed Sep 28 22:48:14 2016 -0700 avoid trouble when there is no RNA sequence for an item in the ncbiRefSeq track refs #13673 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 77da76f..7659c99 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -7383,34 +7383,41 @@ { rnaSeq = getBaseColorSequence(acc, aliTable); } else { char *cdnaTable = NULL; struct trackDb *tdb = hashFindVal(trackHash, aliTable); if (tdb != NULL) cdnaTable = trackDbSetting(tdb, "cdnaTable"); if (isNotEmpty(cdnaTable) && hTableExists(database, cdnaTable)) rnaSeq = hGenBankGetMrna(database, acc, cdnaTable); else rnaSeq = hRnaSeq(database, acc); } +if (NULL == rnaSeq) + { + printf("RNA sequence not found: '%s'", acc); + } +else + { if (startsWith("xeno", aliTable)) showSomeAlignment(psl, rnaSeq, gftDnaX, 0, rnaSeq->size, NULL, cdsStart, cdsEnd); else showSomeAlignment(psl, rnaSeq, gftDna, 0, rnaSeq->size, NULL, cdsStart, cdsEnd); + } hFreeConn(&conn); } void htcCdnaAliInWindow(char *acc) /* Show part of alignment in browser window for accession. */ { char query[256]; char table[64]; struct sqlConnection *conn; struct sqlResult *sr; char **row; struct psl *wholePsl, *partPsl; struct dnaSeq *rnaSeq; char *aliTable; int start; @@ -11824,64 +11831,80 @@ printf("%s</a><br>\n", nrl->name); } } if ((trackVersion != NULL) && !isEmpty(trackVersion->version)) { printf("<B>Annotation Release:</B> <A href='%s' TARGET=_blank> %s <BR></A>", trackVersion->comment, trackVersion->version); } htmlHorizontalLine(); if (differentWord("", nrl->description)) { printf("Summary of <b>%s</b><br>\n%s<br>\n", nrl->name, nrl->description); htmlHorizontalLine(); } +static boolean hasSequence = TRUE; struct psl *pslList = getAlignments(conn, "ncbiRefSeqPsl", itemName); // if the itemName isn't found, it might be found as the nrl->mrnaAcc if (! pslList) pslList = getAlignments(conn, "ncbiRefSeqPsl", nrl->mrnaAcc); if (pslList) { + char query[256]; + /* verify itemName has RNA sequence to work with */ + sqlSafef(query, sizeof(query), "select id from seqNcbiRefSeq where acc='%s' limit 1", itemName); + char * result= sqlQuickString(conn, query); + if (isEmpty(result)) + { + printf ("<h4>there is NO alignment for %s</h4>\n", itemName); + hasSequence = FALSE; + } + else + { + printf("<H3>mRNA/Genomic Alignments (%s)</H3>", itemName); int start = cartInt(cart, "o"); - printf("<H3>mRNA/Genomic Alignments</H3>"); printAlignments(pslList, start, "htcCdnaAli", "ncbiRefSeqPsl", itemName); } + } else { printf ("<h4>there is NO alignment for %s</h4><br>\n", itemName); } htmlHorizontalLine(); if (!sameString(tdb->track, "ncbiRefSeqPsl")) showGenePos(itemName, tdb); printf("<h3>Links to sequence:</h3>\n"); printf("<ul>\n"); if (differentWord("", nrl->protAcc)) { puts("<li>\n"); hgcAnchorSomewhere("htcTranslatedProtein", nrl->protAcc, "ncbiRefSeqPepTable", seqName); printf("Predicted Protein</a> \n"); puts("</li>\n"); } +if (hasSequence) + { puts("<li>\n"); hgcAnchorSomewhere("ncbiRefSeqSequence", itemName, "ncbiRefSeqPsl", seqName); printf("%s</a> may be different from the genomic sequence.\n", "Predicted mRNA"); puts("</li>\n"); + } puts("<LI>\n"); hgcAnchorSomewhere("getDna", itemName, tdb->track, seqName); printf("Genomic Sequence</A> from assembly\n"); puts("</LI>\n"); printf("</ul>\n"); printTrackHtml(tdb); hFreeConn(&conn); } void doRefGene(struct trackDb *tdb, char *rnaName) /* Process click on a known RefSeq gene. */ { struct sqlConnection *conn = hAllocConn(database);