46734f435d23f6919a08661b386c5a70a01a51cc kate Tue Sep 25 12:00:32 2018 -0700 Add support for 'merged mode' track display. This mode merges directional interactions by source or target, and displays as linked features (not arcs). This was originally conceived by Max, and initially implemented as the pack mode for standard interaction display, but was extended as different track display in all modes so that arcs and linked features display can be viewed concurrently, By request of JK. refs #21917 diff --git src/hg/lib/interact.c src/hg/lib/interact.c index 43f4404..8838d03 100644 --- src/hg/lib/interact.c +++ src/hg/lib/interact.c @@ -404,73 +404,47 @@ AllocArray(bed->chromStarts, 2); char *strand = "+"; if (differentString(inter->sourceChrom, inter->targetChrom)) { // inter-chromosomal bed->blockCount = 1; bed->blockSizes[0] = inter->chromEnd - inter->chromStart; bed->chromStarts[0] = 0; if sameString(bed->chrom, inter->targetChrom) strand = "-"; } else { // same chromosome + bed->blockCount = 2; + bed->chromStarts[0] = 0; int sourceCenter, targetCenter; interactRegionCenters(inter, &sourceCenter, &targetCenter); if (targetCenter < sourceCenter) - { strand = "-"; - if (inter->sourceStart <= inter->targetEnd) + if (inter->sourceStart < inter->targetStart) { - // overlapping - use thickStart/End to delineate - bed->blockCount = 1; - bed->blockSizes[0] = bed->chromEnd - bed->chromStart; - bed->chromStarts[0] = 0; - bed->thickStart = targetCenter; - bed->thickEnd = sourceCenter; + bed->blockSizes[0] = inter->sourceEnd - inter->sourceStart; + bed->blockSizes[1] = inter->targetEnd - inter->targetStart; + bed->chromStarts[1] = inter->targetStart - bed->chromStart; } else { - bed->blockCount = 2; - bed->blockSizes[1] = inter->sourceEnd - inter->sourceStart; bed->blockSizes[0] = inter->targetEnd - inter->targetStart; + bed->blockSizes[1] = inter->sourceEnd - inter->sourceStart; bed->chromStarts[1] = inter->sourceStart - bed->chromStart; - bed->chromStarts[0] = 0; - } - } - else - { - // forward direction - if (inter->targetStart <= inter->sourceEnd) - { - // overlapping - use thickStart/End to delineate - bed->blockCount = 1; - bed->blockSizes[0] = bed->chromEnd - bed->chromStart; - bed->chromStarts[0] = 0; - bed->thickStart = sourceCenter; - bed->thickEnd = targetCenter; - } - else - { - bed->blockCount = 2; - bed->blockSizes[0] = inter->sourceEnd - inter->sourceStart; - bed->blockSizes[1] = inter->targetEnd - inter->targetStart; - bed->chromStarts[0] = 0; - bed->chromStarts[1] = inter->targetStart - bed->chromStart; - } } } strcpy(bed->strand, strand); bed->label = bed->name; return bed; } struct interact *interactLoadAllAndValidate(char *fileName) /* Load all interact from a whitespace-separated file. * Dispose of this with interactFreeList(). */ { struct interact *list = NULL, *el; struct lineFile *lf = lineFileOpen(fileName, TRUE); char *row[18]; while (lineFileRow(lf, row))