f63b1478bc72ff9660027eb7b9d0db41529eba8b
Merge parents a694567 2ad6d72
kate
  Sun Aug 25 19:11:02 2019 -0700
Fix merge conflict

diff --cc src/hg/hgc/interactClick.c
index 3b3483f,01fc05d..3005f75
--- src/hg/hgc/interactClick.c
+++ src/hg/hgc/interactClick.c
@@@ -144,88 -144,79 +144,85 @@@
              if (differentString(name, inter->sourceName) && differentString(name, inter->targetName))
                  continue;
              }
          }
      minStart = inter->chromStart <  minStart ? inter->chromStart : minStart;
      maxEnd = inter->chromEnd > maxEnd ? inter->chromEnd : maxEnd;
      slAddHead(&filtered, ipr);
      }
  
  *retStart = minStart;
  *retEnd = maxEnd;
  // consider sorting on score or position
  return filtered;
  }
  
 -static char *makeInteractRegionFile(struct interact *inter)
 +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];
--// TODO: check chrom bounds
  int padding = 200;
- //cartSetBoolean(cart, "emAltHighlight", TRUE);
- 
  safef(regionInfo, sizeof regionInfo, "#padding %d\n", padding);
  mustWrite(f, regionInfo, strlen(regionInfo));
  //warn("%s", regionInfo);
  
 -safef(regionInfo, sizeof regionInfo, "#shortDesc %s\n", inter->name);
 +safef(regionInfo, sizeof regionInfo, "#shortDesc %s\n", name);
  mustWrite(f, regionInfo, strlen(regionInfo));
  //warn("%s", regionInfo);
 -char *region1Chrom = inter->sourceChrom, *region2Chrom = inter->targetChrom;
 -int region1Start = inter->sourceStart, region1End = inter->sourceEnd;
 -int region2Start = inter->targetStart, region2End = inter->targetEnd;
 -if (sameString(inter->sourceChrom, inter->targetChrom))
 -    {
 -    if (inter->sourceStart > inter->targetStart)
 -        {
 -        region1Start = inter->targetStart;
 -        region1End = inter->targetEnd;
 -        region2Start = inter->sourceStart;
 -        region2End = inter->sourceEnd;
 -        }
 +
 +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);
          }
 -else
 -    {
 -    if (sameString(inter->chrom, inter->targetChrom))
 -        {
 -        region1Chrom = inter->targetChrom;
 -        region1Start = inter->targetStart;
 -        region1End = inter->targetEnd;
 -        region2Chrom = inter->sourceChrom;
 -        region2Start = inter->sourceStart;
 -        region2End = inter->sourceEnd;
 +    //safef(buf, sizeof buf, "%s:%d-%d", region2->chrom, region2->chromStart, region2->chromEnd);
 +    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->chromStart = inter->targetStart;
 +        region->chromEnd = inter->targetEnd;
 +        slAddHead(&regions, region);
          }
      }
 -safef(regionInfo, sizeof regionInfo, "%s\t%d\t%d\n"
 -           "%s\t%d\t%d\n",
 -                region1Chrom, region1Start, region1End,
 -                region2Chrom, region2Start, region2End);
 +slSort(&regions, bedCmp);
 +for (region = regions; region != NULL; region = region->next)
 +    {
 +    safef(regionInfo, sizeof regionInfo, "%s\t%d\t%d\n",
 +                    region->chrom, region->chromStart, region->chromEnd);
      mustWrite(f, regionInfo, strlen(regionInfo));
      //warn("%s", regionInfo);
 +    }
  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];
  safef(sha1File, sizeof sha1File, "%s.sha1", mrTn.forCgi);
  f = mustOpen(sha1File, "w");
  mustWrite(f, newSha1, strlen(newSha1));
  carefulClose(&f);
  return cloneString(mrTn.forCgi);
  }