src/hg/hgc/encodeClick.c 1.10
1.10 2009/10/26 15:32:52 aamp
Details stuff for 5C tracks.
Index: src/hg/hgc/encodeClick.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgc/encodeClick.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -b -B -U 1000000 -r1.9 -r1.10
--- src/hg/hgc/encodeClick.c 4 Mar 2009 19:22:35 -0000 1.9
+++ src/hg/hgc/encodeClick.c 26 Oct 2009 15:32:52 -0000 1.10
@@ -1,87 +1,150 @@
/* 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"
void doEncodePeak(struct trackDb *tdb, struct customTrack *ct)
/* details for encodePeak type tracks. */
{
struct sqlConnection *conn;
struct sqlResult *sr;
enum encodePeakType peakType;
char **row;
char *db;
char *table = tdb->tableName;
char *chrom = cgiString("c");
int start = cgiInt("o");
int end = cgiInt("t");
int rowOffset;
/* connect to DB */
if (ct)
{
db = CUSTOM_TRASH;
table = ct->dbTableName;
}
else
db = database;
conn = hAllocConn(db);
peakType = encodePeakInferTypeFromTable(db, table, tdb->type);
if (peakType == 0)
errAbort("unrecognized peak type from table %s", tdb->tableName);
genericHeader(tdb, NULL);
sr = hOrderedRangeQuery(conn, table, chrom, start, end,
NULL, &rowOffset);
row = sqlNextRow(sr);
if (row != NULL)
{
char **rowPastOffset = row + rowOffset;
float signal = -1;
float pValue = -1;
float qValue = -1;
/* Name */
if (rowPastOffset[3][0] != '.')
printf("<B>Name:</B> %s<BR>\n", rowPastOffset[3]);
/* Position */
printf("<B>Position:</B> "
"<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n",
hgTracksPathAndSettings(), database, chrom, start+1, end, chrom, start+1, end);
/* Print peak base */
if ((peakType == narrowPeak) || (peakType == encodePeak))
{
int peak = sqlSigned(rowPastOffset[9]);
if (peak > -1)
printf("<B>Peak base on chrom:</B> %d<BR>\n", start + peak);
}
/* Strand, score */
if (rowPastOffset[5][0] != '.')
printf("<B>Strand:</B> %c<BR>\n", rowPastOffset[5][0]);
printf("<B>Score:</B> %d<BR>\n", sqlUnsigned(rowPastOffset[4]));
/* signalVal, pVal */
if (peakType != gappedPeak)
{
signal = sqlFloat(rowPastOffset[6]);
pValue = sqlFloat(rowPastOffset[7]);
qValue = sqlFloat(rowPastOffset[8]);
}
else
{
signal = sqlFloat(rowPastOffset[12]);
pValue = sqlFloat(rowPastOffset[13]);
qValue = sqlFloat(rowPastOffset[14]);
}
if (signal >= 0)
printf("<B>Signal value:</B> %.3f<BR>\n", signal);
if (pValue >= 0)
printf("<B>P-value (-log10):</B> %.3f<BR>\n", pValue);
if (qValue >= 0)
printf("<B>Q-value (FDR): </B> %.3f<BR>\n", qValue);
}
sqlFreeResult(&sr);
hFreeConn(&conn);
}
+
+int encodeFiveCInterCmp(const void *va, const void *vb)
+/* reverse sort on bed nine's reserved field which in this */
+/* case is the where the strength of the interaction is stored */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+return b->itemRgb - a->itemRgb;
+}
+
+void doEncodeFiveC(struct sqlConnection *conn, struct trackDb *tdb)
+/* Print details for 5C track */
+{
+char *interTable = trackDbRequiredSetting(tdb, "interTable");
+char *interTableKind = trackDbRequiredSetting(tdb, "interTableKind");
+char **row;
+char *chrom = cgiString("c");
+int start = cgiInt("o");
+int end = cgiInt("t");
+int rowOffset;
+int outCount = 0;
+struct sqlResult *sr;
+struct bed *interList = NULL, *inter;
+genericHeader(tdb, NULL);
+sr = hOrderedRangeQuery(conn, interTable, chrom, start, end, NULL, &rowOffset);
+printf("<B>Position:</B> "
+ "<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n",
+ hgTracksPathAndSettings(), database, chrom, start+1, end, chrom, start+1, end);
+while ((row = sqlNextRow(sr)) != NULL)
+ {
+ inter = bedLoadN(row + rowOffset, 9);
+ slAddHead(&interList, inter);
+ }
+slSort(&interList, encodeFiveCInterCmp);
+webNewSection("Top %s interations", interTableKind);
+webPrintLinkTableStart();
+webPrintLabelCell("Position");
+webPrintLabelCell("5C signal");
+webPrintLabelCell("Distance");
+webPrintLinkTableNewRow();
+for (inter = interList; inter != NULL; inter = inter->next)
+ {
+ char s[1024];
+ int distance = 0;
+ safef(s, sizeof(s), "<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">%s:%d-%d</A>",
+ hgTracksPathAndSettings(), database, chrom, inter->thickStart+1, inter->thickEnd, chrom, inter->thickStart+1, inter->thickEnd);
+ webPrintLinkCell(s);
+ safef(s, sizeof(s), "%d", inter->itemRgb);
+ 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);
+}