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);