From ccd341fe829d12e0ec54be126ad561a7ce1a2987 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 4 Feb 2011 11:07:42 +0000 Subject: [PATCH] group associated annotation and logos JAL-516 JAL-759 --- src/jalview/appletgui/AlignFrame.java | 129 +++++++++++++++++++++++++-- src/jalview/appletgui/AlignViewport.java | 141 ++++++++++++++++++++++-------- src/jalview/appletgui/TreeCanvas.java | 9 +- src/jalview/appletgui/TreePanel.java | 16 ++-- 4 files changed, 245 insertions(+), 50 deletions(-) diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index bad7848..2e9b7ea 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -70,6 +70,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, annotationPanelMenuItem.setState(viewport.showAnnotation); displayNonconservedMenuItem.setState(viewport.getShowunconserved()); followMouseOverFlag.setState(viewport.getFollowHighlight()); + showGroupConsensus.setState(viewport.showGroupConsensus); + showGroupConservation.setState(viewport.showGroupConservation); + showConsensusHistogram.setState(viewport.showConsensusHistogram); + showSequenceLogo.setState(viewport.showSequenceLogo); seqLimits.setState(viewport.showJVSuffix); @@ -597,7 +601,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { mouseOverFlag_stateChanged(); } - + else if (evt.getSource() == showGroupConsensus) + { + showGroupConsensus_actionPerformed(); + } + else if (evt.getSource() == showGroupConservation) + { + showGroupConservation_actionPerformed(); + } + else if (evt.getSource() == showSequenceLogo) + { + showSequenceLogo_actionPerformed(); + } + else if (evt.getSource() == showConsensusHistogram) + { + showConsensusHistogram_actionPerformed(); + } + else if (evt.getSource() == applyAutoAnnotationSettings) + { + applyAutoAnnotationSettings_actionPerformed(); + } alignPanel.paintAlignment(true); } @@ -787,6 +810,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.showAllHiddenSeqs(); alignPanel.paintAlignment(true); } + else if (source == showGroupConsensus) + { + showGroupConsensus_actionPerformed(); + } + else if (source == showGroupConservation) + { + showGroupConservation_actionPerformed(); + } + else if (source == showSequenceLogo) + { + showSequenceLogo_actionPerformed(); + } + else if (source == showConsensusHistogram) + { + showConsensusHistogram_actionPerformed(); + } + else if (source == applyAutoAnnotationSettings) + { + applyAutoAnnotationSettings_actionPerformed(); + } else if (source == featureSettings) { new FeatureSettings(alignPanel); @@ -1641,6 +1684,56 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.sendSelection(); } + /** + * group consensus toggled + * + */ + protected void showGroupConsensus_actionPerformed() + { + viewport.setShowGroupConsensus(showGroupConsensus.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + + } + + /** + * group conservation toggled. + */ + protected void showGroupConservation_actionPerformed() + { + viewport.setShowGroupConservation(showGroupConservation.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void showConsensusHistogram_actionPerformed() + { + viewport.setShowConsensusHistogram(showConsensusHistogram.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt + * .event.ActionEvent) + */ + protected void showSequenceLogo_actionPerformed() + { + viewport.setShowSequenceLogo(showSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + protected void applyAutoAnnotationSettings_actionPerformed() + { + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + protected void makeGrpsFromSelection_actionPerformed() { if (viewport.getSelectionGroup() != null) @@ -1668,7 +1761,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ; } PaintRefresher.Refresh(this, viewport.getSequenceSetId()); - // alignPanel.updateAnnotation(); + alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); } } @@ -2371,7 +2464,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, || (viewport.getSelectionGroup() == null && viewport.alignment .getHeight() > 1)) { - final TreePanel tp = new TreePanel(viewport, type, pwType); + final TreePanel tp = new TreePanel(alignPanel, type, pwType); addTreeMenuItem(tp, title); @@ -2391,7 +2484,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void loadTree(jalview.io.NewickFile tree, String treeFile) { - TreePanel tp = new TreePanel(viewport, treeFile, "From File - ", tree); + TreePanel tp = new TreePanel(alignPanel, treeFile, "From File - ", tree); jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500); addTreeMenuItem(tp, treeFile); } @@ -2756,8 +2849,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem seqLimits = new CheckboxMenuItem(); CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem(); - + CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem(); + Menu autoAnnMenu=new Menu(); + CheckboxMenuItem showSequenceLogo= new CheckboxMenuItem(); + CheckboxMenuItem applyAutoAnnotationSettings = new CheckboxMenuItem(); + CheckboxMenuItem showConsensusHistogram = new CheckboxMenuItem(); + CheckboxMenuItem showGroupConsensus = new CheckboxMenuItem(); + CheckboxMenuItem showGroupConservation = new CheckboxMenuItem(); private void jbInit() throws Exception { @@ -2961,6 +3060,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, hideAllButSelection.setLabel("All but Selected Region (Shift+Ctrl+H)"); hideAllSelection.setLabel("Selected Region"); showAllHidden.setLabel("All Sequences and Columns"); + showGroupConsensus.setLabel("Group Consensus"); + showGroupConservation.setLabel("Group Conservation"); + showConsensusHistogram.setLabel("Show Consensus Histogram"); + showSequenceLogo.setLabel("Show Consensus Logo"); + applyAutoAnnotationSettings.setLabel("Apply to all groups"); + applyAutoAnnotationSettings.setState(true); + autoAnnMenu.setLabel("Autocalculated Annotation"); + invertColSel.addActionListener(this); showColumns.addActionListener(this); showSeqs.addActionListener(this); @@ -2969,6 +3076,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, hideAllButSelection.addActionListener(this); hideAllSelection.addActionListener(this); showAllHidden.addActionListener(this); + showGroupConsensus.addItemListener(this); + showGroupConservation.addItemListener(this); + showConsensusHistogram.addItemListener(this); + showSequenceLogo.addItemListener(this); + applyAutoAnnotationSettings.addItemListener(this); formatMenu.setLabel("Format"); selectMenu.setLabel("Select"); newView.setLabel("New View"); @@ -3018,6 +3130,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewMenu.addSeparator(); viewMenu.add(followMouseOverFlag); viewMenu.add(annotationPanelMenuItem); + autoAnnMenu.add(applyAutoAnnotationSettings); + autoAnnMenu.add(showConsensusHistogram); + autoAnnMenu.add(showSequenceLogo); + autoAnnMenu.addSeparator(); + autoAnnMenu.add(showGroupConservation); + autoAnnMenu.add(showGroupConsensus); + viewMenu.add(autoAnnMenu); viewMenu.addSeparator(); viewMenu.add(sequenceFeatures); viewMenu.add(featureSettings); diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index 0dc60d1..87566c6 100755 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -263,6 +263,19 @@ public class AlignViewport implements SelectionSource, VamsasSource followHighlight = Boolean.valueOf(param).booleanValue(); followSelection = followHighlight; } + if ((param=applet.getParameter("showSequenceLogo"))!=null) { + showSequenceLogo=Boolean.valueOf(param).booleanValue(); + } + if ((param=applet.getParameter("showGroupConsensus"))!=null) { + showGroupConsensus=Boolean.valueOf(param).booleanValue(); + } + if ((param=applet.getParameter("showGroupConservation"))!=null) { + showGroupConservation=Boolean.valueOf(param).booleanValue(); + } + if ((param=applet.getParameter("showConsensusHistogram"))!=null) { + showConsensusHistogram=Boolean.valueOf(param).booleanValue(); + } + } if (applet != null) @@ -571,10 +584,11 @@ public class AlignViewport implements SelectionSource, VamsasSource AAFrequency.calculate(alignment.getSequencesArray(), 0, alignment.getWidth(), hconsensus, true); // always calculate the // full profile - AAFrequency.completeConsensus(consensus, hconsensus, 0, aWidth, - ignoreGapsInConsensusCalculation, - includeAllConsensusSymbols); - + updateAnnotation(true); + //AAFrequency.completeConsensus(consensus, hconsensus, 0, aWidth, + // ignoreGapsInConsensusCalculation, + // true); + if (globalColourScheme != null) { globalColourScheme.setConsensus(hconsensus); @@ -597,6 +611,28 @@ public class AlignViewport implements SelectionSource, VamsasSource ap.paintAlignment(true); } } + + /** + * update the consensus annotation from the sequence profile data using + * current visualization settings. + */ + public void updateAnnotation() + { + updateAnnotation(false); + } + + protected void updateAnnotation(boolean immediate) + { + // TODO: make calls thread-safe, so if another thread calls this method, + // it will either return or wait until one calculation is finished. + if (immediate + || (!updatingConsensus && consensus != null && hconsensus != null)) + { + AAFrequency.completeConsensus(consensus, hconsensus, 0, + hconsensus.length, ignoreGapsInConsensusCalculation, + showSequenceLogo); + } + } } /** @@ -609,6 +645,10 @@ public class AlignViewport implements SelectionSource, VamsasSource { if (consensus == null) { + updateConsensus(null); + } + if (consensus == null) + { return null; } StringBuffer seqs = new StringBuffer(); @@ -1574,6 +1614,16 @@ public class AlignViewport implements SelectionSource, VamsasSource } return false; } + public void sendSelection() + { + jalview.structure.StructureSelectionManager + .getStructureSelectionManager().sendSelection( + new SequenceGroup(getSelectionGroup()), + new ColumnSelection(getColumnSelection()), this); + } + + + /** * show non-conserved residues only @@ -1603,27 +1653,17 @@ public class AlignViewport implements SelectionSource, VamsasSource } /** - * consensus annotation includes all percentage for all symbols in column - * DISABLED FOR 2.5 RELEASE (bug #60064 logo rendering is not AWT 1.1 - * compatible) - */ - private boolean includeAllConsensusSymbols = false; - - /** - * should conservation rows be shown for groups DISABLED FOR 2.5 RELEASE (bug - * 62446) + * should conservation rows be shown for groups */ boolean showGroupConservation = false; /** - * should consensus rows be shown for groups DISABLED FOR 2.5 RELEASE (bug - * 62446) + * should consensus rows be shown for groups */ boolean showGroupConsensus = false; /** - * should consensus profile be rendered by default DISABLED FOR 2.5 RELEASE - * (bug #60064 logo rendering is not AWT 1.1 compatible) + * should consensus profile be rendered by default */ public boolean showSequenceLogo = false; @@ -1642,24 +1682,64 @@ public class AlignViewport implements SelectionSource, VamsasSource /** * @param showSequenceLogo - * the new value public void setShowSequenceLogo(boolean - * showSequenceLogo) { this.showSequenceLogo = showSequenceLogo; } + * the new value */ + public void setShowSequenceLogo(boolean showSequenceLogo) + { + if (showSequenceLogo != this.showSequenceLogo) + { + // TODO: decouple settings setting from calculation when refactoring + // annotation update method from alignframe to viewport + this.showSequenceLogo = showSequenceLogo; + if (consensusThread != null) + { + consensusThread.updateAnnotation(); + } + } + this.showSequenceLogo = showSequenceLogo; + } + /** - * @param showGroupConsensus - * the showGroupConsensus to set + * @param showConsensusHistogram + * the showConsensusHistogram to set */ - public void setShowGroupConsensus(boolean showGroupConsensus) + public void setShowConsensusHistogram(boolean showConsensusHistogram) { - this.showGroupConsensus = showGroupConsensus; + this.showConsensusHistogram = showConsensusHistogram; } /** - * @return the includeAllConsensusSymbols + * @return the showGroupConservation */ - public boolean isIncludeAllConsensusSymbols() + public boolean isShowGroupConservation() { - return false; + return showGroupConservation; + } + + /** + * @param showGroupConservation + * the showGroupConservation to set + */ + public void setShowGroupConservation(boolean showGroupConservation) + { + this.showGroupConservation = showGroupConservation; + } + + /** + * @return the showGroupConsensus + */ + public boolean isShowGroupConsensus() + { + return showGroupConsensus; + } + + /** + * @param showGroupConsensus + * the showGroupConsensus to set + */ + public void setShowGroupConsensus(boolean showGroupConsensus) + { + this.showGroupConsensus = showGroupConsensus; } /** @@ -1704,13 +1784,4 @@ public class AlignViewport implements SelectionSource, VamsasSource } } } - public void sendSelection() - { - jalview.structure.StructureSelectionManager - .getStructureSelectionManager().sendSelection( - new SequenceGroup(getSelectionGroup()), - new ColumnSelection(getColumnSelection()), this); - } - - } diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 4a38767..a9a4bfe 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -64,9 +64,11 @@ public class TreeCanvas extends Panel implements MouseListener, SequenceNode highlightNode; - public TreeCanvas(AlignViewport av, ScrollPane scroller) + AlignmentPanel ap; + public TreeCanvas(AlignmentPanel ap, ScrollPane scroller) { - this.av = av; + this.ap = ap; + this.av = ap.av; font = av.getFont(); scrollPane = scroller; addMouseListener(this); @@ -649,7 +651,8 @@ public class TreeCanvas extends Panel implements MouseListener, av.alignment.addGroup(sg); } - + ap.updateAnnotation(); + } public void setShowDistances(boolean state) diff --git a/src/jalview/appletgui/TreePanel.java b/src/jalview/appletgui/TreePanel.java index 268fece..d424367 100755 --- a/src/jalview/appletgui/TreePanel.java +++ b/src/jalview/appletgui/TreePanel.java @@ -41,6 +41,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener, TreeCanvas treeCanvas; NJTree tree; + AlignmentPanel ap; AlignViewport av; @@ -65,7 +66,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener, * @param e * DOCUMENT ME! */ - public TreePanel(AlignViewport av, String type, String pwtype) + public TreePanel(AlignmentPanel ap, String type, String pwtype) { try { @@ -76,7 +77,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener, ex.printStackTrace(); } - initTreePanel(av, type, pwtype, null); + initTreePanel(ap, type, pwtype, null); } /** @@ -93,7 +94,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener, * @param pwtype * DOCUMENT ME! */ - public TreePanel(AlignViewport av, String type, String pwtype, + public TreePanel(AlignmentPanel ap, String type, String pwtype, NewickFile newtree) { try @@ -105,18 +106,19 @@ public class TreePanel extends EmbmenuFrame implements ActionListener, e.printStackTrace(); } - initTreePanel(av, type, pwtype, newtree); + initTreePanel(ap, type, pwtype, newtree); } - void initTreePanel(AlignViewport av, String type, String pwtype, + void initTreePanel(AlignmentPanel ap, String type, String pwtype, NewickFile newTree) { - this.av = av; + this.ap = ap; + this.av = ap.av; this.type = type; this.pwtype = pwtype; - treeCanvas = new TreeCanvas(av, scrollPane); + treeCanvas = new TreeCanvas(ap, scrollPane); TreeLoader tl = new TreeLoader(newTree); tl.start(); embedMenuIfNeeded(treeCanvas); -- 1.7.10.2