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(®ions, 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(®ions, region); } } -safef(regionInfo, sizeof regionInfo, "%s\t%d\t%d\n" - "%s\t%d\t%d\n", - region1Chrom, region1Start, region1End, - region2Chrom, region2Start, region2End); +slSort(®ions, 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); }