From fb06722c6787ed41809827a0ddfb9cc6e9c7324d Mon Sep 17 00:00:00 2001 From: gmungoc Date: Thu, 31 Aug 2017 08:47:05 +0100 Subject: [PATCH] JAL-2704 unit test for Above PID gap colour, simplified findColour() --- src/jalview/renderer/ResidueShader.java | 10 +- test/jalview/renderer/ResidueShaderTest.java | 132 +++++++++++++++++++++++--- 2 files changed, 127 insertions(+), 15 deletions(-) diff --git a/src/jalview/renderer/ResidueShader.java b/src/jalview/renderer/ResidueShader.java index aa84816..c031170 100644 --- a/src/jalview/renderer/ResidueShader.java +++ b/src/jalview/renderer/ResidueShader.java @@ -235,6 +235,11 @@ public class ResidueShader implements ResidueShaderI @Override public Color findColour(char symbol, int position, SequenceI seq) { + if (colourScheme == null) + { + return Color.white; // Colour is 'None' + } + /* * get 'base' colour */ @@ -243,9 +248,8 @@ public class ResidueShader implements ResidueShaderI : profile.getModalResidue(); float pid = profile == null ? 0f : profile.getPercentageIdentity(ignoreGaps); - Color colour = colourScheme == null ? Color.white - : colourScheme.findColour(symbol, position, seq, modalResidue, - pid); + Color colour = colourScheme.findColour(symbol, position, seq, + modalResidue, pid); /* * apply PID threshold and consensus fading if in force diff --git a/test/jalview/renderer/ResidueShaderTest.java b/test/jalview/renderer/ResidueShaderTest.java index 26d4b15..eba5f59 100644 --- a/test/jalview/renderer/ResidueShaderTest.java +++ b/test/jalview/renderer/ResidueShaderTest.java @@ -8,12 +8,15 @@ import jalview.analysis.Conservation; import jalview.datamodel.Profile; import jalview.datamodel.ProfileI; import jalview.datamodel.Profiles; +import jalview.datamodel.ProfilesI; +import jalview.datamodel.ResidueCount; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import jalview.schemes.ColourSchemeI; import jalview.schemes.PIDColourScheme; import jalview.schemes.ResidueProperties; import jalview.schemes.UserColourScheme; +import jalview.schemes.ZappoColourScheme; import java.awt.Color; import java.util.Collections; @@ -166,19 +169,26 @@ public class ResidueShaderTest assertEquals(Color.WHITE, ccs.applyConservation(colour, 12)); } - /** - * A custom gap colour should not be affected by Colour by Conservation - */ @Test(groups = "Functional") public void testFindColour_gapColour() { + /* + * normally, a gap is coloured white + */ + ResidueShader rs = new ResidueShader(new ZappoColourScheme()); + assertEquals(Color.white, rs.findColour(' ', 7, null)); + + /* + * a User Colour Scheme may specify a bespoke gap colour + */ Color[] colours = new Color[ResidueProperties.maxProteinIndex + 1]; colours[5] = Color.blue; // Q colour colours[23] = Color.red; // gap colour ColourSchemeI cs = new UserColourScheme(colours); - ResidueShader ccs = new ResidueShader(cs); + rs = new ResidueShader(cs); - assertEquals(Color.red, ccs.findColour(' ', 7, null)); + assertEquals(Color.red, rs.findColour(' ', 7, null)); + assertEquals(Color.blue, rs.findColour('Q', 7, null)); /* * stub Conservation to return a given consensus string @@ -193,33 +203,131 @@ public class ResidueShaderTest return new Sequence("seq", consSequence); } }; - ccs.setConservation(cons); + rs.setConservation(cons); /* * with 0% threshold, there should be no fading */ - ccs.setConservationInc(0); - assertEquals(Color.red, ccs.findColour(' ', 7, null)); - assertEquals(Color.blue, ccs.findColour('Q', 7, null)); + rs.setConservationInc(0); + assertEquals(Color.red, rs.findColour(' ', 7, null)); + assertEquals(Color.blue, rs.findColour('Q', 7, null)); /* * with 40% threshold, 'fade factor' is * (11-score)/10 * 40/20 = (11-score)/5 * so position 7, score 7 fades 80% of the way to white (255, 255, 255) */ - ccs.setConservationInc(40); + rs.setConservationInc(40); /* * gap colour is unchanged for Conservation */ - assertEquals(Color.red, ccs.findColour(' ', 7, null)); + assertEquals(Color.red, rs.findColour(' ', 7, null)); + assertEquals(Color.red, rs.findColour('-', 7, null)); + assertEquals(Color.red, rs.findColour('.', 7, null)); /* * residue colour is faded 80% of the way from * blue(0, 0, 255) to white(255, 255, 255) * making (204, 204, 255) */ - assertEquals(new Color(204, 204, 255), ccs.findColour('Q', 7, null)); + assertEquals(new Color(204, 204, 255), rs.findColour('Q', 7, null)); + + /* + * turn off By Conservation, apply Above Identity Threshold + * providing a stub Consensus that has modal residue "Q" with pid 60% + */ + rs.setConservationApplied(false); + ProfilesI consensus = getStubConsensus("Q", 60f); + rs.setConsensus(consensus); + + // with consensus pid (60) above threshold (50), colours are unchanged + rs.setThreshold(50, false); + assertEquals(Color.blue, rs.findColour('Q', 7, null)); + assertEquals(Color.red, rs.findColour('-', 7, null)); + + // with consensus pid (60) below threshold (70), + // residue colour becomes white, gap colour is unchanged + rs.setThreshold(70, false); + assertEquals(Color.white, rs.findColour('Q', 7, null)); + assertEquals(Color.red, rs.findColour('-', 7, null)); } + /** + * @param modalResidue + * @param pid + * @return + */ + protected ProfilesI getStubConsensus(final String modalResidue, + final float pid) + { + ProfilesI consensus = new ProfilesI() { + + @Override + public ProfileI get(int i) + { + return new ProfileI() { + @Override + public void setCounts(ResidueCount residueCounts) + { + } + + @Override + public float getPercentageIdentity(boolean ignoreGaps) + { + return pid; + } + + @Override + public ResidueCount getCounts() + { + return null; + } + + @Override + public int getHeight() + { + return 0; + } + + @Override + public int getGapped() + { + return 0; + } + + @Override + public int getMaxCount() + { + return 0; + } + + @Override + public String getModalResidue() + { + return modalResidue; + } + + @Override + public int getNonGapped() + { + return 0; + }}; + } + + @Override + public int getStartColumn() + { + return 0; + } + + @Override + public int getEndColumn() + { + return 0; + } + + }; + return consensus; + } } -- 1.7.10.2