1 Clazz.declarePackage ("jalview.datamodel");
\r
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 () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
7 this.seqProps = null;
\r
8 this.selGroups = null;
\r
9 Clazz.instantialize (this, arguments);
\r
10 }, jalview.datamodel, "SeqCigar", jalview.datamodel.CigarSimple);
\r
11 Clazz.defineMethod (c$, "getRefSeq",
\r
15 Clazz.defineMethod (c$, "getStart",
\r
19 Clazz.defineMethod (c$, "getEnd",
\r
23 Clazz.overrideMethod (c$, "getSequenceString",
\r
24 function (GapChar) {
\r
25 return (this.length == 0) ? "" : this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar)[0];
\r
27 Clazz.defineMethod (c$, "getSeq",
\r
28 function (GapChar) {
\r
30 if (this.refseq == null || this.length == 0) {
\r
32 }var edit_result = this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar);
\r
33 if (edit_result == null) {
\r
34 throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_unexpected_null_from_get_sequence_and_deletions"));
\r
35 }var bounds = edit_result[1];
\r
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]));
\r
37 seq.setDescription (this.refseq.getDescription ());
\r
38 var sstart = seq.getStart ();
\r
39 var send = seq.getEnd ();
\r
40 if (this.seqProps != null) {
\r
41 jalview.analysis.SeqsetUtils.SeqCharacterUnhash (seq, this.seqProps);
\r
42 }seq.setDatasetSequence (this.refseq);
\r
43 seq.setStart (sstart);
\r
47 Clazz.defineMethod (c$, "_setSeq",
\r
48 function (seq, initialDeletion, _s, _e) {
\r
49 var hasgaps = false;
\r
51 throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_set_seq_null"));
\r
53 throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_s", Clazz.newArray (-1, [Integer.$valueOf (_s).toString ()])));
\r
54 }var seq_string = seq.getSequenceAsString ();
\r
55 if (_e == 0 || _e < _s || _e > seq_string.length) {
\r
56 _e = seq_string.length;
\r
57 }this.start = seq.findPosition (_s) - seq.getStart ();
\r
58 this.end = seq.findPosition (_e) - seq.getStart ();
\r
59 var l_ungapped = this.end - this.start;
\r
60 var ds = seq.getDatasetSequence ();
\r
62 var ungapped = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (seq_string));
\r
63 l_ungapped = ungapped.length;
\r
64 if (l_ungapped == seq.getLength ()) {
\r
67 ds = new jalview.datamodel.Sequence (seq.getName (), ungapped, seq.getStart (), seq.getStart () + ungapped.length - 1);
\r
68 }}if (ds.getStart () < seq.getStart ()) {
\r
69 var offset = seq.getStart () - ds.getStart ();
\r
70 if (initialDeletion) {
\r
71 this.addDeleted (_s + offset);
\r
75 this.start += offset;
\r
77 }}if (l_ungapped != (_e - _s)) {
\r
80 this.seqProps = jalview.analysis.SeqsetUtils.SeqCharacterHash (seq);
\r
81 if (this.end > ds.getLength ()) {
\r
82 throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_seqcigar_possible"));
\r
84 }, "jalview.datamodel.SequenceI,~B,~N,~N");
\r
85 Clazz.makeConstructor (c$,
\r
86 function (seq, operation, range) {
\r
87 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
\r
89 throw new Error (jalview.util.MessageManager.getString ("error.implmentation_bug_seq_null"));
\r
90 }if (operation.length != range.length) {
\r
91 throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_cigar_operation_list_range_list"));
\r
92 }if (operation != null) {
\r
93 this.operation = Clazz.newCharArray (operation.length + this._inc_length, '\0');
\r
94 this.range = Clazz.newIntArray (operation.length + this._inc_length, 0);
\r
95 if (this._setSeq (seq, false, 0, 0)) {
\r
96 throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
\r
97 }for (var i = this.length, j = 0; j < operation.length; i++, j++) {
\r
98 var op = operation[j];
\r
99 if (op != 'M' && op != 'I' && op != 'D') {
\r
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 ()])));
\r
101 }this.operation[i] = op;
\r
102 this.range[i] = range[j];
\r
104 this.length += operation.length;
\r
106 this.operation = null;
\r
109 if (this._setSeq (seq, false, 0, 0)) {
\r
110 throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
\r
111 }}}, "jalview.datamodel.SequenceI,~A,~A");
\r
112 Clazz.defineMethod (c$, "addMatch",
\r
114 this.addOperation ('M', range);
\r
116 c$.addSequenceOps = Clazz.defineMethod (c$, "addSequenceOps",
\r
117 function (cigar, seq, startpos, endpos, initialDeletions) {
\r
121 var res = seq.getLength ();
\r
122 if (!initialDeletions) {
\r
124 }while (p <= endpos) {
\r
125 var isGap = (p < res) ? jalview.util.Comparison.isGap (seq.getCharAt (p)) : true;
\r
126 if ((startpos <= p) && (p <= endpos)) {
\r
128 if (range > 0 && op != 'I') {
\r
129 cigar.addOperation (op, range);
\r
134 if (range > 0 && op != 'M') {
\r
135 cigar.addOperation (op, range);
\r
141 if (range > 0 && op != 'D') {
\r
142 cigar.addOperation (op, range);
\r
150 cigar.addOperation (op, range);
\r
151 }}, "jalview.datamodel.CigarBase,jalview.datamodel.SequenceI,~N,~N,~B");
\r
152 Clazz.makeConstructor (c$,
\r
154 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
\r
156 throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
\r
157 }this._setSeq (seq, false, 0, 0);
\r
158 jalview.datamodel.SeqCigar.addSequenceOps (this, seq, 0, seq.getLength () - 1, false);
\r
159 }, "jalview.datamodel.SequenceI");
\r
160 Clazz.makeConstructor (c$,
\r
161 function (seq, start, end) {
\r
162 Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
\r
164 throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
\r
165 }this._setSeq (seq, false, start, end + 1);
\r
166 jalview.datamodel.SeqCigar.addSequenceOps (this, seq, start, end, false);
\r
167 }, "jalview.datamodel.SequenceI,~N,~N");
\r
168 c$.parseCigar = Clazz.defineMethod (c$, "parseCigar",
\r
169 function (seq, cigarString) {
\r
170 var opsandrange = jalview.datamodel.CigarBase.parseCigarString (cigarString);
\r
171 return new jalview.datamodel.SeqCigar (seq, opsandrange[0], opsandrange[1]);
\r
172 }, "jalview.datamodel.SequenceI,~S");
\r
173 c$.createAlignmentSequences = Clazz.defineMethod (c$, "createAlignmentSequences",
\r
174 function (alseqs, gapCharacter, colsel, segments) {
\r
175 var seqs = new Array (alseqs.length);
\r
176 var g_seqs = new Array (alseqs.length);
\r
177 var alseqs_string = new Array (alseqs.length);
\r
178 var gs_regions = new Array (alseqs.length);
\r
179 for (var i = 0; i < alseqs.length; i++) {
\r
180 alseqs_string[i] = alseqs[i].getRefSeq ().getSequenceAsString (alseqs[i].start, alseqs[i].end);
\r
181 gs_regions[i] = alseqs[i].getSequenceAndDeletions (alseqs_string[i], gapCharacter);
\r
182 if (gs_regions[i] == null) {
\r
183 throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cigar_seq_no_operations", Clazz.newArray (-1, [Integer.$valueOf (i).toString ()])));
\r
184 }g_seqs[i] = new StringBuffer ((gs_regions[i])[0]);
\r
186 var shifts = new jalview.util.ShiftList ();
\r
187 for (var i = 0; i < alseqs.length; i++) {
\r
188 var gs_region = ((gs_regions[i])[2]);
\r
189 if (gs_region != null) {
\r
190 for (var hr = 0; hr < gs_region.length; hr++) {
\r
191 var region = gs_region[hr];
\r
192 var insert = Clazz.newCharArray (region[1] - region[0] + 1, '\0');
\r
193 for (var s = 0; s < insert.length; s++) {
\r
194 insert[s] = gapCharacter;
\r
196 var inspos = shifts.shift (region[2]);
\r
197 for (var s = 0; s < alseqs.length; s++) {
\r
199 if (g_seqs[s].length () <= inspos) {
\r
200 for (var l = inspos - g_seqs[s].length (); l > 0; l--) {
\r
201 g_seqs[s].append (gapCharacter);
\r
203 }g_seqs[s].insert (inspos, insert);
\r
205 g_seqs[s].insert (inspos, alseqs_string[i].substring (region[0], region[1] + 1));
\r
207 shifts.addShift (region[2], insert.length);
\r
208 if (segments == null) {
\r
209 colsel.hideColumns (inspos, inspos + insert.length - 1);
\r
212 for (var i = 0; i < alseqs.length; i++) {
\r
213 var bounds = ((gs_regions[i])[1]);
\r
214 var ref = alseqs[i].getRefSeq ();
\r
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]));
\r
216 seqs[i].setDatasetSequence (ref);
\r
217 seqs[i].setDescription (ref.getDescription ());
\r
219 if (segments != null) {
\r
220 for (var i = 0; i < segments.length; i += 3) {
\r
221 colsel.hideColumns (segments[i + 1], segments[i + 1] + segments[i + 2] - 1);
\r
224 }, "~A,~S,jalview.datamodel.ColumnSelection,~A");
\r
225 Clazz.defineMethod (c$, "setGroupMembership",
\r
227 if (this.selGroups == null) {
\r
228 this.selGroups = new java.util.Hashtable ();
\r
229 }this.selGroups.put (group, Clazz.newIntArray (0, 0));
\r
231 Clazz.defineMethod (c$, "removeGroupMembership",
\r
233 if (this.selGroups != null && this.selGroups.containsKey (group)) {
\r
234 this.selGroups.remove (group);
\r
238 Clazz.defineMethod (c$, "clearMemberships",
\r
240 if (this.selGroups != null) {
\r
241 this.selGroups.clear ();
\r
242 }this.selGroups = null;
\r
244 Clazz.defineMethod (c$, "getAllMemberships",
\r
246 if (this.selGroups == null) {
\r
248 }var mmbs = new Array (this.selGroups.size ());
\r
249 var en = this.selGroups.keys ();
\r
250 for (var i = 0; en.hasMoreElements (); i++) {
\r
251 mmbs[i] = en.nextElement ();
\r
255 Clazz.defineMethod (c$, "isMemberOf",
\r
257 return (this.selGroups != null) && this.selGroups.get (sgr) != null;
\r