JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / bin / jalview / datamodel / SeqCigar.js
1 Clazz.declarePackage ("jalview.datamodel");
2 Clazz.load (["jalview.datamodel.CigarSimple"], "jalview.datamodel.SeqCigar", ["jalview.analysis.AlignSeq", "$.SeqsetUtils", "jalview.datamodel.Sequence", "jalview.util.Comparison", "$.MessageManager", "$.ShiftList", "java.lang.Error", "$.StringBuffer", "java.util.Hashtable"], function () {
3 c$ = Clazz.decorateAsClass (function () {
4 this.start = 0;
5 this.end = 0;
6 this.refseq = null;
7 this.seqProps = null;
8 this.selGroups = null;
9 Clazz.instantialize (this, arguments);
10 }, jalview.datamodel, "SeqCigar", jalview.datamodel.CigarSimple);
11 Clazz.defineMethod (c$, "getRefSeq", 
12 function () {
13 return this.refseq;
14 });
15 Clazz.defineMethod (c$, "getStart", 
16 function () {
17 return this.start;
18 });
19 Clazz.defineMethod (c$, "getEnd", 
20 function () {
21 return this.end;
22 });
23 Clazz.overrideMethod (c$, "getSequenceString", 
24 function (GapChar) {
25 return (this.length == 0) ? "" : this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar)[0];
26 }, "~S");
27 Clazz.defineMethod (c$, "getSeq", 
28 function (GapChar) {
29 var seq;
30 if (this.refseq == null || this.length == 0) {
31 return null;
32 }var edit_result = this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar);
33 if (edit_result == null) {
34 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_unexpected_null_from_get_sequence_and_deletions"));
35 }var bounds = edit_result[1];
36 seq =  new jalview.datamodel.Sequence (this.refseq.getName (), edit_result[0], this.refseq.getStart () + this.start + bounds[0], this.refseq.getStart () + this.start + ((bounds[2] == 0) ? -1 : bounds[2]));
37 seq.setDescription (this.refseq.getDescription ());
38 var sstart = seq.getStart ();
39 var send = seq.getEnd ();
40 if (this.seqProps != null) {
41 jalview.analysis.SeqsetUtils.SeqCharacterUnhash (seq, this.seqProps);
42 }seq.setDatasetSequence (this.refseq);
43 seq.setStart (sstart);
44 seq.setEnd (send);
45 return seq;
46 }, "~S");
47 Clazz.defineMethod (c$, "_setSeq", 
48 ($fz = function (seq, initialDeletion, _s, _e) {
49 var hasgaps = false;
50 if (seq == null) {
51 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_set_seq_null"));
52 }if (_s < 0) {
53 throw  new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_s",  Clazz.newArray (-1, [Integer.$valueOf (_s).toString ()])));
54 }var seq_string = seq.getSequenceAsString ();
55 if (_e == 0 || _e < _s || _e > seq_string.length) {
56 _e = seq_string.length;
57 }this.start = seq.findPosition (_s) - seq.getStart ();
58 this.end = seq.findPosition (_e) - seq.getStart ();
59 var l_ungapped = this.end - this.start;
60 var ds = seq.getDatasetSequence ();
61 if (ds == null) {
62 var ungapped = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars,  String.instantialize (seq_string));
63 l_ungapped = ungapped.length;
64 if (l_ungapped == seq.getLength ()) {
65 ds = seq;
66 } else {
67 ds =  new jalview.datamodel.Sequence (seq.getName (), ungapped, seq.getStart (), seq.getStart () + ungapped.length - 1);
68 }}if (ds.getStart () < seq.getStart ()) {
69 var offset = seq.getStart () - ds.getStart ();
70 if (initialDeletion) {
71 this.addDeleted (_s + offset);
72 this.start = 0;
73 this.end += offset;
74 } else {
75 this.start += offset;
76 this.end += offset;
77 }}if (l_ungapped != (_e - _s)) {
78 hasgaps = true;
79 }this.refseq = ds;
80 this.seqProps = jalview.analysis.SeqsetUtils.SeqCharacterHash (seq);
81 if (this.end > ds.getLength ()) {
82 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_seqcigar_possible"));
83 }return hasgaps;
84 }, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,~B,~N,~N");
85 Clazz.makeConstructor (c$, 
86 function (seq, operation, range) {
87 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
88 if (seq == null) {
89 throw  new Error (jalview.util.MessageManager.getString ("error.implmentation_bug_seq_null"));
90 }if (operation.length != range.length) {
91 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_bug_cigar_operation_list_range_list"));
92 }if (operation != null) {
93 this.operation =  Clazz.newCharArray (operation.length + this._inc_length, '\0');
94 this.range =  Clazz.newIntArray (operation.length + this._inc_length, 0);
95 if (this._setSeq (seq, false, 0, 0)) {
96 throw  new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
97 }for (var i = this.length, j = 0; j < operation.length; i++, j++) {
98 var op = operation[j];
99 if (op != 'M' && op != 'I' && op != 'D') {
100 throw  new Error (jalview.util.MessageManager.formatMessage ("error.implementation_bug_cigar_operation",  Clazz.newArray (-1, [Integer.$valueOf (j).toString (), Integer.$valueOf (op.charCodeAt (0)).toString (), Integer.$valueOf ('M'.charCodeAt (0)).toString (), Integer.$valueOf ('I'.charCodeAt (0)).toString (), Integer.$valueOf ('D'.charCodeAt (0)).toString ()])));
101 }this.operation[i] = op;
102 this.range[i] = range[j];
103 }
104 this.length += operation.length;
105 } else {
106 this.operation = null;
107 this.range = null;
108 this.length = 0;
109 if (this._setSeq (seq, false, 0, 0)) {
110 throw  new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
111 }}}, "jalview.datamodel.SequenceI,~A,~A");
112 Clazz.defineMethod (c$, "addMatch", 
113 function (range) {
114 this.addOperation ('M', range);
115 }, "~N");
116 c$.addSequenceOps = Clazz.defineMethod (c$, "addSequenceOps", 
117 function (cigar, seq, startpos, endpos, initialDeletions) {
118 var op = '\u0000';
119 var range = 0;
120 var p = 0;
121 var res = seq.getLength ();
122 if (!initialDeletions) {
123 p = startpos;
124 }while (p <= endpos) {
125 var isGap = (p < res) ? jalview.util.Comparison.isGap (seq.getCharAt (p)) : true;
126 if ((startpos <= p) && (p <= endpos)) {
127 if (isGap) {
128 if (range > 0 && op != 'I') {
129 cigar.addOperation (op, range);
130 range = 0;
131 }op = 'I';
132 range++;
133 } else {
134 if (range > 0 && op != 'M') {
135 cigar.addOperation (op, range);
136 range = 0;
137 }op = 'M';
138 range++;
139 }} else {
140 if (!isGap) {
141 if (range > 0 && op != 'D') {
142 cigar.addOperation (op, range);
143 range = 0;
144 }op = 'D';
145 range++;
146 } else {
147 }}p++;
148 }
149 if (range > 0) {
150 cigar.addOperation (op, range);
151 }}, "jalview.datamodel.CigarBase,jalview.datamodel.SequenceI,~N,~N,~B");
152 Clazz.makeConstructor (c$, 
153 function (seq) {
154 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
155 if (seq == null) {
156 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
157 }this._setSeq (seq, false, 0, 0);
158 jalview.datamodel.SeqCigar.addSequenceOps (this, seq, 0, seq.getLength () - 1, false);
159 }, "jalview.datamodel.SequenceI");
160 Clazz.makeConstructor (c$, 
161 function (seq, start, end) {
162 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
163 if (seq == null) {
164 throw  new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
165 }this._setSeq (seq, false, start, end + 1);
166 jalview.datamodel.SeqCigar.addSequenceOps (this, seq, start, end, false);
167 }, "jalview.datamodel.SequenceI,~N,~N");
168 c$.parseCigar = Clazz.defineMethod (c$, "parseCigar", 
169 function (seq, cigarString) {
170 var opsandrange = jalview.datamodel.CigarBase.parseCigarString (cigarString);
171 return  new jalview.datamodel.SeqCigar (seq, opsandrange[0], opsandrange[1]);
172 }, "jalview.datamodel.SequenceI,~S");
173 c$.createAlignmentSequences = Clazz.defineMethod (c$, "createAlignmentSequences", 
174 function (alseqs, gapCharacter, colsel, segments) {
175 var seqs =  new Array (alseqs.length);
176 var g_seqs =  new Array (alseqs.length);
177 var alseqs_string =  new Array (alseqs.length);
178 var gs_regions =  new Array (alseqs.length);
179 for (var i = 0; i < alseqs.length; i++) {
180 alseqs_string[i] = alseqs[i].getRefSeq ().getSequenceAsString (alseqs[i].start, alseqs[i].end);
181 gs_regions[i] = alseqs[i].getSequenceAndDeletions (alseqs_string[i], gapCharacter);
182 if (gs_regions[i] == null) {
183 throw  new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cigar_seq_no_operations",  Clazz.newArray (-1, [Integer.$valueOf (i).toString ()])));
184 }g_seqs[i] =  new StringBuffer ((gs_regions[i])[0]);
185 }
186 var shifts =  new jalview.util.ShiftList ();
187 for (var i = 0; i < alseqs.length; i++) {
188 var gs_region = ((gs_regions[i])[2]);
189 if (gs_region != null) {
190 for (var hr = 0; hr < gs_region.length; hr++) {
191 var region = gs_region[hr];
192 var insert =  Clazz.newCharArray (region[1] - region[0] + 1, '\0');
193 for (var s = 0; s < insert.length; s++) {
194 insert[s] = gapCharacter;
195 }
196 var inspos = shifts.shift (region[2]);
197 for (var s = 0; s < alseqs.length; s++) {
198 if (s != i) {
199 if (g_seqs[s].length () <= inspos) {
200 for (var l = inspos - g_seqs[s].length (); l > 0; l--) {
201 g_seqs[s].append (gapCharacter);
202 }
203 }g_seqs[s].insert (inspos, insert);
204 } else {
205 g_seqs[s].insert (inspos, alseqs_string[i].substring (region[0], region[1] + 1));
206 }}
207 shifts.addShift (region[2], insert.length);
208 if (segments == null) {
209 colsel.hideColumns (inspos, inspos + insert.length - 1);
210 }}
211 }}
212 for (var i = 0; i < alseqs.length; i++) {
213 var bounds = ((gs_regions[i])[1]);
214 var ref = alseqs[i].getRefSeq ();
215 seqs[i] =  new jalview.datamodel.Sequence (ref.getName (), g_seqs[i].toString (), ref.getStart () + alseqs[i].start + bounds[0], ref.getStart () + alseqs[i].start + (bounds[2] == 0 ? -1 : bounds[2]));
216 seqs[i].setDatasetSequence (ref);
217 seqs[i].setDescription (ref.getDescription ());
218 }
219 if (segments != null) {
220 for (var i = 0; i < segments.length; i += 3) {
221 colsel.hideColumns (segments[i + 1], segments[i + 1] + segments[i + 2] - 1);
222 }
223 }return seqs;
224 }, "~A,~S,jalview.datamodel.ColumnSelection,~A");
225 Clazz.defineMethod (c$, "setGroupMembership", 
226 function (group) {
227 if (this.selGroups == null) {
228 this.selGroups =  new java.util.Hashtable ();
229 }this.selGroups.put (group,  Clazz.newIntArray (0, 0));
230 }, "~O");
231 Clazz.defineMethod (c$, "removeGroupMembership", 
232 function (group) {
233 if (this.selGroups != null && this.selGroups.containsKey (group)) {
234 this.selGroups.remove (group);
235 return true;
236 }return false;
237 }, "~O");
238 Clazz.defineMethod (c$, "clearMemberships", 
239 function () {
240 if (this.selGroups != null) {
241 this.selGroups.clear ();
242 }this.selGroups = null;
243 });
244 Clazz.defineMethod (c$, "getAllMemberships", 
245 function () {
246 if (this.selGroups == null) {
247 return null;
248 }var mmbs =  new Array (this.selGroups.size ());
249 var en = this.selGroups.keys ();
250 for (var i = 0; en.hasMoreElements (); i++) {
251 mmbs[i] = en.nextElement ();
252 }
253 return mmbs;
254 });
255 Clazz.defineMethod (c$, "isMemberOf", 
256 function (sgr) {
257 return (this.selGroups != null) && this.selGroups.get (sgr) != null;
258 }, "~O");
259 });