X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAAFrequency.java;h=6bdffe197053b0d324eafd00e0b735fb8ef4d7b3;hb=cd8f0eb5083ecbb73bde4b87c45e0d4286998ab9;hp=5ecd64426cd87203db003444d9d7f556ba35e6d8;hpb=a5ddd79bb9c1fcc97ffbe01e9e5ed8caa5d7b435;p=jalview.git diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index 5ecd644..6bdffe1 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -20,12 +20,15 @@ */ package jalview.analysis; -import jalview.analysis.ResidueCount.SymbolCounts; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; +import jalview.datamodel.Profile; +import jalview.datamodel.ProfileI; +import jalview.datamodel.ResidueCount; import jalview.datamodel.SequenceI; +import jalview.datamodel.ResidueCount.SymbolCounts; import jalview.ext.android.SparseIntArray; import jalview.util.Comparison; import jalview.util.Format; @@ -47,18 +50,8 @@ import java.util.List; */ public class AAFrequency { - public static final String MAXCOUNT = "C"; - - public static final String MAXRESIDUE = "R"; - - public static final String PID_GAPS = "G"; - - public static final String PID_NOGAPS = "N"; - public static final String PROFILE = "P"; - public static final String ENCODED_CHARS = "E"; - /* * Quick look-up of String value of char 'A' to 'Z' */ @@ -72,13 +65,13 @@ public class AAFrequency } } - public static final Profile[] calculate(List list, + public static final ProfileI[] calculate(List list, int start, int end) { return calculate(list, start, end, false); } - public static final Profile[] calculate(List sequences, + public static final ProfileI[] calculate(List sequences, int start, int end, boolean profile) { SequenceI[] seqs = new SequenceI[sequences.size()]; @@ -94,7 +87,7 @@ public class AAFrequency } } - Profile[] reply = new Profile[width]; + ProfileI[] reply = new ProfileI[width]; if (end >= width) { @@ -111,14 +104,16 @@ public class AAFrequency * * @param sequences * @param start + * start column (inclusive, base zero) * @param end + * end column (exclusive) * @param result * array in which to store profile per column * @param saveFullProfile * if true, store all symbol counts */ public static final void calculate(final SequenceI[] sequences, - int start, int end, Profile[] result, boolean saveFullProfile) + int start, int end, ProfileI[] result, boolean saveFullProfile) { // long now = System.currentTimeMillis(); int seqCount = sequences.length; @@ -169,8 +164,7 @@ public class AAFrequency else { /* - * here we count a gap if the sequence doesn't - * reach this column (is that correct?) + * count a gap if the sequence doesn't reach this column */ residueCounts.addGap(); } @@ -179,7 +173,7 @@ public class AAFrequency int maxCount = residueCounts.getModalCount(); String maxResidue = residueCounts.getResiduesForCount(maxCount); int gapCount = residueCounts.getGapCount(); - Profile profile = new Profile(seqCount, gapCount, maxCount, + ProfileI profile = new Profile(seqCount, gapCount, maxCount, maxResidue); if (saveFullProfile) @@ -220,8 +214,8 @@ public class AAFrequency /** * Derive the consensus annotations to be added to the alignment for display. * This does not recompute the raw data, but may be called on a change in - * display options, such as 'show logo', which may in turn result in a change - * in the derived values. + * display options, such as 'ignore gaps', which may in turn result in a + * change in the derived values. * * @param consensus * the annotation row to add annotations to @@ -240,7 +234,7 @@ public class AAFrequency * number of sequences */ public static void completeConsensus(AlignmentAnnotation consensus, - Profile[] profiles, int iStart, int width, boolean ignoreGaps, + ProfileI[] profiles, int iStart, int width, boolean ignoreGaps, boolean showSequenceLogo, long nseq) { // long now = System.currentTimeMillis(); @@ -258,7 +252,7 @@ public class AAFrequency for (int i = iStart; i < width; i++) { - Profile profile; + ProfileI profile; if (i >= profiles.length || ((profile = profiles[i]) == null)) { /* @@ -274,7 +268,16 @@ public class AAFrequency String description = getTooltip(profile, value, showSequenceLogo, ignoreGaps, dp); - consensus.annotations[i] = new Annotation(profile.getModalResidue(), + String modalResidue = profile.getModalResidue(); + if ("".equals(modalResidue)) + { + modalResidue = "-"; + } + else if (modalResidue.length() > 1) + { + modalResidue = "+"; + } + consensus.annotations[i] = new Annotation(modalResidue, description, ' ', value); } // long elapsed = System.currentTimeMillis() - now; @@ -299,7 +302,7 @@ public class AAFrequency * the number of decimal places to format percentages to * @return */ - static String getTooltip(Profile profile, float pid, + static String getTooltip(ProfileI profile, float pid, boolean showSequenceLogo, boolean ignoreGaps, int dp) { ResidueCount counts = profile.getCounts(); @@ -317,15 +320,18 @@ public class AAFrequency String maxRes = profile.getModalResidue(); if (maxRes.length() > 1) { - sb.append("[").append(maxRes).append("] "); - maxRes = "+"; + sb.append("[").append(maxRes).append("]"); } else { - sb.append(maxRes).append(" "); + sb.append(maxRes); + } + if (maxRes.length() > 0) + { + sb.append(" "); + Format.appendPercentage(sb, pid, dp); + sb.append("%"); } - Format.appendPercentage(sb, pid, dp); - sb.append("%"); description = sb.toString(); } return description; @@ -347,7 +353,7 @@ public class AAFrequency * calculations * @return */ - public static int[] extractProfile(Profile profile, + public static int[] extractProfile(ProfileI profile, boolean ignoreGaps) { int[] rtnval = new int[64];