import jalview.datamodel.Annotation;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.util.Comparison;
import jalview.util.Format;
import java.util.ArrayList;
for (int i = start; i < end; i++) // foreach column
{
- int canonicalOrWobblePairCount = 0;
+ int canonicalOrWobblePairCount = 0, canonical = 0;
int otherPairCount = 0;
+ int nongap = 0;
maxResidue = "-";
values = new int[255];
pairs = new int[255][255];
{
if (sequences[j] == null)
{
- System.err
- .println("WARNING: Consensus skipping null sequence - possible race condition.");
+ System.err.println(
+ "WARNING: Consensus skipping null sequence - possible race condition.");
continue;
}
- c = sequences[j].getCharAt(i);
- // standard representation for gaps in sequence and structure
- if (c == '.' || c == ' ')
- {
- c = '-';
- }
+ c = sequences[j].getCharAt(i);
+ cEnd = sequences[j].getCharAt(bpEnd);
- if (c == '-')
+ if (Comparison.isGap(c) || Comparison.isGap(cEnd))
{
values['-']++;
continue;
}
- cEnd = sequences[j].getCharAt(bpEnd);
-
+ nongap++;
/*
* ensure upper-case for counting purposes
*/
}
if (Rna.isCanonicalOrWobblePair(c, cEnd))
{
- values['(']++;
- maxResidue = "(";
canonicalOrWobblePairCount++;
+ if (Rna.isCanonicalPair(c, cEnd))
+ {
+ canonical++;
+ }
}
else
{
- values['[']++;
- maxResidue = "[";
otherPairCount++;
}
pairs[c][cEnd]++;
}
}
- // nonGap++;
}
residueHash = new Hashtable();
if (profile)
{
// TODO 1-dim array with jsize in [0], nongapped in [1]; or Pojo
- residueHash.put(PROFILE, new int[][] { values,
- new int[] { jSize, (jSize - values['-']) } });
+ residueHash.put(PROFILE,
+ new int[][]
+ { values, new int[] { jSize, (jSize - values['-']) } });
residueHash.put(PAIRPROFILE, pairs);
}
- int count = Math.max(canonicalOrWobblePairCount, otherPairCount);
- if (!maxResidue.equals("-"))
+ values['('] = canonicalOrWobblePairCount;
+ values['['] = canonical;
+ values['{'] = otherPairCount;
+ /*
+ * the count is the number of valid pairs (as a percentage, determines
+ * the relative size of the profile logo)
+ */
+ int count = canonicalOrWobblePairCount;
+
+ /*
+ * display '(' if most pairs are canonical, or as
+ * '[' if there are more wobble pairs.
+ */
+ if (canonicalOrWobblePairCount > 0 || otherPairCount > 0)
{
- maxResidue = canonicalOrWobblePairCount >= otherPairCount ? "("
- : "[";
+ if (canonicalOrWobblePairCount >= otherPairCount)
+ {
+ maxResidue = (canonicalOrWobblePairCount - canonical) < canonical
+ ? "("
+ : "[";
+ }
+ else
+ {
+ maxResidue = "{";
+ }
}
residueHash.put(MAXCOUNT, new Integer(count));
residueHash.put(MAXRESIDUE, maxResidue);
percentage = ((float) count * 100) / jSize;
residueHash.put(PID_GAPS, new Float(percentage));
- // percentage = ((float) count * 100) / (float) nongap;
- // residueHash.put(PID_NOGAPS, new Float(percentage));
+ percentage = ((float) count * 100) / nongap;
+ residueHash.put(PID_NOGAPS, new Float(percentage));
+
if (result[i] == null)
{
result[i] = residueHash;
{
values[')'] = values['('];
values[']'] = values['['];
+ values['}'] = values['{'];
values['('] = 0;
values['['] = 0;
- maxResidue = maxResidue.equals("(") ? ")" : "]";
+ values['{'] = 0;
+ maxResidue = maxResidue.equals("(") ? ")"
+ : maxResidue.equals("[") ? "]" : "}";
residueHash = new Hashtable();
if (profile)
{
- residueHash.put(PROFILE, new int[][] { values,
- new int[] { jSize, (jSize - values['-']) } });
+ residueHash.put(PROFILE,
+ new int[][]
+ { values, new int[] { jSize, (jSize - values['-']) } });
residueHash.put(PAIRPROFILE, pairs);
}
percentage = ((float) count * 100) / jSize;
residueHash.put(PID_GAPS, new Float(percentage));
+ percentage = ((float) count * 100) / nongap;
+ residueHash.put(PID_NOGAPS, new Float(percentage));
+
result[bpEnd] = residueHash;
}
}
int valuesCount = 0;
rtnval[1] = 0;
int offset = 2;
- final int divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
+ final int divisor = profile[1][ignoreGapsInConsensusCalculation ? 1
+ : 0];
for (int c = 624; c > 0; c--)
{
if (vl[c] > 0)