openvax / openvax/varcode

Experimental transcript_model classifies a cross-boundary coding DUP as FivePrimeUTR

Open
#449 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
87
Forks
28
Avg merge
3h 27m
Merged PRs (30d)
27

Description

Reproduction on the installed PyPI 9.2.2 wheel

from pyensembl import cached_release
from varcode import StructuralVariant
g = cached_release(81)
t = g.transcript_by_id("ENST00000003084")
v = StructuralVariant("7", t.start - 100, "DUP", end=t.end - 50, genome=g)
e = v.effect_on_transcript(t, annotator="transcript_model")
print(type(e).__name__)
print([type(c.effect).__name__ for c in e.candidates])
print(e.modifies_protein_sequence)

Actual: FivePrimeUTR, ['FivePrimeUTR'], False.

The event is chr7:117479863–117668615, crosses the transcript boundary and
includes the CFTR coding sequence. This does not prove a changed protein:
an intact copy can remain. But neither does it establish that the event is
solely a 5-prime UTR edit, or resolve the transcript created at its junction.

GenomicLayout.apply_structural_variant clamps the affected interval to its
available reference segments before applying DUP/INV. The transcript model
constructs a finite layout (50-base flanks), so the distal junction can be
outside that layout. This is a separate path from the default structural
builder corrected in #448 / #405. Current #448 code reproduces this same
experimental result; this is not a regression from that fix.

Focused fix boundary

Reject or explicitly leave unresolved nonlocal DUP/INV edits whose junctions
cannot be represented by the available layout, rather than treating a clipped
body as the entire event. Preserve explicit assembled alleles and fully
represented local events. Add both-strand, left/right/enclosing and isoform
coverage regressions. Do not replace this with a blanket protein-modifying flag.

Related broader classification/filtering design: #420, #418, #423.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the transcript_model path and GenomicLayout.apply_structural_variant, then compare its finite-layout handling with the default structural builder discussed in #448 and #405. Trace DUP/INV cases where a junction falls outside the available layout, including both strands, left/right/enclosing events, and multiple isoforms. Done means nonlocal edits are rejected or left unresolved while explicit assembled alleles and fully represented local events retain their behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
bioinformatics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.