JAL-1807 still testing
[jalviewjs.git] / bin / jalview / math / Matrix.js
index 22cb59d..e260277 100644 (file)
-Clazz.declarePackage ("jalview.math");
-Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.value = null;
-this.rows = 0;
-this.cols = 0;
-this.d = null;
-this.e = null;
-this.maxIter = 45;
-Clazz.instantialize (this, arguments);
-}, jalview.math, "Matrix");
-Clazz.makeConstructor (c$, 
-function (value, rows, cols) {
-this.rows = rows;
-this.cols = cols;
-this.value = value;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "transpose", 
-function () {
-var out =  Clazz.newDoubleArray (this.cols, this.rows, 0);
-for (var i = 0; i < this.cols; i++) {
-for (var j = 0; j < this.rows; j++) {
-out[i][j] = this.value[j][i];
-}
-}
-return  new jalview.math.Matrix (out, this.cols, this.rows);
-});
-Clazz.defineMethod (c$, "print", 
-function (ps) {
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]);
-}
-ps.println ();
-}
-}, "java.io.PrintStream");
-Clazz.defineMethod (c$, "preMultiply", 
-function ($in) {
-var tmp =  Clazz.newDoubleArray ($in.rows, this.cols, 0);
-for (var i = 0; i < $in.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-tmp[i][j] = 0.0;
-for (var k = 0; k < $in.cols; k++) {
-tmp[i][j] += ($in.value[i][k] * this.value[k][j]);
-}
-}
-}
-return  new jalview.math.Matrix (tmp, $in.rows, this.cols);
-}, "jalview.math.Matrix");
-Clazz.defineMethod (c$, "vectorPostMultiply", 
-function ($in) {
-var out =  Clazz.newDoubleArray ($in.length, 0);
-for (var i = 0; i < $in.length; i++) {
-out[i] = 0.0;
-for (var k = 0; k < $in.length; k++) {
-out[i] += (this.value[i][k] * $in[k]);
-}
-}
-return out;
-}, "~A");
-Clazz.defineMethod (c$, "postMultiply", 
-function ($in) {
-var out =  Clazz.newDoubleArray (this.rows, $in.cols, 0);
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < $in.cols; j++) {
-out[i][j] = 0.0;
-for (var k = 0; k < this.rows; k++) {
-out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]);
-}
-}
-}
-return  new jalview.math.Matrix (out, this.cols, $in.rows);
-}, "jalview.math.Matrix");
-Clazz.defineMethod (c$, "copy", 
-function () {
-var newmat =  Clazz.newDoubleArray (this.rows, this.cols, 0);
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-newmat[i][j] = this.value[i][j];
-}
-}
-return  new jalview.math.Matrix (newmat, this.rows, this.cols);
-});
-Clazz.defineMethod (c$, "tred", 
-function () {
-var n = this.rows;
-var l;
-var k;
-var j;
-var i;
-var scale;
-var hh;
-var h;
-var g;
-var f;
-this.d =  Clazz.newDoubleArray (this.rows, 0);
-this.e =  Clazz.newDoubleArray (this.rows, 0);
-for (i = n; i >= 2; i--) {
-l = i - 1;
-h = 0.0;
-scale = 0.0;
-if (l > 1) {
-for (k = 1; k <= l; k++) {
-scale += Math.abs (this.value[i - 1][k - 1]);
-}
-if (scale == 0.0) {
-this.e[i - 1] = this.value[i - 1][l - 1];
-} else {
-for (k = 1; k <= l; k++) {
-this.value[i - 1][k - 1] /= scale;
-h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]);
-}
-f = this.value[i - 1][l - 1];
-if (f > 0) {
-g = -1.0 * Math.sqrt (h);
-} else {
-g = Math.sqrt (h);
-}this.e[i - 1] = scale * g;
-h -= (f * g);
-this.value[i - 1][l - 1] = f - g;
-f = 0.0;
-for (j = 1; j <= l; j++) {
-this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h;
-g = 0.0;
-for (k = 1; k <= j; k++) {
-g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]);
-}
-for (k = j + 1; k <= l; k++) {
-g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]);
-}
-this.e[j - 1] = g / h;
-f += (this.e[j - 1] * this.value[i - 1][j - 1]);
-}
-hh = f / (h + h);
-for (j = 1; j <= l; j++) {
-f = this.value[i - 1][j - 1];
-g = this.e[j - 1] - (hh * f);
-this.e[j - 1] = g;
-for (k = 1; k <= j; k++) {
-this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1]));
-}
-}
-}} else {
-this.e[i - 1] = this.value[i - 1][l - 1];
-}this.d[i - 1] = h;
-}
-this.d[0] = 0.0;
-this.e[0] = 0.0;
-for (i = 1; i <= n; i++) {
-l = i - 1;
-if (this.d[i - 1] != 0.0) {
-for (j = 1; j <= l; j++) {
-g = 0.0;
-for (k = 1; k <= l; k++) {
-g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]);
-}
-for (k = 1; k <= l; k++) {
-this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]);
-}
-}
-}this.d[i - 1] = this.value[i - 1][i - 1];
-this.value[i - 1][i - 1] = 1.0;
-for (j = 1; j <= l; j++) {
-this.value[j - 1][i - 1] = 0.0;
-this.value[i - 1][j - 1] = 0.0;
-}
-}
-});
-Clazz.defineMethod (c$, "tqli", 
-function () {
-var n = this.rows;
-var m;
-var l;
-var iter;
-var i;
-var k;
-var s;
-var r;
-var p;
-;var g;
-var f;
-var dd;
-var c;
-var b;
-for (i = 2; i <= n; i++) {
-this.e[i - 2] = this.e[i - 1];
-}
-this.e[n - 1] = 0.0;
-for (l = 1; l <= n; l++) {
-iter = 0;
-do {
-for (m = l; m <= (n - 1); m++) {
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {
-break;
-}}
-if (m != l) {
-iter++;
-if (iter == this.maxIter) {
-throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()])));
-} else {
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
-r = Math.sqrt ((g * g) + 1.0);
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
-c = 1.0;
-s = c;
-p = 0.0;
-for (i = m - 1; i >= l; i--) {
-f = s * this.e[i - 1];
-b = c * this.e[i - 1];
-if (Math.abs (f) >= Math.abs (g)) {
-c = g / f;
-r = Math.sqrt ((c * c) + 1.0);
-this.e[i] = f * r;
-s = 1.0 / r;
-c *= s;
-} else {
-s = f / g;
-r = Math.sqrt ((s * s) + 1.0);
-this.e[i] = g * r;
-c = 1.0 / r;
-s *= c;
-}g = this.d[i] - p;
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
-p = s * r;
-this.d[i] = g + p;
-g = (c * r) - b;
-for (k = 1; k <= n; k++) {
-f = this.value[k - 1][i];
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
-}
-}
-this.d[l - 1] = this.d[l - 1] - p;
-this.e[l - 1] = g;
-this.e[m - 1] = 0.0;
-}} while (m != l);
-}
-});
-Clazz.defineMethod (c$, "tred2", 
-function () {
-var n = this.rows;
-var l;
-var k;
-var j;
-var i;
-var scale;
-var hh;
-var h;
-var g;
-var f;
-this.d =  Clazz.newDoubleArray (this.rows, 0);
-this.e =  Clazz.newDoubleArray (this.rows, 0);
-for (i = n - 1; i >= 1; i--) {
-l = i - 1;
-h = 0.0;
-scale = 0.0;
-if (l > 0) {
-for (k = 0; k < l; k++) {
-scale += Math.abs (this.value[i][k]);
-}
-if (scale == 0.0) {
-this.e[i] = this.value[i][l];
-} else {
-for (k = 0; k < l; k++) {
-this.value[i][k] /= scale;
-h += (this.value[i][k] * this.value[i][k]);
-}
-f = this.value[i][l];
-if (f > 0) {
-g = -1.0 * Math.sqrt (h);
-} else {
-g = Math.sqrt (h);
-}this.e[i] = scale * g;
-h -= (f * g);
-this.value[i][l] = f - g;
-f = 0.0;
-for (j = 0; j < l; j++) {
-this.value[j][i] = this.value[i][j] / h;
-g = 0.0;
-for (k = 0; k < j; k++) {
-g += (this.value[j][k] * this.value[i][k]);
-}
-for (k = j; k < l; k++) {
-g += (this.value[k][j] * this.value[i][k]);
-}
-this.e[j] = g / h;
-f += (this.e[j] * this.value[i][j]);
-}
-hh = f / (h + h);
-for (j = 0; j < l; j++) {
-f = this.value[i][j];
-g = this.e[j] - (hh * f);
-this.e[j] = g;
-for (k = 0; k < j; k++) {
-this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k]));
-}
-}
-}} else {
-this.e[i] = this.value[i][l];
-}this.d[i] = h;
-}
-this.d[0] = 0.0;
-this.e[0] = 0.0;
-for (i = 0; i < n; i++) {
-l = i - 1;
-if (this.d[i] != 0.0) {
-for (j = 0; j < l; j++) {
-g = 0.0;
-for (k = 0; k < l; k++) {
-g += (this.value[i][k] * this.value[k][j]);
-}
-for (k = 0; k < l; k++) {
-this.value[k][j] -= (g * this.value[k][i]);
-}
-}
-}this.d[i] = this.value[i][i];
-this.value[i][i] = 1.0;
-for (j = 0; j < l; j++) {
-this.value[j][i] = 0.0;
-this.value[i][j] = 0.0;
-}
-}
-});
-Clazz.defineMethod (c$, "tqli2", 
-function () {
-var n = this.rows;
-var m;
-var l;
-var iter;
-var i;
-var k;
-var s;
-var r;
-var p;
-;var g;
-var f;
-var dd;
-var c;
-var b;
-for (i = 2; i <= n; i++) {
-this.e[i - 2] = this.e[i - 1];
-}
-this.e[n - 1] = 0.0;
-for (l = 1; l <= n; l++) {
-iter = 0;
-do {
-for (m = l; m <= (n - 1); m++) {
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {
-break;
-}}
-if (m != l) {
-iter++;
-if (iter == this.maxIter) {
-throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()])));
-} else {
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
-r = Math.sqrt ((g * g) + 1.0);
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
-c = 1.0;
-s = c;
-p = 0.0;
-for (i = m - 1; i >= l; i--) {
-f = s * this.e[i - 1];
-b = c * this.e[i - 1];
-if (Math.abs (f) >= Math.abs (g)) {
-c = g / f;
-r = Math.sqrt ((c * c) + 1.0);
-this.e[i] = f * r;
-s = 1.0 / r;
-c *= s;
-} else {
-s = f / g;
-r = Math.sqrt ((s * s) + 1.0);
-this.e[i] = g * r;
-c = 1.0 / r;
-s *= c;
-}g = this.d[i] - p;
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
-p = s * r;
-this.d[i] = g + p;
-g = (c * r) - b;
-for (k = 1; k <= n; k++) {
-f = this.value[k - 1][i];
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
-}
-}
-this.d[l - 1] = this.d[l - 1] - p;
-this.e[l - 1] = g;
-this.e[m - 1] = 0.0;
-}} while (m != l);
-}
-});
-Clazz.defineMethod (c$, "sign", 
-function (a, b) {
-if (b < 0) {
-return -Math.abs (a);
-} else {
-return Math.abs (a);
-}}, "~N,~N");
-Clazz.defineMethod (c$, "getColumn", 
-function (n) {
-var out =  Clazz.newDoubleArray (this.rows, 0);
-for (var i = 0; i < this.rows; i++) {
-out[i] = this.value[i][n];
-}
-return out;
-}, "~N");
-Clazz.defineMethod (c$, "printD", 
-function (ps) {
-for (var j = 0; j < this.rows; j++) {
-jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]);
-}
-}, "java.io.PrintStream");
-Clazz.defineMethod (c$, "printE", 
-function (ps) {
-for (var j = 0; j < this.rows; j++) {
-jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]);
-}
-}, "java.io.PrintStream");
-});
+Clazz.declarePackage ("jalview.math");\r
+Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () {\r
+c$ = Clazz.decorateAsClass (function () {\r
+this.value = null;\r
+this.rows = 0;\r
+this.cols = 0;\r
+this.d = null;\r
+this.e = null;\r
+this.maxIter = 45;\r
+Clazz.instantialize (this, arguments);\r
+}, jalview.math, "Matrix");\r
+Clazz.makeConstructor (c$, \r
+function (value, rows, cols) {\r
+this.rows = rows;\r
+this.cols = cols;\r
+this.value = value;\r
+}, "~A,~N,~N");\r
+Clazz.defineMethod (c$, "transpose", \r
+function () {\r
+var out =  Clazz.newDoubleArray (this.cols, this.rows, 0);\r
+for (var i = 0; i < this.cols; i++) {\r
+for (var j = 0; j < this.rows; j++) {\r
+out[i][j] = this.value[j][i];\r
+}\r
+}\r
+return  new jalview.math.Matrix (out, this.cols, this.rows);\r
+});\r
+Clazz.defineMethod (c$, "print", \r
+function (ps) {\r
+for (var i = 0; i < this.rows; i++) {\r
+for (var j = 0; j < this.cols; j++) {\r
+jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]);\r
+}\r
+ps.println ();\r
+}\r
+}, "java.io.PrintStream");\r
+Clazz.defineMethod (c$, "preMultiply", \r
+function ($in) {\r
+var tmp =  Clazz.newDoubleArray ($in.rows, this.cols, 0);\r
+for (var i = 0; i < $in.rows; i++) {\r
+for (var j = 0; j < this.cols; j++) {\r
+tmp[i][j] = 0.0;\r
+for (var k = 0; k < $in.cols; k++) {\r
+tmp[i][j] += ($in.value[i][k] * this.value[k][j]);\r
+}\r
+}\r
+}\r
+return  new jalview.math.Matrix (tmp, $in.rows, this.cols);\r
+}, "jalview.math.Matrix");\r
+Clazz.defineMethod (c$, "vectorPostMultiply", \r
+function ($in) {\r
+var out =  Clazz.newDoubleArray ($in.length, 0);\r
+for (var i = 0; i < $in.length; i++) {\r
+out[i] = 0.0;\r
+for (var k = 0; k < $in.length; k++) {\r
+out[i] += (this.value[i][k] * $in[k]);\r
+}\r
+}\r
+return out;\r
+}, "~A");\r
+Clazz.defineMethod (c$, "postMultiply", \r
+function ($in) {\r
+var out =  Clazz.newDoubleArray (this.rows, $in.cols, 0);\r
+for (var i = 0; i < this.rows; i++) {\r
+for (var j = 0; j < $in.cols; j++) {\r
+out[i][j] = 0.0;\r
+for (var k = 0; k < this.rows; k++) {\r
+out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]);\r
+}\r
+}\r
+}\r
+return  new jalview.math.Matrix (out, this.cols, $in.rows);\r
+}, "jalview.math.Matrix");\r
+Clazz.defineMethod (c$, "copy", \r
+function () {\r
+var newmat =  Clazz.newDoubleArray (this.rows, this.cols, 0);\r
+for (var i = 0; i < this.rows; i++) {\r
+for (var j = 0; j < this.cols; j++) {\r
+newmat[i][j] = this.value[i][j];\r
+}\r
+}\r
+return  new jalview.math.Matrix (newmat, this.rows, this.cols);\r
+});\r
+Clazz.defineMethod (c$, "tred", \r
+function () {\r
+var n = this.rows;\r
+var l;\r
+var k;\r
+var j;\r
+var i;\r
+var scale;\r
+var hh;\r
+var h;\r
+var g;\r
+var f;\r
+this.d =  Clazz.newDoubleArray (this.rows, 0);\r
+this.e =  Clazz.newDoubleArray (this.rows, 0);\r
+for (i = n; i >= 2; i--) {\r
+l = i - 1;\r
+h = 0.0;\r
+scale = 0.0;\r
+if (l > 1) {\r
+for (k = 1; k <= l; k++) {\r
+scale += Math.abs (this.value[i - 1][k - 1]);\r
+}\r
+if (scale == 0.0) {\r
+this.e[i - 1] = this.value[i - 1][l - 1];\r
+} else {\r
+for (k = 1; k <= l; k++) {\r
+this.value[i - 1][k - 1] /= scale;\r
+h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]);\r
+}\r
+f = this.value[i - 1][l - 1];\r
+if (f > 0) {\r
+g = -1.0 * Math.sqrt (h);\r
+} else {\r
+g = Math.sqrt (h);\r
+}this.e[i - 1] = scale * g;\r
+h -= (f * g);\r
+this.value[i - 1][l - 1] = f - g;\r
+f = 0.0;\r
+for (j = 1; j <= l; j++) {\r
+this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h;\r
+g = 0.0;\r
+for (k = 1; k <= j; k++) {\r
+g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]);\r
+}\r
+for (k = j + 1; k <= l; k++) {\r
+g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]);\r
+}\r
+this.e[j - 1] = g / h;\r
+f += (this.e[j - 1] * this.value[i - 1][j - 1]);\r
+}\r
+hh = f / (h + h);\r
+for (j = 1; j <= l; j++) {\r
+f = this.value[i - 1][j - 1];\r
+g = this.e[j - 1] - (hh * f);\r
+this.e[j - 1] = g;\r
+for (k = 1; k <= j; k++) {\r
+this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1]));\r
+}\r
+}\r
+}} else {\r
+this.e[i - 1] = this.value[i - 1][l - 1];\r
+}this.d[i - 1] = h;\r
+}\r
+this.d[0] = 0.0;\r
+this.e[0] = 0.0;\r
+for (i = 1; i <= n; i++) {\r
+l = i - 1;\r
+if (this.d[i - 1] != 0.0) {\r
+for (j = 1; j <= l; j++) {\r
+g = 0.0;\r
+for (k = 1; k <= l; k++) {\r
+g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]);\r
+}\r
+for (k = 1; k <= l; k++) {\r
+this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]);\r
+}\r
+}\r
+}this.d[i - 1] = this.value[i - 1][i - 1];\r
+this.value[i - 1][i - 1] = 1.0;\r
+for (j = 1; j <= l; j++) {\r
+this.value[j - 1][i - 1] = 0.0;\r
+this.value[i - 1][j - 1] = 0.0;\r
+}\r
+}\r
+});\r
+Clazz.defineMethod (c$, "tqli", \r
+function () {\r
+var n = this.rows;\r
+var m;\r
+var l;\r
+var iter;\r
+var i;\r
+var k;\r
+var s;\r
+var r;\r
+var p;\r
+;var g;\r
+var f;\r
+var dd;\r
+var c;\r
+var b;\r
+for (i = 2; i <= n; i++) {\r
+this.e[i - 2] = this.e[i - 1];\r
+}\r
+this.e[n - 1] = 0.0;\r
+for (l = 1; l <= n; l++) {\r
+iter = 0;\r
+do {\r
+for (m = l; m <= (n - 1); m++) {\r
+dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);\r
+if ((Math.abs (this.e[m - 1]) + dd) == dd) {\r
+break;\r
+}}\r
+if (m != l) {\r
+iter++;\r
+if (iter == this.maxIter) {\r
+throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()])));\r
+} else {\r
+}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);\r
+r = Math.sqrt ((g * g) + 1.0);\r
+g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));\r
+c = 1.0;\r
+s = c;\r
+p = 0.0;\r
+for (i = m - 1; i >= l; i--) {\r
+f = s * this.e[i - 1];\r
+b = c * this.e[i - 1];\r
+if (Math.abs (f) >= Math.abs (g)) {\r
+c = g / f;\r
+r = Math.sqrt ((c * c) + 1.0);\r
+this.e[i] = f * r;\r
+s = 1.0 / r;\r
+c *= s;\r
+} else {\r
+s = f / g;\r
+r = Math.sqrt ((s * s) + 1.0);\r
+this.e[i] = g * r;\r
+c = 1.0 / r;\r
+s *= c;\r
+}g = this.d[i] - p;\r
+r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);\r
+p = s * r;\r
+this.d[i] = g + p;\r
+g = (c * r) - b;\r
+for (k = 1; k <= n; k++) {\r
+f = this.value[k - 1][i];\r
+this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);\r
+this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);\r
+}\r
+}\r
+this.d[l - 1] = this.d[l - 1] - p;\r
+this.e[l - 1] = g;\r
+this.e[m - 1] = 0.0;\r
+}} while (m != l);\r
+}\r
+});\r
+Clazz.defineMethod (c$, "tred2", \r
+function () {\r
+var n = this.rows;\r
+var l;\r
+var k;\r
+var j;\r
+var i;\r
+var scale;\r
+var hh;\r
+var h;\r
+var g;\r
+var f;\r
+this.d =  Clazz.newDoubleArray (this.rows, 0);\r
+this.e =  Clazz.newDoubleArray (this.rows, 0);\r
+for (i = n - 1; i >= 1; i--) {\r
+l = i - 1;\r
+h = 0.0;\r
+scale = 0.0;\r
+if (l > 0) {\r
+for (k = 0; k < l; k++) {\r
+scale += Math.abs (this.value[i][k]);\r
+}\r
+if (scale == 0.0) {\r
+this.e[i] = this.value[i][l];\r
+} else {\r
+for (k = 0; k < l; k++) {\r
+this.value[i][k] /= scale;\r
+h += (this.value[i][k] * this.value[i][k]);\r
+}\r
+f = this.value[i][l];\r
+if (f > 0) {\r
+g = -1.0 * Math.sqrt (h);\r
+} else {\r
+g = Math.sqrt (h);\r
+}this.e[i] = scale * g;\r
+h -= (f * g);\r
+this.value[i][l] = f - g;\r
+f = 0.0;\r
+for (j = 0; j < l; j++) {\r
+this.value[j][i] = this.value[i][j] / h;\r
+g = 0.0;\r
+for (k = 0; k < j; k++) {\r
+g += (this.value[j][k] * this.value[i][k]);\r
+}\r
+for (k = j; k < l; k++) {\r
+g += (this.value[k][j] * this.value[i][k]);\r
+}\r
+this.e[j] = g / h;\r
+f += (this.e[j] * this.value[i][j]);\r
+}\r
+hh = f / (h + h);\r
+for (j = 0; j < l; j++) {\r
+f = this.value[i][j];\r
+g = this.e[j] - (hh * f);\r
+this.e[j] = g;\r
+for (k = 0; k < j; k++) {\r
+this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k]));\r
+}\r
+}\r
+}} else {\r
+this.e[i] = this.value[i][l];\r
+}this.d[i] = h;\r
+}\r
+this.d[0] = 0.0;\r
+this.e[0] = 0.0;\r
+for (i = 0; i < n; i++) {\r
+l = i - 1;\r
+if (this.d[i] != 0.0) {\r
+for (j = 0; j < l; j++) {\r
+g = 0.0;\r
+for (k = 0; k < l; k++) {\r
+g += (this.value[i][k] * this.value[k][j]);\r
+}\r
+for (k = 0; k < l; k++) {\r
+this.value[k][j] -= (g * this.value[k][i]);\r
+}\r
+}\r
+}this.d[i] = this.value[i][i];\r
+this.value[i][i] = 1.0;\r
+for (j = 0; j < l; j++) {\r
+this.value[j][i] = 0.0;\r
+this.value[i][j] = 0.0;\r
+}\r
+}\r
+});\r
+Clazz.defineMethod (c$, "tqli2", \r
+function () {\r
+var n = this.rows;\r
+var m;\r
+var l;\r
+var iter;\r
+var i;\r
+var k;\r
+var s;\r
+var r;\r
+var p;\r
+;var g;\r
+var f;\r
+var dd;\r
+var c;\r
+var b;\r
+for (i = 2; i <= n; i++) {\r
+this.e[i - 2] = this.e[i - 1];\r
+}\r
+this.e[n - 1] = 0.0;\r
+for (l = 1; l <= n; l++) {\r
+iter = 0;\r
+do {\r
+for (m = l; m <= (n - 1); m++) {\r
+dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);\r
+if ((Math.abs (this.e[m - 1]) + dd) == dd) {\r
+break;\r
+}}\r
+if (m != l) {\r
+iter++;\r
+if (iter == this.maxIter) {\r
+throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()])));\r
+} else {\r
+}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);\r
+r = Math.sqrt ((g * g) + 1.0);\r
+g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));\r
+c = 1.0;\r
+s = c;\r
+p = 0.0;\r
+for (i = m - 1; i >= l; i--) {\r
+f = s * this.e[i - 1];\r
+b = c * this.e[i - 1];\r
+if (Math.abs (f) >= Math.abs (g)) {\r
+c = g / f;\r
+r = Math.sqrt ((c * c) + 1.0);\r
+this.e[i] = f * r;\r
+s = 1.0 / r;\r
+c *= s;\r
+} else {\r
+s = f / g;\r
+r = Math.sqrt ((s * s) + 1.0);\r
+this.e[i] = g * r;\r
+c = 1.0 / r;\r
+s *= c;\r
+}g = this.d[i] - p;\r
+r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);\r
+p = s * r;\r
+this.d[i] = g + p;\r
+g = (c * r) - b;\r
+for (k = 1; k <= n; k++) {\r
+f = this.value[k - 1][i];\r
+this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);\r
+this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);\r
+}\r
+}\r
+this.d[l - 1] = this.d[l - 1] - p;\r
+this.e[l - 1] = g;\r
+this.e[m - 1] = 0.0;\r
+}} while (m != l);\r
+}\r
+});\r
+Clazz.defineMethod (c$, "sign", \r
+function (a, b) {\r
+if (b < 0) {\r
+return -Math.abs (a);\r
+} else {\r
+return Math.abs (a);\r
+}}, "~N,~N");\r
+Clazz.defineMethod (c$, "getColumn", \r
+function (n) {\r
+var out =  Clazz.newDoubleArray (this.rows, 0);\r
+for (var i = 0; i < this.rows; i++) {\r
+out[i] = this.value[i][n];\r
+}\r
+return out;\r
+}, "~N");\r
+Clazz.defineMethod (c$, "printD", \r
+function (ps) {\r
+for (var j = 0; j < this.rows; j++) {\r
+jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]);\r
+}\r
+}, "java.io.PrintStream");\r
+Clazz.defineMethod (c$, "printE", \r
+function (ps) {\r
+for (var j = 0; j < this.rows; j++) {\r
+jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]);\r
+}\r
+}, "java.io.PrintStream");\r
+});\r