cde6d1587f5f3b2f56de5c45125f42c24cfde4a3
kate
  Wed Sep 26 15:48:58 2018 -0700
Support interchromosomal items in merge mode. refs #21917

diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c
index c39f275..67a0da7 100644
--- src/hg/hgTracks/interactTrack.c
+++ src/hg/hgTracks/interactTrack.c
@@ -266,38 +266,45 @@
     struct hash *intersMerge = hashNew(0);
     boolean doColor = !tg->colorShades;
     for (inter = inters; inter; inter = inter->next)
         {
         if (tInfo->mergeMode)
             {
             boolean byTarget = sameString(tInfo->mergeMode, INTERACT_MERGE_TARGET);
             // hash by source or target name
             char *name = (byTarget ? inter->targetName : inter->sourceName);
             lf = (struct linkedFeatures *) hashFindVal(intersMerge, name);
             if (lf)
                 {
                 // add a simple feature for the other end (source or target) to the linked feature
                 struct simpleFeature *sf = NULL;
                 AllocVar(sf);
+
+                // tweak interact struct for intrachromsomal item to ease next steps
+                if (differentString(inter->targetChrom, inter->sourceChrom))
+                    {
+                    inter->sourceStart = inter->targetStart = inter->chromStart;
+                    inter->sourceEnd = inter->targetEnd = inter->chromEnd;
+                    }
+
                 sf->start = (byTarget ? inter->sourceStart : inter->targetStart);
                 sf->end = (byTarget ? inter->sourceEnd : inter->targetEnd);
                 struct simpleFeature *sfs = lf->components;
                 slAddHead(&sfs, sf);
                 lf->components = sfs;
                 if (lf->filterColor != inter->color)
                     lf->filterColor = MG_GRAY;
-                // TODO: consider averaging score
                 }
             else
                 {
                 // create a linked feature for this target
                 lf = interactToLf(inter, doColor);
                 lf->orientation = 0;
                 lf->name = (byTarget ? inter->targetName : inter->sourceName);
                 lf->tallStart = (byTarget ? inter->targetStart : inter->sourceStart);
                 lf->tallEnd = (byTarget ? inter->targetEnd : inter->sourceEnd);
                 hashAdd(intersMerge, lf->name, lf);
                 }
             }
         else 
             {
             lf = interactToLf(inter, doColor);