Open
Description
Converting back and forth fails in this case due to being normalized off the transcript
In [1]: var_n = parse("NR_003051.3:n.1_2insAGGACGTG")
In [2]: var_g = n_to_g(var_n)
In [3]: var_g
Out[3]: SequenceVariant(ac=NC_000009.12, type=g, posedit=35658020_35658027dup, gene=None)
In [4]: g_to_n(var_g, "NR_003051.3")
---------------------------------------------------------------------------
HGVSInvalidIntervalError Traceback (most recent call last)
Cell In[4], line 1
----> 1 g_to_n(var_g, "NR_003051.3")
File ~/localwork/variantgrid/env/lib/python3.12/site-packages/hgvs/assemblymapper.py:115, in AssemblyMapper.g_to_n(self, var_g, tx_ac)
114 def g_to_n(self, var_g, tx_ac):
--> 115 var_out = super(AssemblyMapper, self).g_to_n(
116 var_g, tx_ac, alt_aln_method=self.alt_aln_method
117 )
118 return self._maybe_normalize(var_out)
File ~/localwork/variantgrid/env/lib/python3.12/site-packages/hgvs/variantmapper.py:166, in VariantMapper.g_to_n(self, var_g, tx_ac, alt_aln_method)
163 var_g = self.left_normalizer.normalize(var_g)
165 var_g.fill_ref(self.hdp)
--> 166 pos_n = mapper.g_to_n(var_g.posedit.pos)
167 if not pos_n.uncertain:
168 edit_n = self._convert_edit_check_strand(mapper.strand, var_g.posedit.edit)
File ~/localwork/variantgrid/env/lib/python3.12/site-packages/hgvs/alignmentmapper.py:165, in AlignmentMapper.g_to_n(self, g_interval, strict_bounds)
160 grs, gre = (
161 g_interval.start.base - 1 - self.gc_offset,
162 g_interval.end.base - 1 - self.gc_offset,
163 )
164 # frs, fre = (f)orward (r)na (s)tart & (e)nd; forward w.r.t. genome
--> 165 frs, frs_offset, frs_cigar = self.cigarmapper.map_ref_to_tgt(
166 pos=grs, end="start", strict_bounds=strict_bounds
167 )
168 fre, fre_offset, fre_cigar = self.cigarmapper.map_ref_to_tgt(
169 pos=gre, end="end", strict_bounds=strict_bounds
170 )
172 if self.strand == -1:
File ~/localwork/variantgrid/env/lib/python3.12/site-packages/hgvs/utils/cigarmapper.py:59, in CIGARMapper.map_ref_to_tgt(self, pos, end, strict_bounds)
58 def map_ref_to_tgt(self, pos, end, strict_bounds=True):
---> 59 return self._map(
60 from_pos=self.ref_pos,
61 to_pos=self.tgt_pos,
62 pos=pos,
63 end=end,
64 strict_bounds=strict_bounds,
65 )
File ~/localwork/variantgrid/env/lib/python3.12/site-packages/hgvs/utils/cigarmapper.py:83, in CIGARMapper._map(self, from_pos, to_pos, pos, end, strict_bounds)
77 """Map position between aligned segments
78
79 Positions in this function are 0-based, base-counting.
80 """
82 if strict_bounds and (pos < 0 or pos > from_pos[-1]):
---> 83 raise HGVSInvalidIntervalError("Position is beyond the bounds of transcript record")
85 # find aligned segment to use as basis for mapping
86 # okay for pos to be before first element or after last
87 for pos_i in range(len(self.cigar_op)):
HGVSInvalidIntervalError: Position is beyond the bounds of transcript record
NC_000009.12:g.35658020_35658027dup is off the transcript:
exon = hdp.get_tx_exons("NR_003051.3", "NC_000009.12", "splign")[0]
In [5]: exon["alt_start_i"], exon["alt_end_i"]
Out[5]: (35657750, 35658018)
Even if you 5p normalize NC_000009.12:g.35658020_35658027dup
, it ends up as NC_000009.12:g.35658018_35658025dup
(still off transcript)