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/lib/longRange.c src/hg/lib/longRange.c index 57c674c..e2d6c4a 100644 --- src/hg/lib/longRange.c +++ src/hg/lib/longRange.c @@ -1,55 +1,83 @@ +/* longRange --- functions to provide UI for long range interaction + * graph. Functions to retrieve long range information from + * bedTabix format. + */ + +/* Copyright (C) 2016 The Regents of the University of California + * * See README in this or parent directory for licensing information. */ #include "longRange.h" +static char *longTabixAutoSqlString = +"table longTabix\n" +"\"Long Range Tabix file\"\n" +" (\n" +" string chrom; \"Reference sequence chromosome or scaffold\"\n" +" uint chromStart; \"Start position in chromosome\"\n" +" uint chromEnd; \"End position in chromosome\"\n" +" string interactingRegion; \"(e.g. chrX:123-456,3.14, where chrX:123-456 is the coordinate of the mate, and 3.14 is the score of the interaction)\"\n" +" uint id; \"Unique Id\"\n" +" char[1] strand; \"+ or -\"\n" +" )\n" +; + +struct asObject *longTabixAsObj() +// Return asObject describing fields of longTabix file +{ +return asParseText(longTabixAutoSqlString); +} + void longRangeCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* Complete track controls for long range interaction. */ { char buffer[1024]; safef(buffer, sizeof buffer, "%s.%s", tdb->track, LONG_HEIGHT ); unsigned height = sqlUnsigned(cartUsualString(cart, buffer, LONG_DEFHEIGHT)); printf("
Track height: "); cgiMakeIntVar(buffer, height, 3); safef(buffer, sizeof buffer, "%s.%s", tdb->track, LONG_MINSCORE); double minScore = sqlDouble(cartUsualString(cart, buffer, LONG_DEFMINSCORE)); printf("

Minimum score: "); cgiMakeDoubleVar(buffer, minScore, 0); } static char *getOther(struct bed *bed, unsigned *s, unsigned *e, double *score) +/* parse the name field of longTabix to get the other location */ { char *otherChrom = cloneString(bed->name); char *ptr = strchr(otherChrom, ':'); if (ptr == NULL) errAbort("bad longTabix bed name %s\n", bed->name); *ptr++ = 0; *s = atoi(ptr); ptr = strchr(ptr, '-'); if (ptr == NULL) errAbort("bad longTabix bed name %s\n", bed->name); ptr++; *e = atoi(ptr); ptr = strchr(ptr, ','); if (ptr == NULL) errAbort("bad longTabix bed name %s\n", bed->name); ptr++; *score = sqlDouble(ptr); return otherChrom; } struct longRange *parseLongTabix(struct bed *beds, unsigned *maxWidth, double minScore) +/* Parse longTabix format into longRange structures */ { struct longRange *longRangeList = NULL; for(; beds; beds=beds->next) { double score; unsigned otherS; unsigned otherE; char *otherChrom = getOther(beds, &otherS, &otherE, &score); if (score < minScore) continue; struct longRange *longRange; AllocVar(longRange); slAddHead(&longRangeList, longRange);