public void renderGenotypeBandSNP( Variant variant, RenderContext context, Rectangle bandRectangle, int pX0, int dX, String sampleName, VariantTrack.ColorMode coloring, boolean hideFiltered) { int pY = (int) bandRectangle.getY(); int dY = (int) bandRectangle.getHeight(); int tOffset = 6; int bOffset = 8; Graphics2D g = (Graphics2D) context.getGraphics().create(); if (dX >= 10) { if (dY > 24) { Font f = FontManager.getFont(Font.BOLD, Math.min(dX, 12)); g.setFont(f); } else if (dY > 18) { Font f = FontManager.getFont(Font.BOLD, Math.min(dX, 8)); tOffset = 4; bOffset = 5; g.setFont(f); } } boolean isFiltered = variant.isFiltered() && hideFiltered; Genotype genotype = variant.getGenotype(sampleName); if (genotype == null) { log.error("Now what?"); } else { Color b1Color = Color.gray; Color b2Color = Color.gray; char b1 = ' '; char b2 = ' '; // Assign proper coloring switch (coloring) { case GENOTYPE: b1Color = getGenotypeColor(genotype, isFiltered); b2Color = b1Color; break; case ALLELE: final List<Allele> alleleList = genotype.getAlleles(); if (alleleList.size() > 0) { b1 = getFirstBase(alleleList.get(0)); b1Color = nucleotideColors.get(b1); } if (alleleList.size() > 1) { b2 = getFirstBase(alleleList.get(1)); b2Color = nucleotideColors.get(b2); } break; case METHYLATION_RATE: final double goodBaseCount = genotype.getAttributeAsDouble("GB"); b1Color = colorNoCall; b2Color = b1Color; final double value = genotype.getAttributeAsDouble("MR"); if (!Double.isNaN(goodBaseCount) && !Double.isNaN(value)) { if (goodBaseCount < VariantTrack.METHYLATION_MIN_BASE_COUNT || Double.isNaN(value)) { b1Color = colorNoCall; b2Color = b1Color; } else { float mr = (float) value; mr /= 100f; b1Color = convertMethylationRateToColor(mr); b2Color = b1Color; } } else { log.error( "GB and MR fields must be defined for all records in a VCF methylation file."); } break; default: b1Color = colorNoCall; b2Color = b1Color; } int y0 = track.getDisplayMode() == Track.DisplayMode.EXPANDED ? pY + 1 : pY; int h = Math.max(1, track.getDisplayMode() == Track.DisplayMode.EXPANDED ? dY - 2 : dY); if (coloring == VariantTrack.ColorMode.GENOTYPE) { g.setColor(b1Color); g.fillRect(pX0, y0, dX, h); } else { // Color by allele g.setColor(b1Color); g.fillRect(pX0, y0, (dX / 2), h); g.setColor(b2Color); g.fillRect(pX0 + (dX / 2), y0, (dX / 2), h); } if ((dX >= 10) && (dY >= 18)) { if (b1Color == Color.blue) { g.setColor(Color.white); } else { g.setColor(Color.black); } drawCenteredText(g, new char[] {b1}, pX0, pY - tOffset, dX, dY); drawCenteredText(g, new char[] {b2}, pX0, pY + (dY / 2) - bOffset, dX, dY); } } g.dispose(); }