ea5b4301814c1df9f2a0f3b2d9e0d2f06b22635e braney Tue May 24 18:37:10 2016 -0700 hgTables support , some display changes, and a better hgc page for longTabix diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 17dc990..2b6e044 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -3913,30 +3913,31 @@ struct trackDb *tdb, char *item, char *itemForUrl) /* Print page for container of some sort. */ { if (sameString(containerType, "multiWig")) { errAbort("It's suprising that multiWig container gets to hgc. It should go to hgTrackUi."); } else { errAbort("Unrecognized container type %s for %s", containerType, tdb->track); } } static void doLongTabix(struct trackDb *tdb, char *item) +/* Handle a click on a long range interaction */ { char *bigDataUrl = hashFindVal(tdb->settingsHash, "bigDataUrl"); struct bedTabixFile *btf = bedTabixFileMayOpen(bigDataUrl, NULL, 0, 0); char *chromName = cartString(cart, "c"); struct bed *list = bedTabixReadBeds(btf, chromName, winStart, winEnd, bedLoad5); bedTabixFileClose(btf); unsigned maxWidth; struct longRange *longRangeList = parseLongTabix(list, &maxWidth, 0); struct longRange *longRange, *ourLongRange = NULL; unsigned itemNum = sqlUnsigned(item); unsigned count = slCount(longRangeList); double *doubleArray; AllocArray(doubleArray, count); @@ -3946,43 +3947,54 @@ if (longRange->id == itemNum) { ourLongRange = longRange; } doubleArray[ii] = longRange->score; } if (ourLongRange == NULL) errAbort("cannot find long range item with id %d\n", itemNum); struct aveStats *as = aveStatsCalc(doubleArray, count); printf("Item you clicked on:<BR>\n"); printf("<B>Score:</B> %g<BR>\n", ourLongRange->score); printf("<B>ID:</B> %u<BR>\n", ourLongRange->id); -//printf("<A HREF=\"hgTracks?position=%s:%d-%d\" TARGET=_BLANK><B>Link to other block </A><BR>\n", otherChrom, s, e); - -printf("<BR>All items in window:\n"); - -printf("<BR>Q1 %f\n", as->q1); -printf("<BR>median %f\n", as->median); -printf("<BR>Q3 %f\n", as->q3); -printf("<BR>average %f\n", as->average); -printf("<BR>min %f\n", as->minVal); -printf("<BR>max %f\n", as->maxVal); -printf("<BR>count %d\n", as->count); -printf("<BR>total %f\n", as->total); -printf("<BR>standard deviation %f\n", as->stdDev); +unsigned padding = (ourLongRange->e - ourLongRange->s) / 10; +int s = ourLongRange->s - padding; +int e = ourLongRange->e + padding; +if (s < 0 ) + s = 0; +int chromSize = hChromSize(database, seqName); +if (e > chromSize) + e = chromSize; +printf("<A HREF=\"hgTracks?position=%s:%d-%d\" TARGET=_BLANK><B>Link to range covered by interaction.</B></A><BR>\n", + ourLongRange->sChrom, s, e); + +printf("<BR>Statistics on the scores of all items in window (go to track controls to set minimum score to display):\n"); + +printf("<TABLE BORDER=1>\n"); +printf("<TR><TD><B>Q1</B></TD><TD>%f</TD></TR>\n", as->q1); +printf("<TR><TD><B>median</B></TD><TD>%f</TD></TR>\n", as->median); +printf("<TR><TD><B>Q3</B></TD><TD>%f</TD></TR>\n", as->q3); +printf("<TR><TD><B>average</B></TD><TD>%f</TD></TR>\n", as->average); +printf("<TR><TD><B>min</B></TD><TD>%f</TD></TR>\n", as->minVal); +printf("<TR><TD><B>max</B></TD><TD>%f</TD></TR>\n", as->maxVal); +printf("<TR><TD><B>count</B></TD><TD>%d</TD></TR>\n", as->count); +printf("<TR><TD><B>total</B></TD><TD>%f</TD></TR>\n", as->total); +printf("<TR><TD><B>standard deviation</B></TD><TD>%f</TD></TR>\n", as->stdDev); +printf("</TABLE>\n"); } void genericClickHandlerPlus( struct trackDb *tdb, char *item, char *itemForUrl, char *plus) /* Put up generic track info, with additional text appended after item. */ { char *dupe, *type, *words[16], *headerItem; int wordCount; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); struct sqlConnection *conn = NULL; char *imagePath = trackDbSetting(tdb, ITEM_IMAGE_PATH); char *container = trackDbSetting(tdb, "container"); if (!trackHubDatabase(database))