src/hg/hgc/lowelab.c 1.40

1.40 2009/11/09 19:20:29 holmes
Adding vecscreen and orthologs
Index: src/hg/hgc/lowelab.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgc/lowelab.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -b -B -U 4 -r1.39 -r1.40
--- src/hg/hgc/lowelab.c	14 Oct 2009 20:26:28 -0000	1.39
+++ src/hg/hgc/lowelab.c	9 Nov 2009 19:20:29 -0000	1.40
@@ -91,8 +91,11 @@
 #include "loweutils.h"
 #include "cddDesc.h"
 #include "arCOGs.h"
 #include "arcogdesc.h"
+#include "megablastInfo.h"
+
+#define LISTUI
 
 static char const rcsid[] = "$Id$";
 
 extern char *uniprotFormat;
@@ -3008,9 +3011,56 @@
   hFreeConn(&conn);
   arCOGsFree(&infoload);
   printTrackHtml(tdb);
 }
+void doloweOrthologs(struct trackDb *tdb, char *itemName)
+{
+  char *track = tdb->tableName;
+  char query[512];
+  struct sqlConnection *conn = hAllocConn(database);
+  struct sqlResult *sr;
+  char *dupe, *words[16];
+  char **row;
+  int wordCount;
+  int rowOffset;
+  struct bed *infoload;
+  int bedSize = 0;
+  int start = cartInt(cart, "o");
+  int end = cartInt(cart, "t");
+
+    dupe = cloneString(tdb->type);
+    wordCount = chopLine(dupe, words);
+    if (wordCount > 1)
+        bedSize = atoi(words[1]);
+    if (bedSize < 3) bedSize = 3;
+
+  genericHeader(tdb,itemName);
+  dupe = cloneString(tdb->type);
+  wordCount = chopLine(dupe, words);
+
+  rowOffset = hOffsetPastBin(database,seqName, track);
+
+  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);
+  while ((row = sqlNextRow(sr)) != NULL)
+    {
+        infoload = bedLoadN(row+rowOffset, bedSize);
+    printf("<B>Name:</B> %s\n", infoload->name);
+    printf(" <A HREF=\"http://archdev-holmes.cse.ucsc.edu/cgi-bin/hgFrame?track=loweOrthologs&refseq=1&db=%s&name=%s\">List of Orthologs</A><BR>",database,infoload->name);
+    printf("<B>Position:</B> "
+                 "<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">",
+                 hgTracksPathAndSettings(), database, infoload->chrom, infoload->chromStart + 1, infoload->chromEnd);
+          printf("%s:%d-%d</A><BR>\n", infoload->chrom, infoload->chromStart + 1, infoload->chromEnd);
+      printf("<B>Strand:</B> %s<BR>\n", infoload->strand);
+      printf("<B>Genomic size: </B> %d nt<BR>\n", (infoload->chromEnd - infoload->chromStart));
 
+          if (infoload->next != NULL)
+            printf("<hr>\n");
+    }
+  sqlFreeResult(&sr);
+  hFreeConn(&conn);
+  printTrackHtml(tdb);
+}
 void doCddInfo(struct trackDb *tdb, char *itemName)
 {
   char *track = tdb->tableName;
   char query[512];
@@ -3077,8 +3127,63 @@
   hFreeConn(&conn);
   cddInfoFree(&infoload);
   printTrackHtml(tdb);
 }
+void domegablastInfo(struct trackDb *tdb, char *itemName)
+{
+  char *track = tdb->tableName;
+  char query[512];
+  struct sqlConnection *conn = hAllocConn(database);
+  struct sqlResult *sr;
+  char *dupe, *words[16];
+  char **row;
+  int wordCount;
+  int rowOffset;
+  struct megablastInfo *infoload;
+  int start = cartInt(cart, "o");
+  int end = cartInt(cart, "t");
+
+
+  genericHeader(tdb,itemName);
+  dupe = cloneString(tdb->type);
+  wordCount = chopLine(dupe, words);
+
+  rowOffset = hOffsetPastBin(database,seqName, track);
+
+  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);
+  while ((row = sqlNextRow(sr)) != NULL)
+    {
+        infoload = megablastInfoLoad(row+rowOffset);
+    printf("<B>Name:</B> %s<BR>\n", infoload->name);
+    printf("<B>Accession:</B>  %s<A HREF=\"http://www.ncbi.nlm.nih.gov/nuccore/%s\" TARGET=_blank>",
+           infoload->name, infoload->name);
+    printf(" Link to NCBI Site</A> <BR>\n");
+    printf("<B>Description:</B> %s<BR>\n", infoload->fullname);
+    printf("<B>E-value:</B> %0.0e", infoload->evalue);
+    #ifdef LISTUI
+    printf(" <A HREF=\"http://archdev-holmes.cse.ucsc.edu/cgi-bin/hgList?track=megablastInfo&order=evalue&db=%s\">Sort by E-value</A>",database);
+    #endif
+    printf("<BR>\n");
+    printf("<B>Protein Identity:</B> %u%%\n", infoload->percentident);
+    #ifdef LISTUI
+    printf(" <A HREF=\"http://archdev-holmes.cse.ucsc.edu/cgi-bin/hgList?track=megablastInfo&order=percentident&db=%s\">Sort by Percent Identity</A>",database);
+    #endif
+    printf("<BR>\n");
+          printf("<B>Position:</B> "
+                 "<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">",
+                 hgTracksPathAndSettings(), database, infoload->chrom, infoload->chromStart + 1, infoload->chromEnd);
+          printf("%s:%d-%d</A><BR>\n", infoload->chrom, infoload->chromStart + 1, infoload->chromEnd);
+          printf("<B>Strand:</B> %s<BR>\n", infoload->strand);
+          printf("<B>Genomic size: </B> %d nt<BR>\n", (infoload->chromEnd - infoload->chromStart));
+          if (infoload->next != NULL)
+            printf("<hr>\n");
+    }
+  sqlFreeResult(&sr);
+  hFreeConn(&conn);
+  megablastInfoFree(&infoload);
+  printTrackHtml(tdb);
+}
 void doAlignInfo(struct trackDb *tdb, char *itemName)
 {
   char *track = tdb->tableName;
   char query[512];
@@ -3231,8 +3336,16 @@
 else if (sameWord(track,"arCOGs"))
   {
     doarCOGs(tdb, item);
   }
+else if (sameWord(track,"megablastInfo") || sameWord(track,"vecScreenInfo"))
+  {
+    domegablastInfo(tdb, item);
+  }
+else if (sameWord(track,"loweOrthologs"))
+  {
+    doloweOrthologs(tdb, item);
+  }
 else
     return FALSE;
 return TRUE;
 }