e2467a639cc1e98174ffbd9d0da399b3b75bc9ae
markd
  Thu Jul 26 21:33:38 2012 -0700
highlighting by attribute functionality for GENCODE
diff --git src/hg/hgc/gencodeClick.c src/hg/hgc/gencodeClick.c
index 6520e75..43250e2 100644
--- src/hg/hgc/gencodeClick.c
+++ src/hg/hgc/gencodeClick.c
@@ -482,46 +482,63 @@
 slReverse(&supportEvids2);
 *supportEvids = supportEvids2;
 }
 
 static struct supportEvid *loadSupportEvid(struct wgEncodeGencodeTranscriptSupport *transcriptSupports,
                                            struct wgEncodeGencodeExonSupport *exonSupports)
 /* load transcript and supporting evidence into a common structure */
 {
 struct supportEvid *supportEvids = NULL;
 transcriptSupportToSupportEvid(&supportEvids, transcriptSupports);
 exonSupportToSupportEvid(&supportEvids, exonSupports);
 sortUniqSupportExidence(&supportEvids);
 return supportEvids;
 }
 
+static char *getSupportEvidEnsemblUrl(char *gencodeId)
+/* Generate a URL to the ensembl supporting evidence page.
+ * WARNING: static return. */
+{
+static char url[256];
+// generate organism part of url in the form: Homo_sapiens
+char *sciName = hScientificName(database);
+if (sciName == NULL)
+    errAbort("can't get scientific name for %s", database);
+char *space = strchr(sciName, ' ');
+if (space != NULL)
+    *space = '_';
+safef(url, sizeof(url), "http://www.ensembl.org/%s/Transcript/SupportingEvidence?db=core;t=%s", sciName, gencodeId);
+freeMem(sciName);
+return url;
+}
+
 static void writeSupportExidenceEntry(struct supportEvid *supportEvid)
 /* write HTML table entry  for a supporting evidence */
 {
 // FIXME: should link to sources when possible
 printf("<td width=\"25%%\">%s", supportEvid->seqSrc);
 printf("<td width=\"25%%\">%s", supportEvid->seqId);
 }
 
-static void writeSupportingEvidenceLinkHtml(struct wgEncodeGencodeTranscriptSupport *transcriptSupports,
+static void writeSupportingEvidenceLinkHtml(char *gencodeId, struct wgEncodeGencodeTranscriptSupport *transcriptSupports,
                                             struct wgEncodeGencodeExonSupport *exonSupports)
 /* write HTML links to supporting evidence */
 {
 struct supportEvid *supportEvids = loadSupportEvid(transcriptSupports, exonSupports);
 
 printf("<table class=\"hgcCcds\"><thead>\n");
-printf("<tr><th colspan=\"4\">Supporting Evidence</tr>\n");
+printf("<tr><th colspan=\"4\">Supporting Evidence (<a href=\"%s\" target=\"_blank\">view in Ensembl</a>)</tr>\n", getSupportEvidEnsemblUrl(gencodeId));
 printf("<tr class=\"hgcCcdsSub\"><th>Source<th>Sequence<th>Source<th>Sequence</tr>\n");
 printf("</thead><tbody>\n");
 struct supportEvid *supportEvid = supportEvids;
 int i, rowCnt = 0;
 while ((supportEvid != NULL) || (rowCnt == 0))
     {
     printf("<tr>");
     for (i = 0; i < 2; i++)
         {
         if (supportEvid != NULL)
             {
             writeSupportExidenceEntry(supportEvid);
             supportEvid = supportEvid->next;
             }
         else
@@ -598,31 +615,31 @@
     safef(header, sizeof(header), "%s %s (%s)", title, gencodeId, transAttrs->geneName);
 else
     safef(header, sizeof(header), "%s %s", title, gencodeId);
 cartWebStart(cart, database, "%s", header);
 printf("<H2>%s</H2>\n", header);
 
 writeBasicInfoHtml(tdb, gencodeId, transAnno, transAttrs, geneChromStart, geneChromEnd, geneSource, transcriptSource, haveTsl, tsl);
 writeTagLinkHtml(tags);
 writeSequenceHtml(tdb, gencodeId, transAnno);
 if (haveRemarks)
     writeAnnotationRemarkHtml(remarks);
 writePdbLinkHtml(pdbs);
 writePubMedLinkHtml(pubMeds);
 writeRefSeqLinkHtml(refSeqs);
 writeUniProtLinkHtml(uniProts);
-writeSupportingEvidenceLinkHtml(transcriptSupports, exonSupports);
+writeSupportingEvidenceLinkHtml(gencodeId, transcriptSupports, exonSupports);
 wgEncodeGencodeAttrsFree(&transAttrs);
 wgEncodeGencodeAnnotationRemarkFreeList(&remarks);
 wgEncodeGencodeGeneSourceFreeList(&geneSource);
 wgEncodeGencodeTranscriptSourceFreeList(&transcriptSource);
 wgEncodeGencodePdbFreeList(&pdbs);
 wgEncodeGencodePubMedFreeList(&pubMeds);
 wgEncodeGencodeRefSeqFreeList(&refSeqs);
 wgEncodeGencodeTranscriptSupportFreeList(&transcriptSupports);
 wgEncodeGencodeExonSupportFreeList(&exonSupports);
 wgEncodeGencodeUniProtFreeList(&uniProts);
 wgEncodeGencodeTranscriptionSupportLevelFreeList(&tsl);
 }
 
 static void doGencodeGene2WayPseudo(struct trackDb *tdb, char *gencodeId, struct sqlConnection *conn, struct genePred *pseudoAnno)
 /* Process click on a GENCODE two-way pseudogene annotation track. */