JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / datamodel / CigarArray.js
1 Clazz.declarePackage ("jalview.datamodel");\r
2 Clazz.load (["jalview.datamodel.CigarBase"], "jalview.datamodel.CigarArray", ["jalview.datamodel.CigarCigar", "$.SeqCigar", "java.lang.StringBuffer", "java.util.Vector"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.refCigars = null;\r
5 this.seqcigararray = false;\r
6 Clazz.instantialize (this, arguments);\r
7 }, jalview.datamodel, "CigarArray", jalview.datamodel.CigarBase);\r
8 Clazz.defineMethod (c$, "isSeqCigarArray", \r
9 function () {\r
10 return this.seqcigararray;\r
11 });\r
12 Clazz.makeConstructor (c$, \r
13 function (cigars) {\r
14 Clazz.superConstructor (this, jalview.datamodel.CigarArray);\r
15 this.seqcigararray = true;\r
16 if (cigars != null && cigars.length > 0) {\r
17 this.refCigars =  new Array (cigars.length);\r
18 for (var c = 0; c < cigars.length; c++) {\r
19 this.refCigars[c] = cigars[c];\r
20 if (!((Clazz.instanceOf (cigars[c], jalview.datamodel.SeqCigar)) || Clazz.instanceOf (cigars[c], jalview.datamodel.CigarCigar))) {\r
21 this.seqcigararray = false;\r
22 }}\r
23 }}, "~A");\r
24 Clazz.makeConstructor (c$, \r
25 function (alignment, columnSelection, selectionGroup) {\r
26 this.construct (jalview.datamodel.CigarArray.constructSeqCigarArray (alignment, selectionGroup));\r
27 this.constructFromAlignment (alignment, columnSelection != null ? columnSelection.getHiddenColumns () : null, selectionGroup);\r
28 }, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");\r
29 c$._calcStartEndBounds = Clazz.defineMethod (c$, "_calcStartEndBounds", \r
30 ($fz = function (alignment, selectionGroup) {\r
31 var startend =  Clazz.newIntArray (-1, [0, 0, 0]);\r
32 if (selectionGroup != null) {\r
33 startend[0] = selectionGroup.getSize ();\r
34 startend[1] = selectionGroup.getStartRes ();\r
35 startend[2] = selectionGroup.getEndRes ();\r
36 } else {\r
37 startend[0] = alignment.getHeight ();\r
38 startend[2] = alignment.getWidth () - 1;\r
39 }return startend;\r
40 }, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");\r
41 c$.constructSeqCigarArray = Clazz.defineMethod (c$, "constructSeqCigarArray", \r
42 function (alignment, selectionGroup) {\r
43 var seqs = null;\r
44 var i;\r
45 var iSize;\r
46 var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);\r
47 var start = _startend[1];\r
48 var end = _startend[2];\r
49 if (selectionGroup != null) {\r
50 iSize = selectionGroup.getSize ();\r
51 seqs = selectionGroup.getSequencesInOrder (alignment);\r
52 start = selectionGroup.getStartRes ();\r
53 end = selectionGroup.getEndRes ();\r
54 } else {\r
55 iSize = alignment.getHeight ();\r
56 seqs = alignment.getSequencesArray ();\r
57 end = alignment.getWidth () - 1;\r
58 }var selseqs =  new Array (iSize);\r
59 for (i = 0; i < iSize; i++) {\r
60 selseqs[i] =  new jalview.datamodel.SeqCigar (seqs[i], start, end);\r
61 }\r
62 return selseqs;\r
63 }, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");\r
64 Clazz.defineMethod (c$, "constructFromAlignment", \r
65 ($fz = function (alignment, list, selectionGroup) {\r
66 var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);\r
67 var start = _startend[1];\r
68 var end = _startend[2];\r
69 if (list != null) {\r
70 var region;\r
71 var hideStart;\r
72 var hideEnd;\r
73 var last = start;\r
74 for (var j = 0;  new Boolean (last < end & j < list.size ()).valueOf (); j++) {\r
75 region = list.get (j);\r
76 hideStart = region[0];\r
77 hideEnd = region[1];\r
78 if (hideStart < last) {\r
79 if (hideEnd > last) {\r
80 hideStart = last;\r
81 } else {\r
82 continue;\r
83 }}if (hideStart > end) {\r
84 break;\r
85 }if (hideEnd > end) {\r
86 hideEnd = end;\r
87 }if (hideStart > hideEnd) {\r
88 break;\r
89 }if (last < hideStart) {\r
90 this.addOperation ('M', hideStart - last);\r
91 }this.addOperation ('D', 1 + hideEnd - hideStart);\r
92 last = hideEnd + 1;\r
93 }\r
94 if (last < end) {\r
95 this.addOperation ('M', end - last + 1);\r
96 }} else {\r
97 this.addOperation ('M', end - start + 1);\r
98 }}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List,jalview.datamodel.SequenceGroup");\r
99 Clazz.defineMethod (c$, "getArrayofSequenceAndDeletions", \r
100 function (GapChar) {\r
101 if (this.refCigars == null || this.refCigars.length == 0 || this.length == 0) {\r
102 return null;\r
103 }var sqanddels =  new Array (this.refCigars.length);\r
104 for (var c = 0; c < this.refCigars.length; c++) {\r
105 var refString = this.refCigars[c].getSequenceString (GapChar);\r
106 if (refString != null) {\r
107 sqanddels[c] = this.getSequenceAndDeletions (refString, GapChar);\r
108 } else {\r
109 sqanddels[c] = null;\r
110 }}\r
111 return sqanddels;\r
112 }, "~S");\r
113 Clazz.defineMethod (c$, "getSequenceString", \r
114 function (GapChar) {\r
115 if (this.length == 0 || this.refCigars == null) {\r
116 return "";\r
117 }var seqStrings =  new StringBuffer ();\r
118 var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);\r
119 for (var c = 0; c < this.refCigars.length; c++) {\r
120 if (sqanddels[c] != null) {\r
121 seqStrings.append (sqanddels[c][0]);\r
122 sqanddels[c][0] = null;\r
123 }seqStrings.append ('\n');\r
124 }\r
125 return seqStrings.toString ();\r
126 }, "~S");\r
127 Clazz.defineMethod (c$, "getSequenceStrings", \r
128 function (GapChar) {\r
129 if (this.length == 0 || this.refCigars == null || this.refCigars.length == 0) {\r
130 return null;\r
131 }var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);\r
132 var seqs =  new Array (sqanddels.length);\r
133 for (var c = 0; c < this.refCigars.length; c++) {\r
134 seqs[c] = sqanddels[c][0];\r
135 }\r
136 return seqs;\r
137 }, "~S");\r
138 Clazz.defineMethod (c$, "applyDeletions", \r
139 function () {\r
140 var delpos = null;\r
141 if (this.length == 0) {\r
142 return null;\r
143 }var cursor = 0;\r
144 var vcursor = 0;\r
145 var offset = 0;\r
146 var i = 0;\r
147 while (i < this.length) {\r
148 if (this.operation[i] != 'D') {\r
149 if (this.operation[i] == 'M') {\r
150 cursor += this.range[i];\r
151 }vcursor += this.range[i++];\r
152 } else {\r
153 if (delpos == null) {\r
154 delpos =  new java.util.Vector ();\r
155 }var delstart = cursor;\r
156 var delend = cursor + this.range[i] - 1;\r
157 delpos.addElement ( Clazz.newIntArray (-1, [vcursor + offset, this.range[i]]));\r
158 offset += this.range[i] - 1;\r
159 System.arraycopy (this.operation, i + 1, this.operation, i, this.length - i);\r
160 System.arraycopy (this.range, i + 1, this.range, i, this.length - i);\r
161 this.length--;\r
162 for (var s = 0; s < this.refCigars.length; s++) {\r
163 var d = this.refCigars[s].deleteRange (delstart, delend);\r
164 }\r
165 }}\r
166 if (delpos != null) {\r
167 var pos =  Clazz.newIntArray (delpos.size () * 2, 0);\r
168 for (var k = 0, l = delpos.size (); k < l; k++) {\r
169 var dr = (delpos.elementAt (k));\r
170 pos[k * 2] = dr[0];\r
171 pos[k * 2 + 1] = dr[1];\r
172 delpos.setElementAt (null, k);\r
173 }\r
174 delpos = null;\r
175 return pos;\r
176 }return null;\r
177 });\r
178 Clazz.defineMethod (c$, "getSeqCigarArray", \r
179 function () {\r
180 if (!this.isSeqCigarArray ()) {\r
181 return null;\r
182 }var sa =  new Array (this.refCigars.length);\r
183 for (var i = 0; i < this.refCigars.length; i++) {\r
184 sa[i] = this.refCigars[i];\r
185 }\r
186 return sa;\r
187 });\r
188 });\r