src/hg/archaeStuff/tooltip/tooltip.c 1.1

1.1 2009/09/24 18:23:29 holmes
fixed blastx track
Index: src/hg/archaeStuff/tooltip/tooltip.c
===================================================================
RCS file: src/hg/archaeStuff/tooltip/tooltip.c
diff -N src/hg/archaeStuff/tooltip/tooltip.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/hg/archaeStuff/tooltip/tooltip.c	24 Sep 2009 18:23:29 -0000	1.1
@@ -0,0 +1,681 @@
+
+#include "common.h"
+#include "errabort.h"
+#include "bed.h"
+#include "cart.h"
+#include "cheapcgi.h"
+#include "hPrint.h"
+#include "hui.h"
+#include "jksql.h"
+#include "web.h"
+#include "minGeneInfo.h"
+#include "hdb.h"
+#include "cddInfo.h"
+#include "alignInfo.h"
+#include "gcPercent.h"
+#include "wiggle.h"
+#include "blastTab.h"
+#include "lowelabPfamHit.h"
+#include "tRNAs.h"
+#include "snoRNAs.h"
+#include "tigrCmrGene.h"
+#include "allpredictions.h"
+#include "hgConfig.h"
+#include "loweutils.h"
+#include "cddDesc.h"
+
+
+static char const rcsid[] = "$Id$";
+
+
+/* ---- Global variables. ---- */
+struct cart *cart;           /* This holds cgi and other variables between clicks. */
+struct hash *oldVars = NULL;
+char *database;      /* Name of mySQL database. */
+char *organism;
+
+
+
+void toolTipGeneQuery()
+{
+    struct sqlResult *sr;
+    struct minGeneInfo ginfo;
+    char **row;
+    char query[256];
+    //struct sqlConnection *hAllocConn
+    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)
+    {
+        minGeneInfoStaticLoad(row, &ginfo);
+        if (ginfo.product != NULL && differentString(ginfo.product,"none"))
+            hPrintf("<B>Product:</B> %s<BR>",ginfo.product);
+
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+
+}
+void cddInfoTip()
+{
+    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 cddInfo *infoload;
+    struct sqlConnection *conn = hAllocConn(database);
+    struct cddDesc *description = NULL;
+    if(hTableExists("centraldb","cddDesc"))
+    {
+        sprintf(query, "select * from centraldb.cddDesc where accession = '%s'", itemName);
+        //sprintf(query, "select * from %s where query = '%s'", blastpHitsTable, queryName);
+        struct sqlResult *srCddDesc = sqlGetResult(conn, query);
+
+
+
+        while ((row = sqlNextRow(srCddDesc)) != NULL)
+        {
+            struct cddDesc *element;
+            element = cddDescLoad(row);
+            slAddTail(&description, element);
+        }
+        sqlFreeResult(&srCddDesc);
+    }
+
+
+    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)
+    {
+        infoload = cddInfoLoad(row+rowOffset);
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->fullname);
+        if(!hTableExists("centraldb","cddDesc"))
+        {
+        }
+        else if(strlen(description->name) > 70)
+        {
+            hPrintf("<B>Description:</B> %.70s...<BR>\n", description->name);
+        }
+        else
+        {
+            hPrintf("<B>Description:</B> %s<BR>\n", description->name);
+        }
+
+        hPrintf("<B>E-value:</B> %0.0e<BR>\n", infoload->evalue);
+        hPrintf("<B>Percent Positive:</B> %u%%<BR>\n", infoload->percentident);
+        hPrintf("<B>Percent Length:</B> %u%%<BR>\n", infoload->percentlength);
+
+
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void gcPercentTip()
+{
+    /*
+    //char *track =  cartOptionalString(cart, "g");
+
+    hPrintf("<B>Name:</B> %s",cartOptionalString(cart, "i"));
+
+    //char *itemName =  cartOptionalString(cart, "i");
+    //char *group = cartOptionalString(cart, "g");
+
+    bits64 iCount = 0;
+    struct bbiInterval *bb;
+
+    struct lm *lm = lmInit(0);
+    double sum = 0.0;
+    //struct bbiInterval *bigWigIntervalQuery
+    // /data/gbdb/pyrAer1/bed/gc20Base/gc20Base.wig
+
+    struct bbiFile *bbi = bigWigFileOpen("/data/gbdb/pyrAer1/bed/gc20Base/gc20Base.wib");
+    struct bbiInterval *bbList = bigWigIntervalQuery(bbi, chrom, winStart, winEnd, lm);
+    for (bb = bbList; bb != NULL; bb = bb->next)
+    {
+        iCount += 1;
+        double val = bb->val;
+        sum += val;
+    }
+    hPrintf("<B>GC Percentage:</B> %f<BR>\n", sum/iCount);*/
+    char *seqName = cartString(cart, "c");
+    char *table = cartString(cart, "g");
+    struct hash *trackHash = makeTrackHashWithComposites(database, seqName, TRUE);
+    struct trackDb *tdb = hashFindVal(trackHash, table);
+    struct sqlConnection *conn = hAllocConn(database);
+    char *chrom =  cartOptionalString(cart, "c");
+    int winStart = cartInt(cart, "o");
+    int winEnd = cartInt(cart, "t");
+    struct wiggleDataStream *wds = wiggleDataStreamNew();
+    unsigned span = 0;
+    boolean hasBin;
+    hFindSplitTable(database, seqName, tdb->tableName, table, &hasBin);
+    span = minSpan(conn, table, chrom, winStart, winEnd, cart, tdb);
+    wds->setSpanConstraint(wds, span);
+    wds->setChromConstraint(wds, chrom);
+    wds->setPositionConstraint(wds, winStart, winEnd);
+    wds->getData(wds, database, table, 8);
+    //hPrintf("<B>Mean:</B>%s <BR>\n",tdb->tableName);
+    hPrintf("<B>Window Mean:</B> %f<BR>\n", wds->stats->mean);
+}
+void alignInfoTip()
+{
+
+    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 query[256];
+    int rowOffset;
+    sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
+    struct sqlConnection *conn = hAllocConn(database);
+    sr = sqlGetResult(conn, query);
+    rowOffset = hOffsetPastBin(database, seqName, track);
+
+    struct alignInfo *infoload = NULL;
+    char **row;
+    while ((row = sqlNextRow(sr)) != NULL)
+    {
+        struct alignInfo *element;
+
+        element = alignInfoLoad(row+rowOffset);
+        slAddTail(&infoload, element);
+    }
+    sqlFreeResult(&sr);
+
+    while (infoload != NULL)
+    {
+        char genome[50] = "";
+        char clade[50] = "";
+        memset(genome, 0, 50);
+        memset(clade, 0, 50);
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+
+        struct minGeneInfo *ginfo;
+        ginfo = getGbProtCodeInfo(conn, infoload->orgn,infoload->name);
+        hPrintf("<B>Product:</B> %s<BR>\n", ginfo->product);
+
+        getGenomeClade(conn, infoload->orgn, genome, clade);
+        hPrintf("<B>Genome:</B> %s<BR>\n", genome);
+        infoload = infoload->next;
+    }
+
+    hFreeConn(&conn);
+}
+void blastpTip()
+{
+    char query[512];
+    char *genename =  cartOptionalString(cart, "i");
+
+
+    char *blastpTarget[2];
+    parseDelimitedString(genename, ':', blastpTarget, 2);
+    //hPrintf("<B>Query:</B> %s<BR>\n", genename);
+
+
+    struct sqlConnection *conn = hAllocConn(database);
+
+
+
+    struct sqlResult *srRefSeq;
+    char refSeq[] = "refSeq";
+    sprintf(query, "select name, cdsStart, cdsEnd,  strand from %s where chrom = '%s' and cdsStart <= %i and cdsEnd >= %i",
+            refSeq, cartOptionalString(cart, "c"),  cartInt(cart, "o"), cartInt(cart, "t"));
+    srRefSeq = sqlGetResult(conn, query);
+
+    //char queryName[50];
+    char **buffer = NULL;
+    char **row;
+    unsigned int querySeqLength = 0;
+    unsigned int queryStart = 0;
+    unsigned int queryEnd = 0;
+    int postrand = 1;
+    if ((row = sqlNextRow(srRefSeq)) != NULL)
+    {
+        strcpy(genename, row[0]);
+        queryStart = strtoul(row[1], buffer, 10);
+        queryEnd = strtoul(row[2], buffer, 10);
+        querySeqLength = queryEnd - queryStart;
+        if (row[3][0] != '+')
+            postrand = 0;
+    }
+    hPrintf("<B>Query:</B> %s<BR>\n", genename);
+    hPrintf("<B>Target:</B> %s<BR>\n", blastpTarget[0]);
+
+
+    sqlFreeResult(&srRefSeq);
+
+    struct sqlResult *srBlastpHits = NULL;
+    char blastpHitsTable[] = "blastpHits";
+    int start;
+    int end;
+    if(postrand)
+    {
+        start = cartInt(cart, "o") - queryStart;
+        end = cartInt(cart, "t") - queryStart;
+    }
+    else
+    {
+
+        start =  queryEnd - cartInt(cart, "t");
+        end =  queryEnd - cartInt(cart, "o");
+    }
+
+
+
+        /* Get species info */
+    //sprintf(query, "select * from %s where query = '%s' and target like '%%:%s'", blastpHitsTable, queryName,gene);
+    sprintf(query, "select * from %s where query = '%s' and qStart*3 = %d and qEnd*3 = %d and target like '%%:%s'", blastpHitsTable, genename,start, end,blastpTarget[0]);
+    //sprintf(query, "select * from %s where query = '%s'", blastpHitsTable, queryName);
+    srBlastpHits = sqlGetResult(conn, query);
+
+
+    struct blastTab *blastpHits = NULL;
+    while ((row = sqlNextRow(srBlastpHits)) != NULL)
+    {
+        struct blastTab *element;
+        element = blastTabLoad(row);
+        slAddTail(&blastpHits, element);
+    }
+    sqlFreeResult(&srBlastpHits);
+    while (blastpHits != NULL)
+    {
+        char *blastpTarget[2];
+
+        parseDelimitedString(blastpHits->target, ':', blastpTarget, 2);
+        /*
+        hPrintf("<B>Start:</B> %d<br>", start);
+        hPrintf("<B>End:</B> %d<br>", end);
+        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);
+
+        /*char productquery[512];
+        struct sqlResult *srProduct;
+        char **product;
+        sprintf(productquery, "select product from %s.gbProtCodeXra where name = '%s'",blastpTarget[0], blastpTarget[1]);
+        srProduct = sqlGetResult(conn, productquery);
+        if ((product = sqlNextRow(srProduct)) != NULL)
+            hPrintf("<B>Product:</B> %s<BR>\n", product[0]);
+        sqlFreeResult(&srProduct);*/
+        char genome[50] = "";
+        char clade[50] = "";
+        memset(genome, 0, 50);
+        memset(clade, 0, 50);
+        getGenomeClade(conn, blastpTarget[0], genome, clade);
+
+        hPrintf("<B>Organism:</B> %s<br>",genome );
+        hPrintf("<B>E-value:</B> e%0.0f<br>", (blastpHits->eValue == 0)? 0 : log(blastpHits->eValue) / log(10));
+        hPrintf("<B>Protein identity:</B> %0.1f<BR>\n", blastpHits->identity);
+        hPrintf("<B>Percent length:</B> %0.f<BR>\n", ((double) (blastpHits->qEnd - blastpHits->qStart) / ((double) (querySeqLength-3) / 3.0f)) * 100.0f);
+        free(blastpTarget[0]);
+        free(blastpTarget[1]);
+        blastpHits = blastpHits->next;
+    }
+
+
+    hFreeConn(&conn);
+}
+void blastxTip()
+{
+    char query[512];
+    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);
+
+
+
+
+    char *lookuptable;
+
+
+    if(hTableExists(database,"igenics"))
+    {
+
+        lookuptable = "igenics";
+    }
+    else if(hTableExists(database,"scaffolds"))
+    {
+        lookuptable = "scaffolds";
+    }
+    else
+    {
+        hFreeConn(&conn);
+        return;
+    }
+
+    sprintf(query, "select name, chromStart, chromEnd,  strand from %s where chrom = '%s' and chromStart <= %i and chromEnd >= %i",
+            lookuptable, cartOptionalString(cart, "c"),  cartInt(cart, "o"), cartInt(cart, "t"));
+    struct sqlResult *srRefSeq;
+    srRefSeq = sqlGetResult(conn, query);
+
+
+    //char queryName[50];
+    char **buffer = NULL;
+    char **row;
+    unsigned int querySeqLength = 0;
+    unsigned int queryStart = 0;
+    unsigned int queryEnd = 0;
+    int postrand = 1;
+    if ((row = sqlNextRow(srRefSeq)) != NULL)
+    {
+        strcpy(genename, row[0]);
+        queryStart = strtoul(row[1], buffer, 10);
+        queryEnd = strtoul(row[2], buffer, 10);
+        querySeqLength = queryEnd - queryStart;
+        //hPrintf("<B>Query:</B> %s<BR>\n", genename);
+        if (row[3][0] != '+')
+            postrand = 0;
+    }
+
+    hPrintf("<B>Target:</B> %s<BR>\n", blastxTarget[0]);
+    sqlFreeResult(&srRefSeq);
+
+
+    char blastxHitsTable[] = "blastxHits";
+    int start;
+    int end;
+    int revstart;
+    int revend;
+    if(postrand)
+    {
+        start = cartInt(cart, "o") - queryStart;
+        end = cartInt(cart, "t") - queryStart;
+        revstart = cartInt(cart, "t") - queryStart-1;
+        revend = cartInt(cart, "o") - queryStart+1;
+    }
+    else
+    {
+        start =  queryEnd - cartInt(cart, "t");
+        end =  queryEnd - cartInt(cart, "o");
+        revstart =  queryEnd - cartInt(cart, "o")-1;
+        revend =  queryEnd - cartInt(cart, "t")+1;
+    }
+
+
+    sprintf(query, "select * from %s where query = '%s' and ((qStart = %d and qEnd = %d) or (qStart = %d and qEnd = %d)) and target like '%%:%s'", blastxHitsTable, genename,start,end,revstart, revend,blastxTarget[0]);
+    //sprintf(query, "select * from %s where query = '%s'", blastxHitsTable,genename);
+    struct sqlResult *srBlastxHits;
+    srBlastxHits = sqlGetResult(conn, query);
+
+    struct blastTab *blastxHits = NULL;
+    while ((row = sqlNextRow(srBlastxHits)) != NULL)
+    {
+        //hPrintf("**");
+        struct blastTab *element;
+        element = blastTabLoad(row);
+        slAddTail(&blastxHits, element);
+    }
+    sqlFreeResult(&srBlastxHits);
+
+
+
+    while (blastxHits != NULL)
+    {
+        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);
+        char genome[50] = "";
+        char clade[50] = "";
+        memset(genome, 0, 50);
+        memset(clade, 0, 50);
+
+        getGenomeClade(conn, blastxTarget[0], genome, clade);
+
+        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);
+        free(blastxTarget[0]);
+        free(blastxTarget[1]);
+        blastxHits = blastxHits->next;
+    }
+
+
+    hFreeConn(&conn);
+}
+void lowelabPfamHitsTip()
+{
+    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 lowelabPfamHits *infoload;
+    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)
+    {
+        infoload = lowelabPfamHitsLoad(row+rowOffset);
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+        hPrintf("<B>Identity:</B> %d%%<BR>\n", infoload->ident);
+        hPrintf("<B>Percent length:</B> %d%%<BR>\n", infoload->percLen);
+
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void TrnasTip()
+{
+    struct sqlConnection *conn = hAllocConn(database);
+    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 tRNAs *infoload;
+
+    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)
+    {
+        infoload = tRNAsLoad(row+rowOffset);
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+        hPrintf("<B>Amino Acid:</B> %s<BR>\n", infoload->aa);
+        hPrintf("<B>Anticodon:</B> %s<BR>\n", infoload->ac);
+        hPrintf("<B>Score:</B> %f<BR>\n", infoload->trnaScore);
+
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void MultizTip()
+{
+    hPrintf("<B>Name:</B> %s","MultiZ Alignment Track");
+}
+void SnornaTip()
+{
+    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 snoRNAs *infoload;
+    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)
+    {
+        infoload = snoRNAsLoad(row+rowOffset);
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+        hPrintf("<B>snoScore:</B> %f<BR>\n", infoload->snoScore);
+        hPrintf("<B>hmmScore:</B> %f<BR>\n", infoload->hmmScore);
+        hPrintf("<B>C box:</B> %s<BR>\n", infoload->cBox);
+        hPrintf("<B>D box:</B> %s<BR>\n", infoload->dBox);
+        hPrintf("<B>C-Prime box:</B> %s<BR>\n", infoload->cpBox);
+        hPrintf("<B>D-Prime box:</B> %s<BR>\n", infoload->dpBox);
+
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void tigrCmrTip()
+{
+    struct sqlConnection *conn = hAllocConn(database);
+
+    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");
+
+
+    char query[256];
+
+
+
+    sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
+
+    int rowOffset;
+    struct sqlResult *sr;
+    char **row;
+    struct tigrCmrGene *infoload;
+    sr = sqlGetResult(conn, query);
+
+    rowOffset = hOffsetPastBin(database, seqName, track);
+    while ((row = sqlNextRow(sr)) != NULL)
+    {
+        infoload = tigrCmrGeneLoad(row+0);
+
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+        hPrintf("<B>Common Name:</B> %s<BR>\n", infoload->tigrCommon);
+        if(infoload->tigrMainRole[0] != '\0')
+        {
+            hPrintf("<B>Main Role:</B> %s<BR>\n", infoload->tigrMainRole);
+            if(infoload->tigrSubRole[0] != '\0')
+            {
+                hPrintf("<B>Sub Role:</B> %s<BR>\n", infoload->tigrSubRole);
+            }
+        }
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void allpredictionsTip()
+{
+    struct sqlConnection *conn = hAllocConn(database);
+
+    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");
+
+
+    char query[256];
+
+    sprintf(query, "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d and chromEnd = '%d';", track, itemName,seqName,start, end);
+
+    int rowOffset;
+    struct sqlResult *sr;
+    char **row;
+    struct allpredictions *infoload;
+    sr = sqlGetResult(conn, query);
+
+    rowOffset = hOffsetPastBin(database, seqName, track);
+    while ((row = sqlNextRow(sr)) != NULL)
+    {
+        infoload = allpredictionsLoad(row+1);
+
+        hPrintf("<B>Name:</B> %s<BR>\n", infoload->name);
+        hPrintf("<B>Sources:</B> %s<BR>\n", infoload->source);
+    }
+    sqlFreeResult(&sr);
+    hFreeConn(&conn);
+}
+void anyGeneQuery()
+{
+    hPrintf("<B>Name:</B> %s",cartOptionalString(cart, "i"));
+}
+
+void ToolTipQuery()
+{
+    char *track =  cartOptionalString(cart, "g");
+    //char *dataset = cgiString("g");
+
+    if (sameString(track, "refSeq"))
+        toolTipGeneQuery();
+    else if (sameString(track, "cddInfo"))
+        cddInfoTip();
+    else if (sameString(track, "gc20Base"))
+        gcPercentTip();
+    else if (startsWith("BlastP_", track))
+        blastpTip();
+    else if (startsWith("BlastX_", track))
+        blastxTip();
+    else if (sameString("lowelabPfamHits", track))
+        lowelabPfamHitsTip();
+    else if (sameString("tRNAs", track))
+        TrnasTip();
+    else if (startsWith("multiz", track))
+        MultizTip();
+    else if (sameString("snoRNAs", track))
+        SnornaTip();
+    else if (sameString("tigrCmrORFs", track))
+        tigrCmrTip();
+    else if (sameString("allpredictions", track))
+        allpredictionsTip();
+    else if (sameString("alignInfo", track))
+        alignInfoTip();
+    else
+        anyGeneQuery();
+}
+
+
+void cartDoMiddle(struct cart *theCart)
+/* Save cart*/
+{
+    cart = theCart;
+    getDbAndGenome(cart, &database, &organism, oldVars);
+    ToolTipQuery();
+}
+
+char *excludeVars[] = {"hgSeq.revComp", "bool.hcg.dna.rc", "Submit", "submit", "g", "i", "aliTrack", "addp", "pred", NULL};
+int main(int argc, char *argv[])
+{
+    cgiSpoof(&argc,argv);
+    //dispatchRoutines();
+    cartEmptyShell(cartDoMiddle, hUserCookie(), excludeVars, NULL);
+    //printf("Hello, world!\n");
+
+    return 0;
+}
+
+