1 package jalview.datamodel;
3 import java.util.Iterator;
4 import java.util.SortedMap;
5 import java.util.TreeMap;
7 import org.testng.Assert;
8 import org.testng.annotations.BeforeClass;
9 import org.testng.annotations.DataProvider;
10 import org.testng.annotations.Test;
12 import htsjdk.samtools.SAMRecord;
13 import htsjdk.samtools.SAMRecordSetBuilder;
15 public class CigarParserTest
17 @BeforeClass(alwaysRun = true)
25 @DataProvider(name = "reads")
26 public Object[][] createReadsData()
28 SortedMap<Integer, Integer> noinsertions = new TreeMap<>();
30 SortedMap<Integer, Integer> insertions = new TreeMap<>();
32 insertions.put(105, 2);
34 SortedMap<Integer, Integer> insertions2 = new TreeMap<>();
35 insertions2.put(11, 2);
37 SortedMap<Integer, Integer> insertions3 = new TreeMap<>();
38 insertions3.put(8, 3);
39 insertions3.put(105, 3);
41 SortedMap<Integer, Integer> insertions4 = new TreeMap<>();
42 insertions4.put(8, 3);
43 insertions4.put(105, 2);
44 insertions4.put(109, 3);
45 insertions4.put(112, 1);
47 String read = "CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC";
49 return new Object[][] { { "1S84M2I14M", read, 21,
50 "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
51 insertions }, // first residue is G (accounting for C soft clip) at
52 // position 21 + 3 (insertions at position 8)
53 { "1S84M2I14M", read, 21,
54 "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGA-GGAGCTCGTTGGTC",
55 insertions3 }, // read has 2 insertions accounted for in
56 // insertions3, 3rd insertion is added as gap at
58 { "1S84M2I14M", read, 21,
59 "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAG---CTC-GTTGGTC",
60 insertions4 }, // 2 insertions in read accounted for at position
61 // 105; 3 insertions at 109 and 1 insertion at 112
65 "--CGAAG---CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
69 "---CGAA---GCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
72 "CGAAGCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTCCC",
74 "---CGAAGC----TTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGA",
80 "--CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
84 "---CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
87 "------CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
90 "------CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGT",
94 @Test(dataProvider = "reads", groups = { "Functional" })
95 public void testParse(String cigar, String read, int start, String result,
96 SortedMap<Integer, Integer> insertions)
98 SAMRecord rec = new SAMRecord(null);
99 rec.setCigarString(cigar);
100 rec.setReadString(read);
101 rec.setAlignmentStart(start);
103 CigarParser cp = new CigarParser('-');
104 Sequence dummy = new Sequence("dummy","");
105 String bfresult = cp.parseCigarToSequence(rec, insertions, 1, dummy);
107 System.out.println(result);
108 System.out.println(bfresult);
109 Assert.assertEquals(bfresult, result);
112 @Test(groups = { "Functional" })
113 public void testGetInsertions()
115 final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
116 builder.addFrag("read_1", 22, 30000, false, false,
118 builder.addFrag("read_2", 22, 28835, false, false,
120 builder.addFrag("read_3", 22, 28835, false, false, "3M1I75M2I1M", "",
122 builder.addFrag("read_4", 22, 28865, false, false, "48M3I49M", "", 0);
123 builder.addFrag("read_5", 22, 28865, false, false, "49M3I47M2D2M", "",
125 builder.addFrag("read_6", 22, 27000, false, false, "2M4I90M5S", "", 0);
126 builder.addFrag("read_7", 22, 27000, false, false, "2M1I98M", "", 0);
128 builder.addFrag("read_8", 22, 27000, false, false, "3M200N2I5M", "", 0);
130 Iterator<SAMRecord> it = builder.iterator();
131 CigarParser cp = new CigarParser('-');
132 Range xtent[] = new Range[] { new Range(0, 0) };
133 SortedMap<Integer, Integer> insertions,
134 insertStrands[] = cp.getInsertions(it, xtent);
135 Assert.assertEquals(insertStrands.length, 2);
136 insertions = insertStrands[0];
137 Assert.assertEquals(insertions.size(), 6);
138 Assert.assertTrue(insertions.containsKey(28838));
139 Assert.assertEquals((int) insertions.get(28838), 1);
140 Assert.assertTrue(insertions.containsKey(28885));
141 Assert.assertEquals((int) insertions.get(28885), 3);
142 Assert.assertTrue(insertions.containsKey(28913));
143 Assert.assertEquals((int) insertions.get(28913), 3);
144 Assert.assertTrue(insertions.containsKey(28914));
145 Assert.assertEquals((int) insertions.get(28914), 3);
146 Assert.assertTrue(insertions.containsKey(27002));
147 Assert.assertEquals((int) insertions.get(27002), 4);
148 Assert.assertTrue(insertions.containsKey(27203));
149 Assert.assertEquals((int) insertions.get(27203), 2);