X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FStockholmFile.java;fp=src%2Fjalview%2Fio%2FStockholmFile.java;h=cbd9a38643a870bd1bdcf1647c52581afec8ac8c;hb=c794c5033adeee182b03a5ea92c0a7495a29661f;hp=344c4e1e940f9c295bf35b4f8ef6f34a26b179b6;hpb=3609d4b908fa64cab35f2348401baab3347188fc;p=jalview.git diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index 344c4e1..cbd9a38 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -23,22 +23,6 @@ */ package jalview.io; -import jalview.analysis.Rna; -import jalview.datamodel.AlignmentAnnotation; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.Annotation; -import jalview.datamodel.DBRefEntry; -import jalview.datamodel.DBRefSource; -import jalview.datamodel.Mapping; -import jalview.datamodel.Sequence; -import jalview.datamodel.SequenceFeature; -import jalview.datamodel.SequenceI; -import jalview.schemes.ResidueProperties; -import jalview.util.Comparison; -import jalview.util.DBRefUtils; -import jalview.util.Format; -import jalview.util.MessageManager; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -55,6 +39,21 @@ import com.stevesoft.pat.Regex; import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses; import fr.orsay.lri.varna.factories.RNAFactory; import fr.orsay.lri.varna.models.rna.RNA; +import jalview.analysis.Rna; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Annotation; +import jalview.datamodel.DBRefEntry; +import jalview.datamodel.DBRefSource; +import jalview.datamodel.Mapping; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.schemes.ResidueProperties; +import jalview.util.Comparison; +import jalview.util.DBRefUtils; +import jalview.util.Format; +import jalview.util.MessageManager; // import org.apache.log4j.*; @@ -80,16 +79,6 @@ public class StockholmFile extends AlignFile private static final char UNDERSCORE = '_'; - 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. public static final String RNASS_BRACKETS = "<>[](){}AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; @@ -246,8 +235,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(); @@ -268,7 +257,7 @@ public class StockholmFile extends AlignFile // End of the alignment, pass stuff back this.noSeqs = seqs.size(); - String seqdb, dbsource = null; + String dbsource = null; Regex pf = new Regex("PF[0-9]{5}(.*)"); // Finds AC for Pfam Regex rf = new Regex("RF[0-9]{5}(.*)"); // Finds AC for Rfam if (getAlignmentProperty("AC") != null) @@ -964,34 +953,37 @@ public class StockholmFile extends AlignFile int max = 0; int maxid = 0; int in = 0; - Hashtable dataRef = null; + int slen = s.length; + SequenceI seq; + Hashtable dataRef = null; boolean isAA = s[in].isProtein(); - while ((in < s.length) && (s[in] != null)) + while ((in < slen) && ((seq = s[in]) != null)) { - - String tmp = printId(s[in], jvSuffix); - max = Math.max(max, s[in].getLength()); + String tmp = printId(seq, jvSuffix); + max = Math.max(max, seq.getLength()); if (tmp.length() > maxid) { maxid = tmp.length(); } - if (s[in].getDBRefs() != null) + List seqrefs = seq.getDBRefs(); + int ndb; + if (seqrefs != null && (ndb = seqrefs.size()) > 0) { if (dataRef == null) { - dataRef = new Hashtable(); + dataRef = new Hashtable<>(); } - List primrefs = s[in].getPrimaryDBRefs(); + List primrefs = seq.getPrimaryDBRefs(); if (primrefs.size() >= 1) { dataRef.put(tmp, dbref_to_ac_record(primrefs.get(0))); } else { - for (int idb = 0; idb < s[in].getDBRefs().length; idb++) + for (int idb = 0; idb < seq.getDBRefs().size(); idb++) { - DBRefEntry dbref = s[in].getDBRefs()[idb]; + DBRefEntry dbref = seq.getDBRefs().get(idb); dataRef.put(tmp, dbref_to_ac_record(dbref)); // if we put in a uniprot or EMBL record then we're done: if (isAA && DBRefSource.UNIPROT @@ -1030,11 +1022,11 @@ public class StockholmFile extends AlignFile // output database accessions if (dataRef != null) { - Enumeration en = dataRef.keys(); + Enumeration en = dataRef.keys(); while (en.hasMoreElements()) { Object idd = en.nextElement(); - String type = (String) dataRef.remove(idd); + String type = dataRef.remove(idd); out.append(new Format("%-" + (maxid - 2) + "s") .form("#=GS " + idd.toString() + " ")); if (isAA && type.contains("UNIPROT") @@ -1052,13 +1044,12 @@ public class StockholmFile extends AlignFile } // output annotations - while (i < s.length && s[i] != null) + while (i < slen && (seq = s[i]) != null) { - AlignmentAnnotation[] alAnot = s[i].getAnnotation(); + AlignmentAnnotation[] alAnot = seq.getAnnotation(); if (alAnot != null) { Annotation[] ann; - for (int j = 0; j < alAnot.length; j++) { if (alAnot[j].annotations != null) @@ -1074,7 +1065,6 @@ public class StockholmFile extends AlignFile } if (key == null) { - continue; } @@ -1082,37 +1072,38 @@ public class StockholmFile extends AlignFile out.append(new Format("%-" + maxid + "s").form( "#=GR " + printId(s[i], jvSuffix) + " " + key + " ")); ann = alAnot[j].annotations; - String seq = ""; + String sseq = ""; for (int k = 0; k < ann.length; k++) { - seq += outputCharacter(key, k, isrna, ann, s[i]); + sseq += outputCharacter(key, k, isrna, ann, s[i]); } - out.append(seq); + out.append(sseq); out.append(newline); - } + } } } out.append(new Format("%-" + maxid + "s") - .form(printId(s[i], jvSuffix) + " ")); - out.append(s[i].getSequenceAsString()); + .form(printId(seq, jvSuffix) + " ")); + out.append(seq.getSequenceAsString()); out.append(newline); i++; } // alignment annotation AlignmentAnnotation aa; - if (al.getAlignmentAnnotation() != null) + AlignmentAnnotation[] an = al.getAlignmentAnnotation(); + if (an != null) { - for (int ia = 0; ia < al.getAlignmentAnnotation().length; ia++) + for (int ia = 0, na = an.length; ia < na; ia++) { - aa = al.getAlignmentAnnotation()[ia]; + aa = an[ia]; if (aa.autoCalculated || !aa.visible || aa.sequenceRef != null) { continue; } - String seq = ""; + String sseq = ""; String label; String key = ""; if (aa.label.equals("seq")) @@ -1140,11 +1131,11 @@ public class StockholmFile extends AlignFile out.append( new Format("%-" + maxid + "s").form("#=GC " + label + " ")); boolean isrna = aa.isValidStruc(); - for (int j = 0; j < aa.annotations.length; j++) + for (int j = 0, nj = aa.annotations.length; j < nj; j++) { - seq += outputCharacter(key, j, isrna, aa.annotations, null); + sseq += outputCharacter(key, j, isrna, aa.annotations, null); } - out.append(seq); + out.append(sseq); out.append(newline); } }