@@ -133,3 +133,164 @@ def test_partitioned_read_sequences_deletion():
133133 allele = "" ,
134134 suffix = "G" )
135135 eq_ (variant_read , expected )
136+
137+
138+ def test_read_evidence_counts_snv_reads_at_read_boundaries ():
139+ """
140+ Reads whose SNV locus is the first or last aligned base should still be
141+ counted.
142+
143+ Regression test for GitHub issue #55.
144+ """
145+ chromosome = "1"
146+ variant = Variant (
147+ chromosome ,
148+ 4 ,
149+ "T" ,
150+ "G" ,
151+ grch38 ,
152+ normalize_contig_names = False )
153+
154+ reads = [
155+ make_pysam_read (
156+ seq = "GAAA" ,
157+ cigar = "4M" ,
158+ mdtag = "0T3" ,
159+ name = "alt-start" ,
160+ reference_start = 3 ),
161+ make_pysam_read (
162+ seq = "TAAA" ,
163+ cigar = "4M" ,
164+ mdtag = "4" ,
165+ name = "ref-start" ,
166+ reference_start = 3 ),
167+ make_pysam_read (
168+ seq = "AAAG" ,
169+ cigar = "4M" ,
170+ mdtag = "3T0" ,
171+ name = "alt-end" ,
172+ reference_start = 0 ),
173+ make_pysam_read (
174+ seq = "AAAT" ,
175+ cigar = "4M" ,
176+ mdtag = "4" ,
177+ name = "ref-end" ,
178+ reference_start = 0 ),
179+ ]
180+
181+ read_creator = ReadCollector ()
182+ read_evidence = read_creator .read_evidence_for_variant (
183+ variant = variant ,
184+ alignment_file = MockAlignmentFile (references = (chromosome ,), reads = reads ))
185+
186+ eq_ (read_evidence .alt_read_names , {"alt-start" , "alt-end" })
187+ eq_ (read_evidence .ref_read_names , {"ref-start" , "ref-end" })
188+
189+
190+ def test_read_evidence_counts_insertion_reads_at_read_boundaries ():
191+ """
192+ Insertion-supporting reads that begin or end at the insertion locus should
193+ be counted as alt reads instead of being dropped.
194+
195+ Regression test for GitHub issue #49. Also serves as an indel-count
196+ regression for GitHub issue #23.
197+ """
198+ chromosome = "1"
199+ variant = Variant (
200+ chromosome ,
201+ 3 ,
202+ "A" ,
203+ "AG" ,
204+ grch38 ,
205+ normalize_contig_names = False )
206+
207+ reads = [
208+ make_pysam_read (
209+ seq = "GT" ,
210+ cigar = "1I1M" ,
211+ mdtag = "1" ,
212+ name = "alt-start" ,
213+ reference_start = 3 ),
214+ make_pysam_read (
215+ seq = "T" ,
216+ cigar = "1M" ,
217+ mdtag = "1" ,
218+ name = "ref-start" ,
219+ reference_start = 3 ),
220+ make_pysam_read (
221+ seq = "AG" ,
222+ cigar = "1M1I" ,
223+ mdtag = "1" ,
224+ name = "alt-end" ,
225+ reference_start = 2 ),
226+ make_pysam_read (
227+ seq = "A" ,
228+ cigar = "1M" ,
229+ mdtag = "1" ,
230+ name = "ref-end" ,
231+ reference_start = 2 ),
232+ ]
233+
234+ read_creator = ReadCollector ()
235+ read_evidence = read_creator .read_evidence_for_variant (
236+ variant = variant ,
237+ alignment_file = MockAlignmentFile (references = (chromosome ,), reads = reads ))
238+
239+ eq_ (read_evidence .alt_read_names , {"alt-start" , "alt-end" })
240+ eq_ (read_evidence .ref_read_names , {"ref-start" , "ref-end" })
241+
242+
243+ def test_partitioned_read_sequences_snv_at_last_exonic_base_before_splice ():
244+ """
245+ A variant on the last nucleotide of an exon should still be recovered from
246+ a spliced read.
247+
248+ Regression test for GitHub issue #24.
249+ """
250+ chromosome = "1"
251+ variant = Variant (
252+ chromosome ,
253+ 4 ,
254+ "T" ,
255+ "G" ,
256+ grch38 ,
257+ normalize_contig_names = False )
258+ read = make_pysam_read (
259+ seq = "ACCGTGGA" ,
260+ cigar = "4M100N4M" ,
261+ name = "splice-before" ,
262+ reference_start = 0 )
263+ read_creator = ReadCollector ()
264+ variant_reads = read_creator .allele_reads_supporting_variant (
265+ variant = variant ,
266+ alignment_file = MockAlignmentFile (references = (chromosome ,), reads = [read ]))
267+ assert len (variant_reads ) == 1
268+ eq_ (variant_reads [0 ].allele , "G" )
269+
270+
271+ def test_partitioned_read_sequences_snv_at_first_exonic_base_after_splice ():
272+ """
273+ A variant on the first nucleotide of an exon should still be recovered from
274+ a spliced read.
275+
276+ Regression test for GitHub issue #24.
277+ """
278+ chromosome = "1"
279+ variant = Variant (
280+ chromosome ,
281+ 105 ,
282+ "T" ,
283+ "G" ,
284+ grch38 ,
285+ normalize_contig_names = False )
286+ read = make_pysam_read (
287+ seq = "ACCTGGGA" ,
288+ cigar = "4M100N4M" ,
289+ name = "splice-after" ,
290+ reference_start = 0 )
291+ read_creator = ReadCollector ()
292+ variant_reads = read_creator .allele_reads_supporting_variant (
293+ variant = variant ,
294+ alignment_file = MockAlignmentFile (references = (chromosome ,), reads = [read ]))
295+ assert len (variant_reads ) == 1
296+ eq_ (variant_reads [0 ].allele , "G" )
0 commit comments