1 Clazz.declarePackage ("jalview.io");
\r
2 Clazz.load (["jalview.io.AlignFile"], "jalview.io.StockholmFile", ["com.stevesoft.pat.Regex", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Mapping", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.Format", "$.MapList", "$.MessageManager", "java.io.BufferedReader", "$.FileReader", "$.IOException", "java.lang.Character", "$.StringBuffer", "java.util.ArrayList", "$.Hashtable", "$.LinkedHashMap", "$.StringTokenizer", "$.Vector"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
7 Clazz.instantialize (this, arguments);
\r
8 }, jalview.io, "StockholmFile", jalview.io.AlignFile);
\r
9 Clazz.makeConstructor (c$,
\r
11 Clazz.superConstructor (this, jalview.io.StockholmFile, []);
\r
13 Clazz.makeConstructor (c$,
\r
15 Clazz.superConstructor (this, jalview.io.StockholmFile, []);
\r
17 }, "jalview.datamodel.AlignmentI");
\r
18 Clazz.defineMethod (c$, "parse_with_VARNA",
\r
21 fr = new java.io.FileReader (inFile);
\r
22 var r = new java.io.BufferedReader (fr);
\r
25 this.result = RNAFactory.loadSecStrStockholm ();
\r
27 if (Clazz.exceptionOf (umcp, ExceptionUnmatchedClosingParentheses)) {
\r
28 this.errormessage = "Unmatched parentheses in annotation. Aborting (" + umcp.getMessage () + ")";
\r
29 throw new java.io.IOException (umcp);
\r
34 var seqs = new Array (this.result.size ());
\r
36 for (var i = 0; i < this.result.size (); i++) {
\r
37 var current = this.result.get (i);
\r
38 var seq = current.getSeq ();
\r
39 var rna = current.getStructDBN (true);
\r
41 var end = seq.length - 1;
\r
42 id = this.safeName (this.getDataName ());
\r
43 seqs[i] = new jalview.datamodel.Sequence (id, seq, begin, end);
\r
44 var annot = new Array (rna.length);
\r
45 var ann = new Array (rna.length);
\r
46 for (var j = 0; j < rna.length; j++) {
\r
47 annot[j] = rna.substring (j, j + 1);
\r
49 for (var k = 0; k < rna.length; k++) {
\r
50 ann[k] = new jalview.datamodel.Annotation (annot[k], "", jalview.schemes.ResidueProperties.getRNASecStrucState (annot[k]).charAt (0), 0);
\r
52 var align = new jalview.datamodel.AlignmentAnnotation ("Sec. str.", current.getID (), ann);
\r
53 seqs[i].addAlignmentAnnotation (align);
\r
54 seqs[i].setRNA (this.result.get (i));
\r
55 this.annotations.addElement (align);
\r
57 this.setSeqs (seqs);
\r
59 Clazz.overrideMethod (c$, "parse",
\r
61 var treeString = new StringBuffer ();
\r
62 var treeName = null;
\r
65 var seqAnn = new java.util.Hashtable ();
\r
66 var seqs = new java.util.LinkedHashMap ();
\r
72 r = new com.stevesoft.pat.Regex ("# STOCKHOLM ([\\d\\.]+)");
\r
73 if (!r.search (this.nextLine ())) {
\r
74 throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.stockholm_invalid_format"));
\r
76 version = r.stringMatched (1);
\r
77 }rend = new com.stevesoft.pat.Regex ("^\\s*\\/\\/");
\r
78 p = new com.stevesoft.pat.Regex ("(\\S+)\\/(\\d+)\\-(\\d+)");
\r
79 s = new com.stevesoft.pat.Regex ("(\\S+)\\s+(\\S*)\\s+(.*)");
\r
80 r = new com.stevesoft.pat.Regex ("#=(G[FSRC]?)\\s+(.*)");
\r
81 x = new com.stevesoft.pat.Regex ("(\\S+)\\s+(\\S+)");
\r
82 var openparen = new com.stevesoft.pat.Regex ("(<|\\[)", "(");
\r
83 var closeparen = new com.stevesoft.pat.Regex ("(>|\\])", ")");
\r
84 var detectbrackets = new com.stevesoft.pat.Regex ("(<|>|\\[|\\]|\\(|\\))");
\r
90 openparen.optimize ();
\r
91 closeparen.optimize ();
\r
92 while ((line = this.nextLine ()) != null) {
\r
93 if (line.length == 0) {
\r
95 }if (rend.search (line)) {
\r
96 this.noSeqs = seqs.size ();
\r
98 var dbsource = null;
\r
99 var pf = new com.stevesoft.pat.Regex ("PF[0-9]{5}(.*)");
\r
100 var rf = new com.stevesoft.pat.Regex ("RF[0-9]{5}(.*)");
\r
101 if (this.getAlignmentProperty ("AC") != null) {
\r
102 var dbType = this.getAlignmentProperty ("AC").toString ();
\r
103 if (pf.search (dbType)) {
\r
105 } else if (rf.search (dbType)) {
\r
107 }}for (var skey, $skey = seqs.entrySet ().iterator (); $skey.hasNext () && ((skey = $skey.next ()) || true);) {
\r
108 var acc = skey.getKey ();
\r
109 var seq = skey.getValue ();
\r
110 if (this.maxLength < seq.length) {
\r
111 this.maxLength = seq.length;
\r
115 var accAnnotations = null;
\r
116 if (seqAnn != null && seqAnn.containsKey (acc)) {
\r
117 accAnnotations = seqAnn.remove (acc);
\r
118 }if (p.search (acc)) {
\r
119 sid = p.stringMatched (1);
\r
120 start = Integer.parseInt (p.stringMatched (2));
\r
121 end = Integer.parseInt (p.stringMatched (3));
\r
122 }var seqO = new jalview.datamodel.Sequence (sid, seq, start, end);
\r
123 if (accAnnotations != null && accAnnotations.containsKey ("DE")) {
\r
124 var desc = accAnnotations.get ("DE");
\r
125 seqO.setDescription ((desc == null) ? "" : desc);
\r
126 }if (accAnnotations != null && accAnnotations.containsKey ("DR")) {
\r
127 var dbr = accAnnotations.get ("DR");
\r
128 if (dbr != null && dbr.indexOf (";") > -1) {
\r
129 var src = dbr.substring (0, dbr.indexOf (";"));
\r
130 var acn = dbr.substring (dbr.indexOf (";") + 1);
\r
131 jalview.util.DBRefUtils.parseToDbRef (seqO, src, "0", acn);
\r
132 }}if (accAnnotations != null && accAnnotations.containsKey ("AC")) {
\r
133 if (dbsource != null) {
\r
134 var dbr = accAnnotations.get ("AC");
\r
136 this.guessDatabaseFor (seqO, dbr, dbsource);
\r
137 }}}var features = null;
\r
139 features = accAnnotations.remove ("features");
\r
141 if (Clazz.exceptionOf (e, NullPointerException)) {
\r
146 if (features != null) {
\r
147 var posmap = seqO.findPositionMap ();
\r
148 var i = features.keys ();
\r
149 while (i.hasMoreElements ()) {
\r
150 var type = i.nextElement ().toString ();
\r
151 var content = features.remove (type);
\r
152 var key = jalview.io.StockholmFile.type2id (type);
\r
154 if (accAnnotations != null && accAnnotations.containsKey (key)) {
\r
155 var vv = accAnnotations.get (key);
\r
156 for (var ii = 0; ii < vv.size (); ii++) {
\r
157 var an = vv.elementAt (ii);
\r
158 seqO.addAlignmentAnnotation (an);
\r
159 this.annotations.add (an);
\r
161 }}var j = content.keys ();
\r
162 while (j.hasMoreElements ()) {
\r
163 var desc = j.nextElement ().toString ();
\r
164 var ns = content.get (desc).toString ();
\r
165 var byChar = ns.toCharArray ();
\r
166 for (var k = 0; k < byChar.length; k++) {
\r
168 if (!(c == ' ' || c == '_' || c == '-' || c == '.')) {
\r
169 var new_pos = posmap[k];
\r
170 var feat = new jalview.datamodel.SequenceFeature (type, desc, new_pos, new_pos, 0, null);
\r
171 seqO.addSequenceFeature (feat);
\r
175 }this.seqs.addElement (seqO);
\r
178 } else if (!r.search (line)) {
\r
179 if (!x.search (line)) {
\r
180 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.couldnt_parse_sequence_line", Clazz.newArray (-1, [line])));
\r
181 }var ns = seqs.get (x.stringMatched (1));
\r
184 }ns += x.stringMatched (2);
\r
185 seqs.put (x.stringMatched (1), ns);
\r
187 var annType = r.stringMatched (1);
\r
188 var annContent = r.stringMatched (2);
\r
189 if (annType.equals ("GF")) {
\r
190 var an = new com.stevesoft.pat.Regex ("(\\w+)\\s*(.*)");
\r
191 if (an.search (annContent)) {
\r
192 if (an.stringMatched (1).equals ("NH")) {
\r
193 treeString.append (an.stringMatched (2));
\r
194 } else if (an.stringMatched (1).equals ("TN")) {
\r
195 if (treeString.length () > 0) {
\r
196 if (treeName == null) {
\r
197 treeName = "Tree " + (this.getTreeCount () + 1);
\r
198 }this.addNewickTree (treeName, treeString.toString ());
\r
199 }treeName = an.stringMatched (2);
\r
200 treeString = new StringBuffer ();
\r
201 }this.setAlignmentProperty (an.stringMatched (1), an.stringMatched (2));
\r
202 }} else if (annType.equals ("GS")) {
\r
203 if (s.search (annContent)) {
\r
204 var acc = s.stringMatched (1);
\r
205 var type = s.stringMatched (2);
\r
206 var content = s.stringMatched (3);
\r
208 if (seqAnn.containsKey (acc)) {
\r
209 ann = seqAnn.get (acc);
\r
211 ann = new java.util.Hashtable ();
\r
212 }ann.put (type, content);
\r
213 seqAnn.put (acc, ann);
\r
215 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.error_parsing_line", Clazz.newArray (-1, [line])));
\r
216 }} else if (annType.equals ("GC")) {
\r
217 if (x.search (annContent)) {
\r
218 jalview.io.StockholmFile.parseAnnotationRow (this.annotations, x.stringMatched (1), x.stringMatched (2));
\r
219 }} else if (annType.equals ("GR")) {
\r
220 if (s.search (annContent)) {
\r
221 var acc = s.stringMatched (1);
\r
222 var type = s.stringMatched (2);
\r
223 var seq = String.instantialize (s.stringMatched (3));
\r
224 var description = null;
\r
225 var sep = new java.util.StringTokenizer (seq, " \t");
\r
226 description = sep.nextToken ();
\r
227 if (sep.hasMoreTokens ()) {
\r
228 seq = sep.nextToken ();
\r
231 description = String.instantialize ();
\r
233 if (seqAnn.containsKey (acc)) {
\r
234 ann = seqAnn.get (acc);
\r
236 ann = new java.util.Hashtable ();
\r
237 seqAnn.put (acc, ann);
\r
239 if (ann.containsKey ("features")) {
\r
240 features = ann.get ("features");
\r
242 features = new java.util.Hashtable ();
\r
243 ann.put ("features", features);
\r
245 if (features.containsKey (this.id2type (type))) {
\r
246 content = features.get (this.id2type (type));
\r
248 content = new java.util.Hashtable ();
\r
249 features.put (this.id2type (type), content);
\r
250 }var ns = content.get (description);
\r
254 content.put (description, ns);
\r
256 if (seqAnn.containsKey (acc)) {
\r
257 strucAnn = seqAnn.get (acc);
\r
259 strucAnn = new java.util.Hashtable ();
\r
260 }var newStruc = new java.util.Vector ();
\r
261 jalview.io.StockholmFile.parseAnnotationRow (newStruc, type, ns);
\r
262 for (var alan, $alan = newStruc.iterator (); $alan.hasNext () && ((alan = $alan.next ()) || true);) {
\r
263 alan.visible = false;
\r
265 strucAnn.put (type, newStruc);
\r
266 seqAnn.put (acc, strucAnn);
\r
268 System.err.println ("Warning - couldn't parse sequence annotation row line:\n" + line);
\r
270 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.unknown_annotation_detected", Clazz.newArray (-1, [annType, annContent])));
\r
272 if (treeString.length () > 0) {
\r
273 if (treeName == null) {
\r
274 treeName = "Tree " + (1 + this.getTreeCount ());
\r
275 }this.addNewickTree (treeName, treeString.toString ());
\r
277 Clazz.defineMethod (c$, "guessDatabaseFor",
\r
278 function (seqO, dbr, dbsource) {
\r
280 var dbrs = new java.util.ArrayList ();
\r
281 var seqdb = "Unknown";
\r
282 var sdbac = "" + dbr;
\r
286 if ((st = sdbac.indexOf ("/")) > -1) {
\r
288 var range = sdbac.substring (st + 1);
\r
289 sdbac = sdbac.substring (0, st);
\r
290 if ((p = range.indexOf ("-")) > -1) {
\r
292 if (p < range.length) {
\r
293 num = range.substring (p).trim ();
\r
295 en = Integer.parseInt (num);
\r
297 if (Clazz.exceptionOf (x, NumberFormatException)) {
\r
305 }num = range.substring (0, p).trim ();
\r
307 st = Integer.parseInt (num);
\r
309 if (Clazz.exceptionOf (x, NumberFormatException)) {
\r
315 }if (dbsource.equals ("PFAM")) {
\r
317 if (sdbac.indexOf (".") > -1) {
\r
318 sdbac = sdbac.substring (0, sdbac.indexOf ("."));
\r
319 dbrf = jalview.util.DBRefUtils.parseToDbRef (seqO, seqdb, dbsource, sdbac);
\r
320 if (dbrf != null) {
\r
322 }}dbrf = jalview.util.DBRefUtils.parseToDbRef (seqO, dbsource, dbsource, dbr);
\r
327 if (sdbac.indexOf (".") > -1) {
\r
328 sdbac = sdbac.substring (0, sdbac.indexOf ("."));
\r
329 dbrf = jalview.util.DBRefUtils.parseToDbRef (seqO, seqdb, dbsource, sdbac);
\r
330 if (dbrf != null) {
\r
332 }}dbrf = jalview.util.DBRefUtils.parseToDbRef (seqO, dbsource, dbsource, dbr);
\r
333 if (dbrf != null) {
\r
335 }}if (st != -1 && en != -1) {
\r
336 for (var d, $d = dbrs.iterator (); $d.hasNext () && ((d = $d.next ()) || true);) {
\r
337 var mp = new jalview.util.MapList ( Clazz.newIntArray (-1, [seqO.getStart (), seqO.getEnd ()]), Clazz.newIntArray (-1, [st, en]), 1, 1);
\r
338 var mping = new jalview.datamodel.Mapping (mp);
\r
341 }}, "jalview.datamodel.Sequence,~S,~S");
\r
342 c$.parseAnnotationRow = Clazz.defineMethod (c$, "parseAnnotationRow",
\r
343 function (annotation, label, annots) {
\r
345 var convert2 = null;
\r
346 var openparen = new com.stevesoft.pat.Regex ("(<|\\[)", "(");
\r
347 var closeparen = new com.stevesoft.pat.Regex ("(>|\\])", ")");
\r
348 var detectbrackets = new com.stevesoft.pat.Regex ("(<|>|\\[|\\]|\\(|\\))");
\r
349 convert1 = openparen.replaceAll (annots);
\r
350 convert2 = closeparen.replaceAll (convert1);
\r
353 if (label.contains ("_cons")) {
\r
354 type = (label.indexOf ("_cons") == label.length - 5) ? label.substring (0, label.length - 5) : label;
\r
356 type = jalview.io.StockholmFile.id2type (type);
\r
357 if (type.equals ("secondary structure")) {
\r
359 }var els = new Array (annots.length);
\r
360 for (var i = 0; i < annots.length; i++) {
\r
361 var pos = annots.substring (i, i + 1);
\r
363 ann = new jalview.datamodel.Annotation (pos, "", ' ', 0);
\r
366 if (detectbrackets.search (pos)) {
\r
367 ann.secondaryStructure = jalview.schemes.ResidueProperties.getRNASecStrucState (pos).charAt (0);
\r
369 ann.secondaryStructure = jalview.schemes.ResidueProperties.getDssp3state (pos).charAt (0);
\r
370 }if (ann.secondaryStructure == pos.charAt (0)) {
\r
371 ann.displayCharacter = "";
\r
373 ann.displayCharacter = " " + ann.displayCharacter;
\r
377 var e = annotation.elements ();
\r
378 while (e.hasMoreElements ()) {
\r
379 annot = e.nextElement ();
\r
380 if (annot.label.equals (type)) {
\r
384 if (annot == null) {
\r
385 annot = new jalview.datamodel.AlignmentAnnotation (type, type, els);
\r
386 annotation.addElement (annot);
\r
388 var anns = new Array (annot.annotations.length + els.length);
\r
389 System.arraycopy (annot.annotations, 0, anns, 0, annot.annotations.length);
\r
390 System.arraycopy (els, 0, anns, annot.annotations.length, els.length);
\r
391 annot.annotations = anns;
\r
393 }, "java.util.Vector,~S,~S");
\r
394 Clazz.defineMethod (c$, "print",
\r
399 var dataRef = null;
\r
400 while (($in < s.length) && (s[$in] != null)) {
\r
401 var tmp = this.printId (s[$in]);
\r
402 if (s[$in].getSequence ().length > max) {
\r
403 max = s[$in].getSequence ().length;
\r
404 }if (tmp.length > maxid) {
\r
405 maxid = tmp.length;
\r
406 }if (s[$in].getDBRef () != null) {
\r
407 for (var idb = 0; idb < s[$in].getDBRef ().length; idb++) {
\r
408 if (dataRef == null) {
\r
409 dataRef = new java.util.Hashtable ();
\r
410 }var datAs1 = s[$in].getDBRef ()[idb].getSource ().toString () + " ; " + s[$in].getDBRef ()[idb].getAccessionId ().toString ();
\r
411 dataRef.put (tmp, datAs1);
\r
417 if (this.al.getProperties () != null) {
\r
418 if (!this.al.getProperties ().isEmpty ()) {
\r
419 var key = this.al.getProperties ().keys ();
\r
420 var val = this.al.getProperties ().elements ();
\r
421 while (key.hasMoreElements ()) {
\r
422 this.out.append ("#=GF " + key.nextElement () + " " + val.nextElement ());
\r
423 this.out.append (this.newline);
\r
425 }}if (dataRef != null) {
\r
426 var en = dataRef.keys ();
\r
427 while (en.hasMoreElements ()) {
\r
428 var idd = en.nextElement ();
\r
429 var type = dataRef.remove (idd);
\r
430 this.out.append ( new jalview.util.Format ("%-" + (maxid - 2) + "s").form ("#=GS " + idd.toString () + " "));
\r
431 if (type.contains ("PFAM") || type.contains ("RFAM")) {
\r
432 this.out.append (" AC " + type.substring (type.indexOf (";") + 1));
\r
434 this.out.append (" DR " + type + " ");
\r
435 }this.out.append (this.newline);
\r
437 }while (i < s.length && s[i] != null) {
\r
438 if (s[i].getDatasetSequence () != null) {
\r
439 var ds = s[i].getDatasetSequence ();
\r
443 alAnot = s[i].getAnnotation ();
\r
445 if (alAnot != null) {
\r
446 for (var j = 0; j < alAnot.length; j++) {
\r
447 if (ds.getSequenceFeatures () != null) {
\r
448 feature = ds.getSequenceFeatures ()[0].type;
\r
449 }var key = jalview.io.StockholmFile.type2id (feature);
\r
452 }this.out.append ( new jalview.util.Format ("%-" + maxid + "s").form ("#=GR " + this.printId (s[i]) + " " + key + " "));
\r
453 ann = alAnot[j].annotations;
\r
454 var isrna = alAnot[j].isValidStruc ();
\r
456 for (var k = 0; k < ann.length; k++) {
\r
457 seq += this.outputCharacter (key, k, isrna, ann, s[i]);
\r
459 this.out.append (seq);
\r
460 this.out.append (this.newline);
\r
462 }}this.out.append ( new jalview.util.Format ("%-" + maxid + "s").form (this.printId (s[i]) + " "));
\r
463 this.out.append (s[i].getSequenceAsString ());
\r
464 this.out.append (this.newline);
\r
468 if (this.al.getAlignmentAnnotation () != null) {
\r
469 for (var ia = 0; ia < this.al.getAlignmentAnnotation ().length; ia++) {
\r
470 aa = this.al.getAlignmentAnnotation ()[ia];
\r
471 if (aa.autoCalculated || !aa.visible || aa.sequenceRef != null) {
\r
476 if (aa.label.equals ("seq")) {
\r
477 label = "seq_cons";
\r
479 key = jalview.io.StockholmFile.type2id (aa.label.toLowerCase ());
\r
483 label = key + "_cons";
\r
484 }}if (label == null) {
\r
486 }label = label.$replace (" ", "_");
\r
487 this.out.append ( new jalview.util.Format ("%-" + maxid + "s").form ("#=GC " + label + " "));
\r
488 var isrna = aa.isValidStruc ();
\r
489 for (var j = 0; j < aa.annotations.length; j++) {
\r
490 seq += this.outputCharacter (key, j, isrna, aa.annotations, null);
\r
492 this.out.append (seq);
\r
493 this.out.append (this.newline);
\r
495 }return this.out.toString ();
\r
497 Clazz.defineMethod (c$, "outputCharacter",
\r
498 function (key, k, isrna, ann, sequenceI) {
\r
500 var annot = ann[k];
\r
501 var ch = (annot == null) ? ((sequenceI == null) ? "-" : Character.toString (sequenceI.getCharAt (k))) : annot.displayCharacter;
\r
502 if (key != null && key.equals ("SS")) {
\r
503 if (annot == null) {
\r
504 return sequenceI == null ? '-' : sequenceI.getCharAt (k);
\r
506 if (annot.secondaryStructure > ' ' && ch.length < 2) {
\r
507 return annot.secondaryStructure;
\r
508 }}}if (ch.length == 0) {
\r
510 } else if (ch.length == 1) {
\r
511 seq = ch.charAt (0);
\r
512 } else if (ch.length > 1) {
\r
513 seq = ch.charAt (1);
\r
515 }, "~S,~N,~B,~A,jalview.datamodel.SequenceI");
\r
516 Clazz.defineMethod (c$, "print",
\r
518 this.out = new StringBuffer ();
\r
519 this.out.append ("# STOCKHOLM 1.0");
\r
520 this.out.append (this.newline);
\r
521 this.print (this.getSeqsAsArray ());
\r
522 this.out.append ("//");
\r
523 this.out.append (this.newline);
\r
524 return this.out.toString ();
\r
526 c$.id2type = Clazz.defineMethod (c$, "id2type",
\r
528 if (jalview.io.StockholmFile.typeIds.containsKey (id)) {
\r
529 return jalview.io.StockholmFile.typeIds.get (id);
\r
530 }System.err.println ("Warning : Unknown Stockholm annotation type code " + id);
\r
533 c$.type2id = Clazz.defineMethod (c$, "type2id",
\r
536 var e = jalview.io.StockholmFile.typeIds.keys ();
\r
537 while (e.hasMoreElements ()) {
\r
538 var ll = e.nextElement ();
\r
539 if (jalview.io.StockholmFile.typeIds.get (ll).toString ().equals (type)) {
\r
545 }System.err.println ("Warning : Unknown Stockholm annotation type: " + type);
\r
548 Clazz.defineMethod (c$, "safeName",
\r
549 function (dataName) {
\r
551 while ((b = dataName.indexOf ("/")) > -1 && b < dataName.length) {
\r
552 dataName = dataName.substring (b + 1).trim ();
\r
554 var e = (dataName.length - dataName.indexOf (".")) + 1;
\r
555 dataName = dataName.substring (1, e).trim ();
\r
558 Clazz.defineStatics (c$,
\r
561 if (jalview.io.StockholmFile.typeIds == null) {
\r
562 jalview.io.StockholmFile.typeIds = new java.util.Hashtable ();
\r
563 jalview.io.StockholmFile.typeIds.put ("SS", "secondary structure");
\r
564 jalview.io.StockholmFile.typeIds.put ("SA", "surface accessibility");
\r
565 jalview.io.StockholmFile.typeIds.put ("TM", "transmembrane");
\r
566 jalview.io.StockholmFile.typeIds.put ("PP", "posterior probability");
\r
567 jalview.io.StockholmFile.typeIds.put ("LI", "ligand binding");
\r
568 jalview.io.StockholmFile.typeIds.put ("AS", "active site");
\r
569 jalview.io.StockholmFile.typeIds.put ("IN", "intron");
\r
570 jalview.io.StockholmFile.typeIds.put ("IR", "interacting residue");
\r
571 jalview.io.StockholmFile.typeIds.put ("AC", "accession");
\r
572 jalview.io.StockholmFile.typeIds.put ("OS", "organism");
\r
573 jalview.io.StockholmFile.typeIds.put ("CL", "class");
\r
574 jalview.io.StockholmFile.typeIds.put ("DE", "description");
\r
575 jalview.io.StockholmFile.typeIds.put ("DR", "reference");
\r
576 jalview.io.StockholmFile.typeIds.put ("LO", "look");
\r
577 jalview.io.StockholmFile.typeIds.put ("RF", "reference positions");
\r