Skip to content

Unified MultiOutcomeEffect / OutcomeSet generalization across splice, readthrough, germline, and RNA evidence #299

@iskandr

Description

@iskandr

Background

PR #292 introduces `SpliceOutcomeSet`, a multi-outcome wrapper for splice-disrupting variants. The same "one DNA event → multiple plausible proteins" pattern appears in several adjacent workstreams:

Each of these will want to wrap an underlying effect in a set of plausible outcomes. Committing to the `SpliceOutcomeSet` name / shape pigeonholes the abstraction into splicing.

Scope

  • Introduce a `MultiOutcomeEffect` protocol / base class (already added in PR Prototype multi-effect splice outcome possibility sets (#262) #292's follow-up as a minimal marker: `.candidates`, `.most_likely`, `.priority_class`).
  • Rename / refactor `SpliceOutcomeSet` to inherit from it cleanly and expose splice-specific fields (`disrupted_signal_class`, `candidate_proteins`, etc.) as extensions of the generic surface.
  • Design the `Candidate` side analogously — `SpliceCandidate` becomes a subclass of a generic `OutcomeCandidate` carrying `(outcome_label, plausibility, description, coding_effect, predicted_class_name)`.
  • Consider integrating with `predict_variant_effects` uniformly: a single `multi_outcome=True` (or `outcome_sets=True`) kwarg that wraps any multi-outcome-capable effect, of which splice is the first implementation.
  • Downstream consumers (isovar, vaxrank, neoantigen pipelines) write `isinstance(e, MultiOutcomeEffect)` rather than `isinstance(e, SpliceOutcomeSet)`, so future wrappers don't churn their filtering code.

Ordering

This should land after the foundational `MutantTranscript` refactor (#271) — the generic `MultiOutcomeEffect` is a good customer for a proper transcript-edit abstraction, and doing both at once collapses two refactors into one.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions