*/
package jalview.analysis;
-import java.util.*;
-
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceI;
import jalview.util.Format;
-import jalview.datamodel.*;
+
+import java.util.Hashtable;
+import java.util.List;
/**
* Takes in a vector or array of sequences and column start and column end and
*/
public class AAFrequency
{
- // No need to store 1000s of strings which are not
- // visible to the user.
+ private static final int TO_UPPER_CASE = 'A' - 'a'; // -32
+
public static final String MAXCOUNT = "C";
public static final String MAXRESIDUE = "R";
public static final String PROFILE = "P";
+ /*
+ * Quick look-up of String value of char 'A' to 'Z'
+ */
+ private static final String[] CHARS = new String['Z' - 'A' + 1];
+
+ static
+ {
+ for (char c = 'A'; c <= 'Z'; c++)
+ {
+ CHARS[c - 'A'] = String.valueOf(c);
+ }
+ }
+
public static final Hashtable[] calculate(List<SequenceI> list,
int start, int end)
{
}
public static final void calculate(SequenceI[] sequences, int start,
- int end, Hashtable[] result)
- {
- calculate(sequences, start, end, result, false);
- }
-
- public static final void calculate(SequenceI[] sequences, int start,
int end, Hashtable[] result, boolean profile)
{
Hashtable residueHash;
- int maxCount, nongap, i, j, v, jSize = sequences.length;
+ int maxCount, nongap, i, j, v;
+ int jSize = sequences.length;
String maxResidue;
char c = '-';
float percentage;
}
else if ('a' <= c && c <= 'z')
{
- c -= 32; // ('a' - 'A');
+ c += TO_UPPER_CASE;
}
nongap++;
}
else
{
- for (v = 'A'; v < 'Z'; v++)
+ for (v = 'A'; v <= 'Z'; v++)
{
if (values[v] < 2 || values[v] < maxCount)
{
if (values[v] > maxCount)
{
- maxResidue = String.valueOf((char) v);
+ maxResidue = CHARS[v - 'A'];
}
else if (values[v] == maxCount)
{
- maxResidue += String.valueOf((char) v);
+ maxResidue += CHARS[v - 'A'];
}
maxCount = values[v];
}
{
completeConsensus(consensus, hconsensus, iStart, width,
ignoreGapsInConsensusCalculation, includeAllConsSymbols, null,
- nseq); // new
- // char[]
- // { 'A', 'C', 'G', 'T', 'U' });
+ nseq);
}
public static void completeConsensus(AlignmentAnnotation consensus,
int[] rtnval = new int[64];
int[][] profile = (int[][]) hconsensus.get(AAFrequency.PROFILE);
if (profile == null)
+ {
return null;
- Object[] ca = new Object[profile[0].length];
+ }
+ char[][] ca = new char[profile[0].length][];
float[] vl = new float[profile[0].length];
for (int c = 0; c < ca.length; c++)
{
{ (char) c };
vl[c] = profile[0][c];
}
- ;
jalview.util.QuickSort.sort(vl, ca);
rtnval[0] = 2;
rtnval[1] = 0;
- for (int c = ca.length - 1; profile[0][((char[]) ca[c])[0]] > 0; c--)
+ for (int c = ca.length - 1; profile[0][ca[c][0]] > 0; c--)
{
- if (((char[]) ca[c])[0] != '-')
+ if (ca[c][0] != '-')
{
- rtnval[rtnval[0]++] = ((char[]) ca[c])[0];
- rtnval[rtnval[0]] = (int) (profile[0][((char[]) ca[c])[0]] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1
+ rtnval[rtnval[0]++] = ca[c][0];
+ rtnval[rtnval[0]] = (int) (profile[0][ca[c][0]] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1
: 0]);
rtnval[1] += rtnval[rtnval[0]++];
}