d29ee159d5ff6c575cb4c3fba32044e4d9e28355
[jalview.git] / test / jalview / analysis / DnaTranslation.java
1 package jalview.analysis;
2
3 import static org.junit.Assert.*;
4 import jalview.datamodel.ColumnSelection;
5
6 import java.io.IOException;
7
8 import org.junit.AfterClass;
9 import org.junit.BeforeClass;
10 import org.junit.Test;
11 import org.junit.runner.RunWith;
12
13 public class DnaTranslation
14 {
15
16   private static String JAL_1312_example_align_fasta = ">B.FR.83.HXB2_LAI_IIIB_BRU_K03455/45-306\n"
17           + "ATGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
18           + "GGAGCTAGAACGATTCGCAGTTAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATACTGGGACA\n"
19           + "GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAGATCATTATATAATACAGTAGCAACCCTCTATTG\n"
20           + "TGTGCATCAAAGGATAGAGATAAAAGACACCAAGGAAGCTTTAGAC\n"
21           + ">gi|27804621|gb|AY178912.1|/1-259\n"
22           + "-TGGGAGAA-ATTCGGTT-CGGCCAGGGGGAAAGAAAAAATATCAGTTAAAACATATAGTATGGGCAAGCAG\n"
23           + "AGAGCTAGAACGATTCGCAGTTAACCCTGGCCTTTTAGAGACATCACAAGGCTGTAGACAAATACTGGGACA\n"
24           + "GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
25           + "TGTTCATCAAAGGATAGATATAAAAGACACCAAGGAAGCTTTAGAT\n"
26           + ">gi|27804623|gb|AY178913.1|/1-259\n"
27           + "-TGGGAGAA-ATTCGGTT-CGGCCAGGGGGAAAGAAAAAATATCAGTTAAAACATATAGTATGGGCAAGCAG\n"
28           + "AGAGCTAGAACGATTCGCAGTTAACCCTGGCCTTTTAGAGACATCACAAGGCTGTAGACAAATACTGGAACA\n"
29           + "GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
30           + "TGTTCATCAAAGGATAGATGTAAAAGACACCAAGGAAGCTTTAGAT\n"
31           + ">gi|27804627|gb|AY178915.1|/1-260\n"
32           + "-TGGGAAAA-ATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
33           + "GGAGCTAGAACGATTCGCAGTTAACCCTGGCCTGTTAGAAACATCAGAAGGTTGTAGACAAATATTGGGACA\n"
34           + "GCTACAACCATCCCTTGAGACAGGATCAGAAGAACTTAAATCATTATWTAATACCATAGCAGTCCTCTATTG\n"
35           + "TGTACATCAAAGGATAGATATAAAAGACACCAAGGAAGCTTTAGAG\n"
36           + ">gi|27804631|gb|AY178917.1|/1-261\n"
37           + "-TGGGAAAAAATTCGGTTGAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
38           + "GGAGCTAGAACGATTCGCAGTCAACCCTGGCCTGTTAGAAACACCAGAAGGCTGTAGACAAATACTGGGACA\n"
39           + "GCTACAACCGTCCCTTCAGACAGGATCGGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
40           + "TGTGCATCAAAGGATAGATGTAAAAGACACCAAGGAGGCTTTAGAC\n"
41           + ">gi|27804635|gb|AY178919.1|/1-261\n"
42           + "-TGGGAGAGAATTCGGTTACGGCCAGGAGGAAAGAAAAAATATAAATTGAAACATATAGTATGGGCAGGCAG\n"
43           + "AGAGCTAGATCGATTCGCAGTCAATCCTGGCCTGTTAGAAACATCAGAAGGCTGCAGACAGATATTGGGACA\n"
44           + "GCTACAACCGTCCCTTAAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
45           + "TGTACATCAAAGGATAGATGTAAAAGACACCAAGGAAGCTTTAGAT\n"
46           + ">gi|27804641|gb|AY178922.1|/1-261\n"
47           + "-TGGGAGAAAATTCGGTTACGGCCAGGGGGAAAGAAAAGATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
48           + "GGAGCTAGAACGATTCGCAGTCAACCCTGGCCTGTTAGAAACATCAGAAGGCTGCAGACAAATACTGGGACA\n"
49           + "GTTACACCCATCCCTTCATACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
50           + "TGTGCATCAAAGGATAGAAGTAAAAGACACCAAGGAAGCTTTAGAC\n"
51           + ">gi|27804647|gb|AY178925.1|/1-261\n"
52           + "-TGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATCAATTAAAACATGTAGTATGGGCAAGCAG\n"
53           + "GGAACTAGAACGATTCGCAGTTAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATATTGGGACA\n"
54           + "GCTACAACCATCCCTTCAGACAGGATCAGAGGAACTTAAATCATTATTTAATACAGTAGCAGTCCTCTATTG\n"
55           + "TGTACATCAAAGAATAGATGTAAAAGACACCAAGGAAGCTCTAGAA\n"
56           + ">gi|27804649|gb|AY178926.1|/1-261\n"
57           + "-TGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
58           + "GGAGCTAGAACGATTCGCGGTCAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAACTACTGGGACA\n"
59           + "GTTACAACCATCCCTTCAGACAGGATCAGAAGAACTCAAATCATTATATAATACAATAGCAACCCTCTATTG\n"
60           + "TGTGCATCAAAGGATAGAGATAAAAGACACCAAGGAAGCCTTAGAT\n"
61           + ">gi|27804653|gb|AY178928.1|/1-261\n"
62           + "-TGGGAAAGAATTCGGTTAAGGCCAGGGGGAAAGAAACAATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
63           + "GGAGCTAGACCGATTCGCACTTAACCCCGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATATTGGGACA\n"
64           + "GCTACAATCGTCCCTTCAGACAGGATCAGAAGAACTTAGATCACTATATAATACAGTAGCAGTCCTCTATTG\n"
65           + "TGTGCATCAAAAGATAGATGTAAAAGACACCAAGGAAGCCTTAGAC\n"
66           + ">gi|27804659|gb|AY178931.1|/1-261\n"
67           + "-TGGGAAAAAATTCGGTTACGGCCAGGAGGAAAGAAAAGATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
68           + "GGAGCTAGAACGATTYGCAGTTAATCCTGGCCTTTTAGAAACAGCAGAAGGCTGTAGACAAATACTGGGACA\n"
69           + "GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
70           + "TGTACATCAAAGGATAGAGATAAAAGACACCAAGGAAGCTTTAGAA\n";
71
72   
73   @Test
74   public void translationWithUntranslatableCodonsTest()
75   {
76     // Corner case for this test is the presence of codons after codons that
77     // were not translated.
78     jalview.datamodel.AlignmentI alf = null;
79     try
80     {
81       alf = new jalview.io.FormatAdapter().readFile(JAL_1312_example_align_fasta,
82               jalview.io.FormatAdapter.PASTE, "FASTA");
83     } catch (IOException x)
84     {
85       x.printStackTrace();
86       fail("Unexpected IOException (" + x.getMessage()
87               + ") - check test environment");
88     }
89     {
90       // full translation
91       ColumnSelection cs = new jalview.datamodel.ColumnSelection();
92       assertNotNull("Couldn't do a full width translation of test data.",
93               jalview.analysis.Dna.CdnaTranslate(
94                       alf.getSequencesArray(),
95                       cs.getVisibleSequenceStrings(0, alf.getWidth(),
96                               alf.getSequencesArray()), new int[]
97                       { 0, alf.getWidth() - 1 }, alf.getGapCharacter(),
98                       null, alf.getWidth(), null));
99     }
100     int vwidth = 15; // translate in 15 base stretches
101     for (int ipos = 0; ipos + vwidth < alf.getWidth(); ipos += vwidth)
102     {
103       ColumnSelection cs = new jalview.datamodel.ColumnSelection();
104       if (ipos > 0)
105       {
106         cs.hideColumns(0, ipos - 1);
107       }
108       cs.hideColumns(ipos + vwidth, alf.getWidth());
109       int[] vcontigs = cs.getVisibleContigs(0, alf.getWidth());
110       String[] sel = cs.getVisibleSequenceStrings(0, alf.getWidth(),
111               alf.getSequencesArray());
112       jalview.datamodel.AlignmentI transAlf = jalview.analysis.Dna
113               .CdnaTranslate(alf.getSequencesArray(), sel, vcontigs,
114                       alf.getGapCharacter(), null, alf.getWidth(), null);
115
116       assertTrue("Translation failed (ipos=" + ipos
117               + ") No alignment data.", transAlf != null);
118       assertTrue("Translation failed (ipos=" + ipos + ") Empty algnment.",
119               transAlf.getHeight() > 0);
120       assertTrue("Translation failed (ipos=" + ipos + ") Translated "
121               + transAlf.getHeight() + " sequences from " + alf.getHeight()
122               + " sequences", alf.getHeight() == transAlf.getHeight());
123     }
124
125   }
126 }