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=334d3802ea88e3b21cbbbbdab5688a055b34e789;hpb=96356075a122b745936738f478a8ee33ac7e0f0a;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 334d380..cce4e67 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -87,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; @@ -123,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; @@ -131,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; @@ -154,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; @@ -181,6 +190,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ String fileName = null; + /** * Creates a new AlignFrame object with specific width and height. * @@ -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()); @@ -4666,6 +4679,144 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, 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)) { @@ -5285,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());