X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=44d96ca2fbbe40df106fff49fb2eb3c3a5418e55;hb=ad48d68e5790a0fa55e947b9ab9bb4eb5ca716ca;hp=bed434d086a56c63ac4ec158fce511c1cc278cdd;hpb=22d7179d1f4f20362bf10160fed8cc83712ae406;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index bed434d..44d96ca 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -34,7 +34,6 @@ import jalview.api.AlignmentViewPanel; import jalview.api.FeatureSettingsControllerI; import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; -import jalview.api.analysis.ScoreModelI; import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; import jalview.bin.Jalview; @@ -54,6 +53,8 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentOrder; import jalview.datamodel.AlignmentView; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.HiddenSequences; import jalview.datamodel.PDBEntry; import jalview.datamodel.SeqCigar; @@ -72,6 +73,7 @@ import jalview.io.FileFormats; import jalview.io.FileLoader; import jalview.io.FileParse; import jalview.io.FormatAdapter; +import jalview.io.HMMFile; import jalview.io.HtmlSvgOutput; import jalview.io.IdentifyFile; import jalview.io.JPredFile; @@ -85,7 +87,9 @@ import jalview.jbgui.GAlignFrame; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemes; import jalview.schemes.ResidueColourScheme; +import jalview.schemes.ResidueProperties; import jalview.schemes.TCoffeeColourScheme; +import jalview.util.Comparison; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; import jalview.viewmodel.ViewportRanges; @@ -121,7 +125,9 @@ import java.awt.event.MouseEvent; import java.awt.print.PageFormat; import java.awt.print.PrinterJob; import java.beans.PropertyChangeEvent; +import java.io.BufferedReader; import java.io.File; +import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.net.URL; @@ -129,8 +135,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.Enumeration; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; +import java.util.Map; +import java.util.Scanner; import java.util.Vector; import javax.swing.JCheckBoxMenuItem; @@ -152,6 +161,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener { + Map distribution = new HashMap<>(); // temporary + public static final int DEFAULT_WIDTH = 700; public static final int DEFAULT_HEIGHT = 500; @@ -167,7 +178,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public AlignViewControllerI avc; - List alignPanels = new ArrayList(); + List alignPanels = new ArrayList<>(); /** * Last format used to load or save alignments in this window @@ -179,6 +190,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ String fileName = null; + /** * Creates a new AlignFrame object with specific width and height. * @@ -234,7 +246,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param height * height of frame. */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height) { this(al, hiddenColumns, width, height, null); @@ -251,7 +263,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param sequenceSetId * (may be null) */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height, String sequenceSetId) { this(al, hiddenColumns, width, height, sequenceSetId, null); @@ -270,7 +282,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * @param viewId * (may be null) */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + public AlignFrame(AlignmentI al, HiddenColumns hiddenColumns, int width, int height, String sequenceSetId, String viewId) { setSize(width, height); @@ -289,7 +301,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } public AlignFrame(AlignmentI al, SequenceI[] hiddenSeqs, - ColumnSelection hiddenColumns, int width, int height) + HiddenColumns hiddenColumns, int width, int height) { setSize(width, height); @@ -396,8 +408,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, addKeyListener(); - final List selviews = new ArrayList(); - final List origview = new ArrayList(); + final List selviews = new ArrayList<>(); + final List origview = new ArrayList<>(); final String menuLabel = MessageManager .getString("label.copy_format_from"); ViewSelectionMenu vsel = new ViewSelectionMenu(menuLabel, @@ -410,7 +422,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, origview.clear(); origview.add(alignPanel); // make an array of all alignment panels except for this one - List aps = new ArrayList( + List aps = new ArrayList<>( Arrays.asList(Desktop.getAlignmentPanels(null))); aps.remove(AlignFrame.this.alignPanel); return aps.toArray(new AlignmentPanel[aps.size()]); @@ -691,23 +703,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_PAGE_UP: if (viewport.getWrapAlignment()) { - alignPanel.scrollUp(true); + vpRanges.scrollUp(true); } else { - alignPanel.setScrollValues(vpRanges.getStartRes(), - 2 * vpRanges.getStartSeq() - vpRanges.getEndSeq()); + vpRanges.pageUp(); } break; case KeyEvent.VK_PAGE_DOWN: if (viewport.getWrapAlignment()) { - alignPanel.scrollUp(false); + vpRanges.scrollUp(false); } else { - alignPanel.setScrollValues(vpRanges.getStartRes(), - vpRanges.getEndSeq()); + vpRanges.pageDown(); } break; } @@ -920,6 +930,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showConsensusHistogram.setSelected(av.isShowConsensusHistogram()); showSequenceLogo.setSelected(av.isShowSequenceLogo()); normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo()); + showInformationHistogram.setSelected(av.isShowInformationHistogram()); + showHMMSequenceLogo.setSelected(av.isShowHMMSequenceLogo()); + normaliseHMMSequenceLogo.setSelected(av.isNormaliseHMMSequenceLogo()); ColourMenuHelper.setColourSelected(colourMenu, av.getGlobalColourScheme()); @@ -1193,8 +1206,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, exportData.getAlignment(), // class cast exceptions will // occur in the distant future exportData.getOmitHidden(), exportData.getStartEndPostions(), - f.getCacheSuffixDefault(format), - viewport.getColumnSelection()); + f.getCacheSuffixDefault(format), viewport.getAlignment() + .getHiddenColumns()); if (output == null) { @@ -1272,8 +1285,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, cap.setText(new FormatAdapter(alignPanel, exportData.getSettings()) .formatSequences(format, exportData.getAlignment(), exportData.getOmitHidden(), - exportData.getStartEndPostions(), - viewport.getColumnSelection())); + exportData + .getStartEndPostions(), viewport + .getAlignment().getHiddenColumns())); Desktop.addInternalFrame(cap, MessageManager.formatMessage( "label.alignment_output_command", new Object[] { e.getActionCommand() }), 600, 500); @@ -1322,8 +1336,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignmentToExport = viewport.getAlignment(); } alignmentStartEnd = alignmentToExport - .getVisibleStartAndEndIndex(viewport.getColumnSelection() - .getHiddenColumns()); + .getVisibleStartAndEndIndex(viewport.getAlignment() + .getHiddenColumns() + .getHiddenRegions()); AlignmentExportData ed = new AlignmentExportData(alignmentToExport, omitHidden, alignmentStartEnd, settings); return ed; @@ -1732,7 +1747,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, synchronized void slideSequences(boolean right, int size) { - List sg = new ArrayList(); + List sg = new ArrayList<>(); if (viewport.cursorMode) { sg.add(viewport.getAlignment().getSequenceAt( @@ -1751,7 +1766,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } - List invertGroup = new ArrayList(); + List invertGroup = new ArrayList<>(); for (SequenceI seq : viewport.getAlignment().getSequences()) { @@ -1884,10 +1899,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ArrayList hiddenColumns = null; if (viewport.hasHiddenColumns()) { - hiddenColumns = new ArrayList(); + hiddenColumns = new ArrayList<>(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(), hiddenCutoff = viewport .getSelectionGroup().getEndRes(); - for (int[] region : viewport.getColumnSelection().getHiddenColumns()) + for (int[] region : viewport.getAlignment().getHiddenColumns() + .getHiddenRegions()) { if (region[0] >= hiddenOffset && region[1] <= hiddenCutoff) { @@ -1993,7 +2009,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } int alwidth = 0; - ArrayList newGraphGroups = new ArrayList(); + ArrayList newGraphGroups = new ArrayList<>(); int fgroup = -1; if (newAlignment) @@ -2825,7 +2841,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ protected List getExistingViewNames(List comps) { - List existingNames = new ArrayList(); + List existingNames = new ArrayList<>(); for (Component comp : comps) { if (comp instanceof AlignmentPanel) @@ -3277,7 +3293,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, frame.setContentPane(overview); Desktop.addInternalFrame(frame, MessageManager.formatMessage( "label.overview_params", new Object[] { this.getTitle() }), - frame.getWidth(), frame.getHeight()); + true, frame.getWidth(), frame.getHeight(), true, true); frame.pack(); frame.setLayer(JLayeredPane.PALETTE_LAYER); frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() @@ -3546,35 +3562,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void PCAMenuItem_actionPerformed(ActionEvent e) - { - if (((viewport.getSelectionGroup() != null) - && (viewport.getSelectionGroup().getSize() < 4) && (viewport - .getSelectionGroup().getSize() > 0)) - || (viewport.getAlignment().getHeight() < 4)) - { - JvOptionPane - .showInternalMessageDialog( - this, - MessageManager - .getString("label.principal_component_analysis_must_take_least_four_input_sequences"), - MessageManager - .getString("label.sequence_selection_insufficient"), - JvOptionPane.WARNING_MESSAGE); - - return; - } - - new PCAPanel(alignPanel); - } - @Override public void autoCalculate_actionPerformed(ActionEvent e) { @@ -3603,32 +3590,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param type * tree type (NJ or AV) - * @param sm - * distance or similarity score model used to compute the tree + * @param modelName + * name of score model used to compute the tree * @param options * parameters for the distance or similarity calculation */ - void newTreePanel(String type, ScoreModelI sm, SimilarityParamsI options) + void newTreePanel(String type, String modelName, SimilarityParamsI options) { String frameTitle = ""; TreePanel tp; + boolean onSelection = false; if (viewport.getSelectionGroup() != null && viewport.getSelectionGroup().getSize() > 0) { - if (viewport.getSelectionGroup().getSize() < 3) - { - JvOptionPane - .showMessageDialog( - Desktop.desktop, - MessageManager - .getString("label.you_need_more_two_sequences_selected_build_tree"), - MessageManager - .getString("label.not_enough_sequences"), - JvOptionPane.WARNING_MESSAGE); - return; - } - SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ @@ -3648,9 +3623,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } } - - tp = new TreePanel(alignPanel, type, sm, options); - frameTitle = tp.getPanelTitle() + " on region"; + onSelection = true; } else { @@ -3658,11 +3631,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { return; } - - tp = new TreePanel(alignPanel, type, sm, options); - frameTitle = tp.getPanelTitle(); } + tp = new TreePanel(alignPanel, type, modelName, options); + frameTitle = tp.getPanelTitle() + (onSelection ? " on region" : ""); + frameTitle += " from "; if (viewport.viewName != null) @@ -3802,7 +3775,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, List comps = PaintRefresher.components.get(viewport .getSequenceSetId()); - List treePanels = new ArrayList(); + List treePanels = new ArrayList<>(); for (Component comp : comps) { if (comp instanceof TreePanel) @@ -4062,7 +4035,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { - final List legacyItems = new ArrayList(); + final List legacyItems = new ArrayList<>(); try { // System.err.println("Building ws menu again " @@ -4077,7 +4050,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // TODO: group services by location as well as function and/or // introduce // object broker mechanism. - final Vector wsmenu = new Vector(); + final Vector wsmenu = new Vector<>(); final IProgressIndicator af = me; /* @@ -4445,8 +4418,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // Java's Transferable for native dnd evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = evt.getTransferable(); - List files = new ArrayList(); - List protocols = new ArrayList(); + List files = new ArrayList<>(); + List protocols = new ArrayList<>(); try { @@ -4466,8 +4439,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Object[] { String,SequenceI} */ - ArrayList filesmatched = new ArrayList(); - ArrayList filesnotmatched = new ArrayList(); + ArrayList filesmatched = new ArrayList<>(); + ArrayList filesnotmatched = new ArrayList<>(); for (int i = 0; i < files.size(); i++) { String file = files.get(i).toString(); @@ -4691,6 +4664,176 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, "label.successfully_loaded_matrix", sm.getMatrixName())); } + else if (FileFormat.HMMER3.equals(format)) + { + HMMFile hmmFile = new HMMFile(new FileParse(file, sourceType)); // TODO + // need + // to + // follow + // standard + // pipeline + hmmFile.parse(); + HiddenMarkovModel hmm = hmmFile.getHMM(); + AlignmentAnnotation annotation = hmm.createAnnotation( + getViewport().getAlignment().getWidth()); + getViewport().getAlignment().addAnnotation(annotation); + annotation.setHMM(hmm); + isAnnotation = true; + + BufferedReader input = new BufferedReader(new FileReader( + "H:/Desktop/Distributions/BadAlignment-8.csv")); + String line = input.readLine(); + + while (!("".equals(line)) && line != null) + { + Scanner scanner = new Scanner(line); + if (scanner.hasNext()) + { + scanner.useDelimiter(","); + String value = scanner.next(); + + distribution.put(value, scanner.nextFloat()); + line = input.readLine(); + } + } + + + AlignmentI alignment = getViewport().getAlignment(); + Integer alpha = 0; + final int AMINO = 0; + final int DNA = 1; + final int RNA = 2; + if ("amino".equals(hmm.getAlphabetType())) + { + alpha = AMINO; + } + else if ("DNA".equals(hmm.getAlphabetType())) + { + alpha = DNA; + } + else if ("RNA".equals(hmm.getAlphabetType())) + { + alpha = RNA; + } + + + int size = 0; + + for (int l = 1; l < hmm.getLength() + 1; l++) + { + for (int n = 0; n < alignment.getHeight(); n++) + { + + char character = alignment.getSequenceAt(n) + .getCharAt(hmm.getNodeAlignmentColumn(l)); + character = Character.toUpperCase(character); + + boolean containedD; + boolean containedR; + boolean containedA; + + containedD = ResidueProperties.dnaBackgroundFrequencies + .containsKey(character); + containedA = ResidueProperties.aminoBackgroundFrequencies + .containsKey(character); + containedR = ResidueProperties.rnaBackgroundFrequencies + .containsKey(character); + + if (!Comparison.isGap(character) + && ((alpha == DNA && containedD) + || (alpha == AMINO && containedA))) + { + size++; + } + + } + } + + for (int l = 1; l < hmm.getLength() + 1; l++) + { + for (int n = 0; n < alignment.getHeight(); n++) + { + Double prob; + char character; + character = alignment.getSequenceAt(n) + .getCharAt(hmm.getNodeAlignmentColumn(l)); + character = Character.toUpperCase(character); + boolean containedN; + boolean containedA; + boolean containedR; + + containedN = ResidueProperties.dnaBackgroundFrequencies + .containsKey(character); + containedA = ResidueProperties.aminoBackgroundFrequencies + .containsKey(character); + containedR = ResidueProperties.rnaBackgroundFrequencies + .containsKey(character); + + if (!Comparison.isGap(character) + && ((alpha == DNA && containedN) + || (alpha == AMINO && containedA))) + { + prob = hmm.getMatchEmissionProbability( + hmm.getNodeAlignmentColumn(l), character); + if (prob == 0d) + { + System.out.println("?"); + } + + double freq = 0; + if (alpha == AMINO) + { + freq = ResidueProperties.aminoBackgroundFrequencies + .get(character); + } + if (alpha == DNA) + { + freq = ResidueProperties.dnaBackgroundFrequencies + .get(character); + } + if (alpha == RNA) + { + freq = ResidueProperties.rnaBackgroundFrequencies + .get(character); + } + Double doubleValue = Math.log(prob / freq); + + String value = String.format("%.1f", doubleValue); + if ("-0.0".equals(value)) + { + value = "0.0"; + } + if (distribution.containsKey(value)) + { + float prev = distribution.get(value); + prev = prev + (10000f / size); + distribution.put(value, prev); + } + else + { + distribution.put(value, 10000f / size); + } + + + } + + } + } + + PrintWriter writer = new PrintWriter( + new File( + "H:/Desktop/Distributions/BadAlignment-8.csv")); + for (Map.Entry entry : distribution + .entrySet()) + { + writer.println(entry.getKey() + "," + entry.getValue()); + + } + + writer.close(); + + + } else if (FileFormat.Jnet.equals(format)) { JPredFile predictions = new JPredFile(file, sourceType); @@ -4699,9 +4842,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, viewport.getAlignment(), 0, false); SequenceI repseq = viewport.getAlignment().getSequenceAt(0); viewport.getAlignment().setSeqrep(repseq); - ColumnSelection cs = new ColumnSelection(); + HiddenColumns cs = new HiddenColumns(); cs.hideInsertionsFor(repseq); - viewport.setColumnSelection(cs); + viewport.getAlignment().setHiddenColumns(cs); isAnnotation = true; } // else if (IdentifyFile.FeaturesFile.equals(format)) @@ -5309,6 +5452,30 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override + protected void showInformationHistogram_actionPerformed(ActionEvent e) + { + viewport.setShowInformationHistogram( + showInformationHistogram.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void showHMMSequenceLogo_actionPerformed(ActionEvent e) + { + viewport.setShowHMMSequenceLogo(showHMMSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void normaliseHMMSequenceLogo_actionPerformed(ActionEvent e) + { + showHMMSequenceLogo.setState(true); + viewport.setShowHMMSequenceLogo(true); + viewport.setNormaliseHMMSequenceLogo(normaliseSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e) { alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); @@ -5458,7 +5625,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { return; } - List cdnaSeqs = new ArrayList(); + List cdnaSeqs = new ArrayList<>(); for (SequenceI aaSeq : alignment.getSequences()) { for (AlignedCodonFrame acf : mappings)