X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=cce4e678a3ca34f35367ad1fd85b3e3f4c9f5957;hb=refs%2Fheads%2Ffeatures%2Fhmmer_statistics;hp=4073e3e3e603298f456724545ac6561a52d3f95c;hpb=e54e2eee927260cd650ffe17b1422b29b8b2f122;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 4073e3e..cce4e67 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -54,6 +54,7 @@ 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. * @@ -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()); @@ -1734,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( @@ -1753,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()) { @@ -1886,7 +1899,7 @@ 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.getAlignment().getHiddenColumns() @@ -1996,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) @@ -2828,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) @@ -3280,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() @@ -3762,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) @@ -4022,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 " @@ -4037,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; /* @@ -4405,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 { @@ -4426,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(); @@ -4651,6 +4664,160 @@ 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; + if ("amino".equals(hmm.getAlphabetType())) + { + alpha = AMINO; + } + else if ("DNA".equals(hmm.getAlphabetType())) + { + alpha = DNA; + } + + + 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 containedN; + boolean containedA; + + containedN = ResidueProperties.nucleotideBackgroundFrequencies + .containsKey(character); + containedA = ResidueProperties.aminoBackgroundFrequencies + .containsKey(character); + + if (!Comparison.isGap(character) + && ((alpha == DNA && containedN) + || (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; + + containedN = ResidueProperties.nucleotideBackgroundFrequencies + .containsKey(character); + containedA = ResidueProperties.aminoBackgroundFrequencies + .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.nucleotideBackgroundFrequencies + .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); @@ -5269,6 +5436,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()); @@ -5418,7 +5609,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)