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