096e42d3b82c24de127790bcb4bf5b2ad57ce4c8 angie Tue Nov 15 15:43:38 2011 -0800 Feature #3711 (VCF haplotype-sorting display): suggestion from David:draw boundaries of leaf clusters in purple. diff --git src/hg/hgTracks/vcfTrack.c src/hg/hgTracks/vcfTrack.c index 0e552b3..e505b87 100644 --- src/hg/hgTracks/vcfTrack.c +++ src/hg/hgTracks/vcfTrack.c @@ -673,54 +673,55 @@ // Recursing twice is wasteful. Could be avoided if this, and yFromNode, // returned both yStart and yEnd. However, the time to draw a tree of // 2188 hap's (1kG phase1 interim) is in the noise, so I consider it // not worth the effort of refactoring to save a sub-millisecond here. int yStartLeft = rDrawTreeInLabelArea(ht->left, hvg, yrtStart, x+branchW, yFromNode, extraData); int yEndLeft = rDrawTreeInLabelArea(ht->left, hvg, yrtEnd, x+branchW, yFromNode, extraData); int yStartRight = rDrawTreeInLabelArea(ht->right, hvg, yrtStart, x+branchW, yFromNode, extraData); int yEndRight = rDrawTreeInLabelArea(ht->right, hvg, yrtEnd, x+branchW, yFromNode, extraData); int yStart = min(yStartLeft, yStartRight); int yEnd = max(yEndLeft, yEndRight); midY = (yStart + yEnd) / 2; - hvGfxLine(hvg, x+branchW-1, yStart, x+branchW-1, yEnd-1, MG_BLACK); - hvGfxLine(hvg, x+branchW, yStart, labelEnd, yStart, MG_BLACK); - hvGfxLine(hvg, x+branchW, yEnd-1, labelEnd, yEnd-1, MG_BLACK); + Color col = (ht->childDistance == 0) ? purple : MG_BLACK; + hvGfxLine(hvg, x+branchW-1, yStart, x+branchW-1, yEnd-1, col); + hvGfxLine(hvg, x+branchW, yStart, labelEnd, yStart, col); + hvGfxLine(hvg, x+branchW, yEnd-1, labelEnd, yEnd-1, col); } else { int leftMid = rDrawTreeInLabelArea(ht->left, hvg, yrtMidPoint, x+branchW, yFromNode, extraData); int rightMid = rDrawTreeInLabelArea(ht->right, hvg, yrtMidPoint, x+branchW, yFromNode, extraData); midY = (leftMid + rightMid) / 2; hvGfxLine(hvg, x+branchW-1, leftMid, x+branchW-1, rightMid, MG_BLACK); } hvGfxLine(hvg, x, midY, x+branchW-1, midY, MG_BLACK); return midY; } else if (ht->left != NULL) return rDrawTreeInLabelArea(ht->left, hvg, yType, x, yFromNode, extraData); else if (ht->right != NULL) return rDrawTreeInLabelArea(ht->right, hvg, yType, x, yFromNode, extraData); // Leaf node -- return pixel height. Draw a line if yType is midpoint. int y = yFromNode(ht->itemOrCluster, extraData, yType); if (yType == yrtMidPoint && x < labelEnd) - hvGfxLine(hvg, x, y, labelEnd, y, MG_BLACK); + hvGfxLine(hvg, x, y, labelEnd, y, purple); return y; } struct yFromNodeHelper /* Pre-computed mapping from cluster nodes' gtHapIx to pixel heights. */ { unsigned short gtHapCount; unsigned short *gtHapIxToPxStart; unsigned short *gtHapIxToPxEnd; }; void initYFromNodeHelper(struct yFromNodeHelper *helper, int yOff, int height, unsigned short gtHapCount, unsigned short *gtHapOrder) /* Build a mapping of genotype and haplotype to pixel y coords. */ {