From 33fec402191308cc21b8b91c473a2fa68abe8962 Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 24 Oct 2007 10:59:57 +0000 Subject: [PATCH] add parsed PDB reference to sequences --- src/jalview/io/StockholmFile.java | 15 ++++++++---- src/jalview/util/DBRefUtils.java | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index d0d84f5..e7b1c6e 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -31,9 +31,15 @@ import jalview.datamodel.*; /** * 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 is for the file when parsing the #GS= AC tag which associates accessions + * with sequences. + * Database references are also not parsed correctly: a separate reference string + * parser must be added to parse the database reference form into Jalview's local + * representation. * @author bsb at sanger.ac.uk - * @version 0.3 + * @version 0.3 + jalview mods + * */ public class StockholmFile extends AlignFile { @@ -158,9 +164,8 @@ public class StockholmFile extends AlignFile { String src = dbr.substring(0, dbr.indexOf(";")); String acn = dbr.substring(dbr.indexOf(";") + 1); - DBRefEntry dbref = new DBRefEntry(jalview.util.DBRefUtils - .getCanonicalName(src), acn, ""); - seqO.addDBRef(dbref); + jalview.util.DBRefUtils.parseToDbRef(seqO, src, "0", acn); + //seqO.addDBRef(dbref); } } Hashtable features = null; diff --git a/src/jalview/util/DBRefUtils.java b/src/jalview/util/DBRefUtils.java index d94e234..49f04cb 100755 --- a/src/jalview/util/DBRefUtils.java +++ b/src/jalview/util/DBRefUtils.java @@ -339,6 +339,54 @@ public class DBRefUtils return false; } }; + /** + * used by file parsers to generate DBRefs from annotation within file (eg stockholm) + * @param dbname + * @param version + * @param acn + * @param seq where to anotate with reference + * @return parsed version of entry that was added to seq (if any) + */ + public static DBRefEntry parseToDbRef(SequenceI seq, String dbname, String version, + String acn) + { + DBRefEntry ref = null; + if (dbname!=null) + { + String locsrc = jalview.util.DBRefUtils + .getCanonicalName(dbname); + if (locsrc.equals(jalview.datamodel.DBRefSource.PDB)) + { + // check for chaincode and mapping + // PFAM style stockhom PDB citation + com.stevesoft.pat.Regex r = new com.stevesoft.pat.Regex("([0-9][0-9A-Za-z]{3})\\s*(.?)\\s*;([0-9]+)-([0-9]+)"); + if (r.search(acn.trim())) + { + String pdbid = r.stringMatched(1); + String chaincode = r.stringMatched(2); + String mapstart = r.stringMatched(3); + String mapend = r.stringMatched(4); + if (chaincode.equals(" ")) + { + chaincode = "_"; + } + // construct pdb ref. + ref = new DBRefEntry(locsrc, version, pdbid+chaincode); + PDBEntry pdbr = new PDBEntry(); + pdbr.setId(pdbid); + seq.addPDBId(pdbr); + } + } else { + // default: + ref = new DBRefEntry(locsrc, version, acn); + } + } + if (ref!=null) + { + seq.addDBRef(ref); + } + return ref; + } } -- 1.7.10.2