diff --git a/src/hgvs/utils/altseq_to_hgvsp.py b/src/hgvs/utils/altseq_to_hgvsp.py index 581cc9ca..f47050d4 100644 --- a/src/hgvs/utils/altseq_to_hgvsp.py +++ b/src/hgvs/utils/altseq_to_hgvsp.py @@ -97,7 +97,8 @@ def build_hgvsp(self): # get size diff from diff in ref/alt lengths start = self._alt_data.variant_start_aa - 1 delta = len(self._alt_seq) - len(self._ref_seq) - while self._ref_seq[start] == self._alt_seq[start]: + start_max = min(len(self._ref_seq), len(self._alt_seq)) + while start < start_max and self._ref_seq[start] == self._alt_seq[start]: start += 1 offset = start + abs(delta) @@ -190,10 +191,15 @@ def _convert_to_sequence_variants(self, variant, acc): self._is_ambiguous = True # side-effect if insertion and insertion.find("*") == 0: # stop codon at variant position - aa_start = aa_end = AAPosition(base=start, aa=deletion[0]) - ref = "" - alt = "*" is_sub = True + alt = "*" + if start == len(self._alt_seq) and not deletion: + # insertion of stop codon at end of sequence, a special case of "stop_retained" + aa_start = aa_end = AAPosition(base=start, aa="*") + ref = "*" + else: + aa_start = aa_end = AAPosition(base=start, aa=deletion[0]) + ref = "" elif start == len(self._ref_seq): # extension if self._alt_seq[-1] == "*": diff --git a/tests/data/cache-py3.hdp b/tests/data/cache-py3.hdp index 1fbcd59c..97ad36b0 100644 Binary files a/tests/data/cache-py3.hdp and b/tests/data/cache-py3.hdp differ diff --git a/tests/test_hgvs_variantmapper.py b/tests/test_hgvs_variantmapper.py index df90a0a9..7e53acbc 100644 --- a/tests/test_hgvs_variantmapper.py +++ b/tests/test_hgvs_variantmapper.py @@ -37,6 +37,13 @@ def setUpClass(cls): cls.vm = hgvs.variantmapper.VariantMapper(cls.hdp) cls.hp = hgvs.parser.Parser() + def test_map_stop_retained(self): + hgvs_c = "NM_001253909.2:c.416_417insGTG" + var_c = self.hp.parse_hgvs_variant(hgvs_c) + var_p = self.vm.c_to_p(var_c) + + assert str(var_p) == "NP_001240838.1:p.(Ter140Ter)" + def test_gcrp_invalid_input_type(self): hgvs_g = "NC_000007.13:g.36561662C>T" hgvs_c = "NM_001637.3:c.1582G>A"