Skip to content

Add ReactomeGSA tools: Reactome does do gene set analysis - #34

Merged
adamjohnwright merged 1 commit into
mainfrom
feat/gsa-tools
Sep 14, 2026
Merged

adamjohnwright merged 1 commit into
mainfrom
feat/gsa-tools

Conversation

@adamjohnwright

Copy link
Copy Markdown
Contributor

Reactome has two analysis services. This server knew about one.

AnalysisService over-representation over a list of identifiers already here
ReactomeGSA (gsa.reactome.org) gene set analysis over an expression matrix — PADOG, Camera, ssGSEA, terapadog new

Camera is described by the service itself as "a gene set analysis algorithm similar to the classical GSEA algorithm".

How the gap was found

A Reactome chatbot, asked "I want to run a gsea with my list of genes", replied that the information was not available in the Reactome Knowledgebase — then offered fgsea, bigomics.ch and a YouTube tutorial.

Reactome can do this. Nothing here could reach the service that does it, so a Reactome user was sent to someone else's tools.

Pointer to its existence: the Galaxy CLI (reactome/reactome_galaxy), which wraps both services.

Five read-only tools

reactome_gsa_methods, reactome_gsa_data_types, reactome_gsa_search_datasets, reactome_gsa_examples, reactome_gsa_sources.

The descriptions carry the distinction that caused the confusion, because a description is the whole of what a model reads before choosing. Gene set analysis needs an expression matrix with sample groups; a user holding a list of gene names wants over-representation, whatever they called it. Two of the tools say so explicitly and name reactome_analyze_identifiers as the alternative.

Submitting an analysis is deliberately absent

POST /analysis takes the entire expression matrix inline — not something a chat user can paste, and not something to push through a tool result against a 40,000-character cap.

What is reachable is covered instead. ReactomeGSA loads from Expression Atlas, Single Cell Expression Atlas, GREIN and GEO, so reactome_gsa_search_datasets lets someone with no data of their own be pointed at a published dataset:

## Public datasets matching "melanoma" in Homo sapiens
**Found:** 100

### RNA-seq melanoma
**ID:** GSE50535 · **Species:** Homo sapiens · **Source:** GREIN

Actually running one is the web interface, the Galaxy tool, or the R package — and every tool says so.

A trap worth the comment it carries

GSA's species filter wants the name:

species=9606           -> 0 results     (silently)
species=Homo sapiens   -> 100 results

The exact opposite of the Content Service's eventsHierarchy, which wants the id and answers HTTP 500 for the name. Both the tool description and the empty-result message say which, because a filter that silently returns nothing is the failure mode this repo has spent the week removing.

Verification

  • 53 → 58 tools, 90 → 101 tests, npm run check green
  • sweep covers all 58 with 21 content expectations, exit 0, no suspicious output
  • every fixture copied from the live service, with the endpoint recorded above the type
  • coverage thresholds raised to match (57% statements)

🤖 Generated with Claude Code

Reactome has two analysis services and this server knew about one.

  AnalysisService  over-representation over a list of identifiers   already here
  ReactomeGSA      gene set analysis over an expression matrix      new
                   PADOG, Camera, ssGSEA, terapadog

Camera is described by the service itself as "a gene set analysis algorithm
similar to the classical GSEA algorithm".

The gap was found the hard way. A Reactome chatbot, asked "I want to run a gsea
with my list of genes", answered that the information was not available in the
Reactome Knowledgebase and offered fgsea, bigomics and a YouTube tutorial.
Reactome can do it, at gsa.reactome.org. Nothing here could reach the service.

Five read-only tools: methods, data types, dataset search, examples, sources.

**The descriptions carry the distinction that caused the confusion**, because a
description is the whole of what a model reads before choosing a tool. Gene set
analysis needs an expression matrix with sample groups; a user holding a list of
gene names wants over-representation, whatever they called it. Both
`reactome_gsa_methods` and `reactome_gsa_data_types` say so and name
`reactome_analyze_identifiers` as the alternative.

**Submitting an analysis is deliberately not here.** POST /analysis takes the
whole expression matrix inline -- not something a chat user can paste, and not
something to push through a tool result against a 40,000 character cap. What is
reachable is covered instead: ReactomeGSA can load from Expression Atlas, Single
Cell Expression Atlas, GREIN and GEO, so `reactome_gsa_search_datasets` lets
someone with no data of their own be pointed at a published dataset. Running it
is the web interface, the Galaxy tool, or the R package, and the tools say so.

One trap worth the comment it carries: GSA's species filter wants the NAME.
`species=9606` returns zero results with no error, while `species=Homo sapiens`
returns 100 -- the exact opposite of the Content Service's eventsHierarchy,
which wants the id and answers HTTP 500 for the name. Both the tool description
and the empty-result message say which.

Parameter prose is summarised to names only: ten parameters with a paragraph
each is most of a context window spent before the question is answered.

53 -> 58 tools, 90 -> 101 tests, sweep covers all 58 with 21 content
expectations and is clean. Coverage thresholds raised to match.

Shapes verified against the live service 2026-09-14; the Galaxy CLI
(reactome/reactome_galaxy) was the pointer to this service existing at all.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@adamjohnwright
adamjohnwright merged commit a9ee834 into main Sep 14, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant