96a87aed7b047a453d14ae47ca82de09492e6117
aamp
  Wed Mar 2 14:42:02 2011 -0800
track-handling code for ENCODE peptideMapping tracks
diff --git src/hg/hgc/encodeClick.c src/hg/hgc/encodeClick.c
index 3c6ac0e..a8a9f10 100644
--- src/hg/hgc/encodeClick.c
+++ src/hg/hgc/encodeClick.c
@@ -1,25 +1,26 @@
 /* Handle details page for ENCODE tracks. */
 
 #include "common.h"
 #include "cart.h"
 #include "hgc.h"
 #include "hCommon.h"
 #include "hgColors.h"
 #include "customTrack.h"
 #include "web.h"
 #include "encode/encodePeak.h"
+#include "peptideMapping.h"
 
 #ifdef UNUSED
 static boolean pairInList(struct slPair *pair, struct slPair *list)
 /* Return TRUE if pair is in list. */
 {
 struct slPair *el;
 for (el = list; el != NULL; el = el->next)
     if (sameString(pair->name, el->name) && sameString(pair->val, el->val))
         return TRUE;
 return FALSE;
 }
 
 static boolean selGroupListMatch(struct trackDb *tdb, struct slPair *selGroupList)
 /* Return TRUE if tdb has match to every item in selGroupList */
 {
@@ -176,15 +177,69 @@
     webPrintLinkCell(s);
     if (start > inter->thickStart)
 	distance = inter->thickEnd - start;
     else
 	distance = inter->thickStart - end;
     safef(s, sizeof(s), "%d", distance);
     webPrintLinkCell(s);
     if (++outCount == 50)
 	break;
     if (inter->next != NULL)
 	webPrintLinkTableNewRow();
     }
 webPrintLinkTableEnd();
 sqlFreeResult(&sr);
 }
+
+void doPeptideMapping(struct sqlConnection *conn, struct trackDb *tdb, char *item)
+/* Print details for a peptideMapping track.  */
+{
+char *chrom = cartString(cart,"c");
+int start = cgiInt("o");
+int end = cgiInt("t");
+char **row;
+struct sqlResult *sr;
+struct peptideMapping *pos = NULL;
+int rowOffset;
+genericHeader(tdb, NULL);
+sr = hOrderedRangeQuery(conn, tdb->track, chrom, start, end, NULL, &rowOffset);
+if ((row = sqlNextRow(sr)) != NULL)
+    {
+    pos = peptideMappingLoad(row + rowOffset);
+    sqlFreeResult(&sr);
+    }
+else
+    {
+    errAbort("No items in range");
+    }
+printf("<B>Item:</B> %s<BR>\n", pos->name);
+printf("<B>Score:</B> %d<BR>\n", pos->score);
+printf("<B>Raw Score:</B> %f<BR>\n", pos->rawScore);
+printf("<B>Spectrum ID:</B> %s<BR>\n", pos->spectrumId);
+printf("<B>Peptide Rank:</B> %d<BR>\n", pos->peptideRank);
+printf("<B>Peptide Repeat Count:</B> %d<BR>\n", pos->peptideRepeatCount);
+printPos(pos->chrom, pos->chromStart, pos->chromEnd, pos->strand, TRUE, item);
+if (pos->peptideRepeatCount > 1)
+    {
+    char query[256];
+    struct peptideMapping anotherPos;
+    safef(query, sizeof(query), "select * from %s where name=\'%s\' and not (chrom=\'%s\' and chromStart=%d and chromEnd=%d)", 
+	  tdb->track, pos->name, pos->chrom, pos->chromStart, pos->chromEnd);
+    printf("<BR>\n");
+    webPrintLinkTableStart();
+    webPrintLabelCell("Other genomic loci");
+    sr = sqlGetResult(conn, query);
+    while ((row = sqlNextRow(sr)) != NULL)
+	{
+	char s[1024];
+	peptideMappingStaticLoad(row + rowOffset, &anotherPos);
+	safef(s, sizeof(s), "<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">%s:%d-%d</A>",
+	      hgTracksPathAndSettings(), database, anotherPos.chrom, anotherPos.chromStart+1, 
+	      anotherPos.chromEnd, anotherPos.chrom, anotherPos.chromStart+1, anotherPos.chromEnd);
+	webPrintLinkTableNewRow();
+	webPrintLinkCell(s);
+	}
+    webPrintLinkTableEnd();
+    sqlFreeResult(&sr);
+    }    
+peptideMappingFree(&pos);
+}