src/hg/archaeStuff/tooltip/tooltip.c 1.4
1.4 2009/10/30 21:05:39 holmes
Fixed blastx percent length
Index: src/hg/archaeStuff/tooltip/tooltip.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/archaeStuff/tooltip/tooltip.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 4 -r1.3 -r1.4
--- src/hg/archaeStuff/tooltip/tooltip.c 14 Oct 2009 20:20:43 -0000 1.3
+++ src/hg/archaeStuff/tooltip/tooltip.c 30 Oct 2009 21:05:39 -0000 1.4
@@ -24,8 +24,9 @@
#include "loweutils.h"
#include "cddDesc.h"
#include "arcogdesc.h"
#include "arCOGs.h"
+#include "megablastInfo.h"
static char const rcsid[] = "$Id$";
@@ -48,13 +49,22 @@
struct sqlConnection *conn = hAllocConn(database);
sprintf(query, "select * from %s where name = '%s'", "gbProtCodeXra", cartOptionalString(cart, "i"));
sr = sqlGetResult(conn, query);
hPrintf("<B>Gene Name:</B> %s<br>",cartOptionalString(cart, "i"));
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
minGeneInfoStaticLoad(row, &ginfo);
if (ginfo.product != NULL && differentString(ginfo.product,"none"))
+ {
+ if(strlen(ginfo.product) > 70)
+ {
+ hPrintf("<B>Product:</B> %.70s<BR>",ginfo.product);
+ }
+ else
+ {
hPrintf("<B>Product:</B> %s<BR>",ginfo.product);
+ }
+ }
}
sqlFreeResult(&sr);
hFreeConn(&conn);
@@ -92,9 +102,9 @@
sr = sqlGetResult(conn, query);
struct arCOGs *infoload = NULL;
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = arCOGsLoad(row+rowOffset);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
if(!hTableExists("mgCommonDb","arcogdesc"))
@@ -150,9 +160,9 @@
sr = sqlGetResult(conn, query);
struct cddInfo *infoload = NULL;
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = cddInfoLoad(row+rowOffset);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->fullname);
if(!hTableExists("mgCommonDb","cddDesc"))
@@ -175,8 +185,50 @@
}
sqlFreeResult(&sr);
hFreeConn(&conn);
}
+void megablastInfoTip()
+{
+ char *track = cartOptionalString(cart, "g");
+ char *seqName = cartOptionalString(cart, "c");
+ char *itemName = cartOptionalString(cart, "i");
+ int start = cartInt(cart, "o");
+ int end = cartInt(cart, "t");
+ struct sqlResult *sr;
+ char **row;
+ char query[256];
+ int rowOffset;
+
+ struct sqlConnection *conn = hAllocConn(database);
+
+
+ sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
+
+ sr = sqlGetResult(conn, query);
+ struct megablastInfo *infoload = NULL;
+ rowOffset = hOffsetPastBin(database, seqName, track);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ infoload = megablastInfoLoad(row+rowOffset);
+ hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+ if(strlen(infoload->fullname) > 70)
+ {
+ hPrintf("<B>Product:</B> %.70s...<BR>",infoload->fullname);
+ }
+ else
+ {
+ hPrintf("<B>Product:</B> %s<BR>",infoload->fullname);
+ }
+ hPrintf("<B>E-value:</B> %0.0e<BR>\n", infoload->evalue);
+ hPrintf("<B>Identity:</B> %u%%<BR>\n", infoload->percentident);
+
+ }
+ sqlFreeResult(&sr);
+ hFreeConn(&conn);
+}
+
+
+
void gcPercentTip()
{
/*
//char *track = cartOptionalString(cart, "g");
@@ -250,9 +302,9 @@
slAddTail(&infoload, element);
}
sqlFreeResult(&sr);
- while (infoload != NULL)
+ if (infoload != NULL)
{
char genome[50] = "";
char clade[50] = "";
memset(genome, 0, 50);
@@ -338,16 +390,16 @@
srBlastpHits = sqlGetResult(conn, query);
struct blastTab *blastpHits = NULL;
- while ((row = sqlNextRow(srBlastpHits)) != NULL)
+ if ((row = sqlNextRow(srBlastpHits)) != NULL)
{
struct blastTab *element;
element = blastTabLoad(row);
slAddTail(&blastpHits, element);
}
sqlFreeResult(&srBlastpHits);
- while (blastpHits != NULL)
+ if (blastpHits != NULL)
{
char *blastpTarget[2];
parseDelimitedString(blastpHits->target, ':', blastpTarget, 2);
@@ -357,9 +409,17 @@
hPrintf("<B>qStart:</B> %u<br>", blastpHits->qStart*3);
hPrintf("<B>qEnd:</B> %u<br>", blastpHits->qEnd*3);*/
struct minGeneInfo *ginfo;
ginfo = getGbProtCodeInfo(conn, blastpTarget[0], blastpTarget[1]);
- hPrintf("<B>Product:</B> %s<BR>\n", ginfo->product);
+ if(strlen(ginfo->product) > 70)
+ {
+ hPrintf("<B>Product:</B> %.70s...<BR>",ginfo->product);
+ }
+ else
+ {
+ hPrintf("<B>Product:</B> %s<BR>",ginfo->product);
+ }
+ //hPrintf("<B>Product:</B> %s<BR>\n", ginfo->product);
/*char productquery[512];
struct sqlResult *srProduct;
char **product;
@@ -382,9 +442,9 @@
free(blastpTarget[1]);
blastpHits = blastpHits->next;
}
-
+ sqlFreeResult(&srBlastpHits);
hFreeConn(&conn);
}
void blastxTip()
{
@@ -392,15 +452,12 @@
char *genename = cartOptionalString(cart, "i");
char *blastxTarget[2];
parseDelimitedString(genename, ':', blastxTarget, 2);
- //hPrintf("<B>Query:</B> %s<BR>\n", genename);
struct sqlConnection *conn = hAllocConn(database);
-
-
-
+ //hPrintf("<B>Query:</B> %s<BR>\n", genome);
char *lookuptable;
@@ -474,9 +531,9 @@
struct sqlResult *srBlastxHits;
srBlastxHits = sqlGetResult(conn, query);
struct blastTab *blastxHits = NULL;
- while ((row = sqlNextRow(srBlastxHits)) != NULL)
+ if ((row = sqlNextRow(srBlastxHits)) != NULL)
{
//hPrintf("**");
struct blastTab *element;
element = blastTabLoad(row);
@@ -485,9 +542,14 @@
sqlFreeResult(&srBlastxHits);
- while (blastxHits != NULL)
+
+ unsigned int targetProteinStart = 0;
+ unsigned int targetProteinEnd = 0;
+ unsigned int hitStart = 0;
+ unsigned int hitEnd = 0;
+ if (blastxHits != NULL)
{
char *blastxTarget[2];
parseDelimitedString(blastxHits->target, ':', blastxTarget, 2);
@@ -491,10 +553,20 @@
char *blastxTarget[2];
parseDelimitedString(blastxHits->target, ':', blastxTarget, 2);
struct minGeneInfo *ginfo;
+
ginfo = getGbProtCodeInfo(conn, blastxTarget[0], blastxTarget[1]);
- hPrintf("<B>Product:</B> %s<BR>\n", ginfo->product);
+
+ if(strlen(ginfo->product) > 70)
+ {
+ hPrintf("<B>Product:</B> %.70s...<BR>",ginfo->product);
+ }
+ else
+ {
+ hPrintf("<B>Product:</B> %s<BR>",ginfo->product);
+ }
+// hPrintf("<B>Product:</B> %s<BR>\n", ginfo->product);
char genome[50] = "";
char clade[50] = "";
memset(genome, 0, 50);
memset(clade, 0, 50);
@@ -497,15 +569,32 @@
char genome[50] = "";
char clade[50] = "";
memset(genome, 0, 50);
memset(clade, 0, 50);
-
getGenomeClade(conn, blastxTarget[0], genome, clade);
+ struct sqlResult *sr;
+ if (hDbExists(blastxTarget[0]) && hTableExists(blastxTarget[0], "refSeq"))
+ {
+ sprintf(query, "select chrom, cdsStart, cdsEnd from %s.%s where name = '%s'",
+ blastxTarget[0],"refSeq", blastxTarget[1]);
+ sr = sqlGetResult(conn, query);
+ if ((row = sqlNextRow(sr)) != NULL)
+ {
+ targetProteinStart = strtoul(row[1], buffer, 10);
+ targetProteinEnd = strtoul(row[2], buffer, 10);
+ hitStart = targetProteinStart + blastxHits->tStart * 3 + 1;
+ hitEnd = targetProteinStart + blastxHits->tEnd * 3;
+ }
+ else
+ printf("<td>%s</td>\n", blastxTarget[1]);
+ sqlFreeResult(&sr);
+ }
hPrintf("<B>Organism:</B> %s<br>",genome );
hPrintf("<B>E-value:</B> e%0.0f<br>", (blastxHits->eValue == 0)? 0 : log(blastxHits->eValue) / log(10));
hPrintf("<B>Protein identity:</B> %0.1f<BR>\n", blastxHits->identity);
- hPrintf("<B>Percent length:</B> %0.f<BR>\n", ((double) (blastxHits->qEnd - blastxHits->qStart) / ((double) (querySeqLength-3) / 3.0f)) * 100.0f);
+ //hPrintf("<B>Percent length:</B> %0.f<BR>\n", ((double) (blastxHits->qEnd - blastxHits->qStart) / ((double) (querySeqLength-3) / 3.0f)) * 100.0f);
+ hPrintf("<B>Percent length:</B> %0.f<BR>\n", ((double) (blastxHits->tEnd - blastxHits->tStart) / ((double) (targetProteinEnd - targetProteinStart -3) / 3.0f)) * 100.0f);
free(blastxTarget[0]);
free(blastxTarget[1]);
blastxHits = blastxHits->next;
}
@@ -528,9 +615,9 @@
struct sqlConnection *conn = hAllocConn(database);
sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = lowelabPfamHitsLoad(row+rowOffset);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
hPrintf("<B>Identity:</B> %d%%<BR>\n", infoload->ident);
@@ -557,9 +644,9 @@
sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = tRNAsLoad(row+rowOffset);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
hPrintf("<B>Amino Acid:</B> %s<BR>\n", infoload->aa);
@@ -589,9 +676,9 @@
struct sqlConnection *conn = hAllocConn(database);
sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = snoRNAsLoad(row+rowOffset);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
hPrintf("<B>snoScore:</B> %f<BR>\n", infoload->snoScore);
@@ -628,9 +715,9 @@
struct tigrCmrGene *infoload;
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = tigrCmrGeneLoad(row+0);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
@@ -668,9 +755,9 @@
struct allpredictions *infoload;
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, seqName, track);
- while ((row = sqlNextRow(sr)) != NULL)
+ if ((row = sqlNextRow(sr)) != NULL)
{
infoload = allpredictionsLoad(row+1);
hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
@@ -682,16 +769,27 @@
void anyGeneQuery()
{
hPrintf("<B>Name:</B> %s",cartOptionalString(cart, "i"));
}
+void customGeneQuery()
+{
+ char* name = cartOptionalString(cart, "i");
+ char *parts[2];
+ parseDelimitedString(name, ' ', parts, 2);
+ hPrintf("<B>Name:</B> %s",parts[1]);
+ free(parts[0]);
+ free(parts[1]);
+}
void ToolTipQuery()
{
char *track = cartOptionalString(cart, "g");
//char *dataset = cgiString("g");
-
+ //printf("**%s**\n", track);
if (sameString(track, "refSeq"))
toolTipGeneQuery();
+ if (startsWith("ct_UserTrack", track)) // ct_UserTrack_3545
+ customGeneQuery();
else if (sameString(track, "cddInfo"))
cddInfoTip();
else if (sameString(track, "gc20Base"))
gcPercentTip();
@@ -714,10 +812,13 @@
else if (sameString("alignInfo", track))
alignInfoTip();
else if (sameString("arCOGs", track))
arCOGTip();
+ else if (sameString("megablastInfo", track) || sameWord(track,"vecScreenInfo"))
+ megablastInfoTip();
else
anyGeneQuery();
+
}
void cartDoMiddle(struct cart *theCart)