*/
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;
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.*;
{
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(
"(<|>|\\[|\\]|\\(|\\)|\\{|\\})");
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();
// 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)
if (accAnnotations != null && accAnnotations.containsKey("AC"))
{
- if (dbsource != null)
+ String dbr = (String) accAnnotations.get("AC");
+ if (dbr != null)
{
- String dbr = (String) accAnnotations.get("AC");
- if (dbr != null)
- {
- // we could get very clever here - but for now - just try to
- // guess accession type from source of alignment plus structure
- // of accession
- guessDatabaseFor(seqO, dbr, dbsource);
-
- }
+ // we could get very clever here - but for now - just try to
+ // guess accession type from type of sequence, source of alignment plus
+ // structure
+ // of accession
+ guessDatabaseFor(seqO, dbr, dbsource);
}
// else - do what ? add the data anyway and prompt the user to
// specify what references these are ?
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
+ // process CC, DR etc into multivalued properties
setAlignmentProperty(an.stringMatched(1), an.stringMatched(2));
}
}
st = -1;
}
}
+ if (dbsource == null)
+ {
+ // make up an origin based on whether the sequence looks like it is nucleotide
+ // or protein
+ dbsource = (seqO.isProtein()) ? "PFAM" : "RFAM";
+ }
if (dbsource.equals("PFAM"))
{
seqdb = "UNIPROT";
int max = 0;
int maxid = 0;
int in = 0;
- Hashtable dataRef = null;
- while ((in < s.length) && (s[in] != null))
+ int slen = s.length;
+ SequenceI seq;
+ Hashtable<String, String> dataRef = null;
+ boolean isAA = s[in].isProtein();
+ while ((in < slen) && ((seq = s[in]) != null))
{
- boolean isAA = s[in].isProtein();
- 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<DBRefEntry> seqrefs = seq.getDBRefs();
+ int ndb;
+ if (seqrefs != null && (ndb = seqrefs.size()) > 0)
{
if (dataRef == null)
{
- dataRef = new Hashtable();
+ dataRef = new Hashtable<>();
}
- List<DBRefEntry> primrefs = s[in].getPrimaryDBRefs();
+ List<DBRefEntry> 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
// output database accessions
if (dataRef != null)
{
- Enumeration en = dataRef.keys();
+ Enumeration<String> 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 (type.contains("PFAM") || type.contains("RFAM"))
+ if (isAA && type.contains("UNIPROT")
+ || (!isAA && type.contains("EMBL")))
{
out.append(" AC " + type.substring(type.indexOf(";") + 1));
}
// 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++)
+ for (int j = 0, nj = alAnot.length; j < nj; j++)
{
String key = type2id(alAnot[j].label);
// out.append("#=GR ");
out.append(new Format("%-" + maxid + "s").form(
- "#=GR " + printId(s[i], jvSuffix) + " " + key + " "));
+ "#=GR " + printId(seq, jvSuffix) + " " + key + " "));
ann = alAnot[j].annotations;
- String seq = "";
- for (int k = 0; k < ann.length; k++)
+ String sseq = "";
+ for (int k = 0, nk = ann.length; k < nk; k++)
{
- seq += outputCharacter(key, k, isrna, ann, s[i]);
+ sseq += outputCharacter(key, k, isrna, ann, seq);
}
- 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"))
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);
}
}