X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=bin%2Fjalview%2Fdatamodel%2FCigarBase.js;h=5b88b3f3e20cb3f4999f615dfd9d5ae634d0d490;hp=bd75085fa13ba4faf18c0fd32bafb3e92f305cc7;hb=7301a2415adab88038b291fc54caeeb3a5a47a44;hpb=6154cb57a6eac3bb1344b8342495f5bb701ee921 diff --git a/bin/jalview/datamodel/CigarBase.js b/bin/jalview/datamodel/CigarBase.js index bd75085..5b88b3f 100644 --- a/bin/jalview/datamodel/CigarBase.js +++ b/bin/jalview/datamodel/CigarBase.js @@ -1,310 +1,310 @@ -Clazz.declarePackage ("jalview.datamodel"); -Clazz.load (null, "jalview.datamodel.CigarBase", ["jalview.util.MessageManager", "java.lang.Error", "$.Exception", "$.StringBuffer", "java.util.Vector", "javajs.util.AU"], function () { -c$ = Clazz.decorateAsClass (function () { -this.length = 0; -this._inc_length = 10; -this.operation = null; -this.range = null; -Clazz.instantialize (this, arguments); -}, jalview.datamodel, "CigarBase"); -Clazz.makeConstructor (c$, -function () { -}); -Clazz.defineMethod (c$, "getSequenceAndDeletions", -function (reference, GapChar) { -var rlength = 0; -var deletions = javajs.util.AU.newInt2 (this.length); -var trunc_deletions = null; -var sq = new StringBuffer (); -var cursor = 0; -var alcursor = 0; -var start = 0; -var startpos = 0; -var end = 0; -var endpos = 0; -var delcount = -1; -var consecutive_del = false; -if (this.length == 0) { -return null; -}if (reference != null) { -rlength = reference.length; -}var modstart = true; -for (var i = 0; i < this.length; i++) { -switch (this.operation[i]) { -case 'D': -if (!consecutive_del) { -deletions[++delcount] = Clazz.newIntArray (-1, [cursor, 0, alcursor]); -}cursor += this.range[i]; -deletions[delcount][1] = cursor - 1; -consecutive_del = true; -break; -case 'I': -consecutive_del = false; -for (var r = 0; r < this.range[i]; r++) { -sq.append (GapChar); -alcursor++; -} -break; -case 'M': -consecutive_del = false; -if (modstart) { -start = cursor; -startpos = alcursor; -modstart = false; -}if (reference != null) { -var sbend = cursor + this.range[i]; -if (sbend > rlength) { -sq.append (reference.substring (cursor, rlength)); -while (sbend-- >= rlength) { -sq.append (GapChar); -} -} else { -sq.append (reference.substring (cursor, sbend)); -}}alcursor += this.range[i]; -cursor += this.range[i]; -end = cursor - 1; -endpos = alcursor; -break; -default: -throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_seq_cigar_operation", Clazz.newArray (-1, [ new StringBuffer (this.operation[i].charCodeAt (0)).toString ()]))); -} -} -if (++delcount > 0) { -trunc_deletions = Clazz.newIntArray (delcount, 0); -System.arraycopy (deletions, 0, trunc_deletions, 0, delcount); -}deletions = null; -return Clazz.newArray (-1, [((reference != null) ? sq.toString () : null), Clazz.newIntArray (-1, [start, startpos, end, endpos]), trunc_deletions]); -}, "~S,~S"); -Clazz.defineMethod (c$, "compact_operations", -function () { -var i = 1; -if (this.operation == null) { -return; -}var last = this.operation[0]; -while (i < this.length) { -if (last == this.operation[i]) { -this.range[i - 1] += this.range[i]; -var r = this.length - i; -if (r > 0) { -System.arraycopy (this.range, i + 1, this.range, i, r); -System.arraycopy (this.operation, i + 1, this.operation, i, r); -}this.length--; -} else { -last = this.operation[i++]; -}} -}); -c$.parseCigarString = Clazz.defineMethod (c$, "parseCigarString", -function (cigarString) { -var ops = 0; -for (var i = 0, l = cigarString.length; i < l; i++) { -var c = cigarString.charAt (i); -if (c == 'M' || c.charCodeAt (0) == (45) || c == 'I' || c.charCodeAt (0) == (41) || c == 'D' || c.charCodeAt (0) == (36)) { -ops++; -}} -var operation = Clazz.newCharArray (ops, '\0'); -var range = Clazz.newIntArray (ops, 0); -var op = 0; -var i = 0; -var l = cigarString.length; -while (i < l) { -var c; -var j = i; -do { -c = cigarString.charAt (j++); -} while (c >= '0' && c <= '9' && j < l); -if (j >= l && c >= '0' && c <= '9') { -throw new Exception (jalview.util.MessageManager.getString ("exception.unterminated_cigar_string")); -}try { -var rangeint = cigarString.substring (i, j - 1); -range[op] = Integer.parseInt (rangeint); -i = j; -} catch (e) { -if (Clazz.exceptionOf (e, Exception)) { -throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_parse_cigar_string")); -} else { -throw e; -} -} -if (c >= 'a' && c <= 'z') { -c = String.fromCharCode (c.charCodeAt (0) - 32); -}if ((c == 'M' || c == 'I' || c == 'D')) { -operation[op++] = c; -} else { -throw new Exception (jalview.util.MessageManager.formatMessage ("exception.unexpected_operation_cigar_string_pos", Clazz.newArray (-1, [ new StringBuffer (c.charCodeAt (0)).toString (), Integer.$valueOf (i).toString (), cigarString]))); -}} -return Clazz.newArray (-1, [operation, range]); -}, "~S"); -Clazz.defineMethod (c$, "addOperation", -function (op, range) { -if (op >= 'a' && op <= 'z') { -op = String.fromCharCode (op.charCodeAt (0) - 32); -}if (op != 'M' && op != 'D' && op != 'I') { -throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_invalid_operation_string")); -}if (range == 0) { -return; -}if (range < 0) { -throw new Error (jalview.util.MessageManager.getString ("error.invalid_range_string")); -}var lngth = 0; -if (this.operation == null) { -this.operation = Clazz.newCharArray (this._inc_length, '\0'); -this.range = Clazz.newIntArray (this._inc_length, 0); -}if (this.length + 1 == this.operation.length) { -var ops = this.operation; -this.operation = Clazz.newCharArray (this.length + 1 + this._inc_length, '\0'); -System.arraycopy (ops, 0, this.operation, 0, this.length); -ops = null; -var rng = this.range; -this.range = Clazz.newIntArray (this.length + 1 + this._inc_length, 0); -System.arraycopy (rng, 0, this.range, 0, this.length); -rng = null; -}if ((this.length > 0) && (this.operation[this.length - 1] == op)) { -this.length--; -} else { -this.range[this.length] = 0; -}this.operation[this.length] = op; -this.range[this.length++] += range; -}, "~S,~N"); -Clazz.defineMethod (c$, "deleteRange", -function (start, end) { -var deleted = 0; -if (this.length == 0) { -return deleted; -}if (start < 0 || start > end) { -throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_delete_range_out_of_bounds")); -}var cursor = 0; -var rlength = 1 + end - start; -var oldlen = this.length; -var o = 0; -var editing = false; -var oldops = this.operation; -var oldrange = this.range; -this.length = 0; -this.operation = null; -this.range = null; -this.compact_operations (); -while (o < oldlen && cursor <= end && rlength > 0) { -if (oldops[o] == 'D') { -this.addDeleted (oldrange[o++]); -continue; -}var remain = oldrange[o]; -if (!editing) { -if ((cursor + remain) <= start) { -this.addOperation (oldops[o], oldrange[o]); -cursor += oldrange[o++]; -continue; -}editing = true; -if (start - cursor > 0) { -this.addOperation (oldops[o], start - cursor); -remain -= start - cursor; -}}if (o < oldlen && editing && rlength > 0 && remain > 0) { -switch (oldops[o]) { -case 'M': -if (rlength > remain) { -this.addDeleted (remain); -deleted += remain; -} else { -deleted += rlength; -this.addDeleted (rlength); -if (remain - rlength > 0) { -this.addOperation ('M', remain - rlength); -}rlength = 0; -remain = 0; -}break; -case 'I': -if (remain - rlength > 0) { -this.addInsertion (remain - rlength); -rlength = 0; -}break; -case 'D': -throw new Error (jalview.util.MessageManager.getString ("error.implementation_error")); -default: -throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_unknown_operation", Clazz.newArray (-1, [ new StringBuffer (oldops[o].charCodeAt (0)).toString ()]))); -} -rlength -= remain; -remain = oldrange[++o]; -}} -while (o < oldlen) { -this.addOperation (oldops[o], oldrange[o++]); -} -return deleted; -}, "~N,~N"); -Clazz.defineMethod (c$, "hasDeletedRegions", -function () { -for (var i = 0; i < this.length; i++) { -if (this.operation[i] == 'D') { -return true; -}} -return false; -}); -Clazz.defineMethod (c$, "getDeletedRegions", -function () { -if (this.length == 0) { -return null; -}var dr = new java.util.Vector (); -var cursor = 0; -var vcursor = 0; -for (var i = 0; i < this.length; i++) { -switch (this.operation[i]) { -case 'M': -cursor += this.range[i]; -case 'I': -vcursor += this.range[i]; -break; -case 'D': -dr.addElement ( Clazz.newIntArray (-1, [vcursor, cursor, this.range[i]])); -cursor += this.range[i]; -} -} -if (dr.size () == 0) { -return null; -}var delregions = Clazz.newIntArray (dr.size () * 3, 0); -for (var i = 0, l = dr.size (); i < l; i++) { -var reg = dr.elementAt (i); -delregions[i * 3] = reg[0]; -delregions[i * 3 + 1] = reg[1]; -delregions[i * 3 + 2] = reg[2]; -} -return delregions; -}); -Clazz.defineMethod (c$, "getFullWidth", -function () { -var w = 0; -if (this.range != null) { -for (var i = 0; i < this.length; i++) { -w += this.range[i]; -} -}return w; -}); -Clazz.defineMethod (c$, "getWidth", -function () { -var w = 0; -if (this.range != null) { -for (var i = 0; i < this.length; i++) { -if (this.operation[i] == 'M' || this.operation[i] == 'I') { -w += this.range[i]; -}} -}return w; -}); -Clazz.defineMethod (c$, "addInsertion", -function (range) { -this.addOperation ('I', range); -}, "~N"); -Clazz.defineMethod (c$, "addDeleted", -function (range) { -this.addOperation ('D', range); -}, "~N"); -Clazz.defineMethod (c$, "getCigarstring", -function () { -var cigarString = new StringBuffer (); -for (var i = 0; i < this.length; i++) { -cigarString.append ("" + this.range[i]); -cigarString.append (this.operation[i]); -} -return cigarString.toString (); -}); -Clazz.defineStatics (c$, -"D", 'D', -"I", 'I', -"M", 'M', -"_case_shift", String.fromCharCode (32)); -}); +Clazz.declarePackage ("jalview.datamodel"); +Clazz.load (null, "jalview.datamodel.CigarBase", ["jalview.util.MessageManager", "java.lang.Error", "$.Exception", "$.StringBuffer", "java.util.Vector", "javajs.util.AU"], function () { +c$ = Clazz.decorateAsClass (function () { +this.length = 0; +this._inc_length = 10; +this.operation = null; +this.range = null; +Clazz.instantialize (this, arguments); +}, jalview.datamodel, "CigarBase"); +Clazz.makeConstructor (c$, +function () { +}); +Clazz.defineMethod (c$, "getSequenceAndDeletions", +function (reference, GapChar) { +var rlength = 0; +var deletions = javajs.util.AU.newInt2 (this.length); +var trunc_deletions = null; +var sq = new StringBuffer (); +var cursor = 0; +var alcursor = 0; +var start = 0; +var startpos = 0; +var end = 0; +var endpos = 0; +var delcount = -1; +var consecutive_del = false; +if (this.length == 0) { +return null; +}if (reference != null) { +rlength = reference.length; +}var modstart = true; +for (var i = 0; i < this.length; i++) { +switch (this.operation[i]) { +case 'D': +if (!consecutive_del) { +deletions[++delcount] = Clazz.newIntArray (-1, [cursor, 0, alcursor]); +}cursor += this.range[i]; +deletions[delcount][1] = cursor - 1; +consecutive_del = true; +break; +case 'I': +consecutive_del = false; +for (var r = 0; r < this.range[i]; r++) { +sq.append (GapChar); +alcursor++; +} +break; +case 'M': +consecutive_del = false; +if (modstart) { +start = cursor; +startpos = alcursor; +modstart = false; +}if (reference != null) { +var sbend = cursor + this.range[i]; +if (sbend > rlength) { +sq.append (reference.substring (cursor, rlength)); +while (sbend-- >= rlength) { +sq.append (GapChar); +} +} else { +sq.append (reference.substring (cursor, sbend)); +}}alcursor += this.range[i]; +cursor += this.range[i]; +end = cursor - 1; +endpos = alcursor; +break; +default: +throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_seq_cigar_operation", Clazz.newArray (-1, [ new StringBuffer (this.operation[i].charCodeAt (0)).toString ()]))); +} +} +if (++delcount > 0) { +trunc_deletions = Clazz.newIntArray (delcount, 0); +System.arraycopy (deletions, 0, trunc_deletions, 0, delcount); +}deletions = null; +return Clazz.newArray (-1, [((reference != null) ? sq.toString () : null), Clazz.newIntArray (-1, [start, startpos, end, endpos]), trunc_deletions]); +}, "~S,~S"); +Clazz.defineMethod (c$, "compact_operations", +function () { +var i = 1; +if (this.operation == null) { +return; +}var last = this.operation[0]; +while (i < this.length) { +if (last == this.operation[i]) { +this.range[i - 1] += this.range[i]; +var r = this.length - i; +if (r > 0) { +System.arraycopy (this.range, i + 1, this.range, i, r); +System.arraycopy (this.operation, i + 1, this.operation, i, r); +}this.length--; +} else { +last = this.operation[i++]; +}} +}); +c$.parseCigarString = Clazz.defineMethod (c$, "parseCigarString", +function (cigarString) { +var ops = 0; +for (var i = 0, l = cigarString.length; i < l; i++) { +var c = cigarString.charAt (i); +if (c == 'M' || c.charCodeAt (0) == (45) || c == 'I' || c.charCodeAt (0) == (41) || c == 'D' || c.charCodeAt (0) == (36)) { +ops++; +}} +var operation = Clazz.newCharArray (ops, '\0'); +var range = Clazz.newIntArray (ops, 0); +var op = 0; +var i = 0; +var l = cigarString.length; +while (i < l) { +var c; +var j = i; +do { +c = cigarString.charAt (j++); +} while (c >= '0' && c <= '9' && j < l); +if (j >= l && c >= '0' && c <= '9') { +throw new Exception (jalview.util.MessageManager.getString ("exception.unterminated_cigar_string")); +}try { +var rangeint = cigarString.substring (i, j - 1); +range[op] = Integer.parseInt (rangeint); +i = j; +} catch (e) { +if (Clazz.exceptionOf (e, Exception)) { +throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_parse_cigar_string")); +} else { +throw e; +} +} +if (c >= 'a' && c <= 'z') { +c = String.fromCharCode (c.charCodeAt (0) - 32); +}if ((c == 'M' || c == 'I' || c == 'D')) { +operation[op++] = c; +} else { +throw new Exception (jalview.util.MessageManager.formatMessage ("exception.unexpected_operation_cigar_string_pos", Clazz.newArray (-1, [ new StringBuffer (c.charCodeAt (0)).toString (), Integer.$valueOf (i).toString (), cigarString]))); +}} +return Clazz.newArray (-1, [operation, range]); +}, "~S"); +Clazz.defineMethod (c$, "addOperation", +function (op, range) { +if (op >= 'a' && op <= 'z') { +op = String.fromCharCode (op.charCodeAt (0) - 32); +}if (op != 'M' && op != 'D' && op != 'I') { +throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_invalid_operation_string")); +}if (range == 0) { +return; +}if (range < 0) { +throw new Error (jalview.util.MessageManager.getString ("error.invalid_range_string")); +}var lngth = 0; +if (this.operation == null) { +this.operation = Clazz.newCharArray (this._inc_length, '\0'); +this.range = Clazz.newIntArray (this._inc_length, 0); +}if (this.length + 1 == this.operation.length) { +var ops = this.operation; +this.operation = Clazz.newCharArray (this.length + 1 + this._inc_length, '\0'); +System.arraycopy (ops, 0, this.operation, 0, this.length); +ops = null; +var rng = this.range; +this.range = Clazz.newIntArray (this.length + 1 + this._inc_length, 0); +System.arraycopy (rng, 0, this.range, 0, this.length); +rng = null; +}if ((this.length > 0) && (this.operation[this.length - 1] == op)) { +this.length--; +} else { +this.range[this.length] = 0; +}this.operation[this.length] = op; +this.range[this.length++] += range; +}, "~S,~N"); +Clazz.defineMethod (c$, "deleteRange", +function (start, end) { +var deleted = 0; +if (this.length == 0) { +return deleted; +}if (start < 0 || start > end) { +throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_delete_range_out_of_bounds")); +}var cursor = 0; +var rlength = 1 + end - start; +var oldlen = this.length; +var o = 0; +var editing = false; +var oldops = this.operation; +var oldrange = this.range; +this.length = 0; +this.operation = null; +this.range = null; +this.compact_operations (); +while (o < oldlen && cursor <= end && rlength > 0) { +if (oldops[o] == 'D') { +this.addDeleted (oldrange[o++]); +continue; +}var remain = oldrange[o]; +if (!editing) { +if ((cursor + remain) <= start) { +this.addOperation (oldops[o], oldrange[o]); +cursor += oldrange[o++]; +continue; +}editing = true; +if (start - cursor > 0) { +this.addOperation (oldops[o], start - cursor); +remain -= start - cursor; +}}if (o < oldlen && editing && rlength > 0 && remain > 0) { +switch (oldops[o]) { +case 'M': +if (rlength > remain) { +this.addDeleted (remain); +deleted += remain; +} else { +deleted += rlength; +this.addDeleted (rlength); +if (remain - rlength > 0) { +this.addOperation ('M', remain - rlength); +}rlength = 0; +remain = 0; +}break; +case 'I': +if (remain - rlength > 0) { +this.addInsertion (remain - rlength); +rlength = 0; +}break; +case 'D': +throw new Error (jalview.util.MessageManager.getString ("error.implementation_error")); +default: +throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_unknown_operation", Clazz.newArray (-1, [ new StringBuffer (oldops[o].charCodeAt (0)).toString ()]))); +} +rlength -= remain; +remain = oldrange[++o]; +}} +while (o < oldlen) { +this.addOperation (oldops[o], oldrange[o++]); +} +return deleted; +}, "~N,~N"); +Clazz.defineMethod (c$, "hasDeletedRegions", +function () { +for (var i = 0; i < this.length; i++) { +if (this.operation[i] == 'D') { +return true; +}} +return false; +}); +Clazz.defineMethod (c$, "getDeletedRegions", +function () { +if (this.length == 0) { +return null; +}var dr = new java.util.Vector (); +var cursor = 0; +var vcursor = 0; +for (var i = 0; i < this.length; i++) { +switch (this.operation[i]) { +case 'M': +cursor += this.range[i]; +case 'I': +vcursor += this.range[i]; +break; +case 'D': +dr.addElement ( Clazz.newIntArray (-1, [vcursor, cursor, this.range[i]])); +cursor += this.range[i]; +} +} +if (dr.size () == 0) { +return null; +}var delregions = Clazz.newIntArray (dr.size () * 3, 0); +for (var i = 0, l = dr.size (); i < l; i++) { +var reg = dr.elementAt (i); +delregions[i * 3] = reg[0]; +delregions[i * 3 + 1] = reg[1]; +delregions[i * 3 + 2] = reg[2]; +} +return delregions; +}); +Clazz.defineMethod (c$, "getFullWidth", +function () { +var w = 0; +if (this.range != null) { +for (var i = 0; i < this.length; i++) { +w += this.range[i]; +} +}return w; +}); +Clazz.defineMethod (c$, "getWidth", +function () { +var w = 0; +if (this.range != null) { +for (var i = 0; i < this.length; i++) { +if (this.operation[i] == 'M' || this.operation[i] == 'I') { +w += this.range[i]; +}} +}return w; +}); +Clazz.defineMethod (c$, "addInsertion", +function (range) { +this.addOperation ('I', range); +}, "~N"); +Clazz.defineMethod (c$, "addDeleted", +function (range) { +this.addOperation ('D', range); +}, "~N"); +Clazz.defineMethod (c$, "getCigarstring", +function () { +var cigarString = new StringBuffer (); +for (var i = 0; i < this.length; i++) { +cigarString.append ("" + this.range[i]); +cigarString.append (this.operation[i]); +} +return cigarString.toString (); +}); +Clazz.defineStatics (c$, +"D", 'D', +"I", 'I', +"M", 'M', +"_case_shift", String.fromCharCode (32)); +});