1 package jalview.datamodel;
3 import static org.testng.Assert.*;
5 import org.testng.Assert;
6 import org.testng.annotations.BeforeClass;
7 import org.testng.annotations.Test;
9 import jalview.gui.JvOptionPane;
10 import jalview.util.MapList;
11 import jalview.ws.datamodel.MappableContactMatrixI;
12 import jalview.ws.datamodel.alphafold.PAEContactMatrix;
14 public class PAEContactMatrixTest
16 @BeforeClass(alwaysRun = true)
17 public void setUpJvOptionPane()
19 JvOptionPane.setInteractiveMode(false);
20 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
23 static float[][] PAEdata = {
24 {1.0f,2.0f,3.0f,4.0f,5.0f},
25 {2.0f,1.0f,2.0f,3.0f,4.0f},
26 {3.0f,2.0f,1.0f,2.0f,3.0f},
27 {4.0f,3.0f,2.0f,1.0f,2.0f},
28 {5.0f,4.0f,3.0f,2.0f,1.0f}};
31 * test associations for a PAE matrix
33 @Test(groups = { "Functional" })
34 public void testSeqAssociatedPAEMatrix()
36 Sequence seq = new Sequence("Seq","ASDQE");
37 AlignmentAnnotation aa = seq.addContactList(new PAEContactMatrix(seq, PAEdata));
38 assertNotNull(seq.getContactListFor(aa, 0));
39 assertEquals(seq.getContactListFor(aa, 0).getContactAt(0),1.0);
40 assertNotNull(seq.getContactListFor(aa, 1));
41 assertEquals(seq.getContactListFor(aa, 1).getContactAt(1),1.0);
42 assertNotNull(seq.getContactListFor(aa, 2));
43 assertEquals(seq.getContactListFor(aa, 2).getContactAt(2),1.0);
44 assertNotNull(seq.getContactListFor(aa, 3));
45 assertEquals(seq.getContactListFor(aa, 3).getContactAt(3),1.0);
46 assertNotNull(seq.getContactListFor(aa, 4));
47 assertEquals(seq.getContactListFor(aa, 4).getContactAt(4),1.0);
49 assertNotNull(seq.getContactListFor(aa, seq.getEnd()-1));
50 assertNull(seq.getContactListFor(aa, seq.getEnd()));
52 ContactListI cm = seq.getContactListFor(aa, seq.getStart());
53 assertEquals(cm.getContactAt(seq.getStart()),1d);
54 verifyPAEmatrix(seq, aa, 0,0,4);
56 // Now associated with sequence not starting at 1
57 seq = new Sequence("Seq/5-9","ASDQE");
58 ContactMatrixI paematrix = new PAEContactMatrix(seq, PAEdata);
59 aa = seq.addContactList(paematrix);
60 cm = seq.getContactListFor(aa, 0);
61 assertEquals(cm.getContactAt(0),1d);
62 verifyPAEmatrix(seq, aa, 0, 0, 4);
64 // remap - test the MappableContactMatrix.liftOver method
65 SequenceI newseq = new Sequence("Seq","ASDQEASDQEASDQE");
66 Mapping sqmap = new Mapping(seq, new MapList(new int[] {5,8,10,10},new int[] { 5,9}, 1, 1));
67 assertTrue(paematrix instanceof MappableContactMatrixI);
69 MappableContactMatrixI remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap);
70 assertTrue(remapped instanceof PAEContactMatrix);
72 AlignmentAnnotation newaa = newseq.addContactList(remapped);
73 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(1)));
74 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(4)));
75 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(5)));
76 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(6)));
77 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(7)));
78 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(8)));
79 // no mapping for position 9
80 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(9)));
82 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(10)));
84 // remap2 - test with original matrix map from 1-5 remapped to 5-9
86 seq = new Sequence("Seq/1-5","ASDQE");
87 paematrix = new PAEContactMatrix(seq, PAEdata);
88 assertTrue(paematrix instanceof MappableContactMatrixI);
89 aa = seq.addContactList(paematrix);
91 newseq = new Sequence("Seq","ASDQEASDQEASDQE");
92 sqmap = new Mapping(seq, new MapList(new int[] {5,9},new int[] { 1,5}, 1, 1));
94 remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap);
95 assertTrue(remapped instanceof PAEContactMatrix);
98 newaa = newseq.addContactList(remapped);
99 verify_mapping(newseq, newaa);
101 // remap3 - remap2 but mapping sense in liftover is reversed
103 seq = new Sequence("Seq/1-5","ASDQE");
104 paematrix = new PAEContactMatrix(seq, PAEdata);
105 assertTrue(paematrix instanceof MappableContactMatrixI);
106 aa = seq.addContactList(paematrix);
108 newseq = new Sequence("Seq","ASDQEASDQEASDQE");
109 sqmap = new Mapping(newseq, new MapList(new int[] { 1,5},new int[] {5,9},1, 1));
111 remapped = ((MappableContactMatrixI)paematrix).liftOver(newseq, sqmap);
112 assertTrue(remapped instanceof PAEContactMatrix);
115 newaa = newseq.addContactList(remapped);
116 verify_mapping(newseq, newaa);
120 * checks that the PAE matrix is located at positions 1-9 in newseq, and columns are not truncated.
124 private void verify_mapping(SequenceI newseq, AlignmentAnnotation newaa)
126 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(1)));
127 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(4)));
128 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(5)));
129 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(6)));
130 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(7)));
131 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(8)));
132 assertNotNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(9)));
133 // last column should be null this time
134 assertNull(newseq.getContactListFor(newaa, -1+newseq.findIndex(10)));
136 verifyPAEmatrix(newseq, newaa, 4, 4, 8);
141 private void verifyPAEmatrix(SequenceI seq, AlignmentAnnotation aa, int topl, int rowl, int rowr)
143 for (int f=rowl;f<=rowr;f++) {
144 ContactListI clist = seq.getContactListFor(aa, f);
145 assertNotNull(clist,"No ContactListI for position "+(f));
146 assertEquals(clist.getContactAt(0), (double) f-topl+1,"for column "+f+" relative to "+topl);
147 assertEquals(clist.getContactAt(f-topl),1d, "for column and row "+f+" relative to "+topl);