a50ed53aff81d6fb3e34e6913ce18578292bc24e hiram Tue Jun 28 15:00:42 2016 -0700 implement an arbitrary 10-color palette scheme for scaffold/contig coloring refs #17580 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index e09f283..9897588 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -154,35 +154,40 @@ Color shadesOfGreenOnWhite[EXPR_DATA_SHADES]; Color shadesOfRedOnWhite[EXPR_DATA_SHADES]; Color shadesOfBlueOnWhite[EXPR_DATA_SHADES]; Color shadesOfYellowOnWhite[EXPR_DATA_SHADES]; Color shadesOfRedOnYellow[EXPR_DATA_SHADES]; Color shadesOfBlueOnYellow[EXPR_DATA_SHADES]; Color orangeColor = 0; Color brickColor = 0; Color blueColor = 0; Color darkBlueColor = 0; Color greenColor = 0; Color darkGreenColor = 0; boolean exprBedColorsMade = FALSE; /* Have the shades of Green, Red, and Blue been allocated? */ int maxRGBShade = EXPR_DATA_SHADES - 1; +Color scafColor[SCAF_COLORS+1]; +/* declare colors for scaffold coloring, +1 for unused scaffold 0 color */ + Color chromColor[CHROM_COLORS+1]; /* Declare colors for chromosome coloring, +1 for unused chrom 0 color */ /* Have the 3 shades of 8 chromosome colors been allocated? */ boolean chromosomeColorsMade = FALSE; +/* have the 10 scaffold colors been allocated */ +static boolean scafColorsMade = FALSE; int maxItemsInFullTrack = 1000; /* Maximum number of items displayed in full */ int maxItemsToUseOverflowDefault = 10000; /* # of items to allow overflow mode*/ /* These variables persist from one incarnation of this program to the * next - living mostly in the cart. */ // multi-window variables global to hgTracks struct window *windows = NULL; // list of windows in image struct window *currentWindow = NULL; bool trackLoadingInProgress; // flag to delay ss layout until all windows are ready. int fullInsideX; // full-image insideX int fullInsideWidth; // full-image insideWidth struct virtRegion *virtRegionList = NULL; // list of regions in virtual chrom @@ -3301,30 +3306,49 @@ #define CHROM_BREAK_DARK_COLOR_ZOOM 200000 Color getChromBreakGreenColor() { return (winEnd-winStart > CHROM_BREAK_DARK_COLOR_ZOOM ? darkGreenColor : greenColor); } Color getChromBreakBlueColor() { return (winEnd-winStart > CHROM_BREAK_DARK_COLOR_ZOOM ? darkBlueColor : blueColor); } /* See inc/chromColors.h for color defines */ +static void makeScaffoldShades(struct hvGfx *hvg) +/* Allocate 10 colors for arbitrary scaffold/contig coloring */ +{ + /* color zero is for error conditions only */ +scafColor[0] = hvGfxFindColorIx(hvg, 0, 0, 0); +scafColor[1] = hvGfxFindColorIx(hvg, SCAF1_R, SCAF1_G, SCAF1_B); +scafColor[2] = hvGfxFindColorIx(hvg, SCAF2_R, SCAF2_G, SCAF2_B); +scafColor[3] = hvGfxFindColorIx(hvg, SCAF3_R, SCAF3_G, SCAF3_B); +scafColor[4] = hvGfxFindColorIx(hvg, SCAF4_R, SCAF4_G, SCAF4_B); +scafColor[5] = hvGfxFindColorIx(hvg, SCAF5_R, SCAF5_G, SCAF5_B); +scafColor[6] = hvGfxFindColorIx(hvg, SCAF6_R, SCAF6_G, SCAF6_B); +scafColor[7] = hvGfxFindColorIx(hvg, SCAF7_R, SCAF7_G, SCAF7_B); +scafColor[8] = hvGfxFindColorIx(hvg, SCAF8_R, SCAF8_G, SCAF8_B); +scafColor[9] = hvGfxFindColorIx(hvg, SCAF9_R, SCAF9_G, SCAF9_B); +scafColor[10] = hvGfxFindColorIx(hvg, SCAF10_R, SCAF10_G, SCAF10_B); +scafColorsMade = TRUE; +} + +/* See inc/chromColors.h for color defines */ void makeChromosomeShades(struct hvGfx *hvg) /* Allocate the shades of 8 colors in 3 shades to cover 24 chromosomes */ { /* color zero is for error conditions only */ chromColor[0] = hvGfxFindColorIx(hvg, 0, 0, 0); chromColor[1] = hvGfxFindColorIx(hvg, CHROM_1_R, CHROM_1_G, CHROM_1_B); chromColor[2] = hvGfxFindColorIx(hvg, CHROM_2_R, CHROM_2_G, CHROM_2_B); chromColor[3] = hvGfxFindColorIx(hvg, CHROM_3_R, CHROM_3_G, CHROM_3_B); chromColor[4] = hvGfxFindColorIx(hvg, CHROM_4_R, CHROM_4_G, CHROM_4_B); chromColor[5] = hvGfxFindColorIx(hvg, CHROM_5_R, CHROM_5_G, CHROM_5_B); chromColor[6] = hvGfxFindColorIx(hvg, CHROM_6_R, CHROM_6_G, CHROM_6_B); chromColor[7] = hvGfxFindColorIx(hvg, CHROM_7_R, CHROM_7_G, CHROM_7_B); chromColor[8] = hvGfxFindColorIx(hvg, CHROM_8_R, CHROM_8_G, CHROM_8_B); chromColor[9] = hvGfxFindColorIx(hvg, CHROM_9_R, CHROM_9_G, CHROM_9_B); chromColor[10] = hvGfxFindColorIx(hvg, CHROM_10_R, CHROM_10_G, CHROM_10_B); @@ -9033,36 +9057,36 @@ /* perhaps a contig name of some other prefix */ if (NULL == skipped && scaffoldPrefixes == prefixes) { skipped = cloneString(name); chopSuffixAt(skipped, 'v'); /* remove the vNN version, usually v1 */ eraseNonDigits(skipped); /* strip characters, leave digits only */ if (0 == strlen(skipped)) /* if none left, did not work */ skipped = NULL; } return skipped; } Color getScaffoldColor(char *scaffoldNum, struct hvGfx *hvg) /* assign fake chrom color to scaffold/contig, based on number */ { -int chromNum = atoi(scaffoldNum) % CHROM_COLORS; -if (!chromosomeColorsMade) - makeChromosomeShades(hvg); -if (chromNum < 0 || chromNum > CHROM_COLORS) - chromNum = 0; -return chromColor[chromNum]; +int scafNum = atoi(scaffoldNum) % SCAF_COLORS + 1; +if (!scafColorsMade) + makeScaffoldShades(hvg); +if (scafNum < 0 || scafNum > SCAF_COLORS) + scafNum = 0; +return scafColor[scafNum]; } Color getSeqColorDefault(char *seqName, struct hvGfx *hvg, Color defaultColor) /* Return color of chromosome/scaffold/contig/numeric string, or * defaultColor if seqName doesn't look like any of those. */ { char *skipped = maybeSkipPrefix(seqName, chromPrefixes); if (skipped != NULL) return getChromColor(skipped, hvg); skipped = maybeSkipPrefix(seqName, scaffoldPrefixes); if (skipped != NULL) return getScaffoldColor(skipped, hvg); if (isdigit(seqName[0])) return getScaffoldColor(seqName, hvg); return defaultColor;