918ed323bb2a24640f3f08b61a7431a5f1fa6c6c
kate
  Tue Sep 3 15:58:03 2019 -0700
Fix problem with interchromosomal multi-region. refs #22422

diff --git src/hg/hgc/interactClick.c src/hg/hgc/interactClick.c
index b34f784..92b75e9 100644
--- src/hg/hgc/interactClick.c
+++ src/hg/hgc/interactClick.c
@@ -153,73 +153,74 @@
 *retStart = minStart;
 *retEnd = maxEnd;
 // consider sorting on score or position
 return filtered;
 }
 
 static char *makeInteractRegionFile(char *name, struct interact *inters)
 /* Create bed file in trash directory with end coordinates for multi-region mode */
 {
 struct tempName mrTn;
 trashDirFile(&mrTn, "hgt", "custRgn_interact", ".bed");
 FILE *f = fopen(mrTn.forCgi, "w");
 if (f == NULL)
     errAbort("can't create temp file %s", mrTn.forCgi);
 char regionInfo[1024];
-int padding = 200;
+int padd
 safef(regionInfo, sizeof regionInfo, "#padding %d\n", padding);
 mustWrite(f, regionInfo, strlen(regionInfo));
 //warn("%s", regionInfo);
 
 safef(regionInfo, sizeof regionInfo, "#shortDesc %s\n", name);
 mustWrite(f, regionInfo, strlen(regionInfo));
 //warn("%s", regionInfo);
 
 struct interact *inter = NULL;
 struct bed *region, *regions = NULL;
 struct hash *uniqRegions = hashNew(0);
 for (inter = inters; inter != NULL; inter = inter->next)
     {
     char buf[256];
     //safef(buf, sizeof buf, "%s:%d-%d", region1->chrom, region1->chromStart, region1->chromEnd);
     safef(buf, sizeof buf, "%s:%d-%d", inter->sourceChrom, inter->sourceStart, inter->sourceEnd);
     if (!hashLookup(uniqRegions, buf))
         {
         hashAdd(uniqRegions, cloneString(buf), NULL);
         AllocVar(region);
         region->chrom = inter->sourceChrom;
         region->chromStart = inter->sourceStart;
         region->chromEnd = inter->sourceEnd;
         slAddHead(&regions, region);
         }
     safef(buf, sizeof buf, "%s:%d-%d", inter->targetChrom, inter->targetStart, inter->targetEnd);
     if (!hashLookup(uniqRegions, buf))
         {
         hashAdd(uniqRegions, cloneString(buf), NULL);
         AllocVar(region);
-        region->chrom = inter->chrom;
+        region->chrom = inter->targetChrom;
         region->chromStart = inter->targetStart;
         region->chromEnd = inter->targetEnd;
         slAddHead(&regions, region);
         }
     }
 slSort(&regions, bedCmp);
 struct bed *prevRegion = NULL;
 for (region = regions; region != NULL; region = region->next)
     {
     // filter out nested regions
-    if (prevRegion == NULL || region->chromStart >=  prevRegion->chromEnd)
+    if (prevRegion == NULL || differentString(region->chrom, prevRegion->chrom) ||
+                region->chromStart >=  prevRegion->chromEnd)
         {
         safef(regionInfo, sizeof regionInfo, "%s\t%d\t%d\n",
                     region->chrom, region->chromStart, region->chromEnd);
         mustWrite(f, regionInfo, strlen(regionInfo));
         }
     prevRegion = region;
     }
 fclose(f);
 
 // create SHA1 file; used to see if file has changed
 unsigned char hash[SHA_DIGEST_LENGTH];
 SHA1((const unsigned char *)regionInfo, strlen(regionInfo), hash);
 char newSha1[(SHA_DIGEST_LENGTH + 1) * 2];
 hexBinaryString(hash, SHA_DIGEST_LENGTH, newSha1, (SHA_DIGEST_LENGTH + 1) * 2);
 char sha1File[1024];