X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FStockholmFile.java;h=3b9fb00576d87eb6704d52cba4d66c18616c8695;hb=b5d61763044c1d72f06ce0e50da2171422a3774b;hp=c546930c73162402dc42511e6d7598704800fa18;hpb=77924f33d569a50bf5229b5ecc6504dbe823a9fa;p=jalview.git diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index c546930..3b9fb00 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -199,7 +199,9 @@ public class StockholmFile extends AlignFile r = new Regex("# STOCKHOLM ([\\d\\.]+)"); if (!r.search(nextLine())) { - throw new IOException(MessageManager.getString("exception.stockholm_invalid_format")); + throw new IOException( + MessageManager + .getString("exception.stockholm_invalid_format")); } else { @@ -417,9 +419,11 @@ public class StockholmFile extends AlignFile if (!x.search(line)) { // logger.error("Could not parse sequence line: " + line); - throw new IOException(MessageManager.formatMessage("exception.couldnt_parse_sequence_line", new String[]{line})); + throw new IOException(MessageManager.formatMessage( + "exception.couldnt_parse_sequence_line", new String[] + { line })); } - String ns = (String) seqs.get(x.stringMatched(1)); + String ns = seqs.get(x.stringMatched(1)); if (ns == null) { ns = ""; @@ -529,7 +533,9 @@ public class StockholmFile extends AlignFile } else { - throw new IOException(MessageManager.formatMessage("exception.error_parsing_line", new String[]{line})); + throw new IOException(MessageManager.formatMessage( + "exception.error_parsing_line", new String[] + { line })); } } else if (annType.equals("GC")) @@ -658,7 +664,9 @@ public class StockholmFile extends AlignFile } else { - throw new IOException(MessageManager.formatMessage("exception.unknown_annotation_detected", new String[]{annType,annContent})); + throw new IOException(MessageManager.formatMessage( + "exception.unknown_annotation_detected", new String[] + { annType, annContent })); } } } @@ -818,25 +826,29 @@ public class StockholmFile extends AlignFile // be written out if (ss) { - if (detectbrackets.search(pos)) + //if (" .-_".indexOf(pos) == -1) { - ann.secondaryStructure = jalview.schemes.ResidueProperties - .getRNASecStrucState(pos).charAt(0); - } - else - { - ann.secondaryStructure = jalview.schemes.ResidueProperties - .getDssp3state(pos).charAt(0); - } + if (detectbrackets.search(pos)) + { + ann.secondaryStructure = jalview.schemes.ResidueProperties + .getRNASecStrucState(pos).charAt(0); + } + else + { + ann.secondaryStructure = jalview.schemes.ResidueProperties + .getDssp3state(pos).charAt(0); + } - if (ann.secondaryStructure == pos.charAt(0) || pos.charAt(0) == 'C') - { - ann.displayCharacter = ""; // null; // " "; - } - else - { - ann.displayCharacter = " " + ann.displayCharacter; + if (ann.secondaryStructure == pos.charAt(0)) + { + ann.displayCharacter = ""; // null; // " "; + } + else + { + ann.displayCharacter = " " + ann.displayCharacter; + } } + } els[i] = ann; @@ -977,33 +989,11 @@ public class StockholmFile extends AlignFile out.append(new Format("%-" + maxid + "s").form("#=GR " + printId(s[i]) + " " + key + " ")); ann = alAnot[j].annotations; + boolean isrna = alAnot[j].isValidStruc(); String seq = ""; for (int k = 0; k < ann.length; k++) { - annot = ann[k]; - String ch = (annot == null) ? Character.toString(s[i] - .getCharAt(k)) : annot.displayCharacter; - if (ch.length() == 0) - { - if (key.equals("SS")) - { - char ll = annot.secondaryStructure; - seq = (Character.toString(ll).equals(" ")) ? seq + "C" - : seq + ll; - } - else - { - seq += "."; - } - } - else if (ch.length() == 1) - { - seq += ch; - } - else if (ch.length() > 1) - { - seq += ch.charAt(1); - } + seq += outputCharacter(key, k, isrna, ann, s[i]); } out.append(seq); out.append(newline); @@ -1024,54 +1014,41 @@ public class StockholmFile extends AlignFile for (int ia = 0; ia < al.getAlignmentAnnotation().length; ia++) { aa = al.getAlignmentAnnotation()[ia]; - if (aa.autoCalculated || !aa.visible) + if (aa.autoCalculated || !aa.visible || aa.sequenceRef != null) { continue; } String seq = ""; String label; - + String key = ""; if (aa.label.equals("seq")) { label = "seq_cons"; } else { - label = type2id(aa.label.toLowerCase()) + "_cons"; + key = type2id(aa.label.toLowerCase()); + if (key == null) + { + label = aa.label; + } + else + { + label = key + "_cons"; + } } - if (label == null) { label = aa.label; } + label = label.replace(" ", "_"); out.append(new Format("%-" + maxid + "s").form("#=GC " + label + " ")); boolean isrna = aa.isValidStruc(); for (int j = 0; j < aa.annotations.length; j++) { - String ch = (aa.annotations[j] == null) ? "-" - : aa.annotations[j].displayCharacter; - if (ch.length() == 0 || isrna) - { - char ll = aa.annotations[j].secondaryStructure; - if (Character.toString(ll).equals(" ")) - { - seq += "C"; - } - else - { - seq += ll; - } - } - else if (ch.length() == 1) - { - seq += ch; - } - else if (ch.length() > 1) - { - seq += ch.charAt(1); - } + seq += outputCharacter(key, j, isrna, aa.annotations, null); } out.append(seq); out.append(newline); @@ -1080,6 +1057,57 @@ public class StockholmFile extends AlignFile return out.toString(); } + /** + * add an annotation character to the output row + * + * @param seq + * @param key + * @param k + * @param isrna + * @param ann + * @param sequenceI + */ + private char outputCharacter(String key, int k, + boolean isrna, Annotation[] ann, SequenceI sequenceI) + { + char seq = ' '; + Annotation annot = ann[k]; + String ch = (annot == null) ? ((sequenceI == null) ? "-" : Character + .toString(sequenceI.getCharAt(k))) + : annot.displayCharacter; + if (key != null && key.equals("SS")) + { + if (annot == null) + { + // sensible gap character if one is available or make one up + return sequenceI == null ? '-' : sequenceI + .getCharAt(k); + } + else + { + // valid secondary structure AND no alternative label (e.g. ' B') + if (annot.secondaryStructure > ' ' && ch.length() < 2) + { + return annot.secondaryStructure; + } + } + } + + if (ch.length() == 0) + { + seq = '.'; + } + else if (ch.length() == 1) + { + seq = ch.charAt(0); + } + else if (ch.length() > 1) + { + seq = ch.charAt(1); + } + return seq; + } + public String print() { out = new StringBuffer();