48b920782dcf3eff2151fa74078be1622ecbb9f4 kate Wed Aug 28 15:22:22 2019 -0700 Avoid duplicating regions when nested. refs #22422 diff --git src/hg/hgc/interactClick.c src/hg/hgc/interactClick.c index 3005f75..b34f784 100644 --- src/hg/hgc/interactClick.c +++ src/hg/hgc/interactClick.c @@ -179,49 +179,53 @@ 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); } - //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); } } slSort(®ions, bedCmp); +struct bed *prevRegion = NULL; for (region = regions; region != NULL; region = region->next) { + // filter out nested regions + if (prevRegion == NULL || 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)); - //warn("%s", 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]; safef(sha1File, sizeof sha1File, "%s.sha1", mrTn.forCgi); f = mustOpen(sha1File, "w"); mustWrite(f, newSha1, strlen(newSha1)); carefulClose(&f); return cloneString(mrTn.forCgi); }