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)