X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=2b3e5ce5aa5c8e711fa78307e228ae9a3b00a597;hp=ffa8301721388133d5a24d6a59fa1dcacbeae5b2;hb=d6815a9bc0fc9b9c1fe8e1871a4b0e9d7bd7a11f;hpb=b6b044f8887234eb5ee0146064b906f5ca2a74a5 diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index ffa8301..2b3e5ce 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -20,9 +20,18 @@ */ package jalview.gui; +import static jalview.math.RotatableMatrix.Axis.X; +import static jalview.math.RotatableMatrix.Axis.Y; +import static jalview.math.RotatableMatrix.Axis.Z; + import jalview.analysis.Conservation; +import jalview.analysis.PCA; +import jalview.analysis.scoremodels.ScoreModels; +import jalview.analysis.scoremodels.SimilarityParams; import jalview.api.FeatureColourI; import jalview.api.ViewStyleI; +import jalview.api.analysis.ScoreModelI; +import jalview.api.analysis.SimilarityParamsI; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.AlignedCodonFrame; @@ -31,6 +40,7 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.GraphLine; import jalview.datamodel.PDBEntry; +import jalview.datamodel.Point; import jalview.datamodel.RnaViewerModel; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; @@ -45,15 +55,22 @@ import jalview.ext.varna.RnaModel; import jalview.gui.StructureViewer.ViewerType; import jalview.io.DataSourceType; import jalview.io.FileFormat; +import jalview.math.Matrix; +import jalview.math.MatrixI; import jalview.renderer.ResidueShaderI; import jalview.schemabinding.version2.AlcodMap; import jalview.schemabinding.version2.AlcodonFrame; import jalview.schemabinding.version2.Annotation; import jalview.schemabinding.version2.AnnotationColours; import jalview.schemabinding.version2.AnnotationElement; +import jalview.schemabinding.version2.Axis; import jalview.schemabinding.version2.CalcIdParam; import jalview.schemabinding.version2.CompoundMatcher; import jalview.schemabinding.version2.DBRef; +import jalview.schemabinding.version2.DoubleMatrix; +import jalview.schemabinding.version2.EigenMatrix; +import jalview.schemabinding.version2.EigenMatrixD; +import jalview.schemabinding.version2.EigenMatrixE; import jalview.schemabinding.version2.Features; import jalview.schemabinding.version2.Group; import jalview.schemabinding.version2.HiddenColumns; @@ -68,12 +85,19 @@ import jalview.schemabinding.version2.MappingChoice; import jalview.schemabinding.version2.MatchCondition; import jalview.schemabinding.version2.MatcherSet; import jalview.schemabinding.version2.OtherData; +import jalview.schemabinding.version2.PairwiseMatrix; +import jalview.schemabinding.version2.PcaData; +import jalview.schemabinding.version2.PcaViewer; import jalview.schemabinding.version2.PdbentryItem; import jalview.schemabinding.version2.Pdbids; import jalview.schemabinding.version2.Property; import jalview.schemabinding.version2.RnaViewer; +import jalview.schemabinding.version2.Row; import jalview.schemabinding.version2.SecondaryStructure; +import jalview.schemabinding.version2.SeqPointMax; +import jalview.schemabinding.version2.SeqPointMin; import jalview.schemabinding.version2.Sequence; +import jalview.schemabinding.version2.SequencePoint; import jalview.schemabinding.version2.SequenceSet; import jalview.schemabinding.version2.SequenceSetProperties; import jalview.schemabinding.version2.Setting; @@ -100,6 +124,7 @@ import jalview.util.StringUtils; import jalview.util.jarInputStreamProvider; import jalview.util.matcher.Condition; import jalview.viewmodel.AlignmentViewport; +import jalview.viewmodel.PCAModel; import jalview.viewmodel.ViewportRanges; import jalview.viewmodel.seqfeatures.FeatureRendererSettings; import jalview.viewmodel.seqfeatures.FeaturesDisplayed; @@ -1131,6 +1156,24 @@ public class Jalview2XML } } + /* + * save PCA viewers + */ + if (!storeDS && Desktop.desktop != null) + { + for (JInternalFrame frame : Desktop.desktop.getAllFrames()) + { + if (frame instanceof PCAPanel) + { + PCAPanel panel = (PCAPanel) frame; + if (panel.av.getAlignment() == jal) + { + savePCA(panel, jms); + } + } + } + } + // SAVE ANNOTATIONS /** * store forward refs from an annotationRow to any groups @@ -1508,6 +1551,122 @@ public class Jalview2XML } /** + * Writes PCA viewer attributes and computed values to an XML model object and adds it to the JalviewModel. Any exceptions are reported by logging. + */ + protected void savePCA(PCAPanel panel, JalviewModelSequence jms) + { + try + { + PcaViewer viewer = new PcaViewer(); + viewer.setHeight(panel.getHeight()); + viewer.setWidth(panel.getWidth()); + viewer.setXpos(panel.getX()); + viewer.setYpos(panel.getY()); + viewer.setTitle(panel.getTitle()); + PCAModel pcaModel = panel.pcaModel; + viewer.setScoreModelName(pcaModel.getScoreModelName()); + viewer.setXDim(panel.getSelectedDimensionIndex(X)); + viewer.setYDim(panel.getSelectedDimensionIndex(Y)); + viewer.setZDim(panel.getSelectedDimensionIndex(Z)); + viewer.setBgColour(panel.rc.getBackgroundColour().getRGB()); + viewer.setScaleFactor(panel.rc.scaleFactor); + float[] spMin = panel.rc.getSeqMin(); + SeqPointMin spmin = new SeqPointMin(); + spmin.setXPos(spMin[0]); + spmin.setYPos(spMin[1]); + spmin.setZPos(spMin[2]); + viewer.setSeqPointMin(spmin); + float[] spMax = panel.rc.getSeqMax(); + SeqPointMax spmax = new SeqPointMax(); + spmax.setXPos(spMax[0]); + spmax.setYPos(spMax[1]); + spmax.setZPos(spMax[2]); + viewer.setSeqPointMax(spmax); + viewer.setShowLabels(panel.rc.showLabels); + viewer.setLinkToAllViews(panel.rc.applyToAllViews); + SimilarityParamsI sp = pcaModel.getSimilarityParameters(); + viewer.setIncludeGaps(sp.includeGaps()); + viewer.setMatchGaps(sp.matchGaps()); + viewer.setIncludeGappedColumns(sp.includeGappedColumns()); + viewer.setDenominateByShortestLength(sp.denominateByShortestLength()); + + /* + * sequence points on display + */ + for (jalview.datamodel.SequencePoint spt : pcaModel + .getSequencePoints()) + { + SequencePoint point = new SequencePoint(); + point.setSequenceRef(seqHash(spt.getSequence())); + point.setXPos(spt.coord.x); + point.setYPos(spt.coord.y); + point.setZPos(spt.coord.z); + viewer.addSequencePoint(point); + } + + /* + * (end points of) axes on display + */ + for (Point p : panel.rc.axisEndPoints) + { + Axis axis = new Axis(); + axis.setXPos(p.x); + axis.setYPos(p.y); + axis.setZPos(p.z); + viewer.addAxis(axis); + } + + /* + * raw PCA data + */ + PcaData data = new PcaData(); + viewer.setPcaData(data); + PCA pca = pcaModel.getPcaData(); + data.setDetails(pca.getDetails()); + MatrixI m = pca.getEigenmatrix(); + EigenMatrix eigenMatrix = new EigenMatrix(); + eigenMatrix.setRows(m.height()); + eigenMatrix.setColumns(m.width()); + data.setEigenMatrix(eigenMatrix); + for (int i = 0; i < m.height(); i++) + { + Row row = new Row(); + for (int j = 0; j < m.width(); j++) + { + row.addD(m.getValue(i, j)); + } + eigenMatrix.addRow(row); + } + EigenMatrixD eigenMatrixD = new EigenMatrixD(); + eigenMatrixD.setD(m.getD()); + data.setEigenMatrixD(eigenMatrixD); + EigenMatrixE eigenMatrixE = new EigenMatrixE(); + eigenMatrixE.setD(m.getE()); + data.setEigenMatrixE(eigenMatrixE); + + PairwiseMatrix pm = new PairwiseMatrix(); + m = pca.getPairwiseScores(); + pm.setRows(m.height()); + pm.setColumns(m.width()); + data.setPairwiseMatrix(pm); + for (int i = 0; i < m.height(); i++) + { + Row row = new Row(); + for (int j = 0; j < m.width(); j++) + { + row.addD(m.getValue(i, j)); + } + pm.addRow(row); + } + + jms.addPcaViewer(viewer); + } catch (Throwable t) + { + Cache.log.error("Error saving PCA: " + t.getMessage()); + } + } + + /** * Save any Varna viewers linked to this sequence. Writes an rnaViewer element * for each viewer, with *