X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FStructureFrequency.java;h=1342bb273760f0efc2524e1d3e2840ddf30b2f9c;hb=ce93212014c116c4c516c6dc85c5032449d311eb;hp=479c8562dbe7fecc5f17b101f0ccdf793dabba7f;hpb=5c5161b61d3dc11a22c10fc176f0f967ed40bf52;p=jalview.git diff --git a/src/jalview/analysis/StructureFrequency.java b/src/jalview/analysis/StructureFrequency.java index 479c8562..1342bb2 100644 --- a/src/jalview/analysis/StructureFrequency.java +++ b/src/jalview/analysis/StructureFrequency.java @@ -112,8 +112,9 @@ public class StructureFrequency 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]; @@ -148,8 +149,8 @@ public class StructureFrequency { 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; } @@ -161,7 +162,7 @@ public class StructureFrequency values['-']++; continue; } - + nongap++; /* * ensure upper-case for counting purposes */ @@ -175,32 +176,34 @@ public class StructureFrequency } 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); } - + 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) @@ -208,22 +211,31 @@ public class StructureFrequency int count = canonicalOrWobblePairCount; /* - * currently displaying as '(' if most pairs are valid, or as - * '[' if there are more invalid than valid pairs + * display '(' if most pairs are canonical, or as + * '[' if there are more wobble pairs. */ - if (!maxResidue.equals("-")) + 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(MAXCOUNT, Integer.valueOf(count)); residueHash.put(MAXRESIDUE, maxResidue); percentage = ((float) count * 100) / jSize; - residueHash.put(PID_GAPS, new Float(percentage)); + residueHash.put(PID_GAPS, Float.valueOf(percentage)); + + percentage = ((float) count * 100) / nongap; + residueHash.put(PID_NOGAPS, Float.valueOf(percentage)); - // percentage = ((float) count * 100) / (float) nongap; - // residueHash.put(PID_NOGAPS, new Float(percentage)); if (result[i] == null) { result[i] = residueHash; @@ -232,24 +244,31 @@ public class StructureFrequency { 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); } - residueHash.put(MAXCOUNT, new Integer(count)); + residueHash.put(MAXCOUNT, Integer.valueOf(count)); residueHash.put(MAXRESIDUE, maxResidue); percentage = ((float) count * 100) / jSize; - residueHash.put(PID_GAPS, new Float(percentage)); + residueHash.put(PID_GAPS, Float.valueOf(percentage)); + + percentage = ((float) count * 100) / nongap; + residueHash.put(PID_NOGAPS, Float.valueOf(percentage)); result[bpEnd] = residueHash; } @@ -428,7 +447,8 @@ public class StructureFrequency 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)