Skip to content

NIH Highlighted-Topic Classification

dismech carries a secondary, non-primary classification that tags disease entries and curation projects with the NIH "Highlighted Topics" funding priorities they are relevant to. It records grant-strategy relevance — which funding calls a body of curation could support — and is deliberately not a disease nosology. An entry may carry several tags or none, alongside its primary classifications (Harrison's chapter, mechanistic nosology, ICIMD, …).

Why it is generated, not hand-written

Each NIH highlighted topic carries a ~2-year expiration date, so the list is transient. Rather than hand-maintain an enum, the classification is generated from a dated snapshot:

Artifact Path
Snapshot data (72 topics) data/nih_highlighted_topics/topics.tsv
Snapshot manifest (date, source URL) data/nih_highlighted_topics/MANIFEST.yaml
Generator script scripts/gen_nih_topics_enum.py
Generated LinkML enum src/dismech/schema/classifications/nih_research_priorities.yaml

Do not hand-edit the generated enum. To refresh after NIH updates the list:

# 1. Re-scrape the topic pages into data/nih_highlighted_topics/topics.tsv
#    (each topic lives at .../highlighted-topics/<topic_number>)
# 2. Update MANIFEST.yaml (snapshot_date, topic_count)
# 3. Regenerate the enum:
python scripts/gen_nih_topics_enum.py
# 4. Verify it is in sync (used in CI/tests):
python scripts/gen_nih_topics_enum.py --check

Enum key format

Keys are NIH_HT_<topic_number>_<short_slug>, e.g. NIH_HT_89_cellular_quiescence_senescence_cell_death_in. The topic number is the stable anchor (it is the NIH URL slug); the trailing slug is for human readability and may shift if NIH rewords a title. Each value's description carries the full title, expiration date, and the canonical topic URL.

Tagging a disease entry

Add assignments under the disease's classifications.nih_research_priority list. Use notes to justify the relevance; add evidence only where a specific claim backs it.

classifications:
  harrisons_chapter:
  - classification_value: IMMUNE_RHEUMATOLOGIC
  nih_research_priority:
  - classification_value: NIH_HT_89_cellular_quiescence_senescence_cell_death_in
    notes: >-
      Osteoarthritis conforms to the cellular_senescence module (senescent
      chondrocyte accumulation with SASP driving cartilage degradation),
      making it relevant to NIH Highlighted Topic 89.

Worked example: kb/disorders/Osteoarthritis.yaml.

Tagging a curation project

Add a nih_topics list to the project's YAML frontmatter (see Curation projects). The keys are validated against the same enum and render as blue linked chips on the project page.

---
title: Cancer Curation Project
nih_topics:
  - NIH_HT_42_rare_cancers_across_cancer_control_continuum
  - NIH_HT_68_childhood_adolescent_young_adult_aya_cancer
---

Worked example: projects/CANCER.md.

Bulk tagging by structural signal

scripts/tag_nih_topics.py applies topic tags to disease entries using the structural signals already in the KB — currently conforms_to module edges — so every tag is mechanism-grounded and auditable, never keyword-guessed. It is idempotent (an entry already carrying a topic tag is left unchanged) and preserves file formatting via ruamel round-trip.

python scripts/tag_nih_topics.py --dry-run   # report what would change
python scripts/tag_nih_topics.py             # apply

The current rule set tags NIH Topic 89 on entries whose pathophysiology conforms to an aging/senescence-hallmark module (cellular_senescence, senescence_tumor_suppression, genomic_instability_aging, inflammaging, telomere_attrition, loss_of_proteostasis). Extend the RULES table as new defensible structural signals emerge.

Topics that require per-entry human judgement (rare-cancer status, pediatric onset, broad autoimmune scope) are deliberately not auto-applied — tag those by hand where the evidence supports it.

Coverage summary page

scripts/gen_nih_topics_summary.py builds a self-contained, client-side-filterable HTML page (pages/nih-topics/index.html) that aggregates every nih_research_priority disease tag and nih_topics project tag live from the KB, grouped by topic. It has a search box and an "only tagged topics" toggle, and each disease/project pill links to its page.

python scripts/gen_nih_topics_summary.py            # regenerate
python scripts/gen_nih_topics_summary.py --check     # fail if stale
just gen-nih-topics-page                             # via justfile

The page is DERIVED (like all of pages/) — regenerated by just gen-all (it is wired into that target), so don't hand-edit it. It is intentionally not linked from the top-level nav.