f5c2c152e1603b5657f7e11af28d1a8b85ba6a3d kate Wed Sep 26 11:27:46 2018 -0700 Fix another problem with interchromosomal items in pack mode. refs #21917 diff --git src/hg/lib/interact.c src/hg/lib/interact.c index 8838d03..114eeee 100644 --- src/hg/lib/interact.c +++ src/hg/lib/interact.c @@ -375,78 +375,77 @@ void interactRegionCenters(struct interact *inter, int *sourceCenter, int *targetCenter) /* Return genomic position of endpoint centers */ { assert(sourceCenter); assert(targetCenter); *sourceCenter = interactRegionCenter(inter->sourceStart, inter->sourceEnd); *targetCenter = interactRegionCenter(inter->targetStart, inter->targetEnd); } struct bed *interactToBed(struct interact *inter) /* Convert an interact to a BED12 (actually, BED15+label) */ { struct bed *bed = NULL; AllocVar(bed); - bed->chrom = inter->chrom; -// expand extents to edges of endpoints -// NOTE: this should be changed in schema defn -//bed->chromStart = inter->chromStart; -bed->chromStart = min(inter->sourceStart, inter->targetStart); -//bed->chromEnd = inter->chromEnd; -bed->chromEnd = max(inter->sourceEnd, inter->targetEnd); -bed->thickStart = bed->chromStart; -bed->thickEnd = bed->chromEnd; bed->name = inter->name; bed->score = inter->score; bed->itemRgb = inter->color; AllocArray(bed->blockSizes, 2); AllocArray(bed->chromStarts, 2); char *strand = "+"; if (differentString(inter->sourceChrom, inter->targetChrom)) { // inter-chromosomal bed->blockCount = 1; + bed->chromStart = inter->chromStart; + bed->chromEnd = inter->chromEnd; bed->blockSizes[0] = inter->chromEnd - inter->chromStart; bed->chromStarts[0] = 0; if sameString(bed->chrom, inter->targetChrom) strand = "-"; } else { // same chromosome bed->blockCount = 2; + // expand extents to edges of endpoints + // NOTE: this should be changed in schema defn + bed->chromStart = min(inter->sourceStart, inter->targetStart); + bed->chromEnd = max(inter->sourceEnd, inter->targetEnd); bed->chromStarts[0] = 0; int sourceCenter, targetCenter; interactRegionCenters(inter, &sourceCenter, &targetCenter); if (targetCenter < sourceCenter) strand = "-"; if (inter->sourceStart < inter->targetStart) { bed->blockSizes[0] = inter->sourceEnd - inter->sourceStart; bed->blockSizes[1] = inter->targetEnd - inter->targetStart; bed->chromStarts[1] = inter->targetStart - bed->chromStart; } else { bed->blockSizes[0] = inter->targetEnd - inter->targetStart; bed->blockSizes[1] = inter->sourceEnd - inter->sourceStart; bed->chromStarts[1] = inter->sourceStart - bed->chromStart; } } +bed->thickStart = bed->chromStart; +bed->thickEnd = bed->chromEnd; 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)) { el = interactLoadAndValidate(row);