Skip to content

Commit

Permalink
fix (bruteForce): accepter variants are skipped if the donor transcri…
Browse files Browse the repository at this point in the history
…pt has variants with the same coordinate. #810
  • Loading branch information
zhuchcn committed Aug 26, 2023
1 parent 2ebca2d commit 40dd440
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm

- Fixed `callVariant` with altSplice insertion with intronic frameshift variant which is very closed to the end of the subgraph. #803

- Fixed `bruteForce` that accepter variants are skipped if the donor transcript has variants with the same coordinate. #810

## [1.2.0] - 2023-08-03

### Fixed
Expand Down
22 changes: 11 additions & 11 deletions moPepGen/util/brute_force.py
Original file line number Diff line number Diff line change
Expand Up @@ -1091,47 +1091,47 @@ def translational_modification(self, seq:Seq, lhs:int, tx_lhs:int,
def generate_variant_comb(self, fusion:bool, circ_rna:bool
) -> Iterable[seqvar.VariantRecordPool]:
""" Generate combination of variants. """
variant_type_mapper:Dict[seqvar.VariantRecord, str] = {}
variant_type_mapper:Dict[str, Tuple[seqvar.VariantRecord, str]] = {}
start_index = self.tx_seq.orf.start + 3 if bool(self.tx_seq.orf) else 3
for variant in self.variant_pool[self.tx_id].transcriptional:
if variant.location.start == start_index - 1 \
and (variant.is_insertion() or variant.is_deletion()) \
and not variant.is_alternative_splicing():
variant.to_end_inclusion(self.tx_seq)

variant_type_mapper[variant] = 'transcriptional'
variant_type_mapper[variant.id] = (variant, 'transcriptional')
for variant in self.variant_pool[self.tx_id].intronic:
variant_type_mapper[variant] = 'intronic'
variant_type_mapper[variant.id] = (variant, 'intronic')
if fusion:
for variant in self.variant_pool[self.tx_id].fusion:
if variant.location.start < start_index - 1:
continue
variant_type_mapper[variant] = 'fusion'
variant_type_mapper[variant.id] = (variant, 'fusion')
accepter_tx_id = variant.attrs['ACCEPTER_TRANSCRIPT_ID']
if accepter_tx_id not in self.variant_pool:
continue
accepter_var_series = self.variant_pool[accepter_tx_id]
for accepter_var in accepter_var_series.transcriptional:
variant_type_mapper[accepter_var] = 'transcriptional'
variant_type_mapper[accepter_var.id] = (accepter_var, 'transcriptional')
for accepter_var in accepter_var_series.intronic:
variant_type_mapper[accepter_var] = 'intronic'
variant_type_mapper[accepter_var.id] = (accepter_var, 'intronic')
if circ_rna:
for variant in self.variant_pool[self.tx_id].circ_rna:
variant_type_mapper[variant] = 'circ_rna'
variant_type_mapper[variant.id] = (variant, 'circ_rna')

all_variants = list(variant_type_mapper.keys())
all_variants = [v[0] for v in variant_type_mapper.values()]

for i in range(len(all_variants)):
for inds in combinations(range(len(all_variants)), i + 1):
variants = [all_variants[i] for i in inds]
if fusion and not any(variant_type_mapper[v] == 'fusion' for v in variants):
if fusion and not any(variant_type_mapper[v.id][1] == 'fusion' for v in variants):
continue
if circ_rna and not any(variant_type_mapper[v] == 'circ_rna' for v in variants):
if circ_rna and not any(variant_type_mapper[v.id][1] == 'circ_rna' for v in variants):
continue
pool = seqvar.VariantRecordPool()
pool.anno = self.variant_pool.anno
for variant in variants:
var_type = variant_type_mapper[variant]
var_type = variant_type_mapper[variant.id][1]
tx_id = variant.transcript_id
if var_type == 'transcriptional':
pool.add_transcriptional_variant(variant, tx_id)
Expand Down

0 comments on commit 40dd440

Please sign in to comment.