Skip to content

Commit 476169c

Browse files
Merge pull request jamescasbon#266 from sambrightman/called-definition
Allow partially-called genotypes to be considered called
2 parents 0711a91 + d91ec5e commit 476169c

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

vcf/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(self, site, sample, data):
2626
if getattr(self.data, 'GT', None) is not None:
2727
self.gt_alleles = [(al if al != '.' else None) for al in allele_delimiter.split(self.data.GT)]
2828
self.ploidity = len(self.gt_alleles)
29-
self.called = all([al != None for al in self.gt_alleles])
29+
self.called = any(al is not None for al in self.gt_alleles)
3030
self.gt_nums = self.data.GT if self.called else None
3131
else:
3232
#62 a call without a genotype is not defined as called or not
@@ -65,7 +65,7 @@ def gt_bases(self):
6565
if self.called:
6666
# lookup and return the actual DNA alleles
6767
try:
68-
return self.gt_phase_char().join(str(self.site.alleles[int(X)]) for X in self.gt_alleles)
68+
return self.gt_phase_char().join(str(self.site.alleles[int(X)] if X is not None else '.') for X in self.gt_alleles)
6969
except:
7070
sys.stderr.write("Allele number not found in list of alleles\n")
7171
else:

vcf/test/test_vcf.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,22 +1657,32 @@ def test_read_uncalled(self):
16571657
gt_nums = [s.gt_nums for s in var.samples]
16581658
ploidity = [s.ploidity for s in var.samples]
16591659
gt_alleles = [s.gt_alleles for s in var.samples]
1660+
gt_type = [s.gt_type for s in var.samples]
16601661

16611662
if var.POS == 14370:
16621663
self.assertEqual(['0|0', None, '1/1'], gt_nums)
16631664
self.assertEqual(['G|G', None, 'A/A'], gt_bases)
16641665
self.assertEqual([2,2,2], ploidity)
16651666
self.assertEqual([['0','0'], [None,None], ['1','1']], gt_alleles)
1667+
self.assertEqual([0, None, 2], gt_type)
16661668
elif var.POS == 17330:
16671669
self.assertEqual([None, '0|1', '0/0'], gt_nums)
16681670
self.assertEqual([None, 'T|A', 'T/T'], gt_bases)
16691671
self.assertEqual([3,2,2], ploidity)
16701672
self.assertEqual([[None,None,None], ['0','1'], ['0','0']], gt_alleles)
1673+
self.assertEqual([None, 1, 0], gt_type)
16711674
elif var.POS == 1234567:
16721675
self.assertEqual(['0/1', '0/2', None], gt_nums)
16731676
self.assertEqual(['GTC/G', 'GTC/GTCT', None], gt_bases)
16741677
self.assertEqual([2,2,1], ploidity)
16751678
self.assertEqual([['0','1'], ['0','2'], [None]], gt_alleles)
1679+
self.assertEqual([1, 1, None], gt_type)
1680+
elif var.POS == 1234568:
1681+
self.assertEqual(['./1', '0/.', None], gt_nums)
1682+
self.assertEqual(['./G', 'GTC/.', None], gt_bases)
1683+
self.assertEqual([2,2,1], ploidity)
1684+
self.assertEqual([[None,'1'], ['0',None], [None]], gt_alleles)
1685+
self.assertEqual([1, 1, None], gt_type)
16761686
reader._reader.close()
16771687

16781688

vcf/test/uncalled_genotypes.vcf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
20 14370 rs6054257 G A 29 PASS NS=3 GT 0|0 ./. 1/1
66
20 17330 . T A 3 q10 NS=3 GT ././. 0|1 0/0
77
20 1234567 microsat1 GTC G,GTCT 50 PASS NS=3 GT 0/1 0/2 .
8+
20 1234568 . GTC G,GTCT 50 PASS NS=3 GT ./1 0/. .

0 commit comments

Comments
 (0)