JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / io / JPredFile.js
1 Clazz.declarePackage ("jalview.io");\r
2 Clazz.load (["jalview.io.AlignFile"], "jalview.io.JPredFile", ["jalview.datamodel.Alignment", "$.Sequence", "jalview.io.JnetAnnotationMaker", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Float", "$.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.ids = null;\r
5 this.conf = null;\r
6 this.Scores = null;\r
7 this.Symscores = null;\r
8 this.QuerySeqPosition = 0;\r
9 this.annotSeqs = null;\r
10 Clazz.instantialize (this, arguments);\r
11 }, jalview.io, "JPredFile", jalview.io.AlignFile);\r
12 Clazz.defineMethod (c$, "setQuerySeqPosition", \r
13 function (QuerySeqPosition) {\r
14 this.QuerySeqPosition = QuerySeqPosition;\r
15 }, "~N");\r
16 Clazz.defineMethod (c$, "getQuerySeqPosition", \r
17 function () {\r
18 return this.QuerySeqPosition;\r
19 });\r
20 Clazz.defineMethod (c$, "getScores", \r
21 function () {\r
22 return this.Scores;\r
23 });\r
24 Clazz.defineMethod (c$, "getSymscores", \r
25 function () {\r
26 return this.Symscores;\r
27 });\r
28 Clazz.defineMethod (c$, "initData", \r
29 function () {\r
30 Clazz.superCall (this, jalview.io.JPredFile, "initData", []);\r
31 this.Scores =  new java.util.Hashtable ();\r
32 this.ids = null;\r
33 this.conf = null;\r
34 });\r
35 Clazz.overrideMethod (c$, "parse", \r
36 function () {\r
37 var line;\r
38 this.QuerySeqPosition = -1;\r
39 this.noSeqs = 0;\r
40 var seq_entries =  new java.util.Vector ();\r
41 var ids =  new java.util.Vector ();\r
42 var Symscores =  new java.util.Hashtable ();\r
43 while ((line = this.nextLine ()) != null) {\r
44 var str =  new java.util.StringTokenizer (line, ":");\r
45 var id = "";\r
46 if (!str.hasMoreTokens ()) {\r
47 continue;\r
48 }id = str.nextToken ();\r
49 var seqsym = str.nextToken ();\r
50 var symbols =  new java.util.StringTokenizer (seqsym, ",");\r
51 var numSymbols = symbols.countTokens ();\r
52 if (numSymbols == 0) {\r
53 continue;\r
54 }if (seqsym.length != (2 * numSymbols)) {\r
55 if (this.Scores.containsKey (id)) {\r
56 var i = 1;\r
57 while (this.Scores.containsKey (id + "_" + i)) {\r
58 i++;\r
59 }\r
60 id = id + "_" + i;\r
61 }var scores =  new java.util.Vector ();\r
62 var i = 0;\r
63 var ascore = "dead";\r
64 try {\r
65 while (symbols.hasMoreTokens ()) {\r
66 ascore = symbols.nextToken ();\r
67 var score =  new Float (ascore);\r
68 scores.addElement (score);\r
69 }\r
70 this.Scores.put (id, scores);\r
71 } catch (e) {\r
72 if (Clazz.exceptionOf (e, Exception)) {\r
73 i = scores.size ();\r
74 for (var j = 0; j < i; j++) {\r
75 scores.setElementAt ((scores.elementAt (j)).toString (), j);\r
76 }\r
77 scores.addElement (ascore);\r
78 while (symbols.hasMoreTokens ()) {\r
79 ascore = symbols.nextToken ();\r
80 scores.addElement (ascore);\r
81 }\r
82 this.Scores.put (id, scores);\r
83 } else {\r
84 throw e;\r
85 }\r
86 }\r
87 } else if (id.equals ("jnetconf")) {\r
88 id = "Prediction Confidence";\r
89 this.conf =  new java.util.Vector (numSymbols);\r
90 for (var i = 0; i < numSymbols; i++) {\r
91 this.conf.setElementAt (symbols.nextToken (), i);\r
92 }\r
93 } else {\r
94 var newseq =  new StringBuffer ();\r
95 for (var i = 0; i < numSymbols; i++) {\r
96 newseq.append (symbols.nextToken ());\r
97 }\r
98 if (id.indexOf (";") > -1) {\r
99 seq_entries.addElement (newseq);\r
100 var i = 1;\r
101 var name = id.substring (id.indexOf (";") + 1);\r
102 while (ids.lastIndexOf (name) > -1) {\r
103 name = id.substring (id.indexOf (";") + 1) + "_" + ++i;\r
104 }\r
105 if (this.QuerySeqPosition == -1) this.QuerySeqPosition = ids.size ();\r
106 ids.addElement (name);\r
107 this.noSeqs++;\r
108 } else {\r
109 if (id.equals ("JNETPRED")) {\r
110 id = "Predicted Secondary Structure";\r
111 }seq_entries.addElement (newseq.toString ());\r
112 ids.addElement (id);\r
113 Symscores.put (id,  new Integer (ids.size () - 1));\r
114 }}}\r
115 this.maxLength = seq_entries.elementAt (0).toString ().length;\r
116 for (var i = 0; i < ids.size (); i++) {\r
117 var newSeq =  new jalview.datamodel.Sequence (ids.elementAt (i).toString (), seq_entries.elementAt (i).toString (), 1, seq_entries.elementAt (i).toString ().length);\r
118 if (this.maxLength != seq_entries.elementAt (i).toString ().length) {\r
119 throw  new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.jpredconcide_entry_has_unexpected_number_of_columns",  Clazz.newArray (-1, [ids.elementAt (i).toString ()])));\r
120 }if ((newSeq.getName ().startsWith ("QUERY") || newSeq.getName ().startsWith ("align;")) && (this.QuerySeqPosition == -1)) {\r
121 this.QuerySeqPosition = this.seqs.size ();\r
122 }this.seqs.addElement (newSeq);\r
123 }\r
124 if (this.seqs.size () > 0 && this.QuerySeqPosition > -1) {\r
125 var tal =  new jalview.datamodel.Alignment (this.getSeqsAsArray ());\r
126 try {\r
127 jalview.io.JnetAnnotationMaker.add_annotation (this, tal, this.QuerySeqPosition, true);\r
128 } catch (e) {\r
129 if (Clazz.exceptionOf (e, Exception)) {\r
130 tal = null;\r
131 var ex =  new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.couldnt_parse_concise_annotation_for_prediction",  Clazz.newArray (-1, [e.getMessage ()])));\r
132 e.printStackTrace ();\r
133 throw ex;\r
134 } else {\r
135 throw e;\r
136 }\r
137 }\r
138 this.annotations =  new java.util.Vector ();\r
139 var aan = tal.getAlignmentAnnotation ();\r
140 for (var aai = 0; aan != null && aai < aan.length; aai++) {\r
141 this.annotations.addElement (aan[aai]);\r
142 }\r
143 }});\r
144 Clazz.overrideMethod (c$, "print", \r
145 function () {\r
146 return "Not Supported";\r
147 });\r
148 c$.main = Clazz.defineMethod (c$, "main", \r
149 function (args) {\r
150 try {\r
151 var blc =  new jalview.io.JPredFile (args[0], "File");\r
152 for (var i = 0; i < blc.seqs.size (); i++) {\r
153 System.out.println ((blc.seqs.elementAt (i)).getName () + "\n" + (blc.seqs.elementAt (i)).getSequenceAsString () + "\n");\r
154 }\r
155 } catch (e) {\r
156 if (Clazz.exceptionOf (e, java.io.IOException)) {\r
157 System.err.println ("Exception " + e);\r
158 } else {\r
159 throw e;\r
160 }\r
161 }\r
162 }, "~A");\r
163 Clazz.defineMethod (c$, "removeNonSequences", \r
164 function () {\r
165 if (this.annotSeqs != null) {\r
166 return;\r
167 }this.annotSeqs =  new java.util.Vector ();\r
168 var newseqs =  new java.util.Vector ();\r
169 var i = 0;\r
170 var j = this.seqs.size ();\r
171 for (; i < this.QuerySeqPosition; i++) {\r
172 this.annotSeqs.addElement (this.seqs.elementAt (i));\r
173 }\r
174 {\r
175 var sq = this.seqs.elementAt (j - 1);\r
176 if (sq.getName ().toUpperCase ().startsWith ("JPRED")) {\r
177 this.annotSeqs.addElement (sq);\r
178 this.seqs.removeElementAt (--j);\r
179 }}for (; i < j; i++) {\r
180 newseqs.addElement (this.seqs.elementAt (i));\r
181 }\r
182 this.seqs.removeAllElements ();\r
183 this.seqs = newseqs;\r
184 });\r
185 });\r