JAL-1767 scheme DoubleMatrix type includes D and E vectors (optional)
[jalview.git] / src / jalview / gui / Jalview2XML.java
index e4a53ef..689261c 100644 (file)
@@ -66,10 +66,11 @@ import jalview.schemabinding.version2.AnnotationElement;
 import jalview.schemabinding.version2.Axis;
 import jalview.schemabinding.version2.CalcIdParam;
 import jalview.schemabinding.version2.CompoundMatcher;
+import jalview.schemabinding.version2.D;
 import jalview.schemabinding.version2.DBRef;
 import jalview.schemabinding.version2.DoubleMatrix;
+import jalview.schemabinding.version2.E;
 import jalview.schemabinding.version2.EigenMatrix;
-import jalview.schemabinding.version2.EigenMatrixD;
 import jalview.schemabinding.version2.Features;
 import jalview.schemabinding.version2.Group;
 import jalview.schemabinding.version2.HiddenColumns;
@@ -103,8 +104,6 @@ import jalview.schemabinding.version2.Setting;
 import jalview.schemabinding.version2.StructureState;
 import jalview.schemabinding.version2.ThresholdLine;
 import jalview.schemabinding.version2.Tree;
-import jalview.schemabinding.version2.TridiagonalD;
-import jalview.schemabinding.version2.TridiagonalE;
 import jalview.schemabinding.version2.TridiagonalMatrix;
 import jalview.schemabinding.version2.UserColours;
 import jalview.schemabinding.version2.Viewport;
@@ -1619,35 +1618,24 @@ public class Jalview2XML
       }
 
       /*
-       * raw PCA data
+       * raw PCA data (note we are not restoring PCA inputs here -
+       * alignment view, score model, similarity parameters)
        */
       PcaData data = new PcaData();
       viewer.setPcaData(data);
       PCA pca = pcaModel.getPcaData();
 
       PairwiseMatrix pm = new PairwiseMatrix();
-      MatrixI m = pca.getPairwiseScores();
-      saveDoubleMatrix(m, pm);
+      saveDoubleMatrix(pca.getPairwiseScores(), pm);
       data.setPairwiseMatrix(pm);
 
       TridiagonalMatrix tm = new TridiagonalMatrix();
-      m = pca.getTridiagonal();
-      saveDoubleMatrix(m, tm);
+      saveDoubleMatrix(pca.getTridiagonal(), tm);
       data.setTridiagonalMatrix(tm);
-      TridiagonalD tridiagonalD = new TridiagonalD();
-      tridiagonalD.setD(m.getD());
-      data.setTridiagonalD(tridiagonalD);
-      TridiagonalE tridiagonalE = new TridiagonalE();
-      tridiagonalE.setD(m.getE());
-      data.setTridiagonalE(tridiagonalE);
-
-      m = pca.getEigenmatrix();
+
       EigenMatrix eigenMatrix = new EigenMatrix();
       data.setEigenMatrix(eigenMatrix);
-      saveDoubleMatrix(m, eigenMatrix);
-      EigenMatrixD eigenmatrixD = new EigenMatrixD();
-      eigenmatrixD.setD(m.getD());
-      data.setEigenMatrixD(eigenmatrixD);
+      saveDoubleMatrix(pca.getEigenmatrix(), eigenMatrix);
 
       jms.addPcaViewer(viewer);
     } catch (Throwable t)
@@ -1657,7 +1645,8 @@ public class Jalview2XML
   }
 
   /**
-   * Stores values from a matrix into an XML element
+   * Stores values from a matrix into an XML element, including (if present) the
+   * D or E vectors
    * 
    * @param m
    * @param xmlMatrix
@@ -1672,14 +1661,27 @@ public class Jalview2XML
       Row row = new Row();
       for (int j = 0; j < m.width(); j++)
       {
-        row.addD(m.getValue(i, j));
+        row.addV(m.getValue(i, j));
       }
       xmlMatrix.addRow(row);
     }
+    if (m.getD() != null)
+    {
+      D dVector = new D();
+      dVector.setV(m.getD());
+      xmlMatrix.setD(dVector);
+    }
+    if (m.getE() != null)
+    {
+      E eVector = new E();
+      eVector.setV(m.getE());
+      xmlMatrix.setE(eVector);
+    }
   }
 
   /**
-   * Loads XML matrix data into a new Matrix object
+   * Loads XML matrix data into a new Matrix object, including the D and/or E
+   * vectors (if present)
    * 
    * @param mData
    * @return
@@ -1692,10 +1694,19 @@ public class Jalview2XML
 
     for (int i = 0; i < rows; i++)
     {
-      vals[i] = mData.getRow(i).getD();
+      vals[i] = mData.getRow(i).getV();
     }
 
     MatrixI m = new Matrix(vals);
+    
+    if (mData.getD() != null) {
+      m.setD(mData.getD().getV());
+    }
+    if (mData.getE() != null)
+    {
+      m.setE(mData.getE().getV());
+    }
+
     return m;
   }
 
@@ -5950,12 +5961,9 @@ public class Jalview2XML
         pca.setPairwiseScores(pairwise);
 
         MatrixI triDiag = loadDoubleMatrix(pcaData.getTridiagonalMatrix());
-        triDiag.setD(pcaData.getTridiagonalD().getD());
-        triDiag.setE(pcaData.getTridiagonalE().getD());
         pca.setTridiagonal(triDiag);
 
         MatrixI result = loadDoubleMatrix(pcaData.getEigenMatrix());
-        result.setD(pcaData.getEigenMatrixD().getD());
         pca.setEigenmatrix(result);
 
         panel.pcaModel.setPCA(pca);