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;
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
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;
+ }
}