src/hg/lib/ensFace.c 1.10

1.10 2009/05/08 16:49:15 hiram
Allow hg19 to click through to pre.ensembl.org with chr name translation
Index: src/hg/lib/ensFace.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/ensFace.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -b -B -U 4 -r1.9 -r1.10
--- src/hg/lib/ensFace.c	16 Jan 2009 05:42:15 -0000	1.9
+++ src/hg/lib/ensFace.c	8 May 2009 16:49:15 -0000	1.10
@@ -3,8 +3,9 @@
 #include "common.h"
 #include "dystring.h"
 #include "ensFace.h"
 #include "hCommon.h"
+#include "hdb.h"
 
 static char const rcsid[] = "$Id$";
 
 struct stringPair
@@ -57,22 +58,46 @@
         *p = '_';
     return res;
 }
 
+static char *ucscToEnsembl(char *database, char *chrom)
+/* if table UCSC_TO_ENSEMBL exists in the given database, return the
+   Ensembl name for this chrom */
+{
+static char ensemblName[256];
+struct sqlConnection *conn = hAllocConn(database);
+ensemblName[0] = 0;
+if (sqlTableExists(conn, UCSC_TO_ENSEMBL))
+    {
+    char query[256];
+    safef(query, ArraySize(query), "select ensembl from %s where ucsc='%s'",
+	UCSC_TO_ENSEMBL, chrom);
+    (void) sqlQuickQuery(conn,query,ensemblName,ArraySize(ensemblName));
+    }
+return ensemblName;
+}
+
 struct dyString *ensContigViewUrl(
-                            char *ensOrg, char *chrom, int chromSize,
+char *database, char *ensOrg, char *chrom, int chromSize,
                             int winStart, int winEnd, char *archive)
 /* Return a URL that will take you to ensembl's contig view. */
 /* Not using chromSize.  archive is possibly a date reference */
 {
 struct dyString *dy = dyStringNew(0);
 char *chrName;
+char *ensemblName = ucscToEnsembl(database, chrom);
 
-if (startsWith("scaffold", chrom))
+if (isNotEmpty(ensemblName))
+    chrName = ensemblName;
+else if (startsWith("scaffold", chrom))
     chrName = chrom;
 else
     chrName = skipChr(chrom);
-if (archive)
+if (sameWord(database,"hg19"))
+    dyStringPrintf(dy, 
+	   "http://pre.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d",
+		    ensOrg, chrName, winStart, winEnd);
+else if (archive)
     dyStringPrintf(dy, 
 	   "http://%s.archive.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d",
 		    archive, ensOrg, chrName, winStart, winEnd);
 else