X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FStockholmFile.java;h=d67448583da70cd393e26069701ec22d933631a8;hb=94ca0419cc7afa75b3c51917a8beaf46a7c05540;hp=c8c9c8a990c267141f4dbdac6604fd80adc7f1cd;hpb=9d2408483e451285fd555c3cd6e0273977acbaa7;p=jalview.git diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index c8c9c8a..d674485 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -23,8 +23,6 @@ */ package jalview.io; -import java.util.Locale; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -33,6 +31,7 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Vector; @@ -57,8 +56,6 @@ import jalview.util.DBRefUtils; import jalview.util.Format; import jalview.util.MessageManager; -// import org.apache.log4j.*; - /** * This class is supposed to parse a Stockholm format file into Jalview There * are TODOs in this class: we do not know what the database source and version @@ -79,20 +76,21 @@ public class StockholmFile extends AlignFile { private static final String ANNOTATION = "annotation"; -// private static final Regex OPEN_PAREN = new Regex("(<|\\[)", "("); -// -// private static final Regex CLOSE_PAREN = new Regex("(>|\\])", ")"); + // private static final Regex OPEN_PAREN = new Regex("(<|\\[)", "("); + // + // private static final Regex CLOSE_PAREN = new Regex("(>|\\])", ")"); public static final Regex DETECT_BRACKETS = new Regex( "(<|>|\\[|\\]|\\(|\\)|\\{|\\})"); - // WUSS extended symbols. Avoid ambiguity with protein SS annotations by using NOT_RNASS first. + // WUSS extended symbols. Avoid ambiguity with protein SS annotations by using + // NOT_RNASS first. public static final String RNASS_BRACKETS = "<>[](){}AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; // use the following regex to decide an annotations (whole) line is NOT an RNA // SS (it contains only E,H,e,h and other non-brace/non-alpha chars) private static final Regex NOT_RNASS = new Regex( - "^[^<>[\\](){}A-DF-Za-df-z]*$"); + "^[^<>[\\](){}ADFJ-RUVWYZadfj-ruvwyz]*$"); StringBuffer out; // output buffer @@ -149,19 +147,19 @@ public class StockholmFile extends AlignFile + umcp.getMessage() + ")"; throw new IOException(umcp); } - // DEBUG System.out.println("this is the secondary scructure:" + // DEBUG jalview.bin.Console.outPrintln("this is the secondary scructure:" // +result.size()); SequenceI[] seqs = new SequenceI[result.size()]; String id = null; for (int i = 0; i < result.size(); i++) { - // DEBUG System.err.println("Processing i'th sequence in Stockholm file") + // DEBUG jalview.bin.Console.errPrintln("Processing i'th sequence in Stockholm file") RNA current = result.get(i); String seq = current.getSeq(); String rna = current.getStructDBN(true); - // DEBUG System.out.println(seq); - // DEBUG System.err.println(rna); + // DEBUG jalview.bin.Console.outPrintln(seq); + // DEBUG jalview.bin.Console.errPrintln(rna); int begin = 0; int end = seq.length() - 1; id = safeName(getDataName()); @@ -220,8 +218,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") + + " (" + r + ")"); } else { @@ -242,8 +241,8 @@ public class StockholmFile extends AlignFile Regex openparen = new Regex("(<|\\[)", "("); Regex closeparen = new Regex("(>|\\])", ")"); -// // Detect if file is RNA by looking for bracket types -// Regex detectbrackets = new Regex("(<|>|\\[|\\]|\\(|\\))"); + // // Detect if file is RNA by looking for bracket types + // Regex detectbrackets = new Regex("(<|>|\\[|\\]|\\(|\\))"); rend.optimize(); p.optimize(); @@ -339,7 +338,8 @@ public class StockholmFile extends AlignFile if (dbr != null) { // we could get very clever here - but for now - just try to - // guess accession type from type of sequence, source of alignment plus + // guess accession type from type of sequence, source of alignment + // plus // structure // of accession guessDatabaseFor(seqO, dbr, dbsource); @@ -441,7 +441,7 @@ public class StockholmFile extends AlignFile } else if (!r.search(line)) { - // System.err.println("Found sequence line: " + line); + // jalview.bin.Console.errPrintln("Found sequence line: " + line); // Split sequence in sequence and accession parts if (!x.search(line)) @@ -465,7 +465,7 @@ public class StockholmFile extends AlignFile String annType = r.stringMatched(1); String annContent = r.stringMatched(2); - // System.err.println("type:" + annType + " content: " + annContent); + // jalview.bin.Console.errPrintln("type:" + annType + " content: " + annContent); if (annType.equals("GF")) { @@ -527,8 +527,10 @@ public class StockholmFile extends AlignFile treeName = an.stringMatched(2); treeString = new StringBuffer(); } - // TODO: JAL-3532 - this is where GF comments and database references are lost - // suggest overriding this method for Stockholm files to catch and properly + // TODO: JAL-3532 - this is where GF comments and database + // references are lost + // suggest overriding this method for Stockholm files to catch and + // properly // process CC, DR etc into multivalued properties setAlignmentProperty(an.stringMatched(1), an.stringMatched(2)); } @@ -565,7 +567,7 @@ public class StockholmFile extends AlignFile else { // throw new IOException("Error parsing " + line); - System.err.println(">> missing annotation: " + line); + jalview.bin.Console.errPrintln(">> missing annotation: " + line); } } else if (annType.equals("GC")) @@ -683,7 +685,7 @@ public class StockholmFile extends AlignFile // } else { - System.err.println( + jalview.bin.Console.errPrintln( "Warning - couldn't parse sequence annotation row line:\n" + line); // throw new IOException("Error parsing " + line); @@ -760,7 +762,8 @@ public class StockholmFile extends AlignFile } if (dbsource == null) { - // make up an origin based on whether the sequence looks like it is nucleotide + // make up an origin based on whether the sequence looks like it is + // nucleotide // or protein dbsource = (seqO.isProtein()) ? "PFAM" : "RFAM"; } @@ -934,7 +937,7 @@ public class StockholmFile extends AlignFile annot.annotations.length); System.arraycopy(els, 0, anns, annot.annotations.length, els.length); annot.annotations = anns; - // System.out.println("else: "); + // jalview.bin.Console.outPrintln("else: "); } return annot; } @@ -944,6 +947,7 @@ public class StockholmFile extends AlignFile return ref.getSource().toString() + " ; " + ref.getAccessionId().toString(); } + @Override public String print(SequenceI[] s, boolean jvSuffix) { @@ -1045,9 +1049,18 @@ public class StockholmFile extends AlignFile } } - // output annotations + // output description and annotations + while (i < slen && (seq = s[i]) != null) { + if (seq.getDescription() != null) + { + // out.append("#=GR "); + out.append(new Format("%-" + maxid + "s").form("#=GS " + + printId(seq, jvSuffix) + " DE " + seq.getDescription())); + out.append(newline); + } + AlignmentAnnotation[] alAnot = seq.getAnnotation(); if (alAnot != null) { @@ -1257,7 +1270,7 @@ public class StockholmFile extends AlignFile { return (String) typeIds.get(id); } - System.err.println( + jalview.bin.Console.errPrintln( "Warning : Unknown Stockholm annotation type code " + id); return id; } @@ -1279,7 +1292,7 @@ public class StockholmFile extends AlignFile { return key; } - System.err.println( + jalview.bin.Console.errPrintln( "Warning : Unknown Stockholm annotation type: " + type); return key; }