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);