8be39eded2ca995a387d5c47127f049c2b228932
braney
Tue Jun 2 17:26:58 2015 -0700
changes to get NCBI RefSeq track to use the trackVersion table, and to
grab Genbank information when available. #13673
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 6caacc9..34c7317 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -8798,101 +8798,75 @@
if (nonCoding)
printf("none (non-coding)
\n");
else
printf("%s
", dbUrl, proteinID, proteinID);
}
freeMem(shortItemName);
}
void doEnsemblGene(struct trackDb *tdb, char *item, char *itemForUrl)
/* Put up Ensembl Gene track info or Ensembl NonCoding track info. */
{
char *dupe, *type, *words[16];
int wordCount;
int start = cartInt(cart, "o");
-struct sqlConnection *conn = hAllocConn(database);
char condStr[256];
-char versionString[256];
-char dateReference[256];
char headerTitle[512];
-/* see if hgFixed.trackVersion exists */
-boolean trackVersionExists = hTableExists("hgFixed", "trackVersion");
-/* assume nothing found */
-versionString[0] = 0;
-dateReference[0] = 0;
-
-if (trackVersionExists)
- {
- char query[256];
- sqlSafef(query, sizeof(query), "select version,dateReference from hgFixed.trackVersion where db = '%s' AND name = 'ensGene' order by updateTime DESC limit 1", database);
- struct sqlResult *sr = sqlGetResult(conn, query);
- char **row;
-
- /* in case of NULL result from the table */
- versionString[0] = 0;
- while ((row = sqlNextRow(sr)) != NULL)
- {
- safef(versionString, sizeof(versionString), "Ensembl %s",
- row[0]);
- safef(dateReference, sizeof(dateReference), "%s",
- row[1]);
- }
- sqlFreeResult(&sr);
- }
-
if (itemForUrl == NULL)
itemForUrl = item;
dupe = cloneString(tdb->type);
-if (versionString[0])
- safef(headerTitle, sizeof(headerTitle), "%s - %s", item, versionString);
+
+struct trackVersion *trackVersion = getTrackVersion(database, tdb->track);
+if ((trackVersion != NULL) && !isEmpty(trackVersion->version))
+ safef(headerTitle, sizeof(headerTitle), "%s - Ensembl %s", item, trackVersion->version);
else
safef(headerTitle, sizeof(headerTitle), "%s", item);
genericHeader(tdb, headerTitle);
wordCount = chopLine(dupe, words);
char *archive = trackDbSetting(tdb, "ensArchive");
if (archive == NULL)
{
- if (dateReference[0])
+ if ((trackVersion != NULL) && !isEmpty(trackVersion->dateReference))
{
- if (differentWord("current", dateReference))
- archive = cloneString(dateReference);
+ if (differentWord("current", trackVersion->dateReference))
+ archive = cloneString(trackVersion->dateReference);
}
}
printEnsemblCustomUrl(tdb, itemForUrl, item == itemForUrl, archive);
sqlSafefFrag(condStr, sizeof condStr, "name='%s'", item);
+struct sqlConnection *conn = hAllocConn(database);
+
/* if this is a non-coding gene track, then print the biotype and
the external ID */
if (sameWord(tdb->table, "ensGeneNonCoding"))
{
- struct sqlConnection *conn2 = hAllocConn(database);
char query[256];
struct sqlResult *sr = NULL;
char **row;
sqlSafef(query, sizeof(query), "select biotype, extGeneId from %s where %s",
tdb->table, condStr);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) != NULL)
{
printf("Gene Type: %s
\n", row[0]);
printf("External Gene ID: %s
\n", row[1]);
}
sqlFreeResult(&sr);
- hFreeConn(&conn2);
}
else
{
/* print CCDS if this is not a non-coding gene */
printCcdsForSrcDb(conn, item);
printf("
\n");
}
if (hTableExists(database, "ensInfo"))
{
struct sqlResult *sr;
char query[256], **row;
struct ensInfo *info = NULL;
sqlSafef(query, sizeof(query),
@@ -11297,139 +11271,198 @@
{
AllocVar(palInfo);
palInfo->chrom = chrom;
palInfo->left = left;
palInfo->right = right;
palInfo->rnaName = rnaName;
}
geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, "refPep", "htcTranslatedProtein",
"htcRefMrna", "htcGeneInGenome", "mRNA Sequence",palInfo);
printTrackHtml(tdb);
hFreeConn(&conn);
}
-void doNcbiRefGene(struct trackDb *tdb, char *rnaName)
-/* Process click on a NCBI RefSeq gene. */
+static struct refLink *printRefSeqInfo( struct sqlConnection *conn, struct trackDb *tdb, char *rnaName, char *version)
{
-struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr;
char **row;
char query[256];
char *sqlRnaName = rnaName;
-struct ncbiRefLink *rl;
-boolean isPredicted = sameString(tdb->table, "ncbiRefPredicted");
+char *summary = NULL;
+boolean isXeno = sameString(tdb->table, "xenoRefGene");
+struct refLink *rl;
/* Make sure to escape single quotes for DB parseability */
if (strchr(rnaName, '\''))
{
sqlRnaName = replaceChars(rnaName, "'", "''");
}
/* get refLink entry */
-sqlSafef(query, sizeof(query), "select * from ncbiRefLink where id = '%s'", sqlRnaName);
+if (version == NULL)
+ {
+ sqlSafef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) == NULL)
- errAbort("Couldn't find %s in ncbiRefLink table.", rnaName);
-rl = ncbiRefLinkLoad(row);
+ errAbort("Couldn't find %s in refLink table - this accession may no longer be available.", rnaName);
+ rl = refLinkLoad(row);
+ sqlFreeResult(&sr);
+ }
+else
+ {
+ sqlSafef(query, sizeof(query), "select * from refLink r, gbCdnaInfo g where mrnaAcc = '%s' and r.mrnaAcc=g.acc and g.version='%s'", sqlRnaName, version);
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) == NULL)
+ {
+ sqlFreeResult(&sr);
+ return NULL;
+ }
+ rl = refLinkLoad(row);
sqlFreeResult(&sr);
+ }
/* print the first section with info */
-if (isPredicted)
- cartWebStart(cart, database, "NCBI Predicted RefSeq Gene");
-else
- cartWebStart(cart, database, "NCBI Curated RefSeq Gene");
printf("
%s
\n", summary); + freeMem(summary); + } htmlHorizontalLine(); -struct palInfo *palInfo = NULL; - - -geneShowPosAndLinksPal(rl->id, NULL, tdb, NULL, "htcTranslatedProtein", - "htcGeneMrna", "htcGeneInGenome", "mRNA Sequence",palInfo); - -printTrackHtml(tdb); -hFreeConn(&conn); +return rl; } -void doRefGene(struct trackDb *tdb, char *rnaName) -/* Process click on a known RefSeq gene. */ + +void doNcbiRefGene(struct trackDb *tdb, char *rnaName) +/* Process click on a NCBI RefSeq gene. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256]; char *sqlRnaName = rnaName; -char *summary = NULL; -boolean isXeno = sameString(tdb->table, "xenoRefGene"); -struct refLink *rl; -int start = cartInt(cart, "o"); +struct ncbiRefLink *nrl; +boolean isPredicted = sameString(tdb->table, "ncbiRefPredicted"); int left = cartInt(cart, "l"); int right = cartInt(cart, "r"); char *chrom = cartString(cart, "c"); +char noDot[1024]; + +struct dyString *dy = newDyString(1024); +if (isPredicted) + dyStringPrintf(dy, "NCBI Predicted RefSeq Gene"); +else + dyStringPrintf(dy, "NCBI Curated RefSeq Gene"); + +struct trackVersion *trackVersion = getTrackVersion(database, "ncbiRefSeq"); +if ((trackVersion != NULL) && !isEmpty(trackVersion->version)) + dyStringPrintf(dy, "- Release %s\n", trackVersion->version); + +cartWebStart(cart, database, "%s", dy->string); +safecpy(noDot, sizeof noDot, rnaName); +char *ptr = strchr(noDot, '.'); +if (ptr) + *ptr++ = 0; + +// get info from Genbank (if any) +struct refLink *rl = printRefSeqInfo( conn, tdb, noDot, ptr); /* Make sure to escape single quotes for DB parseability */ if (strchr(rnaName, '\'')) { sqlRnaName = replaceChars(rnaName, "'", "''"); } + /* get refLink entry */ -sqlSafef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName); +sqlSafef(query, sizeof(query), "select * from ncbiRefLink where id = '%s'", sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) - errAbort("Couldn't find %s in refLink table - this accession may no longer be available.", rnaName); -rl = refLinkLoad(row); + errAbort("Couldn't find %s in ncbiRefLink table.", rnaName); +nrl = ncbiRefLinkLoad(row); sqlFreeResult(&sr); /* print the first section with info */ -if (isXeno) - cartWebStart(cart, database, "Non-%s RefSeq Gene", organism); -else - cartWebStart(cart, database, "RefSeq Gene"); printf("%s
\n", summary); - freeMem(summary); + AllocVar(palInfo); + palInfo->chrom = chrom; + palInfo->left = left; + palInfo->right = right; + palInfo->rnaName = rnaName; } -htmlHorizontalLine(); -/* print alignments that track was based on */ +geneShowPosAndLinksPal(nrl->id, NULL, tdb, NULL, "htcTranslatedProtein", + "htcGeneMrna", "htcGeneInGenome", "mRNA Sequence",palInfo); + +printTrackHtml(tdb); +hFreeConn(&conn); +} + +void doRefGene(struct trackDb *tdb, char *rnaName) +/* Process click on a known RefSeq gene. */ { +struct sqlConnection *conn = hAllocConn(database); +int start = cartInt(cart, "o"); +int left = cartInt(cart, "l"); +int right = cartInt(cart, "r"); +char *chrom = cartString(cart, "c"); + +boolean isXeno = sameString(tdb->table, "xenoRefGene"); +if (isXeno) + cartWebStart(cart, database, "Non-%s RefSeq Gene", organism); +else + cartWebStart(cart, database, "RefSeq Gene"); +struct refLink *rl = printRefSeqInfo( conn, tdb, rnaName, NULL); + +/* print alignments that track was based on */ char *aliTbl = (sameString(tdb->table, "refGene") ? "refSeqAli" : "xenoRefSeqAli"); if (hTableExists(database, aliTbl)) { struct psl *pslList = getAlignments(conn, aliTbl, rl->mrnaAcc); printf("