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");
+ 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. */
|