X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FPAEContactMatrixTest.java;fp=test%2Fjalview%2Fdatamodel%2FPAEContactMatrixTest.java;h=7426cba24f0e56fd808c01811abe03f9a34923eb;hb=9e40070f757fc662aba39ba6314be4937276ead4;hp=0000000000000000000000000000000000000000;hpb=54d087d5f1e550d0d17882b1e594683146ca7e6a;p=jalview.git diff --git a/test/jalview/datamodel/PAEContactMatrixTest.java b/test/jalview/datamodel/PAEContactMatrixTest.java new file mode 100644 index 0000000..7426cba --- /dev/null +++ b/test/jalview/datamodel/PAEContactMatrixTest.java @@ -0,0 +1,151 @@ +package jalview.datamodel; + +import static org.testng.Assert.*; + +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import jalview.gui.JvOptionPane; +import jalview.util.MapList; +import jalview.ws.datamodel.MappableContactMatrixI; +import jalview.ws.datamodel.alphafold.PAEContactMatrix; + +public class PAEContactMatrixTest +{ + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + static float[][] PAEdata = { + {1.0f,2.0f,3.0f,4.0f,5.0f}, + {2.0f,1.0f,2.0f,3.0f,4.0f}, + {3.0f,2.0f,1.0f,2.0f,3.0f}, + {4.0f,3.0f,2.0f,1.0f,2.0f}, + {5.0f,4.0f,3.0f,2.0f,1.0f}}; + + /** + * test associations for a PAE matrix + */ + @Test(groups = { "Functional" }) + public void testSeqAssociatedPAEMatrix() + { + Sequence seq = new Sequence("Seq","ASDQE"); + AlignmentAnnotation aa = seq.addContactList(new PAEContactMatrix(seq, PAEdata)); + assertNotNull(seq.getContactListFor(aa, 0)); + assertEquals(seq.getContactListFor(aa, 0).getContactAt(0),1.0); + assertNotNull(seq.getContactListFor(aa, 1)); + assertEquals(seq.getContactListFor(aa, 1).getContactAt(1),1.0); + assertNotNull(seq.getContactListFor(aa, 2)); + assertEquals(seq.getContactListFor(aa, 2).getContactAt(2),1.0); + assertNotNull(seq.getContactListFor(aa, 3)); + assertEquals(seq.getContactListFor(aa, 3).getContactAt(3),1.0); + assertNotNull(seq.getContactListFor(aa, 4)); + assertEquals(seq.getContactListFor(aa, 4).getContactAt(4),1.0); + + assertNotNull(seq.getContactListFor(aa, seq.getEnd()-1)); + assertNull(seq.getContactListFor(aa, seq.getEnd())); + + ContactListI cm = seq.getContactListFor(aa, seq.getStart()); + assertEquals(cm.getContactAt(seq.getStart()),1d); + verifyPAEmatrix(seq, aa, 0,0,4); + + // Now associated with sequence not starting at 1 + seq = new Sequence("Seq/5-9","ASDQE"); + ContactMatrixI paematrix = new PAEContactMatrix(seq, PAEdata); + aa = seq.addContactList(paematrix); + cm = seq.getContactListFor(aa, 0); + assertEquals(cm.getContactAt(0),1d); + verifyPAEmatrix(seq, aa, 0, 0, 4); + + // remap - test the MappableContactMatrix.liftOver method + SequenceI newseq = new Sequence("Seq","ASDQEASDQEASDQE"); + Mapping sqmap = new Mapping(seq, new MapList(new int[] {5,8,10,10},new int[] { 5,9}, 1, 1)); + assertTrue(paematrix instanceof MappableContactMatrixI); + + MappableContactMatrixI remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + AlignmentAnnotation newaa = newseq.addContactList(remapped); + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(1))); + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(4))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(5))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(6))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(7))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(8))); + // no mapping for position 9 + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(9))); + // last column + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(10))); + + // remap2 - test with original matrix map from 1-5 remapped to 5-9 + + seq = new Sequence("Seq/1-5","ASDQE"); + paematrix = new PAEContactMatrix(seq, PAEdata); + assertTrue(paematrix instanceof MappableContactMatrixI); + aa = seq.addContactList(paematrix); + + newseq = new Sequence("Seq","ASDQEASDQEASDQE"); + sqmap = new Mapping(seq, new MapList(new int[] {5,9},new int[] { 1,5}, 1, 1)); + + remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + + newaa = newseq.addContactList(remapped); + verify_mapping(newseq, newaa); + + // remap3 - remap2 but mapping sense in liftover is reversed + + seq = new Sequence("Seq/1-5","ASDQE"); + paematrix = new PAEContactMatrix(seq, PAEdata); + assertTrue(paematrix instanceof MappableContactMatrixI); + aa = seq.addContactList(paematrix); + + newseq = new Sequence("Seq","ASDQEASDQEASDQE"); + sqmap = new Mapping(newseq, new MapList(new int[] { 1,5},new int[] {5,9},1, 1)); + + remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap); + assertTrue(remapped instanceof PAEContactMatrix); + + + newaa = newseq.addContactList(remapped); + verify_mapping(newseq, newaa); + + } + /** + * checks that the PAE matrix is located at positions 1-9 in newseq, and columns are not truncated. + * @param newseq + * @param newaa + */ + private void verify_mapping(SequenceI newseq, AlignmentAnnotation newaa) + { + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(1))); + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(4))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(5))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(6))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(7))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(8))); + assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(9))); + // last column should be null this time + assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(10))); + + verifyPAEmatrix(newseq, newaa, 4, 4, 8); + + + } + + private void verifyPAEmatrix(SequenceI seq, AlignmentAnnotation aa, int topl, int rowl, int rowr) + { + for (int f=rowl;f<=rowr;f++) { + ContactListI clist = seq.getContactListFor(aa, f); + assertNotNull(clist,"No ContactListI for position "+(f)); + assertEquals(clist.getContactAt(0), (double) f-topl+1,"for column "+f+" relative to "+topl); + assertEquals(clist.getContactAt(f-topl),1d, "for column and row "+f+" relative to "+topl); + } + } + +}