dcb06ec7727033f47e202f2db1a0e72f0715fa73 hiram Thu Aug 31 11:20:30 2017 -0700 indicate no off-targets for crispr tracks when no data is available refs #20077 diff --git src/hg/hgc/bigBedClick.c src/hg/hgc/bigBedClick.c index 13dee32..c07211a 100644 --- src/hg/hgc/bigBedClick.c +++ src/hg/hgc/bigBedClick.c @@ -58,30 +58,38 @@ printf("\n"); char *words[255]; int wordCount = chopByChar(val, ',', words, ArraySize(words)); int i; printf("\n"); for (i=0; i%d mismatches:
%s off-targets", i, words[i]); printf("
\n"); } static void extFieldCrisprOfftargets(char *val, struct slPair *extraFields) /* crispr track: locations of off-targets. A |-separated string of coords, including strand and a score e.g. chr15;63615585-;71|chr16;8835640+;70 */ { +if (NULL == val) + { + printf("
\n"); + printf("\n"); + printf("\n"); + printf("
Potential Off-targetsNo Off-targets found for this guide
\n"); + return; + } printf("Potential Off-targets\n"); printf("\n"); char *coords[65536]; int coordCount = chopByChar(val, '|', coords, ArraySize(coords)); int i; struct subText *subList = NULL; slSafeAddHead(&subList, subTextNew("ig:", "intergenic ")); slSafeAddHead(&subList, subTextNew("ex:", "exon ")); slSafeAddHead(&subList, subTextNew("in:", "intron ")); slSafeAddHead(&subList, subTextNew("|", "-")); struct sqlConnection *conn = hAllocConn(database); @@ -289,32 +297,37 @@ { char *fieldName = pair->name; char *detailsUrl = pair->val; // get extra bigBed field (=the offset) and seek to it void *p = slPairFindVal(extraFields, fieldName); if (p==NULL) { printf("Error when parsing trackDb detailsTabUrls statement:
\n"); printf("Cannot find extra bigBed field with name %s\n", fieldName); return; } char *offsetStr = (char*)p; if (offsetStr==NULL || sameWord(offsetStr, "0")) + { + /* need to show the empty off-targets for crispr tracks */ + if (startsWith("crispr", tdb->track)) + extFieldCrisprOfftargets(NULL, NULL); // empty or "0" value in bigBed means that the lookup should not be performed continue; + } off_t offset = atoll(offsetStr); seekAndPrintTable(detailsUrl, offset, extraFields); } slPairFreeValsAndList(&detailsUrls); } static void bigBedClick(char *fileName, struct trackDb *tdb, char *item, int start, int end, int bedSize) /* Handle click in generic bigBed track. */ { boolean showUrl = FALSE; char *chrom = cartString(cart, "c"); /* Open BigWig file and get interval list. */