X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FStockholmFile.java;h=2f5263b2662295c23b011a3831cbe90666568eb7;hb=838e4f91d4a53dd315640dbc9ff6ef7a815ee576;hp=85f945556d620e0c0a7be6be6fc8eb8adf5288de;hpb=464f98709ffcb68683bff35d7a0e4cdc99fc5daf;p=jalview.git diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index 85f9455..2f5263b 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -420,8 +420,8 @@ public class StockholmFile extends AlignFile { // logger.error("Could not parse sequence line: " + line); throw new IOException(MessageManager.formatMessage( - "exception.couldnt_parse_sequence_line", new String[] - { line })); + "exception.couldnt_parse_sequence_line", + new String[] { line })); } String ns = seqs.get(x.stringMatched(1)); if (ns == null) @@ -533,9 +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 })); + System.err.println(">> missing annotation: " + line); } } else if (annType.equals("GC")) @@ -665,8 +665,8 @@ public class StockholmFile extends AlignFile else { throw new IOException(MessageManager.formatMessage( - "exception.unknown_annotation_detected", new String[] - { annType, annContent })); + "exception.unknown_annotation_detected", new String[] { + annType, annContent })); } } } @@ -779,9 +779,8 @@ public class StockholmFile extends AlignFile { for (DBRefEntry d : dbrs) { - jalview.util.MapList mp = new jalview.util.MapList(new int[] - { seqO.getStart(), seqO.getEnd() }, new int[] - { st, en }, 1, 1); + jalview.util.MapList mp = new jalview.util.MapList(new int[] { + seqO.getStart(), seqO.getEnd() }, new int[] { st, en }, 1, 1); jalview.datamodel.Mapping mping = new Mapping(mp); d.setMap(mping); } @@ -826,25 +825,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; @@ -974,6 +977,7 @@ public class StockholmFile extends AlignFile { feature = ds.getSequenceFeatures()[0].type; } + // ?bug - feature may still have previous loop value String key = type2id(feature); if (key == null) @@ -985,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); @@ -1032,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); @@ -1088,6 +1057,55 @@ 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();