-
Notifications
You must be signed in to change notification settings - Fork 21
Make orf_class purely positional and add uoORF, doORF and intORF #226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
d84c403
af90f4f
2edfc77
fcf117e
45f2eb7
43e7be3
8bf9137
d315170
aba3ec7
2adaa69
fcb24e8
89c6a73
42fa9c2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -30,6 +30,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| - [#166](https://github.com/nf-core/riboseq/issues/166) - Add per-ORF in-frame P-site quantification, emitting an ORF x sample count matrix ([@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#168](https://github.com/nf-core/riboseq/issues/168) - Add ORF-level differential translation analysis (anota2seq / deltaTE / DOTSeq) on top of the gene-level DTE ([@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#146](https://github.com/nf-core/riboseq/issues/146), [#149](https://github.com/nf-core/riboseq/issues/149) - Add per-sample UMI handling through an optional `with_umi` samplesheet column ([@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - Add `--smorf_max_aa` (default 100) controlling the catalogue's `is_smorf` flag and which ORFs are eligible for the peptide-level collapse. It never affects `orf_class` ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - Add `uoORF`, `doORF` and `intORF` to the `orf_class` vocabulary, recovering the CDS-overlap and internal distinctions that RiboCode, ribotricer, Ribo-TISH and PRICE already report ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - Add `is_smorf` and `orf_type_native` columns to the normalised and catalogue tables. `orf_type_native` carries each caller's own ORF-type label, so every harmonisation decision is auditable without re-running callers ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
|
|
||
| ### `Fixed` | ||
|
|
||
|
|
@@ -81,6 +84,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| - [#197](https://github.com/nf-core/riboseq/issues/197) - Honour `--fastp_merge` and `--save_merged_fastq`, which were overridden by hardcoded `false` values in the preprocessing subworkflow call ([@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#197](https://github.com/nf-core/riboseq/issues/197) - Make `--pseudo_aligner` select the tool used by `--te_quantification_method pseudo`, which always ran Salmon regardless of the setting. kallisto is now a working alternative, with `--kallisto_index`, `--kallisto_quant_fraglen`, `--kallisto_quant_fraglen_sd` and `--extra_kallisto_quant_args`. TE pseudo-alignment outputs move to `quantification/<pseudo_aligner>_te_pseudo`, unchanged for the default `salmon` ([@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#205](https://github.com/nf-core/riboseq/pull/205) - Template update for nf-core/tools v4.0.3 ([@nf-core-bot](https://github.com/nf-core-bot), [@pinin4fjords](https://github.com/pinin4fjords)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - **Breaking:** `orf_class` is now purely positional and no longer encodes ORF length. The `smORF` value is gone from every catalogue output; a short ORF keeps its positional class (`uORF`, `dORF`, `canonical_cds`, …) and is flagged by the new `is_smorf` column instead. Migrate a filter on `orf_class == "smORF"` to `is_smorf == "1"` (equivalently `0 < aa_length <= 100`, the default `--smorf_max_aa`). The peptide-collapse scope is unchanged at the default threshold ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - **Breaking:** `orf_class` values change for ORFs the callers place relative to the CDS. RiboCode's and ribotricer's `Overlap_uORF`/`Overlap_dORF` were being folded into `uORF`/`dORF` by substring matching and now map to `uoORF`/`doORF`; RiboCode's and Ribo-TISH's `internal` and PRICE's `iORF` now map to `intORF` rather than `other`; PRICE's `uoORF` maps to `uoORF` rather than `uORF` and its `orphan` to `novel_u` rather than `other`. ribotricer's `internal` stays `other` because it is that tool's fall-through rather than a frame-tested call. To keep a pre-existing filter's meaning, read the old `uORF` as the new `uORF` ∪ `uoORF`, the old `dORF` as `dORF` ∪ `doORF`, and note that the old `other` no longer holds the internal ORFs. Anything consuming `orf_class` — including the ORF-level DOTSeq analysis, which matches `uORF`/`dORF` literally — sees the new vocabulary ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we try to keep changelog entries a bit less verbose? Claude does tend to get carried away, they should only a be a sentence.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fair -- two of those had grown into full paragraphs with migration instructions inline. #227 trims all seven to a single sentence each, 440 words down to 136; the vocabulary and migration detail is already in docs/output.md and docs/usage.md, which is where it belongs. |
||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - Catalogue row counts change in both directions. Down: ORFs whose callers disagreed on class now merge instead of producing one row per caller, and an ORF two callers size either side of the small-ORF threshold now merges. Up: a short truncated CDS variant is no longer folded into its transcript's full-length CDS, and short transcript-anchored ORFs are keyed on their exact span, so two callers whose bounds differ by a few nucleotides now yield one row each rather than one shared row. That last effect lowers `called_by_*` and `n_samples` for those ORFs, so a stricter `--orf_min_callers` drops more of them ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
| - [#226](https://github.com/nf-core/riboseq/pull/226) - Cross-caller clustering now measures reciprocal overlap on summed exon-block intersection rather than on the outer genomic span, which for a spliced ORF is mostly intron, and uses complete linkage so a chain of partial overlaps cannot fold distinct ORFs into one row ([@FelixKrueger](https://github.com/FelixKrueger)) | ||
|
|
||
| ### `Parameters` | ||
|
|
||
|
|
@@ -133,6 +140,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| | | `--extra_orf_deltate_args` | | ||
| | | `--extra_orf_anota2seq_run_args` | | ||
| | | `--extra_dotseq_args` | | ||
| | | `--smorf_max_aa` | | ||
|
|
||
| ### `Dependencies` | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just so we are clear: This means that DOTSeq will now consider a reduced set of ORFs on this line compared to the previous approach. I'm not saying this is worse. I just want to rule out an oversight.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Worth checking, thanks. That heatmap call is the only place orf_class reaches DOTSeq -- sorf_type appears nowhere else in the template -- so the DTE and DOU statistics and the set of ORFs they test are unchanged; what shrinks is only that figure's input, since ORFs the old substring matching folded into uORF are now uoORF and no longer satisfy sorf_type = "uORF". Happy to add uoORF and doORF as further fallbacks in a follow-up if you would rather the heatmap kept its previous coverage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't mind. One could even argue that it is better now, since those are the true upstream ORFs. Zero overlap.