static struct memGfx *altColorLabels(char **labels, int labelCount, int width) /* Return a memory image with alternating colors. */ { struct memGfx *mg = NULL; Color c1,c2; MgFont *font = mgMediumFont(); int lineHeight = mgFontLineHeight(font)-1; int height = lineHeight * labelCount, i; int y = 0; /* Allocate picture and set up colors. */ mg = mgNew(width, height); c1 = mgFindColor(mg, 0xE0, 0xE0, 0xFF); c2 = mgFindColor(mg, 0xFF, 0xC8, 0xC8); /* Draw text. */ for (i=labelCount-1; i >= 0; --i) { Color c = ((i&1) ? c2 : c1); mgDrawBox(mg, 0, y, width, lineHeight, c); mgTextRight(mg, 0+1, y+1, width-1, lineHeight, MG_BLACK, font, labels[i]); y += lineHeight; } return mg; }
void makeBlockColors(struct memGfx *mg) /* Get some defined colors to play with. */ { int i; struct rgbColor *c; for (i=0; i<ArraySize(blockColors); ++i) { c = blockRgbColors+i; blockColors[i] = mgFindColor(mg, c->r, c->g, c->b); } }
void agpVsMap(char *agpName, char *infoName, char *gifName) /* agpVsMap - Plot clones in agp vs. map coordinates. */ { struct mapPos *mapList, *mp; struct agpFrag *agpList, *bp; struct hash *cloneHash = newHash(14); struct hashEl *hel; struct cloneInfo *cloneList = NULL, *clone; struct memGfx *mg = NULL; int pixWidth = 600; int pixHeight = 600; int rulerHeight = 20; int maxMapPos = 0, maxAgpPos = 0; double scaleMap, scaleAgp; Color orange, green; mapList = readInfoFile(infoName); agpList = readAgpFile(agpName); for (mp = mapList; mp != NULL; mp = mp->next) { if (mp->phase > 0) { AllocVar(clone); hel = hashAddUnique(cloneHash, mp->cloneName, clone); clone->name = hel->name; clone->mp = mp; slAddHead(&cloneList, clone); if (mp->pos > maxMapPos) maxMapPos = mp->pos; } } slReverse(&cloneList); for (bp = agpList; bp != NULL; bp = bp->next) { if (bp->chromStart > maxAgpPos) maxAgpPos = bp->chromStart; } /* Draw scatterplot on bitmap. */ mg = mgNew(pixWidth, pixHeight); mgClearPixels(mg); orange = mgFindColor(mg, 210, 150, 0); green = mgFindColor(mg, 0, 200, 0); mgDrawRuler(mg, 0, pixHeight-rulerHeight, rulerHeight, pixWidth, MG_BLACK, mgSmallFont(), 0, maxMapPos+1); scaleMap = (double)pixWidth/(double)(maxMapPos+1.0); scaleAgp = (double)(pixHeight)/(double)(maxAgpPos+1.0); for (bp = agpList; bp != NULL; bp = bp->next) { char cloneName[128]; fragToCloneName(bp->frag, cloneName); clone = hashFindVal(cloneHash, cloneName); if (clone == NULL) warn("%s is in %s but not %s", cloneName, agpName, infoName); else { int x = round(scaleMap*clone->mp->pos); int y = pixHeight - round(scaleAgp*bp->chromStart); int phase = clone->mp->phase; int back; if (phase <= 1) back = green; else if (phase == 2) back = orange; else back = MG_RED; drawPlus(mg, x, y, back); } } mgSaveGif(mg, gifName); }