f8b81fa07495f9e71fabbed2f539adee95dd2403 chmalee Tue Nov 7 15:47:59 2023 -0800 Put some basic code for checking associated chain vis into the chainHprc details tables. Needs to be fixed up more, refs #32562 diff --git src/hg/hgc/bigBedClick.c src/hg/hgc/bigBedClick.c index dd26321..85f6654 100644 --- src/hg/hgc/bigBedClick.c +++ src/hg/hgc/bigBedClick.c @@ -477,30 +477,57 @@ if (printCount == 0) { int i; char label[20]; safef(label, sizeof(label), "nonBedFieldsLabel"); printf("%s ", trackDbSettingOrDefault(tdb, label, "Non-BED fields:")); for (i = restBedFields; i < restCount; i++) printf("%s%s", (i > 0 ? "\t" : ""), restFields[i]); printf("
\n"); } } if (sameString(tdb->type, "bigGenePred")) bigGenePredLinks(tdb->track, item); + if (startsWith("hprcDeletions", tdb->track) || startsWith("hprcInserts", tdb->track) || startsWith("hprcArr", tdb->track)) + { + // the source field, which is the first item after the itemRgb will + // have all the other chains + // TODO: make this controlled by a trackDb setting + char *oChainList[2048]; + int i, numChains = chopCommas(cloneString(restFields[6]), oChainList); + char *oChain = NULL; + struct dyString *ds = dyStringNew(0); + dyStringPrintf(ds, "var chainVis = {"); + for (i = 0; i < numChains; i++) + { + oChain = oChainList[i]; + char *cartVar = catTwoStrings("chainHprc", oChain); + char *chainVis = cartOptionalString(cart, cartVar); + if (chainVis == NULL) + { + cartVar = catTwoStrings(cartVar, "_sel"); + chainVis = cartOptionalString(cart, cartVar); + // TODO: this is not getting the vis right, because _sel is not the + // same as a visibility + } + dyStringPrintf(ds, "\"%s\": \"%s\", ", oChain, chainVis != NULL ? hStringFromTv(hTvFromString(chainVis)) : "Hide"); + } + dyStringPrintf(ds, "};\n"); + jsInline(dyStringCannibalize(&ds)); + } } if (isCustomTrack(tdb->track)) { time_t timep = bbiUpdateTime(bbi); printBbiUpdateTime(&timep); } char *motifPwmTable = trackDbSetting(tdb, "motifPwmTable"); if (motifPwmTable) { struct dnaSeq *seq = hDnaFromSeq(database, bed->chrom, bed->chromStart, bed->chromEnd, dnaLower); if (bed->strand[0] == '-') reverseComplement(seq->dna, seq->size); struct dnaMotif *motif = loadDnaMotif(bed->name, motifPwmTable); motifHitSection(seq, motif); }