6031d05b102c1cb34c9e8394a8acf5809a8eca8f angie Mon Jan 31 16:19:37 2011 -0800 Track #34 (dbVar for human): Added new track type gvf with basichandlers in hgTracks and hgc. dbVar's GVF attributes are recognized, esp. var_type is used to color items, and items are sorted using the Parent keyword so that parents appear immediately before their children, and children are sorted by var_type. Attributes are displayed in hgc; need to do a bit better for the Start_range and End_range (e.g. translate "." to "inner start unknown" etc.). diff --git src/hg/hgc/gvfClick.c src/hg/hgc/gvfClick.c new file mode 100644 index 0000000..a402512 --- /dev/null +++ src/hg/hgc/gvfClick.c @@ -0,0 +1,55 @@ +/* gvfClick - handler for variants from GVF (http://www.sequenceontology.org/gvf.html) */ + +#include "common.h" +#include "htmshell.h" +#include "hgc.h" +#include "bed8Attrs.h" + +void doGvf(struct trackDb *tdb, char *item) +/* Show details for variants represented as GVF, stored in a bed8Attrs table */ +{ +struct sqlConnection *conn = hAllocConn(database); +int start = cartInt(cart, "o"); +char query[1024]; +safef(query, sizeof(query), + "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d", + tdb->table, item, seqName, start); +struct sqlResult *sr = sqlGetResult(conn, query); +char **row; +if ((row = sqlNextRow(sr)) == NULL) + errAbort("doGvfDetails: can't find item '%s' in %s at %s:%d", item, database, seqName, start); +int rowOffset = hOffsetPastBin(database, seqName, tdb->table); +struct bed8Attrs *ba = bed8AttrsLoad(row+rowOffset); +bedPrintPos((struct bed *)ba, 6, tdb); +int i = 0; +for (i = 0; i < ba->attrCount; i++) + { + // The ID is the bed8Attrs name and has already been displayed: + if (sameString(ba->attrTags[i], "ID")) + continue; + cgiDecode(ba->attrVals[i], ba->attrVals[i], strlen(ba->attrVals[i])); + char *tag = ba->attrTags[i]; + // User-defined keywords used in dbVar's GVF: + if (sameString(tag, "var_type")) + tag = "Variant type"; + else if (sameString(tag, "clinical_int")) + tag = "Clinical interpretation"; + else if (islower(tag[0])) + tag[0] = toupper(tag[0]); + // GVF standard Start_range and End_range tags: +// if (sameString(tag, "Start_range")) + { + } +// else if (sameString(tag, "End_range")) + { + } +// else + { + subChar(tag, '_', ' '); + printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); + } + } +sqlFreeResult(&sr); +hFreeConn(&conn); +/* printTrackHtml is done in genericClickHandlerPlus. */ +}