X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FStructureFrequency.java;h=cc97be092aeb2ffcc1ab9f98554a96224e879368;hb=4b2392caa53f1de3400e7916d1d9c7b815d446f4;hp=29bdb7a6f673c8bc98ac957776e655e2576000a0;hpb=6b8834d5427d2a2998374b914eab842589c4a1d6;p=jalview.git diff --git a/src/jalview/analysis/StructureFrequency.java b/src/jalview/analysis/StructureFrequency.java index 29bdb7a..cc97be0 100644 --- a/src/jalview/analysis/StructureFrequency.java +++ b/src/jalview/analysis/StructureFrequency.java @@ -27,7 +27,6 @@ import jalview.datamodel.SequenceI; import jalview.util.Comparison; import jalview.util.Format; -import java.util.ArrayList; import java.util.Hashtable; /** @@ -94,11 +93,11 @@ public class StructureFrequency * @param rnaStruc */ public static final void calculate(SequenceI[] sequences, int start, - int end, Hashtable[] result, boolean profile, + int end, Hashtable[] result, boolean profile, AlignmentAnnotation rnaStruc) { - Hashtable residueHash; + Hashtable residueHash; String maxResidue; char[] struc = rnaStruc.getRNAStruc().toCharArray(); @@ -112,7 +111,7 @@ 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 = "-"; @@ -149,8 +148,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; } @@ -176,14 +175,14 @@ public class StructureFrequency } if (Rna.isCanonicalOrWobblePair(c, cEnd)) { - values['(']++; - maxResidue = "("; canonicalOrWobblePairCount++; + if (Rna.isCanonicalPair(c, cEnd)) + { + canonical++; + } } else { - values['[']++; - maxResidue = "["; otherPairCount++; } pairs[c][cEnd]++; @@ -191,16 +190,19 @@ public class StructureFrequency } } - residueHash = new Hashtable(); + 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,13 +210,21 @@ 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(MAXRESIDUE, maxResidue); @@ -233,15 +243,19 @@ 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(); + 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); } @@ -273,7 +287,7 @@ public class StructureFrequency * @param includeAllConsSymbols */ public static void completeConsensus(AlignmentAnnotation consensus, - Hashtable[] hconsensus, int iStart, int width, + Hashtable[] hconsensus, int iStart, int width, boolean ignoreGapsInConsensusCalculation, boolean includeAllConsSymbols, long nseq) { @@ -300,7 +314,7 @@ public class StructureFrequency for (int i = iStart; i < width; i++) { - Hashtable hci; + Hashtable hci; if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) { // happens if sequences calculated over were shorter than alignment @@ -400,7 +414,7 @@ public class StructureFrequency * @param hconsensus * @return profile of the given column */ - public static int[] extractProfile(Hashtable hconsensus, + public static int[] extractProfile(Hashtable hconsensus, boolean ignoreGapsInConsensusCalculation) { int[] rtnval = new int[STRUCTURE_PROFILE_LENGTH]; // 2*(5*5)+2 @@ -432,7 +446,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) @@ -452,23 +467,4 @@ public class StructureFrequency System.arraycopy(rtnval, 0, result, 1, rtnval.length); return result; } - - public static void main(String args[]) - { - // Short test to see if checkBpType works - ArrayList test = new ArrayList(); - test.add("A"); - test.add("c"); - test.add("g"); - test.add("T"); - test.add("U"); - for (String i : test) - { - for (String j : test) - { - System.out.println(i + "-" + j + ": " - + Rna.isCanonicalOrWobblePair(i.charAt(0), j.charAt(0))); - } - } - } }