From: gmungoc Date: Thu, 15 Jun 2017 13:08:32 +0000 (+0100) Subject: Merge branch 'bug/JAL-2386groupConservationColouring' into develop X-Git-Tag: Release_2_10_3b1~183^2~3 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=142b2dab72e1c722f52fc9e5e41453e347491155;hp=54dd5d7c3c4384ef383ead7cf3d150ac5fddb3da;p=jalview.git Merge branch 'bug/JAL-2386groupConservationColouring' into develop --- diff --git a/src/jalview/appletgui/SliderPanel.java b/src/jalview/appletgui/SliderPanel.java index 9154aa0..47a0669 100644 --- a/src/jalview/appletgui/SliderPanel.java +++ b/src/jalview/appletgui/SliderPanel.java @@ -20,6 +20,7 @@ */ package jalview.appletgui; +import jalview.analysis.Conservation; import jalview.datamodel.SequenceGroup; import jalview.renderer.ResidueShaderI; import jalview.util.MessageManager; @@ -44,7 +45,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.util.Iterator; +import java.util.List; public class SliderPanel extends Panel implements ActionListener, AdjustmentListener, MouseListener @@ -82,7 +83,8 @@ public class SliderPanel extends Panel implements ActionListener, conservationSlider.setTitle(MessageManager.formatMessage( "label.conservation_colour_increment", new String[] { source == null ? BACKGROUND : source })); - if (ap.av.getAlignment().getGroups() != null) + List groups = ap.av.getAlignment().getGroups(); + if (groups != null && !groups.isEmpty()) { sp.setAllGroupsCheckEnabled(true); } @@ -248,45 +250,53 @@ public class SliderPanel extends Panel implements ActionListener, { return; } - - ResidueShaderI toChange = cs; - Iterator allGroups = null; - - if (allGroupsCheck.getState()) + if (forConservation) { - allGroups = ap.av.getAlignment().getGroups().listIterator(); + cs.setConservationApplied(true); + cs.setConservationInc(i); + } + else + { + cs.setThreshold(i, ap.av.isIgnoreGapsConsensus()); } - while (toChange != null) + if (allGroupsCheck.getState()) { - if (forConservation) + for (SequenceGroup group : ap.av.getAlignment().getGroups()) { - toChange.setConservationInc(i); - } - else - { - toChange.setThreshold(i, ap.av.isIgnoreGapsConsensus()); - } - if (allGroups != null && allGroups.hasNext()) - { - while ((toChange = allGroups.next().cs) == null - && allGroups.hasNext()) + ResidueShaderI groupColourScheme = group.getGroupColourScheme(); + if (forConservation) { - ; + if (!groupColourScheme.conservationApplied()) + { + /* + * first time the colour scheme has had Conservation shading applied + * - compute conservation + */ + Conservation c = new Conservation("Group", + group.getSequences(null), group.getStartRes(), + group.getEndRes()); + c.calculate(); + c.verdict(false, ap.av.getConsPercGaps()); + group.cs.setConservation(c); + + } + groupColourScheme.setConservationApplied(true); + groupColourScheme.setConservationInc(i); + } + else + { + groupColourScheme.setThreshold(i, ap.av.isIgnoreGapsConsensus()); } - } - else - { - toChange = null; } } ap.seqPanel.seqCanvas.repaint(); - } public void setAllGroupsCheckEnabled(boolean b) { + allGroupsCheck.setState(ap.av.getColourAppliesToAllGroups()); allGroupsCheck.setEnabled(b); } diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 463b909..46c802f 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -188,7 +188,7 @@ public class SequenceGroup implements AnnotatedCollectionI colourText = seqsel.colourText; startRes = seqsel.startRes; endRes = seqsel.endRes; - cs = new ResidueShader(seqsel.getColourScheme()); + cs = new ResidueShader((ResidueShader) seqsel.cs); if (seqsel.description != null) { description = new String(seqsel.description); diff --git a/src/jalview/gui/SliderPanel.java b/src/jalview/gui/SliderPanel.java index 0c4e03e..ec53e93 100755 --- a/src/jalview/gui/SliderPanel.java +++ b/src/jalview/gui/SliderPanel.java @@ -20,6 +20,7 @@ */ package jalview.gui; +import jalview.analysis.Conservation; import jalview.datamodel.SequenceGroup; import jalview.jbgui.GSliderPanel; import jalview.renderer.ResidueShaderI; @@ -28,6 +29,7 @@ import jalview.util.MessageManager; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyVetoException; +import java.util.List; import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; @@ -170,7 +172,8 @@ public class SliderPanel extends GSliderPanel "label.conservation_colour_increment", new String[] { source == null ? BACKGROUND : source })); - if (ap.av.getAlignment().getGroups() != null) + List groups = ap.av.getAlignment().getGroups(); + if (groups != null && !groups.isEmpty()) { sliderPanel.setAllGroupsCheckEnabled(true); } @@ -331,13 +334,14 @@ public class SliderPanel extends GSliderPanel { ap.av.setThreshold(percent); } - updateColourScheme(percent, cs); + updateColourScheme(percent, cs, null); if (allGroupsCheck.isSelected()) { - for (SequenceGroup sg : ap.av.getAlignment().getGroups()) + List groups = ap.av.getAlignment().getGroups(); + for (SequenceGroup sg : groups) { - updateColourScheme(percent, sg.getGroupColourScheme()); + updateColourScheme(percent, sg.getGroupColourScheme(), sg); } } @@ -350,8 +354,10 @@ public class SliderPanel extends GSliderPanel * * @param percent * @param scheme + * @param sg */ - protected void updateColourScheme(int percent, ResidueShaderI scheme) + protected void updateColourScheme(int percent, ResidueShaderI scheme, + SequenceGroup sg) { if (scheme == null) { @@ -359,6 +365,20 @@ public class SliderPanel extends GSliderPanel } if (forConservation) { + if (!scheme.conservationApplied()) + { + /* + * first time the colour scheme has had Conservation shading applied + * - compute conservation + */ + Conservation c = new Conservation("Group", sg.getSequences(null), + sg.getStartRes(), sg.getEndRes()); + c.calculate(); + c.verdict(false, ap.av.getConsPercGaps()); + sg.cs.setConservation(c); + + } + scheme.setConservationApplied(true); scheme.setConservationInc(percent); } else @@ -376,6 +396,7 @@ public class SliderPanel extends GSliderPanel public void setAllGroupsCheckEnabled(boolean b) { allGroupsCheck.setEnabled(b); + allGroupsCheck.setSelected(ap.av.getColourAppliesToAllGroups()); } /** diff --git a/src/jalview/renderer/ResidueShader.java b/src/jalview/renderer/ResidueShader.java index b6f7fe6..8ecb2ad 100644 --- a/src/jalview/renderer/ResidueShader.java +++ b/src/jalview/renderer/ResidueShader.java @@ -96,6 +96,20 @@ public class ResidueShader implements ResidueShaderI } /** + * Copy constructor + */ + public ResidueShader(ResidueShader rs) + { + this.colourScheme = rs.colourScheme; + this.consensus = rs.consensus; + this.conservation = rs.conservation; + this.conservationColouring = rs.conservationColouring; + this.conservationIncrement = rs.conservationIncrement; + this.ignoreGaps = rs.ignoreGaps; + this.pidThreshold = rs.pidThreshold; + } + + /** * @see jalview.renderer.ResidueShaderI#setConsensus(jalview.datamodel.ProfilesI) */ @Override diff --git a/test/jalview/datamodel/SequenceGroupTest.java b/test/jalview/datamodel/SequenceGroupTest.java index f6d4028..b0af5c8 100644 --- a/test/jalview/datamodel/SequenceGroupTest.java +++ b/test/jalview/datamodel/SequenceGroupTest.java @@ -9,10 +9,12 @@ import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; +import jalview.analysis.Conservation; import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; import java.awt.Color; +import java.util.Collections; import junit.extensions.PA; @@ -232,6 +234,11 @@ public class SequenceGroupTest sg.setName("g1"); sg.setDescription("desc"); sg.setColourScheme(new PIDColourScheme()); + Conservation cons = new Conservation("Cons", 2, + Collections. emptyList(), 3, 12); + PA.setValue(cons, "consSequence", new Sequence("s", "abc")); + sg.getGroupColourScheme().setConservation(cons); + sg.getGroupColourScheme().setConsensus(new Profiles(null)); sg.setDisplayBoxes(false); sg.setDisplayText(false); sg.setColourText(true); @@ -255,6 +262,10 @@ public class SequenceGroupTest assertEquals(sg2.getDescription(), sg.getDescription()); assertNotSame(sg2.getGroupColourScheme(), sg.getGroupColourScheme()); assertSame(sg2.getColourScheme(), sg.getColourScheme()); + assertSame(PA.getValue(sg2.getGroupColourScheme(), "consensus"), + PA.getValue(sg.getGroupColourScheme(), "consensus")); + assertSame(PA.getValue(sg2.getGroupColourScheme(), "conservation"), + PA.getValue(sg.getGroupColourScheme(), "conservation")); assertEquals(sg2.getDisplayBoxes(), sg.getDisplayBoxes()); assertEquals(sg2.getDisplayText(), sg.getDisplayText()); assertEquals(sg2.getColourText(), sg.getColourText());