X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FStructureFrequency.java;h=7b0858d502d70a7a5aac3582478afcc6cea7f1e0;hb=refs%2Fheads%2Ffeatures%2FJAL-2754findFeaturesByColumn;hp=29d02fe6168b562302db186b5f0c3af625db99fa;hpb=0715e493687eeb93d3b3f39cd1ff25e2671ce0e9;p=jalview.git diff --git a/src/jalview/analysis/StructureFrequency.java b/src/jalview/analysis/StructureFrequency.java index 29d02fe..7b0858d 100644 --- a/src/jalview/analysis/StructureFrequency.java +++ b/src/jalview/analysis/StructureFrequency.java @@ -24,6 +24,7 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; +import jalview.util.Comparison; import jalview.util.Format; import java.util.ArrayList; @@ -111,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]; @@ -151,21 +153,16 @@ public class StructureFrequency .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 */ @@ -179,20 +176,19 @@ 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(); @@ -204,11 +200,30 @@ public class StructureFrequency 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); @@ -216,8 +231,9 @@ public class StructureFrequency 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; @@ -226,9 +242,12 @@ 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) @@ -245,6 +264,9 @@ public class StructureFrequency 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; } }