Skip to content

docs(orfnormalise): correct the GTF contract for rpbp and price - #12453

Open
pinin4fjords wants to merge 2 commits into
nf-core:masterfrom
pinin4fjords:docs/orf-catalogue-gtf-contract
Open

docs(orfnormalise): correct the GTF contract for rpbp and price#12453
pinin4fjords wants to merge 2 commits into
nf-core:masterfrom
pinin4fjords:docs/orf-catalogue-gtf-contract

Conversation

@pinin4fjords

Copy link
Copy Markdown
Member

Doc-only. custom/orfnormalise's gtf input is documented as unused for rpbp and price, with [ [:], [] ] offered as acceptable when the caller subset excludes ribocode and ribotish. Neither holds:

  • parse_rpbp resolves gene_id as transcripts[tid].gene_id, so with no GTF every rpbp row gets an empty gene_id.
  • parse_price resolves gene_id from the transcript id in the Id column (fix(custom/orfnormalise): resolve PRICE gene ids from the annotation #12436), falling back to PRICE's Gene column, which concatenates every gene the ORF's genomic span overlaps. With no GTF, every price row degrades to that compound value, which joins against nothing downstream.

There is also an unstated requirement worth writing down: the annotation has to be a superset of the one each caller was run against. A transcript absent from it cannot be resolved, and a pipeline that hands the normaliser a narrower annotation than its callers used (a one-transcript-per-gene backbone, say) silently loses gene ids for ORFs on the isoforms it dropped.

Corrected in the module's meta.yml and in the orftable_fasta_gtf_buildorfcatalogue subworkflow that passes the GTF through (meta.yml and the take: comment), which carried the same claim.

No behaviour change. nf-core modules lint custom/orfnormalise and nf-core subworkflows lint orftable_fasta_gtf_buildorfcatalogue pass (the two module warnings are pre-existing container-version notes).

🤖 Generated with Claude Code

Both resolve gene_id from the ORF's transcript id through the supplied
annotation, so the GTF is not unused for them and an empty one is not
acceptable: price falls back to its Gene column, which concatenates every gene
the ORF's genomic span overlaps.

State the requirement that the annotation be a superset of what each caller was
run against, in the module and in the orftable_fasta_gtf_buildorfcatalogue
subworkflow that passes it through.

@mashehu mashehu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since it's docs only, can you please try to write them in your own words?

Comment on lines +148 to +157
Annotation GTF. Every caller draws on it: ribocode requires it
(transcript-relative coordinates → genomic lift), ribotish and
ribotricer use it for multi-exon block recovery (from GenomePos
and the ORF_ID span respectively), and rpbp and price resolve
`gene_id` from the ORF's transcript id through it. Supply the
annotation the caller was run against, or a superset of it: a
transcript missing here cannot be resolved, and price then falls
back to its `Gene` column, which concatenates every gene the
ORF's genomic span overlaps. Passing `[ [:], [] ]` loses
multi-exon structure and, for rpbp and price, `gene_id`.

@mashehu mashehu Jul 28, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please rewrite this in your own words, feels like marketing speak

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made more concise

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants