1 package jalview.analysis;
3 import static org.testng.Assert.assertNotNull;
4 import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
6 import jalview.analysis.scoremodels.FeatureDistanceModel;
7 import jalview.analysis.scoremodels.PIDModel;
8 import jalview.analysis.scoremodels.ScoreModels;
9 import jalview.analysis.scoremodels.SimilarityParams;
10 import jalview.api.analysis.ScoreModelI;
11 import jalview.api.analysis.SimilarityParamsI;
12 import jalview.api.analysis.ViewBasedAnalysisI;
13 import jalview.datamodel.AlignmentView;
14 import jalview.datamodel.SequenceFeature;
15 import jalview.datamodel.SequenceI;
16 import jalview.gui.AlignFrame;
17 import jalview.io.DataSourceType;
18 import jalview.io.FileLoader;
19 import jalview.math.MatrixI;
21 import org.testng.annotations.BeforeTest;
22 import org.testng.annotations.Test;
27 private static final String TESTSEQS = ">s1\nAFRK\n>s2\nAFSS\n>s3\nAFTL\n>s4\nARSL\n";
28 private AlignFrame af;
30 @Test(groups = "Functional")
31 public void testComputeSimilarity_blosum62()
34 SimilarityParamsI params = new SimilarityParams(true, false, true,
36 AlignmentView view = af.getViewport().getAlignmentView(false);
37 ScoreModelI blosum62 = ScoreModels.getInstance().getBlosum62();
38 PCA pca = new PCA(view, blosum62, params);
40 MatrixI result = pca.computeSimilarity();
41 assertNotNull(result);
44 * AFRK^AFRK = 4+6+5+5 = 20
45 * AFRK^AFSS = 4+6+-1+0 = 9
46 * AFRK^AFTL = 4+6+-1+-2 = 7
47 * AFRK^ARSL = 4+-3+-1+-2 = -2
49 assertArrayEquals(result.getRow(0), new double[] { 20, 9, 7, -2 },
53 @BeforeTest(alwaysRun = true)
56 af = new FileLoader().LoadFileWaitTillLoaded(TESTSEQS,
57 DataSourceType.PASTE);
60 @Test(groups = "Functional")
61 public void testComputeSimilarity_PID()
64 SimilarityParamsI params = new SimilarityParams(true, false, true,
66 AlignmentView view = af.getViewport().getAlignmentView(false);
67 ScoreModelI pid = new PIDModel();
68 PCA pca = new PCA(view, pid, params);
70 MatrixI result = pca.computeSimilarity();
71 assertNotNull(result);
74 * AFRK^AFRK = 4 scaled to width
79 assertArrayEquals(new double[] { 4d, 2d, 2d, 1d },
80 result.getRow(0), 0.00001d);
83 @Test(groups = "Functional")
84 public void testComputeSimilarity_featureDistances()
87 SimilarityParamsI params = new SimilarityParams(true, false, true,
89 AlignmentView view = af.getViewport().getAlignmentView(false);
90 ScoreModelI featureModel = new FeatureDistanceModel();
91 PCA pca = new PCA(view, featureModel, params);
93 MatrixI result = pca.computeSimilarity();
96 * no features = no scores!
98 assertArrayEquals(new double[] { 0d, 0d, 0d, 0d },
99 result.getRow(0), 0.00001d);
101 SequenceI[] seqs = af.getViewport().getAlignment().getSequencesArray();
102 seqs[0].addSequenceFeature(new SequenceFeature("Cath", "", 1, 4, 0f,
104 seqs[1].addSequenceFeature(new SequenceFeature("Cath", "", 1, 4, 0f,
106 seqs[2].addSequenceFeature(new SequenceFeature("Pfam", "", 1, 4, 0f,
108 seqs[3].addSequenceFeature(new SequenceFeature("Pfam", "", 2, 3, 0f,
111 af.getFeatureRenderer().findAllFeatures(true);
112 ((ViewBasedAnalysisI) featureModel)
113 .configureFromAlignmentView(af.alignPanel);
116 * feature distance scores are (average number of features not shared):
119 * seq1^seq3 8 / 4 = 2
120 * seq1^seq4 6 / 4 = 1.5
121 * seq2^seq3 8 / 4 = 2
122 * seq2^seq4 6 / 3 = 1.5
123 * seq3^seq4 2 / 4 = 0.5
130 * subtract each value from the max value to get similarity scores
132 result = pca.computeSimilarity();
133 // assertArrayEquals(new double[] { 2d, 2d, 0d, 0.5d }, result.getRow(0),
135 // assertArrayEquals(new double[] { 2d, 2d, 0d, 0.5d }, result.getRow(1),
137 // assertArrayEquals(new double[] { 0d, 0d, 2d, 1.5d }, result.getRow(2),
139 // assertArrayEquals(new double[] { 0.5d, 0.5d, 1.5d, 2d },
140 // result.getRow(3), 0.00001d);
143 * JAL-2424 bug means instead we get distance scores of
147 * so (until bug is fixed)
154 assertArrayEquals(new double[] { 1.6d, 1.6d, 0d, 0.4d },
157 assertArrayEquals(new double[] { 1.6d, 1.6d, 0d, 0.4d },
160 assertArrayEquals(new double[] { 0d, 0d, 1.6d, 1.2d },
163 assertArrayEquals(new double[] { 0.4d, 0.4d, 1.2d, 1.6d },
164 result.getRow(3), 0.00001d);