import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
+import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.BitSet;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
import jalview.datamodel.ContactListI;
+import jalview.datamodel.ContactMatrix;
import jalview.datamodel.ContactMatrixI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.GeneLocus;
+import jalview.datamodel.GroupSet;
import jalview.datamodel.HiddenSequences;
import jalview.datamodel.Mapping;
import jalview.datamodel.PDBEntry;
import jalview.util.matcher.Condition;
import jalview.viewmodel.AlignmentViewport;
import jalview.viewmodel.seqfeatures.FeatureRendererModel;
+import jalview.ws.datamodel.MappableContactMatrixI;
import jalview.ws.datamodel.alphafold.PAEContactMatrix;
@Test(singleThreaded = true)
@BeforeClass(alwaysRun = true)
public void setUpJvOptionPane()
{
+ if (Desktop.instance != null)
+ Desktop.instance.closeAll_actionPerformed(null);
JvOptionPane.setInteractiveMode(false);
JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
}
boolean diffseqcols = false, diffgseqcols = false;
SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray();
- for (int p = 0,
- pSize = af.getViewport().getAlignment().getWidth(); p < pSize
- && (!diffseqcols || !diffgseqcols); p++)
+ for (int p = 0, pSize = af.getViewport().getAlignment()
+ .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
{
if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0], null, 0f) != _rcs
.findColour(sqs[5].getCharAt(p), p, sqs[5], null, 0f))
assertTrue(__rcs.isSeqAssociated(),
"Group Annotation colourscheme wasn't sequence associated");
- for (int p = 0,
- pSize = af.getViewport().getAlignment().getWidth(); p < pSize
- && (!diffseqcols || !diffgseqcols); p++)
+ for (int p = 0, pSize = af.getViewport().getAlignment()
+ .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
{
if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1], null,
0f) != _rgcs.findColour(sqs[2].getCharAt(p), p, sqs[2], null,
AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
">seq1\nMATRSQFLVNF\n", DataSourceType.PASTE);
AlignmentI al = af.getViewport().getAlignment();
- SequenceI sq = al.getSequenceAt(0);
+ // PAE matrices are added as reference annotation to the dataset sequence
+ // at least for now.
+ SequenceI sq = al.getSequenceAt(0).getDatasetSequence();
int i = sq.getLength();
float[][] paevals = new float[i][i];
for (i = i - 1; i >= 0; i--)
{
paevals[i][j] = ((i - j < 2)
|| ((i > 1 && i < 5) && (j > 1 && i < 5))) ? 1 : 0f;
- paevals[j][i] = paevals[i][j];
+ paevals[j][i] = -paevals[i][j];
}
}
PAEContactMatrix dummyMat = new PAEContactMatrix(sq, paevals);
+ String content = ContactMatrix.contactToFloatString(dummyMat);
+ Assert.assertTrue(content.contains("\t1.")); // at least one element must be
+ // 1
+ float[][] vals = ContactMatrix.fromFloatStringToContacts(content,
+ sq.getLength(), sq.getLength());
+ assertEquals(vals[3][4], paevals[3][4]);
+ assertEquals(vals[4][3], paevals[4][3]);
+ dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, false,0.5f, false));
+ Assert.assertNotSame(dummyMat.getNewick(), "");
AlignmentAnnotation paeCm = sq.addContactList(dummyMat);
al.addAnnotation(paeCm);
+ // verify store/restore of group bitsets
+ for (BitSet gp : dummyMat.getGroups())
+ {
+ StringBuilder sb = new StringBuilder();
+ for (long val : gp.toLongArray())
+ {
+ if (sb.length() > 0)
+ {
+ sb.append(",");
+ }
+ sb.append(val);
+ }
+ String[] longvals = sb.toString().split(",");
+ long[] newlongvals = new long[longvals.length];
+ for (int lv = 0; lv < longvals.length; lv++)
+ {
+ try
+ {
+ newlongvals[lv] = Long.valueOf(longvals[lv]);
+ } catch (Exception x)
+ {
+ Assert.fail("failed to deserialise bitset element ");
+ }
+ }
+ BitSet newGp = BitSet.valueOf(newlongvals);
+ assertTrue(gp.equals(newGp));
+ }
File tfile = File.createTempFile("testStoreAndRecoverPAEmatrix",
".jvp");
new Jalview2XML(false).saveState(tfile);
af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(),
DataSourceType.FILE);
AlignmentI newAl = af.getViewport().getAlignment();
- SequenceI newSeq = newAl.getSequenceAt(0);
+ SequenceI newSeq = newAl.getSequenceAt(0).getDatasetSequence();
// check annotation of the expected type exists
Assert.assertEquals(newSeq.getAnnotation().length, 1);
Assert.assertEquals(newSeq.getAnnotation()[0].graph, paeCm.graph);
// check a contact matrix was recovered
Assert.assertEquals(newSeq.getContactMaps().size(), 1);
- // and can be found for the annotation
- ContactMatrixI restoredMat = al
+ // and can be found for the annotation on the sequence
+ ContactMatrixI restoredMat = newSeq
.getContactMatrixFor(newSeq.getAnnotation()[0]);
Assert.assertNotNull(restoredMat);
+ MapList oldMap = ((MappableContactMatrixI) dummyMat).getMapFor(sq);
+ MapList newMap = ((MappableContactMatrixI) restoredMat)
+ .getMapFor(newSeq);
+ Assert.assertEquals(oldMap.getFromRanges(), newMap.getFromRanges());
+ Assert.assertEquals(oldMap.getToRanges(), newMap.getToRanges());
+ Assert.assertEquals(oldMap.getFromRatio(), newMap.getFromRatio());
+ Assert.assertEquals(oldMap.getToRatio(), newMap.getToRatio());
for (i = sq.getLength() - 1; i >= 0; i--)
{
ContactListI oldCM = dummyMat.getContactList(i),
newCM = restoredMat.getContactList(i);
for (int j = oldCM.getContactHeight(); j >= 0; j--)
{
- Assert.assertEquals(oldCM.getContactAt(j), newCM.getContactAt(j));
+ double old_j = oldCM.getContactAt(j);
+ double new_j = newCM.getContactAt(j);
+ Assert.assertEquals(old_j, new_j);
}
}
+ Assert.assertEquals(restoredMat.hasGroups(), dummyMat.hasGroups());
+ Assert.assertEquals(restoredMat.getGroups(), dummyMat.getGroups());
+ Assert.assertEquals(restoredMat.hasTree(), dummyMat.hasTree());
+ Assert.assertEquals(restoredMat.getNewick(), dummyMat.getNewick());
+ }
+
+ @Test(groups = "Functional")
+ public void testStoreAndRestoreIDwidthAndAnnotationHeight() throws IOException
+ {
+ Desktop.instance.closeAll_actionPerformed(null);
+ final String SECONDVIEW = "With Diffferent IDwidth";
+ // create a new tempfile
+ File tempfile = File.createTempFile("jvIdWidthStoreRestore", "jvp");
+
+
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded("examples/exampleFile.jvp",
+ DataSourceType.FILE);
+ assertNotNull(af, "Didn't read in the example file correctly.");
+ assertEquals(af.alignPanel.getAlignViewport().getIdWidth(), 144,
+ "Legacy project import should have fixed ID width");
+ assertTrue(af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+
+ af.alignPanel.getAlignViewport().setIdWidth(100);
+ af.alignPanel.updateLayout();
+ assertTrue(af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+ Jalview2XML jv2xml = new jalview.project.Jalview2XML(false);
+ tempfile.delete();
+ jv2xml.saveState(tempfile);
+ assertTrue(jv2xml.errorMessage == null,
+ "Failed to save dummy project with PCA: test broken");
+ af = null;
+ // load again.
+ Desktop.instance.closeAll_actionPerformed(null);
+ af = new FileLoader().LoadFileWaitTillLoaded(
+ tempfile.getCanonicalPath(), DataSourceType.FILE);
+ assertTrue(af.alignPanel.getIdPanel().getIdCanvas()
+ .isManuallyAdjusted());
+ assertEquals(af.alignPanel.getAlignViewport().getIdWidth(), 100,
+ "New project exported and import should have adjusted ID width");
+
+ af.alignPanel.getAlignViewport().setIdWidth(100);
+ af.alignPanel.updateLayout();
+ assertTrue(af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+ // now make it autoadjusted
+ af.alignPanel.getAlignViewport().setIdWidth(-1);
+ af.alignPanel.getIdPanel().getIdCanvas().setManuallyAdjusted(false);
+ af.alignPanel.updateLayout();
+ assertFalse(af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+ assertTrue(af.alignPanel.getAlignViewport().getIdWidth()>-1,
+ "New project exported and import should have adjusted ID width");
+
+ jv2xml = new jalview.project.Jalview2XML(false);
+ tempfile.delete();
+ jv2xml.saveState(tempfile);
+ assertTrue(jv2xml.errorMessage == null,
+ "Failed to save dummy project with PCA: test broken");
+ af = null;
+ // load again.
+ Desktop.instance.closeAll_actionPerformed(null);
+ af = new FileLoader().LoadFileWaitTillLoaded(
+ tempfile.getCanonicalPath(), DataSourceType.FILE);
+ assertFalse(af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+ assertTrue(af.alignPanel.getAlignViewport().getIdWidth()>-1,
+ "New project exported and import should have adjusted ID width");
}
}