src/hg/lib/ensFace.c 1.11

1.11 2009/05/08 17:36:16 hiram
Properly lift to Ensembl haplotype coordinates for Blue bar click through
Index: src/hg/lib/ensFace.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/ensFace.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -b -B -U 4 -r1.10 -r1.11
--- src/hg/lib/ensFace.c	8 May 2009 16:49:15 -0000	1.10
+++ src/hg/lib/ensFace.c	8 May 2009 17:36:16 -0000	1.11
@@ -75,8 +75,25 @@
     }
 return ensemblName;
 }
 
+static int liftToEnsembl(char *database, char *chrom)
+/* if table ENSEMBL_LIFT exists in the given database, return the
+   offset for this chrom, else return zero */
+{
+int offset = 0;
+struct sqlConnection *conn = hAllocConn(database);
+
+if (sqlTableExists(conn, ENSEMBL_LIFT))
+    {
+    char query[256];
+    safef(query, ArraySize(query), "select offset from %s where chrom='%s'",
+	ENSEMBL_LIFT, chrom);
+    offset = sqlQuickNum(conn,query); // returns 0 for failed query
+    }
+return offset;
+}
+
 struct dyString *ensContigViewUrl(
 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. */
@@ -84,25 +101,33 @@
 {
 struct dyString *dy = dyStringNew(0);
 char *chrName;
 char *ensemblName = ucscToEnsembl(database, chrom);
+int ensemblLift = 0;
+int start = winStart;
+int end = winEnd;
 
 if (isNotEmpty(ensemblName))
+    {
     chrName = ensemblName;
+    ensemblLift = liftToEnsembl(database, ensemblName);
+    start += ensemblLift;
+    end += ensemblLift;
+    }
 else if (startsWith("scaffold", chrom))
     chrName = chrom;
 else
     chrName = skipChr(chrom);
 if (sameWord(database,"hg19"))
     dyStringPrintf(dy, 
 	   "http://pre.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d",
-		    ensOrg, chrName, winStart, winEnd);
+		    ensOrg, chrName, start, end);
 else if (archive)
     dyStringPrintf(dy, 
 	   "http://%s.archive.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d",
-		    archive, ensOrg, chrName, winStart, winEnd);
+		    archive, ensOrg, chrName, start, end);
 else
     dyStringPrintf(dy, 
-               "http://www.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d", ensOrg, chrName, winStart, winEnd);
+               "http://www.ensembl.org/%s/contigview?chr=%s&start=%d&end=%d", ensOrg, chrName, start, end);
 return dy;
 }