From 4b843c60054b25d20a745f2f015d7168037887df Mon Sep 17 00:00:00 2001 From: BobHanson Date: Tue, 2 Jun 2020 07:27:43 -0500 Subject: [PATCH] JAL-3446 from JAL-3253-applet StockholmFile updated to 26b115b (gmungoc) --- src/jalview/io/StockholmFile.java | 52 +++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index 92f73f4..3d07e5a 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -28,12 +28,14 @@ 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 jalview.util.Platform; @@ -421,17 +423,14 @@ public class StockholmFile extends AlignFile if (accAnnotations != null && accAnnotations.containsKey("AC")) { - if (dbsource != 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 + // 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 ? @@ -616,6 +615,9 @@ 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 + // process CC, DR etc into multivalued properties setAlignmentProperty(an.stringMatched(1), an.stringMatched(2)); } } @@ -844,6 +846,12 @@ public class StockholmFile extends AlignFile 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"; @@ -1020,6 +1028,12 @@ public class StockholmFile extends AlignFile return annot; } + private String dbref_to_ac_record(DBRefEntry ref) + { + return ref.getSource().toString() + " ; " + + ref.getAccessionId().toString(); + } + @Override public String print(SequenceI[] s, boolean jvSuffix) { @@ -1034,6 +1048,7 @@ public class StockholmFile extends AlignFile int slen = s.length; SequenceI seq; Hashtable dataRef = null; + boolean isAA = s[in].isProtein(); while ((in < slen) && ((seq = s[in]) != null)) { String tmp = printId(seq, jvSuffix); @@ -1051,14 +1066,24 @@ public class StockholmFile extends AlignFile { dataRef = new Hashtable<>(); } - for (int idb = 0; idb < ndb; idb++) + List primrefs = seq.getPrimaryDBRefs(); + if (primrefs.size() >= 1) { - - DBRefEntry ref = seqrefs.get(idb); - String datAs1 = ref.getSource().toString() - + " ; " - + ref.getAccessionId().toString(); - dataRef.put(tmp, datAs1); + dataRef.put(tmp, dbref_to_ac_record(primrefs.get(0))); + } + else + { + for (int idb = 0; idb < ndb; idb++) + { + DBRefEntry dbref = seqrefs.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 : DBRefSource.EMBL) + .equals(DBRefUtils.getCanonicalName(dbref.getSource()))) + { + break; + } + } } } in++; @@ -1091,7 +1116,8 @@ public class StockholmFile extends AlignFile 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)); -- 1.7.10.2