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
10 return this.seqcigararray;
\r
12 Clazz.makeConstructor (c$,
\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
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 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
37 startend[0] = alignment.getHeight ();
\r
38 startend[2] = alignment.getWidth () - 1;
\r
40 }, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
\r
41 c$.constructSeqCigarArray = Clazz.defineMethod (c$, "constructSeqCigarArray",
\r
42 function (alignment, selectionGroup) {
\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
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
63 }, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
\r
64 Clazz.defineMethod (c$, "constructFromAlignment",
\r
65 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
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
83 }}if (hideStart > end) {
\r
85 }if (hideEnd > end) {
\r
87 }if (hideStart > hideEnd) {
\r
89 }if (last < hideStart) {
\r
90 this.addOperation ('M', hideStart - last);
\r
91 }this.addOperation ('D', 1 + hideEnd - hideStart);
\r
95 this.addOperation ('M', end - last + 1);
\r
97 this.addOperation ('M', end - start + 1);
\r
98 }}, "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
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
109 sqanddels[c] = null;
\r
113 Clazz.defineMethod (c$, "getSequenceString",
\r
114 function (GapChar) {
\r
115 if (this.length == 0 || this.refCigars == null) {
\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
125 return seqStrings.toString ();
\r
127 Clazz.defineMethod (c$, "getSequenceStrings",
\r
128 function (GapChar) {
\r
129 if (this.length == 0 || this.refCigars == null || this.refCigars.length == 0) {
\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
138 Clazz.defineMethod (c$, "applyDeletions",
\r
141 if (this.length == 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
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
162 for (var s = 0; s < this.refCigars.length; s++) {
\r
163 var d = this.refCigars[s].deleteRange (delstart, delend);
\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
178 Clazz.defineMethod (c$, "getSeqCigarArray",
\r
180 if (!this.isSeqCigarArray ()) {
\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