761e0687825ec835c5a8598d537ac1f311263c79 angie Mon Dec 5 16:18:56 2011 -0800 Feature #6172 (ISCA track tweaks): per ISCA's requests, change"Structural variant cluster" to "Variant region", add link to dbVar's variant page, and add link to dbVar's page for the ISCA study (nstd37). diff --git src/hg/hgc/gvfClick.c src/hg/hgc/gvfClick.c index 4c042aa..7593575 100644 --- src/hg/hgc/gvfClick.c +++ src/hg/hgc/gvfClick.c @@ -1,97 +1,99 @@ /* gvfClick - handler for variants from GVF (http://www.sequenceontology.org/gvf.html) */ #include "common.h" #include "htmshell.h" #include "hgc.h" #include "bed8Attrs.h" static boolean isInteger(char *word) /* Return TRUE if all characters of word are numeric. */ { if (word == NULL) return FALSE; char *s = word; while (*s != '\0') if (! isdigit(*s++)) return FALSE; return TRUE; } 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); +bedPrintPos((struct bed *)ba, 3, tdb); int i = 0; // Note: this loop modifies ba->attrVals[i], assuming we won't use them again: 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")) // This one isn't anymore, but I add it back (hg18.txt). tag = "Variant type"; else if (sameString(tag, "clinical_int")) tag = "Clinical interpretation"; else if (sameString(tag, "var_origin")) tag = "Variant origin"; else if (islower(tag[0])) // Uppercase for nice display, assuming user doesn't care which keywords are // user-defined vs. GVF standard: tag[0] = toupper(tag[0]); // GVF standard Start_range and End_range tags (1-based coords): if (sameString(tag, "Start_range") || sameString(tag, "End_range")) { char *copy = cloneString(ba->attrVals[i]); char *words[3]; int wordCount = chopCommas(copy, words); if (wordCount == 2 && (sameString(".", words[0]) || isInteger(words[0])) && (sameString(".", words[1]) || isInteger(words[1]))) { boolean isStartRange = sameString(tag, "Start_range"); char *rangeStart = words[0], *rangeEnd = words[1]; if (sameString(".", rangeStart)) rangeStart = "unknown"; if (sameString(".", rangeEnd)) rangeEnd = "unknown"; if (isStartRange) printf("Start range: outer start %s, inner start %s
\n", rangeStart, rangeEnd); else printf("End range: inner end %s, outer end %s
\n", rangeStart, rangeEnd); } else // not formatted as expected, just print as-is: printf("%s: %s
\n", tag, htmlEncode(ba->attrVals[i])); } // Parent sounds like mom or dad (as in var_origin)... tweak it too: else if (sameString(tag, "Parent")) { - printf("Structural variant cluster: %s
\n", htmlEncode(ba->attrVals[i])); + printf("Variant region: " + "%s
\n", ba->attrVals[i], htmlEncode(ba->attrVals[i])); } else { subChar(tag, '_', ' '); printf("%s: %s
\n", tag, htmlEncode(ba->attrVals[i])); } } sqlFreeResult(&sr); hFreeConn(&conn); /* printTrackHtml is done in genericClickHandlerPlus. */ }