f088470a9391f341dd21dfaa61228dd8d777eaf8
braney
Thu Feb 18 17:47:48 2016 -0800
fix up the links on the ncbiRefSeq hgc page
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index dd65dba..b1f8fb2 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -5676,31 +5676,31 @@
struct psl *psl = pslList;
for (psl = pslList; psl != NULL; psl = psl->next)
{
if ( pslTrimToTargetRange(psl, winStart, winEnd) != NULL
&&
!startsWith("xeno", tableName)
&& !(startsWith("user", tableName) && pslIsProtein(psl))
&& psl->tStart == startFirst
&& sameString(psl->tName, seqName)
)
{
char otherString[512];
safef(otherString, sizeof(otherString), "%d&aliTable=%s",
psl->tStart, tableName);
- hgcAnchorSomewhere("htcCdnaAliInWindow", cgiEncode(psl->qName),
+ hgcAnchorSomewhere("htcCdnaAliInWindow", cgiEncode(itemIn),
otherString, psl->tName);
printf("
View details of parts of alignment within browser window.
\n");
}
}
}
struct psl *getAlignments(struct sqlConnection *conn, char *table, char *acc)
/* get the list of alignments for the specified acc */
{
struct sqlResult *sr = NULL;
char **row;
struct psl *psl, *pslList = NULL;
boolean hasBin;
char splitTable[64];
char query[256];
@@ -7019,30 +7019,45 @@
struct bed *bed = bedLoadN(bedRow, 12);
if (sameString(bed->name, acc))
{
bb->next = NULL;
break;
}
}
psl = pslFromBigPsl(seqName, bb, hChromSize(database, seqName), &seq, &cdsString);
genbankParseCds(cdsString, &cdsStart, &cdsEnd);
struct dnaSeq *rnaSeq = newDnaSeq(seq, strlen(seq), acc);
showSomeAlignment(psl, rnaSeq, gftRna, 0, rnaSeq->size, NULL, cdsStart, cdsEnd);
}
+static struct dnaSeq *getBaseColorSequence(char *itemName, char *table)
+/* Grab sequence using the sequence and extFile table names out of BASE_COLOR_USE_SEQUENCE. */
+{
+struct trackDb *tdb = hashMustFindVal(trackHash, table);
+char *spec = trackDbRequiredSetting(tdb, BASE_COLOR_USE_SEQUENCE);
+char *specCopy = cloneString(spec);
+
+// value is: extFile seqTbl extFileTbl
+char *words[3];
+int nwords = chopByWhite(specCopy, words, ArraySize(words));
+if ((nwords != ArraySize(words)) || !sameString(words[0], "extFile"))
+ errAbort("invalid %s track setting: %s", BASE_COLOR_USE_SEQUENCE, spec);
+return hDnaSeqGet(database, itemName, words[1], words[2]);
+}
+
void htcCdnaAli(char *acc)
/* Show alignment for accession. */
{
char query[256];
char table[64];
char accTmp[64];
struct sqlConnection *conn;
struct sqlResult *sr;
char **row;
struct psl *psl;
struct dnaSeq *rnaSeq;
char *aliTable;
int start;
unsigned int cdsStart = 0, cdsEnd = 0;
boolean hasBin;
@@ -7076,30 +7091,34 @@
if (sameString("mrnaBlastz", aliTable) || sameString("pseudoMrna", aliTable))
{
struct sqlConnection *conn = hAllocConn(database);
unsigned retId = 0;
safef(accTmp, sizeof accTmp, "bz-%s", acc);
if (hRnaSeqAndIdx(accTmp, &rnaSeq, &retId, conn) == -1)
rnaSeq = hRnaSeq(database, acc);
hFreeConn(&conn);
}
else if (sameString("HInvGeneMrna", aliTable))
{
/* get RNA accession for the gene id in the alignment */
sqlSafef(query, sizeof query, "select mrnaAcc from HInv where geneId='%s'", acc);
rnaSeq = hRnaSeq(database, sqlQuickString(conn, query));
}
+else if (sameString("ncbiRefSeqPsl", aliTable))
+ {
+ 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 (startsWith("xeno", aliTable))
showSomeAlignment(psl, rnaSeq, gftDnaX, 0, rnaSeq->size, NULL, cdsStart, cdsEnd);
else
@@ -7187,44 +7206,33 @@
rnaSeq = oSeq;
}
else
{
/* Look up alignments in database */
hFindSplitTable(database, seqName, aliTable, table, &hasBin);
sqlSafef(query, sizeof(query),
"select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d",
table, acc, seqName, start);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) == NULL)
errAbort("Couldn't find alignment for %s at %d", acc, start);
wholePsl = pslLoad(row+hasBin);
sqlFreeResult(&sr);
- if (startsWith("ucscRetroAli", aliTable) || startsWith("retroMrnaAli", aliTable) || sameString("pseudoMrna", aliTable) || startsWith("altSeqLiftOverPsl", aliTable))
+ if (startsWith("ucscRetroAli", aliTable) || startsWith("retroMrnaAli", aliTable) || sameString("pseudoMrna", aliTable) || startsWith("altSeqLiftOverPsl", aliTable) || startsWith("ncbiRefSeqPsl", aliTable))
{
- rnaSeq = NULL;
- char *trackName = hGetTrackForTable(database, aliTable);
- struct trackDb *tdb = hashMustFindVal(trackHash, trackName);
- char *spec = trackDbRequiredSetting(tdb, BASE_COLOR_USE_SEQUENCE);
- char *specCopy = cloneString(spec);
-
- // value is: extFile seqTbl extFileTbl
- char *words[3];
- int nwords = chopByWhite(specCopy, words, ArraySize(words));
- if ((nwords != ArraySize(words)) || !sameString(words[0], "extFile"))
- errAbort("invalid %s track setting: %s", BASE_COLOR_USE_SEQUENCE, spec);
- rnaSeq = hDnaSeqGet(database, acc, words[1], words[2]);
+ rnaSeq = getBaseColorSequence(acc, aliTable);
}
else if (sameString("HInvGeneMrna", aliTable))
{
/* get RNA accession for the gene id in the alignment */
sqlSafef(query, sizeof(query), "select mrnaAcc from HInv where geneId='%s'",
acc);
rnaSeq = hRnaSeq(database, sqlQuickString(conn, query));
}
else
{
char *cdnaTable = NULL;
struct trackDb *tdb = hashFindVal(trackHash, aliTable);
if (tdb != NULL)
cdnaTable = trackDbSetting(tdb, "cdnaTable");
if (isNotEmpty(cdnaTable) && hTableExists(database, cdnaTable))
@@ -8247,30 +8255,43 @@
else if (gp->strand[0] == '-' && gp->cdsEndStat != cdsComplete)
offset = (3 - gp->exonFrames[gp->exonCount-1]) % 3;
}
/* NOTE: this fix will not handle the case in which frame is shifted
* internally or at multiple exons, as when frame-shift gaps occur in
* an alignment of an mRNA to the genome. Going to have to come back
* and address that later... (acs) */
dnaTranslateSome(cdsDna->dna+offset, prot, protBufSize);
dnaSeqFree(&cdsDna);
return prot;
}
+void ncbiRefSeqSequence(char *itemName)
+{
+char *table = cartString(cart, "o");
+struct dnaSeq *rnaSeq = getBaseColorSequence(itemName, table );
+cartHtmlStart("RefSeq mRNA Sequence");
+
+printf("
"); +printf(">%s\n", itemName); +faWriteNext(stdout, NULL, rnaSeq->dna, rnaSeq->size); +printf(""); +} + + void htcGeneMrna(char *geneName) /* Display cDNA predicted from genome */ { char *table = cartString(cart, "o"); cartHtmlStart("Predicted mRNA from Genome"); struct genePred *gp, *gpList = getGenePredForPosition(table, geneName), *next; int cdsStart, cdsEnd; struct dnaSeq *seq; for(gp = gpList; gp; gp = next) { next = gp->next; seq = getCdnaSeq(gp); getCdsInMrna(gp, &cdsStart, &cdsEnd); toUpperN(seq->dna + cdsStart, cdsEnd - cdsStart); @@ -11495,57 +11516,57 @@ htmlHorizontalLine(); if (differentWord("n/a", nrl->description)) { printf("Summary of %s