X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fproject%2FJalview2xmlTests.java;h=e39d9008ee666a84069a3402a21bd8b7d9f8cfb9;hb=1730be35c0c3fda8f9c63f1fb6dcea7b5fb2ba35;hp=d74cd31cac5e43132590b4889f192babedef1d83;hpb=fdde9a078d7bdb46ed9fb7fe115ea83c84a19c81;p=jalview.git diff --git a/test/jalview/project/Jalview2xmlTests.java b/test/jalview/project/Jalview2xmlTests.java index d74cd31..e39d900 100644 --- a/test/jalview/project/Jalview2xmlTests.java +++ b/test/jalview/project/Jalview2xmlTests.java @@ -32,7 +32,9 @@ import java.awt.Color; 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; @@ -45,6 +47,7 @@ import org.testng.AssertJUnit; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import jalview.analysis.AlignmentUtils; import jalview.analysis.scoremodels.SimilarityParams; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; @@ -59,10 +62,12 @@ 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.datamodel.PDBEntry.Type; +import jalview.datamodel.Sequence; import jalview.datamodel.Sequence.DBModList; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceFeature; @@ -100,6 +105,7 @@ import jalview.util.MapList; 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) @@ -1542,6 +1548,44 @@ public class Jalview2xmlTests extends Jalview2xmlBase } @Test(groups = { "Functional" }) + public void testMatrixToFloatsAndBack() + { + int imax=2000; + int i=imax; + SequenceI sq = new Sequence("dummy","SEQ"); + while (sq.getLength()= 0; i--) + { + for (int j = 0; j <= i; j++) + { + paevals[i][j] = ((i - j < 2) + || ((i > 1 && i < 5) && (j > 1 && i < 5))) ? 1 : 0f; + 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]); + + // test recovery + for (i=0;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); @@ -1569,10 +1613,38 @@ public class Jalview2xmlTests extends Jalview2xmlBase float[][] vals = ContactMatrix.fromFloatStringToContacts(content, sq.getLength(), sq.getLength()); assertEquals(vals[3][4], paevals[3][4]); - dummyMat.makeGroups(0.5f, false); + 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); @@ -1592,13 +1664,22 @@ public class Jalview2xmlTests extends Jalview2xmlBase 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()); @@ -1606,6 +1687,55 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.assertEquals(restoredMat.hasTree(), dummyMat.hasTree()); Assert.assertEquals(restoredMat.getNewick(), dummyMat.getNewick()); + // verify no duplicate PAE matrix data when new view created and saved + + // add reference annotations to view first, then copy + AlignmentUtils.addReferenceAnnotationTo(newAl, newAl.getSequenceAt(0), newSeq.getAnnotation()[0],null); + + AlignmentViewPanel newview = af.newView("copy of PAE", true); + + // redundant asserts here check all is good with the new view firest... + AlignmentI newviewAl = newview.getAlignment(); + SequenceI newviewSeq = newviewAl.getSequenceAt(0); + // check annotation of the expected type exists + Assert.assertEquals(newviewSeq.getAnnotation().length, 1); + Assert.assertEquals(newviewSeq.getAnnotation()[0].graph, paeCm.graph); + // check we have just one contact matrix mapping + Assert.assertEquals(newviewSeq.getContactMaps().size(), 1); + + // and can be found for the annotation on the sequence + ContactMatrixI newviewMat = newviewSeq + .getContactMatrixFor(newviewSeq.getAnnotation()[0]); + Assert.assertNotNull(newviewMat); + + Assert.assertTrue(newviewMat == restoredMat); + + // save the two views and restore. Now look at visible annotation to check all views have shared refs. + + tfile = File.createTempFile("testStoreAndRecoverPAEmatrixTwoViews", + ".jvp"); + new Jalview2XML(false).saveState(tfile); + Desktop.instance.closeAll_actionPerformed(null); + + af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), + DataSourceType.FILE); + newAl = af.getAlignPanels().get(0).getAlignment(); + AlignmentAnnotation view1aa = newAl.getSequenceAt(0).getAnnotation()[0]; + + newviewAl = af.getAlignPanels().get(1).getAlignment(); + AlignmentAnnotation view2aa = newviewAl.getSequenceAt(0).getAnnotation()[0]; + + // annotations are shared across alignment views - so should still have an identical pair of annotations. + Assert.assertTrue(view1aa==view2aa); + // identical annotations means identical contact matrix mappings + Assert.assertEquals(newAl.getDataset().getSequenceAt(0).getContactMaps().size(), 1); + + // TODO Verify when distinct mappable PAEs are created, only one PAE dataset is actually held. + // Assert.assertTrue(view1aa!=view2aa); + // restoredMat = newAl.getContactMatrixFor(view1aa); + // newviewMat = newviewAl.getContactMatrixFor(view2aa); + // Assert.assertTrue(restoredMat!=newviewMat); + } }