package jalview.analysis;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import jalview.analysis.AlignmentUtils.MappingResult;
import jalview.datamodel.AlignedCodonFrame;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
/*
* Check two mappings (one for Mouse, one for Human)
*/
- assertEquals(2, protein.getCodonFrames().length);
- assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(0)).length);
- assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(1)).length);
+ assertEquals(2, protein.getCodonFrames().size());
+ assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(0)).size());
+ assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(1)).size());
/*
* Inspect mapping for Human protein
*/
- AlignedCodonFrame humanMapping = protein.getCodonFrame(protein
- .getSequenceAt(0))[0];
+ AlignedCodonFrame humanMapping = protein.getCodonFrame(
+ protein.getSequenceAt(0)).get(0);
assertEquals(1, humanMapping.getdnaSeqs().length);
assertEquals(cdna1.getSequenceAt(1).getDatasetSequence(),
humanMapping.getdnaSeqs()[0]);
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 1, 9 }, mapList.getFromRanges()));
+ { 1, 9 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
/*
* Inspect mappings for Mouse protein
*/
- AlignedCodonFrame mouseMapping1 = protein.getCodonFrame(protein
- .getSequenceAt(1))[0];
+ AlignedCodonFrame mouseMapping1 = protein.getCodonFrame(
+ protein.getSequenceAt(1)).get(0);
assertEquals(2, mouseMapping1.getdnaSeqs().length);
assertEquals(cdna1.getSequenceAt(0).getDatasetSequence(),
mouseMapping1.getdnaSeqs()[0]);
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 1, 9 }, mapList.getFromRanges()));
+ { 1, 9 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
}
}
/*
* Check two mappings (one for Mouse, one for Human)
*/
- assertEquals(2, protein.getCodonFrames().length);
- assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(0)).length);
- assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(1)).length);
+ assertEquals(2, protein.getCodonFrames().size());
+ assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(0)).size());
+ assertEquals(1, protein.getCodonFrame(protein.getSequenceAt(1)).size());
/*
* Inspect mapping for Human protein - should map to 2nd and 4th cDNA seqs
*/
- AlignedCodonFrame humanMapping = protein.getCodonFrame(protein
- .getSequenceAt(0))[0];
+ AlignedCodonFrame humanMapping = protein.getCodonFrame(
+ protein.getSequenceAt(0)).get(0);
assertEquals(2, humanMapping.getdnaSeqs().length);
assertEquals(cdna1.getSequenceAt(1).getDatasetSequence(),
humanMapping.getdnaSeqs()[0]);
Mapping[] protMappings = humanMapping.getProtMappings();
// two mappings, both to cDNA with stop codon
assertEquals(2, protMappings.length);
+
MapList mapList = protMappings[0].getMap();
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 1, 9 }, mapList.getFromRanges()));
+ { 1, 9 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
+
mapList = protMappings[1].getMap();
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 1, 9 }, mapList.getFromRanges()));
+ { 1, 9 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
/*
* Inspect mapping for Mouse protein - should map to 1st/3rd/5th cDNA seqs
*/
- AlignedCodonFrame mouseMapping = protein.getCodonFrame(protein
- .getSequenceAt(1))[0];
+ AlignedCodonFrame mouseMapping = protein.getCodonFrame(
+ protein.getSequenceAt(1)).get(0);
assertEquals(3, mouseMapping.getdnaSeqs().length);
assertEquals(cdna1.getSequenceAt(0).getDatasetSequence(),
mouseMapping.getdnaSeqs()[0]);
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 4, 12 }, mapList.getFromRanges()));
+ { 4, 12 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
// second mapping to cDNA with stop codon
mapList = protMappings[1].getMap();
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 1, 9 }, mapList.getFromRanges()));
+ { 1, 9 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
// third mapping to cDNA with start and stop codon
mapList = protMappings[2].getMap();
assertEquals(3, mapList.getFromRatio());
assertEquals(1, mapList.getToRatio());
assertTrue(Arrays.equals(new int[]
- { 4, 12 }, mapList.getFromRanges()));
+ { 4, 12 }, mapList.getFromRanges().get(0)));
+ assertEquals(1, mapList.getFromRanges().size());
assertTrue(Arrays.equals(new int[]
- { 1, 3 }, mapList.getToRanges()));
+ { 1, 3 }, mapList.getToRanges().get(0)));
+ assertEquals(1, mapList.getToRanges().size());
}
/**
checkAlignSequenceAs("GG-G-AA-A-C-CC-T-TT", "AL",
false, true, map, "GG-G-AA-ACCCTTT");
}
+
+ /**
+ * Test for the method that generates an aligned translated sequence from one
+ * mapping.
+ */
+ @Test
+ public void testGetAlignedTranslation_dnaLikeProtein()
+ {
+ // dna alignment will be replaced
+ SequenceI dna = new Sequence("Seq1", "T-G-CC-A--T-TAC-CAG-");
+ dna.createDatasetSequence();
+ // protein alignment will be 'applied' to dna
+ SequenceI protein = new Sequence("Seq1", "-CH-Y--Q-");
+ protein.createDatasetSequence();
+ MapList map = new MapList(new int[]
+ { 1, 12 }, new int[]
+ { 1, 4 }, 3, 1);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ acf.addMap(dna.getDatasetSequence(), protein.getDatasetSequence(), map);
+
+ final SequenceI aligned = AlignmentUtils
+ .getAlignedTranslation(protein, '-', acf);
+ assertEquals("---TGCCAT---TAC------CAG---", aligned.getSequenceAsString());
+ assertSame(aligned.getDatasetSequence(), dna.getDatasetSequence());
+ }
+
+ /**
+ * Test the method that realigns protein to match mapped codon alignment.
+ */
+ @Test
+ public void testAlignProteinAsDna()
+ {
+ // seq1 codons are [1,2,3] [4,5,6] [7,8,9] [10,11,12]
+ SequenceI dna1 = new Sequence("Seq1", "TGCCATTACCAG-");
+ // seq2 codons are [1,3,4] [5,6,7] [8,9,10] [11,12,13]
+ SequenceI dna2 = new Sequence("Seq2", "T-GCCATTACCAG");
+ // seq3 codons are [1,2,3] [4,5,7] [8,9,10] [11,12,13]
+ SequenceI dna3 = new Sequence("Seq3", "TGCCA-TTACCAG");
+ AlignmentI dna = new Alignment(new SequenceI[]
+ { dna1, dna2, dna3 });
+ dna.setDataset(null);
+
+ // protein alignment will be realigned like dna
+ SequenceI prot1 = new Sequence("Seq1", "CHYQ");
+ SequenceI prot2 = new Sequence("Seq2", "CHYQ");
+ SequenceI prot3 = new Sequence("Seq3", "CHYQ");
+ AlignmentI protein = new Alignment(new SequenceI[]
+ { prot1, prot2, prot3 });
+ protein.setDataset(null);
+
+ MapList map = new MapList(new int[]
+ { 1, 12 }, new int[]
+ { 1, 4 }, 3, 1);
+ AlignedCodonFrame acf = new AlignedCodonFrame();
+ acf.addMap(dna1.getDatasetSequence(), prot1.getDatasetSequence(), map);
+ acf.addMap(dna2.getDatasetSequence(), prot2.getDatasetSequence(), map);
+ acf.addMap(dna3.getDatasetSequence(), prot3.getDatasetSequence(), map);
+ protein.setCodonFrames(Collections.singleton(acf));
+
+ /*
+ * Translated codon order is [1,2,3] [1,3,4] [4,5,6] [4,5,7] [5,6,7] [7,8,9]
+ * [8,9,10] [10,11,12] [11,12,13]
+ */
+ AlignmentUtils.alignProteinAsDna(protein, dna);
+ assertEquals("C-H--Y-Q-", prot1.getSequenceAsString());
+ assertEquals("-C--H-Y-Q", prot2.getSequenceAsString());
+ assertEquals("C--H--Y-Q", prot3.getSequenceAsString());
+ }
+
+ /**
+ * Test the method that tests whether a CDNA sequence translates to a protein
+ * sequence
+ */
+ @Test
+ public void testTranslatesAs()
+ {
+ assertTrue(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(), 0,
+ "FPKG".toCharArray()));
+ // with start codon
+ assertTrue(AlignmentUtils.translatesAs("atgtttcccaaaggg".toCharArray(),
+ 3, "FPKG".toCharArray()));
+ // with stop codon1
+ assertTrue(AlignmentUtils.translatesAs("tttcccaaagggtaa".toCharArray(),
+ 0, "FPKG".toCharArray()));
+ // with stop codon2
+ assertTrue(AlignmentUtils.translatesAs("tttcccaaagggtag".toCharArray(),
+ 0, "FPKG".toCharArray()));
+ // with stop codon3
+ assertTrue(AlignmentUtils.translatesAs("tttcccaaagggtga".toCharArray(),
+ 0, "FPKG".toCharArray()));
+ // with start and stop codon1
+ assertTrue(AlignmentUtils.translatesAs(
+ "atgtttcccaaaggtaa".toCharArray(), 3, "FPKG".toCharArray()));
+ // with start and stop codon2
+ assertTrue(AlignmentUtils.translatesAs(
+ "atgtttcccaaaggtag".toCharArray(), 3, "FPKG".toCharArray()));
+ // with start and stop codon3
+ assertTrue(AlignmentUtils.translatesAs(
+ "atgtttcccaaaggtga".toCharArray(), 3, "FPKG".toCharArray()));
+
+ // wrong protein
+ assertFalse(AlignmentUtils.translatesAs("tttcccaaaggg".toCharArray(),
+ 0,
+ "FPMG".toCharArray()));
+ }
+
+ @Test
+ public void testTranslatesAs_withAmbiguityCodes()
+ {
+ // R means A or G
+ assertTrue(AlignmentUtils.translatesAs("car".toCharArray(), 0,
+ "Q".toCharArray()));
+ }
}