Nextflow Modules
Showing module(s) with keyword "ribo-seq"
| Module | Keywords | Description |
|---|---|---|
| nf-core/custom/orfcollapse | orf ribo-seq catalogue smorf deduplication | Collapse small ORFs that share an amino-acid sequence cluster into a single catalogue entry. Pair with `custom/orfmerge` (coordinate-based catalogue), `bedtools/getfasta` + `seqkit/translate` (AA FASTA keyed by orf_id), and `mmseqs/easycluster` (AA clusters) upstream. The coordinate-based merge in `custom/orfmerge` only groups ORFs that overlap on the genome, so the same micropeptide encoded at several distinct, non-overlapping loci (typically repetitive regions) survives as separate rows. This adopts the peptide-level deduplication and 0.9 amino-acid-similarity threshold of the GENCODE Ribo-seq ORF consolidation (Mudge et al. 2022, Nat Biotechnol, doi:10.1038/s41587-022-01369-0; gencode-riboseqORFs collapse_cutoff 0.9), implemented here with MMseqs2 sequence-identity clustering rather than that tool's longest-shared-string / P-site-overlap metric. Small ORFs (`aa_length` <= `--smorf-max-aa`, default 100) are clustered by amino-acid identity upstream and this module folds each multi-member cluster down to one representative. Only small ORFs are collapsed; larger ORFs are passed through untouched. Eligibility is the catalogue's `is_smorf` flag, independent of `orf_class`, so a short uORF and a short novel ORF are both candidates; `--smorf-max-aa` re-derives the flag and aborts on disagreement. Among the members of a cluster the representative is chosen by class specificity, then longest aa_length, then orf_id, so the result does not depend on which sequence MMseqs2 labelled the cluster representative. Catalogue row order is preserved; dropped members fold their `called_by_<caller>` / `score_<caller>` evidence, `n_samples` / `samples` recurrence and gene mappings into the survivor. |
| nf-core/custom/orfmerge | orf ribo-seq catalogue merge clustering | Cluster normalised per-sample, per-caller ORF predictions into a single cohort-level catalogue. Pair with `custom/orfnormalise` upstream and (typically) `bedtools/getfasta` + `seqkit/translate` downstream to obtain the AA FASTA. Rows sharing an identical exon structure are grouped first and clustered as a single proxy chosen by class specificity, then the members are restored. Class selects the strategy, so without this an ORF that two callers class differently would be split across strategies and could never merge. Proxies are then partitioned by clustering strategy. The harmonised `orf_class` written by `custom/orfnormalise` selects the strategy but is never part of a grouping key, because callers disagree on class for the same ORF (Ribo-TISH reports `5'UTR` for both uORFs and CDS-overlapping uORFs) and keying on it would emit one catalogue row per disagreeing caller: - canonical_cds: grouped by (transcript_id, strand), then reciprocal-overlap clustered within the transcript so a short truncated variant is not folded into the full-length CDS. - uORF, uoORF, dORF, collapse by (transcript_id, strand, start, doORF, intORF, other: end). A single transcript can host multiple distinct uORFs / dORFs / internal ORFs, so keying on the outer span keeps them in separate clusters while still merging cross-caller calls that agree on coordinates. - novel_u: greedy reciprocal-overlap clustering on summed exon-block intersection at `--reciprocal-overlap` (default 0.8). Catches fuzzy cross-caller matches and exact-coordinate collapses in one pass. Order-dependent at the boundary: a chain A-B-C where A-B and B-C overlap at ~0.85 but A-C only at ~0.75 may cluster as {A,B,C} or {A,B}+{C} depending on iteration order. Rare in practice at 0.8. Cross-caller consensus is recorded in two column families on the catalogue TSV: - `called_by_<caller>`: 0/1 indicator per supported caller (ribotish, ribocode, ribotricer, rpbp, price). - `score_<caller>`: best score from that caller within the cluster. Score direction is per-caller (p-values are minimised; Bayes factors / phase scores are maximised). Cross-sample recurrence is recorded in two further columns: - `n_samples`: number of distinct samples contributing to the cluster (a cohort recurrence metric). - `samples`: sorted, comma-separated list of those sample ids. Emits a small MultiQC custom-content TSV (per-class counts) for inclusion in downstream MultiQC reports. Alongside the full catalogue, emits a consensus view (`*.consensus.*`) filtered to ORFs supported by at least `--min-callers` distinct callers and recurring in at least `--min-samples` samples (both default 1, i.e. no filtering, so the consensus view equals the full catalogue). Raising either threshold yields a higher-confidence catalogue without altering the full one. |
| nf-core/custom/orfnormalise | orf ribo-seq normalisation bed12 translation | Convert one ORF caller's per-sample output table into a unified BED12 plus a sidecar metadata TSV, ready for cross-caller merging. An "ORF caller" is a tool that scans ribosome-profiling (Ribo-seq) data and predicts which open reading frames are being translated. Each caller writes its own table format and uses its own location encoding, classification vocabulary, and confidence score. This module reconciles five callers into one harmonised schema. The `caller` val input selects the parser; supported values: - ribocode (RiboCode predicted ORF table; transcript-coord input, lifted to genomic blocks against the GTF) - ribotish (Ribo-TISH predict output; GenomePos + optional Blocks) - ribotricer (Ribotricer detect-orfs translating ORFs TSV; ORF span parsed from ORF_ID, multi-exon blocks recovered by intersecting with host-transcript exon structure from the GTF) - rpbp (Rp-Bp predicted-orfs BED12 with extra columns) - price (PRICE orfs.tsv; Gedi-style Location field, already genomic) Output BED12 column order: chrom start end name score strand thickStart thickEnd itemRgb blockCount blockSizes blockStarts The BED `name` column carries `<caller>|<caller-native-id>`. The BED `score` column is the caller's native score rescaled to 0-1000 (higher == more confident regardless of native direction). Output sidecar TSV columns: orf_id caller sample_id chrom start end strand gene_id transcript_id orf_class aa_length score orf_type_native is_smorf `orf_type_native` carries the caller's own ORF-type label verbatim, so every harmonisation decision below stays auditable without re-running the caller. ORF-type tokens are matched exactly (casefolded) against each caller's closed vocabulary. Tokens matching no entry cause the process to fail; successful outputs report `unmapped_orf_type=0` on the `# parser_columns:` provenance line. `orf_class` is purely positional: it records where the ORF sits relative to the annotated CDS and never encodes its length. Select small ORFs with the `is_smorf` column (`aa_length` <= `--smorf-max-aa`, default 100). `aa_length` is derived as `(nucleotide_length - 3) // 3` for every caller except Ribo-TISH, whose `AALen` column is taken verbatim. If `AALen` counts the stop codon, `is_smorf` is caller-dependent by one residue exactly at the `--smorf-max-aa` boundary. Not reconciled: it needs a Ribo-TISH run whose nucleotide lengths can be compared against `AALen` directly. Harmonised `orf_class` vocabulary written into the sidecar TSV: - canonical_cds: ORF maps to an annotated CDS (including truncated / extended variants of one). - uORF: upstream ORF, not overlapping the CDS. - uoORF: upstream ORF overlapping the CDS out of frame. - dORF: downstream ORF, not overlapping the CDS. - doORF: downstream ORF overlapping the CDS out of frame. - intORF: ORF contained within the CDS, out of frame. - novel_u: novel / intergenic ORF not assigned to an annotated CDS. - other: anything a caller cannot place. Not every caller can report every class, so the absence of a class for one caller is a tool limitation rather than evidence about the ORF: - Ribo-TISH's `5'UTR` covers both uORF and uoORF, and `3'UTR` both dORF and doORF: `tisType()` tests only the start position. - PRICE's vocabulary has no doORF. - ribotricer's `internal` is the terminal fall-through of `check_orf_type()` rather than a positive out-of-frame call, so it maps to `other`; mapping it to intORF would assert a frame relationship ribotricer never tested. Per-caller mapping notes (lossy collapses): - PRICE's `Gene` column concatenates every gene overlapping an ORF's genomic span, so `gene_id` is resolved from the GTF via the ORF's transcript id; the `Gene` column is used only for transcripts absent from the annotation, and can then carry a multi-gene value. - PRICE `iORF` maps to `intORF` and `orphan` to `novel_u` (it is both the not-transcript-consistent label and PRICE's fall-through). `intronic` has no positional equivalent and maps to `other`. The exact PRICE sub-type is preserved in `orf_type_native`. - Rp-Bp's predicted-orfs BED carries no ORF-type column; this module defaults every Rp-Bp call to `canonical_cds` (the post- selectfinalpredictionset curated set is dominated by canonical CDSs). uORF/dORF/novel calls present in Rp-Bp's separate `.tab.gz` / `extracted-orfs.bed.gz` files are not propagated here. Each caller's native confidence score has a "direction" - some are lower-is-better (p-values), some are higher-is-better (Bayes factors, phase scores): ribocode: min (combined p-value) ribotish: min (combined p-value) ribotricer: max (phase_score) rpbp: max (Bayes factor mean) price: min (p-value) Downstream merging uses this to pick the best per-ORF call. |
| nf-core/ribocode/gtfupdate | ribo-seq ribosome profiling gtf annotation | Update GTF annotation file for RiboCode compatibility |
| nf-core/ribocode/metaplots | ribo-seq ribosome profiling orf calling | Set up RiboCode ORF calling with metaplots |
| nf-core/ribocode/prepare | ribo-seq ribosome profiling orf calling | Prepare the annotation files for RiboCode ORF calling |
| nf-core/ribocode/ribocode | ribo-seq ribosome profiling orf calling | Call ORFs with RiboCode from Ribo-Seq data |