[med-svn] [python-pymummer] 01/03: New upstream version 0.10.2
Sascha Steinbiss
satta at debian.org
Thu Feb 2 13:34:00 UTC 2017
This is an automated email from the git hooks/post-receive script.
satta pushed a commit to branch master
in repository python-pymummer.
commit 2afae1385daf45709edf7a316fb7bd0233e87f13
Author: Sascha Steinbiss <sascha at steinbiss.name>
Date: Thu Feb 2 14:29:47 2017 +0100
New upstream version 0.10.2
---
pymummer/alignment.py | 12 ++++++++++++
pymummer/tests/alignment_test.py | 41 ++++++++++++++++++++++++++++++++++++++++
setup.py | 2 +-
3 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/pymummer/alignment.py b/pymummer/alignment.py
index d18f6ef..15760f5 100644
--- a/pymummer/alignment.py
+++ b/pymummer/alignment.py
@@ -136,6 +136,14 @@ class Alignment:
])
+ def intersects_variant(self, var):
+ var_ref_coords = sorted([var.ref_start, var.ref_end])
+ var_ref_coords = pyfastaq.intervals.Interval(var_ref_coords[0], var_ref_coords[1])
+ var_qry_coords = sorted([var.qry_start, var.qry_end])
+ var_qry_coords = pyfastaq.intervals.Interval(var_qry_coords[0], var_qry_coords[1])
+ return var_ref_coords.intersects(self.ref_coords()) and var_qry_coords.intersects(self.qry_coords())
+
+
def qry_coords_from_ref_coord(self, ref_coord, variant_list):
'''Given a reference position and a list of variants ([variant.Variant]),
works out the position in the query sequence, accounting for indels.
@@ -151,6 +159,8 @@ class Alignment:
for i in range(len(variant_list)):
if variant_list[i].var_type not in {variant.INS, variant.DEL}:
continue
+ if not self.intersects_variant(variant_list[i]):
+ continue
if variant_list[i].ref_start <= ref_coord <= variant_list[i].ref_end:
return variant_list[i].qry_start, True
elif variant_list[i].ref_start < ref_coord:
@@ -186,6 +196,8 @@ class Alignment:
for i in range(len(variant_list)):
if variant_list[i].var_type not in {variant.INS, variant.DEL}:
continue
+ if not self.intersects_variant(variant_list[i]):
+ continue
if variant_list[i].qry_start <= qry_coord <= variant_list[i].qry_end:
return variant_list[i].ref_start, True
elif variant_list[i].qry_start < qry_coord:
diff --git a/pymummer/tests/alignment_test.py b/pymummer/tests/alignment_test.py
index a4ad0f3..bb367dc 100644
--- a/pymummer/tests/alignment_test.py
+++ b/pymummer/tests/alignment_test.py
@@ -130,6 +130,22 @@ class TestNucmer(unittest.TestCase):
self.assertEqual(expected, a.to_msp_crunch())
+ def test_intersects_variant(self):
+ 'Test intersects_variant'''
+ snp0 = snp.Snp('100\tA\t.\t600\t75\t77\t1\t0\t606\t1700\t1\t1\tref\tqry') #100 in ref, 600 in qry
+ indel = variant.Variant(snp0)
+
+ aln1 = alignment.Alignment('100\t500\t600\t1000\t501\t501\t100.00\t600\t1700\t1\t1\tref\tqry')
+ aln2 = alignment.Alignment('101\t500\t600\t1000\t501\t501\t100.00\t600\t1700\t1\t1\tref\tqry')
+ aln3 = alignment.Alignment('100\t500\t601\t1000\t501\t501\t100.00\t600\t1700\t1\t1\tref\tqry')
+ aln4 = alignment.Alignment('101\t500\t601\t1000\t501\t501\t100.00\t600\t1700\t1\t1\tref\tqry')
+
+ self.assertTrue(aln1.intersects_variant(indel))
+ self.assertFalse(aln2.intersects_variant(indel))
+ self.assertFalse(aln3.intersects_variant(indel))
+ self.assertFalse(aln4.intersects_variant(indel))
+
+
def test_qry_coords_from_ref_coord_test_bad_ref_coord(self):
'''Test qry_coords_from_ref_coord with bad ref coords'''
aln = alignment.Alignment('\t'.join(['100', '200', '1', '100', '100', '100', '100.00', '300', '300', '1', '1', 'ref', 'qry']))
@@ -241,6 +257,19 @@ class TestNucmer(unittest.TestCase):
aln.ref_start, aln.ref_end = aln.ref_end, aln.ref_start
+ def test_qry_coords_from_ref_coord_when_variant_not_in_nucmer_match(self):
+ '''Test ref_coords_from_qry_coord when variant not in nucmer match'''
+ aln = alignment.Alignment('1\t606\t596\t1201\t606\t606\t100.00\t606\t1700\t1\t1\tref\tqry')
+ snp0 = snp.Snp('127\tA\t.\t77\t75\t77\t1\t0\t606\t1700\t1\t1\tref\tqry')
+ indel = variant.Variant(snp0)
+ self.assertEqual((595, False), aln.qry_coords_from_ref_coord(0, []))
+ self.assertEqual((595, False), aln.qry_coords_from_ref_coord(0, [indel]))
+ self.assertEqual((995, False), aln.qry_coords_from_ref_coord(400, []))
+ self.assertEqual((995, False), aln.qry_coords_from_ref_coord(400, [indel]))
+ self.assertEqual((1200, False), aln.qry_coords_from_ref_coord(605, []))
+ self.assertEqual((1200, False), aln.qry_coords_from_ref_coord(605, [indel]))
+
+
def test_ref_coords_from_qry_coord_test_same_strand(self):
'''Test ref_coords_from_qry_coord on same strand'''
aln = alignment.Alignment('\t'.join(['1', '101', '100', '200', '100', '100', '100.00', '300', '300', '1', '1', 'ref', 'qry']))
@@ -290,3 +319,15 @@ class TestNucmer(unittest.TestCase):
aln.ref_start, aln.ref_end = aln.ref_end, aln.ref_start
aln.qry_start, aln.qry_end = aln.qry_end, aln.qry_start
+
+ def test_ref_coords_from_qry_coord_when_variant_not_in_nucmer_match(self):
+ '''Test ref_coords_from_qry_coord when variant not in nucmer match'''
+ aln = alignment.Alignment('1\t606\t596\t1201\t606\t606\t100.00\t606\t1700\t1\t1\tref\tqry')
+ snp0 = snp.Snp('127\tA\t.\t77\t75\t77\t1\t0\t606\t1700\t1\t1\tref\tqry')
+ indel = variant.Variant(snp0)
+ self.assertEqual((0, False), aln.ref_coords_from_qry_coord(595, []))
+ self.assertEqual((0, False), aln.ref_coords_from_qry_coord(595, [indel]))
+ self.assertEqual((400, False), aln.ref_coords_from_qry_coord(995, []))
+ self.assertEqual((400, False), aln.ref_coords_from_qry_coord(995, [indel]))
+ self.assertEqual((605, False), aln.ref_coords_from_qry_coord(1200, []))
+ self.assertEqual((605, False), aln.ref_coords_from_qry_coord(1200, [indel]))
diff --git a/setup.py b/setup.py
index 2c6b48b..5e91cd0 100644
--- a/setup.py
+++ b/setup.py
@@ -26,7 +26,7 @@ if not found_all_progs:
setup(
name='pymummer',
- version='0.10.1',
+ version='0.10.2',
description='Wrapper for MUMmer',
packages = find_packages(),
author='Martin Hunt, Nishadi De Silva',
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-pymummer.git
More information about the debian-med-commit
mailing list