JAL-1454 increase max for tqli iterations and throw exception rather than call System...
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Tue, 25 Feb 2014 16:43:08 +0000 (16:43 +0000)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Tue, 25 Feb 2014 16:43:08 +0000 (16:43 +0000)
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];