src/hg/hgc/lowelab.c 1.38
1.38 2009/10/14 07:08:13 pchan
add support to annotRev tracks; use annotRev instead of genepred if available for blastp tracks detail page
Index: src/hg/hgc/lowelab.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgc/lowelab.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -b -B -U 4 -r1.37 -r1.38
--- src/hg/hgc/lowelab.c 24 Sep 2009 21:16:35 -0000 1.37
+++ src/hg/hgc/lowelab.c 14 Oct 2009 07:08:13 -0000 1.38
@@ -263,17 +263,31 @@
struct genePred *gpList = NULL, *gp = NULL;
char tableName[64];
boolean hasBin;
+char pepTableName[64];
+char extraTableName[64];
+
+if (startsWith("annotRev", table))
+{
+ sprintf(pepTableName, "%s%s", table, pepTable);
+ sprintf(extraTableName, "%s%s", table, extraTable);
+}
+else
+{
+ strcpy(pepTableName, pepTable);
+ strcpy(extraTableName, extraTable);
+}
+
spConn = sqlConnect( pdb);
genericHeader(tdb, item);
wordCount = chopLine(dupe, words);
if (wordCount > 1)
num = atoi(words[1]);
if (num < 3) num = 3;
-if (extraTable != NULL && hTableExists(database, extraTable))
+if (extraTableName != NULL && hTableExists(database, extraTableName))
{
- sprintf(query, "select * from %s where name = '%s'", extraTable, item);
+ sprintf(query, "select * from %s where name = '%s'", extraTableName, item);
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
minGeneInfoStaticLoad(row, &ginfo);
@@ -524,9 +538,9 @@
if (sequence != NULL)
printf("<B>GC content:</B> %0.2f%%<BR>\n", computeGCContent(sequence->dna, sequence->size));
}
-geneShowPosAndLinks(item, item, tdb, pepTable, "htcTranslatedProtein",
+geneShowPosAndLinks(item, item, tdb, pepTableName, "htcTranslatedProtein",
"htcGeneMrna", "htcGeneInGenome", "Predicted mRNA");
genePredFreeList(&gpList);
@@ -1826,9 +1840,9 @@
return blastpTrack;
}
-void printQueryGeneInfo(struct sqlConnection *conn, struct bed *blastpTrack, char *queryName, unsigned int *querySeqLength)
+void printQueryGeneInfo(struct sqlConnection *conn, struct bed *blastpTrack, char *queryName, unsigned int *querySeqLength, char *queryTable)
/* Get and print blastp query gene info */
{
char query[512];
struct sqlResult *srRefSeq;
@@ -1837,21 +1851,20 @@
char **buffer = NULL;
char *targetGeneName[2];
struct minGeneInfo* ginfo;
- char refSeq[] = "refSeq";
char blastpHits[] = "blastpHits";
unsigned int queryStart = 0;
unsigned int queryEnd = 0;
parseDelimitedString(blastpTrack->name, ':', targetGeneName, 2);
- if (hTableExists(database, refSeq) && hTableExists(database, blastpHits))
+ if (hTableExists(database, queryTable) && hTableExists(database, blastpHits))
{
/* Get query gene from refSeq */
sprintf(query, "select count(*) from %s where chrom = '%s' and strand = '%s' and cdsStart <= %u and cdsEnd >= %u",
- refSeq, blastpTrack->chrom, blastpTrack->strand, blastpTrack->chromStart, blastpTrack->chromEnd);
+ queryTable, blastpTrack->chrom, blastpTrack->strand, blastpTrack->chromStart, blastpTrack->chromEnd);
srRefSeq = sqlGetResult(conn, query);
if ((row = sqlNextRow(srRefSeq)) != NULL)
{
geneCount = atoi(row[0]);
@@ -1859,9 +1872,9 @@
if (geneCount == 1)
{
sprintf(query, "select name, cdsStart, cdsEnd from %s where chrom = '%s' and strand = '%s' and cdsStart <= %u and cdsEnd >= %u",
- refSeq, blastpTrack->chrom, blastpTrack->strand, blastpTrack->chromStart, blastpTrack->chromEnd);
+ queryTable, blastpTrack->chrom, blastpTrack->strand, blastpTrack->chromStart, blastpTrack->chromEnd);
srRefSeq = sqlGetResult(conn, query);
if ((row = sqlNextRow(srRefSeq)) != NULL)
{
strcpy(queryName, row[0]);
@@ -1873,9 +1886,9 @@
else
{
/* Check blastpHits if more than 1 query gene is found within the region */
sprintf(query, "select a.name, a.cdsStart, a.cdsEnd from %s a, %s b where a.chrom = '%s' and a.strand = '%s' and a.cdsStart <= %u and a.cdsEnd >= %u and a.name = b.query and b.target like '%%%s'",
- refSeq, blastpHits,
+ queryTable, blastpHits,
blastpTrack->chrom, blastpTrack->strand, blastpTrack->chromStart, blastpTrack->chromEnd, targetGeneName[0]);
srRefSeq = sqlGetResult(conn, query);
if ((row = sqlNextRow(srRefSeq)) != NULL)
{
@@ -1971,8 +1984,10 @@
char query[512];
struct sqlResult *sr;
char **row;
char refSeq[50];
+ char xraTable[50];
+ char product[255];
struct blastTab *blastpHits;
struct minGeneInfo *ginfo;
char *blastpTarget[2];
char *clades[2];
@@ -1981,8 +1996,9 @@
char clade[50] = "";
unsigned int hitStart = 0;
unsigned int hitEnd = 0;
char **buffer = NULL;
+ boolean findTable = FALSE;
int tStart = cartInt(cart, "o");
int tEnd = cartInt(cart, "t");
char *tChrom = cartString(cart, "c");
@@ -2026,19 +2042,37 @@
{
cladePortionCount = parseDelimitedString(clade, '-', clades, 2);
printf("<tr style=\"vertical-align: top;\">\n");
-
printf("<td><a name=\"%s:%s:%u-%u\"><i>%s</i></td>\n", blastpTarget[1], tChrom, tStart, tEnd, genome);
+
if (cladePortionCount == 1)
printf("<td>%s</td>\n", clades[0]);
else if (cladePortionCount == 2)
printf("<td>%s<br>%s</td>\n", clades[0], clades[1]);
/* Get target gene position from refSeq */
strcpy(refSeq, blastpTarget[0]);
- strcat(refSeq, ".refSeq");
- if (hDbExists(blastpTarget[0]) && hTableExists(blastpTarget[0], "refSeq"))
+ strcat(refSeq, ".");
+ if (hDbExists(blastpTarget[0]))
+ {
+ if (hTableExists(blastpTarget[0], "lookup"))
+ {
+ sprintf(query, "select lookupValue from %s.lookup where lookupCode = 'annotRev'", blastpTarget[0]);
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ strcat(refSeq, row[0]);
+ findTable = TRUE;
+ sqlFreeResult(&sr);
+ }
+ }
+ else if (hTableExists(blastpTarget[0], "refSeq"))
+ {
+ strcat(refSeq, "refSeq");
+ findTable = TRUE;
+ }
+ if (findTable)
{
sprintf(query, "select chrom, cdsStart, cdsEnd from %s where name = '%s'",
refSeq, blastpTarget[1]);
sr = sqlGetResult(conn, query);
@@ -2054,17 +2088,46 @@
sqlFreeResult(&sr);
}
else
printf("<td>%s</td>\n", blastpTarget[1]);
+ }
+ else
+ printf("<td>%s</td>\n", blastpTarget[1]);
/* Get target gene product annotation */
if (hDbExists(blastpTarget[0]))
{
+ if (hTableExists(blastpTarget[0], "lookup"))
+ {
+ sprintf(query, "select lookupValue from %s.lookup where lookupCode = 'annotRevXra'", blastpTarget[0]);
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ strcpy(xraTable, row[0]);
+ sqlFreeResult(&sr);
+ }
+ else
+ strcpy(product, "N/A");
+
+ sprintf(query, "select product from %s.%s where name = '%s'", blastpTarget[0], xraTable, blastpTarget[1]);
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ strcpy(product, row[0]);
+ sqlFreeResult(&sr);
+ }
+ else
+ strcpy(product, "N/A");
+ }
+ else
+ {
ginfo = getGbProtCodeInfo(conn, blastpTarget[0], blastpTarget[1]);
if (ginfo != NULL && ginfo->product != NULL && differentString(ginfo->product,"none"))
- printf("<td>%s</td>\n", ginfo->product);
+ strcpy(product, ginfo->product);
else
- printf("<td>%s</td>\n", "N/A");
+ strcpy(product, "N/A");
+ }
+ printf("<td>%s</td>\n", product);
}
else
printf("<td>%s</td>\n", "N/A");
@@ -2094,17 +2157,34 @@
void doBlastP(struct trackDb *tdb, char *targetName)
/* Handle the BlastP Archaea and BlastP Bacteria tracks. */
{
char queryName[50];
+ char queryTable[50];
unsigned int querySeqLength = 0;
struct sqlConnection *conn = hAllocConn(database);
struct bed *blastpTrack;
struct blastTab *blastpHitsList;
+ char query[512];
+ struct sqlResult *sr;
+ char **row;
cartWebStart(cart, database, "%s", "BlastP Alignment Hits");
blastpTrack = getBlastpTrackRecord(conn, tdb, targetName);
- printQueryGeneInfo(conn, blastpTrack, queryName, &querySeqLength);
+
+ if (hTableExists(database, "lookup"))
+ {
+ sprintf(query, "select lookupValue from lookup where lookupCode = 'annotRev'");
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ strcpy(queryTable, row[0]);
+ sqlFreeResult(&sr);
+ }
+ }
+ else
+ strcpy(queryTable, "refSeq");
+ printQueryGeneInfo(conn, blastpTrack, queryName, &querySeqLength, queryTable);
blastpHitsList = loadBlastpHits(conn, queryName);
printBlastpResult(conn, blastpHitsList, querySeqLength);
@@ -2964,8 +3044,12 @@
else if (sameWord(track, "refSeq"))
{
doRefSeq(tdb, item,"gbProtCodePep","gbProtCodeXra");
}
+else if (startsWith("annotRev", track))
+ {
+ doRefSeq(tdb, item,"Pep","Xra");
+ }
else if (sameWord(track, "sargassoSea"))
{
doSargassoSea(tdb, item);
}