JAL-1454 increase max for tqli iterations and throw exception rather than call System...
[jalview.git] / src / jalview / math / Matrix.java
index 057bdbf..8d95203 100755 (executable)
@@ -48,6 +48,12 @@ public class Matrix
   public double[] e; // off diagonal
 
   /**
+   * maximum number of iterations for tqli 
+   * 
+   */
+  int maxIter = 45; // fudge - add 15 iterations, just in case
+
+  /**
    * Creates a new Matrix object.
    * 
    * @param value
@@ -342,11 +348,11 @@ public class Matrix
       }
     }
   }
-
+  
   /**
    * DOCUMENT ME!
    */
-  public void tqli()
+  public void tqli() throws Exception
   {
     int n = rows;
 
@@ -393,10 +399,9 @@ public class Matrix
         {
           iter++;
 
-          if (iter == 30)
+          if (iter == maxIter)
           {
-            System.err.print("Too many iterations in tqli");
-            System.exit(0); // JBPNote - should this really be here ???
+            throw new Exception("Too many iterations in tqli ("+maxIter+")");
           }
           else
           {
@@ -596,7 +601,7 @@ public class Matrix
   /**
    * DOCUMENT ME!
    */
-  public void tqli2()
+  public void tqli2() throws Exception
   {
     int n = rows;
 
@@ -643,10 +648,9 @@ public class Matrix
         {
           iter++;
 
-          if (iter == 30)
+          if (iter == maxIter)
           {
-            System.err.print("Too many iterations in tqli");
-            System.exit(0); // JBPNote - same as above - not a graceful exit!
+            throw new Exception ("Too many iterations in tqli2 (max is "+maxIter+")");
           }
           else
           {
@@ -780,7 +784,7 @@ public class Matrix
    * @param args
    *          DOCUMENT ME!
    */
-  public static void main(String[] args)
+  public static void main(String[] args) throws Exception
   {
     int n = Integer.parseInt(args[0]);
     double[][] in = new double[n][n];