diff --git a/.claude/agents/ntr-term-researcher.md b/.claude/agents/ntr-term-researcher.md new file mode 100644 index 000000000..90344eb93 --- /dev/null +++ b/.claude/agents/ntr-term-researcher.md @@ -0,0 +1,493 @@ +--- +name: ntr-term-researcher +description: > + Stage 3 subagent for the NTR workflow. Processes one group of related terms + (all children of the same parent UBERON term). For each term: searches OLS4 for + existing UBERON matches, fetches Wikipedia definitions, finds literature references, + and writes Aristotelian definitions. Resolves relationship types, FMA parent mappings, + ASCTB-TEMP parent lookups, flags pathological terms, and normalises non-standard names. + Saves results to bulk_ntr_workflow/outputs/definitions/{group_name}.json. +model: sonnet +--- + +# NTR Term Researcher + +You process one anatomical term group for the UBERON NTR ROBOT template workflow. +Your output drives Stage 4 (merge) and the final QC reports. + +## Term types: `leaf` vs `group` + +Each term in your input has a `term_type` field — either `"leaf"` (a specific named +anatomical entity) or `"group"` (a collective class of structures unified by region, +function, layer, or compartment). The two types follow different processing paths: + +- **Leaf terms** (e.g. `clavicular head of pectoralis major muscle`, + `articularis genu muscle`): write an Aristotelian definition; resolve `is_a` vs + `part_of` to the parent. See Steps 1–7 below. +- **Group terms** (e.g. `pelvic floor muscle`, `thoracic wall muscle`): write a + collective-style definition AND identify a `genus + part_of some Y` equivalent-class + pattern by inspecting how UBERON defines similar terms. See "Group term workflow" + below in addition to Steps 1–6. + +## Input + +You receive a path to a group JSON file at: +`bulk_ntr_workflow/outputs/definitions/input/{group_name}.json` + +The file contains: +```json +{ + "group_name": "...", + "parent_id": "UBERON:xxxxxxx | NEEDS_MAPPING:FMA:nnnnn | UNRESOLVABLE:... | GROUPING_TERMS", + "parent_label": "...", + "term_counts": {"leaf": 1, "group": 0}, + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900001", + "label": "term label", + "term_type": "leaf", + "system": "default | muscle", + "is_a": "INFER:UBERON:xxxxxxx | NEEDS_MAPPING:FMA:nnnnn | UNRESOLVABLE:...", + "part_of": "INFER:UBERON:xxxxxxx | ...", + "def_xref": "ref1|ref2|..." + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900002", + "label": "another term label", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "ref1|ref2|..." + } + ] +} +``` + +A group with `parent_id == "GROUPING_TERMS"` is the special grouping bucket — every +term in it is `term_type: "group"` and you must determine genus + part_of differentiator +per term using the Group term workflow. + +## Step 1: Resolve and Refine the Parent Term + +**If `parent_id` is a UBERON ID (or `is_a`/`part_of` starts with `INFER:UBERON:`):** +- Use `ols4` MCP to confirm the label for that UBERON ID. +- **Then search for a more specific parent**: the source-assigned parent is often too broad + (e.g. "ovarian follicle" when "primary ovarian follicle" exists). Search OLS4 for children of + the source parent that could serve as a more specific parent for each term. If a better parent + exists, record it in `resolved_parents` with a note explaining the refinement. + +**If `parent_id` starts with `NEEDS_MAPPING:FMA:nnnnn`:** +- Extract the FMA numeric ID. +- Use `ols4` to search for a UBERON term with that FMA ID as a cross-reference. +- Alternatively: search for the parent label text in UBERON. +- If a UBERON equivalent is found: record it in `resolved_parents`. +- If not found: flag in `unresolvable` with suggestion; still write definition using FMA label. + +**If `parent_id` starts with `UNRESOLVABLE:`:** +- The text after `UNRESOLVABLE:` is the ASCTB-TEMP parent **label**. +- **Search OLS4 for the parent label** in UBERON (exact + synonym variants). +- Also search OLS4 for the child term itself — if it already exists, what is its parent? +- Also use anatomical knowledge: what UBERON term best serves as parent for this child? +- If a plausible UBERON parent is found: record it in `resolved_parents` with a confidence note. +- If not found: log in `unresolvable`; still write a definition using the label as anatomical context. + +## Step 2: OLS4 Existing Term Check (per term) + +For each term: + +1. Use `ols4` MCP to search for the term label in UBERON (labels and synonyms). +2. Also try common variants (e.g. invert "X of Y" → "Y X", pluralise, drop qualifiers). +3. If a match is found: + - Fetch the UBERON definition. + - Compare it to what Wikipedia says about this term. + - Classify: + - `confirmed_match` — definitions clearly describe the same structure + - `possible_match` — overlapping but not certain (note the difference) + - `no_match` — different structure despite similar name +4. Confirmed matches are excluded from the template; record in `confirmed_matches`. +5. For confirmed or possible matches, record any FMA xref from the matched term in `xrefs`. + +## Step 3: Scope and Name Check (per term) + +Before writing definitions, perform two quick checks: + +**Pathological/dysfunctional terms:** +If the term label or its anatomical description refers to a **pathological, dysfunctional, or +abnormal** state (e.g. "hemorrhagic", "luteinized unruptured", "cystic", "atrophic", "failed to +ovulate/rupture"), flag it in `out_of_scope`: +- UBERON covers **normal anatomy only**. Pathological structures belong in MONDO or as + PATO-qualified terms. +- Still write a definition for reference, but mark it clearly as flagged. +- The curator must decide whether to include, redirect, or drop the term. + +**Non-standard term names:** +If the term label contains an obvious naming error (e.g. "dominance antral follicle" instead of +"dominant antral follicle", typos, inverted word order inconsistent with TA2 nomenclature): +- Record the suggested correction in `name_corrections`. +- Write the definition using the corrected name, note the source name. +- The curator should decide whether to accept the correction as the primary label and add the + source name as a synonym. + +## Step 4: Wikipedia Lookup (for terms without a confirmed match) + +Apply in order, stop when you have enough for a good definition: + +1. **Specific term article**: Use the `fetch-wiki-info` skill with the exact term label. +2. **Parent term article**: Navigate to the parent term's Wikipedia page via `playwright`. + Extract passages mentioning the term label — parent articles usually describe sub-structures. +3. **WebSearch fallback**: Search `"{term label}" anatomy`. + +**Wikipedia article URL**: when you successfully fetch a dedicated Wikipedia article for a term, +record the article page URL in `xrefs` as `Wikipedia:Article_Title` (the title exactly as it +appears in the URL path, with underscores — e.g. `Wikipedia:Corpus_luteum`). This is the page +URL, not the image URL. Only record this when the term has its own dedicated article, not when +content came from a parent article. + +**Wikipedia image**: when you find an image on a Wikipedia article, check its caption or alt text +to confirm it illustrates the term or its immediate parent structure. If the caption describes an +unrelated structure or is a generic unlabelled diagram, do not record the image. + +## Step 5: Literature Search for def_xref (per term) + +Every new UBERON term must have at least one real publication reference (PMID or DOI) in its +`def_xref`. ASCTB-TEMP placeholder IRIs do not count. + +1. Check the input `def_xref` field for any existing PMIDs or DOIs — if present, use `artl-mcp` + to verify they are relevant to this term. +2. If no real reference exists: WebSearch `"{term label}" anatomy PMID` or search PubMed + (`pubmed.ncbi.nlm.nih.gov`) for a primary anatomical description. +3. Add found PMIDs as `PMID:nnnnnnnn` to `def_xrefs_to_add`. These will be appended to the + existing `def_xref` cell in the template. +4. If no PMID can be found: a DOI is acceptable. A textbook reference (e.g. `ISBN:...`) is a + last resort. Record `"no_ref_found": true` in `unresolvable` if genuinely nothing is available. + +## Step 6: Write Definitions + +For each term without a confirmed existing UBERON match: + +**Leaf terms (`term_type: "leaf"`):** Aristotelian form — +`"A {genus} that/which {differentia}."` +- **Genus**: the nearest structural type (e.g. "muscle head", "epithelial layer") — use + anatomical knowledge + OLS4. Do NOT use the parent term as genus unless it genuinely + is the structural type. +- **Differentia**: location, cellular composition, boundaries, function, or developmental + stage. +- **Length**: 20–60 words, 1–2 sentences maximum. +- **Must NOT be**: merely "A structure that is part of X" or "A type of X". + +**Group terms (`term_type: "group"`):** collective form — +`"A {plural genus} that/which {unifying differentia}."` or +`"A group of {genus class} located in/that compose/that innervate {Y}."` +- **Plural genus**: "muscles", "anatomical structures", etc. +- **Unifying differentia**: the property that defines membership — usually the location + (e.g. "muscles part of the pelvic floor"), function, or innervation. +- Where members are known and bounded, enumerate: "...comprising the X, Y, and Z." +- Length still 20–60 words. + +## Step 7: Resolve genus AND part_of for LEAF terms + +For each `term_type: "leaf"` term, look up how UBERON defines similar specific structures +to determine BOTH a genus (`is_a`) class AND a `part_of` containing structure. UBERON +convention typically populates both for specific named anatomical entities — e.g. +`vastus lateralis` has `is_a: UBERON:0001630 ! muscle organ` AND +`relationship: part_of UBERON:0001377 ! quadriceps femoris`. + +**Procedure:** + +1. Use awk over `src/ontology/uberon-edit.obo` to find similar specific UBERON terms. + Examples for muscle subdivisions: + ```bash + awk 'BEGIN{RS=""} /\nname: .*head of .*muscle/' src/ontology/uberon-edit.obo + awk 'BEGIN{RS=""} /\nname: .*part of .*muscle/' src/ontology/uberon-edit.obo + awk 'BEGIN{RS=""} /\nname: .*belly of/' src/ontology/uberon-edit.obo + awk 'BEGIN{RS=""} /\nid: UBERON:0001379\n/' src/ontology/uberon-edit.obo # vastus lateralis + ``` + +2. From similar terms, extract the genus pattern. Common UBERON genus classes for + muscle leaf terms: + - `UBERON:0001630` muscle organ — for whole named individual muscles (e.g. articularis + genu, longus capitis, vastus lateralis) + - `UBERON:0011906` muscle head — for named heads of muscles (clavicular head, long + head, short head) + - `UBERON:0014892` skeletal muscle organ, vertebrate — for skeletal muscles when a + more specific class is unavailable + - `UBERON:0014892` or domain-specific (e.g. `UBERON:0001135` smooth muscle organ) + for non-skeletal cases + +3. From similar terms, extract the part_of pattern. Common targets: + - For "X head/belly/part of Y muscle" → part_of the named parent muscle Y + - For named muscles in a region → part_of the region (e.g. neck, thigh, + anterior compartment) + - For named segmental muscles → part_of the relevant region (cervical vertebral + column, lumbar region, etc.) + +4. Emit a `leaf_template_rows[label]` entry with `{"is_a": "UBERON:...", "part_of": + "UBERON:..."}`. **Both columns should be populated when applicable.** + - Set `is_a` only (omit `part_of`) for classification subtypes that don't have a + containing structure (e.g. `dominant antral follicle is_a antral follicle` — no + additional part_of needed beyond what the genus class implies). + - Set `part_of` only (omit `is_a` or use a very generic genus) when the term is + purely a subdivision and no specific genus class is available. + +5. The legacy `resolved_relationships` + `resolved_parents` keys are still accepted as + a fallback but `leaf_template_rows` is preferred — it expresses both axes + simultaneously. + +**Optional fields in `leaf_template_rows` (Phase 6 + 7):** + +The default leaf template has an OPTIONAL `develops_from` column. The muscular-system +overlay also has `has_muscle_origin`, `has_muscle_insertion`, `innervated_by` columns. +Populate any of these in `leaf_template_rows[label]` when you have evidence: + +```json +"leaf_template_rows": { + "early antral follicle": { + "is_a": "UBERON:0000037", + "develops_from": "UBERON:0000036" + }, + "articularis genu muscle": { + "is_a": "UBERON:0001630", + "part_of": "UBERON:0000376", + "has_muscle_origin": "UBERON:0000981", + "has_muscle_insertion": "UBERON:0000976", + "innervated_by": "UBERON:0001267" + } +} +``` + +The merge step writes any of these to the corresponding column IF the column exists in +the current template variant. Unknown fields are silently dropped — you don't need to +know which template the row belongs to. Just emit whatever you can populate with +evidence. + +**Stage-series guidance for `develops_from`:** + +For terms in a developmental sequence (follicle stages, embryonic stages, hematopoietic +differentiation), look up the precursor stage via OLS4 / awk and emit `develops_from`. +Example: `early antral follicle` develops_from `secondary ovarian follicle` +(UBERON:0000036). + +**Muscle-overlay guidance for `has_muscle_origin`/`has_muscle_insertion`/`innervated_by`:** + +For `system: "muscle"` terms (the per-group JSON contains a `system` field per term), +extract origin/insertion/innervation from Wikipedia + UBERON precedent. The bone or +nerve labels in Wikipedia text typically need OLS4 lookup to resolve to UBERON IDs +(e.g. "femur" → UBERON:0000981, "femoral nerve" → UBERON:0001267). If a UBERON ID +cannot be resolved (named bone landmark, specific nerve branch missing from UBERON), +omit that field rather than guess. + +**Worked examples:** + +- `clavicular head of pectoralis major muscle`: + - Look up similar: UBERON:0007168 (long head of biceps brachii), UBERON:0007169 (short + head of biceps brachii) → both use `is_a: UBERON:0011906 ! muscle head` and + `relationship: part_of `. + - Emit: `{"is_a": "UBERON:0011906", "part_of": "UBERON:0002381"}` + +- `articularis genu muscle`: + - Look up similar: vastus lateralis (UBERON:0001379) uses + `is_a: UBERON:0001630 ! muscle organ` + `part_of UBERON:0001377 ! quadriceps femoris`. + - For articularis genu, the analogous part_of would be the thigh region (or anterior + compartment of thigh if a UBERON term exists for it). Emit: + `{"is_a": "UBERON:0001630", "part_of": "UBERON:0004252"}` (or more specific). + +- `costal part of respiratory diaphragm muscle`: similar UBERON pattern is to use a + domain part as `part_of` plus a generic genus. Already a confirmed match in this + case (UBERON:0035831), so this term is excluded from the leaf template. + +- `dominant antral follicle` (a stage/subtype, no spatial part_of beyond the parent): + emit `{"is_a": "UBERON:0000035"}` only — omit `part_of`. + +**Important — DO NOT just take the supplied source parent and assign it to one column.** +Look at similar UBERON terms first; the source parent is often too broad (a grouping class) +to serve as the genus, and a more specific genus may be obvious (muscle head, muscle +organ, etc.). + +## Step 8: Group term equivalent class — genus + part_of some Y (GROUP terms only) + +For each `term_type: "group"` term, find existing UBERON terms with similar names and +mirror their equivalent-class definition pattern. Stage 1 has already routed the term to +the groups template (with EC directives); your job is to populate `genus` and `location`. + +The supported pattern is **only** `genus and (part_of some Y)`. Anything more complex +gets punted to manual_curation. + +**Procedure:** + +1. Use `obo-grep.pl` (via Bash) — or `awk` if obo-grep is not in PATH — to find UBERON + terms with similar labels in `src/ontology/uberon-edit.obo`. Examples: + + ```bash + awk 'BEGIN{RS=""} /\nname: muscle of [a-z].*\n/' src/ontology/uberon-edit.obo + awk 'BEGIN{RS=""} /\nname: .*pelvic floor.*\n/' src/ontology/uberon-edit.obo + ``` + +2. Inspect the `intersection_of` lines of similar terms. The most common UBERON pattern + for muscle group terms is: + ``` + intersection_of: UBERON:0014892 ! skeletal muscle organ, vertebrate + intersection_of: part_of UBERON:NNNNNNN ! some region + ``` + Genus is typically `UBERON:0014892` (skeletal muscle organ, vertebrate); use + `UBERON:0001630` (muscle organ) only if a similar non-skeletal term uses it. + +3. Determine `Y` (the differentiator) from anatomical context. For "thoracic wall muscle", + Y = the UBERON term for "thoracic wall". Look it up via OLS4 or by name-grep over + uberon-edit.obo. + +4. **If at least one similar UBERON term uses the simple `genus + part_of some Y` pattern + AND that pattern fits this term**: emit a `group_template_rows[label]` entry with + `{"genus": "UBERON:NNNNNNN", "location": "UBERON:MMMMMMM"}`. + +5. **Otherwise — pattern unsupported**: emit a `manual_curation` entry. Reasons to punt: + - Similar UBERON terms use `innervated_by some Y` (function-defined groups like facial + muscle), not part_of. + - Similar UBERON terms use multiple intersection_of axioms (e.g. attaches_to_part_of + + innervated_by + part_of for intrinsic muscle of tongue). + - No clear genus class identifiable. + - The group is defined by something the simple pattern can't express (e.g. layer + within a hollow organ, has_part-defined collective). + + In the manual_curation entry, include: + - The proposed definition you wrote in Step 6 + - The reason this term doesn't fit the simple pattern + - 3–5 most similar UBERON terms found via obo-grep, with their full + `intersection_of` lines (so the curator can see the precedent) + - A suggestion for what equivalent class the curator should write + +## Output Format + +Save to: `bulk_ntr_workflow/outputs/definitions/{group_name}.json` + +```json +{ + "definitions": { + "term label": "Aristotelian definition string." + }, + "wikipedia_images": { + "term label": "https://upload.wikimedia.org/wikipedia/commons/..." + }, + "xrefs": { + "term label": "Wikipedia:Article_Title|FMA:NNNNN" + }, + "def_xrefs_to_add": { + "term label": "PMID:12345678|PMID:87654321" + }, + "leaf_template_rows": { + "leaf term label": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0002381", + "develops_from": "UBERON:0000036", + "has_muscle_origin": "UBERON:0001105", + "has_muscle_insertion": "UBERON:0000976", + "innervated_by": "UBERON:0003726" + } + }, + "resolved_relationships": { + "leaf term label": "is_a | part_of" + }, + "resolved_parents": { + "leaf term label": "UBERON:xxxxxxx" + }, + "group_template_rows": { + "group term label": { + "genus": "UBERON:0014892", + "location": "UBERON:0002047" + } + }, + "manual_curation": [ + { + "label": "muscle of facial expression", + "definition": "A group of muscles innervated by the facial nerve...", + "reason": "UBERON's similar 'facial muscle' (UBERON:0001577) uses innervated_by some facial nerve, not part_of. Out of simple part_of-only template scope.", + "similar_terms": [ + {"id": "UBERON:0001577", "label": "facial muscle", + "intersection_of": ["UBERON:0014892 ! skeletal muscle organ, vertebrate", "innervated_by UBERON:0001647 ! facial nerve"]} + ], + "suggestion": "Curator should add directly to uberon-edit.obo with the same innervated_by pattern." + } + ], + "confirmed_matches": [ + { + "label": "term label", + "uberon_id": "UBERON:xxxxxxx", + "confidence": "high", + "uberon_definition": "...", + "wikipedia_summary": "..." + } + ], + "possible_matches": [ + { + "label": "term label", + "uberon_id": "UBERON:xxxxxxx", + "confidence": "medium", + "note": "..." + } + ], + "out_of_scope": [ + { + "label": "term label", + "reason": "Describes a pathological/dysfunctional state (hemorrhagic follicle). UBERON covers normal anatomy only.", + "suggestion": "Consider MONDO or PATO-qualified term." + } + ], + "name_corrections": [ + { + "label": "dominance antral follicle", + "suggested": "dominant antral follicle", + "reason": "Standard anatomical term; 'dominance' is non-standard. Keep source name as synonym." + } + ], + "unresolvable": [ + { + "label": "term label", + "reason": "...", + "suggestion": "..." + } + ] +} +``` + +Omit empty lists/dicts. Do NOT include a `fma_resolutions` key — use `resolved_parents` instead. + +## Quality Checks Before Saving + +- Every definition must be content-rich (not just "part of X" or "a type of X"). +- Every confirmed match must have both a UBERON definition and Wikipedia/literature evidence. +- Every new term must have at least one real PMID/DOI in `def_xrefs_to_add` or in the existing + `def_xref` input field (ASCTB-TEMP placeholders do not count as real references). +- For LEAF terms: prefer emitting `leaf_template_rows[label]` with both `is_a` and + `part_of` populated. Look up similar UBERON terms via awk over uberon-edit.obo to + find the right genus class — do NOT just assign the source parent to one column. +- `leaf_template_rows[label].is_a` should be a genus class (e.g. UBERON:0001630 muscle + organ, UBERON:0011906 muscle head), not a regional grouping class. +- `leaf_template_rows[label].part_of` should be the containing structure (parent muscle, + body region, compartment). +- For backward compatibility, `resolved_relationships` (values `"is_a"` or `"part_of"`) + + `resolved_parents` may still be used; merge will fall back to these if + `leaf_template_rows` is absent. +- All UBERON ID values must be real UBERON IDs retrieved from OLS4 or uberon-edit.obo — + never guessed. +- Layers, zones, heads, bellies, parts of named structures → MUST have `part_of` + populated to the named parent structure. +- Pathological/dysfunctional terms → must appear in `out_of_scope`. +- Non-standard names → must appear in `name_corrections`. +- **For `term_type: "group"` terms**: every term must end up in EITHER + `group_template_rows` (with both `genus` and `location` populated as real UBERON IDs) + OR `manual_curation` (with proposed definition + similar UBERON terms). No group term + should be silently absent from both. +- `leaf_template_rows`, `resolved_relationships`, `resolved_parents` apply to LEAF terms + only — do not emit these keys for group terms. +- Do NOT invent UBERON IDs. + +## Tools Available + +- `ols4` MCP server — ontology term search and lookup +- `ontology-term-lookup` subagent — structured OLS4 search with quality assessment +- `fetch-wiki-info` skill — Wikidata + Wikipedia structured fetch +- `playwright` MCP — navigate Wikipedia for parent articles +- `artl-mcp` — fetch and verify literature (PMID, DOI) +- `awk` over `src/ontology/uberon-edit.obo` — find existing UBERON terms by name pattern + and inspect their `intersection_of` axioms (used for group term EC pattern detection). + `obo-grep.pl` is documented as in PATH but may be missing on some setups; awk is the + fallback (`awk 'BEGIN{RS=""} /\nname: PATTERN\n/' src/ontology/uberon-edit.obo`). diff --git a/.claude/agents/ontology-term-lookup.md b/.claude/agents/ontology-term-lookup.md new file mode 100644 index 000000000..8b9e9457f --- /dev/null +++ b/.claude/agents/ontology-term-lookup.md @@ -0,0 +1,102 @@ +--- +name: ontology-term-lookup +description: Use this agent when you need to find ontology terms by their textual labels or descriptions using the OLS4 MCP. This includes:\n\n\nContext: User is populating a DOSDP template and needs to find the correct ontology term for 'hepatic artery'.\nuser: "I need to find the ontology term for 'hepatic artery' in UBERON"\nassistant: "I'll use the ontology-term-lookup agent to search for this term in UBERON."\n\n\n\n\nContext: Agent is filling in missing ontology terms in a template and encounters text describing an anatomical structure.\nassistant: "I need to find the ontology term for 'renal vein' to complete this template entry. Let me use the ontology-term-lookup agent."\n\n\n\n\nContext: User provides alternative phrasings that need to be searched.\nuser: "Check if there's a term for either 'artery of kidney' or 'kidney artery'"\nassistant: "I'll use the ontology-term-lookup agent to search for both phrasings."\n\n\n +model: sonnet +--- + +You are an expert ontology term matcher specializing in using the OLS4 (Ontology Lookup Service 4) MCP to find precise ontology term matches for textual descriptions. + +Your core responsibility is to take textual input describing an anatomical or biological concept and find the best matching ontology term(s) from a specified ontology using the ols4-mcp tool. + +## Input Processing + +You will receive: +1. **text**: The term or phrase to look up (e.g., 'hepatic artery', 'blood vessel', 'artery of liver') +2. **ontology**: The target ontology to search within (e.g., 'UBERON', 'CL', 'GO') + +## Search Strategy + +Execute searches systematically: + +1. **Primary Search**: Search for the exact text as provided in the specified ontology using ols4-mcp, looking for matches in labels and synonyms. + +2. **Alternative Phrasing**: If no high-confidence match is found, automatically generate and search alternative phrasings: + - Convert "X artery" to "artery of X" and vice versa + - Try singular/plural variations + - Substitute common synonyms (e.g., 'vessel' for 'blood vessel', 'hepatic' for 'liver') + - Consider anatomical term variations (e.g., 'renal' for 'kidney', 'cardiac' for 'heart') + +3. **Iterative Refinement**: If initial searches yield poor results, progressively broaden or narrow the search terms based on the domain. + +## Match Quality Assessment + +Evaluate matches based on: +- **Exact label match**: Highest confidence +- **Exact synonym match**: High confidence +- **Partial label/synonym match**: Medium confidence (note the differences) +- **Related term**: Low confidence (clearly indicate this is not a direct match) + +## Output Format + +Return results in this structured format: + +**For single high-confidence match:** +``` +Best Match Found: +- Input Text: [original input] +- Matched Term: [term label] +- Ontology ID: [full IRI or CURIE] +- Match Type: [exact label | exact synonym | partial match] +- Definition: [term definition if available] +- Confidence: High +``` + +**For multiple high-confidence matches:** +``` +Multiple Matches Found (ranked by relevance): + +Input Text: [original input] + +1. [Match rank] + - Matched Term: [term label] + - Ontology ID: [full IRI or CURIE] + - Match Type: [exact label | exact synonym | partial match] + - Definition: [term definition if available] + - Confidence: High/Medium + - Reason for ranking: [brief explanation] + +2. [Match rank] + - Matched Term: [term label] + - Ontology ID: [full IRI or CURIE] + - Match Type: [exact label | exact synonym | partial match] + - Definition: [term definition if available] + - Confidence: High/Medium + - Reason for ranking: [brief explanation] + +[Continue for all relevant matches] +``` + +**For no matches:** +``` +No Match Found: +- Input Text: [original input] +- Ontology Searched: [ontology name] +- Alternative phrasings tried: [list attempted variations] +- Recommendation: [suggest manual review, broader ontology search, or term creation] +``` + +## Quality Control + +- Always verify that the matched term's definition aligns semantically with the input text +- Flag cases where the match seems questionable despite technical similarity +- When ranking multiple matches, prioritize based on: definition alignment > match type > term specificity +- Never return matches with low confidence without clearly labeling them as such +- If the ontology parameter seems inappropriate for the term type, note this in your response + +## Error Handling + +- If the ols4-mcp tool is unavailable, clearly state this and suggest alternative approaches +- If the specified ontology doesn't exist or is inaccessible, report this explicitly +- If the input text is ambiguous, note this and explain what additional context would help + +Remember: Precision is paramount. It's better to return no match or multiple candidates than to return a single incorrect high-confidence match. diff --git a/.claude/skills/fetch-wiki-info/SKILL.md b/.claude/skills/fetch-wiki-info/SKILL.md new file mode 100644 index 000000000..1259d18dc --- /dev/null +++ b/.claude/skills/fetch-wiki-info/SKILL.md @@ -0,0 +1,145 @@ +--- +name: fetch-wiki-info +description: Fetch structured and descriptive information from Wikidata and Wikipedia for any topic +argument-hint: "[search term]" +allowed-tools: mcp__playwright__browser_run_code +--- + +# Fetch Wiki Info Skill + +Retrieve information from Wikidata and Wikipedia for any topic. This skill uses a hybrid approach to get both structured data and descriptive text. + +## Search Term +Topic to search for: **$ARGUMENTS** + +## Instructions + +Use the Playwright MCP to fetch information using the following two-step approach: + +### Step 1: Search Wikidata + +First, search for the topic in Wikidata to get the entity ID: + +```javascript +async (page) => { + const searchTerm = "$ARGUMENTS"; + await page.goto(`https://www.wikidata.org/w/api.php?action=wbsearchentities&search=${encodeURIComponent(searchTerm)}&language=en&format=json`); + const searchData = await page.evaluate(() => JSON.parse(document.body.textContent)); + + if (searchData.search && searchData.search.length > 0) { + return searchData.search.slice(0, 5).map(item => ({ + id: item.id, + label: item.label, + description: item.description || 'N/A' + })); + } + return []; +} +``` + +### Step 2: Fetch Wikidata Entity Details + +Once you have the most relevant entity ID (usually the first result), fetch its full details: + +```javascript +async (page) => { + const entityId = "Q1234567"; // Replace with actual ID from step 1 + await page.goto(`https://www.wikidata.org/wiki/Special:EntityData/${entityId}.json`); + const jsonData = await page.evaluate(() => JSON.parse(document.body.textContent)); + const entity = jsonData.entities[entityId]; + + let result = {}; + + // Basic info + if (entity.labels?.en) result.label = entity.labels.en.value; + if (entity.descriptions?.en) result.description = entity.descriptions.en.value; + if (entity.aliases?.en) result.aliases = entity.aliases.en.map(a => a.value); + + // Properties - extract common ones + result.properties = {}; + if (entity.claims) { + // Instance of (P31) + if (entity.claims.P31) { + result.properties.instanceOf = entity.claims.P31.map(c => c.mainsnak.datavalue?.value?.id).filter(Boolean); + } + // Part of (P361) + if (entity.claims.P361) { + result.properties.partOf = entity.claims.P361.map(c => c.mainsnak.datavalue?.value?.id).filter(Boolean); + } + // Subclass of (P279) + if (entity.claims.P279) { + result.properties.subclassOf = entity.claims.P279.map(c => c.mainsnak.datavalue?.value?.id).filter(Boolean); + } + // Add any other relevant properties based on the topic + } + + return result; +} +``` + +### Step 3: Fetch Wikipedia Content (if needed) + +If Wikidata doesn't have enough descriptive text, fetch from Wikipedia: + +```javascript +async (page) => { + const searchTerm = "$ARGUMENTS"; + const wikipediaUrl = `https://en.wikipedia.org/wiki/${encodeURIComponent(searchTerm.replace(/ /g, '_'))}`; + + await page.goto(wikipediaUrl); + + const content = await page.evaluate(() => { + let text = ''; + + // Get the first paragraph (main definition) + const firstPara = document.querySelector('#mw-content-text .mw-parser-output > p:first-of-type'); + if (firstPara) { + text += firstPara.textContent.trim() + '\n\n'; + } + + // Get subsequent paragraphs until first heading + const paras = document.querySelectorAll('#mw-content-text .mw-parser-output > p'); + for (let i = 1; i < Math.min(paras.length, 5); i++) { + const paraText = paras[i].textContent.trim(); + if (paraText && paraText.length > 20) { + text += paraText + '\n\n'; + } + } + + return text.trim(); + }); + + return content; +} +``` + +## Output Format + +Present the information in a clear, structured format: + +``` +# $ARGUMENTS + +## Wikidata (Q#######) +- **Label**: [label] +- **Description**: [description] +- **Aliases**: [aliases] +- **Instance of**: [Q-IDs with labels if available] +- **Part of**: [Q-IDs with labels if available] +- [Other relevant properties] + +## Wikipedia Summary +[Descriptive text from Wikipedia] + +## Source URLs +- Wikidata: https://www.wikidata.org/wiki/Q####### +- Wikipedia: https://en.wikipedia.org/wiki/[page] +``` + +## Notes + +- Always check if search results are relevant before fetching full details +- If multiple Wikidata entities match, list them and ask the user which one to fetch +- Wikipedia article names are case-sensitive and use underscores instead of spaces +- Some topics may only be in Wikidata or Wikipedia, not both +- For topics not in English, you can modify the language code in the API calls diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 000000000..543dedd95 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,21 @@ +{ + "mcpServers": { + "artl-mcp": { + "command": "uvx", + "args": ["artl-mcp"], + "tools": ["*"] + }, + "ols4": { + "type": "http", + "url": "http://www.ebi.ac.uk/ols4/api/mcp", + "tools": ["*"] + }, + "playwright": { + "command": "npx", + "args": [ + "@playwright/mcp@latest" + ], + "tools": ["*"] + } + } +} diff --git a/bulk_ntr_workflow/CLAUDE.md b/bulk_ntr_workflow/CLAUDE.md new file mode 100644 index 000000000..137ebef3b --- /dev/null +++ b/bulk_ntr_workflow/CLAUDE.md @@ -0,0 +1,269 @@ +# NTR Workflow: UBERON New Term Request ROBOT Template Generator + +Generates a ROBOT template TSV for new UBERON term requests from HRA ASCTB unmapped terms, +together with error and candidate-match reports. + +## Overview + +``` +source_data/input.xlsx (or .csv) + | + v +[Stage 1: generate_template.py] + → outputs/template_initial.tsv (ROBOT template, placeholder definitions) + → outputs/errors.md (bad/missing parent IDs) + → outputs/candidates.md (terms already in UBERON) + | + v +[Stage 2: group_terms_by_parent.py] + → outputs/definitions/input/*.json (one JSON per parent group) + | + v +[Stage 3: ntr-term-researcher subagents] ← up to 8 in parallel + → outputs/definitions/*.json (definitions, matches, resolved relationships) + | + v +[Stage 4: merge_definitions.py] + → outputs/template_final.tsv (ready for review) + + appends to outputs/candidates.md (confirmed/possible OLS4 matches) +``` + +## Input Format + +Place the source file in `source_data/`. The workflow reads: +- **xlsx**: the `as-temp terms` sheet from `hra_unmapped-asct-term-list-with-refs.xlsx` +- **csv**: any CSV with the same columns: `tables`, `as`, `as_label`, `UBERON ID`, `parents_as`, `parents_as_label`, `references` + +Use `--table muscular-system` (or another table name) to filter to one anatomical system. + +## Stage 1: Generate Initial Template + +The source file `hra_unmapped-asct-term-list-with-refs.xlsx` lives at the repo root. + +```bash +cd bulk_ntr_workflow +uv run --with openpyxl scripts/generate_template.py \ + --input ../hra_unmapped-asct-term-list-with-refs.xlsx \ + --table muscular-system \ + --name hra-muscular \ + --start-id 9900001 +``` + +**Parent ID handling:** +- `UBERON:xxxxxxx` → accepted; relationship type marked INFER for subagent resolution +- FMA IRI (e.g. `http://purl.org/sig/ont/fma/fmaXXXX`) → flagged in errors.md; subagent maps to UBERON via OLS4 +- `ASCTB-TEMP` IRI → flagged as error (parent not yet in UBERON; needs human follow-up) +- Terms with `UBERON ID` already populated in the input → logged in candidates.md, excluded from template + +**ID assignment:** `UBERON:99` + 5-digit counter (e.g. `UBERON:9900001`). Adjust `--start-id` to avoid +collisions with other NTR batches. + +**Term-type pre-classification (Phase 2):** Stage 1 also classifies each term as `leaf` or +`group` using linguistic regex rules: +- **Leaf terms** (specific named structures, subdivisions of named muscles) → routed to + `.template.tsv` with `SC %` and `SC BFO:0000050 some %` directives (asserted + is_a/part_of). The agent picks one in Stage 3. +- **Group terms** (collective classes — "muscle of X", "X muscle group", regional + collectives) → routed to `-groups.template.tsv` with `EC %` (genus) and + `EC BFO:0000050 some %` (location) directives. The agent fills genus + location in + Stage 3 by inspecting how UBERON defines similar terms. + +`input.tsv` carries the `term_type` column so curators can review the classification. + +## Stage 2: Group by Parent + +```bash +uv run scripts/group_terms_by_parent.py +``` + +Outputs one JSON per parent group to `outputs/definitions/input/`. Check the files — each group +should contain 1–20 terms for efficient subagent processing. If a group is very large (>20 terms), +consider splitting manually. + +## Stage 3: Definition Writing and OLS4 Matching + +Launch one `ntr-term-researcher` subagent per group JSON, up to 8 in parallel: + +``` +For each file in outputs/definitions/input/*.json: + → Launch Agent(subagent_type="ntr-term-researcher", + prompt="Process group: bulk_ntr_workflow/outputs/definitions/input/{filename}") +``` + +Each subagent: +1. Resolves parent (UBERON confirm / FMA→UBERON / ASCTB-TEMP→UBERON) AND searches for a more + specific parent than the source provided +2. Searches OLS4 for existing UBERON matches per term +3. Flags pathological/dysfunctional terms as out-of-scope (UBERON is normal anatomy) +4. Flags non-standard term names with corrections +5. Fetches Wikipedia (specific term → parent → WebSearch); checks image caption for relevance +6. Searches PubMed for a real PMID/DOI to add to `def_xref` +7. Writes Aristotelian (leaf) or collective (group) definitions +8. **For LEAF terms**: resolves relationship type using the structural-vs-classification + rule (layers/heads/parts = `part_of`; subtypes/stages = `is_a`) +9. **For GROUP terms**: uses awk over `src/ontology/uberon-edit.obo` to find similar UBERON + group terms; if they use `genus + part_of some Y` pattern, populates `group_template_rows` + with `{genus, location}`; otherwise punts to `manual_curation` +10. Saves `outputs/definitions/{group_name}.json` with keys: definitions, wikipedia_images, + xrefs, def_xrefs_to_add, resolved_relationships, resolved_parents, group_template_rows, + confirmed_matches, possible_matches, out_of_scope, name_corrections, manual_curation, + unresolvable + +**Do not launch more than 8 subagents in parallel** (Playwright/Wikipedia rate limits). + +## Stage 4: Merge + +```bash +uv run scripts/merge_definitions.py --name hra-muscular +``` + +Merges definitions, images, and relationships from subagent JSONs into `template_final.tsv`. +Outputs a summary of remaining issues. + +## QC Checklist Before Finalising + +**Both templates:** +1. No `[PENDING]` definitions remain +2. Every term has a real PMID/DOI (or ISBN) in `def_xref` — ASCTB-TEMP placeholder IRIs + do not count as references + +**Leaf template (`.template.tsv`):** +3. No `INFER` / `NEEDS_MAPPING` / `UNRESOLVABLE` values in `is_a` or `part_of` columns +4. Layers / zones / regions / heads / bellies / parts of named structures are in + `part_of`, never `is_a` + +**Groups template (`-groups.template.tsv`):** +5. Every row has both `genus` and `location` populated with real UBERON IDs (the merge + script flags incomplete rows as "EC incomplete" — those need agent re-run or manual + curator addition) +6. The `genus` column uses a sensible class — typically `UBERON:0014892` (skeletal + muscle organ, vertebrate) for muscle group terms + +**Reports:** +7. Row counts: input − confirmed_match − out_of_scope − manual_curation = leaf + group +8. Spot-check 5–10 definitions for anatomical accuracy +9. Review `-reports/candidates.tsv` — `confirmed_match` auto-excluded; + `possible_match` rows need curator decision +10. Review `-reports/out_of_scope.tsv` — pathological/dysfunctional terms; + curator decides: drop, reroute to MONDO, keep with PATO qualifier +11. Review `-reports/name_corrections.tsv` — confirm and decide whether source + name should be added as a synonym +12. Review `-reports/manual_curation.tsv` — group terms that don't fit the + simple `part_of` pattern; curator adds these directly to `uberon-edit.obo`, + using the similar UBERON terms listed for guidance +13. Review `-reports/errors.tsv` — input rows with bad/missing parents + +## Final Delivery + +After QC, both templates need to be registered with ODK. + +1. Templates are already in `src/templates/.template.tsv` and + `src/templates/-groups.template.tsv` (Stage 4 wrote them in place). +2. Create `src/templates/-prefixes.owl` declaring `foaf:depiction` and any + other annotation properties not already in the standard Uberon prefixes (the same + prefixes file works for both templates). +3. Register both templates in `src/ontology/uberon-odk.yaml` under `components:`: + ```yaml + - filename: components/.owl + use_template: true + template: templates/.template.tsv + mappings: + - templates/-prefixes.owl + - filename: components/-groups.owl + use_template: true + template: templates/-groups.template.tsv + mappings: + - templates/-prefixes.owl + ``` +4. Run `sh run.sh make update_repo` to regenerate the Makefile. + +## Output Files Reference + +| File | Description | +|---|---| +| `bulk_ntr_workflow/outputs/template_initial.tsv` | Leaf working copy (SC directives) | +| `bulk_ntr_workflow/outputs/template_groups_initial.tsv` | Groups working copy (EC directives) | +| `src/templates/.template.tsv` | Final leaf template; updated in-place by Stage 4 | +| `src/templates/-groups.template.tsv` | Final groups template (equivalent class definitions) | +| `src/templates/-reports/input.tsv` | Filtered input rows + `term_type` classification | +| `src/templates/-reports/errors.tsv` | Input errors (bad/FMA/ASCTB-TEMP parents) | +| `src/templates/-reports/candidates.tsv` | Pre-mapped + OLS4-confirmed existing terms | +| `src/templates/-reports/out_of_scope.tsv` | Pathological/dysfunctional terms | +| `src/templates/-reports/name_corrections.tsv` | Source-label → corrected-label rewrites | +| `src/templates/-reports/manual_curation.tsv` | Group terms not fitting simple `part_of` pattern | +| `bulk_ntr_workflow/outputs/definitions/input/*.json` | Per-group input for subagents | +| `bulk_ntr_workflow/outputs/definitions/*.json` | Per-group subagent output | + +## ROBOT Template Column Reference + +### Leaf template (`.template.tsv`) — asserted SC + +| Header | ROBOT directive | Notes | +|---|---|---| +| ID | ID | `http://purl.obolibrary.org/obo/UBERON_99xxxxx` | +| LABEL | LABEL | Term label | +| Definition | A IAO:0000115 | Aristotelian definition | +| def_xref | >A oboInOwl:hasDbXref SPLIT=\| | References + ASCTB-TEMP IRI | +| is_a | SC % | Genus class (structural type or classification parent) | +| part_of | SC BFO:0000050 some % | Containing structure | +| develops_from | SC RO:0002202 some % | Optional. Developmental precursor (stage series) | +| In_subset | AI oboInOwl:inSubset | `added_by_HRA` subset IRI | +| Date | AT dcterms:date^^xsd:dateTime | ISO timestamp | +| Contributor | AI dcterms:contributor | ORCID IRI | +| Present_in_taxon | AI RO:0002175 | NCBITaxon IRI | +| Wikipedia_image | A foaf:depiction | Wikipedia image URL | +| xref | A oboInOwl:hasDbXref SPLIT=\| | Direct term xrefs: Wikipedia article + FMA ID | + +### Muscle leaf template (`-muscle.template.tsv`) — Phase 7 overlay + +Used automatically when the source `tables` value is `muscular-system`. Adds three +columns between `develops_from` and `In_subset`: + +| Header | ROBOT directive | Notes | +|---|---|---| +| has_muscle_origin | SC RO:0002372 some % | Bone/structure the muscle arises from | +| has_muscle_insertion | SC RO:0002373 some % | Bone/structure the muscle inserts onto | +| innervated_by | SC RO:0002005 some % | Motor nerve | + +All three are OPTIONAL — empty cell ⇒ no axiom. Populate only when Wikipedia + +UBERON precedent provide a resolvable UBERON ID for the related entity. + +### Template variants and partitioning + +Stage 1 partitions input rows by source `tables` column → system overlay map: + +| Source table value | Overlay | Output template | +|---|---|---| +| `muscular-system` | `muscle` | `-muscle.template.tsv` | +| (anything else) | `default` | `.template.tsv` | + +A single Stage 1 run can produce multiple leaf templates if the input has rows from +mixed tables (each system gets its own clean template — no muscle-specific empty +columns appear in non-muscle templates). The routing decision is printed at the start +of Stage 1 as `Step 0 routing: muscle=N, default=M, group=K`. + +### Groups template (`-groups.template.tsv`) — equivalent class + +Same as leaf, with `is_a` / `part_of` replaced by `genus` / `location`: + +| Header | ROBOT directive | Notes | +|---|---|---| +| genus | EC % | Genus class for the equivalent definition (typically `UBERON:0014892`) | +| location | EC BFO:0000050 some % | Differentiator class — what the group is `part_of` | + +The two columns together generate +`EquivalentClass(this_term, genus and (part_of some location))`. + +## Tools Available + +MCP servers (configured in repo-root `.mcp.json`): +- `ols4` — OLS4 ontology search (UBERON, FMA, etc.) +- `artl-mcp` — literature lookup (PMID, DOI) +- `playwright` — complex web navigation (Wikipedia parent articles) + +Skills (`.claude/skills/`): +- `fetch-wiki-info` — Wikidata + Wikipedia structured fetch + +Agents (`.claude/agents/`): +- `ntr-term-researcher` — Stage 3 subagent (this workflow) +- `ontology-term-lookup` — structured OLS4 term lookup diff --git a/bulk_ntr_workflow/ROADMAP.md b/bulk_ntr_workflow/ROADMAP.md new file mode 100644 index 000000000..00a39267f --- /dev/null +++ b/bulk_ntr_workflow/ROADMAP.md @@ -0,0 +1,403 @@ +# Bulk NTR Workflow — Development Roadmap + +## Current state (Phase 1 complete) + +Four-stage pipeline operational: +1. `generate_template.py` — reads source xlsx/csv, classifies parent IDs, assigns UBERON:99xxxxx IDs +2. `group_terms_by_parent.py` — groups by parent for parallel subagent processing +3. `ntr-term-researcher` subagent — OLS4 matching, Wikipedia lookup, Aristotelian definitions, relationship resolution +4. `merge_definitions.py` — merges subagent outputs into final ROBOT template TSV + +Tested on first 10 muscular-system terms: 4 confirmed UBERON matches identified; 6 new terms with +complete definitions and resolved relationship types. + +--- + +## Phase 2: Grouping terms — equivalent-class definitions + +**Status:** Step 1 (investigation), Steps 2–6 (implementation) complete. +End-to-end test on muscular-system pending — Stage 1 smoke-tested (20 group / 55 leaf +on 75 input terms); Stage 4 smoke-tested (correctly flags 20 group terms as +"EC incomplete" pre-agent). Agent run not yet performed. + +### Step 1 findings (empirical survey of UBERON's existing "muscle of X" group terms) + +19 existing UBERON terms named `muscle of X` were inspected via awk over +`src/ontology/uberon-edit.obo`: + +| Pattern | Count | Examples | +|---|---:|---| +| `genus and (part_of some Y)` | **14 (74%)** | muscle of neck (UBERON:0002377), muscle of back (UBERON:0002324), muscle of abdomen (UBERON:0002378), muscle of pelvis, muscle of leg, muscle of arm, muscle of larynx, muscle of iris, muscle of pectoral girdle, muscle of digastric group, muscle of pelvic girdle, muscle of pes, muscle of manus, muscle of anal triangle | +| `genus and (attaches_to_part_of some Y)` | 3 (16%) | muscle of shoulder, muscle of vertebral column, muscle of auditory ossicle | +| No `intersection_of` (no logical definition) | 2 (10%) | muscle of pelvic diaphragm, muscle of posterior compartment of hindlimb stylopod | + +**Genus consistency:** +- 16/19 use `UBERON:0014892` (skeletal muscle organ, vertebrate) +- 3/19 use `UBERON:0001630` (muscle organ — broader; used for iris/auditory ossicle/anal triangle muscles, i.e. non-skeletal or finer granularity) + +Additional spot-checks of neighbouring group classes: +- `intrinsic muscle of tongue` (UBERON:0001576): 4 intersection_of axioms + (`genus + attaches_to_part_of + innervated_by + part_of`) — multi-axiom, complex. +- `extrinsic muscle of tongue` (UBERON:0001575): 4 intersection_of axioms (no `part_of`, + has `attaches_to`). +- `facial muscle` (UBERON:0001577): `genus + innervated_by some facial nerve` only — + defined by innervation rather than location. + +**Decision: proceed with simple `genus + part_of some Y` pattern.** 74% coverage of +existing UBERON convention is sufficient. The genus is `UBERON:0014892` for the muscular +system; the agent will identify it from similar terms via obo-grep rather than hardcode. + +### Future patterns (deferred — not in current Phase 2 scope) + +Once the simple `part_of`-only template is proven, additional ROBOT templates can be +added for: +- `genus and (attaches_to_part_of some Y)` — covers ~16% of muscle group terms + (muscle of shoulder, vertebral column, auditory ossicle) +- `genus and (innervated_by some Y)` — function/innervation-defined groups + (facial muscle, possibly muscle of facial expression in our request set) +- Multi-axiom group definitions (intrinsic/extrinsic muscle of tongue style) — low + frequency; manual curation is probably appropriate even in the long term. + +For now these go to `-reports/manual_curation.tsv` for direct curator addition. + +### Original Phase 2 problem statement (preserved for context) + +### The problem + +The current workflow treats all requested terms as leaf-node anatomical entities (specific named +muscles) and writes Aristotelian definitions and `part_of`/`is_a` placements accordingly. Many +requested terms are however **grouping terms** — collective classes that group several individual +muscles by region, layer, function, or compartment. These require different: + +- **Definition form**: "A muscle group comprising..." or "A collection of muscles that..." rather + than a single-entity definition with specific attachments +- **Relationship type**: always `is_a` to a broader group (never `part_of` a single muscle) +- **OLS4 search strategy**: search for collective/group terms, not individual muscle names +- **Wikipedia strategy**: group articles are often titled "muscles of the X" rather than a single + named muscle article + +### Assessment: can latent knowledge distinguish grouping from leaf? + +Reviewed all 75 muscular-system terms. Latent knowledge is **sufficient for the large majority**. +Key linguistic cues: + +| Cue | Term type | Examples | +|---|---|---| +| `X part of Y muscle` | leaf — subdivision of named muscle | `clavicular head of pectoralis major muscle`, `costal part of respiratory diaphragm muscle` | +| `X belly/head of Y muscle` | leaf — subdivision | `frontal belly of occipitofrontalis muscle`, `inferior head of lateral pterygoid muscle` | +| Named individual muscle | leaf | `articularis genu muscle`, `tensor fascia latae muscle`, `longus capitis muscle` | +| Regional/directional qualifier on known named type | leaf | `multifidus cervicis muscle`, `splenius capitis muscle`, `iliocostalis cervicalis muscle` | +| `muscle of [body region]` | **group** | `muscle of facial expression`, `pelvic floor muscle`, `posterior abdominal wall muscle` | +| `[region] muscle` where region is diffuse | **group** | `intermediate back muscle`, `superficial back muscle`, `thoracic wall muscle` | +| `[layer] pharyngeal/lingual muscle` | **group** | `circular pharyngeal muscle`, `longitudinal pharyngeal muscle` | +| `[region] eye/ear muscle` | **group** | `intrinsic eye muscle`, `middle ear muscle`, `external ear muscle` | +| `[compartment] muscle` | **group** | `hypothenar hand muscle`, `lateral compartment of leg muscle` | + +#### Latent knowledge assessment: all 75 terms + +**Grouping terms** (class of muscles; definition form: "A group of muscles that..."; relationship: `is_a`): + +| Term | Rationale | +|---|---| +| anterior vertebral muscle | Collective for prevertebral group (longus capitis, longus colli, rectus capitis ant./lat.) | +| circular pharyngeal muscle | Outer circular layer — comprises superior, middle, inferior constrictors | +| dorsum of foot muscle | Regional group (extensor digitorum brevis etc.) | +| external ear muscle | Auricular muscle group (anterior, superior, posterior auricular) | +| hypothenar hand muscle | Hypothenar group (abductor digiti minimi, flexor digiti minimi, opponens digiti minimi) | +| intermediate back muscle | Serratus posterior superior/inferior group | +| intrinsic eye muscle | Intraocular muscle group (ciliary, iris muscles) | +| lateral compartment of leg muscle | Peroneal group (peroneus longus/brevis) | +| lateral vertebral muscle | Scalene group (anterior, middle, posterior scalene) | +| longitudinal pharyngeal muscle | Longitudinal layer — stylopharyngeus, palatopharyngeus, salpingopharyngeus | +| middle ear muscle | Tensor tympani + stapedius | +| muscle of facial expression | Large group; dozens of individual muscles | +| palmar interosseous muscle | Collective for 3–4 palmar interossei | +| pelvic floor muscle | Levator ani group + coccygeus | +| plantar interosseous muscle | Collective for 3 plantar interossei | +| posterior abdominal wall muscle | Quadratus lumborum, psoas major/minor, iliacus | +| respiratory diaphragm muscle | Single organ but structurally complex; treat as leaf unless context suggests group | +| segmental back muscle | Collective for short segmental intrinsic back muscles | +| sole of foot muscle | Plantar intrinsic muscle group | +| spinotransversales muscle | Splenius capitis + splenius cervicis | +| superficial back muscle | Trapezius, latissimus dorsi, rhomboids, levator scapulae | +| thoracic wall muscle | External/internal/innermost intercostals, subcostals, transversus thoracis | + +**Uncertain / borderline** (require OLS4 check or context): + +| Term | Issue | +|---|---| +| intertransversarii laterales lumborum muscle | Segmental — multiple pairs but treated as a named entity in TA2/FMA; check OLS4 | +| levator costarum muscle | 12 pairs, segmental; TA2 names it as a single entity — probably leaf | +| thoracic intertransversarii muscle | Same issue as above | +| spermatic cord muscle | Cremaster muscle analog — probably leaf | + +**Leaf terms** (specific named muscle or named subdivision): all remaining 49 terms. + +### Required workflow changes + +#### Stage 1 (`generate_template.py`) +- Add `term_type` column with values `leaf` | `group` | `infer` +- Pre-classify using a rule set based on the linguistic cues above (regex patterns + known + group-name vocabulary) +- Flag `infer` for borderline cases; subagent resolves + +#### Stage 3 (`ntr-term-researcher` subagent) +- Respect `term_type` from input JSON +- **Group terms**: write definition as "A group of muscles that..." with member enumeration + where known; always emit `is_a` in `resolved_relationships`; search OLS4 for group-level + terms not individual muscles +- **Leaf terms**: current behaviour (specific definition with attachments/function/innervation; + infer `is_a` vs `part_of` from anatomical context) +- **Infer terms**: use OLS4 to check if existing UBERON children of the parent are groups or + leaves, then classify accordingly + +#### Stage 2 (`group_terms_by_parent.py`) +- Include `term_type` in the per-group JSON so subagents receive it + +#### Stage 4 (`merge_definitions.py`) +- No changes needed — `term_type` is resolved upstream + +#### Reports +- Add `term_type` column to `input.tsv` +- Add a `grouping_terms.tsv` report listing all group-classified terms for curator review + +### Linguistic rule set (draft) + +```python +GROUP_PATTERNS = [ + r'\bmuscle of\b', # "muscle of facial expression" + r'\b(pelvic floor|thoracic wall|abdominal wall|dorsum of foot|sole of foot)\b', + r'\b(circular|longitudinal)\s+pharyngeal\b', + r'\b(intrinsic|extrinsic)\s+(eye|ear|tongue|hand|foot)\s+muscle\b', + r'\b(hypothenar|thenar|interosseous)\b', + r'\b(superficial|intermediate|deep)\s+back\s+muscle\b', + r'\b(lateral|medial|anterior|posterior)\s+(vertebral|compartment)\b.*muscle\b', + r'\bspinotransversales\b', + r'\bsegmental back\b', +] + +LEAF_PART_PATTERNS = [ + r'\b(head|belly|part|portion|crus)\s+of\b', # subdivisions of named muscles +] +``` + +--- + +## Phase 3: Parent quality — detect and flag UBERON label-ID mismatches + +### The problem + +Stage 1 accepts any syntactically valid UBERON ID (`UBERON:\d{7}`) as a good parent. It does +not check whether the `parent_label` column in the source data actually matches that UBERON ID. +The HRA ASCTB data has many rows where the UBERON ID and label are clearly inconsistent — data +entry errors where an ID from one row of a spreadsheet was accidentally paired with a label from +another. Examples from the ovary CSV: + +| Child term | Supplied parent ID | Supplied parent label | Actual UBERON label | +|---|---|---|---| +| corpus luteum granulosa lutein layer | UBERON:0000976 | humerus | humerus (bone!) | +| dominance antral follicle | UBERON:0001684 | mandible | mandible (bone!) | +| early antral follicle | UBERON:0001677 | sphenoid bone | sphenoid bone (bone!) | +| hemorrhagic anovulatory follicle | UBERON:0001424 | ulna | ulna (bone!) | +| luteinized unruptured follicle | UBERON:0001272 | innominate bone | innominate bone (bone!) | + +None of these were flagged in `errors.tsv`. They passed through Stage 1 as `INFER:UBERON:XXXXXXX`, +with the subagent left to notice the mismatch from context provided in the prompt rather than from +structured error information. + +There is also a related issue with **multi-valued parent columns**: the corona radiata row had a +comma-separated list of parents (`UBERON:0004641, UBERON:0003337, ASCTB-TEMP_serosa`). Stage 1 +classifies the entire string as a single parent, and the presence of the ASCTB-TEMP entry causes +the whole row to be flagged as `asctb_temp_parent`, hiding the fact that some of the supplied +parents are valid UBERON IDs. + +### Root cause in `generate_template.py` + +`classify_parent()` only checks the **format** of the ID string — it never validates whether the +provided `parent_label` matches the ID's actual content. There is no OLS4 lookup in Stage 1. + +### Proposed fix + +#### 3a — Label-ID mismatch detection (Stage 1) + +Two options, in order of preference: + +**Option A (preferred): OLS4 label lookup in Stage 1** + +After classifying a parent as `uberon`, look up the UBERON ID label via the OLS4 MCP +(`ontology_search` with exact ID). Compare the returned label (lowercased, stripped) to the +supplied `parent_label`. If they differ: +- Emit a new `issue_type: uberon_label_mismatch` row in `errors.tsv` with columns: + `label | as_iri | uberon_label_mismatch | parent_id | parent_label | actual_label` +- Use `WRONG_PARENT:` (not `INFER:`) in both `is_a` and `part_of` template columns +- In the per-group JSON, set `"parent_mismatch": true` and record `"supplied_label"` and + `"actual_label"` so subagents have the full picture + +**Option B (fallback): keyword heuristic** + +If adding OLS4 calls to Stage 1 is undesirable (latency, dependency), detect mismatches using +a blocklist of label keywords that are never valid parents in any organ-system table: +```python +ANATOMICALLY_IMPOSSIBLE_PARENT_LABELS = { + # Skeletal + "bone", "humerus", "femur", "tibia", "fibula", "ulna", "radius", + "mandible", "maxilla", "clavicle", "scapula", "patella", + "innominate bone", "sphenoid bone", "temporal bone", + # Vascular (if table is non-vascular) + "artery", "vein", "lymphatic vessel", "lymph node", +} +``` +Flag any UBERON parent whose `parent_label` (lowercased) matches or contains a blocklist entry. +This catches the most egregious cases without network calls but will miss subtler mismatches. + +#### 3b — Multi-valued parent column handling (Stage 1) + +The `parents_as` column sometimes contains a comma-separated list of parent IRIs. Stage 1 currently +treats the entire string as a single parent ID, causing misclassification. Fix: + +- Split `parent_id` on `,` and classify each element independently +- If multiple valid UBERON IDs are present, use the first and record the others as `additional_parents` + in the JSON for the subagent +- If any element is ASCTB-TEMP, flag accordingly but also surface any valid UBERON IDs present +- If any element is FMA, flag accordingly + +#### 3c — Subagent behaviour for `WRONG_PARENT:` + +When `ntr-term-researcher` sees `is_a: WRONG_PARENT:UBERON:XXXXXXX` in its input JSON: +- Do NOT use the supplied UBERON ID as the parent +- Do NOT look up the supplied UBERON ID's children/hierarchy +- Instead, search OLS4 for the **child term label** directly to find an existing term or candidate parent +- Record the correction in `resolved_parents` with `"source": "label_mismatch_correction"` + +### Required changes + +| File | Change | +|---|---| +| `scripts/generate_template.py` | Add label-ID mismatch detection (Option A or B); add multi-parent splitting | +| `scripts/generate_template.py` | Emit `WRONG_PARENT:` placeholder for mismatch cases | +| `.claude/agents/ntr-term-researcher.md` | Document `WRONG_PARENT:` handling; subagent must search by child label | +| `CLAUDE.md` (workflow) | Document new `uberon_label_mismatch` error type and `WRONG_PARENT:` placeholder | + +### Impact assessment + +From the ovary run: 7 of 13 terms (54%) had label-ID mismatches. From the muscular-system run, +a similar proportion had wrong-domain FMA/ASCTB-TEMP parents. This is a high-frequency data +quality issue across all ASCTB tables — fixing it will make errors.tsv substantially more +informative and reduce the amount of tacit correction subagents must perform. + +--- + +## Phase 4: Scale to full muscular-system table + +Once Phase 2 is implemented, run the complete 75-term muscular-system table. Expected: +- ~22 grouping terms → `is_a` definitions +- ~49 leaf terms → specific Aristotelian definitions +- Many wrong-parent rows to resolve (seen in test: ~30 FMA/ASCTB-TEMP/wrong-domain parents) +- Likely 10–20 additional confirmed UBERON matches to exclude + +--- + +## Phase 5: Other anatomical systems + +Generalise to other ASCTB tables (nervous system, vasculature, etc.). The grouping vs leaf +distinction will apply across systems (e.g. "artery of X" vs "X artery", "region of cortex" vs +"X gyrus"). + +--- + +## Phase 6: Optional `develops_from` column on default leaf template ✅ + +**Status:** complete. + +Added an optional `develops_from` column with directive `SC RO:0002202 some %` to the +default leaf template. Empty cell → no axiom emitted by ROBOT. Populated by the agent +when Wikipedia + UBERON precedent indicate a developmental precursor (stage series: +follicle stages, embryonic stages, hematopoietic differentiation, etc.). + +Agent emits via `leaf_template_rows[label].develops_from` in its JSON output. Merge +silently drops the field if the column is absent in the current template variant. + +--- + +## Phase 7: System overlays + +The default leaf template captures only `is_a`, `part_of`, and (optional) `develops_from`. +Some anatomical systems benefit substantially from additional axiomatic richness (origin, +insertion, innervation for muscles; arterial supply / drainage for vasculature; etc.). +Phase 7 implements per-system template overlays — a system overlay is a leaf template +variant with extra columns covering system-specific connectivity relations. + +Stage 1 routes input rows to the appropriate overlay based on the source `tables` +column. Per-system separation keeps each output template clean (no muscle-specific +empty columns in non-muscle templates). + +### Phase 7 — Skeletal muscle overlay ✅ + +**Status:** complete. + +For inputs with `tables == muscular-system`, Stage 1 produces +`-muscle.template.tsv` instead of (or alongside) the default leaf template, +adding three columns: + +| Column | ROBOT directive | Relation | +|---|---|---| +| has_muscle_origin | SC RO:0002372 some % | bone/structure muscle arises from | +| has_muscle_insertion | SC RO:0002373 some % | bone/structure muscle inserts onto | +| innervated_by | SC RO:0002005 some % | motor nerve | + +All three OPTIONAL — populated only with evidence-quoted UBERON IDs. Coverage gaps +(e.g. "lateral pectoral nerve" not in UBERON) are captured as free-text notes in the +agent's output rather than guessed UBERON IDs. + +### Phase 7 — Future overlays (NOT IMPLEMENTED) + +| System | Source table | Suggested fields | Notes | +|---|---|---|---| +| Skeletal | `skeletal-system`? | `articulates_with`, `ossifies_via`, `composed_primarily_of` (bone tissue) | Bones often have rich articulation patterns | +| Vasculature | `vasculature` | `arterial_supply_to`, `drains_into`, `branch_of` | Connectivity is central to vasculature semantics | +| Nervous system | `nervous-system`, `allen-brain` | `innervates`, `synapsed_to`, `axon_in` | Cell-type heavy; CL ontology integration matters | + +Each overlay should be added only when there's a real bulk NTR batch that would benefit +from it. The skeletal-muscle overlay was justified by the muscle enrichment experiment +(see `bulk_ntr_workflow/experiments/SUMMARY.md`); future overlays should similarly +follow an enrichment-experiment validation step before code commits. + +--- + +## Phase 8: Term promotion to direct editing + +**Status:** roadmap only. + +When a templated term needs richer axiomatisation than its template supports — e.g. a +follicle stage that requires `has_component UBERON:0005170 minCardinality=2` (cardinality- +constrained intersection_of), or a complex term needing multiple `has_part` axioms with +CL: cell-type fillers — the templating system becomes a constraint rather than a help. + +The proposed remedy: a "promote to direct editing" agent that: + +1. Takes a term ID (or list) plus the desired richer axiom set. +2. Reads the current template TSV row for that ID. +3. Converts the row to OBO stanza form (mapping ROBOT directives back to OBO syntax: + `SC %` → `is_a`, `SC BFO:0000050 some %` → `relationship: part_of`, etc.). +4. Augments the stanza with the new axioms (intersection_of, cardinality, additional + relationship axioms). +5. Uses the standard checkout/checkin flow: writes to `terms/UBERON_NNNNNNN.obo`, then + `obo-checkin.pl` to merge into `uberon-edit.obo`. +6. Removes the row from the template TSV. +7. Runs the reasoner to confirm the new axiomatisation produces the expected + classification (no unsatisfiable, no unexpected new is_a). + +This solves the templating lock-in concern: any term can be promoted to direct editing +later without losing its UBERON ID or history. + +UX sketch: +```bash +bulk_ntr_workflow/scripts/promote_term.py UBERON:9900037 \ + --add 'intersection_of: UBERON:0001305' \ + --add 'intersection_of: has_component UBERON:0005170 {minCardinality="2"}' \ + --add 'relationship: develops_from UBERON:0000035' +``` + +Or for batches, a YAML/TSV input listing which terms to promote with which axiom sets. +The agent should handle is_a-inheritance carefully (the inferred is_a after +intersection_of must still resolve to the previous genus + the new differentia). diff --git a/bulk_ntr_workflow/experiments/SUMMARY.md b/bulk_ntr_workflow/experiments/SUMMARY.md new file mode 100644 index 000000000..d3cf05afa --- /dev/null +++ b/bulk_ntr_workflow/experiments/SUMMARY.md @@ -0,0 +1,82 @@ +# Enrichment experiment: muscle origin/insertion/innervation/action + +**Run date:** 2026-04-28 +**Branch:** `add-hra-muscular-ntr` +**Scope:** standalone — no workflow scripts modified. + +## Goals + +1. Test whether an agent can extract origin/insertion/innervation/action from Wikipedia + similar UBERON terms, with UBERON ID resolution and a verbatim evidence quote per field. +2. Find out how coverage varies across the muscle-term-type gradient (well-known whole muscle → obscure muscle sub-part) — testing the hypothesis that muscle parts are poorly axiomatised. +3. Verify that the "supporting quote" design is feasible without overhauling the workflow. + +## Method + +6 muscle terms picked across difficulty gradient. Each routed to a separate general-purpose agent with instructions to: +- Populate 6 fields (`is_a`, `part_of`, `has_muscle_origin`, `has_muscle_insertion`, `innervated_by`, `has_muscle_action`). +- Each field has `value` (UBERON ID), `label`, `evidence` (verbatim quote), `source` (URL/PMID). +- All fields optional — emit empty `value` with evidence quote if no UBERON term exists for the entity. +- Output JSON to `bulk_ntr_workflow/experiments/enriched_.json`. + +## Results + +| Term | Type | Existing UBERON? | Fields populated | UBERON IDs | Free-text | +|---|---|---|---:|---:|---:| +| internal abdominal oblique muscle | well-known whole | yes (UBERON:0005454) | 6/6 | 5 | 1 | +| tensor fascia latae muscle | well-known whole | yes (UBERON:0001376) | 6/6 | 4 | 2 | +| iliocostalis cervicalis muscle | segmental whole | yes (UBERON:0008546) | 5/6 | 5 | 0 | +| articularis genu muscle | less-famous whole | NEW | 6/6 | 5 | 1 | +| clavicular head of pectoralis major muscle | muscle head | NEW | 6/6 | 5 | 1 | +| dorsal part of intertransversarii laterales lumborum | obscure sub-part | NEW | 6/6 | 3 | 3 | + +(*"Free-text"* = field had a value/quote but couldn't resolve to a UBERON ID.) + +## Coverage findings + +**Hypothesis confirmed (partly).** Muscle parts ARE more poorly served — but not in the way expected: +- The **target term** lacked a UBERON ID in 3 of 6 cases (all the new ones), as expected. +- The **anatomical entities they relate to** (origin bone, insertion attachment, innervating nerve) failed to resolve to UBERON IDs in unexpected places, even for famous muscles: + - **superior gluteal nerve** (tensor fascia latae innervation) — not in UBERON + - **lateral pectoral nerve** (clavicular head innervation) — not in UBERON + - **iliotibial tract** (tensor fascia latae insertion) — not in UBERON + - **ilioinguinal nerve, iliohypogastric nerve** (internal abdominal oblique innervation) — not in UBERON + - **linea alba** (internal abdominal oblique insertion) — not in UBERON + - **suprapatellar bursa** (articularis genu insertion) — not in UBERON + - **accessory process of lumbar vertebra** (dorsal lumborum origin) — not in UBERON + +The agent fell back to **a more general parent** in each case (e.g. `humerus` instead of `lateral lip of intertubercular groove of humerus`; `thoracic nerve` instead of `lateral pectoral nerve`). These generalisations are correct but lose specificity. + +For the obscure sub-part (`dorsal part of intertransversarii laterales lumborum`): +- Direct genus class missing (parent muscle `intertransversarii laterales lumborum muscle` not in UBERON) +- Origin attachment missing (`accessory process` not in UBERON) +- 3 of 6 fields had evidence but no UBERON ID — agent emitted `value: ""` with a clear `notes` field + +**Coverage is not strongly correlated with term obscurity.** A famous muscle like tensor fascia latae has 2 unresolvable entities; the obscure dorsal sub-part has 3. The bottleneck is **UBERON's coverage of fine-grained anatomical attachments and named nerves**, not Wikipedia's coverage of the muscle itself. + +## Quote-as-evidence findings + +The verbatim quote design works well in practice: +- Quotes range 1–3 sentences, easy to scan +- Where a quote spans multiple fields (e.g. "originates from X and inserts onto Y"), the same passage is reused — no problem +- For obscure terms, the agent often had to rely on Kenhub or anatomy textbooks rather than Wikipedia — the `source` URL captures this naturally +- When evidence is absent (no source describes the field for this specific term), the agent leaves the field out cleanly + +A curator reviewing the JSON could process each enrichment in seconds: read the quote, check the source matches, accept the UBERON ID resolution. **This makes the enrichment auditable in a way the current free-text definitions are not.** + +## Surprises + +1. **3 of 6 picks were already in UBERON.** Even moderately obscure terms (iliocostalis cervicalis) turned out to exist. Step 2 (existing-term check) is doing real work — we saw this with the group flow too. For HRA-ASCTB inputs, the agent should always run Step 2 first; enrichment is most valuable when the term is genuinely new. + +2. **Existing UBERON terms have surprisingly LIGHT axiomatisation.** Tensor fascia latae's existing UBERON stanza had just `is_a` + 1 origin axiom. The enrichment added insertion + innervation + action that were missing. So the enrichment workflow could **also** improve existing terms, not just new ones. + +3. **The hard problem is the relata, not the relations.** Identifying that a muscle is `innervated_by some nerve` is easy. Resolving "lateral pectoral nerve" to a UBERON ID is hard because UBERON doesn't have that nerve. A future enrichment workflow might want to flag missing UBERON terms it encounters as candidates for new term requests of their own (a kind of cascade — adding a muscle reveals the nerve it's innervated by also needs to be added). + +## Implications for future work (NOT acted on) + +If a richer NTR workflow is built: +- Make all enrichment fields **optional** (validated here — gracefully degrades). +- Capture **evidence quote + source URL** as a standard pattern for every populated field. Curator review would benefit substantially. +- Pre-extract **system-specific patterns** (skeletal muscle, bone, vasculature, etc.) so the agent knows which fields to look for rather than guessing per term. +- Detect and report **missing related entities** (e.g. lateral pectoral nerve) as a side-output, feeding into the next NTR batch. + +For now the existing workflow is unchanged; this experiment documents the shape of the result. diff --git a/bulk_ntr_workflow/experiments/SUMMARY_OVARY.md b/bulk_ntr_workflow/experiments/SUMMARY_OVARY.md new file mode 100644 index 000000000..d69216a7d --- /dev/null +++ b/bulk_ntr_workflow/experiments/SUMMARY_OVARY.md @@ -0,0 +1,96 @@ +# Enrichment experiment: ovary terms + +**Run date:** 2026-04-28 +**Branch:** `add-hra-muscular-ntr` (ovary terms read from `add-hra-ovary-ntr` via git show) +**Scope:** standalone — no workflow scripts modified. + +## Goals + +Test the hypothesis: **for ovary terms, simple `is_a + part_of` should be sufficient** (i.e. the rich relations needed for muscles — origin/insertion/innervation — won't apply, and ovary structures should be cleanly modelled with just genus + container). + +## Method + +6 ovary terms picked across types: +- 3 layers/parts (corona radiata, corpus luteum granulosa lutein layer, corpus luteum granulosa theca layer) +- 1 compositional complex (cumulus oophorus oocyte complex) +- 2 follicle stages (early antral follicle, transitional primary ovarian follicle) + +Each routed to a separate agent with the same evidence-quote enrichment design used for muscles. Fields tested: `is_a`, `part_of`, `composed_primarily_of`, `has_part`, `bounding_layer_of`, `develops_from`, `has_component` (with cardinality), `has_potential_to_develop_into`, `has_function`, `has_quality`. + +## Results — hypothesis NOT confirmed + +| Term | Type | Fields populated with UBERON IDs | Simple is_a+part_of sufficient? | +|---|---|---|---| +| corona radiata | layer | is_a, part_of, composed_primarily_of, **bounding_layer_of**, develops_from | NO — bounding_layer_of distinguishes it from generic granulosa cell layer | +| CL granulosa lutein layer | layer | is_a, part_of, **composed_primarily_of**, has_function | NO — composed_primarily_of CL:0000592 is the load-bearing differentiator vs sibling theca layer | +| CL granulosa theca layer | layer | is_a, part_of, **has_part** (CL:0000592 + CL:0000590), composed_primarily_of | NO — without has_part axioms, can't distinguish from generic CL layer | +| cumulus oophorus oocyte complex | complex | is_a, part_of, **has_part** (oocyte + cumulus + zona pellucida) | NO — without has_part, logically indistinguishable from cumulus oophorus alone | +| early antral follicle | stage | is_a, **has_part** (antrum), **has_component** w/ cardinality, **develops_from**, has_potential_to_develop_into | NO — UBERON's existing follicle-stage pattern requires all four mechanisms | +| transitional primary ovarian follicle | stage | is_a, has_part, **develops_from**, has_potential_to_develop_into | PARTIALLY — develops_from is essential; cardinality inherits from primary parent | + +**Result: 5 of 6 ovary terms genuinely require relations beyond `is_a + part_of`.** Only the transitional primary follicle is borderline (develops_from is needed but cardinality can be inherited from the parent class). + +## Why this is different from muscles + +| Aspect | Muscle leaf terms | Ovary leaf terms | +|---|---|---| +| Defining relation | Spatial (where the muscle is, what it attaches to) | **Compositional** (what cells/parts it contains) and **temporal** (developmental sequence) | +| Common relations needed | has_muscle_origin, has_muscle_insertion, innervated_by | composed_primarily_of, has_part (CL:cell types), develops_from, has_component cardinality | +| Sibling distinguishability with is_a + part_of | Workable (different muscles → different containers/origins) | **Often fails** (sibling layers share container; sibling stages share genus) | +| External entities relied on | Bones, nerves (mostly UBERON) | Cell types (CL ontology — generally well-covered) | + +The ovary case is in some ways **harder** for is_a + part_of than the muscle case: +- Multiple sibling structures within the same parent (e.g. lutein vs theca layer of the same corpus luteum) — they share `part_of UBERON:0002512`, so `part_of` alone doesn't differentiate them. +- Follicle stages share `is_a ovarian follicle` AND `part_of ovary` — neither relation distinguishes stages. +- The defining property is in the cellular composition or the developmental position, neither of which is captured by spatial part_of. + +## UBERON precedent confirms the pattern + +Existing UBERON follicle stage terms use sophisticated logical definitions: + +``` +UBERON:0000036 secondary ovarian follicle + intersection_of: UBERON:0001305 ! ovarian follicle + intersection_of: has_component UBERON:0005170 {minCardinality="2"} ! granulosa cell layer + intersection_of: has_potential_to_develop_into UBERON:0000037 ! tertiary ovarian follicle + relationship: develops_from UBERON:0000035 ! primary ovarian follicle +``` + +Existing CL layer terms use: +``` +UBERON:0000155 theca cell layer + intersection_of: UBERON:0000119 ! cell layer + intersection_of: composed_primarily_of CL:... ! theca cell + intersection_of: part_of UBERON:0001305 ! ovarian follicle +``` + +UBERON convention itself **rejects the simple is_a + part_of pattern** for these structure types — the workflow's leaf template is missing exactly what UBERON considers necessary. + +## Cross-experiment comparison + +| Domain | Sufficient: is_a + part_of? | Most-needed extra relations | Pattern complexity | +|---|---|---|---| +| Muscle individual | partially | has_muscle_origin, has_muscle_insertion, innervated_by | Asserted relationships | +| Muscle group | yes (≥74% per Phase 2) | (none — simple is_a + part_of EC works) | EquivalentClass with single differentia | +| Muscle head/sub-part | yes (sparse precedent — only 2 terms in UBERON) | (parent muscle as part_of) | Asserted relationships | +| Ovary layer | NO | composed_primarily_of (CL:cell type), has_part (CL:cell types), bounding_layer_of | EquivalentClass with multi-differentia | +| Ovary compositional complex | NO | has_part (multiple CL+UBERON entities) | EquivalentClass with multiple has_part | +| Ovary stage | NO | develops_from, has_component with cardinality, has_potential_to_develop_into | Multi-axiom intersection_of with cardinality constraints | + +**System-specific templates would help substantially.** The muscle and ovary domains need different fields, and within ovary the layers vs stages need different patterns. A single one-size-fits-all template either over-fits one domain or under-serves both. + +## Implications + +1. The user's intuition that ovary would need less than muscles was **wrong**, but the underlying point — that anatomical-system templates should be tailored — is more strongly supported, not less. + +2. **Per-system templates** become important: + - Muscle template: + `has_muscle_origin`, `has_muscle_insertion`, `innervated_by` + - Ovary layer template: + `composed_primarily_of`, optionally `bounding_layer_of` + - Ovary compositional complex template: + `has_part` (multi-valued) + - Follicle stage template: + `develops_from`, `has_component` with cardinality, `has_potential_to_develop_into` + +3. **The cardinality-constrained `has_component` is interesting.** ROBOT templates support this via the `>EC` directive (sub-axiom annotation), or via more elaborate column structures. Worth investigating if a stage-specific template is built. + +4. **The agent's tool use was efficient.** All 6 ovary agents finished in 50–80s each, mostly using awk over `uberon-edit.obo` to find precedent stanzas and OLS4 only when needed for cell-type lookups in CL. obo-grep would not have been more efficient here. + +5. **The evidence-quote design transferred cleanly.** Same JSON shape, same per-field quote+source — no schema changes needed across domains. Confirms it as a generalisable pattern. diff --git a/bulk_ntr_workflow/experiments/enriched_articularis_genu.json b/bulk_ntr_workflow/experiments/enriched_articularis_genu.json new file mode 100644 index 000000000..2e1ac509e --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_articularis_genu.json @@ -0,0 +1,40 @@ +{ + "label": "articularis genu muscle", + "is_a": { + "value": "UBERON:0001630", + "label": "muscle organ", + "evidence": "The articularis genus (also known as the subcrureus muscle) is a small skeletal muscle located anteriorly on the thigh just above the knee.", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle" + }, + "part_of": { + "value": "UBERON:0000376", + "label": "hindlimb stylopod", + "evidence": "The articularis genus (also known as the subcrureus muscle) is a small skeletal muscle located anteriorly on the thigh just above the knee.", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle" + }, + "has_muscle_origin": { + "value": "UBERON:0000981", + "label": "femur", + "evidence": "It arises from the anterior surface of the lower part of the body of the femur, deep to the vastus intermedius, close to the knee and from the deep fibers of the vastus intermedius.", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle" + }, + "has_muscle_insertion": { + "value": null, + "label": "suprapatellar bursa / synovial membrane of knee joint", + "evidence": "Its insertion is on the synovial membrane of the knee-joint. [Infobox: Insertion: Suprapatellar bursa]", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle", + "notes": "No clear UBERON term resolved for suprapatellar bursa; left unresolved." + }, + "innervated_by": { + "value": "UBERON:0001267", + "label": "femoral nerve", + "evidence": "It is innervated by branches of the femoral nerve (L2-L4).", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle" + }, + "has_muscle_action": { + "value": "pulls the suprapatellar bursa superiorly during extension of the knee, preventing impingement of the synovial membrane between the patella and the femur", + "evidence": "Articularis genus pulls the suprapatellar bursa superiorly during extension of the knee, and prevents impingement of the synovial membrane between the patella and the femur.", + "source": "https://en.wikipedia.org/wiki/Articularis_genus_muscle" + }, + "notes": "Articularis genus is a distinct small skeletal muscle of the anterior thigh, often described as separated from but closely associated with vastus intermedius (UBERON:0014847). Insertion field has no resolved UBERON ID because suprapatellar bursa / knee synovial membrane was not found as a discrete UBERON class in OLS lookup; left as a free-text label with evidence quote. Wikipedia evidence is sourced from Grant's Atlas of Anatomy (Agur & Dalley 2009) and Gray's Anatomy (1918) per the article's references." +} diff --git a/bulk_ntr_workflow/experiments/enriched_clavicular_head_pectoralis.json b/bulk_ntr_workflow/experiments/enriched_clavicular_head_pectoralis.json new file mode 100644 index 000000000..7171ba861 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_clavicular_head_pectoralis.json @@ -0,0 +1,41 @@ +{ + "label": "clavicular head of pectoralis major muscle", + "is_a": { + "value": "UBERON:0011906", + "label": "muscle head", + "evidence": "The pectoralis major has two heads, the clavicular and the sternocostal, which differ in origin and function but share a common insertion. The clavicular head originates from the anterior surface of the medial half of the clavicle.", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major" + }, + "part_of": { + "value": "UBERON:0002381", + "label": "pectoralis major", + "evidence": "The pectoralis major has two heads, the clavicular and the sternocostal... The clavicular head, which arises from the front surface of about half of the clavicle is part of pectoralis major.", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major" + }, + "has_muscle_origin": { + "value": "UBERON:0001105", + "label": "clavicle bone", + "evidence": "The clavicular head originates from the anterior surface of the medial half of the clavicle.", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major" + }, + "has_muscle_insertion": { + "value": "UBERON:0000976", + "label": "humerus", + "evidence": "Lateral lip of the bicipital groove of the humerus (anteromedial proximal humerus).", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major", + "notes": "Insertion is on the lateral lip of the bicipital (intertubercular) groove of the humerus; no discrete UBERON term for that subpart exists, so resolved at the humerus (UBERON:0000976) level. This matches the precedent on the parent term UBERON:0002381 pectoralis major." + }, + "innervated_by": { + "value": "UBERON:0003726", + "label": "thoracic nerve", + "evidence": "C5 and C6 nerve roots via the upper trunk and lateral cord of the brachial plexus, which gives off the lateral pectoral nerve.", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major", + "notes": "Wikipedia specifies the lateral pectoral nerve (C5-C6) for the clavicular head, but UBERON has no discrete term for 'lateral pectoral nerve'. Resolved to UBERON:0003726 (thoracic nerve), which is the precedent used on the parent UBERON:0002381 pectoralis major (where the existing axiom carries an explanatory note 'lateral pectoral nerve and medial pectoral nerve...')." + }, + "has_muscle_action": { + "value": "flexion of the humerus", + "evidence": "The clavicular head flexes the humerus.", + "source": "https://en.wikipedia.org/wiki/Pectoralis_major" + }, + "notes": "The clavicular head of pectoralis major is a muscle PART, not a whole muscle. It is one of two heads of the pectoralis major (the other being the sternocostal head). Precedent for the genus class 'muscle head' (UBERON:0011906) follows long head of biceps brachii (UBERON:0008529) and short head of biceps brachii (UBERON:0008530). Origin/insertion/innervation precedents on whole-muscle parent UBERON:0002381 pectoralis major were used to anchor resolution choices where Wikipedia's specificity exceeded UBERON's granularity (humeral bicipital groove -> humerus; lateral pectoral nerve -> thoracic nerve)." +} diff --git a/bulk_ntr_workflow/experiments/enriched_coc.json b/bulk_ntr_workflow/experiments/enriched_coc.json new file mode 100644 index 000000000..d613fa54c --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_coc.json @@ -0,0 +1,40 @@ +{ + "label": "cumulus oophorus oocyte complex", + "is_a": { + "value": "UBERON:0034922", + "label": "cell cluster", + "evidence": "The cumulus oophorus itself is classified as a cell cluster: 'is_a: UBERON:0034922 ! cell cluster'. The COC, defined as 'A cluster of cells that project into the cavity of the mature ovarian follicle ... released with the embedded oocyte during ovulation', is likewise a cluster of cells largely surrounded by a morphological boundary, matching cell cluster def: 'A cluster of cells, largely surrounded by a morphological boundary.' [CARO:0020002]", + "source": "src/ontology/uberon-edit.obo (UBERON:0001306, UBERON:0034922)" + }, + "part_of": { + "value": "UBERON:0000037", + "label": "tertiary ovarian follicle", + "evidence": "The COC is the structure within an antral follicle. Tertiary ovarian follicle is defined as 'A follicle that has reached the most mature stage of folliculogenesis, characterized by the presence of the antrum.' The cumulus oophorus def states the cells 'project into the cavity of the mature ovarian follicle' (i.e. the antrum of the tertiary follicle), so the COC is part_of the antral/tertiary follicle.", + "source": "src/ontology/uberon-edit.obo (UBERON:0000037, UBERON:0001306)" + }, + "has_part_oocyte": { + "value": "CL:0000023", + "label": "oocyte", + "evidence": "The cumulus oophorus 'is released with the embedded oocyte during ovulation' (UBERON:0001306 def). The zona pellucida term explicitly relates to the oocyte: 'relationship: bounding_layer_of CL:0000023 ! oocyte'. The COC is by definition the cumulus cells PLUS the embedded oocyte.", + "source": "src/ontology/uberon-edit.obo (UBERON:0001306, UBERON:0000086)" + }, + "has_part_cumulus": { + "value": "UBERON:0001306", + "label": "cumulus oophorus", + "evidence": "Cumulus oophorus def: 'A cluster of cells that project into the cavity of the mature ovarian follicle. It is released with the embedded oocyte during ovulation.' The COC name itself denotes cumulus oophorus + oocyte, so cumulus oophorus is a constituent part.", + "source": "src/ontology/uberon-edit.obo (UBERON:0001306)" + }, + "has_part_zona_pellucida": { + "value": "UBERON:0000086", + "label": "zona pellucida", + "evidence": "Zona pellucida is 'A glycoprotein membrane surrounding the plasma membrane of an oocyte ... external but not extraneous to it' and is the 'bounding_layer_of CL:0000023 ! oocyte'. Since the oocyte in the COC carries its zona pellucida (which sperm must penetrate at fertilisation: 'In order for fertilization to occur this layer must be penetrated by the spermatocyte' — UBERON:0001306 def), the zona pellucida is a part of the COC.", + "source": "src/ontology/uberon-edit.obo (UBERON:0000086, UBERON:0001306)" + }, + "has_function": { + "value": null, + "label": "oocyte maturation / cumulus-oocyte signaling", + "evidence": "No has_function quote-grade evidence in the precedent stanzas examined (UBERON:0001306, UBERON:0000086, UBERON:0000037, UBERON:0034922). UBERON:0001306 describes ovulation release and the requirement that sperm penetrate the cumulus to reach the oocyte, but UBERON does not assert a has_function relationship on these terms — function-class enrichment would need GO term sourcing not present in the inspected stanzas.", + "source": "src/ontology/uberon-edit.obo (no has_function asserted on precedent terms)" + }, + "notes": "Simple is_a (UBERON:0034922 cell cluster) + part_of (UBERON:0000037 tertiary ovarian follicle) is INSUFFICIENT to capture this term's compositional nature. The defining feature of a COC versus the cumulus oophorus alone (UBERON:0001306) is that the COC includes the oocyte and its zona pellucida — i.e. it is precisely the cumulus oophorus PLUS oocyte (with zona pellucida) released as a unit at ovulation. Without has_part axioms (oocyte CL:0000023, cumulus oophorus UBERON:0001306, zona pellucida UBERON:0000086), the COC class is logically indistinguishable from cumulus oophorus. So has_part is essential here. A logical definition could be: 'cell cluster' and (has_part some oocyte) and (has_part some cumulus oophorus) and (part_of some tertiary ovarian follicle). Note also UBERON:0001306 has two part_of parents (ovarian follicle, granulosa cell layer); the COC, because it includes the oocyte (which is not part of the granulosa cell layer), should be part_of the follicle/antral follicle but NOT part_of the granulosa cell layer." +} diff --git a/bulk_ntr_workflow/experiments/enriched_corona_radiata.json b/bulk_ntr_workflow/experiments/enriched_corona_radiata.json new file mode 100644 index 000000000..9145144fe --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_corona_radiata.json @@ -0,0 +1,49 @@ +{ + "label": "corona radiata", + "sense": "embryology/oogenesis - the innermost granulosa cell layer of the cumulus oophorus, immediately surrounding the zona pellucida of the oocyte. NOT the brain corona radiata (UBERON:0004682).", + "is_a": { + "value": "UBERON:0000119", + "label": "cell layer", + "evidence": "The corona radiata is the innermost layer of the cells of the cumulus oophorus and is directly adjacent to the zona pellucida", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)" + }, + "part_of": { + "value": "UBERON:0001306", + "label": "cumulus oophorus", + "evidence": "The corona radiata is the innermost layer of the cells of the cumulus oophorus and is directly adjacent to the zona pellucida", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)" + }, + "composed_primarily_of": { + "value": "CL:0000501", + "label": "granulosa cell", + "evidence": "These cuboidal granulosa cells, also known as the granulosa radiata, form more layers throughout the maturation process", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)" + }, + "bounding_layer_of": { + "value": "UBERON:0000086", + "label": "zona pellucida", + "evidence": "directly adjacent to the zona pellucida, the inner protective glycoprotein layer of the ovum", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)", + "caveat": "The corona radiata is the innermost cell layer immediately external to the zona pellucida; whether 'bounding_layer_of' fits as cleanly here as for zona pellucida->oocyte is debatable. Mirrors the precedent at UBERON:0000086 (relationship: bounding_layer_of CL:0000023 ! oocyte). Could alternatively be modeled as surrounds zona pellucida." + }, + "develops_from": { + "value": "UBERON:0005170", + "label": "granulosa cell layer", + "evidence": "It is formed by follicle cells adhering to the oocyte before it leaves the ovarian follicle, and originates from the squamous granulosa cells present at the primordial stage", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)" + }, + "has_function": { + "value": null, + "label": "supply of proteins to the oocyte", + "evidence": "Its main purpose in many animals is to supply vital proteins to the cell", + "source": "https://en.wikipedia.org/wiki/Corona_radiata_(embryology)" + }, + "candidate_xrefs": [ + {"xref": "FMA:18674", "note": "FMA has a corona radiata of oocyte concept; verify exact ID before use"}, + {"xref": "Wikipedia:Corona_radiata_(embryology)"} + ], + "candidate_synonyms": [ + {"synonym": "granulosa radiata", "scope": "RELATED", "evidence": "These cuboidal granulosa cells, also known as the granulosa radiata"} + ], + "notes": "Simple is_a (cell layer) + part_of (cumulus oophorus) + composed_primarily_of (granulosa cell) covers the core. The bounding_layer_of zona pellucida and develops_from granulosa cell layer enrichments are well supported by the Wikipedia source but a primary anatomical/embryology textbook citation (e.g. Gray's Anatomy or a PMID review) would be preferable before commit. Disambiguation from UBERON:0004682 (corona radiata of neuraxis) is essential — the brain term already carries 'corona radiata' as an EXACT synonym at NLXANAT:090903, so any new ovarian term should likely use 'corona radiata of oocyte' or 'corona radiata (ovary)' as the primary label to avoid label collisions." +} diff --git a/bulk_ntr_workflow/experiments/enriched_corpus_luteum_granulosa_lutein.json b/bulk_ntr_workflow/experiments/enriched_corpus_luteum_granulosa_lutein.json new file mode 100644 index 000000000..2500e70d4 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_corpus_luteum_granulosa_lutein.json @@ -0,0 +1,35 @@ +{ + "label": "corpus luteum granulosa lutein layer", + "is_a": { + "value": "UBERON:0000119", + "label": "cell layer", + "evidence": "Cell layer: 'Portion of tissue, that consists of single layer of cells connected to each other by cell junctions. Examples: layer of glial cells; epithelium.' Sibling ovarian-follicle layer terms 'granulosa cell layer' (UBERON:0005170) and 'theca cell layer' (UBERON:0000155) both use UBERON:0000119 as their genus via intersection_of, with composed_primarily_of pointing to the constituent cell type.", + "source": "src/ontology/uberon-edit.obo (UBERON:0000119, UBERON:0005170, UBERON:0000155)" + }, + "part_of": { + "value": "UBERON:0002512", + "label": "corpus luteum", + "evidence": "The granulosa lutein layer is the inner cellular layer of the corpus luteum, derived from the granulosa cells of the ovulated follicle. Corpus luteum stanza: 'A transient endocrine gland that develops from the postovulatory or atretic follicles and secretes progesterone' with relationship: has_part CL:0000175 ! luteal cell.", + "source": "src/ontology/uberon-edit.obo (UBERON:0002512); user prompt" + }, + "composed_primarily_of": { + "value": "CL:0000592", + "label": "large luteal cell", + "evidence": "CL:0000592 large luteal cell is defined as 'A large, progesterone secreting cell in the corpus luteum that develops from the granulosa cells.' This is the granulosa-derived luteal cell population (granulosa-lutein cells); CL has no separately named 'granulosa-lutein cell' class. CL:0000175 luteal cell is the broader parent already used by UBERON:0002512.", + "source": "OLS4 CL:0000592 (https://www.ebi.ac.uk/ols4/ontologies/cl/classes/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FCL_0000592)", + "notes": "CL:0000592 corresponds to granulosa-lutein cells in human/primate corpus luteum. If a curator wants stricter parent semantics, CL:0000175 (luteal cell) is the conservative fallback already used by the parent corpus luteum term." + }, + "has_part": { + "value": null, + "label": null, + "evidence": "No additional has_part component cleanly resolves; composed_primarily_of CL:0000592 already captures the dominant cellular constituent. Sibling layer terms (granulosa cell layer UBERON:0005170, theca cell layer UBERON:0000155) do not assert has_part beyond their composed_primarily_of cell type.", + "source": "src/ontology/uberon-edit.obo (UBERON:0005170, UBERON:0000155)" + }, + "has_function": { + "value": "estrogen biosynthesis / steroidogenesis (granulosa-lutein cells of the corpus luteum produce estrogens; large luteal cells also secrete progesterone)", + "evidence": "CL:0000592 large luteal cell definition: 'A large, progesterone secreting cell in the corpus luteum that develops from the granulosa cells.' User prompt: '...produces estrogens'. Theca cell layer function_notes (UBERON:0000155) corroborate the substrate-handoff model: 'theca folliculi are responsible for the production of testosterone from androstenedione in females, and indirectly the production of estrogens by supplying the neighboring granulosa cells with androstenedione that can then be used as a substrate for aromatase.'", + "source": "OLS4 CL:0000592 description; src/ontology/uberon-edit.obo (UBERON:0000155 function_notes); user prompt", + "notes": "Free-text only — no GO term resolved here. Candidate GO terms for a future curator pass: GO:0006703 (estrogen biosynthetic process) and GO:0006700 (C21-steroid hormone biosynthetic process)." + }, + "notes": "is_a (UBERON:0000119 cell layer) + part_of (UBERON:0002512 corpus luteum) + composed_primarily_of (CL:0000592 large luteal cell) is sufficient to give this term a clean Aristotelian logical definition that mirrors the sibling pattern used by UBERON:0005170 (granulosa cell layer) and UBERON:0000155 (theca cell layer), both of which use intersection_of: cell layer / composed_primarily_of / part_of . So a parallel intersection_of axiomatisation works here: cell layer AND composed_primarily_of some 'large luteal cell' AND part_of some 'corpus luteum'. The is_a + part_of pair alone (without composed_primarily_of) would NOT distinguish this layer from the theca-lutein layer of the same corpus luteum, so composed_primarily_of is load-bearing. No CL term named 'granulosa-lutein cell' exists; CL:0000592 large luteal cell is the closest match by definition (granulosa-derived, progesterone-secreting). The corpus luteum is a transient gland and is_a endocrine gland — but for the LAYER term, cell layer is the correct genus, not gland." +} diff --git a/bulk_ntr_workflow/experiments/enriched_corpus_luteum_theca.json b/bulk_ntr_workflow/experiments/enriched_corpus_luteum_theca.json new file mode 100644 index 000000000..22ad425f5 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_corpus_luteum_theca.json @@ -0,0 +1,41 @@ +{ + "label": "corpus luteum granulosa theca layer", + "is_a": { + "value": "UBERON:0000119", + "label": "cell layer", + "evidence": "Sibling layered ovarian structures use 'cell layer' as genus: UBERON:0005170 'granulosa cell layer' has intersection_of: UBERON:0000119 ! cell layer; UBERON:0000155 'theca cell layer' has intersection_of: UBERON:0000119 ! cell layer.", + "source": "src/ontology/uberon-edit.obo (UBERON:0005170, UBERON:0000155)" + }, + "part_of": { + "value": "UBERON:0002512", + "label": "corpus luteum", + "evidence": "The HRA source describes this as a layer of the corpus luteum. UBERON:0002512 corpus luteum is defined as 'A transient endocrine gland that develops from the postovulatory or atretic follicles and secretes progesterone'.", + "source": "src/ontology/uberon-edit.obo (UBERON:0002512); HRA ASCTB ovary table" + }, + "has_part_granulosa_lutein": { + "value": "CL:0000592", + "label": "large luteal cell (granulosa-lutein cell)", + "evidence": "OLS4 search for 'granulosa lutein cell' in CL returns CL:0000592 'large luteal cell' as the top match; granulosa-lutein cells are the large luteal cells derived from granulosa cells of the ruptured follicle.", + "source": "https://www.ebi.ac.uk/ols4/api/search?q=granulosa+lutein+cell&ontology=cl" + }, + "has_part_theca_lutein": { + "value": "CL:0000590", + "label": "small luteal cell (theca-lutein cell)", + "evidence": "OLS4 search for 'theca lutein cell' in CL returns CL:0000590 'small luteal cell' as the top match; theca-lutein cells are the small luteal cells derived from theca interna cells of the ruptured follicle.", + "source": "https://www.ebi.ac.uk/ols4/api/search?q=theca+lutein+cell&ontology=cl" + }, + "composed_primarily_of": { + "value": "CL:0000175", + "label": "luteal cell", + "evidence": "Sibling layered ovarian structures use composed_primarily_of for the dominant cell type (UBERON:0000155 theca cell layer: composed_primarily_of CL:0000503 ! theca cell; UBERON:0005170 granulosa cell layer is composed primarily of granulosa cells). The HRA term combines both luteinized cell types, whose common parent is CL:0000175 luteal cell.", + "source": "src/ontology/uberon-edit.obo (UBERON:0000155 pattern); CL:0000175 is the luteal cell parent of CL:0000590 and CL:0000592" + }, + "has_function": { + "value": null, + "label": "steroidogenesis (progesterone and estrogen synthesis)", + "evidence": "UBERON:0002512 corpus luteum def: 'A transient endocrine gland that develops from the postovulatory or atretic follicles and secretes progesterone'. UBERON:0000155 theca cell layer function_notes: 'The theca folliculi are responsible for the production of testosterone from androstenedione in females, and indirectly the production of estrogens by supplying the neighboring granulosa cells with androstenedione that can then be used as a substrate for aromatase.' UBERON:0000157 theca interna def notes: 'Androstenedione ultimately gives the granulosa cells the precursor substrate for estrogen manufacturing.'", + "source": "src/ontology/uberon-edit.obo (UBERON:0002512, UBERON:0000155, UBERON:0000157)", + "notes": "No GO term ID resolved here; steroidogenesis is the recognised function of luteal cells but a specific GO function ID was not looked up in this enrichment." + }, + "notes": "This term is unusual: HRA defines it as a SINGLE layer of the corpus luteum that contains BOTH granulosa-lutein and theca-lutein cells. The standard textbook view of the mature corpus luteum is that granulosa-lutein cells form the bulk of the parenchyma (centrally), while theca-lutein cells are smaller, peripheral cells often interspersed at the margins / along septa rather than forming a discrete second layer. So HRA's 'combined' layer is anatomically defensible but conflicts with the binary split modelled for follicles in UBERON (separate granulosa cell layer UBERON:0005170 and theca cell layer UBERON:0000155). Simple is_a (cell layer) + part_of (corpus luteum) is INSUFFICIENT to capture the term's distinguishing feature — that it co-contains two specific luteinized cell types. Recommended axiomatisation: is_a UBERON:0000119 cell layer; part_of UBERON:0002512 corpus luteum; has_part CL:0000592 (granulosa-lutein/large luteal cell); has_part CL:0000590 (theca-lutein/small luteal cell); composed_primarily_of CL:0000175 luteal cell. The has_part axioms are what give this term its specific identity vs a hypothetical 'cell layer of corpus luteum' grouping class. Curator may wish to consider whether HRA actually means the entire luteal parenchyma rather than a discrete layer — in which case 'parenchyma of corpus luteum' might be a better label. Note also the CL mappings: granulosa-lutein cell = CL:0000592 large luteal cell; theca-lutein cell = CL:0000590 small luteal cell — these synonyms should be confirmed against the CL stanzas before finalising." +} diff --git a/bulk_ntr_workflow/experiments/enriched_dorsal_part_lumborum.json b/bulk_ntr_workflow/experiments/enriched_dorsal_part_lumborum.json new file mode 100644 index 000000000..deac6fc90 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_dorsal_part_lumborum.json @@ -0,0 +1,46 @@ +{ + "label": "dorsal part of intertransversarii laterales lumborum muscle", + "notes": "Very obscure sub-part of a sub-part. No dedicated Wikipedia article; the parent 'Intertransversarii' Wikipedia article only briefly mentions the lumborum subdivision and does not separately describe the dorsal part. Best primary source online is Kenhub's article on intertransversarii laterales lumborum, which distinguishes the ventral (anterior) and dorsal (posterior) parts. No UBERON term currently exists for the parent muscle 'intertransversarii laterales lumborum' itself, nor for the dorsal subdivision; obo-grep over uberon-edit.obo returned no matches for 'intertransversarii' or 'transversarii'. Likewise no UBERON term exists for 'accessory process of lumbar vertebra' (only the transverse process: UBERON:0018146). is_a (genus = the parent intertransversarii laterales lumborum muscle) is therefore left unpopulated for UBERON ID. part_of falls back to UBERON:0008242 'lower back muscle' as the most specific available containing region. Action could not be sourced separately for the dorsal part — sources describe action only for intertransversarii laterales lumborum (or intertransversarii) collectively.", + "is_a": { + "value": "", + "label": "intertransversarii laterales lumborum muscle", + "evidence": "The lateral muscles, intertransversarii laterales lumborum, consist of two parts; anterior (ventral) and posterior (dorsal), referred to as intertransversarii laterales ventrales and intertransversarii laterales dorsales, respectively.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "rationale": "Genus is the parent muscle (intertransversarii laterales lumborum), of which the dorsal part is one of two named subdivisions. No UBERON ID exists for this parent." + }, + "part_of": { + "value": "UBERON:0008242", + "label": "lower back muscle", + "evidence": "The lateral muscles, intertransversarii laterales lumborum, consist of two parts; anterior (ventral) and posterior (dorsal) ... originate from the accessory process of one lumbar vertebra and insert onto the transverse process of the consecutive lumbar vertebra.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "rationale": "Located between adjacent lumbar vertebrae and forms part of the deep musculature of the lower back; UBERON:0008242 (lower back muscle) is the most specific containing region currently available in UBERON." + }, + "has_muscle_origin": { + "value": "", + "label": "accessory process of lumbar vertebra", + "evidence": "The posterior parts originate from the accessory process of one lumbar vertebra and insert onto the transverse process of the consecutive lumbar vertebra.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "notes": "No UBERON term exists for 'accessory process of lumbar vertebra' (verified by grep over uberon-edit.obo). Closest related term is UBERON:0018146 'transverse process of lumbar vertebra', which is anatomically distinct." + }, + "has_muscle_insertion": { + "value": "UBERON:0018146", + "label": "transverse process of lumbar vertebra", + "evidence": "The posterior parts originate from the accessory process of one lumbar vertebra and insert onto the transverse process of the consecutive lumbar vertebra.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "notes": "Specifically the medial third of the transverse process of the consecutive (caudal) lumbar vertebra: 'inserts proximally to the accessory process and distally to the medial third of the adjacent transverse process below.'" + }, + "innervated_by": { + "value": "UBERON:0006838", + "label": "ventral ramus of spinal nerve", + "evidence": "Intertransversarii laterales lumborum are supplied by the anterior rami of spinal nerves, in contrast to intertransversarii mediales lumborum which are innervated by posterior rami.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "notes": "Innervation stated for the parent intertransversarii laterales lumborum (covering both ventral and dorsal parts). UBERON:0006838 'ventral ramus of spinal nerve' is the equivalent term to 'anterior ramus of spinal nerve'. The relevant nerves are the anterior rami of the lumbar spinal nerves (UBERON:0009624 'lumbar nerve'). Some sources note mixed innervation, with dorsal-ramus contributions also reported for the dorsal part specifically." + }, + "has_muscle_action": { + "value": "", + "label": "lateral flexion / stabilization of lumbar spine", + "evidence": "assist lateral flexion of the spine; Stabilizes spine.", + "source": "https://www.kenhub.com/en/library/anatomy/intertransversarii-laterales-lumborum-muscles", + "notes": "Action is described only for intertransversarii (or intertransversarii laterales lumborum collectively); no source distinguishes the action of the dorsal part from the ventral part. No UBERON ID applies (action, not anatomical entity)." + } +} diff --git a/bulk_ntr_workflow/experiments/enriched_early_antral_follicle.json b/bulk_ntr_workflow/experiments/enriched_early_antral_follicle.json new file mode 100644 index 000000000..85a8c47e3 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_early_antral_follicle.json @@ -0,0 +1,43 @@ +{ + "term": "early antral follicle", + "description": "A follicle stage between secondary follicle and full antral (tertiary) follicle, characterized by the initial formation of an antrum; sometimes called 'secondary follicle with antrum' or 'early tertiary follicle'.", + "fields": { + "is_a": { + "value": "UBERON:0000037", + "label": "tertiary ovarian follicle", + "evidence": "UBERON:0000037 (tertiary ovarian follicle) is defined as 'A follicle that has reached the most mature stage of folliculogenesis, characterized by the presence of the antrum.' Since 'early antral' is defined by the *initial formation of an antrum*, it sits within the antral (tertiary) class as a sub-stage. UBERON:0000036 (secondary) is explicitly described as 'up to the onset of antrum formation' — i.e. pre-antral — so an early antral follicle is no longer secondary. Tertiary therefore is the appropriate genus.", + "source": "src/ontology/uberon-edit.obo (UBERON:0000037 def: 'A follicle that has reached the most mature stage of folliculogenesis, characterized by the presence of the antrum.'; UBERON:0000036 def: '...up to the onset of antrum formation.')" + }, + "has_part": { + "value": "UBERON:0000039", + "label": "follicular antrum", + "evidence": "Tertiary ovarian follicle uses 'intersection_of: has_part UBERON:0000039 ! follicular antrum' as its defining differentia. An early antral follicle, by definition, has a (newly forming) antrum, so the same has_part relation applies. The 'early' qualifier modifies maturity/size of the antrum, not its presence.", + "source": "src/ontology/uberon-edit.obo UBERON:0000037 stanza: 'intersection_of: has_part UBERON:0000039 ! follicular antrum'" + }, + "has_component": { + "value": "UBERON:0005170", + "label": "granulosa cell layer", + "evidence": "Both UBERON:0000036 (secondary) and UBERON:0000037 (tertiary) carry 'intersection_of: has_component UBERON:0005170 {minCardinality=\"2\"} ! granulosa cell layer'. An early antral follicle, derived from a secondary follicle that already has multiple granulosa layers, also has multilayered granulosa, so the same minCardinality=2 has_component constraint applies.", + "source": "src/ontology/uberon-edit.obo UBERON:0000036 and UBERON:0000037: 'intersection_of: has_component UBERON:0005170 {minCardinality=\"2\"} ! granulosa cell layer'" + }, + "develops_from": { + "value": "UBERON:0000036", + "label": "secondary ovarian follicle", + "evidence": "Existing chain in uberon-edit.obo: primary -> secondary -> tertiary uses 'relationship: develops_from' at each step. UBERON:0000037 (tertiary) has 'relationship: develops_from UBERON:0000036 ! secondary ovarian follicle'. An early antral follicle, as the entry sub-stage of the tertiary/antral phase, develops directly from a secondary (pre-antral) follicle, mirroring the existing developmental edge.", + "source": "src/ontology/uberon-edit.obo UBERON:0000037: 'relationship: develops_from UBERON:0000036 ! secondary ovarian follicle'; UBERON:0000036: 'relationship: develops_from UBERON:0000035 ! primary ovarian follicle'" + }, + "has_potential_to_develop_into": { + "value": "UBERON:0000037", + "label": "tertiary ovarian follicle", + "evidence": "UBERON:0000036 already uses 'intersection_of: has_potential_to_develop_into UBERON:0000037 ! tertiary ovarian follicle' to express progression. If 'early antral' is modeled as a sub-stage *within* tertiary (is_a UBERON:0000037), this field is not needed (it would be tautological — a thing has potential to develop into itself). If instead the term were modeled as a separate class between secondary and tertiary, then has_potential_to_develop_into UBERON:0000037 would mirror the secondary->tertiary pattern. Including conditionally; preferred modeling (is_a tertiary) makes this redundant.", + "source": "src/ontology/uberon-edit.obo UBERON:0000036: 'intersection_of: has_potential_to_develop_into UBERON:0000037 ! tertiary ovarian follicle'" + }, + "has_quality": { + "value": null, + "label": null, + "evidence": "No PATO/quality term is used on UBERON:0000035/0036/0037 stanzas to denote the 'early/late' stage descriptor — staging is encoded structurally via has_part (antrum present/absent) and has_component cardinality on granulosa layers, plus develops_from chains. There is no in-file quoted evidence supporting a has_quality axiom for follicle stages, so this field is left empty.", + "source": "src/ontology/uberon-edit.obo UBERON:0000035, UBERON:0000036, UBERON:0000037 stanzas (no relationship: has_quality ... present)" + } + }, + "notes": "Simple is_a + part_of is INSUFFICIENT to express ovarian follicle staging in a logically coherent way. The existing UBERON pattern for primary/secondary/tertiary follicles relies on three coordinated axiom types: (1) has_component UBERON:0005170 (granulosa cell layer) with cardinality / minCardinality constraints (1 for primary, >=2 for secondary and tertiary) to capture cellular maturity; (2) has_part UBERON:0000039 (follicular antrum) to mark the categorical jump into the antral phase (only tertiary has this); and (3) develops_from chains tying the stages into a developmental sequence (primordial -> primary -> secondary -> tertiary), with optional has_potential_to_develop_into projecting the next stage. For 'early antral follicle' specifically, the antrum is the defining feature (so has_part UBERON:0000039 is essential — distinguishing it from secondary), while granulosa multilayering is inherited from secondary (so has_component minCardinality=2 is essential — distinguishing it from primary). Modeling as is_a UBERON:0000037 (tertiary) with develops_from UBERON:0000036 (secondary) is the cleanest fit; an additional qualifier (e.g. 'early' as a stage subset, comment, or PATO quality) would be needed to discriminate early antral from later/Graafian antral stages, since the existing axioms alone do not separate antral sub-stages. No PATO has_quality pattern is currently used by sibling follicle terms, so introducing one would be a modeling extension rather than mirroring existing practice." +} diff --git a/bulk_ntr_workflow/experiments/enriched_iliocostalis_cervicalis.json b/bulk_ntr_workflow/experiments/enriched_iliocostalis_cervicalis.json new file mode 100644 index 000000000..8086febfd --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_iliocostalis_cervicalis.json @@ -0,0 +1,38 @@ +{ + "label": "iliocostalis cervicalis muscle", + "notes": "Existing UBERON term: UBERON:0008546 'iliocostalis cervicis muscle' (cervicalis ascendens). 'Iliocostalis cervicalis' is treated here as a label variant of 'iliocostalis cervicis'. Source quotes are taken verbatim from Wikipedia, which derives this passage from Gray's Anatomy (1918). Origin and insertion are clearly stated; innervation is not stated for the cervicis subdivision in the Wikipedia article itself but the parent iliocostalis muscle and erector spinae are innervated by dorsal rami of the spinal nerves (already encoded on UBERON:0002251 and UBERON:0008546). Action is not given a clear single-sentence quote in the cervicis subsection, so left unpopulated.", + "is_a": { + "value": "UBERON:0002251", + "label": "iliocostalis muscle", + "evidence": "The iliocostalis cervicis (cervicalis ascendens) arises from the angles of the third, fourth, fifth, and sixth ribs, and is inserted into the posterior tubercles of the transverse processes of the fourth, fifth, and sixth cervical vertebrae.", + "source": "https://en.wikipedia.org/wiki/Iliocostalis#Iliocostalis_cervicis" + }, + "part_of": { + "value": "UBERON:0002251", + "label": "iliocostalis muscle", + "evidence": "Iliocostalis cervicis ... The iliocostalis is composed of three parts: iliocostalis lumborum, iliocostalis thoracis, and iliocostalis cervicis. The iliocostalis is the most lateral muscle of the erector spinae.", + "source": "https://en.wikipedia.org/wiki/Iliocostalis", + "rationale": "The cervicis subdivision is one of three named parts of the iliocostalis muscle (UBERON:0002251), which itself is part_of the erector spinae muscle group (UBERON:0002462). The iliocostalis muscle is the more specific containing region for the cervicis subdivision." + }, + "has_muscle_origin": { + "value": "UBERON:0002228", + "label": "rib", + "evidence": "The iliocostalis cervicis (cervicalis ascendens) arises from the angles of the third, fourth, fifth, and sixth ribs, and is inserted into the posterior tubercles of the transverse processes of the fourth, fifth, and sixth cervical vertebrae.", + "source": "https://en.wikipedia.org/wiki/Iliocostalis#Iliocostalis_cervicis", + "notes": "Specifically the angles of the third through sixth ribs." + }, + "has_muscle_insertion": { + "value": "UBERON:0001077", + "label": "transverse process of vertebra", + "evidence": "The iliocostalis cervicis (cervicalis ascendens) arises from the angles of the third, fourth, fifth, and sixth ribs, and is inserted into the posterior tubercles of the transverse processes of the fourth, fifth, and sixth cervical vertebrae.", + "source": "https://en.wikipedia.org/wiki/Iliocostalis#Iliocostalis_cervicis", + "notes": "Specifically the posterior tubercles of the transverse processes of cervical vertebrae C4-C6." + }, + "innervated_by": { + "value": "UBERON:0006839", + "label": "dorsal ramus of spinal nerve", + "evidence": "The muscles of the back are innervated by the dorsal rami of the spinal nerves whilst the abdominals are innervated by the ventral rami.", + "source": "https://en.wikipedia.org/wiki/Erector_spinae_muscles", + "notes": "Innervation stated for erector spinae group as a whole; iliocostalis cervicis as a constituent muscle is innervated by dorsal rami of (cervical) spinal nerves. Already asserted on UBERON:0008546 with source=dbpedia." + } +} diff --git a/bulk_ntr_workflow/experiments/enriched_internal_abdominal_oblique.json b/bulk_ntr_workflow/experiments/enriched_internal_abdominal_oblique.json new file mode 100644 index 000000000..3d810102b --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_internal_abdominal_oblique.json @@ -0,0 +1,40 @@ +{ + "label": "internal abdominal oblique muscle", + "is_a": { + "value": "UBERON:0035032", + "label": "abdominal oblique muscle", + "evidence": "The internal abdominal oblique muscle, also internal oblique muscle or interior oblique or musculus obliquus abdominis internus, is an abdominal muscle in the abdominal wall that lies below the external abdominal oblique muscle and just above the transversus abdominis muscle.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "part_of": { + "value": "UBERON:0003697", + "label": "abdominal wall", + "evidence": "The internal abdominal oblique muscle ... is an abdominal muscle in the abdominal wall that lies below the external abdominal oblique muscle and just above the transversus abdominis muscle.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "has_muscle_origin": { + "value": "UBERON:0014437", + "label": "iliac crest", + "evidence": "Its fibers run perpendicular to the external oblique muscle, beginning in the thoracolumbar fascia of the lower back, the anterior 2/3 of the iliac crest (upper part of hip bone) and the lateral half of the inguinal ligament.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "has_muscle_insertion": { + "value": "UBERON:0002228", + "label": "rib", + "evidence": "The muscle fibers run from these points superomedially (up and towards midline) to the muscle's insertions on the inferior borders of the 10th through 12th ribs and the linea alba.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "innervated_by": { + "value": "UBERON:0003727", + "label": "intercostal nerve", + "evidence": "The internal oblique is supplied by the lower intercostal nerves, as well as the iliohypogastric nerve and the ilioinguinal nerve.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "has_muscle_action": { + "value": "compresses abdomen; ipsilateral trunk rotation and side-bending; accessory muscle of expiration", + "label": "abdominal compression and ipsilateral trunk rotation", + "evidence": "Bilateral: Compresses abdomen. Unilateral: Ipsilateral trunk rotation. ... Firstly as an accessory muscle of respiration, it acts as an antagonist (opponent) to the diaphragm, helping to reduce the volume of the chest cavity during exhalation. ... Secondly, its contraction causes ipsilateral rotation and side-bending.", + "source": "https://en.wikipedia.org/wiki/Abdominal_internal_oblique_muscle" + }, + "notes": "Origin field has multiple attachments per Wikipedia (thoracolumbar fascia, iliac crest, lateral inguinal ligament); only iliac crest was selected as it is well-resolved in UBERON (UBERON:0014437). Inguinal ligament (UBERON:0006204) is also a valid origin. No exact UBERON term was found for 'thoracolumbar fascia' or 'linea alba'. Insertion uses 'rib' (UBERON:0002228) as a generic anchor since the muscle inserts on ribs 10-12 and the linea alba (no UBERON term for linea alba). Innervation: 'intercostal nerve' (UBERON:0003727) covers the thoracoabdominal/subcostal contribution; iliohypogastric and ilioinguinal nerves did not resolve to UBERON IDs. UBERON ID for the term itself is UBERON:0005454 (label in Uberon: 'abdominal internal oblique muscle')." +} diff --git a/bulk_ntr_workflow/experiments/enriched_tensor_fascia_latae.json b/bulk_ntr_workflow/experiments/enriched_tensor_fascia_latae.json new file mode 100644 index 000000000..cc5e51986 --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_tensor_fascia_latae.json @@ -0,0 +1,43 @@ +{ + "label": "tensor fascia latae muscle", + "existing_uberon_id": "UBERON:0001376", + "is_a": { + "value": "UBERON:0001630", + "label": "muscle organ", + "evidence": "The tensor fasciae latae (or tensor fasciae latae or, formerly, tensor vaginae femoris) is a muscle of the thigh.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle" + }, + "part_of": { + "value": "UBERON:0000376", + "label": "hindlimb stylopod", + "evidence": "The tensor fasciae latae (or tensor fasciae latae or, formerly, tensor vaginae femoris) is a muscle of the thigh.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle", + "notes": "UBERON:0000376 (hindlimb stylopod) is the OLS4 exact match for 'thigh'." + }, + "has_muscle_origin": { + "value": "UBERON:0014437", + "label": "iliac crest", + "evidence": "The tensor fasciae latae arises from the anterior part of the outer lip of the iliac crest; from the outer surface of the anterior superior iliac spine, and part of the outer border of the notch below it, between the gluteus medius and sartorius; and from the deep surface of the fascia lata.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle" + }, + "has_muscle_insertion": { + "value": null, + "label": "iliotibial tract (of the fascia lata)", + "evidence": "The tensor fasciae latae is inserted between the two layers of the iliotibial tract of the fascia lata about the junction of the middle and upper thirds of the thigh. ... The terminal insertion point lies on the lateral condyle of the tibia.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle", + "notes": "No UBERON class found for 'iliotibial tract' / 'iliotibial band' (OLS4 exact and partial searches returned no match). Left unresolved as free text." + }, + "innervated_by": { + "value": null, + "label": "superior gluteal nerve", + "evidence": "Tensor fasciae latae is innervated by the superior gluteal nerve, L5 and S1.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle", + "notes": "No UBERON class found for 'superior gluteal nerve' (OLS4 exact search returned no match; only superior gluteal artery UBERON:0001315 and superior gluteal lymph node UBERON:0037548 exist). Left unresolved as free text." + }, + "has_muscle_action": { + "value": "Hip flexion, medial rotation, and abduction; lateral rotation of the knee/tibia; tautens the iliotibial tract and braces the knee; stabilizes the pelvis when standing, walking, or running.", + "evidence": "Actions: Hip - flexion, medial rotation, abduction, knee - lateral rotation, torso - stabilization. ... It tautens the iliotibial tract and braces the knee, especially when the opposite foot is lifted. ... The muscle assists in keeping the balance of the pelvis while standing, walking, or running.", + "source": "https://en.wikipedia.org/wiki/Tensor_fasciae_latae_muscle" + }, + "notes": "Tensor fasciae latae already exists in UBERON as UBERON:0001376 with is_a UBERON:0002000 (gluteal muscle) and an existing has_muscle_origin to UBERON:0010746 (iliac blade). The current iliac-blade origin is consistent with but less specific than the Wikipedia 'iliac crest' (UBERON:0014437) origin description; consider refining. Two key Wikipedia-described relations (insertion onto iliotibial tract, innervation by superior gluteal nerve) cannot be encoded with UBERON IDs because those classes do not currently exist in UBERON (verified via OLS4 exact-match search). 'Thigh' resolved to UBERON:0000376 (hindlimb stylopod) per the OLS4 exact-match alias, matching the precedent set in enriched_articularis_genu.json." +} diff --git a/bulk_ntr_workflow/experiments/enriched_transitional_primary_follicle.json b/bulk_ntr_workflow/experiments/enriched_transitional_primary_follicle.json new file mode 100644 index 000000000..1d14210ac --- /dev/null +++ b/bulk_ntr_workflow/experiments/enriched_transitional_primary_follicle.json @@ -0,0 +1,37 @@ +{ + "label": "transitional primary ovarian follicle", + "is_a": { + "value": "UBERON:0000035", + "label": "primary ovarian follicle", + "evidence": "A follicle in transition between primordial and primary stages, with cuboidal granulosa cells appearing among the flat squamous cells of the primordial stage. UBERON:0000035 (primary ovarian follicle) is defined as 'An ovarian follicle that has one layer of granulosa cells.' Existing follicle stage terms (primordial, primary, secondary, tertiary) are subclasses of UBERON:0001305 ovarian follicle directly; however, transitional primary is best treated as a developmental sub-stage of the primary stage because the appearance of cuboidal granulosa cells (the defining hallmark of the primary follicle) has begun.", + "source": "UBERON:0000035 def + task brief" + }, + "has_part": { + "value": "UBERON:0005170", + "label": "granulosa cell layer", + "evidence": "UBERON:0000035 (primary) has axiom 'has_component UBERON:0005170 {cardinality=\"1\"}'; UBERON:0000036 (secondary) has 'has_component UBERON:0005170 {minCardinality=\"2\"}'. The transitional primary follicle by definition still has a single granulosa cell layer, but with a mixed flat-squamous and cuboidal population of granulosa cells.", + "source": "uberon-edit.obo (UBERON:0000035, UBERON:0000036)", + "notes": "Could be encoded as 'has_component UBERON:0005170 {cardinality=\"1\"}' to mirror the primary follicle pattern. The mixed squamous/cuboidal cell composition is a quality of the granulosa cells, not a separable part." + }, + "develops_from": { + "value": "UBERON:0003981", + "label": "primordial ovarian follicle", + "evidence": "Primordial follicles 'develop to primary, secondary, and finally mature vesicular follicles' (UBERON:0003981 def). UBERON:0000035 (primary) carries 'relationship: develops_from UBERON:0003981'. The transitional primary follicle sits on the primordial->primary trajectory and inherits this develops_from from its primary-stage genus.", + "source": "uberon-edit.obo (UBERON:0003981 def; UBERON:0000035 develops_from)" + }, + "has_potential_to_develop_into": { + "value": "UBERON:0000035", + "label": "primary ovarian follicle", + "evidence": "By definition the transitional primary follicle is on its way to becoming a fully primary follicle (a single complete layer of cuboidal granulosa cells). This mirrors UBERON:0000036 (secondary) which uses 'intersection_of: has_potential_to_develop_into UBERON:0000037 ! tertiary ovarian follicle'.", + "source": "task brief; UBERON:0000036 axiom pattern", + "notes": "Only meaningful if the term is treated as a sub-stage distinct from the (fully) primary follicle. If is_a UBERON:0000035 is asserted, has_potential_to_develop_into UBERON:0000035 becomes self-referential via the genus and may be redundant or inconsistent." + }, + "has_quality": { + "value": null, + "label": "transitional / mixed granulosa cell morphology", + "evidence": "Defining feature: 'with cuboidal granulosa cells appearing among the flat squamous cells of the primordial stage' - granulosa cells are heterogeneous in shape (mix of squamous and cuboidal). No clear PATO quality term resolved without an OLS4 lookup.", + "source": "task brief", + "notes": "Left unresolved; this could be captured with PATO 'mixed' / 'heterogeneous' qualities applied to the granulosa cell layer, but is probably best left implicit in the textual definition." + }, + "notes": "A simple is_a UBERON:0000035 (primary ovarian follicle) plus develops_from UBERON:0003981 (primordial ovarian follicle) is likely sufficient and follows the pattern used for the existing follicle-stage terms in UBERON. The 'has_component UBERON:0005170 {cardinality=\"1\"}' axiom is inherited from primary follicle and need not be re-asserted. The distinguishing feature (mixed flat/cuboidal granulosa cells) is hard to capture as a clean logical axiom without a PATO quality, and is best left in the textual definition. has_potential_to_develop_into UBERON:0000035 only makes sense if the transitional class is taxonomically separated from primary follicle - probably better to drop it and rely on is_a + develops_from. Existing stage terms (primordial, primary, secondary, tertiary) are direct subclasses of UBERON:0001305 ovarian follicle, but treating transitional primary as is_a primary follicle (per task brief) better reflects that cuboidal granulosa cells - the hallmark of the primary stage - have already appeared." +} diff --git a/bulk_ntr_workflow/outputs/definitions/grouping_terms.json b/bulk_ntr_workflow/outputs/definitions/grouping_terms.json new file mode 100644 index 000000000..0b75c5b28 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/grouping_terms.json @@ -0,0 +1,180 @@ +{ + "definitions": { + "dorsum of foot muscle": "A group of skeletal muscles located on the dorsal aspect of the foot, comprising the extensor digitorum brevis and extensor hallucis brevis, which act to extend the toes.", + "longitudinal pharyngeal muscle": "A group of skeletal muscles oriented longitudinally in the pharyngeal wall that act to elevate the pharynx and larynx during swallowing, comprising the stylopharyngeus, palatopharyngeus, and salpingopharyngeus muscles.", + "middle ear muscle": "A group of skeletal muscles located within the middle ear cavity that attenuate sound transmission through the auditory ossicles, comprising the tensor tympani and stapedius muscles.", + "pelvic floor muscle": "A group of skeletal muscles that form the floor of the pelvic cavity, supporting the pelvic viscera and surrounding the urogenital and anal openings, comprising the levator ani and coccygeus muscles.", + "posterior abdominal wall muscle": "A group of skeletal muscles located in the posterior part of the abdominal wall that support the lumbar spine and act on the trunk and hip, comprising the psoas major, psoas minor, iliacus, and quadratus lumborum muscles.", + "segmental back muscle": "A group of small skeletal muscles of the deep back that span individual vertebral segments, comprising the interspinales, intertransversarii, and levatores costarum, which produce minor movements of the vertebral column.", + "superficial back muscle": "A group of skeletal muscles forming the superficial layer of the back, which attach the upper limb to the trunk and act on the shoulder girdle, comprising the trapezius, latissimus dorsi, levator scapulae, and rhomboid muscles.", + "intermediate back muscle": "A group of skeletal muscles forming the intermediate layer of the back that act as accessory muscles of respiration, comprising the serratus posterior superior and serratus posterior inferior muscles.", + "thoracic wall muscle": "A group of skeletal muscles that are part of the thoracic wall and act on the ribs to produce respiratory movements, comprising the external, internal and innermost intercostals, subcostales and transversus thoracis.", + "external ear muscle": "A group of skeletal muscles attached to the auricular cartilage that act to move the pinna, comprising the auricularis anterior, auricularis superior, and auricularis posterior.", + "intrinsic eye muscle": "A group of smooth muscles located within the eyeball that control pupil diameter and lens accommodation, comprising the ciliary muscle, sphincter pupillae, and dilator pupillae.", + "sole of foot muscle": "A group of skeletal muscles located in the plantar part of the foot that act on the toes and support the longitudinal arch, comprising the four layers of plantar intrinsic muscles including the abductor hallucis, flexor digitorum brevis, lumbricals, quadratus plantae, flexor digiti minimi brevis, adductor hallucis, and plantar/dorsal interossei." + }, + "xrefs": { + "dorsum of foot muscle": "Wikipedia:Dorsum_of_foot", + "longitudinal pharyngeal muscle": "Wikipedia:Pharyngeal_muscles", + "middle ear muscle": "Wikipedia:Middle_ear", + "pelvic floor muscle": "Wikipedia:Pelvic_floor", + "posterior abdominal wall muscle": "Wikipedia:Abdominal_wall", + "segmental back muscle": "Wikipedia:Human_back", + "superficial back muscle": "Wikipedia:Human_back", + "intermediate back muscle": "Wikipedia:Human_back", + "thoracic wall muscle": "Wikipedia:Thoracic_wall", + "sole of foot muscle": "Wikipedia:Sole_(foot)" + }, + "def_xrefs_to_add": { + "dorsum of foot muscle": "PMID:30855843", + "longitudinal pharyngeal muscle": "PMID:25821538", + "middle ear muscle": "PMID:24379725", + "pelvic floor muscle": "PMID:28920577", + "posterior abdominal wall muscle": "PMID:30855915", + "segmental back muscle": "PMID:30571022", + "superficial back muscle": "PMID:30571022", + "intermediate back muscle": "PMID:30571022", + "thoracic wall muscle": "PMID:30855894", + "sole of foot muscle": "PMID:30571022" + }, + "group_template_rows": { + "superficial back muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0001137" + }, + "intermediate back muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0001137" + }, + "segmental back muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0001137" + }, + "thoracic wall muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0016403" + }, + "posterior abdominal wall muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0003697" + }, + "external ear muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0001691" + }, + "middle ear muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0001756" + }, + "sole of foot muscle": { + "genus": "UBERON:0014892", + "location": "UBERON:0008338" + } + }, + "manual_curation": [ + { + "label": "pelvic floor muscle", + "definition": "A group of skeletal muscles that form the floor of the pelvic cavity, supporting the pelvic viscera and surrounding the urogenital and anal openings, comprising the levator ani and coccygeus muscles.", + "reason": "No UBERON term currently exists for 'pelvic floor' or 'pelvic diaphragm' as an anatomical region — only the constituent muscles (levator ani UBERON:0001326, coccygeus UBERON:0001327) and the broader pelvic region (UBERON:0002355) are represented. The simple genus + part_of pattern needs a target term for the pelvic floor itself.", + "similar_terms": [ + {"id": "UBERON:0001325", "label": "muscle of pelvis", "intersection_of": ["UBERON:0014892 ! skeletal muscle organ, vertebrate", "part_of UBERON:0002355 ! pelvic region of trunk"]}, + {"id": "UBERON:0001326", "label": "levator ani muscle", "intersection_of": ["is_a UBERON:0001325 ! muscle of pelvis"]}, + {"id": "UBERON:0001327", "label": "coccygeus muscle", "intersection_of": ["is_a UBERON:0001325 ! muscle of pelvis"]} + ], + "suggestion": "Either (a) add a new region term 'pelvic floor' / 'pelvic diaphragm' and define this group as skeletal muscle organ part_of that, or (b) define as has_part levator_ani and has_part coccygeus, or (c) treat as a subclass of muscle of pelvis (UBERON:0001325) without an EC definition." + }, + { + "label": "dorsum of foot muscle", + "definition": "A group of skeletal muscles located on the dorsal aspect of the foot, comprising the extensor digitorum brevis and extensor hallucis brevis, which act to extend the toes.", + "reason": "No UBERON term exists for 'dorsum of foot' / 'dorsal region of pes' as a region. The only dorsal pes term found is UBERON:0006499 dorsal pes interosseous muscle (a specific muscle, not a region). Simple genus + part_of pattern cannot be applied without a region target.", + "similar_terms": [ + {"id": "UBERON:0008338", "label": "plantar part of pes", "intersection_of": ["UBERON:0008837 ! palmar/plantar part of autopod", "part_of UBERON:0002387 ! pes"]} + ], + "suggestion": "Add a new region term 'dorsal part of pes' (analogous to UBERON:0008338 plantar part of pes) and define this group as skeletal muscle organ part_of that region. Alternatively define by membership (has_part extensor digitorum brevis, has_part extensor hallucis brevis)." + }, + { + "label": "longitudinal pharyngeal muscle", + "definition": "A group of skeletal muscles oriented longitudinally in the pharyngeal wall that act to elevate the pharynx and larynx during swallowing, comprising the stylopharyngeus, palatopharyngeus, and salpingopharyngeus muscles.", + "reason": "This is a sub-grouping of pharyngeal muscles defined by fibre orientation (longitudinal) within the pharyngeal wall — not a simple part_of-defined subset. UBERON's circular counterpart (UBERON:0001569 constrictor muscle of pharynx) is is_a UBERON:0000933 chordate pharyngeal muscle without an EC axiom on orientation. The simple genus + part_of pattern cannot express fibre orientation.", + "similar_terms": [ + {"id": "UBERON:0001569", "label": "constrictor muscle of pharynx", "intersection_of": ["is_a UBERON:0000933 ! chordate pharyngeal muscle (no EC axiom)"]}, + {"id": "UBERON:0000933", "label": "chordate pharyngeal muscle", "intersection_of": ["UBERON:0001630 ! muscle organ", "part_of UBERON:0004467 ! musculature of pharynx"]} + ], + "suggestion": "Either model as subclass of chordate pharyngeal muscle (UBERON:0000933) without an EC, mirroring how UBERON:0001569 is handled, or add a new relation/property for muscle fibre orientation. Note that circular pharyngeal muscle (the sibling) maps directly to UBERON:0001569 — see confirmed_matches." + } + ], + "confirmed_matches": [ + { + "label": "anterior vertebral muscle", + "uberon_id": "UBERON:0008549", + "confidence": "high", + "uberon_definition": "One of the muscles deep to the prevertebral fascia on the anterior surface of the cervical and superior three thoracic vertebrae, symmetrically placed on each side of the median plane, including the longus colli, longus capitis, rectus capitis anterior, and rectus capitis lateralis muscles.", + "wikipedia_summary": "The prevertebral muscles (also called anterior vertebral muscles in TA2) are a group of muscles anterior to the vertebral column comprising longus colli, longus capitis, rectus capitis anterior and rectus capitis lateralis. 'flexor muscle of vertebral column' is already an EXACT synonym (FMA:32514).", + "synonym_addition_suggested": "Add 'anterior vertebral muscle' as an EXACT synonym (TA2 terminology)." + }, + { + "label": "circular pharyngeal muscle", + "uberon_id": "UBERON:0001569", + "confidence": "high", + "uberon_definition": "Pharyngeal constrictor refers to one of the muscles that serves to constrict the pharynx. They include: Superior, Middle, and Inferior pharyngeal constrictor muscle.", + "wikipedia_summary": "The three pharyngeal constrictor muscles (superior, middle, inferior) are the circularly-oriented muscles of the pharynx; the longitudinal pharyngeal muscles (stylopharyngeus, palatopharyngeus, salpingopharyngeus) form the complementary group. TA2 names them 'circular pharyngeal muscles'.", + "synonym_addition_suggested": "Add 'circular pharyngeal muscle' as an EXACT synonym (TA2 terminology)." + }, + { + "label": "lateral vertebral muscle", + "uberon_id": "UBERON:0008611", + "confidence": "high", + "uberon_definition": "Any of the three pairs of muscles in the lateral neck, namely the scalenus anterior, scalenus medius, and scalenus posterior. They are innervated by the spinal nerves C4-C8.", + "wikipedia_summary": "The scalene muscles (TA2 'lateral vertebral muscles') are the three paired muscles of the lateral neck. 'lateral vertebral muscle' is already listed as a RELATED synonym on UBERON:0008611.", + "synonym_addition_suggested": "Promote existing RELATED synonym 'lateral vertebral muscle' to EXACT (TA2 terminology)." + }, + { + "label": "hypothenar hand muscle", + "uberon_id": "UBERON:0014377", + "confidence": "high", + "uberon_definition": "Any of three muscles of the palm that control the motion of the little finger.", + "wikipedia_summary": "The hypothenar muscles are the three intrinsic muscles of the hand (abductor digiti minimi, flexor digiti minimi brevis, opponens digiti minimi) controlling the little finger. The TA2 name 'hypothenar hand muscle' is essentially the existing UBERON term.", + "synonym_addition_suggested": "Add 'hypothenar hand muscle' as an EXACT synonym." + }, + { + "label": "palmar interosseous muscle", + "uberon_id": "UBERON:0006505", + "confidence": "high", + "uberon_definition": "Any of three muscles, the first with its origin from the second metacarpal, and the second and the third with origin from the fourth and fifth metacarpals; adducts the fingers toward the axis of the middle finger.", + "wikipedia_summary": "The palmar interossei are three small unipennate hand muscles between the metacarpals. TA2 'palmar interosseous muscle' is the same as UBERON's 'palmar interosseous muscle of manus'.", + "synonym_addition_suggested": "Add 'palmar interosseous muscle' as an EXACT synonym." + }, + { + "label": "plantar interosseous muscle", + "uberon_id": "UBERON:0006502", + "confidence": "high", + "uberon_definition": "Any of three muscles with origin from the third, fourth, and fifth metatarsal bones, with insertion to the proximal phalanx of the same toes, with nerve supply from the lateral plantar nerve, and whose action adducts the three lateral toes.", + "wikipedia_summary": "The plantar interossei are three unipennate muscles of the foot between the metatarsals. TA2 'plantar interosseous muscle' is the same as UBERON's 'plantar interosseous muscle of pes'.", + "synonym_addition_suggested": "Add 'plantar interosseous muscle' as an EXACT synonym." + }, + { + "label": "spinotransversales muscle", + "uberon_id": "UBERON:0002252", + "confidence": "high", + "uberon_definition": "A superficial postvertebral muscle innervated by the posterior ramus of the cervical spinal nerve with origins in the upper thoracic and lower cervical spinous processes whose actions are to extend and ipsilaterally rotate the head and neck. Examples: splenius capitis, splenius cervicis.", + "wikipedia_summary": "The spinotransversales group consists of the two splenius muscles (splenius capitis and splenius cervicis) — origin on spinous processes, insertion on transverse processes — hence the name. Identical scope to UBERON 'splenius'.", + "synonym_addition_suggested": "Add 'spinotransversales muscle' and 'spinotransversales muscles' as EXACT synonyms." + }, + { + "label": "muscle of facial expression", + "uberon_id": "UBERON:0001577", + "confidence": "high", + "uberon_definition": "A muscle innervated by a facial nerve.", + "wikipedia_summary": "The muscles of facial expression are the subcutaneous muscles innervated by the facial nerve (CN VII). UBERON:0001577 already lists 'muscles of facial expression' (RELATED) and 'muscle of facil expression' as synonyms; same scope.", + "synonym_addition_suggested": "Add 'muscle of facial expression' as an EXACT synonym (TA2 form)." + }, + { + "label": "intrinsic eye muscle", + "uberon_id": "UBERON:0011222", + "confidence": "high", + "uberon_definition": "Muscles within the eye (bulbus oculi). Comprises ciliary muscle and the pupillary muscles.", + "wikipedia_summary": "Intrinsic ocular muscles are the smooth muscles within the eyeball: ciliary muscle, sphincter pupillae, dilator pupillae — controlling accommodation and pupil size. Existing synonym 'intrinsic ocular muscle' EXACT.", + "synonym_addition_suggested": "Add 'intrinsic eye muscle' as an EXACT synonym." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/input/grouping_terms.json b/bulk_ntr_workflow/outputs/definitions/input/grouping_terms.json new file mode 100644 index 000000000..d0f9676be --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/grouping_terms.json @@ -0,0 +1,172 @@ +{ + "group_name": "grouping_terms", + "parent_id": "GROUPING_TERMS", + "parent_label": "(grouping terms \u2014 agent determines genus + part_of differentiator per term)", + "term_counts": { + "leaf": 0, + "group": 20 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900002", + "label": "anterior vertebral muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_anterior-vertebral-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900007", + "label": "circular pharyngeal muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_circular-pharyngeal-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900011", + "label": "dorsum of foot muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_dorsum-of-foot-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900013", + "label": "external ear muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_external-ear-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900016", + "label": "hypothenar hand muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_hypothenar-hand-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900020", + "label": "intermediate back muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intermediate-back-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900024", + "label": "intrinsic eye muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intrinsic-eye-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900027", + "label": "lateral vertebral muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-vertebral-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900032", + "label": "longitudinal pharyngeal muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_longitudinal-pharyngeal-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900036", + "label": "middle ear muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_middle-ear-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900040", + "label": "muscle of facial expression", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_muscle-of-facial-expression" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900044", + "label": "palmar interosseous muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_palmar-interosseous-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900045", + "label": "pelvic floor muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_pelvic-floor-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900046", + "label": "plantar interosseous muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_plantar-interosseous-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900047", + "label": "posterior abdominal wall muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_posterior-abdominal-wall-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900055", + "label": "segmental back muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900056", + "label": "sole of foot muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sole-of-foot-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900059", + "label": "spinotransversales muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900063", + "label": "superficial back muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superficial-back-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900068", + "label": "thoracic wall muscle", + "term_type": "group", + "genus": "", + "location": "", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_12252.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_12252.json new file mode 100644 index 000000000..15d8bebab --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_12252.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_12252", + "parent_id": "NEEDS_MAPPING:FMA:12252", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900053", + "label": "respiratory diaphragm muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:12252", + "part_of": "NEEDS_MAPPING:FMA:12252", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22424.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22424.json new file mode 100644 index 000000000..688e52026 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22424.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_22424", + "parent_id": "NEEDS_MAPPING:FMA:22424", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900003", + "label": "articularis genu muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:22424", + "part_of": "NEEDS_MAPPING:FMA:22424", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22472.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22472.json new file mode 100644 index 000000000..2f93570f6 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22472.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_22472", + "parent_id": "NEEDS_MAPPING:FMA:22472", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900071", + "label": "tibalis anterior muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:22472", + "part_of": "NEEDS_MAPPING:FMA:22472", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tibalis-anterior-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22474.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22474.json new file mode 100644 index 000000000..eaa4b55e0 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_22474.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_22474", + "parent_id": "NEEDS_MAPPING:FMA:22474", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900072", + "label": "tibalis posterior muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:22474", + "part_of": "NEEDS_MAPPING:FMA:22474", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tibalis-posterior-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_323951.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_323951.json new file mode 100644 index 000000000..e0f508cbc --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_323951.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_323951", + "parent_id": "NEEDS_MAPPING:FMA:323951", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900028", + "label": "left crus of lumbar part of respiratory diaphragm muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:323951", + "part_of": "NEEDS_MAPPING:FMA:323951", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_left-crus-of-lumbar-part-of-respiratory-diaphragm-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46583.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46583.json new file mode 100644 index 000000000..39a1552a9 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46583.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_46583", + "parent_id": "NEEDS_MAPPING:FMA:46583", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900004", + "label": "aryepiglottic part of oblique arytenoid muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:46583", + "part_of": "NEEDS_MAPPING:FMA:46583", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_aryepiglottic-part-of-oblique-arytenoid-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46588.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46588.json new file mode 100644 index 000000000..111b5af29 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46588.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_46588", + "parent_id": "NEEDS_MAPPING:FMA:46588", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900069", + "label": "thyroepiglottic part of thyroarytenoid muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:46588", + "part_of": "NEEDS_MAPPING:FMA:46588", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thyroepiglottic-part-of-thyroarytenoid-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46623.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46623.json new file mode 100644 index 000000000..3168843ab --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_46623.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_46623", + "parent_id": "NEEDS_MAPPING:FMA:46623", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900070", + "label": "thyropharyngeal part of inferior pharyngeal constrictor muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:46623", + "part_of": "NEEDS_MAPPING:FMA:46623", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thyropharyngeal-part-of-inferior-pharyngeal-constrictor-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_5841.json b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_5841.json new file mode 100644 index 000000000..6cceb0265 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/needs_mapping_fma_5841.json @@ -0,0 +1,21 @@ +{ + "group_name": "needs_mapping_fma_5841", + "parent_id": "NEEDS_MAPPING:FMA:5841", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900054", + "label": "right crus of lumbar part of respiratory diaphragm muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "NEEDS_MAPPING:FMA:5841", + "part_of": "NEEDS_MAPPING:FMA:5841", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_right-crus-of-lumbar-part-of-respiratory-diaphragm-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0000975.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0000975.json new file mode 100644 index 000000000..ca03efc79 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0000975.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0000975", + "parent_id": "UBERON:0000975", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900009", + "label": "costal part of respiratory diaphragm muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0000975", + "part_of": "INFER:UBERON:0000975", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_costal-part-of-respiratory-diaphragm-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0000979.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0000979.json new file mode 100644 index 000000000..93a22a2ab --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0000979.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0000979", + "parent_id": "UBERON:0000979", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900022", + "label": "interspinales cervicalis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0000979", + "part_of": "INFER:UBERON:0000979", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_interspinales-cervicalis-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001092.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001092.json new file mode 100644 index 000000000..a7f17d791 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001092.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001092", + "parent_id": "UBERON:0001092", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900015", + "label": "hamstring portion of adductor magnus muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001092", + "part_of": "INFER:UBERON:0001092", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_hamstring-portion-of-adductor-magnus-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001194.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001194.json new file mode 100644 index 000000000..e79cce694 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001194.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001194", + "parent_id": "UBERON:0001194", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900019", + "label": "inferior longitudinal lingual muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001194", + "part_of": "INFER:UBERON:0001194", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-longitudinal-lingual-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001272.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001272.json new file mode 100644 index 000000000..d6c3ee345 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001272.json @@ -0,0 +1,30 @@ +{ + "group_name": "uberon_0001272", + "parent_id": "UBERON:0001272", + "parent_label": "", + "term_counts": { + "leaf": 2, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900017", + "label": "iliocostalis cervicalis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001272", + "part_of": "INFER:UBERON:0001272", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_iliocostalis-cervicalis-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900048", + "label": "pteryopharyngeal part of superior pharyngeal constrictor muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001272", + "part_of": "INFER:UBERON:0001272", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_pteryopharyngeal-part-of-superior-pharyngeal-constrictor-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001537.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001537.json new file mode 100644 index 000000000..e927a4d6d --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001537.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001537", + "parent_id": "UBERON:0001537", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900025", + "label": "lateral compartmet of leg muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001537", + "part_of": "INFER:UBERON:0001537", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-compartmet-of-leg-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001546.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001546.json new file mode 100644 index 000000000..9f9a0e698 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001546.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001546", + "parent_id": "UBERON:0001546", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900026", + "label": "lateral posterior cervical intertransversarii muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001546", + "part_of": "INFER:UBERON:0001546", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-posterior-cervical-intertransversarii-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001572.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001572.json new file mode 100644 index 000000000..99bf93266 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001572.json @@ -0,0 +1,30 @@ +{ + "group_name": "uberon_0001572", + "parent_id": "UBERON:0001572", + "parent_label": "", + "term_counts": { + "leaf": 2, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900005", + "label": "ceratoglossus of hyoglossus muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001572", + "part_of": "INFER:UBERON:0001572", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_ceratoglossus-of-hyoglossus-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900006", + "label": "chondroglossus of hyoglossus muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001572", + "part_of": "INFER:UBERON:0001572", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_chondroglossus-of-hyoglossus-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001576.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001576.json new file mode 100644 index 000000000..74e5cb590 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001576.json @@ -0,0 +1,39 @@ +{ + "group_name": "uberon_0001576", + "parent_id": "UBERON:0001576", + "parent_label": "", + "term_counts": { + "leaf": 3, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900065", + "label": "superior longitudinal lingual muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001576", + "part_of": "INFER:UBERON:0001576", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superior-longitudinal-lingual-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900073", + "label": "transverse muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001576", + "part_of": "INFER:UBERON:0001576", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_transverse-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900075", + "label": "vertical muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001576", + "part_of": "INFER:UBERON:0001576", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_vertical-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001624.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001624.json new file mode 100644 index 000000000..be2962bbb --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001624.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001624", + "parent_id": "UBERON:0001624", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900043", + "label": "opponens digiti minimi muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001624", + "part_of": "INFER:UBERON:0001624", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_opponens-digiti-minimi-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001677.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001677.json new file mode 100644 index 000000000..925d3ff69 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001677.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001677", + "parent_id": "UBERON:0001677", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900029", + "label": "levator costarum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001677", + "part_of": "INFER:UBERON:0001677", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0001876.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001876.json new file mode 100644 index 000000000..7d7b0d537 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0001876.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0001876", + "parent_id": "UBERON:0001876", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900012", + "label": "external anal sphincter muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0001876", + "part_of": "INFER:UBERON:0001876", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0002000.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002000.json new file mode 100644 index 000000000..305d5d4b2 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002000.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0002000", + "parent_id": "UBERON:0002000", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900066", + "label": "tensor fascia latae muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002000", + "part_of": "INFER:UBERON:0002000", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tensor-fascia-latae-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0002377.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002377.json new file mode 100644 index 000000000..2069e2467 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002377.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0002377", + "parent_id": "UBERON:0002377", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900033", + "label": "longus capitus muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002377", + "part_of": "INFER:UBERON:0002377", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_longus-capitus-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0002378.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002378.json new file mode 100644 index 000000000..5dad9d0e8 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002378.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0002378", + "parent_id": "UBERON:0002378", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900057", + "label": "spermatic cord muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002378", + "part_of": "INFER:UBERON:0002378", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_spermatic-cord-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0002379.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002379.json new file mode 100644 index 000000000..f21ddef7b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002379.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0002379", + "parent_id": "UBERON:0002379", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900058", + "label": "sphincter urethrae muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002379", + "part_of": "INFER:UBERON:0002379", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sphincter-urethrae-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0002381.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002381.json new file mode 100644 index 000000000..59240426f --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0002381.json @@ -0,0 +1,30 @@ +{ + "group_name": "uberon_0002381", + "parent_id": "UBERON:0002381", + "parent_label": "", + "term_counts": { + "leaf": 2, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900008", + "label": "clavicular head of pectoralis major muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002381", + "part_of": "INFER:UBERON:0002381", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_clavicular-head-of-pectoralis-major-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900062", + "label": "sternocostal head of pectoralis major muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0002381", + "part_of": "INFER:UBERON:0002381", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternocostal-head-of-pectoralis-major-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0003682.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0003682.json new file mode 100644 index 000000000..a3d348ffb --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0003682.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0003682", + "parent_id": "UBERON:0003682", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900041", + "label": "musculus uvulae muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0003682", + "part_of": "INFER:UBERON:0003682", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_musculus-uvulae-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0003690.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0003690.json new file mode 100644 index 000000000..351828072 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0003690.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0003690", + "parent_id": "UBERON:0003690", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900021", + "label": "internal abdominal oblique muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0003690", + "part_of": "INFER:UBERON:0003690", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_internal-abdominal-oblique-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0005893.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0005893.json new file mode 100644 index 000000000..a7285588b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0005893.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0005893", + "parent_id": "UBERON:0005893", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900014", + "label": "frontal belly of occipitofrontalis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0005893", + "part_of": "INFER:UBERON:0005893", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_frontal-belly-of-occipitofrontalis-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0006719.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0006719.json new file mode 100644 index 000000000..4120d7f7c --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0006719.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0006719", + "parent_id": "UBERON:0006719", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900064", + "label": "superior head of lateral pterygoid muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0006719", + "part_of": "INFER:UBERON:0006719", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superior-head-of-lateral-pterygoid-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0010990.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0010990.json new file mode 100644 index 000000000..e47a6a33c --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0010990.json @@ -0,0 +1,39 @@ +{ + "group_name": "uberon_0010990", + "parent_id": "UBERON:0010990", + "parent_label": "", + "term_counts": { + "leaf": 3, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900037", + "label": "multifidus cervicis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0010990", + "part_of": "INFER:UBERON:0010990", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-cervicis-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900038", + "label": "multifidus lumborum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0010990", + "part_of": "INFER:UBERON:0010990", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-lumborum-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900039", + "label": "multifidus thoracis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0010990", + "part_of": "INFER:UBERON:0010990", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-thoracis-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_0015173.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_0015173.json new file mode 100644 index 000000000..40ba829df --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_0015173.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_0015173", + "parent_id": "UBERON:0015173", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900050", + "label": "puboperineales muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:0015173", + "part_of": "INFER:UBERON:0015173", + "def_xref": "https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_puboperineales-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/uberon_8600052.json b/bulk_ntr_workflow/outputs/definitions/input/uberon_8600052.json new file mode 100644 index 000000000..0fecdf596 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/uberon_8600052.json @@ -0,0 +1,21 @@ +{ + "group_name": "uberon_8600052", + "parent_id": "UBERON:8600052", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900049", + "label": "puboanalis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "INFER:UBERON:8600052", + "part_of": "INFER:UBERON:8600052", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_puboanalis-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unknown.json b/bulk_ntr_workflow/outputs/definitions/input/unknown.json new file mode 100644 index 000000000..53b10bf7c --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unknown.json @@ -0,0 +1,21 @@ +{ + "group_name": "unknown", + "parent_id": "UNKNOWN", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900052", + "label": "rectus capitus anterior muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNKNOWN", + "part_of": "UNKNOWN", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_rectus-capitus-anterior-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_intertransversarii_laterales_lumborum.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_intertransversarii_laterales_lumborum.json new file mode 100644 index 000000000..f00d788f1 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_intertransversarii_laterales_lumborum.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_intertransversarii_laterales_lumborum", + "parent_id": "UNRESOLVABLE:intertransversarii laterales lumborum muscle", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900074", + "label": "ventral part of intertransversarii laterales lumborum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:intertransversarii laterales lumborum muscle", + "part_of": "UNRESOLVABLE:intertransversarii laterales lumborum muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_levator_costarum_muscle.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_levator_costarum_muscle.json new file mode 100644 index 000000000..c9e7c71ae --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_levator_costarum_muscle.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_levator_costarum_muscle", + "parent_id": "UNRESOLVABLE:levator costarum muscle", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900031", + "label": "levatores costarum longi of levator costarum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:levator costarum muscle", + "part_of": "UNRESOLVABLE:levator costarum muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_meningohypophyseal_artery.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_meningohypophyseal_artery.json new file mode 100644 index 000000000..9ed9175d2 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_meningohypophyseal_artery.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_meningohypophyseal_artery", + "parent_id": "UNRESOLVABLE:meningohypophyseal artery", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900010", + "label": "dorsal part of intertransversarii laterales lumborum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:meningohypophyseal artery", + "part_of": "UNRESOLVABLE:meningohypophyseal artery", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_neuromeningeal_trunk.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_neuromeningeal_trunk.json new file mode 100644 index 000000000..ec547c049 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_neuromeningeal_trunk.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_neuromeningeal_trunk", + "parent_id": "UNRESOLVABLE:neuromeningeal trunk", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900042", + "label": "occipital belly of occipitofrontalis muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:neuromeningeal trunk", + "part_of": "UNRESOLVABLE:neuromeningeal trunk", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_occipital-belly-of-occipitofrontalis-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_respiratory_diaphragm_muscle.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_respiratory_diaphragm_muscle.json new file mode 100644 index 000000000..31ae3f98d --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_respiratory_diaphragm_muscle.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_respiratory_diaphragm_muscle", + "parent_id": "UNRESOLVABLE:respiratory diaphragm muscle", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900061", + "label": "sternal part of respiratory diaphragm muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:respiratory diaphragm muscle", + "part_of": "UNRESOLVABLE:respiratory diaphragm muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_segmental_back_muscle.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_segmental_back_muscle.json new file mode 100644 index 000000000..bcd1185a4 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_segmental_back_muscle.json @@ -0,0 +1,57 @@ +{ + "group_name": "unresolvable_segmental_back_muscle", + "parent_id": "UNRESOLVABLE:segmental back muscle", + "parent_label": "", + "term_counts": { + "leaf": 5, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900001", + "label": "anterior cervical intertransversarii muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:segmental back muscle", + "part_of": "UNRESOLVABLE:segmental back muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900023", + "label": "intertransversarii laterales lumborum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:segmental back muscle", + "part_of": "UNRESOLVABLE:segmental back muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900034", + "label": "medial lumbar intertransversarii muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:segmental back muscle", + "part_of": "UNRESOLVABLE:segmental back muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900035", + "label": "medial posterior cervical intertransversarii muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:segmental back muscle", + "part_of": "UNRESOLVABLE:segmental back muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle" + }, + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900067", + "label": "thoracic intertransversarii muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:segmental back muscle", + "part_of": "UNRESOLVABLE:segmental back muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_spinotransversales_muscle.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_spinotransversales_muscle.json new file mode 100644 index 000000000..23ba1b50b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_spinotransversales_muscle.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_spinotransversales_muscle", + "parent_id": "UNRESOLVABLE:spinotransversales muscle", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900060", + "label": "splenius capitus muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:spinotransversales muscle", + "part_of": "UNRESOLVABLE:spinotransversales muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_splenius-capitus-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_submucosal_artery_of_colon.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_submucosal_artery_of_colon.json new file mode 100644 index 000000000..9d31f15b8 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_submucosal_artery_of_colon.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_submucosal_artery_of_colon", + "parent_id": "UNRESOLVABLE:submucosal artery of colon", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900051", + "label": "rectus capitius posterior minor muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:submucosal artery of colon", + "part_of": "UNRESOLVABLE:submucosal artery of colon", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_rectus-capitius-posterior-minor-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_supraperiosteal_arteriole.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_supraperiosteal_arteriole.json new file mode 100644 index 000000000..fbd31954d --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_supraperiosteal_arteriole.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_supraperiosteal_arteriole", + "parent_id": "UNRESOLVABLE:supraperiosteal arteriole", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900018", + "label": "inferior head of lateral pterygoid muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:supraperiosteal arteriole", + "part_of": "UNRESOLVABLE:supraperiosteal arteriole", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/input/unresolvable_thoracic_wall_muscle.json b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_thoracic_wall_muscle.json new file mode 100644 index 000000000..e3ab79284 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/input/unresolvable_thoracic_wall_muscle.json @@ -0,0 +1,21 @@ +{ + "group_name": "unresolvable_thoracic_wall_muscle", + "parent_id": "UNRESOLVABLE:thoracic wall muscle", + "parent_label": "", + "term_counts": { + "leaf": 1, + "group": 0 + }, + "note": "parent_label is best-effort; subagent should resolve via OLS4. For term_type='group' terms: use obo-grep on uberon-edit.obo to find similar UBERON groupings, identify the genus + part_of pattern, and fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": [ + { + "ntr_id": "http://purl.obolibrary.org/obo/UBERON_9900030", + "label": "levatores costarum breves of levator costarum muscle", + "term_type": "leaf", + "system": "muscle", + "is_a": "UNRESOLVABLE:thoracic wall muscle", + "part_of": "UNRESOLVABLE:thoracic wall muscle", + "def_xref": "https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle" + } + ] +} \ No newline at end of file diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_12252.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_12252.json new file mode 100644 index 000000000..52070bf2b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_12252.json @@ -0,0 +1,23 @@ +{ + "confirmed_matches": [ + { + "label": "respiratory diaphragm muscle", + "uberon_id": "UBERON:0001103", + "confidence": "high", + "uberon_definition": "A thin musculomembranous barrier that separates the abdominal and thoracic cavities. Often used for breathing control.", + "wikipedia_summary": "The thoracic diaphragm, or simply the diaphragm, is a sheet of internal skeletal muscle in mammals that extends across the bottom of the thoracic cavity. The diaphragm separates the thoracic cavity, containing the heart and lungs, from the abdominal cavity and performs an important function in respiration: as the diaphragm contracts, the volume of the thoracic cavity increases, creating a negative pressure there, which draws air into the lungs.", + "match_evidence": [ + "UBERON:0001103 has EXACT synonym 'diaphragm muscle' (BTO:0000341).", + "UBERON:0001103 is_a UBERON:0014892 (skeletal muscle organ, vertebrate); part_of UBERON:0001004 (respiratory system); innervated_by UBERON:0001884 (phrenic nerve).", + "FMA xref on UBERON:0001103 is FMA:13295 (label 'Diaphragm'). The source 'NEEDS_MAPPING:FMA:12252' appears to be an erroneous FMA ID — FMA:12252 resolves to 'Subclavian lymphatic trunk', which is unrelated to the term label 'respiratory diaphragm muscle'. The term label itself is a direct synonym of UBERON:0001103." + ] + } + ], + "unresolvable": [ + { + "label": "NEEDS_MAPPING:FMA:12252 (parent)", + "reason": "The supplied FMA parent ID FMA:12252 resolves to 'Subclavian lymphatic trunk' in FMA, which is not anatomically a parent of a diaphragm muscle. Likely an input data error; the correct FMA ID for diaphragm is FMA:13295.", + "suggestion": "Treat as input error. The term itself is a confirmed match for UBERON:0001103, so the parent mapping question is moot — exclude from template." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22424.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22424.json new file mode 100644 index 000000000..b2e44e504 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22424.json @@ -0,0 +1,40 @@ +{ + "definitions": { + "articularis genu muscle": "A small skeletal muscle organ of the anterior thigh, lying deep to the vastus intermedius, that arises from the anterior surface of the distal shaft of the femur and inserts onto the proximal wall of the suprapatellar bursa and the synovial membrane of the knee joint, where it retracts the bursa superiorly during knee extension." + }, + "wikipedia_images": { + "articularis genu muscle": "https://upload.wikimedia.org/wikipedia/commons/2/2b/Gray244.png" + }, + "xrefs": { + "articularis genu muscle": "Wikipedia:Articularis_genus_muscle|FMA:22424" + }, + "def_xrefs_to_add": { + "articularis genu muscle": "PMID:30229230" + }, + "leaf_template_rows": { + "articularis genu muscle": { + "is_a": "UBERON:0001630", + "part_of": "UBERON:0000376", + "has_muscle_origin": "UBERON:0000981", + "innervated_by": "UBERON:0001267" + } + }, + "resolved_relationships": { + "articularis genu muscle": "is_a" + }, + "resolved_parents": { + "articularis genu muscle": "UBERON:0001630" + }, + "unresolvable": [ + { + "label": "articularis genu muscle (parent FMA:22424)", + "reason": "Source parent FMA:22424 is the articularis genus muscle itself (self-referential mapping in the ASCTB input). No UBERON equivalent exists for this term — it is the new term being created. Genus resolved to UBERON:0001630 (muscle organ) and part_of to UBERON:0000376 (hindlimb stylopod / thigh) by analogy with UBERON:0001379 (vastus lateralis).", + "suggestion": "Accept the leaf_template_rows mapping; no further FMA→UBERON parent lookup is needed." + }, + { + "label": "articularis genu muscle has_muscle_insertion", + "reason": "Anatomical insertion is on the suprapatellar bursa / synovial membrane of the knee joint. UBERON currently lacks specific terms for 'suprapatellar bursa' or 'synovial membrane of knee joint capsule'.", + "suggestion": "Omit has_muscle_insertion for now; curator may add later if/when those structures are added to UBERON." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22472.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22472.json new file mode 100644 index 000000000..3a5c835f7 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22472.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "tibalis anterior muscle", + "uberon_id": "UBERON:0001385", + "confidence": "high", + "uberon_definition": "A muscle that originates in the upper two-thirds of the lateral surface of the tibia and inserts into the medial cuneiform and first metatarsal bones of the foot. Its acts to invert the foot. It is situated on the lateral side of the tibia; it is thick and fleshy above, tendinous below.", + "wikipedia_summary": "The tibialis anterior muscle is a muscle of the anterior compartment of the leg that originates from the upper two-thirds of the lateral surface of the tibia and inserts into the medial cuneiform and base of the first metatarsal. It dorsiflexes and inverts the foot. Innervated by the deep fibular (peroneal) nerve.", + "note": "Source label 'tibalis anterior muscle' is a typo of 'tibialis anterior muscle', which is recorded as an EXACT synonym of UBERON:0001385 'tibialis anterior'. UBERON:0001385 carries FMA:22532 as xref; the input's parent FMA:22472 does not appear in UBERON and is likely a data error in the source row (the same FMA was assigned to both is_a and part_of, suggesting placeholder/self-reference). Term should be excluded from the template as already present in UBERON." + } + ], + "name_corrections": [ + { + "label": "tibalis anterior muscle", + "suggested": "tibialis anterior muscle", + "reason": "Typo: 'tibalis' should be 'tibialis'. The corrected form is the standard TA2 name and is already recorded as an EXACT synonym of UBERON:0001385." + } + ], + "xrefs": { + "tibalis anterior muscle": "Wikipedia:Tibialis_anterior_muscle|FMA:22532" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22474.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22474.json new file mode 100644 index 000000000..f9a286576 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_22474.json @@ -0,0 +1,23 @@ +{ + "confirmed_matches": [ + { + "label": "tibalis posterior muscle", + "uberon_id": "UBERON:0001667", + "confidence": "high", + "uberon_definition": "The Tibialis posterior is the most central of all the leg muscles, and is located in the posterior compartment of the leg. It is the key stabilizing muscle of the lower leg.", + "wikipedia_summary": "The tibialis posterior muscle is the most central of all the leg muscles, located in the deep posterior compartment of the leg. It originates from the inner posterior border of the fibula and the posterior surface of the tibia (and interosseous membrane), and inserts into the navicular tuberosity and the medial cuneiform of the foot. It is innervated by the tibial nerve and is the key stabilising muscle of the lower leg, supporting the medial longitudinal arch of the foot.", + "note": "Source label 'tibalis posterior muscle' is a misspelling of 'tibialis posterior muscle' (already present as a synonym of UBERON:0001667). FMA:22474 in the input is actually the parent class 'Muscle of posterior compartment of leg', not this term; the correct FMA xref for tibialis posterior is FMA:51099 (already on UBERON:0001667)." + } + ], + "name_corrections": [ + { + "label": "tibalis posterior muscle", + "suggested": "tibialis posterior muscle", + "reason": "Spelling error — missing 'i'. Standard anatomical term is 'tibialis posterior muscle' (already a related synonym on UBERON:0001667). Term is a confirmed existing match so no new term is needed; record correction for the candidates/QC report." + } + ], + "resolved_parents": { + "_parent_group": "UBERON:0011139" + }, + "unresolvable": [] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_323951.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_323951.json new file mode 100644 index 000000000..2dbb10765 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_323951.json @@ -0,0 +1,25 @@ +{ + "confirmed_matches": [ + { + "label": "left crus of lumbar part of respiratory diaphragm muscle", + "uberon_id": "UBERON:0014767", + "confidence": "high", + "uberon_definition": "A crus of diaphragm that is in_the_left_side_of a diaphragm.", + "wikipedia_summary": "The left crus of the diaphragm is a tendinous structure that arises from the anterolateral surfaces of the bodies and intervertebral discs of the upper two lumbar vertebrae. Together with the right crus it forms the lumbar (vertebral) part of the diaphragm and surrounds the aortic and esophageal hiatuses.", + "note": "UBERON:0014767 explicitly carries the synonym 'left crus of lumbar part of diaphragm' (EXACT, FMA:58287). The input label adds 'respiratory ... muscle' but refers to the same anatomical structure. FMA:323951 was not directly xref'd in UBERON but UBERON:0014767 carries FMA:58287 for the same structure." + } + ], + "xrefs": { + "left crus of lumbar part of respiratory diaphragm muscle": "FMA:58287|Wikipedia:Crus_of_diaphragm" + }, + "resolved_parents": { + "_parent_FMA:323951": "UBERON:0014765" + }, + "unresolvable": [ + { + "label": "_parent_FMA:323951", + "reason": "FMA:323951 (lumbar part of diaphragm) is not directly xref'd in UBERON. The closest UBERON concept is UBERON:0014765 'crus of diaphragm' (which is the lumbar/vertebral part of the diaphragm). Not needed here because the child term itself matches an existing UBERON term.", + "suggestion": "If a separate UBERON term for the lumbar part of the diaphragm is desired, it could be added with FMA:323951 as xref; otherwise treat UBERON:0014765 as functionally equivalent." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46583.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46583.json new file mode 100644 index 000000000..6b0a69ad0 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46583.json @@ -0,0 +1,16 @@ +{ + "resolved_parents": { + "_parent_FMA:46583": "UBERON:0008575" + }, + "confirmed_matches": [ + { + "label": "aryepiglottic part of oblique arytenoid muscle", + "uberon_id": "UBERON:0011025", + "confidence": "high", + "uberon_definition": "The aryepiglotticus is a muscle of the larynx running in the aryepiglottic fold from the arytenoid cartilage to the epiglottis.", + "wikipedia_summary": "The aryepiglotticus (aryepiglottic muscle) is a muscle of the larynx; it is often described as the aryepiglottic part of the oblique arytenoid muscle (pars aryepiglottica musculi arytenoidei obliqui, FMA:46602). It runs in the aryepiglottic fold from the apex of the arytenoid cartilage to the lateral margin of the epiglottis and helps close the laryngeal inlet during swallowing.", + "note": "UBERON:0011025 'aryepiglotticus muscle' already records the exact synonym 'ary-epiglottic part of oblique arytenoid' with xref FMA:46602, and is asserted part_of UBERON:0008575 (oblique arytenoid, FMA:46583). The source FMA parent FMA:46583 maps to UBERON:0008575. No new term required.", + "xrefs_on_matched_term": "FMA:46602|Wikipedia:Aryepiglottic_muscle|NCIT:C32146|SCTID:244818009" + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46588.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46588.json new file mode 100644 index 000000000..f3e67eba3 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46588.json @@ -0,0 +1,16 @@ +{ + "resolved_parents": { + "_parent_FMA:46588": "UBERON:0008576" + }, + "confirmed_matches": [ + { + "label": "thyroepiglottic part of thyroarytenoid muscle", + "uberon_id": "UBERON:0010927", + "confidence": "high", + "uberon_definition": "Fibers of the thyroarytenoid muscle that continue to the margin of the epiglottis; it closes the inlet to the larynx.", + "wikipedia_summary": "The thyroepiglottic muscle (pars thyroepiglottica musculi thyroarytenoidei) is a fasciculus of the thyroarytenoid muscle whose fibers prolong backward and upward to the lateral margin of the epiglottis; some of its fibers spread out on the anterior surface of the arytenoid cartilage. It depresses the epiglottis and helps close the laryngeal inlet during swallowing.", + "match_notes": "Source label 'thyroepiglottic part of thyroarytenoid muscle' matches UBERON:0010927 ('thyroepiglotticus muscle') exactly — UBERON synonyms include 'thyro-epiglottic part of thyro-arytenoid' (FMA:46594), 'thyroepiglottic muscle', 'pars thyroepiglottica musculus thyroarytenoidei'. UBERON xrefs FMA:46594 (the more specific TA2 ID for this sub-part). The source FMA:46588 cited in the input is the parent FMA term (thyroarytenoid muscle as a whole = UBERON:0008576), not the part itself.", + "xrefs": "FMA:46594|Wikipedia:Thyroepiglottic_muscle" + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46623.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46623.json new file mode 100644 index 000000000..22b08bf13 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_46623.json @@ -0,0 +1,18 @@ +{ + "confirmed_matches": [ + { + "label": "thyropharyngeal part of inferior pharyngeal constrictor muscle", + "uberon_id": "UBERON:0010936", + "confidence": "high", + "uberon_definition": "(no text def in UBERON; comment: 'muscle belly'). UBERON:0010936 'thyropharyngeus muscle' carries the exact synonyms 'thyropharyngeal part of inferior pharyngeal constrictor' and 'thyropharyngeal part of inferior constrictor pharyngeus muscle' (FMA:46658); is_a muscle organ + muscle belly; part_of UBERON:0001570 inferior pharyngeal constrictor; has_muscle_origin thyroid cartilage.", + "wikipedia_summary": "The thyropharyngeus is the upper, larger portion of the inferior pharyngeal constrictor muscle, originating from the oblique line of the thyroid cartilage and inserting into the pharyngeal raphe; together with the lower cricopharyngeus part it forms the inferior pharyngeal constrictor.", + "note": "Source parent FMA:46623 is the inferior pharyngeal constrictor as a whole (= UBERON:0001570). The NTR label is a thyropharyngeal subdivision/part of that muscle, which is already represented in UBERON as UBERON:0010936 (thyropharyngeus muscle) with the requested label present as an EXACT synonym (FMA:46658). Exclude from new-term template." + } + ], + "resolved_parents": { + "_parent_FMA:46623": "UBERON:0001570" + }, + "xrefs": { + "thyropharyngeal part of inferior pharyngeal constrictor muscle": "FMA:46658" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_5841.json b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_5841.json new file mode 100644 index 000000000..d03df68be --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/needs_mapping_fma_5841.json @@ -0,0 +1,18 @@ +{ + "confirmed_matches": [ + { + "label": "right crus of lumbar part of respiratory diaphragm muscle", + "uberon_id": "UBERON:0014766", + "confidence": "high", + "uberon_definition": "A crus of diaphragm that is in_the_right_side_of a diaphragm.", + "wikipedia_summary": "The right crus of the diaphragm is the larger and longer of the two crura, arising from the anterolateral surfaces of the bodies and intervertebral discs of the upper three or four lumbar vertebrae. It forms part of the lumbar portion of the diaphragm and surrounds the esophageal and aortic hiatuses, contributing to crural sphincter function at the gastro-esophageal junction.", + "note": "UBERON:0014766 lists 'right crus of lumbar part of diaphragm' as an EXACT synonym, with xref FMA:58286. The source label 'right crus of lumbar part of respiratory diaphragm muscle' is a verbose HRA/ASCTB rendering of the same structure. The source parent FMA:5841 (lumbar part of diaphragm) is the broader region; UBERON:0014766 is the appropriate existing UBERON equivalent for the right crus itself." + } + ], + "resolved_parents": { + "right crus of lumbar part of respiratory diaphragm muscle": "UBERON:0014765" + }, + "xrefs": { + "right crus of lumbar part of respiratory diaphragm muscle": "FMA:58286|Wikipedia:Crus_of_diaphragm" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0000975.json b/bulk_ntr_workflow/outputs/definitions/uberon_0000975.json new file mode 100644 index 000000000..9ee1f924c --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0000975.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "costal part of respiratory diaphragm muscle", + "uberon_id": "UBERON:0035831", + "confidence": "high", + "uberon_definition": "The domain of the diaphragm that is a thin domed sheet of muscle composed of a radial array of myofibers extending laterally from the ribs and medially to a central tendon.", + "wikipedia_summary": "The costal part of the diaphragm is the lateral muscular portion of the thoracic diaphragm that arises from the inner surfaces of the lower six ribs and their costal cartilages on each side, interdigitating with the transversus abdominis, and converging onto the central tendon. It contributes the majority of the diaphragm's contractile force during quiet inspiration.", + "match_evidence": "UBERON:0035831 has EXACT synonym 'costal part of diaphragm' (FMA:58277). The source label 'respiratory diaphragm muscle' resolves to UBERON:0001103 (diaphragm), which has 'diaphragm muscle' as an EXACT synonym. Therefore 'costal part of respiratory diaphragm muscle' = 'costal part of diaphragm' = UBERON:0035831. FMA xref also aligns (FMA:58277)." + } + ], + "xrefs": { + "costal part of respiratory diaphragm muscle": "FMA:58277" + }, + "unresolvable": [ + { + "label": "__parent_id__", + "reason": "Supplied parent UBERON:0000975 is 'sternum' — wrong anatomical domain for a part of the diaphragm. The correct parent for a costal-diaphragm subdivision is UBERON:0001103 (diaphragm). The existing UBERON term UBERON:0035831 (costal diaphragm) already has 'part_of UBERON:0001103'.", + "suggestion": "Use UBERON:0001103 (diaphragm) as the parent. No new term needed: confirmed match to UBERON:0035831 makes this term ineligible for the leaf template." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0000979.json b/bulk_ntr_workflow/outputs/definitions/uberon_0000979.json new file mode 100644 index 000000000..47362c991 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0000979.json @@ -0,0 +1,40 @@ +{ + "definitions": { + "interspinales cervicalis muscle": "A muscle of the vertebral column consisting of short paired fascicles that span between the spinous processes of contiguous cervical vertebrae (typically C2 through T1), lying on either side of the interspinous ligament. It assists in extension of the cervical spine and contributes to segmental stabilisation and proprioception of the neck." + }, + "xrefs": { + "interspinales cervicalis muscle": "Wikipedia:Interspinales_muscles|FMA:32519" + }, + "def_xrefs_to_add": { + "interspinales cervicalis muscle": "Wikipedia:Interspinales_muscles" + }, + "leaf_template_rows": { + "interspinales cervicalis muscle": { + "is_a": "UBERON:0004518", + "part_of": "UBERON:0000974", + "has_muscle_origin": "UBERON:0001076", + "has_muscle_insertion": "UBERON:0001076", + "innervated_by": "UBERON:0006839" + } + }, + "resolved_relationships": { + "interspinales cervicalis muscle": "is_a" + }, + "resolved_parents": { + "interspinales cervicalis muscle": "UBERON:0004518" + }, + "name_corrections": [ + { + "label": "interspinales cervicalis muscle", + "suggested": "interspinales cervicis muscle", + "reason": "TA2 / standard anatomical nomenclature uses 'musculi interspinales cervicis' (genitive 'cervicis', not 'cervicalis'). 'Cervicalis' is grammatically the adjective form, but the established TA term is 'interspinales cervicis'. Keep 'interspinales cervicalis muscle' as a related synonym." + } + ], + "unresolvable": [ + { + "label": "interspinales cervicalis muscle", + "reason": "Source-supplied parent_id UBERON:0000979 resolves to 'tibia', which is clearly an upstream data error (interspinales cervicis is a deep neck muscle, not a leg bone). Used anatomical knowledge and similar UBERON deep neck muscles (rectus capitis posterior major UBERON:0008454, longus colli UBERON:0001121, semispinalis cervicis precedent) to determine the appropriate genus and part_of.", + "suggestion": "Curator should ignore the source UBERON:0000979 parent assignment. The chosen genus 'muscle of vertebral column' (UBERON:0004518) is consistent with other named vertebral-column muscles in UBERON; part_of 'neck' (UBERON:0000974) follows the precedent of rectus capitis posterior major. has_muscle_origin and has_muscle_insertion are both set to UBERON:0001076 (neural spine / spinous process of vertebra) because the muscle spans between adjacent cervical spinous processes; UBERON does not currently have a more specific 'spinous process of cervical vertebra' class. innervated_by is the dorsal ramus of spinal nerve (UBERON:0006839); a more specific 'medial branch of dorsal ramus of cervical spinal nerve' class does not exist in UBERON." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001092.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001092.json new file mode 100644 index 000000000..5bd2bdebb --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001092.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "hamstring portion of adductor magnus muscle": "A muscle head that originates from the ischial tuberosity and descends almost vertically through the posterior compartment of the thigh to insert by a rounded tendon onto the adductor tubercle of the medial femoral condyle. It is the ischiocondylar division of the adductor magnus, is innervated by the tibial division of the sciatic nerve, and acts to extend the hip joint." + }, + "xrefs": { + "hamstring portion of adductor magnus muscle": "Wikipedia:Adductor_magnus_muscle" + }, + "def_xrefs_to_add": { + "hamstring portion of adductor magnus muscle": "PMID:23813615" + }, + "leaf_template_rows": { + "hamstring portion of adductor magnus muscle": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0000370", + "has_muscle_origin": "UBERON:0034983", + "has_muscle_insertion": "UBERON:0000981", + "innervated_by": "UBERON:0001323" + } + }, + "resolved_relationships": { + "hamstring portion of adductor magnus muscle": "part_of" + }, + "resolved_parents": { + "hamstring portion of adductor magnus muscle": "UBERON:0000370" + }, + "unresolvable": [ + { + "label": "hamstring portion of adductor magnus muscle", + "reason": "Source parent UBERON:0001092 (vertebral bone 1 / atlas vertebra) is anatomically incorrect for a thigh muscle subdivision. Refined parent is UBERON:0000370 (adductor magnus), with the term modelled as a muscle head (UBERON:0011906) part_of adductor magnus.", + "suggestion": "Use UBERON:0000370 as the part_of parent. UBERON:0000370's own definition explicitly describes this 'hamstring portion' as the part arising from the ischial tuberosity." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001194.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001194.json new file mode 100644 index 000000000..61eb17c0b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001194.json @@ -0,0 +1,43 @@ +{ + "definitions": { + "inferior longitudinal lingual muscle": "An intrinsic muscle of the tongue that consists of a narrow band of longitudinal fibers running along the inferior surface of the tongue between the genioglossus and hyoglossus muscles, extending from the root to the apex of the tongue, and innervated by the hypoglossal nerve." + }, + "wikipedia_images": { + "inferior longitudinal lingual muscle": "https://upload.wikimedia.org/wikipedia/commons/3/30/Musculuslongitudinalissuperiorlinguae.png" + }, + "xrefs": { + "inferior longitudinal lingual muscle": "Wikipedia:Inferior_longitudinal_muscle_of_tongue|FMA:46694" + }, + "def_xrefs_to_add": { + "inferior longitudinal lingual muscle": "PMID:30855883" + }, + "leaf_template_rows": { + "inferior longitudinal lingual muscle": { + "is_a": "UBERON:0001576", + "part_of": "UBERON:0001723", + "has_muscle_origin": "UBERON:0001685", + "has_muscle_insertion": "UBERON:0001723", + "innervated_by": "UBERON:0001650" + } + }, + "resolved_relationships": { + "inferior longitudinal lingual muscle": "is_a" + }, + "resolved_parents": { + "inferior longitudinal lingual muscle": "UBERON:0001576" + }, + "name_corrections": [ + { + "label": "inferior longitudinal lingual muscle", + "suggested": "inferior longitudinal muscle of tongue", + "reason": "UBERON convention (see UBERON:0008582 'superior longitudinal muscle of tongue', UBERON:0008583 'transverse muscle of tongue', UBERON:0008584 'vertical muscle of tongue') uses 'X muscle of tongue' rather than 'X lingual muscle'. Keep source name as EXACT synonym." + } + ], + "unresolvable": [ + { + "label": "inferior longitudinal lingual muscle", + "reason": "Input parent_id UBERON:0001194 resolves to 'splenic artery' — clearly wrong for this term. Correct parent assigned from anatomical context: UBERON:0001576 'intrinsic muscle of tongue' (genus), mirroring sibling intrinsic tongue muscles (UBERON:0008582 superior longitudinal, UBERON:0008583 transverse, UBERON:0008584 vertical).", + "suggestion": "Verify upstream parent ID assignment; the source row likely intended UBERON:0001576 (intrinsic muscle of tongue) or UBERON:0000378 (tongue muscle)." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001272.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001272.json new file mode 100644 index 000000000..886dc8830 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001272.json @@ -0,0 +1,39 @@ +{ + "confirmed_matches": [ + { + "label": "iliocostalis cervicalis muscle", + "uberon_id": "UBERON:0008546", + "confidence": "high", + "uberon_definition": "The iliocostalis cervicis (cervicalis ascendens) arises from the angles of the third, fourth, fifth, and sixth ribs, and is inserted into the posterior tubercles of the transverse processes of the fourth, fifth, and sixth cervical vertebrae.", + "wikipedia_summary": "Iliocostalis cervicis (cervicalis ascendens) is the cervical division of the iliocostalis component of the erector spinae; arises from the angles of the 3rd-6th ribs and inserts on the posterior tubercles of the transverse processes of C4-C6.", + "note": "Source label 'iliocostalis cervicalis muscle' is a spelling variant of the standard TA2 form 'iliocostalis cervicis muscle' (UBERON:0008546, FMA:22704). Same anatomical structure. Curator should consider adding 'iliocostalis cervicalis muscle' as a RELATED synonym." + }, + { + "label": "pteryopharyngeal part of superior pharyngeal constrictor muscle", + "uberon_id": "UBERON:0010956", + "confidence": "high", + "uberon_definition": "Pterygopharyngeal part of superior pharyngeal constrictor (UBERON:0010956); FMA:46638. The pterygopharyngeal part (pars pterygopharyngea) is a subdivision of the superior pharyngeal constrictor muscle arising from the pterygoid hamulus.", + "wikipedia_summary": "The superior pharyngeal constrictor has four named parts: pterygopharyngeus, buccopharyngeus, mylopharyngeus, and glossopharyngeus; the pterygopharyngeal part originates from the pterygoid hamulus of the medial pterygoid plate.", + "note": "Source label 'pteryopharyngeal' is a typographical variant (missing 'g') of the standard TA2/FMA form 'pterygopharyngeal' (UBERON:0010956, FMA:46638). Same anatomical structure. Curator should consider adding the source spelling as a RELATED synonym." + } + ], + "xrefs": { + "iliocostalis cervicalis muscle": "FMA:22704|Wikipedia:Iliocostalis#Iliocostalis_cervicis", + "pteryopharyngeal part of superior pharyngeal constrictor muscle": "FMA:46638" + }, + "name_corrections": [ + { + "label": "iliocostalis cervicalis muscle", + "suggested": "iliocostalis cervicis muscle", + "reason": "Standard TA2 form uses Latin genitive 'cervicis' (of the neck), not adjectival 'cervicalis'. UBERON:0008546 uses 'iliocostalis cervicis muscle'. Source spelling could be retained as RELATED synonym." + }, + { + "label": "pteryopharyngeal part of superior pharyngeal constrictor muscle", + "suggested": "pterygopharyngeal part of superior pharyngeal constrictor muscle", + "reason": "Source spelling 'pteryopharyngeal' is missing the 'g' from the Greek root 'pteryg-' (wing, referring to the pterygoid process). Standard TA2/FMA/UBERON form is 'pterygopharyngeal' (UBERON:0010956, FMA:46638). Source spelling could be retained as RELATED synonym." + } + ], + "resolved_parents": { + "_note": "Source parent_id UBERON:0001272 (innominate bone) is an artifact and is unrelated to either muscle term in this group. Both terms are confirmed matches to existing UBERON terms (UBERON:0008546 and UBERON:0010956) and therefore excluded from the template; no new parent assignment is needed." + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001537.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001537.json new file mode 100644 index 000000000..c969c4e28 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001537.json @@ -0,0 +1,38 @@ +{ + "definitions": { + "lateral compartment of leg muscle": "A skeletal muscle organ that is part of the lateral (fibular) fascial compartment of the leg, comprising the fibularis longus and fibularis brevis muscles, both arising from the lateral surface of the fibula and innervated by the superficial fibular nerve, acting to evert and weakly plantarflex the foot." + }, + "xrefs": { + "lateral compartment of leg muscle": "Wikipedia:Lateral_compartment_of_leg" + }, + "def_xrefs_to_add": { + "lateral compartment of leg muscle": "PMID:30137811" + }, + "leaf_template_rows": { + "lateral compartment of leg muscle": { + "is_a": "UBERON:0014892", + "has_muscle_origin": "UBERON:0001446", + "innervated_by": "UBERON:0035526" + } + }, + "resolved_relationships": { + "lateral compartment of leg muscle": "is_a" + }, + "resolved_parents": { + "lateral compartment of leg muscle": "UBERON:0014892" + }, + "name_corrections": [ + { + "label": "lateral compartmet of leg muscle", + "suggested": "lateral compartment of leg muscle", + "reason": "Typo in source label: 'compartmet' -> 'compartment'. Keep source name as related synonym." + } + ], + "unresolvable": [ + { + "label": "lateral compartment of leg muscle", + "reason": "Source-supplied parent UBERON:0001537 refers to 'anterior tibial artery', not an anatomical region containing leg muscles — clearly a wrong mapping in the input. No existing UBERON class for 'lateral compartment of leg' (the fascial compartment) was found via awk over uberon-edit.obo, so no part_of target could be populated. Closest precedent term is UBERON:0002463 'muscle of posterior compartment of hindlimb stylopod' which uses is_a UBERON:0014892 (skeletal muscle organ, vertebrate) plus muscle-overlay relations; this term follows that pattern. Conceptually this is a collective/group class (fibularis longus + fibularis brevis); curator may wish to (a) reroute to the groups template and/or (b) first add a new UBERON term for 'lateral compartment of leg' (subdivision of leg) to serve as a proper part_of target.", + "suggestion": "Curator: confirm name correction; consider creating UBERON term for 'lateral compartment of leg' (fascial compartment) before finalising, then add relationship: part_of . Alternatively, reclassify as group term with genus UBERON:0014892 and location set to the new compartment term." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001546.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001546.json new file mode 100644 index 000000000..cc396e4fc --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001546.json @@ -0,0 +1,30 @@ +{ + "definitions": { + "lateral posterior cervical intertransversarii muscle": "A muscle organ of the neck that arises from and inserts onto the posterior tubercles of the transverse processes of adjacent cervical vertebrae, lying lateral to the medial posterior cervical intertransversarii; together with its segmental fellows it laterally flexes the cervical vertebral column and is innervated by the ventral rami of the cervical spinal nerves." + }, + "xrefs": { + "lateral posterior cervical intertransversarii muscle": "Wikipedia:Intertransversarii" + }, + "leaf_template_rows": { + "lateral posterior cervical intertransversarii muscle": { + "is_a": "UBERON:0001630", + "part_of": "UBERON:0000974", + "has_muscle_origin": "UBERON:0018143", + "has_muscle_insertion": "UBERON:0018143", + "innervated_by": "UBERON:0006838" + } + }, + "resolved_relationships": { + "lateral posterior cervical intertransversarii muscle": "is_a" + }, + "resolved_parents": { + "lateral posterior cervical intertransversarii muscle": "UBERON:0001630" + }, + "unresolvable": [ + { + "label": "lateral posterior cervical intertransversarii muscle", + "reason": "Source parent_id UBERON:0001546 resolves to 'posterior tibial vein', which is anatomically incorrect for a cervical paraspinal muscle. No specific UBERON term currently exists for this muscle; closest existing classes are UBERON:0001630 (muscle organ) as genus and UBERON:0004465 (musculature of neck) as collective. Existing 'm. intertransversarius capitis' classes (UBERON:3010664, UBERON:3010667) are amphibian-sourced and not equivalent.", + "suggestion": "Use UBERON:0001630 (muscle organ) as is_a and UBERON:0000974 (neck) as part_of, with has_muscle_origin/insertion = UBERON:0018143 (transverse process of cervical vertebra) and innervated_by = UBERON:0006838 (ventral ramus of spinal nerve). No real PMID located; rely on existing def_xref (FIPAT TA2 + ISBN:9780323393225 Drake Gray's Anatomy + ASCTB-TEMP placeholder); curator may wish to add a primary anatomical reference such as Standring Gray's Anatomy." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001572.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001572.json new file mode 100644 index 000000000..febbb6b8d --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001572.json @@ -0,0 +1,24 @@ +{ + "confirmed_matches": [ + { + "label": "ceratoglossus of hyoglossus muscle", + "uberon_id": "UBERON:0008428", + "confidence": "high", + "uberon_definition": "Main, posterior part of hyoglossus muscle (vs. chondroglossus) arising from the greater horn of the hyoid bone.", + "wikipedia_summary": "Ceratoglossus is the main, posterior portion of the hyoglossus muscle, arising from the greater horn (cornu) of the hyoid bone. Source UBERON term carries synonyms 'ceratoglossus muscle' and 'musculus ceratoglossus', xref FMA:46720, and relationship part_of UBERON:0001572 (hyoglossus muscle) — the exact parent supplied in the input.", + "note": "Source label 'ceratoglossus of hyoglossus muscle' is a longer descriptive variant of the UBERON primary label 'ceratoglossus' (synonym 'ceratoglossus muscle'). Same structure: a named subdivision of the hyoglossus muscle. Excluded from new-term template; the source label could optionally be added as a RELATED synonym to UBERON:0008428." + }, + { + "label": "chondroglossus of hyoglossus muscle", + "uberon_id": "UBERON:0011535", + "confidence": "high", + "uberon_definition": "The Chondroglossus is sometimes described as a part of the Hyoglossus, but is separated from it by fibers of the Genioglossus, which pass to the side of the pharynx. It is about 2 cm. long, and arises from the medial side and base of the lesser cornu and contiguous portion of the body of the hyoid bone, and passes directly upward to blend with the intrinsic muscular fibers of the tongue, between the Hyoglossus and Genioglossus.", + "wikipedia_summary": "Chondroglossus is a small (~2 cm) muscle slip, sometimes considered a part of the hyoglossus, arising from the lesser cornu and body of the hyoid bone and blending with the intrinsic muscular fibers of the tongue. Source UBERON term carries xref FMA:46700, Wikipedia:Chondroglossus, and relationship part_of UBERON:0001572 (hyoglossus muscle) — the exact parent supplied in the input.", + "note": "Source label 'chondroglossus of hyoglossus muscle' is a descriptive variant of the UBERON primary label 'chondroglossus muscle'. Same structure: a subdivision of (or muscle slip associated with) the hyoglossus. Excluded from new-term template; the source label could optionally be added as a RELATED synonym to UBERON:0011535." + } + ], + "xrefs": { + "ceratoglossus of hyoglossus muscle": "FMA:46720", + "chondroglossus of hyoglossus muscle": "FMA:46700|Wikipedia:Chondroglossus" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001576.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001576.json new file mode 100644 index 000000000..691461105 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001576.json @@ -0,0 +1,48 @@ +{ + "confirmed_matches": [ + { + "label": "superior longitudinal lingual muscle", + "uberon_id": "UBERON:0008582", + "confidence": "high", + "uberon_definition": "A muscle of the tongue that consists of a thin stratum of oblique and longitudinal fibers immediately underlying the mucous membrane on the dorsum of the tongue.", + "wikipedia_summary": "The superior longitudinal muscle of the tongue (longitudinalis linguae superior / superior lingualis) is one of the four intrinsic tongue muscles. It is a thin stratum of oblique and longitudinal fibres directly beneath the mucous membrane on the dorsum of the tongue, innervated by the hypoglossal nerve.", + "note": "Input term is the same structure under the synonymous label 'superior longitudinal lingual muscle' / 'superior lingualis'. UBERON:0008582 is_a UBERON:0001576 (intrinsic muscle of tongue) — the parent matches the input group exactly. FMA:46693 matches the typical FMA assignment for this structure." + }, + { + "label": "transverse muscle", + "uberon_id": "UBERON:0008583", + "confidence": "high", + "uberon_definition": "A muscle of the tongue that consists of fibers which arise from the median fibrous septum and pass lateralward to be inserted into the submucous fibrous tissue at the sides of the tongue.", + "wikipedia_summary": "The transverse muscle of the tongue (transversus linguae) is one of the four intrinsic tongue muscles. Its fibres arise from the median fibrous (lingual) septum and pass laterally to insert into submucous fibrous tissue at the sides of the tongue. Innervated by the hypoglossal nerve.", + "note": "Input term 'transverse muscle' under parent UBERON:0001576 (intrinsic muscle of tongue) unambiguously refers to the transverse muscle of tongue. UBERON:0008583 already carries 'transverse muscle' as a RELATED synonym (from Wikipedia) and 'intrinsic tongue muscle transverse component' (MA:0002328) as an EXACT synonym. FMA:46695." + }, + { + "label": "vertical muscle", + "uberon_id": "UBERON:0008584", + "confidence": "high", + "uberon_definition": "A muscle of the tongue that is found only at the borders of the forepart of the tongue. Its fibers extend from the upper to the under surface of the organ.", + "wikipedia_summary": "The vertical muscle of the tongue (verticalis linguae) is one of the four intrinsic tongue muscles. It is found at the borders of the forepart of the tongue, with fibres extending from the upper to the under surface. Innervated by the hypoglossal nerve.", + "note": "Input term 'vertical muscle' under parent UBERON:0001576 (intrinsic muscle of tongue) unambiguously refers to the vertical muscle of tongue. UBERON:0008584 already carries 'vertical muscle' as a RELATED synonym and 'intrinsic tongue muscle vertical component' (MA:0002329) as an EXACT synonym. FMA:46696." + } + ], + "resolved_parents": { + "_parent_group": "UBERON:0001576 ! intrinsic muscle of tongue (confirmed via OBO lookup; label 'intrinsic muscle of tongue')." + }, + "name_corrections": [ + { + "label": "transverse muscle", + "suggested": "transverse muscle of tongue", + "reason": "Source label 'transverse muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'transverse muscle of tongue' (UBERON:0008583). Already carries 'transverse muscle' as a RELATED synonym, so no synonym addition is needed." + }, + { + "label": "vertical muscle", + "suggested": "vertical muscle of tongue", + "reason": "Source label 'vertical muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'vertical muscle of tongue' (UBERON:0008584). Already carries 'vertical muscle' as a RELATED synonym, so no synonym addition is needed." + }, + { + "label": "superior longitudinal lingual muscle", + "suggested": "superior longitudinal muscle of tongue", + "reason": "Source label uses 'lingual muscle' word order; UBERON's canonical label is 'superior longitudinal muscle of tongue' (UBERON:0008582). Consider adding 'superior longitudinal lingual muscle' as an EXACT synonym to aid matching from HRA/ASCTB sources." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001624.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001624.json new file mode 100644 index 000000000..086d3cc9f --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001624.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "opponens digiti minimi muscle", + "uberon_id": "UBERON:0036176", + "confidence": "high", + "uberon_definition": "The opponens minimi digiti (opponens digiti quinti in older texts) is a muscle in the hand. It is of a triangular form, and placed immediately beneath the palmaris brevis, abductor minimi digiti, and flexor brevis minimi digiti. It arises from the convexity of the hamulus of the hamate bone, and contiguous portion of the transverse carpal ligament; it is inserted into the whole length of the metacarpal bone of the little finger, along its ulnar margin.", + "wikipedia_summary": "The opponens digiti minimi is a hypothenar muscle of the hand which originates from the hook of hamate and the flexor retinaculum, inserts along the medial border of the fifth metacarpal, and acts to rotate the little finger toward the thumb in opposition. Innervated by the deep branch of the ulnar nerve (C8, T1).", + "note": "The label 'opponens digiti minimi muscle' is the standard anatomical name for the hand muscle (TA2 / Wikipedia). UBERON:0036176 carries 'opponens digiti minimi' and 'opponens digiti minimi (hand)' as synonyms, with xrefs FMA:37384, Wikipedia:Opponens_digiti_minimi_muscle. The source parent UBERON:0001624 (anterior cerebral artery) is clearly an upstream error and unrelated — confirmed match relies on label/synonym evidence, not the supplied parent." + } + ], + "xrefs": { + "opponens digiti minimi muscle": "FMA:37384" + }, + "unresolvable": [ + { + "label": "opponens digiti minimi muscle", + "reason": "Source-supplied parent_id UBERON:0001624 resolves to 'anterior cerebral artery', which is anatomically unrelated to a hand muscle. This appears to be an upstream parent-mapping error in the HRA ASCTB input.", + "suggestion": "Curator should report/correct the source parent assignment. The term itself already exists as UBERON:0036176 and is excluded from the new-term template." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001677.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001677.json new file mode 100644 index 000000000..ec3979755 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001677.json @@ -0,0 +1,18 @@ +{ + "confirmed_matches": [ + { + "label": "levator costarum muscle", + "uberon_id": "UBERON:8410070", + "confidence": "high", + "uberon_definition": "A chest muscle with a role in forceful inspiration. In human, there are twelve levatores costarum on either side of the chest; they are small tendinous and fleshy bundles arising from the ends of the transverse processes of the seventh cervical and upper eleven thoracic vertebrae. They pass obliquely downward and laterally, like the fibers of the intercostales externi, and each is inserted into the outer surface of the rib immediately below the vertebra from which it takes origin, between the tubercle and the angle (levatores costarum breves). Each of the four lower muscles divides into two fasciculi, one of which is inserted as above described; the other passes down to the second rib below its origin (levatores costarum longi).", + "wikipedia_summary": "Levatores costarum muscles are twelve paired small tendinous/fleshy bundles arising from transverse processes of C7-T11 and inserting on the rib below; they elevate the ribs and assist in forceful inspiration. Innervated by dorsal rami of C8-T11. Origin: transverse processes of vertebrae; insertion: ribs." + } + ], + "unresolvable": [ + { + "label": "source parent UBERON:0001677", + "reason": "Source-assigned parent UBERON:0001677 is 'sphenoid bone', which is anatomically incorrect for levator costarum muscle (a chest/back muscle). The correct parent in UBERON is UBERON:0002426 'chest muscle' (already used by the existing match UBERON:8410070).", + "suggestion": "Curator should review the upstream ASCTB mapping that produced UBERON:0001677 as a parent here; the existing UBERON:8410070 (levator costarum) supersedes this NTR." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0001876.json b/bulk_ntr_workflow/outputs/definitions/uberon_0001876.json new file mode 100644 index 000000000..7ff2c12b2 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0001876.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "external anal sphincter muscle", + "uberon_id": "UBERON:0001367", + "confidence": "high", + "uberon_definition": "The Sphincter ani externus (external anal sphincter) is a flat plane of muscular fibers, elliptical in shape and intimately adherent to the integument surrounding the margin of the anus.", + "wikipedia_summary": "The external anal sphincter (or sphincter ani externus) is a flat plane of skeletal muscle fibers, elliptical in shape and intimately adherent to the skin surrounding the margin of the anus. It is a voluntary muscle that surrounds the anus and keeps it closed, opening during defecation. It is innervated by the inferior rectal branch of the pudendal nerve (S2-S4).", + "note": "Source label 'external anal sphincter muscle' is the same structure as UBERON:0001367 'external anal sphincter' (synonyms include 'musculus sphincter ani externus'). UBERON:0001367 has FMA:21930, MA:0001531, Wikipedia:Sphincter_ani_externus_muscle. Source ASCTB-TEMP IRI should be added as a synonym/xref on UBERON:0001367 rather than a new term being created. Source parent UBERON:0001876 (amygdala) is clearly a spurious/erroneous mapping in the input — the intended parent is a sphincter muscle / anal region skeletal muscle class, which UBERON:0001367 already has (is_a UBERON:0004590 sphincter muscle; is_a UBERON:0004832 anal region skeletal muscle; part_of UBERON:0006867 anal part of perineum; surrounds UBERON:0001245 anus)." + } + ], + "xrefs": { + "external anal sphincter muscle": "Wikipedia:Sphincter_ani_externus_muscle|FMA:21930" + }, + "unresolvable": [ + { + "label": "external anal sphincter muscle", + "reason": "Source parent_id UBERON:0001876 resolves to 'amygdala' — a brain region, evidently a data-entry error in the ASCTB-TEMP input. Not an issue for output (term is a confirmed_match excluded from template), but flagged for curator awareness.", + "suggestion": "Curator should add ASCTB-TEMP source IRI (https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle) and 'external anal sphincter muscle' as a synonym to UBERON:0001367. No new term needed." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0002000.json b/bulk_ntr_workflow/outputs/definitions/uberon_0002000.json new file mode 100644 index 000000000..4fc9fbbd2 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0002000.json @@ -0,0 +1,20 @@ +{ + "confirmed_matches": [ + { + "label": "tensor fascia latae muscle", + "uberon_id": "UBERON:0001376", + "confidence": "high", + "uberon_definition": "The tensor fasciae latae or tensor fasciæ latæ is a muscle of the thigh.", + "wikipedia_summary": "The tensor fasciae latae is a muscle of the thigh. It arises from the anterior part of the outer lip of the iliac crest, the anterior superior iliac spine, and the deep fascia. It inserts via the iliotibial tract onto the lateral condyle of the tibia. It is innervated by the superior gluteal nerve.", + "note": "Source label 'tensor fascia latae muscle' is a spelling variant (singular fascia) of the standard 'tensor fasciae latae muscle' (UBERON:0001376). The existing UBERON term already includes 'tensor fasciae lata' and 'tensor fasciae lata muscle' as EXACT synonyms. FMA:22423 matches in both. Confirmed match — exclude from template.", + "xrefs": "FMA:22423|Wikipedia:Tensor_fasciae_latae_muscle" + } + ], + "name_corrections": [ + { + "label": "tensor fascia latae muscle", + "suggested": "tensor fasciae latae muscle", + "reason": "Standard anatomical Latin uses the genitive 'fasciae' (of the fascia), not nominative 'fascia'. UBERON:0001376 already carries 'tensor fasciae lata muscle' as an EXACT synonym; the source variant 'tensor fascia latae muscle' could be added as an additional synonym if not already covered." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0002377.json b/bulk_ntr_workflow/outputs/definitions/uberon_0002377.json new file mode 100644 index 000000000..b93695522 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0002377.json @@ -0,0 +1,19 @@ +{ + "confirmed_matches": [ + { + "label": "longus capitus muscle", + "uberon_id": "UBERON:0001563", + "confidence": "high", + "uberon_definition": "A muscle that arises by four tendinous slips from the transverse processes of the third, fourth, fifth, and sixth cervical vertebrae and inserts into the inferior surface of the basilar part of the occipital bone.", + "wikipedia_summary": "The longus capitis muscle (rectus capitis anticus major) arises by four tendinous slips from the anterior tubercles of the transverse processes of C3-C6 cervical vertebrae and inserts on the inferior surface of the basilar part of the occipital bone; it flexes the head at the atlanto-occipital joint and is innervated by branches of the cervical plexus (C1-C3).", + "note": "Source label 'longus capitus muscle' is a misspelling of 'longus capitis muscle'. UBERON:0001563 already lists 'longus capitus muscle' as a RELATED synonym (xref Wikipedia:Longus_capitis_muscle), confirming the match. Existing UBERON term already has has_muscle_origin (UBERON:0001077 transverse process of vertebra), has_muscle_insertion (UBERON:0001692 basioccipital bone), innervated_by (UBERON:0000962 nerve of cervical vertebra), depiction image, and FMA:46308 xref. No new term needed." + } + ], + "name_corrections": [ + { + "label": "longus capitus muscle", + "suggested": "longus capitis muscle", + "reason": "'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical term is 'longus capitis muscle' (TA2). Already present in UBERON as UBERON:0001563 with the misspelled form already captured as a RELATED synonym." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0002378.json b/bulk_ntr_workflow/outputs/definitions/uberon_0002378.json new file mode 100644 index 000000000..972c04672 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0002378.json @@ -0,0 +1,13 @@ +{ + "confirmed_matches": [ + { + "label": "spermatic cord muscle", + "uberon_id": "UBERON:0008488", + "confidence": "high", + "uberon_definition": "A thin layer of skeletal muscle that envelops the spermatic cord and testis of most male mammals in a series of loops; it is a continuation of the obliquus internus, arising from the inguinal ligament and inserting into the crest of the pubis and into the sheath of the rectus abdominis; it is innervated by the genital branch of the genitofemoral nerve and functions to draw the testis up toward the superficial inguinal ring in response to cold or to stimulation of the nerve.", + "wikipedia_summary": "The cremaster muscle is a paired structure made of thin layers of striated and smooth muscle that covers the testes and the spermatic cord in human males. It is continuous with the internal oblique muscle and originates from the inguinal ligament; the cremaster muscle envelops the spermatic cord and testis. Its primary function is to raise and lower the scrotum to regulate the temperature of the testes.", + "note": "The cremaster muscle is the muscle of the spermatic cord — its defining feature is enveloping the spermatic cord and testis. FMA:21531 is mapped to UBERON:0008488. 'spermatic cord muscle' is an alternative descriptive label for this same structure.", + "fma_xref": "FMA:21531" + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0002379.json b/bulk_ntr_workflow/outputs/definitions/uberon_0002379.json new file mode 100644 index 000000000..af979e74e --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0002379.json @@ -0,0 +1,12 @@ +{ + "confirmed_matches": [ + { + "label": "sphincter urethrae muscle", + "uberon_id": "UBERON:0004917", + "confidence": "high", + "uberon_definition": "A sphincter muscle surrounding the urethra.", + "wikipedia_summary": "The urethral sphincters are two muscles used to control the exit of urine from the urinary bladder through the urethra. The two muscles are the internal urethral sphincter and the external urethral sphincter. Latin name 'sphincter urethrae' refers to this structure.", + "note": "UBERON:0004917 'urethral sphincter' has 'sphincter urethrae' and 'urethral sphincter muscle' listed as EXACT synonyms. The source term 'sphincter urethrae muscle' is a direct synonym variant of this existing term. Parent UBERON:0002379 'perineal muscle' (muscle organ part_of perineum) is consistent with the urethral sphincter, which lies within the perineum (urogenital triangle). xref MA:0002650, EMAPA:37789, SCTID:277855007." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0002381.json b/bulk_ntr_workflow/outputs/definitions/uberon_0002381.json new file mode 100644 index 000000000..95ff9da9f --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0002381.json @@ -0,0 +1,38 @@ +{ + "definitions": { + "clavicular head of pectoralis major muscle": "A muscle head that forms the superior portion of the pectoralis major, originating from the anterior surface of the medial half of the clavicle and converging with the sternocostal head to insert via a common tendon onto the lateral lip of the intertubercular groove of the humerus.", + "sternocostal head of pectoralis major muscle": "A muscle head that forms the larger inferior portion of the pectoralis major, originating from the anterior surface of the sternum, the superior six costal cartilages, and the aponeurosis of the external oblique muscle, and inserting together with the clavicular head onto the lateral lip of the intertubercular groove of the humerus." + }, + "xrefs": { + "clavicular head of pectoralis major muscle": "Wikipedia:Pectoralis_major_muscle|FMA:32519", + "sternocostal head of pectoralis major muscle": "Wikipedia:Pectoralis_major_muscle|FMA:32521" + }, + "def_xrefs_to_add": { + "clavicular head of pectoralis major muscle": "Wikipedia:Pectoralis_major_muscle", + "sternocostal head of pectoralis major muscle": "Wikipedia:Pectoralis_major_muscle" + }, + "leaf_template_rows": { + "clavicular head of pectoralis major muscle": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0002381", + "has_muscle_origin": "UBERON:0001105", + "has_muscle_insertion": "UBERON:0000976", + "innervated_by": "UBERON:0003726" + }, + "sternocostal head of pectoralis major muscle": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0002381", + "has_muscle_origin": "UBERON:0000975", + "has_muscle_insertion": "UBERON:0000976", + "innervated_by": "UBERON:0003726" + } + }, + "resolved_relationships": { + "clavicular head of pectoralis major muscle": "part_of", + "sternocostal head of pectoralis major muscle": "part_of" + }, + "resolved_parents": { + "clavicular head of pectoralis major muscle": "UBERON:0002381", + "sternocostal head of pectoralis major muscle": "UBERON:0002381" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0003682.json b/bulk_ntr_workflow/outputs/definitions/uberon_0003682.json new file mode 100644 index 000000000..9f4baf295 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0003682.json @@ -0,0 +1,15 @@ +{ + "confirmed_matches": [ + { + "label": "musculus uvulae muscle", + "uberon_id": "UBERON:0010235", + "confidence": "high", + "uberon_definition": "The musculus uvulae (azygos uvulae) is a muscle of the soft palate. It arises from the posterior nasal spine of the palatine bones and from the palatine aponeurosis. It descends to be inserted into the uvula and functions to move and shape it. It is innervated by the pharyngeal branch of the vagus nerve via the pharyngeal plexus[WP].", + "wikipedia_summary": "The musculus uvulae (uvular muscle) is a small paired skeletal muscle of the soft palate that originates from the posterior nasal spine of the palatine bone and the palatine aponeurosis and inserts into the mucous membrane of the uvula, acting to shorten and broaden the uvula; innervated by the pharyngeal branch of the vagus nerve via the pharyngeal plexus.", + "note": "UBERON:0010235 'uvular muscle' has 'musculus uvulae muscle' as a RELATED synonym (Wikipedia:Musculus_uvulae) and xref FMA:46733. Same structure; existing UBERON term should be reused. Parent UBERON:0003682 palatal muscle already matches the source-supplied parent. Existing UBERON term already encodes has_muscle_origin (hard palate), has_muscle_insertion (palatine uvula, palatine aponeurosis), and innervated_by (pharyngeal branch of vagus nerve)." + } + ], + "xrefs": { + "musculus uvulae muscle": "Wikipedia:Musculus_uvulae|FMA:46733" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0003690.json b/bulk_ntr_workflow/outputs/definitions/uberon_0003690.json new file mode 100644 index 000000000..aeede4ecc --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0003690.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "internal abdominal oblique muscle", + "uberon_id": "UBERON:0005454", + "confidence": "high", + "uberon_definition": "The lateral abdominal wall muscle that is deep to the external oblique and superficial to the transversus.", + "wikipedia_summary": "The abdominal internal oblique muscle, also internal oblique muscle or interior oblique, is an abdominal muscle in the abdominal wall that lies below the external oblique muscle and just above the transverse abdominal muscle. It is broad and thin, and forms the intermediate layer of the lateral abdominal wall.", + "note": "Source label 'internal abdominal oblique muscle' is an existing RELATED synonym of UBERON:0005454 (primary label: 'abdominal internal oblique muscle'). FMA:13891. The input parent UBERON:0003690 ('fused sacrum') is clearly incorrect for a muscle term; the genuine UBERON parent is UBERON:0035032 (abdominal oblique muscle)." + } + ], + "xrefs": { + "internal abdominal oblique muscle": "FMA:13891|Wikipedia:Abdominal_internal_oblique_muscle" + }, + "unresolvable": [ + { + "label": "input parent UBERON:0003690", + "reason": "Source parent UBERON:0003690 resolves to 'fused sacrum' (a bone), which cannot be a parent of a muscle. This appears to be an upstream mapping error in the ASCTB-TEMP source data.", + "suggestion": "No action required — term already exists in UBERON as UBERON:0005454 and is auto-excluded from the template via confirmed_matches." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0005893.json b/bulk_ntr_workflow/outputs/definitions/uberon_0005893.json new file mode 100644 index 000000000..0b25cb5f3 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0005893.json @@ -0,0 +1,19 @@ +{ + "confirmed_matches": [ + { + "label": "frontal belly of occipitofrontalis muscle", + "uberon_id": "UBERON:0010952", + "confidence": "high", + "uberon_definition": "A belly of the occipitofrontalis muscle that is near the frontal bone.", + "wikipedia_summary": "The frontalis muscle (frontal belly of the occipitofrontalis) is a muscle that covers parts of the forehead; it has no bony attachments and inserts into the epicranial aponeurosis. It is innervated by the temporal branches of the facial nerve and raises the eyebrows.", + "note": "UBERON:0010952 'frontalis muscle belly' carries the exact synonym 'frontal belly of occipitofrontalis' (FMA:46757) and the related synonym 'frontal belly of occipitofrontalis muscle' (Wikipedia:Frontalis_muscle). Source parent UBERON:0005893 'leg bone' is clearly an erroneous parent assignment in the HRA input (likely a data alignment error) — the term itself is a well-established existing UBERON class. Exclude from template." + } + ], + "unresolvable": [ + { + "label": "frontal belly of occipitofrontalis muscle", + "reason": "Source parent UBERON:0005893 is 'leg bone' — clearly an incorrect parent for a facial muscle belly. Flag for curator review of the input row, but no action needed in template since the term is a confirmed existing match.", + "suggestion": "Curator: verify HRA source row; the term itself already exists as UBERON:0010952." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0006719.json b/bulk_ntr_workflow/outputs/definitions/uberon_0006719.json new file mode 100644 index 000000000..6ff9899bb --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0006719.json @@ -0,0 +1,26 @@ +{ + "definitions": { + "superior head of lateral pterygoid muscle": "A muscle head that constitutes the smaller, upper portion of the lateral pterygoid muscle, arising from the infratemporal surface of the greater wing of the sphenoid bone and inserting predominantly onto the articular disc and capsule of the temporomandibular joint; it acts mainly during closing and stabilises the disc during jaw movement." + }, + "xrefs": { + "superior head of lateral pterygoid muscle": "Wikipedia:Lateral_pterygoid_muscle" + }, + "def_xrefs_to_add": { + "superior head of lateral pterygoid muscle": "PMID:9656947|PMID:7798474" + }, + "leaf_template_rows": { + "superior head of lateral pterygoid muscle": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0006719", + "has_muscle_origin": "UBERON:0006721", + "has_muscle_insertion": "UBERON:0011319", + "innervated_by": "UBERON:0013647" + } + }, + "resolved_relationships": { + "superior head of lateral pterygoid muscle": "part_of" + }, + "resolved_parents": { + "superior head of lateral pterygoid muscle": "UBERON:0006719" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0010990.json b/bulk_ntr_workflow/outputs/definitions/uberon_0010990.json new file mode 100644 index 000000000..25b3782c5 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0010990.json @@ -0,0 +1,50 @@ +{ + "definitions": { + "multifidus cervicis muscle": "A skeletal muscle of the deep layer of the back, forming the cervical portion of the multifidus and part of the transversospinales muscle group. It arises from the superior articular processes of the lower cervical vertebrae (C4-C7) and ascends superomedially to insert into the spinous processes of vertebrae two to five segments above (C2-C5), acting in extension, ipsilateral lateral flexion and contralateral rotation of the cervical vertebral column.", + "multifidus lumborum muscle": "A skeletal muscle of the deep layer of the back, forming the lumbar portion of the multifidus and part of the transversospinales muscle group. It arises from the mammillary processes of the lumbar vertebrae and the posterior surface of the sacrum, and its fascicles ascend superomedially to insert into the spinous processes of vertebrae two to five segments above their origin, contributing to extension and segmental stabilisation of the lumbar vertebral column.", + "multifidus thoracis muscle": "A skeletal muscle of the deep layer of the back, forming the thoracic portion of the multifidus and part of the transversospinales muscle group. It arises from the transverse processes of the thoracic vertebrae and ascends superomedially to insert into the spinous processes of vertebrae two to five segments above its origin, producing extension, ipsilateral lateral flexion and contralateral rotation of the thoracic vertebral column." + }, + "xrefs": { + "multifidus cervicis muscle": "Wikipedia:Multifidus_muscle", + "multifidus lumborum muscle": "Wikipedia:Multifidus_muscle", + "multifidus thoracis muscle": "Wikipedia:Multifidus_muscle" + }, + "def_xrefs_to_add": { + "multifidus cervicis muscle": "PMID:15706328", + "multifidus lumborum muscle": "PMID:23915550|PMID:23915551", + "multifidus thoracis muscle": "PMID:23915550" + }, + "leaf_template_rows": { + "multifidus cervicis muscle": { + "is_a": "UBERON:0010990", + "part_of": "UBERON:0006072", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0001076", + "innervated_by": "UBERON:0006839" + }, + "multifidus lumborum muscle": { + "is_a": "UBERON:0010990", + "part_of": "UBERON:0006074", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0001076", + "innervated_by": "UBERON:0006839" + }, + "multifidus thoracis muscle": { + "is_a": "UBERON:0010990", + "part_of": "UBERON:0006073", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0001076", + "innervated_by": "UBERON:0006839" + } + }, + "resolved_relationships": { + "multifidus cervicis muscle": "is_a", + "multifidus lumborum muscle": "is_a", + "multifidus thoracis muscle": "is_a" + }, + "resolved_parents": { + "multifidus cervicis muscle": "UBERON:0010990", + "multifidus lumborum muscle": "UBERON:0010990", + "multifidus thoracis muscle": "UBERON:0010990" + } +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_0015173.json b/bulk_ntr_workflow/outputs/definitions/uberon_0015173.json new file mode 100644 index 000000000..7ec920dbb --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_0015173.json @@ -0,0 +1,39 @@ +{ + "definitions": { + "puboperineales muscle": "A muscle of the pelvis that arises from the inner surface of the pubic bone and inserts into the perineal body, forming part of the pubovisceral component of the levator ani muscle and contributing to support of the pelvic floor and elevation of the perineal body." + }, + "xrefs": { + "puboperineales muscle": "FMA:74028" + }, + "def_xrefs_to_add": { + "puboperineales muscle": "PMID:14990415" + }, + "leaf_template_rows": { + "puboperineales muscle": { + "is_a": "UBERON:0001325", + "part_of": "UBERON:0001326", + "has_muscle_origin": "UBERON:0001275", + "has_muscle_insertion": "UBERON:0006654" + } + }, + "resolved_relationships": { + "puboperineales muscle": "part_of" + }, + "resolved_parents": { + "puboperineales muscle": "UBERON:0001326" + }, + "name_corrections": [ + { + "label": "puboperineales muscle", + "suggested": "puboperinealis muscle", + "reason": "TA2 Latin form is 'musculus puboperinealis' (singular); 'puboperineales' is the plural Latin adjective form used inconsistently. The standard English label is 'puboperinealis muscle' or 'puboperineal muscle'. Keep source name as a synonym." + } + ], + "unresolvable": [ + { + "label": "puboperineales muscle", + "reason": "Source parent UBERON:0015173 ('helicine branch of uterine artery') is clearly a misalignment in the input data — it is an artery, not a muscle. Resolved to the anatomically correct parent levator ani muscle (UBERON:0001326) following the precedent of puborectalis (UBERON:0011512) and pubococcygeus (UBERON:0011528), which are also slips of the levator ani with the same is_a/part_of pattern.", + "suggestion": "Curator should ignore the source parent_id and use UBERON:0001326 (levator ani muscle) as part_of, UBERON:0001325 (muscle of pelvis) as is_a." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/uberon_8600052.json b/bulk_ntr_workflow/outputs/definitions/uberon_8600052.json new file mode 100644 index 000000000..267b64e43 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/uberon_8600052.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "puboanalis muscle": "A skeletal muscle of the pelvis that arises from the body of the pubis and descends to interdigitate with the longitudinal muscle of the anal canal, blending with fibres at the intersphincteric groove and perineal body. It forms the most medial component of the puborectalis sling of the levator ani and contributes to maintenance of the anorectal angle and faecal continence." + }, + "xrefs": { + "puboanalis muscle": "Wikipedia:Levator_ani" + }, + "def_xrefs_to_add": { + "puboanalis muscle": "PMID:21801920|PMID:18256862" + }, + "leaf_template_rows": { + "puboanalis muscle": { + "is_a": "UBERON:0001325", + "part_of": "UBERON:0001326", + "has_muscle_origin": "UBERON:0001275", + "has_muscle_insertion": "UBERON:0006654", + "innervated_by": "UBERON:0011390" + } + }, + "resolved_relationships": { + "puboanalis muscle": "part_of" + }, + "resolved_parents": { + "puboanalis muscle": "UBERON:0001326" + }, + "unresolvable": [ + { + "label": "puboanalis muscle", + "reason": "Source parent UBERON:8600052 not present in uberon-edit.obo (presumably a recently minted grouping class). Followed the precedent of sibling levator ani components (puborectalis UBERON:0011512, pubococcygeus UBERON:0011528, iliococcygeus UBERON:0011398) which all use is_a muscle of pelvis (UBERON:0001325) and part_of levator ani muscle (UBERON:0001326).", + "suggestion": "Curator: confirm whether UBERON:8600052 is intended as the parent and, if so, verify its placement in the hierarchy; otherwise leave is_a/part_of as written." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unknown.json b/bulk_ntr_workflow/outputs/definitions/unknown.json new file mode 100644 index 000000000..177218cfa --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unknown.json @@ -0,0 +1,19 @@ +{ + "confirmed_matches": [ + { + "label": "rectus capitus anterior muscle", + "uberon_id": "UBERON:0008453", + "confidence": "high", + "uberon_definition": "A muscle situated immediately behind the upper part of the Longus capitis that arises from the anterior surface of the lateral mass of the atlas, and from the root of its transverse process that inserts into the inferior surface of the basilar part of the occipital bone immediately in front of the foramen magnum.", + "wikipedia_summary": "The rectus capitis anterior is a small muscle of the anterior vertebral group, situated immediately behind the upper part of the longus capitis; arises from the anterior surface of the lateral mass of the atlas and inserts into the inferior surface of the basilar part of the occipital bone, acting in flexion of the head at the atlanto-occipital joint.", + "note": "Source label 'rectus capitus anterior muscle' is an alternate spelling (capitus vs capitis) and is explicitly listed as a RELATED synonym on UBERON:0008453. FMA:46312, Wikipedia:Rectus_capitis_anterior_muscle. Excluded from template." + } + ], + "name_corrections": [ + { + "label": "rectus capitus anterior muscle", + "suggested": "rectus capitis anterior muscle", + "reason": "Standard anatomical Latin is 'capitis' (genitive of caput), not 'capitus'. The source variant is already captured as a RELATED synonym on UBERON:0008453." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_intertransversarii_laterales_lumborum.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_intertransversarii_laterales_lumborum.json new file mode 100644 index 000000000..f8367764b --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_intertransversarii_laterales_lumborum.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "ventral part of intertransversarii laterales lumborum muscle": "A skeletal muscle that is the anterior (ventral) division of the lateral lumbar intertransverse muscles, passing between the transverse processes of contiguous lumbar vertebrae in the lower back. Together with the dorsal part, it stabilises adjacent lumbar vertebrae and contributes to ipsilateral lateral flexion of the trunk; it is innervated by the ventral (anterior) rami of the lumbar spinal nerves." + }, + "xrefs": { + "ventral part of intertransversarii laterales lumborum muscle": "Wikipedia:Intertransversarii" + }, + "def_xrefs_to_add": { + "ventral part of intertransversarii laterales lumborum muscle": "PMID:6226119|PMID:7076562" + }, + "leaf_template_rows": { + "ventral part of intertransversarii laterales lumborum muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0008242", + "has_muscle_origin": "UBERON:0018146", + "has_muscle_insertion": "UBERON:0018146", + "innervated_by": "UBERON:0009624" + } + }, + "resolved_relationships": { + "ventral part of intertransversarii laterales lumborum muscle": "part_of" + }, + "resolved_parents": { + "ventral part of intertransversarii laterales lumborum muscle": "UBERON:0008242" + }, + "unresolvable": [ + { + "label": "intertransversarii laterales lumborum muscle (source parent)", + "reason": "The source-assigned parent 'intertransversarii laterales lumborum muscle' is not present in UBERON. OLS4 returns no UBERON term for this label or for FMA:32544 (intertransversarii laterales lumborum). The closest UBERON terms are UBERON:3010664 / UBERON:3010667 (amphibian m. intertransversarius capitis sup./inf., not equivalent) and UBERON:0008242 (lower back muscle), which is a broader regional grouping.", + "suggestion": "As an interim solution this term has been placed part_of UBERON:0008242 (lower back muscle) with genus UBERON:0014892 (skeletal muscle organ, vertebrate). Curator should consider creating the parent muscle 'intertransversarii laterales lumborum (muscle)' (FMA:32544) as a sibling NTR and then re-parenting this ventral part as part_of that new term. A matching 'dorsal part of intertransversarii laterales lumborum muscle' (FMA:32546) will also be needed." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_levator_costarum_muscle.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_levator_costarum_muscle.json new file mode 100644 index 000000000..0e41b6de5 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_levator_costarum_muscle.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "levatores costarum longi of levator costarum muscle": "A muscle fasciculus that constitutes the longer subdivision of the four lower levatores costarum, arising from the tip of the transverse process of a thoracic vertebra (typically T8-T11) and passing obliquely downward and laterally to insert on the outer surface of the second rib below its vertebra of origin, between the tubercle and the angle." + }, + "xrefs": { + "levatores costarum longi of levator costarum muscle": "Wikipedia:Levatores_costarum_muscles" + }, + "def_xrefs_to_add": { + "levatores costarum longi of levator costarum muscle": "PMID:13129167" + }, + "leaf_template_rows": { + "levatores costarum longi of levator costarum muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:8410070", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0002228", + "innervated_by": "UBERON:0006839" + } + }, + "resolved_relationships": { + "levatores costarum longi of levator costarum muscle": "part_of" + }, + "resolved_parents": { + "levatores costarum longi of levator costarum muscle": "UBERON:8410070" + }, + "unresolvable": [ + { + "label": "levatores costarum longi of levator costarum muscle", + "reason": "Parent 'levator costarum muscle' resolves to UBERON:8410070 (levator costarum). The source label suggests these are a named sub-component (the long fasciculi of the four lower levatores costarum). UBERON has no specific class for this sub-component, but the parent UBERON:8410070 itself already covers the levatores costarum collectively (its definition explicitly references both 'levatores costarum breves' and 'levatores costarum longi' as the two fasciculi of each muscle).", + "suggestion": "Curator decision needed: (a) accept this NTR as a part_of subdivision of UBERON:8410070 with genus 'skeletal muscle organ, vertebrate' (UBERON:0014892), as encoded in leaf_template_rows; OR (b) drop the NTR and instead add 'levatores costarum longi' as an EXACT synonym (with a clarifying scope) on UBERON:8410070, since the parent term's textual definition already enumerates the longi/breves fasciculi. Option (b) is more parsimonious if HRA only needs name-level findability. Option (a) is preferred if the longi fasciculus must be addressable as a distinct entity (e.g. for downstream attachment/innervation annotation). Innervation set to dorsal ramus of spinal nerve (UBERON:0006839) following Morrison 1953 (PMID:13129167)." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_meningohypophyseal_artery.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_meningohypophyseal_artery.json new file mode 100644 index 000000000..f700153c1 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_meningohypophyseal_artery.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "dorsal part of intertransversarii laterales lumborum muscle": "A small skeletal back muscle that originates from the accessory process of one lumbar vertebra and inserts onto the transverse process of the adjacent (next inferior) lumbar vertebra, forming the posterior (dorsal) component of the lateral intertransverse muscles of the lumbar region; it contributes to lateral flexion and segmental stabilisation of the lumbar vertebral column." + }, + "xrefs": { + "dorsal part of intertransversarii laterales lumborum muscle": "Wikipedia:Intertransversarii" + }, + "def_xrefs_to_add": { + "dorsal part of intertransversarii laterales lumborum muscle": "ISBN:9780323393225" + }, + "leaf_template_rows": { + "dorsal part of intertransversarii laterales lumborum muscle": { + "is_a": "UBERON:0001630", + "part_of": "UBERON:0001137", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0001077", + "innervated_by": "UBERON:0006839" + } + }, + "resolved_relationships": { + "dorsal part of intertransversarii laterales lumborum muscle": "part_of" + }, + "resolved_parents": { + "dorsal part of intertransversarii laterales lumborum muscle": "UBERON:0001137" + }, + "unresolvable": [ + { + "label": "dorsal part of intertransversarii laterales lumborum muscle", + "reason": "Source-supplied parent label 'meningohypophyseal artery' is wrong-domain (a cranial artery cannot parent a lumbar back muscle) and is clearly a data-entry error in the input. The parent muscle 'intertransversarii laterales lumborum' (FMA:32576 / FMA:32577) and the higher class 'intertransversarii lumborum' do not yet exist in UBERON, so no exact named-muscle parent is available; the dorsal part has been placed under genus UBERON:0001630 (muscle organ) and part_of UBERON:0001137 (dorsum/back) by analogy with other deep back muscles such as longissimus, spinalis, and rotator muscle of the vertebral column. The bone-landmark 'accessory process of lumbar vertebra' is not in UBERON, so the more general UBERON:0001077 (transverse process of vertebra) is used for has_muscle_origin (the accessory process is a small projection on the posterior aspect of the transverse process region).", + "suggestion": "Curator should: (1) consider adding parent terms 'intertransversarii lumborum muscle group' and 'intertransversarii laterales lumborum muscle' to UBERON (FMA:32576, FMA:32577) so this dorsal part can be made part_of its true named-muscle parent; (2) optionally add 'accessory process of lumbar vertebra' (FMA:34047) for a more precise has_muscle_origin; (3) consider whether a 'muscle of vertebral column' is_a (UBERON:0004518) is preferable to the generic muscle organ once the parent muscle exists." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_neuromeningeal_trunk.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_neuromeningeal_trunk.json new file mode 100644 index 000000000..59a8747f7 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_neuromeningeal_trunk.json @@ -0,0 +1,22 @@ +{ + "confirmed_matches": [ + { + "label": "occipital belly of occipitofrontalis muscle", + "uberon_id": "UBERON:0010947", + "confidence": "high", + "uberon_definition": "A belly of the occipitofrontalis muscle that is near the occipital bone.", + "wikipedia_summary": "The occipitalis muscle (occipital belly of the occipitofrontalis) is a thin, quadrilateral muscle attached to the highest nuchal lines of the occipital bone and the mastoid part of the temporal bone, inserting into the epicranial aponeurosis; it draws back the scalp and is innervated by the posterior auricular branch of the facial nerve.", + "note": "UBERON:0010947 'occipitalis' carries the EXACT synonym 'occipital belly of occipitofrontalis' (FMA:46758) and 'occipital part of occipitofrontalis'. Same FMA ID confirms identity. The source-supplied parent 'neuromeningeal trunk' is a wrong-domain (nerve trunk) label; the correct parent context is UBERON:0010946 occipitofrontalis muscle (the term already has is_a UBERON:0010938 muscle belly and part_of UBERON:0010946)." + } + ], + "xrefs": { + "occipital belly of occipitofrontalis muscle": "FMA:46758|Wikipedia:Occipitalis_muscle" + }, + "unresolvable": [ + { + "label": "source parent 'neuromeningeal trunk'", + "reason": "Wrong-domain parent label supplied by source. 'Neuromeningeal trunk' refers to a nerve trunk (a branch arrangement of the glossopharyngeal/vagus or ascending pharyngeal artery's neuromeningeal trunk), not to any muscle structure. It cannot serve as a parent for a muscle belly.", + "suggestion": "Discard the source parent label. The child term 'occipital belly of occipitofrontalis muscle' is already represented as UBERON:0010947 (occipitalis), with is_a UBERON:0010938 (muscle belly) and part_of UBERON:0010946 (occipitofrontalis muscle). Exclude this row from the NTR template; add 'occipital belly of occipitofrontalis muscle' as an EXACT synonym on UBERON:0010947 if not already exhaustively covered (current EXACT synonym is 'occipital belly of occipitofrontalis' — adding the trailing 'muscle' variant may be useful)." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_respiratory_diaphragm_muscle.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_respiratory_diaphragm_muscle.json new file mode 100644 index 000000000..065509964 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_respiratory_diaphragm_muscle.json @@ -0,0 +1,40 @@ +{ + "definitions": { + "sternal part of respiratory diaphragm muscle": "An organ subunit of the diaphragm consisting of two small muscular slips that arise from the posterior aspect of the xiphoid process of the sternum and insert into the anterior margin of the central tendon, contributing the anterior portion of the diaphragmatic musculature." + }, + "xrefs": { + "sternal part of respiratory diaphragm muscle": "FMA:58278" + }, + "def_xrefs_to_add": { + "sternal part of respiratory diaphragm muscle": "PMID:23586979" + }, + "leaf_template_rows": { + "sternal part of respiratory diaphragm muscle": { + "is_a": "UBERON:0000063", + "part_of": "UBERON:0001103", + "has_muscle_origin": "UBERON:0002207", + "has_muscle_insertion": "UBERON:0006670", + "innervated_by": "UBERON:0001884" + } + }, + "resolved_relationships": { + "sternal part of respiratory diaphragm muscle": "part_of" + }, + "resolved_parents": { + "sternal part of respiratory diaphragm muscle": "UBERON:0001103" + }, + "name_corrections": [ + { + "label": "sternal part of respiratory diaphragm muscle", + "suggested": "sternal part of diaphragm", + "reason": "UBERON uses 'diaphragm' (UBERON:0001103) as the standard label; FMA and TA2 use 'sternal part of diaphragm' (FMA:58278, 'pars sternalis diaphragmatis'). The source 'respiratory diaphragm muscle' phrasing is non-standard. Keep source name as RELATED synonym." + } + ], + "unresolvable": [ + { + "label": "sternal part of respiratory diaphragm muscle", + "reason": "Source parent label 'respiratory diaphragm muscle' has no exact UBERON match but maps to UBERON:0001103 (diaphragm) which has synonym 'diaphragm muscle' (BTO:0000341).", + "suggestion": "Resolved to UBERON:0001103 (diaphragm). Precedent: sibling term 'costal diaphragm' (UBERON:0035831, FMA:58277) uses is_a UBERON:0000063 (organ subunit) + part_of UBERON:0001103. Same pattern applied here." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_segmental_back_muscle.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_segmental_back_muscle.json new file mode 100644 index 000000000..cf930a9a3 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_segmental_back_muscle.json @@ -0,0 +1,70 @@ +{ + "definitions": { + "anterior cervical intertransversarii muscle": "A skeletal muscle organ that is one of a paired series of short segmental muscles connecting the anterior tubercles of adjacent cervical vertebrae, lying anterior to the ventral rami of the cervical spinal nerves and acting to bend the cervical spine laterally.", + "intertransversarii laterales lumborum muscle": "A skeletal muscle organ that is one of a paired series of short segmental muscles connecting the transverse processes of adjacent lumbar vertebrae along their lateral aspect, innervated by ventral rami of the lumbar spinal nerves and acting to flex the lumbar spine laterally.", + "medial lumbar intertransversarii muscle": "A skeletal muscle organ that is one of a paired series of short segmental muscles passing from the accessory process of one lumbar vertebra to the mammillary process of the vertebra below, innervated by dorsal rami of the lumbar spinal nerves and acting to stabilise and laterally flex the lumbar spine.", + "medial posterior cervical intertransversarii muscle": "A skeletal muscle organ that is the medial part of the posterior cervical intertransversarius, lying medial to the dorsal ramus of the cervical spinal nerve which pierces it, connecting the posterior tubercles of adjacent cervical vertebrae and acting to laterally flex the cervical spine.", + "thoracic intertransversarii muscle": "A skeletal muscle organ that is one of a series of small segmental muscles, typically present only between the lower thoracic vertebrae and between the last thoracic and first lumbar vertebra, connecting adjacent transverse processes and innervated by the dorsal rami of the thoracic spinal nerves." + }, + "xrefs": { + "anterior cervical intertransversarii muscle": "Wikipedia:Intertransversarii", + "intertransversarii laterales lumborum muscle": "Wikipedia:Intertransversarii", + "medial lumbar intertransversarii muscle": "Wikipedia:Intertransversarii", + "medial posterior cervical intertransversarii muscle": "Wikipedia:Intertransversarii", + "thoracic intertransversarii muscle": "Wikipedia:Intertransversarii" + }, + "def_xrefs_to_add": { + "anterior cervical intertransversarii muscle": "PMID:7076562", + "intertransversarii laterales lumborum muscle": "PMID:7076562", + "medial lumbar intertransversarii muscle": "PMID:7076562", + "medial posterior cervical intertransversarii muscle": "PMID:7076562", + "thoracic intertransversarii muscle": "PMID:7076562" + }, + "leaf_template_rows": { + "anterior cervical intertransversarii muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0006072", + "has_muscle_origin": "UBERON:0002413", + "has_muscle_insertion": "UBERON:0002413", + "innervated_by": "UBERON:0001780" + }, + "intertransversarii laterales lumborum muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0006074", + "innervated_by": "UBERON:0001780" + }, + "medial lumbar intertransversarii muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0006074", + "innervated_by": "UBERON:0001780" + }, + "medial posterior cervical intertransversarii muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0006072", + "has_muscle_origin": "UBERON:0002413", + "has_muscle_insertion": "UBERON:0002413", + "innervated_by": "UBERON:0001780" + }, + "thoracic intertransversarii muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:0006073", + "has_muscle_origin": "UBERON:0002347", + "has_muscle_insertion": "UBERON:0002347", + "innervated_by": "UBERON:0001780" + } + }, + "resolved_parents": { + "anterior cervical intertransversarii muscle": "UBERON:0002324", + "intertransversarii laterales lumborum muscle": "UBERON:0002324", + "medial lumbar intertransversarii muscle": "UBERON:0002324", + "medial posterior cervical intertransversarii muscle": "UBERON:0002324", + "thoracic intertransversarii muscle": "UBERON:0002324" + }, + "unresolvable": [ + { + "label": "segmental back muscle (ASCTB-TEMP parent label)", + "reason": "No UBERON class for 'segmental back muscle' as a grouping; OLS4 search found no muscle-level intertransversarii classes in UBERON (only AAO-derived amphibian terms UBERON:3010664/3010667 for m. intertransversarius capitis). Used UBERON:0014892 (skeletal muscle organ, vertebrate) as genus and the specific vertebral-column region (UBERON:0006072/0006073/0006074) as part_of differentiator, with UBERON:0002324 'muscle of back' retained in resolved_parents as the recommended fallback structural parent.", + "suggestion": "Curator may add a grouping class 'segmental back muscle' (a subclass of UBERON:0002324 muscle of back, has_part some intertransversarius/interspinalis/rotator) in a future iteration; not required for these leaf terms." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_spinotransversales_muscle.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_spinotransversales_muscle.json new file mode 100644 index 000000000..49e54af78 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_spinotransversales_muscle.json @@ -0,0 +1,19 @@ +{ + "confirmed_matches": [ + { + "label": "splenius capitus muscle", + "uberon_id": "UBERON:0000711", + "confidence": "high", + "uberon_definition": "A muscle that arises from the lower half of the ligamentum nuchae, from the spinous process of the seventh cervical vertebra, and from the spinous processes of the upper three or four thoracic vertebrae and inserts the mastoid process of the temporal bone, and into the rough surface on the occipital bone just below the lateral third of the superior nuchal line.", + "wikipedia_summary": "The splenius capitis is a broad, strap-like muscle in the back of the neck. It pulls on the base of the skull from the vertebrae in the neck and upper thorax. It is involved in movements such as shaking and nodding the head.", + "note": "Source label 'splenius capitus muscle' is a misspelling of 'splenius capitis'. UBERON:0000711 already has 'splenius capitis muscle' as an EXACT synonym (xref Wikipedia:Splenius_capitis_muscle, FMA:22653). Parent of the source group ('spinotransversales muscle') was previously resolved to UBERON:0002252 splenius, which is the is_a parent of UBERON:0000711 — consistent with this match." + } + ], + "name_corrections": [ + { + "label": "splenius capitus muscle", + "suggested": "splenius capitis", + "reason": "'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical nomenclature (TA2, FMA:22653) uses 'splenius capitis'. The existing UBERON:0000711 already carries 'splenius capitis muscle' as an EXACT synonym. Source label should be treated as a typographical variant; no new term required." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_submucosal_artery_of_colon.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_submucosal_artery_of_colon.json new file mode 100644 index 000000000..591efe6ab --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_submucosal_artery_of_colon.json @@ -0,0 +1,26 @@ +{ + "confirmed_matches": [ + { + "label": "rectus capitius posterior minor muscle", + "uberon_id": "UBERON:0008455", + "confidence": "high", + "uberon_definition": "A muscle that arise from the tubercle on the posterior arch of the and is inserted into the medial part of the inferior nuchal line of the occipital bone and the surface between it and the foramen magnum, and also takes some attachment to the spinal dura.", + "wikipedia_summary": "The rectus capitis posterior minor is a small muscle of the suboccipital region; it arises from the tubercle on the posterior arch of the atlas (C1) and inserts on the medial inferior nuchal line of the occipital bone; innervated by the suboccipital nerve (dorsal ramus of C1); part of the suboccipital triangle group; extends the head at the atlanto-occipital joint.", + "match_evidence": "UBERON:0008455 'rectus capitis posterior minor' already lists 'rectus capitus posterior minor muscle' and 'rectus capitus posterior minor' as RELATED synonyms (Wikipedia:Rectus_capitis_posterior_minor_muscle). The input label is a typo variant ('capitius'/'capitus' for 'capitis') of the same anatomical structure. Confirmed match — exclude from template." + } + ], + "name_corrections": [ + { + "label": "rectus capitius posterior minor muscle", + "suggested": "rectus capitis posterior minor", + "reason": "Input contains a misspelling: 'capitius' is a typo for 'capitis' (genitive of Latin caput, head). The correctly spelled term already exists in UBERON as UBERON:0008455. The variant 'rectus capitus posterior minor muscle' is already registered there as a RELATED synonym; the input form 'rectus capitius posterior minor muscle' could also be added as an additional misspelling synonym if desired." + } + ], + "unresolvable": [ + { + "label": "rectus capitius posterior minor muscle", + "reason": "Input file was named 'unresolvable_submucosal_artery_of_colon.json' and listed parent_id UNRESOLVABLE:'submucosal artery of colon' for both is_a and part_of. That parent is wrong-domain (a colonic artery) for a suboccipital skeletal muscle and appears to be a pipeline mislabel.", + "suggestion": "Disregard the bogus 'submucosal artery of colon' parent. The term itself is a confirmed match to UBERON:0008455 (rectus capitis posterior minor); no new term is needed. Had a new term been required, the correct parents would have been: is_a UBERON:0004518 (muscle of vertebral column) and part_of UBERON:0000974 (neck), mirroring the other rectus capitis muscles." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_supraperiosteal_arteriole.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_supraperiosteal_arteriole.json new file mode 100644 index 000000000..485495cf7 --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_supraperiosteal_arteriole.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "inferior head of lateral pterygoid muscle": "A muscle head that is the larger, lower division of the lateral pterygoid muscle, arising from the lateral surface of the lateral pterygoid plate of the sphenoid bone and inserting onto the pterygoid fovea on the neck of the mandibular condyle; it acts on the inferior compartment of the temporomandibular joint to depress, protrude, and laterally deviate the mandible." + }, + "xrefs": { + "inferior head of lateral pterygoid muscle": "Wikipedia:Lateral_pterygoid_muscle" + }, + "def_xrefs_to_add": { + "inferior head of lateral pterygoid muscle": "PMID:15104127|PMID:12446184" + }, + "leaf_template_rows": { + "inferior head of lateral pterygoid muscle": { + "is_a": "UBERON:0011906", + "part_of": "UBERON:0006719", + "has_muscle_origin": "UBERON:0004649", + "has_muscle_insertion": "UBERON:0004657", + "innervated_by": "UBERON:0013647" + } + }, + "resolved_relationships": { + "inferior head of lateral pterygoid muscle": "part_of" + }, + "resolved_parents": { + "inferior head of lateral pterygoid muscle": "UBERON:0006719" + }, + "unresolvable": [ + { + "label": "inferior head of lateral pterygoid muscle", + "reason": "Source parent label 'supraperiosteal arteriole' is wrong-domain (a vascular structure) for this masticatory muscle head; the parent was overridden based on the child term itself.", + "suggestion": "Use UBERON:0011906 (muscle head) as genus and UBERON:0006719 (lateral pterygoid muscle) as part_of; this mirrors the UBERON pattern for UBERON:0007168 (long head of biceps brachii) and similar muscle-head terms." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/definitions/unresolvable_thoracic_wall_muscle.json b/bulk_ntr_workflow/outputs/definitions/unresolvable_thoracic_wall_muscle.json new file mode 100644 index 000000000..df19708cf --- /dev/null +++ b/bulk_ntr_workflow/outputs/definitions/unresolvable_thoracic_wall_muscle.json @@ -0,0 +1,33 @@ +{ + "definitions": { + "levatores costarum breves of levator costarum muscle": "Short skeletal muscle fasciculi of the levator costarum muscle that arise from the tips of the transverse processes of the seventh cervical and upper eleven thoracic vertebrae and insert obliquely inferolaterally onto the external aspect of the superior border of the rib immediately below their origin, between the tubercle and the angle, elevating the ribs during forceful inspiration." + }, + "xrefs": { + "levatores costarum breves of levator costarum muscle": "Wikipedia:Levatores_costarum_muscles|FMA:71437" + }, + "def_xrefs_to_add": { + "levatores costarum breves of levator costarum muscle": "PMID:4972578|PMID:3630603" + }, + "leaf_template_rows": { + "levatores costarum breves of levator costarum muscle": { + "is_a": "UBERON:0014892", + "part_of": "UBERON:8410070", + "has_muscle_origin": "UBERON:0001077", + "has_muscle_insertion": "UBERON:0002228", + "innervated_by": "UBERON:0006839" + } + }, + "resolved_relationships": { + "levatores costarum breves of levator costarum muscle": "part_of" + }, + "resolved_parents": { + "levatores costarum breves of levator costarum muscle": "UBERON:8410070" + }, + "unresolvable": [ + { + "label": "parent: thoracic wall muscle", + "reason": "Source-assigned grouping parent 'thoracic wall muscle' has no exact UBERON equivalent. The closest grouping classes in UBERON are UBERON:0002426 (chest muscle) and UBERON:0016403 (thoracic wall, anatomical region). However, the specific parent muscle 'levator costarum' (UBERON:8410070) already exists in UBERON and is itself is_a UBERON:0002426 ! chest muscle, so the chain is preserved.", + "suggestion": "Use part_of UBERON:8410070 (levator costarum) as the immediate containing structure; is_a UBERON:0014892 (skeletal muscle organ, vertebrate) supplies the genus class. The thoracic-wall-muscle grouping is implicit via the parent muscle's own is_a chain. No new grouping term is required." + } + ] +} diff --git a/bulk_ntr_workflow/outputs/template_groups_initial.tsv b/bulk_ntr_workflow/outputs/template_groups_initial.tsv new file mode 100644 index 000000000..caa71451f --- /dev/null +++ b/bulk_ntr_workflow/outputs/template_groups_initial.tsv @@ -0,0 +1,22 @@ +ID LABEL Definition def_xref genus location In_subset Date Contributor Present_in_taxon Wikipedia_image xref +ID LABEL A IAO:0000115 >A oboInOwl:hasDbXref SPLIT=| EC % EC BFO:0000050 some % AI oboInOwl:inSubset AT dcterms:date^^xsd:dateTime AI dcterms:contributor AI RO:0002175 A foaf:depiction A oboInOwl:hasDbXref SPLIT=| +http://purl.obolibrary.org/obo/UBERON_9900002 anterior vertebral muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_anterior-vertebral-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900007 circular pharyngeal muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_circular-pharyngeal-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900011 dorsum of foot muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_dorsum-of-foot-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900013 external ear muscle [PENDING] https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_external-ear-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900016 hypothenar hand muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_hypothenar-hand-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900020 intermediate back muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intermediate-back-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900024 intrinsic eye muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intrinsic-eye-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900027 lateral vertebral muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-vertebral-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900032 longitudinal pharyngeal muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_longitudinal-pharyngeal-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900036 middle ear muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_middle-ear-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900040 muscle of facial expression [PENDING] https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_muscle-of-facial-expression http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900044 palmar interosseous muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_palmar-interosseous-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900045 pelvic floor muscle [PENDING] https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_pelvic-floor-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900046 plantar interosseous muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_plantar-interosseous-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900047 posterior abdominal wall muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_posterior-abdominal-wall-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900055 segmental back muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900056 sole of foot muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sole-of-foot-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900059 spinotransversales muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900063 superficial back muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superficial-back-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900068 thoracic wall muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 diff --git a/bulk_ntr_workflow/outputs/template_muscle_initial.tsv b/bulk_ntr_workflow/outputs/template_muscle_initial.tsv new file mode 100644 index 000000000..df03486bb --- /dev/null +++ b/bulk_ntr_workflow/outputs/template_muscle_initial.tsv @@ -0,0 +1,57 @@ +ID LABEL Definition def_xref is_a part_of develops_from has_muscle_origin has_muscle_insertion innervated_by In_subset Date Contributor Present_in_taxon Wikipedia_image xref +ID LABEL A IAO:0000115 >A oboInOwl:hasDbXref SPLIT=| SC % SC BFO:0000050 some % SC RO:0002202 some % SC RO:0002372 some % SC RO:0002373 some % SC RO:0002005 some % AI oboInOwl:inSubset AT dcterms:date^^xsd:dateTime AI dcterms:contributor AI RO:0002175 A foaf:depiction A oboInOwl:hasDbXref SPLIT=| +http://purl.obolibrary.org/obo/UBERON_9900001 anterior cervical intertransversarii muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle UNRESOLVABLE:segmental back muscle UNRESOLVABLE:segmental back muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900003 articularis genu muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle NEEDS_MAPPING:FMA:22424 NEEDS_MAPPING:FMA:22424 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900004 aryepiglottic part of oblique arytenoid muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_aryepiglottic-part-of-oblique-arytenoid-muscle NEEDS_MAPPING:FMA:46583 NEEDS_MAPPING:FMA:46583 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900005 ceratoglossus of hyoglossus muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_ceratoglossus-of-hyoglossus-muscle INFER:UBERON:0001572 INFER:UBERON:0001572 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900006 chondroglossus of hyoglossus muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_chondroglossus-of-hyoglossus-muscle INFER:UBERON:0001572 INFER:UBERON:0001572 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900008 clavicular head of pectoralis major muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_clavicular-head-of-pectoralis-major-muscle INFER:UBERON:0002381 INFER:UBERON:0002381 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900009 costal part of respiratory diaphragm muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_costal-part-of-respiratory-diaphragm-muscle INFER:UBERON:0000975 INFER:UBERON:0000975 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900010 dorsal part of intertransversarii laterales lumborum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle UNRESOLVABLE:meningohypophyseal artery UNRESOLVABLE:meningohypophyseal artery http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900012 external anal sphincter muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle INFER:UBERON:0001876 INFER:UBERON:0001876 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900014 frontal belly of occipitofrontalis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_frontal-belly-of-occipitofrontalis-muscle INFER:UBERON:0005893 INFER:UBERON:0005893 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900015 hamstring portion of adductor magnus muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_hamstring-portion-of-adductor-magnus-muscle INFER:UBERON:0001092 INFER:UBERON:0001092 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900017 iliocostalis cervicalis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_iliocostalis-cervicalis-muscle INFER:UBERON:0001272 INFER:UBERON:0001272 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900018 inferior head of lateral pterygoid muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle UNRESOLVABLE:supraperiosteal arteriole UNRESOLVABLE:supraperiosteal arteriole http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900019 inferior longitudinal lingual muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-longitudinal-lingual-muscle INFER:UBERON:0001194 INFER:UBERON:0001194 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900021 internal abdominal oblique muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_internal-abdominal-oblique-muscle INFER:UBERON:0003690 INFER:UBERON:0003690 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900022 interspinales cervicalis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_interspinales-cervicalis-muscle INFER:UBERON:0000979 INFER:UBERON:0000979 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900023 intertransversarii laterales lumborum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle UNRESOLVABLE:segmental back muscle UNRESOLVABLE:segmental back muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900025 lateral compartmet of leg muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-compartmet-of-leg-muscle INFER:UBERON:0001537 INFER:UBERON:0001537 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900026 lateral posterior cervical intertransversarii muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-posterior-cervical-intertransversarii-muscle INFER:UBERON:0001546 INFER:UBERON:0001546 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900028 left crus of lumbar part of respiratory diaphragm muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_left-crus-of-lumbar-part-of-respiratory-diaphragm-muscle NEEDS_MAPPING:FMA:323951 NEEDS_MAPPING:FMA:323951 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900029 levator costarum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle INFER:UBERON:0001677 INFER:UBERON:0001677 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900030 levatores costarum breves of levator costarum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle UNRESOLVABLE:thoracic wall muscle UNRESOLVABLE:thoracic wall muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900031 levatores costarum longi of levator costarum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle UNRESOLVABLE:levator costarum muscle UNRESOLVABLE:levator costarum muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900033 longus capitus muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_longus-capitus-muscle INFER:UBERON:0002377 INFER:UBERON:0002377 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900034 medial lumbar intertransversarii muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle UNRESOLVABLE:segmental back muscle UNRESOLVABLE:segmental back muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900035 medial posterior cervical intertransversarii muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle UNRESOLVABLE:segmental back muscle UNRESOLVABLE:segmental back muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900037 multifidus cervicis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-cervicis-muscle INFER:UBERON:0010990 INFER:UBERON:0010990 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900038 multifidus lumborum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-lumborum-muscle INFER:UBERON:0010990 INFER:UBERON:0010990 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900039 multifidus thoracis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-thoracis-muscle INFER:UBERON:0010990 INFER:UBERON:0010990 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900041 musculus uvulae muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_musculus-uvulae-muscle INFER:UBERON:0003682 INFER:UBERON:0003682 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900042 occipital belly of occipitofrontalis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_occipital-belly-of-occipitofrontalis-muscle UNRESOLVABLE:neuromeningeal trunk UNRESOLVABLE:neuromeningeal trunk http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900043 opponens digiti minimi muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_opponens-digiti-minimi-muscle INFER:UBERON:0001624 INFER:UBERON:0001624 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900048 pteryopharyngeal part of superior pharyngeal constrictor muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_pteryopharyngeal-part-of-superior-pharyngeal-constrictor-muscle INFER:UBERON:0001272 INFER:UBERON:0001272 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900049 puboanalis muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_puboanalis-muscle INFER:UBERON:8600052 INFER:UBERON:8600052 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900050 puboperineales muscle [PENDING] https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_puboperineales-muscle INFER:UBERON:0015173 INFER:UBERON:0015173 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900051 rectus capitius posterior minor muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_rectus-capitius-posterior-minor-muscle UNRESOLVABLE:submucosal artery of colon UNRESOLVABLE:submucosal artery of colon http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900052 rectus capitus anterior muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_rectus-capitus-anterior-muscle UNKNOWN UNKNOWN http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900053 respiratory diaphragm muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle NEEDS_MAPPING:FMA:12252 NEEDS_MAPPING:FMA:12252 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900054 right crus of lumbar part of respiratory diaphragm muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_right-crus-of-lumbar-part-of-respiratory-diaphragm-muscle NEEDS_MAPPING:FMA:5841 NEEDS_MAPPING:FMA:5841 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900057 spermatic cord muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_spermatic-cord-muscle INFER:UBERON:0002378 INFER:UBERON:0002378 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900058 sphincter urethrae muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sphincter-urethrae-muscle INFER:UBERON:0002379 INFER:UBERON:0002379 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900060 splenius capitus muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_splenius-capitus-muscle UNRESOLVABLE:spinotransversales muscle UNRESOLVABLE:spinotransversales muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900061 sternal part of respiratory diaphragm muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle UNRESOLVABLE:respiratory diaphragm muscle UNRESOLVABLE:respiratory diaphragm muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900062 sternocostal head of pectoralis major muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternocostal-head-of-pectoralis-major-muscle INFER:UBERON:0002381 INFER:UBERON:0002381 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900064 superior head of lateral pterygoid muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superior-head-of-lateral-pterygoid-muscle INFER:UBERON:0006719 INFER:UBERON:0006719 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900065 superior longitudinal lingual muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superior-longitudinal-lingual-muscle INFER:UBERON:0001576 INFER:UBERON:0001576 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900066 tensor fascia latae muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tensor-fascia-latae-muscle INFER:UBERON:0002000 INFER:UBERON:0002000 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900067 thoracic intertransversarii muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle UNRESOLVABLE:segmental back muscle UNRESOLVABLE:segmental back muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900069 thyroepiglottic part of thyroarytenoid muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thyroepiglottic-part-of-thyroarytenoid-muscle NEEDS_MAPPING:FMA:46588 NEEDS_MAPPING:FMA:46588 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900070 thyropharyngeal part of inferior pharyngeal constrictor muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thyropharyngeal-part-of-inferior-pharyngeal-constrictor-muscle NEEDS_MAPPING:FMA:46623 NEEDS_MAPPING:FMA:46623 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900071 tibalis anterior muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tibalis-anterior-muscle NEEDS_MAPPING:FMA:22472 NEEDS_MAPPING:FMA:22472 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900072 tibalis posterior muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_tibalis-posterior-muscle NEEDS_MAPPING:FMA:22474 NEEDS_MAPPING:FMA:22474 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900073 transverse muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_transverse-muscle INFER:UBERON:0001576 INFER:UBERON:0001576 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900074 ventral part of intertransversarii laterales lumborum muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle UNRESOLVABLE:intertransversarii laterales lumborum muscle UNRESOLVABLE:intertransversarii laterales lumborum muscle http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900075 vertical muscle [PENDING] https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_vertical-muscle INFER:UBERON:0001576 INFER:UBERON:0001576 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 diff --git a/bulk_ntr_workflow/scripts/generate_template.py b/bulk_ntr_workflow/scripts/generate_template.py new file mode 100644 index 000000000..52b0e9373 --- /dev/null +++ b/bulk_ntr_workflow/scripts/generate_template.py @@ -0,0 +1,537 @@ +""" +Stage 1: Generate initial ROBOT template TSVs from HRA ASCTB unmapped terms. + +Each input row is pre-classified as a leaf or group term (linguistic rules) and routed +to the appropriate template: + - Leaf terms → standard template with SC (asserted is_a/part_of) + - Group terms → groups template with EC (equivalent class: genus + part_of some Y) + +Input: An xlsx file (default: hra_unmapped-asct-term-list-with-refs.xlsx at repo root) + OR a pre-exported CSV with the same columns as the 'as-temp terms' sheet. + Optionally filter to a specific ASCTB table (e.g. 'muscular-system'). + +Outputs (REPO_ROOT = two levels up from this script): + bulk_ntr_workflow/outputs/template_initial.tsv — leaf working template + bulk_ntr_workflow/outputs/template_groups_initial.tsv — groups working template + src/templates/.template.tsv — leaf final template + src/templates/-groups.template.tsv — groups final template + src/templates/-reports/input.tsv — filtered input rows + term_type + src/templates/-reports/errors.tsv — input problems + src/templates/-reports/candidates.tsv — pre-mapped existing terms + +Usage: + cd bulk_ntr_workflow + uv run --with openpyxl scripts/generate_template.py \\ + --input ../hra_unmapped-asct-term-list-with-refs.xlsx \\ + --table muscular-system \\ + --name hra-muscular \\ + --start-id 9900001 +""" + +import argparse +import csv +import re +import sys +from datetime import date +from pathlib import Path + +# bulk_ntr_workflow/scripts/ → bulk_ntr_workflow/ → repo root +NTR_ROOT = Path(__file__).resolve().parent.parent +REPO_ROOT = NTR_ROOT.parent + +WORK_DIR = NTR_ROOT / "outputs" +WORK_DIR.mkdir(parents=True, exist_ok=True) +WORK_TSV = WORK_DIR / "template_initial.tsv" # default leaf +WORK_GROUPS_TSV = WORK_DIR / "template_groups_initial.tsv" # groups +# System overlay working files: outputs/template__initial.tsv (created on demand) + +# ROBOT template column headers and directives — DEFAULT LEAF template (asserted SC) +# Phase 6: develops_from is OPTIONAL — empty cell ⇒ no axiom emitted by ROBOT +TEMPLATE_HEADERS = [ + "ID", "LABEL", "Definition", "def_xref", + "is_a", "part_of", "develops_from", + "In_subset", "Date", "Contributor", "Present_in_taxon", + "Wikipedia_image", "xref", +] +TEMPLATE_DIRECTIVES = [ + "ID", "LABEL", "A IAO:0000115", ">A oboInOwl:hasDbXref SPLIT=|", + "SC %", "SC BFO:0000050 some %", "SC RO:0002202 some %", + "AI oboInOwl:inSubset", "AT dcterms:date^^xsd:dateTime", + "AI dcterms:contributor", "AI RO:0002175", + "A foaf:depiction", "A oboInOwl:hasDbXref SPLIT=|", +] + +# Phase 7: MUSCLE LEAF template overlay — adds muscle-specific relations. +# RO IDs: has_muscle_origin=RO:0002372, has_muscle_insertion=RO:0002373, innervated_by=RO:0002005 +# Inserted between develops_from and In_subset (positions 7-9). +MUSCLE_TEMPLATE_HEADERS = TEMPLATE_HEADERS[:7] + [ + "has_muscle_origin", "has_muscle_insertion", "innervated_by", +] + TEMPLATE_HEADERS[7:] +MUSCLE_TEMPLATE_DIRECTIVES = TEMPLATE_DIRECTIVES[:7] + [ + "SC RO:0002372 some %", "SC RO:0002373 some %", "SC RO:0002005 some %", +] + TEMPLATE_DIRECTIVES[7:] + +# Map source-table value to a system overlay name. Unmapped tables → 'default'. +# Future overlays for skeleton, vasculature, nervous-system go here (see ROADMAP). +SYSTEM_OVERLAYS = { + "muscular-system": "muscle", +} + +# Per-overlay header/directive sets +OVERLAY_TEMPLATES = { + "default": (TEMPLATE_HEADERS, TEMPLATE_DIRECTIVES), + "muscle": (MUSCLE_TEMPLATE_HEADERS, MUSCLE_TEMPLATE_DIRECTIVES), +} + + +def classify_system(record: dict) -> str: + """Return the system overlay name for a row; 'default' if no overlay applies.""" + return SYSTEM_OVERLAYS.get(record.get("table", ""), "default") + + +def overlay_paths(overlay: str, name: str) -> tuple[Path, Path]: + """Return (working_tsv, final_tsv) paths for a given overlay name.""" + templates_dir = REPO_ROOT / "src" / "templates" + if overlay == "default": + work = WORK_DIR / "template_initial.tsv" + final = templates_dir / f"{name}.template.tsv" + else: + work = WORK_DIR / f"template_{overlay}_initial.tsv" + final = templates_dir / f"{name}-{overlay}.template.tsv" + return work, final + + +# ROBOT template — GROUPS template (equivalent class: genus + part_of some Y) +GROUPS_TEMPLATE_HEADERS = [ + "ID", "LABEL", "Definition", "def_xref", + "genus", "location", + "In_subset", "Date", "Contributor", "Present_in_taxon", + "Wikipedia_image", "xref", +] +GROUPS_TEMPLATE_DIRECTIVES = [ + "ID", "LABEL", "A IAO:0000115", ">A oboInOwl:hasDbXref SPLIT=|", + "EC %", "EC BFO:0000050 some %", + "AI oboInOwl:inSubset", "AT dcterms:date^^xsd:dateTime", + "AI dcterms:contributor", "AI RO:0002175", + "A foaf:depiction", "A oboInOwl:hasDbXref SPLIT=|", +] + +# Columns for input.tsv (mirrors the raw source columns + term_type pre-classification) +INPUT_HEADERS = [ + "table", "as_iri", "label", "uberon_id", + "parent_id", "parent_label", "references", "term_type", +] + +# Columns for errors.tsv +ERROR_HEADERS = ["label", "as_iri", "issue_type", "parent_id", "parent_label", "detail"] + +# Columns for candidates.tsv +CANDIDATE_HEADERS = ["label", "as_iri", "uberon_id", "note"] + +SUBSET_IRI = "http://purl.obolibrary.org/obo/uberon/core#added_by_HRA" +CREATION_DATE = f"{date.today().isoformat()}T00:00:00Z" +TAXON_IRI = "http://purl.obolibrary.org/obo/NCBITaxon_9606" + +ORCID_RE = re.compile(r'^https://orcid\.org/\d{4}-\d{4}-\d{4}-\d{3}[\dX]$') + +DEFAULT_START_ID = 9900001 + +UBERON_RE = re.compile(r'^UBERON:\d{7}$') +FMA_IRI_RE = re.compile(r'fma/fma(\d+)', re.IGNORECASE) + +# Linguistic patterns for grouping terms (collective classes, not specific named entities). +# When matched, the term is routed to the groups template (EquivalentClass form). +# Default if none match: "leaf" (asserted SC subclass). +GROUP_PATTERNS = [ + re.compile(r'\bmuscle of (?!the )', re.IGNORECASE), + re.compile(r'\b(pelvic floor|thoracic wall|abdominal wall|chest|chest wall) muscle\b', re.IGNORECASE), + re.compile(r'\b(dorsum|sole) of (foot|hand) muscle\b', re.IGNORECASE), + re.compile(r'\b(circular|longitudinal) pharyngeal muscle\b', re.IGNORECASE), + re.compile(r'\b(intrinsic|extrinsic) (eye|ear|tongue|hand|foot|laryngeal|lingual) muscle\b', re.IGNORECASE), + re.compile(r'\b(hypothenar|thenar) hand muscle\b', re.IGNORECASE), + re.compile(r'\b(palmar|plantar) interosseous muscle\b', re.IGNORECASE), + re.compile(r'\b(superficial|intermediate|deep) back muscle\b', re.IGNORECASE), + re.compile(r'\b(anterior|posterior|lateral|medial) vertebral muscle\b', re.IGNORECASE), + re.compile(r'\b(anterior|posterior|lateral|medial) compartment( of \w+)? muscle\b', re.IGNORECASE), + re.compile(r'\b(spinotransversales|segmental back|external ear|middle ear|cranial) muscle\b', re.IGNORECASE), + re.compile(r'\b(posterior|anterior|lateral|medial) abdominal wall muscle\b', re.IGNORECASE), + re.compile(r'\bmuscle of (facial expression|mastication)\b', re.IGNORECASE), +] + +# Subdivision patterns — head/belly/part/portion/crus/etc of a named muscle → leaf +LEAF_PART_PATTERNS = [ + re.compile(r'\b(head|belly|part|portion|crus|fascicle|layer|zone|lamina) of\b', re.IGNORECASE), +] + + +def classify_term_type(label: str) -> str: + """Classify a term label as 'group' or 'leaf' using linguistic rules. + + Default: 'leaf'. A term matching any LEAF_PART_PATTERN (e.g. 'X head of Y muscle') + is always 'leaf', even if a GROUP_PATTERN would otherwise match. Specific + subdivisions of a named structure trump grouping cues. + """ + if not label: + return "leaf" + for pat in LEAF_PART_PATTERNS: + if pat.search(label): + return "leaf" + for pat in GROUP_PATTERNS: + if pat.search(label): + return "group" + return "leaf" + + +# --------------------------------------------------------------------------- +# Input reading +# --------------------------------------------------------------------------- + +def read_xlsx(path: Path, table_filter: str | None) -> list[dict]: + try: + import openpyxl + except ImportError: + sys.exit("openpyxl not installed — run: uv run --with openpyxl ...") + + wb = openpyxl.load_workbook(str(path), read_only=True) + if "as-temp terms" not in wb.sheetnames: + sys.exit(f"Sheet 'as-temp terms' not found in {path}. Sheets: {wb.sheetnames}") + ws = wb["as-temp terms"] + rows = list(ws.iter_rows(values_only=True)) + if not rows: + sys.exit("Sheet is empty") + + raw_headers = [str(h).strip() if h else "" for h in rows[0]] + col = {h: i for i, h in enumerate(raw_headers)} + + def get(row, name, default=""): + idx = col.get(name) + if idx is None: + return default + v = row[idx] + return str(v).strip() if v is not None else default + + records = [] + for row in rows[1:]: + if not any(row): + continue + table = get(row, "tables") + if table_filter and table != table_filter: + continue + records.append({ + "table": table, + "iri": get(row, "as"), + "label": get(row, "as_label"), + "uberon_id": get(row, "UBERON ID"), + "parent_id": get(row, "parents_as"), + "parent_label": get(row, "parents_as_label"), + "references": get(row, "references"), + }) + return records + + +def read_csv(path: Path, table_filter: str | None) -> list[dict]: + records = [] + with open(path, newline="", encoding="utf-8") as f: + reader = csv.DictReader(f) + for row in reader: + table = row.get("tables", "").strip() + if table_filter and table != table_filter: + continue + records.append({ + "table": table, + "iri": row.get("as", "").strip(), + "label": row.get("as_label", "").strip(), + "uberon_id": row.get("UBERON ID", "").strip(), + "parent_id": row.get("parents_as", "").strip(), + "parent_label": row.get("parents_as_label", "").strip(), + "references": row.get("references", "").strip(), + }) + return records + + +# --------------------------------------------------------------------------- +# Parent ID classification +# --------------------------------------------------------------------------- + +def classify_parent(parent_id: str) -> str: + """Return 'uberon', 'fma', 'asctb_temp', or 'unknown'.""" + if UBERON_RE.match(parent_id): + return "uberon" + if FMA_IRI_RE.search(parent_id): + return "fma" + if "ASCTB-TEMP" in parent_id or "asctb-temp" in parent_id.lower(): + return "asctb_temp" + return "unknown" + + +def fma_id_from_iri(iri: str) -> str: + m = FMA_IRI_RE.search(iri) + return f"FMA:{m.group(1)}" if m else iri + + +# --------------------------------------------------------------------------- +# Reference formatting (comma-separated → pipe-separated) +# --------------------------------------------------------------------------- + +def format_refs(raw: str, asctb_iri: str) -> str: + parts = [r.strip() for r in raw.split(",") if r.strip()] + if asctb_iri and asctb_iri not in parts: + parts.append(asctb_iri) + return "|".join(parts) if parts else "" + + +# --------------------------------------------------------------------------- +# TSV helpers +# --------------------------------------------------------------------------- + +def write_tsv(path: Path, headers: list[str], rows: list[list]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(headers) + writer.writerows(rows) + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def resolve_contributor(contributor_arg: str | None) -> str: + """Return a validated ORCID IRI, prompting if not supplied.""" + if contributor_arg: + iri = contributor_arg.strip() + if not iri.startswith("https://orcid.org/"): + iri = f"https://orcid.org/{iri}" + if not ORCID_RE.match(iri): + sys.exit(f"Invalid ORCID format: {iri}\nExpected: https://orcid.org/XXXX-XXXX-XXXX-XXXX") + return iri + while True: + raw = input("Contributor ORCID (e.g. https://orcid.org/0000-0000-0000-0000): ").strip() + if not raw.startswith("https://orcid.org/"): + raw = f"https://orcid.org/{raw}" + if ORCID_RE.match(raw): + return raw + print(f" Invalid format, try again.") + + +def process(input_path: Path, table_filter: str | None, start_id: int, name: str, + contributor_iri: str, limit: int | None = None) -> None: + suffix = input_path.suffix.lower() + if suffix in (".xlsx", ".xlsm"): + records = read_xlsx(input_path, table_filter) + elif suffix in (".csv", ".tsv"): + records = read_csv(input_path, table_filter) + else: + sys.exit(f"Unsupported file type: {suffix}") + + if not records: + sys.exit("No records found (check --table filter)") + + if limit is not None: + records = records[:limit] + + # Output paths + templates_dir = REPO_ROOT / "src" / "templates" + reports_dir = templates_dir / f"{name}-reports" + final_groups_tsv = templates_dir / f"{name}-groups.template.tsv" + input_tsv = reports_dir / "input.tsv" + errors_tsv = reports_dir / "errors.tsv" + candidates_tsv = reports_dir / "candidates.tsv" + reports_dir.mkdir(parents=True, exist_ok=True) + + # Step 0: rows are partitioned by system overlay (default vs muscle vs ...). + # leaf_rows_by_overlay[overlay] holds the rows destined for that overlay's template. + leaf_rows_by_overlay: dict[str, list] = {} + group_rows = [] + error_rows = [] + candidate_rows = [] + input_rows = [] + counter = start_id + + for rec in records: + label = rec["label"] + iri = rec["iri"] + uberon_id = rec["uberon_id"] + parent_id = rec["parent_id"] + parent_lbl = rec["parent_label"] + refs = rec["references"] + + term_type = classify_term_type(label) if label else "leaf" + + # Save to input.tsv regardless of outcome (now includes term_type) + input_rows.append([rec["table"], iri, label, uberon_id, + parent_id, parent_lbl, refs, term_type]) + + if not label: + error_rows.append(["", iri, "missing_label", "", "", ""]) + continue + + # Already mapped — skip from template, log as candidate + if uberon_id and UBERON_RE.match(uberon_id): + candidate_rows.append([label, iri, uberon_id, "pre-assigned in input"]) + continue + + # Classify parent + parent_class = classify_parent(parent_id) if parent_id else "unknown" + + if parent_class == "uberon": + # Embed parent ID; subagent resolves is_a vs part_of + is_a_val = f"INFER:{parent_id}" + part_of_val = f"INFER:{parent_id}" + elif parent_class == "fma": + fma_curie = fma_id_from_iri(parent_id) + is_a_val = f"NEEDS_MAPPING:{fma_curie}" + part_of_val = f"NEEDS_MAPPING:{fma_curie}" + error_rows.append([ + label, iri, "fma_parent", + fma_curie, parent_lbl, + "Subagent should resolve FMA→UBERON via OLS4" + ]) + elif parent_class == "asctb_temp": + # Embed parent label so subagent can try OLS4 to find correct UBERON parent + safe_lbl = parent_lbl.replace("|", ";") + is_a_val = f"UNRESOLVABLE:{safe_lbl}" + part_of_val = f"UNRESOLVABLE:{safe_lbl}" + error_rows.append([ + label, iri, "asctb_temp_parent", + parent_id, parent_lbl, + "Parent not yet in UBERON; subagent should search OLS4 for correct parent" + ]) + else: + is_a_val = "UNKNOWN" + part_of_val = "UNKNOWN" + error_rows.append([ + label, iri, "unknown_parent", + parent_id, parent_lbl, "Unrecognised parent ID format" + ]) + + def_xref = format_refs(refs, iri) + # Pre-populate xref with FMA ID if the term's own IRI is an FMA IRI + own_fma = fma_id_from_iri(iri) if FMA_IRI_RE.search(iri) else "" + + if term_type == "group": + # Groups template: genus + location columns are populated by the subagent + group_rows.append([ + f"http://purl.obolibrary.org/obo/UBERON_{counter}", + label, + "[PENDING]", + def_xref, + "", # genus — filled by subagent + "", # location — filled by subagent + SUBSET_IRI, + CREATION_DATE, + contributor_iri, + TAXON_IRI, + "", # Wikipedia_image — filled by subagent + own_fma, # xref — FMA from source IRI; subagent appends + ]) + else: + overlay = classify_system(rec) + base_row = [ + f"http://purl.obolibrary.org/obo/UBERON_{counter}", + label, + "[PENDING]", + def_xref, + is_a_val, + part_of_val, + "", # develops_from — filled by subagent if applicable + ] + if overlay == "muscle": + base_row += ["", "", ""] # has_muscle_origin, has_muscle_insertion, innervated_by + base_row += [ + SUBSET_IRI, + CREATION_DATE, + contributor_iri, + TAXON_IRI, + "", # Wikipedia_image — filled by subagent + own_fma, + ] + leaf_rows_by_overlay.setdefault(overlay, []).append(base_row) + counter += 1 + + # Write per-overlay LEAF working + final templates + overlay_summary = [] + for overlay, rows in sorted(leaf_rows_by_overlay.items()): + headers, directives = OVERLAY_TEMPLATES[overlay] + work_path, final_path = overlay_paths(overlay, name) + for path in (work_path, final_path): + with open(path, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(headers) + writer.writerow(directives) + writer.writerows(rows) + overlay_summary.append((overlay, len(rows), final_path)) + + # Write GROUPS working + final templates + for path in (WORK_GROUPS_TSV, final_groups_tsv): + with open(path, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(GROUPS_TEMPLATE_HEADERS) + writer.writerow(GROUPS_TEMPLATE_DIRECTIVES) + writer.writerows(group_rows) + + # Write reports + write_tsv(input_tsv, INPUT_HEADERS, input_rows) + write_tsv(errors_tsv, ERROR_HEADERS, error_rows) + write_tsv(candidates_tsv, CANDIDATE_HEADERS, candidate_rows) + + # Routing summary (Step 0) + parts = ", ".join(f"{ov}={n}" for ov, n, _ in overlay_summary) or "(none)" + print(f"Step 0 routing: {parts}, group={len(group_rows)}") + print() + for overlay, n, final_path in overlay_summary: + work_path, _ = overlay_paths(overlay, name) + print(f"Leaf template [{overlay}] → {final_path} ({n} rows)") + print(f"Groups template → {final_groups_tsv} ({len(group_rows)} rows)") + print(f"Reports → {reports_dir}/") + print(f" input.tsv {len(input_rows)} rows") + print(f" errors.tsv {len(error_rows)} rows") + print(f" candidates.tsv {len(candidate_rows)} rows") + + total_leaf = sum(len(r) for r in leaf_rows_by_overlay.values()) + uberon_p = sum(1 for r in records if classify_parent(r["parent_id"]) == "uberon") + fma_p = sum(1 for r in records if classify_parent(r["parent_id"]) == "fma") + asctb_p = sum(1 for r in records if classify_parent(r["parent_id"]) == "asctb_temp") + print(f"\nTemplate rows: leaf={total_leaf} group={len(group_rows)} | " + f"Parents: UBERON={uberon_p} FMA={fma_p} ASCTB-TEMP={asctb_p}") + if asctb_p: + print(f" ⚠ {asctb_p} terms have ASCTB-TEMP parents — " + f"subagent will attempt OLS4 lookup for correct parent") + + +def main(): + parser = argparse.ArgumentParser( + description="Generate initial UBERON NTR ROBOT template from HRA ASCTB unmapped terms" + ) + parser.add_argument( + "--input", required=True, + help="Path to input xlsx or csv file" + ) + parser.add_argument( + "--table", default=None, + help="Filter to a specific ASCTB table name (e.g. 'muscular-system')" + ) + parser.add_argument( + "--name", required=True, + help="Template name used for output filenames (e.g. 'hra-muscular')" + ) + parser.add_argument( + "--start-id", type=int, default=DEFAULT_START_ID, + help=f"Starting UBERON:99xxxxx counter (default: {DEFAULT_START_ID})" + ) + parser.add_argument( + "--limit", type=int, default=None, + help="Process only the first N terms (for testing)" + ) + parser.add_argument( + "--contributor", default=None, + help="Contributor ORCID IRI (e.g. https://orcid.org/0000-0000-0000-0000). " + "Prompted interactively if omitted." + ) + args = parser.parse_args() + contributor_iri = resolve_contributor(args.contributor) + process(Path(args.input), args.table, args.start_id, args.name, contributor_iri, args.limit) + + +if __name__ == "__main__": + main() diff --git a/bulk_ntr_workflow/scripts/group_terms_by_parent.py b/bulk_ntr_workflow/scripts/group_terms_by_parent.py new file mode 100644 index 000000000..26f56f356 --- /dev/null +++ b/bulk_ntr_workflow/scripts/group_terms_by_parent.py @@ -0,0 +1,204 @@ +""" +Stage 2: Group ROBOT template rows by parent term for parallel subagent processing. + +Reads BOTH templates produced by Stage 1: + bulk_ntr_workflow/outputs/template_initial.tsv — leaf terms (SC directives) + bulk_ntr_workflow/outputs/template_groups_initial.tsv — group terms (EC directives) + +Each per-term JSON entry includes a `term_type` field ("leaf" or "group") so the agent +can branch its behaviour (Step 5 of the agent spec). Group terms have no parent ID +encoded in the template (the agent will determine genus + part_of differentiator), so +they are all collected into a single group keyed by `term_type=group` rather than by +parent UBERON ID. + +Output: bulk_ntr_workflow/outputs/definitions/input/{group_name}.json + +Usage: + uv run scripts/group_terms_by_parent.py +""" + +import csv +import json +import re +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +OUTPUT_DIR = ROOT / "outputs" / "definitions" / "input" +OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + +# Discovered at runtime via glob over outputs/template_*_initial.tsv +LEAF_DEFAULT_TSV = ROOT / "outputs" / "template_initial.tsv" +INPUT_GROUPS_TSV = ROOT / "outputs" / "template_groups_initial.tsv" + +# Header column names — looked up per-template via header_indices() +H_ID, H_LABEL, H_DEF, H_DEFXREF = "ID", "LABEL", "Definition", "def_xref" +H_IS_A, H_PART_OF = "is_a", "part_of" +H_GENUS, H_LOCATION = "genus", "location" + + +def header_indices(header_row: list[str]) -> dict[str, int]: + return {h.strip(): i for i, h in enumerate(header_row)} + + +def discover_leaf_templates() -> list[Path]: + """Return all leaf template working files (default + system overlays). + + Convention: outputs/template_initial.tsv (default), outputs/template__initial.tsv. + """ + out_dir = ROOT / "outputs" + paths = [] + if LEAF_DEFAULT_TSV.exists(): + paths.append(LEAF_DEFAULT_TSV) + for p in sorted(out_dir.glob("template_*_initial.tsv")): + if p.name in ("template_initial.tsv", "template_groups_initial.tsv"): + continue + paths.append(p) + return paths + + +def extract_parent_info(row: list[str], idx: dict[str, int]) -> tuple[str, str]: + """Return (parent_id, parent_label) from a leaf template's is_a/part_of cells.""" + is_a = row[idx[H_IS_A]].strip() if H_IS_A in idx else "" + part_of = row[idx[H_PART_OF]].strip() if H_PART_OF in idx else "" + + for val in (is_a, part_of): + m = re.match(r'^(UBERON:\d{7})$', val) + if m: + return m.group(1), "" + m = re.match(r'^INFER:(UBERON:\d{7})$', val) + if m: + return m.group(1), "" + m = re.match(r'^(NEEDS_MAPPING:FMA:\d+)$', val) + if m: + return m.group(1), "" + + val = is_a if is_a and is_a not in ("", "[PENDING]") else part_of + return val, "" + + +def make_group_name(parent_id: str, parent_label: str) -> str: + """Derive a safe filename-friendly group name.""" + if parent_label and parent_label not in ("INFER", "NEEDS_MAPPING", "UNRESOLVABLE", "UNKNOWN"): + slug = re.sub(r'[^\w]+', '_', parent_label.lower()).strip('_') + return slug[:50] + safe = re.sub(r'[^\w]+', '_', parent_id.lower()).strip('_') + return safe[:50] + + +def process() -> None: + leaf_paths = discover_leaf_templates() + if not leaf_paths: + raise FileNotFoundError( + f"No leaf templates found in {ROOT/'outputs'}. Run generate_template.py first." + ) + + groups: dict[str, dict] = {} + + # --- Leaf templates (default + system overlays): group by parent --- + # Each row carries the `system` overlay it came from, derived from filename: + # template_initial.tsv → system='default' + # template__initial.tsv → system='' + for leaf_path in leaf_paths: + if leaf_path.name == "template_initial.tsv": + system = "default" + else: + # template_muscle_initial.tsv → muscle + system = leaf_path.stem[len("template_"):-len("_initial")] + + with open(leaf_path, newline="", encoding="utf-8") as f: + reader = csv.reader(f, delimiter="\t") + header_row = next(reader) + next(reader) # directive row + idx = header_indices(header_row) + + for row in reader: + if not row or len(row) <= idx[H_LABEL] or not row[idx[H_LABEL]].strip(): + continue + label = row[idx[H_LABEL]].strip() + ntr_id = row[idx[H_ID]].strip() + + parent_id, _ = extract_parent_info(row, idx) + group_key = parent_id + + if group_key not in groups: + groups[group_key] = { + "parent_id": parent_id, + "parent_label": "", + "terms": [], + } + + groups[group_key]["terms"].append({ + "ntr_id": ntr_id, + "label": label, + "term_type": "leaf", + "system": system, + "is_a": row[idx[H_IS_A]].strip() if H_IS_A in idx else "", + "part_of": row[idx[H_PART_OF]].strip() if H_PART_OF in idx else "", + "def_xref": row[idx[H_DEFXREF]].strip() if H_DEFXREF in idx and len(row) > idx[H_DEFXREF] else "", + }) + + # --- Groups template: all into one bucket; agent determines genus + location per term --- + if INPUT_GROUPS_TSV.exists(): + with open(INPUT_GROUPS_TSV, newline="", encoding="utf-8") as f: + reader = csv.reader(f, delimiter="\t") + header_row = next(reader) + next(reader) # directive row + idx = header_indices(header_row) + grouping_terms = [] + for row in reader: + if not row or len(row) <= idx[H_LABEL] or not row[idx[H_LABEL]].strip(): + continue + grouping_terms.append({ + "ntr_id": row[idx[H_ID]].strip(), + "label": row[idx[H_LABEL]].strip(), + "term_type": "group", + "genus": row[idx[H_GENUS]].strip() if H_GENUS in idx and len(row) > idx[H_GENUS] else "", + "location": row[idx[H_LOCATION]].strip() if H_LOCATION in idx and len(row) > idx[H_LOCATION] else "", + "def_xref": row[idx[H_DEFXREF]].strip() if H_DEFXREF in idx and len(row) > idx[H_DEFXREF] else "", + }) + if grouping_terms: + groups["__grouping_terms__"] = { + "parent_id": "GROUPING_TERMS", + "parent_label": "(grouping terms — agent determines genus + part_of differentiator per term)", + "terms": grouping_terms, + } + + written = 0 + for group_key, data in sorted(groups.items()): + parent_id = data["parent_id"] + # Special handling for the grouping bucket + if group_key == "__grouping_terms__": + group_name = "grouping_terms" + else: + group_name = make_group_name(parent_id, data.get("parent_label", "")) + + # Group-level summary: leaf vs group counts (always one or the other in this iteration) + leaf_n = sum(1 for t in data["terms"] if t.get("term_type") == "leaf") + group_n = sum(1 for t in data["terms"] if t.get("term_type") == "group") + + out = { + "group_name": group_name, + "parent_id": parent_id, + "parent_label": data.get("parent_label", ""), + "term_counts": {"leaf": leaf_n, "group": group_n}, + "note": "parent_label is best-effort; subagent should resolve via OLS4. " + "For term_type='group' terms: use obo-grep on uberon-edit.obo to find " + "similar UBERON groupings, identify the genus + part_of pattern, and " + "fill genus + location. If pattern doesn't fit, route to manual_curation.", + "terms": data["terms"], + } + + out_path = OUTPUT_DIR / f"{group_name}.json" + with open(out_path, "w", encoding="utf-8") as f: + json.dump(out, f, indent=2) + + marker = "[GROUP]" if group_n else "[leaf] " + print(f" {marker} {group_name:45s} {len(data['terms']):3d} terms") + written += 1 + + total = sum(len(d["terms"]) for d in groups.values()) + print(f"\nTotal groups: {written} | Total terms: {total}") + + +if __name__ == "__main__": + process() diff --git a/bulk_ntr_workflow/scripts/merge_definitions.py b/bulk_ntr_workflow/scripts/merge_definitions.py new file mode 100644 index 000000000..084885440 --- /dev/null +++ b/bulk_ntr_workflow/scripts/merge_definitions.py @@ -0,0 +1,598 @@ +""" +Stage 4: Merge subagent outputs back into the ROBOT template TSVs. + +Reads all bulk_ntr_workflow/outputs/definitions/*.json files. Each JSON may contain: + - "definitions": {label: definition_string} + - "wikipedia_images": {label: image_url} + - "xrefs": {label: "Wikipedia:Title|FMA:NNNNN"} + - "def_xrefs_to_add": {label: "PMID:nnn|DOI:..."} + - "resolved_relationships": {label: "is_a" | "part_of"} — leaf template only + - "resolved_parents": {label: "UBERON:xxxxxxx"} — leaf template only + - "group_template_rows": {label: {"genus": "...", "location": "..."}} — groups only + - "confirmed_matches": [{label, uberon_id, confidence}] + - "possible_matches": [{label, uberon_id, confidence, note}] + - "out_of_scope": [{label, reason, suggestion}] + - "name_corrections": [{label, suggested, reason}] + - "manual_curation": [{label, definition, reason, similar_terms, suggestion}] + +Reads both working templates: + bulk_ntr_workflow/outputs/template_initial.tsv — leaf (SC directives) + bulk_ntr_workflow/outputs/template_groups_initial.tsv — groups (EC directives) + +Writes back to: + src/templates/.template.tsv — leaf, in place + src/templates/-groups.template.tsv — groups, in place + +Reports written to src/templates/-reports/: + candidates.tsv — confirmed + possible OLS4 matches + out_of_scope.tsv — pathological/dysfunctional terms + name_corrections.tsv — agent-applied label rewrites + manual_curation.tsv — group terms that don't fit the simple part_of pattern + +Requires --name matching the value used in Stage 1. + +Usage: + uv run scripts/merge_definitions.py --name hra-muscular +""" + +import argparse +import csv +import json +import re +from pathlib import Path + +NTR_ROOT = Path(__file__).resolve().parent.parent +REPO_ROOT = NTR_ROOT.parent +INPUT_TSV = NTR_ROOT / "outputs" / "template_initial.tsv" +INPUT_GROUPS_TSV = NTR_ROOT / "outputs" / "template_groups_initial.tsv" +DEFS_DIR = NTR_ROOT / "outputs" / "definitions" + +PENDING_PATTERN = re.compile(r'^\[PENDING\]$') +INFER_PATTERN = re.compile(r'^INFER') + +# Header column names. Indices are looked up per-template via header_indices() below +# so the merge step is robust to additional columns (e.g. develops_from, has_muscle_origin) +# without having to update hardcoded positions. +H_ID = "ID" +H_LABEL = "LABEL" +H_DEF = "Definition" +H_DEFXREF = "def_xref" +H_IMAGE = "Wikipedia_image" +H_TERMREF = "xref" +# Leaf template logic columns +H_IS_A = "is_a" +H_PART_OF = "part_of" +H_DEVELOPS_FROM = "develops_from" +# Optional muscle-overlay logic columns (Phase 7) +H_MUSCLE_ORIGIN = "has_muscle_origin" +H_MUSCLE_INSERTION = "has_muscle_insertion" +H_INNERVATED_BY = "innervated_by" +# Groups template logic columns (EC genus, EC part_of some location) +H_GENUS = "genus" +H_LOCATION = "location" + + +def header_indices(header_row: list[str]) -> dict[str, int]: + """Return {column_name: index} for a template header row.""" + return {h.strip(): i for i, h in enumerate(header_row)} + + +def ensure_width(row: list[str], width: int) -> None: + """Extend row in-place to at least `width` cells with empty strings.""" + while len(row) < width: + row.append("") + + +def _normalise_matches(raw: list) -> list: + """Normalise various field-name conventions agents may use into {label, uberon_id, ...}.""" + out = [] + for m in raw: + label = m.get("label") or m.get("ntr_label") or m.get("term_label", "") + uid = m.get("uberon_id") or m.get("matched_id") or "" + out.append({ + "label": label, + "uberon_id": uid, + "confidence": m.get("confidence", ""), + "note": m.get("note", ""), + }) + return out + + +def load_subagent_outputs() -> dict: + """Load and merge all subagent JSON outputs into a dict of merged maps/lists.""" + out = { + "definitions": {}, + "images": {}, + "relationships": {}, # legacy fallback: label → "is_a" | "part_of" + "resolved_parents": {}, # legacy fallback: label → "UBERON:xxxxxxx" + "leaf_template_rows": {}, # label → {"is_a": "UBERON:...", "part_of": "UBERON:..."} + "xrefs": {}, # label → pipe-sep xref (Wikipedia URL + FMA ID) + "def_xrefs_extra": {}, # label → PMIDs/DOIs to append to def_xref column + "group_template_rows": {}, # label → {"genus": "...", "location": "..."} + "confirmed": [], + "possible": [], + "out_of_scope": [], # [{label, reason, suggestion}] + "name_corrections": [], # [{label, suggested, reason}] + "manual_curation": [], # [{label, definition, reason, similar_terms, ...}] + } + + for jf in sorted(DEFS_DIR.glob("*.json")): + with open(jf, encoding="utf-8") as f: + data = json.load(f) + if not isinstance(data, dict): + print(f" WARNING: {jf.name} is not a dict, skipping") + continue + + out["definitions"].update(data.get("definitions", {})) + out["images"].update(data.get("wikipedia_images", {})) + out["relationships"].update(data.get("resolved_relationships", {})) + out["resolved_parents"].update(data.get("resolved_parents", {})) + out["leaf_template_rows"].update(data.get("leaf_template_rows", {})) + out["xrefs"].update(data.get("xrefs", {})) + out["def_xrefs_extra"].update(data.get("def_xrefs_to_add", {})) + out["group_template_rows"].update(data.get("group_template_rows", {})) + out["confirmed"].extend(_normalise_matches(data.get("confirmed_matches", []))) + out["possible"].extend(_normalise_matches(data.get("possible_matches", []))) + out["out_of_scope"].extend(data.get("out_of_scope", [])) + out["name_corrections"].extend(data.get("name_corrections", [])) + out["manual_curation"].extend(data.get("manual_curation", [])) + # Also accept {label: {match_type, matched_id, ...}} dict form + for lbl, info in data.get("existing_term_match", {}).items(): + mt = info.get("match_type", "") + entry = { + "label": lbl, + "uberon_id": info.get("matched_id") or info.get("uberon_id", ""), + "confidence": info.get("confidence", "high" if "confirmed" in mt else "medium"), + "note": info.get("note", ""), + } + if "confirmed" in mt: + out["confirmed"].append(entry) + elif "possible" in mt: + out["possible"].append(entry) + + return out + + +def extract_parent_id(cell_val: str) -> str: + """Pull the embedded UBERON ID from INFER:, NEEDS_MAPPING:, etc.""" + m = re.match(r'^INFER:(UBERON:\d{7})$', cell_val) + if m: + return m.group(1) + m = re.match(r'^(UBERON:\d{7})$', cell_val) + if m: + return m.group(1) + m = re.match(r'^NEEDS_MAPPING:(.*)', cell_val) + if m: + return m.group(1) + return "" + + +def _apply_common_fields(row: list[str], label: str, lookup_label: str, + sub: dict, counters: dict, idx: dict[str, int]) -> None: + """Update definition / image / xref / def_xref columns. Used for both templates. + + idx is the header→index map for the current template (different leaf variants + have different positions for these columns).""" + ensure_width(row, max(idx.values()) + 1) + + def get(d: dict): + return d.get(lookup_label) or d.get(label) + + new_def = get(sub["definitions"]) + if new_def and new_def.strip(): + row[idx[H_DEF]] = new_def.strip() + counters["defs"] += 1 + + if H_IMAGE in idx: + new_img = get(sub["images"]) + if new_img and new_img.strip(): + row[idx[H_IMAGE]] = new_img.strip() + counters["images"] += 1 + + if H_TERMREF in idx: + new_xref = get(sub["xrefs"]) + if new_xref and new_xref.strip(): + col = idx[H_TERMREF] + existing = row[col].strip() + parts = [p for p in existing.split("|") if p] if existing else [] + for p in new_xref.strip().split("|"): + if p and p not in parts: + parts.append(p) + row[col] = "|".join(parts) + counters["xrefs"] += 1 + + if H_DEFXREF in idx: + extra_def_xref = get(sub["def_xrefs_extra"]) + if extra_def_xref and extra_def_xref.strip(): + col = idx[H_DEFXREF] + existing = row[col].strip() + parts = [p for p in existing.split("|") if p] if existing else [] + for p in extra_def_xref.strip().split("|"): + if p and p not in parts: + parts.append(p) + row[col] = "|".join(parts) + counters["def_xrefs"] += 1 + + +def merge_leaf_template(input_tsv: Path, final_tsv: Path, sub: dict, + excluded_labels: set, out_of_scope_labels: set, + name_correction_map: dict, manual_curation_labels: set) -> dict: + """Merge subagent outputs into a leaf template (default OR system overlay). + + Uses header-name lookup so the function works with any leaf template variant + (default 13 columns, muscle 16 columns, future overlays). + + Resolution priority for is_a / part_of columns: + 1. leaf_template_rows[label] = {is_a, part_of, develops_from?, has_muscle_*?} + 2. resolved_relationships + resolved_parents — legacy single-column form + 3. INFER:/UNRESOLVABLE:/NEEDS_MAPPING: — fall back to blank + curator review + """ + # Optional logic columns; populated only if the column exists in this template + OPTIONAL_LEAF_COLS = [H_DEVELOPS_FROM, H_MUSCLE_ORIGIN, + H_MUSCLE_INSERTION, H_INNERVATED_BY] + counters = {"defs": 0, "images": 0, "xrefs": 0, "def_xrefs": 0, + "rels": 0, "leaf_rows_used": 0, "relabelled": 0, + "pending": 0, "infer": 0, "unknown_rel": [], + "optional_filled": 0} + rows = [] + with open(input_tsv, newline="", encoding="utf-8") as f: + reader = csv.reader(f, delimiter="\t") + header_row = next(reader) + directive_row = next(reader) + rows.append(header_row) + rows.append(directive_row) + idx = header_indices(header_row) + width = max(idx.values()) + 1 + for row in reader: + if not row: + rows.append(row) + continue + ensure_width(row, width) + label = row[idx[H_LABEL]].strip() + + if label in excluded_labels or label in out_of_scope_labels: + continue + if label in manual_curation_labels: + continue + + if label in name_correction_map: + row[idx[H_LABEL]] = name_correction_map[label] + counters["relabelled"] += 1 + lookup_label = name_correction_map.get(label, label) + + _apply_common_fields(row, label, lookup_label, sub, counters, idx) + + is_a_val = row[idx[H_IS_A]].strip() + part_of_val = row[idx[H_PART_OF]].strip() + + # Priority 1: leaf_template_rows — preferred, populates both axes + optional cols + ltr = (sub["leaf_template_rows"].get(lookup_label) + or sub["leaf_template_rows"].get(label)) + if ltr: + row[idx[H_IS_A]] = (ltr.get("is_a") or "").strip() + row[idx[H_PART_OF]] = (ltr.get("part_of") or "").strip() + # Optional columns — only populate if both the column exists in this + # template AND the agent emitted a value + for col_name in OPTIONAL_LEAF_COLS: + if col_name in idx and ltr.get(col_name): + row[idx[col_name]] = ltr[col_name].strip() + counters["optional_filled"] += 1 + counters["leaf_rows_used"] += 1 + else: + # Priority 2: legacy resolved_relationships + resolved_parents + parent_id = (sub["resolved_parents"].get(lookup_label) + or sub["resolved_parents"].get(label) + or extract_parent_id(is_a_val) + or extract_parent_id(part_of_val)) + rel = (sub["relationships"].get(lookup_label) + or sub["relationships"].get(label)) + if rel and parent_id: + if rel == "is_a": + row[idx[H_IS_A]] = parent_id + row[idx[H_PART_OF]] = "" + elif rel == "part_of": + row[idx[H_IS_A]] = "" + row[idx[H_PART_OF]] = parent_id + counters["rels"] += 1 + elif parent_id and (is_a_val.startswith("INFER:") or + is_a_val.startswith("UNRESOLVABLE:") or + is_a_val.startswith("NEEDS_MAPPING:")): + row[idx[H_IS_A]] = "" + row[idx[H_PART_OF]] = "" + counters["unknown_rel"].append(row[idx[H_LABEL]].strip()) + + if PENDING_PATTERN.match(row[idx[H_DEF]].strip()): + counters["pending"] += 1 + if INFER_PATTERN.match(row[idx[H_IS_A]].strip()) or \ + INFER_PATTERN.match(row[idx[H_PART_OF]].strip()): + counters["infer"] += 1 + + rows.append(row) + + with open(final_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerows(rows) + counters["data_rows"] = len(rows) - 2 + return counters + + +def merge_groups_template(input_tsv: Path, final_tsv: Path, sub: dict, + excluded_labels: set, out_of_scope_labels: set, + name_correction_map: dict, + manual_curation_labels: set) -> dict: + """Merge subagent outputs into the groups template. Returns a counters dict. + + Group rows that have no genus+location populated AND are not in manual_curation + are dropped from the template (the agent has not produced an EC definition for + them) — the curator should investigate. + """ + counters = {"defs": 0, "images": 0, "xrefs": 0, "def_xrefs": 0, + "ec_resolved": 0, "ec_incomplete": [], "relabelled": 0, + "pending": 0} + rows = [] + with open(input_tsv, newline="", encoding="utf-8") as f: + reader = csv.reader(f, delimiter="\t") + header_row = next(reader) + directive_row = next(reader) + rows.append(header_row) + rows.append(directive_row) + idx = header_indices(header_row) + width = max(idx.values()) + 1 + for row in reader: + if not row: + rows.append(row) + continue + ensure_width(row, width) + label = row[idx[H_LABEL]].strip() + + if label in excluded_labels or label in out_of_scope_labels: + continue + # Group terms that the agent punted go to manual_curation — exclude from template + if label in manual_curation_labels: + continue + + if label in name_correction_map: + row[idx[H_LABEL]] = name_correction_map[label] + counters["relabelled"] += 1 + lookup_label = name_correction_map.get(label, label) + + _apply_common_fields(row, label, lookup_label, sub, counters, idx) + + # Populate genus + location from the agent + ec = (sub["group_template_rows"].get(lookup_label) + or sub["group_template_rows"].get(label)) + if ec and ec.get("genus") and ec.get("location"): + row[idx[H_GENUS]] = ec["genus"].strip() + row[idx[H_LOCATION]] = ec["location"].strip() + counters["ec_resolved"] += 1 + else: + # Incomplete EC — agent didn't produce both columns; flag for curator + counters["ec_incomplete"].append(row[idx[H_LABEL]].strip()) + + if PENDING_PATTERN.match(row[idx[H_DEF]].strip()): + counters["pending"] += 1 + + rows.append(row) + + with open(final_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerows(rows) + counters["data_rows"] = len(rows) - 2 + return counters + + +def discover_leaf_partitions(name: str, ntr_root: Path, repo_root: Path) -> list[tuple[str, Path, Path]]: + """Find all leaf-template partitions for a given name. + + Returns a list of (partition_label, working_tsv, final_tsv) tuples for every + partition that has both a working and final template on disk. Partition_label is + 'default' for the base template, or the overlay name (e.g. 'muscle') for system + overlays. + + Convention: + default → outputs/template_initial.tsv + src/templates/.template.tsv + → outputs/template__initial.tsv + src/templates/-.template.tsv + """ + out_dir = ntr_root / "outputs" + templates_dir = repo_root / "src" / "templates" + partitions = [] + + # Default partition + work = out_dir / "template_initial.tsv" + final = templates_dir / f"{name}.template.tsv" + if work.exists() and final.exists(): + partitions.append(("default", work, final)) + + # System overlay partitions — discover by looking for outputs/template__initial.tsv + for work_path in sorted(out_dir.glob("template_*_initial.tsv")): + stem = work_path.stem # 'template_muscle_initial' + if stem in ("template_initial", "template_groups_initial"): + continue + # Extract overlay name from 'template__initial' + overlay = stem[len("template_"):-len("_initial")] + final = templates_dir / f"{name}-{overlay}.template.tsv" + if final.exists(): + partitions.append((overlay, work_path, final)) + + return partitions + + +def process(name: str) -> None: + templates_dir = REPO_ROOT / "src" / "templates" + final_groups_tsv = templates_dir / f"{name}-groups.template.tsv" + reports_dir = templates_dir / f"{name}-reports" + candidates_tsv = reports_dir / "candidates.tsv" + out_of_scope_tsv = reports_dir / "out_of_scope.tsv" + name_corrections_tsv = reports_dir / "name_corrections.tsv" + manual_curation_tsv = reports_dir / "manual_curation.tsv" + + leaf_partitions = discover_leaf_partitions(name, NTR_ROOT, REPO_ROOT) + if not leaf_partitions: + raise FileNotFoundError( + f"No leaf templates found for '{name}'. Run generate_template.py --name {name} first." + ) + + sub = load_subagent_outputs() + print(f"Loaded: {len(sub['definitions'])} definitions, {len(sub['images'])} images, " + f"{len(sub['relationships'])} resolved relationships, " + f"{len(sub['resolved_parents'])} resolved parents, " + f"{len(sub['leaf_template_rows'])} leaf rows, " + f"{len(sub['group_template_rows'])} group EC rows, " + f"{len(sub['xrefs'])} xrefs, {len(sub['def_xrefs_extra'])} extra def_xrefs, " + f"{len(sub['confirmed'])} confirmed, {len(sub['possible'])} possible, " + f"{len(sub['out_of_scope'])} out-of-scope, " + f"{len(sub['name_corrections'])} name corrections, " + f"{len(sub['manual_curation'])} manual_curation") + + name_correction_map = { + nc["label"]: nc.get("suggested", "").strip() + for nc in sub["name_corrections"] if nc.get("suggested", "").strip() + } + excluded_labels = {m["label"] for m in sub["confirmed"]} + out_of_scope_labels = {o["label"] for o in sub["out_of_scope"]} + manual_curation_labels = {mc["label"] for mc in sub["manual_curation"]} + + for partition_label, work_tsv, final_tsv in leaf_partitions: + leaf_counters = merge_leaf_template( + work_tsv, final_tsv, sub, + excluded_labels, out_of_scope_labels, name_correction_map, + manual_curation_labels, + ) + print(f"\nLeaf template [{partition_label}] → {final_tsv} ({leaf_counters['data_rows']} rows)") + print(f" Definitions updated: {leaf_counters['defs']}") + print(f" Images added: {leaf_counters['images']}") + print(f" Xrefs added: {leaf_counters['xrefs']}") + print(f" def_xref refs appended: {leaf_counters['def_xrefs']}") + print(f" Labels corrected: {leaf_counters['relabelled']}") + print(f" leaf_template_rows used:{leaf_counters['leaf_rows_used']}") + print(f" Optional cols filled: {leaf_counters['optional_filled']}") + print(f" Relationships resolved (legacy): {leaf_counters['rels']}") + print(f" Still [PENDING] defs: {leaf_counters['pending']}") + print(f" Still INFER: {leaf_counters['infer']}") + print(f" Relationship unresolved:{len(leaf_counters['unknown_rel'])}") + for lbl in leaf_counters["unknown_rel"]: + print(f" ⚠ {lbl}") + + if INPUT_GROUPS_TSV.exists() and final_groups_tsv.exists(): + groups_counters = merge_groups_template( + INPUT_GROUPS_TSV, final_groups_tsv, sub, + excluded_labels, out_of_scope_labels, name_correction_map, + manual_curation_labels, + ) + print(f"\nGroups template → {final_groups_tsv} ({groups_counters['data_rows']} rows)") + print(f" Definitions updated: {groups_counters['defs']}") + print(f" Images added: {groups_counters['images']}") + print(f" Xrefs added: {groups_counters['xrefs']}") + print(f" def_xref refs appended: {groups_counters['def_xrefs']}") + print(f" Labels corrected: {groups_counters['relabelled']}") + print(f" EC genus+location set: {groups_counters['ec_resolved']}") + print(f" Still [PENDING] defs: {groups_counters['pending']}") + print(f" EC incomplete: {len(groups_counters['ec_incomplete'])}") + for lbl in groups_counters["ec_incomplete"]: + print(f" ⚠ {lbl} (no genus+location from agent)") + + print(f"\n Excluded (confirmed match): {len(excluded_labels)}") + print(f" Excluded (out_of_scope): {len(out_of_scope_labels)}") + print(f" Excluded (manual_curation): {len(manual_curation_labels)}") + + # Append confirmed/possible matches to candidates.tsv + if sub["confirmed"] or sub["possible"]: + reports_dir.mkdir(parents=True, exist_ok=True) + existing_rows = [] + existing_header = ["label", "as_iri", "uberon_id", "note"] + if candidates_tsv.exists(): + with open(candidates_tsv, newline="", encoding="utf-8") as f: + rows_read = list(csv.reader(f, delimiter="\t")) + if rows_read: + existing_header = rows_read[0] + existing_rows = rows_read[1:] + + new_rows = [] + for m in sub["confirmed"]: + new_rows.append([ + m.get("label", ""), "", + m.get("uberon_id", ""), + f"confirmed_match (confidence: {m.get('confidence','')})" + ]) + for m in sub["possible"]: + new_rows.append([ + m.get("label", ""), "", + m.get("uberon_id", ""), + f"possible_match ({m.get('note','')})" + ]) + + with open(candidates_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(existing_header) + writer.writerows(existing_rows) + writer.writerows(new_rows) + print(f" Updated candidates.tsv → {candidates_tsv}") + + # Out-of-scope report (pathological/dysfunctional terms — curator decides) + if sub["out_of_scope"]: + reports_dir.mkdir(parents=True, exist_ok=True) + with open(out_of_scope_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(["label", "reason", "suggestion"]) + for o in sub["out_of_scope"]: + writer.writerow([ + o.get("label", ""), + o.get("reason", ""), + o.get("suggestion", ""), + ]) + print(f" Wrote out_of_scope.tsv → {out_of_scope_tsv}") + + # Name corrections report (so curator can review label changes) + if sub["name_corrections"]: + reports_dir.mkdir(parents=True, exist_ok=True) + with open(name_corrections_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(["source_label", "corrected_label", "reason"]) + for nc in sub["name_corrections"]: + writer.writerow([ + nc.get("label", ""), + nc.get("suggested", ""), + nc.get("reason", ""), + ]) + print(f" Wrote name_corrections.tsv → {name_corrections_tsv}") + + # Manual curation report — group terms that don't fit the genus + part_of pattern + if sub["manual_curation"]: + reports_dir.mkdir(parents=True, exist_ok=True) + with open(manual_curation_tsv, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f, delimiter="\t") + writer.writerow(["label", "definition", "reason", "similar_terms", "suggestion"]) + for mc in sub["manual_curation"]: + similar_terms = mc.get("similar_terms", []) + if isinstance(similar_terms, list): + similar = "; ".join( + f"{s.get('id', '')}={s.get('label', '')}" if isinstance(s, dict) + else str(s) + for s in similar_terms + ) + else: + similar = str(similar_terms) + writer.writerow([ + mc.get("label", ""), + mc.get("definition", ""), + mc.get("reason", ""), + similar, + mc.get("suggestion", ""), + ]) + print(f" Wrote manual_curation.tsv → {manual_curation_tsv}") + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Merge subagent definition outputs into the ROBOT template" + ) + parser.add_argument( + "--name", required=True, + help="Template name used in Stage 1 (e.g. 'hra-muscular')" + ) + args = parser.parse_args() + process(args.name) + + +if __name__ == "__main__": + main() diff --git a/hra_unmapped-asct-term-list-with-refs.xlsx b/hra_unmapped-asct-term-list-with-refs.xlsx new file mode 100644 index 000000000..e504f74ee Binary files /dev/null and b/hra_unmapped-asct-term-list-with-refs.xlsx differ diff --git a/src/templates/hra-muscular-groups.template.tsv b/src/templates/hra-muscular-groups.template.tsv new file mode 100644 index 000000000..a355c9c1c --- /dev/null +++ b/src/templates/hra-muscular-groups.template.tsv @@ -0,0 +1,10 @@ +ID LABEL Definition def_xref genus location In_subset Date Contributor Present_in_taxon Wikipedia_image xref +ID LABEL A IAO:0000115 >A oboInOwl:hasDbXref SPLIT=| EC % EC BFO:0000050 some % AI oboInOwl:inSubset AT dcterms:date^^xsd:dateTime AI dcterms:contributor AI RO:0002175 A foaf:depiction A oboInOwl:hasDbXref SPLIT=| +http://purl.obolibrary.org/obo/UBERON_9900013 external ear muscle A group of skeletal muscles attached to the auricular cartilage that act to move the pinna, comprising the auricularis anterior, auricularis superior, and auricularis posterior. https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_external-ear-muscle UBERON:0014892 UBERON:0001691 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 +http://purl.obolibrary.org/obo/UBERON_9900020 intermediate back muscle A group of skeletal muscles forming the intermediate layer of the back that act as accessory muscles of respiration, comprising the serratus posterior superior and serratus posterior inferior muscles. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intermediate-back-muscle|PMID:30571022 UBERON:0014892 UBERON:0001137 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Human_back +http://purl.obolibrary.org/obo/UBERON_9900036 middle ear muscle A group of skeletal muscles located within the middle ear cavity that attenuate sound transmission through the auditory ossicles, comprising the tensor tympani and stapedius muscles. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_middle-ear-muscle|PMID:24379725 UBERON:0014892 UBERON:0001756 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Middle_ear +http://purl.obolibrary.org/obo/UBERON_9900047 posterior abdominal wall muscle A group of skeletal muscles located in the posterior part of the abdominal wall that support the lumbar spine and act on the trunk and hip, comprising the psoas major, psoas minor, iliacus, and quadratus lumborum muscles. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_posterior-abdominal-wall-muscle|PMID:30855915 UBERON:0014892 UBERON:0003697 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Abdominal_wall +http://purl.obolibrary.org/obo/UBERON_9900055 segmental back muscle A group of small skeletal muscles of the deep back that span individual vertebral segments, comprising the interspinales, intertransversarii, and levatores costarum, which produce minor movements of the vertebral column. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle|PMID:30571022 UBERON:0014892 UBERON:0001137 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Human_back +http://purl.obolibrary.org/obo/UBERON_9900056 sole of foot muscle A group of skeletal muscles located in the plantar part of the foot that act on the toes and support the longitudinal arch, comprising the four layers of plantar intrinsic muscles including the abductor hallucis, flexor digitorum brevis, lumbricals, quadratus plantae, flexor digiti minimi brevis, adductor hallucis, and plantar/dorsal interossei. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sole-of-foot-muscle|PMID:30571022 UBERON:0014892 UBERON:0008338 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Sole_(foot) +http://purl.obolibrary.org/obo/UBERON_9900063 superficial back muscle A group of skeletal muscles forming the superficial layer of the back, which attach the upper limb to the trunk and act on the shoulder girdle, comprising the trapezius, latissimus dorsi, levator scapulae, and rhomboid muscles. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superficial-back-muscle|PMID:30571022 UBERON:0014892 UBERON:0001137 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Human_back +http://purl.obolibrary.org/obo/UBERON_9900068 thoracic wall muscle A group of skeletal muscles that are part of the thoracic wall and act on the ribs to produce respiratory movements, comprising the external, internal and innermost intercostals, subcostales and transversus thoracis. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle|PMID:30855894 UBERON:0014892 UBERON:0016403 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Thoracic_wall diff --git a/src/templates/hra-muscular-muscle.template.tsv b/src/templates/hra-muscular-muscle.template.tsv new file mode 100644 index 000000000..9600f1ec0 --- /dev/null +++ b/src/templates/hra-muscular-muscle.template.tsv @@ -0,0 +1,27 @@ +ID LABEL Definition def_xref is_a part_of develops_from has_muscle_origin has_muscle_insertion innervated_by In_subset Date Contributor Present_in_taxon Wikipedia_image xref +ID LABEL A IAO:0000115 >A oboInOwl:hasDbXref SPLIT=| SC % SC BFO:0000050 some % SC RO:0002202 some % SC RO:0002372 some % SC RO:0002373 some % SC RO:0002005 some % AI oboInOwl:inSubset AT dcterms:date^^xsd:dateTime AI dcterms:contributor AI RO:0002175 A foaf:depiction A oboInOwl:hasDbXref SPLIT=| +http://purl.obolibrary.org/obo/UBERON_9900001 anterior cervical intertransversarii muscle A skeletal muscle organ that is one of a paired series of short segmental muscles connecting the anterior tubercles of adjacent cervical vertebrae, lying anterior to the ventral rami of the cervical spinal nerves and acting to bend the cervical spine laterally. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle|PMID:7076562 UBERON:0014892 UBERON:0006072 UBERON:0002413 UBERON:0002413 UBERON:0001780 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900003 articularis genu muscle A small skeletal muscle organ of the anterior thigh, lying deep to the vastus intermedius, that arises from the anterior surface of the distal shaft of the femur and inserts onto the proximal wall of the suprapatellar bursa and the synovial membrane of the knee joint, where it retracts the bursa superiorly during knee extension. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle|PMID:30229230 UBERON:0001630 UBERON:0000376 UBERON:0000981 UBERON:0001267 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 https://upload.wikimedia.org/wikipedia/commons/2/2b/Gray244.png Wikipedia:Articularis_genus_muscle|FMA:22424 +http://purl.obolibrary.org/obo/UBERON_9900008 clavicular head of pectoralis major muscle A muscle head that forms the superior portion of the pectoralis major, originating from the anterior surface of the medial half of the clavicle and converging with the sternocostal head to insert via a common tendon onto the lateral lip of the intertubercular groove of the humerus. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_clavicular-head-of-pectoralis-major-muscle|Wikipedia:Pectoralis_major_muscle UBERON:0011906 UBERON:0002381 UBERON:0001105 UBERON:0000976 UBERON:0003726 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Pectoralis_major_muscle|FMA:32519 +http://purl.obolibrary.org/obo/UBERON_9900010 dorsal part of intertransversarii laterales lumborum muscle A small skeletal back muscle that originates from the accessory process of one lumbar vertebra and inserts onto the transverse process of the adjacent (next inferior) lumbar vertebra, forming the posterior (dorsal) component of the lateral intertransverse muscles of the lumbar region; it contributes to lateral flexion and segmental stabilisation of the lumbar vertebral column. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle UBERON:0001630 UBERON:0001137 UBERON:0001077 UBERON:0001077 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900015 hamstring portion of adductor magnus muscle A muscle head that originates from the ischial tuberosity and descends almost vertically through the posterior compartment of the thigh to insert by a rounded tendon onto the adductor tubercle of the medial femoral condyle. It is the ischiocondylar division of the adductor magnus, is innervated by the tibial division of the sciatic nerve, and acts to extend the hip joint. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_hamstring-portion-of-adductor-magnus-muscle|PMID:23813615 UBERON:0011906 UBERON:0000370 UBERON:0034983 UBERON:0000981 UBERON:0001323 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Adductor_magnus_muscle +http://purl.obolibrary.org/obo/UBERON_9900018 inferior head of lateral pterygoid muscle A muscle head that is the larger, lower division of the lateral pterygoid muscle, arising from the lateral surface of the lateral pterygoid plate of the sphenoid bone and inserting onto the pterygoid fovea on the neck of the mandibular condyle; it acts on the inferior compartment of the temporomandibular joint to depress, protrude, and laterally deviate the mandible. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle|PMID:15104127|PMID:12446184 UBERON:0011906 UBERON:0006719 UBERON:0004649 UBERON:0004657 UBERON:0013647 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Lateral_pterygoid_muscle +http://purl.obolibrary.org/obo/UBERON_9900019 inferior longitudinal muscle of tongue An intrinsic muscle of the tongue that consists of a narrow band of longitudinal fibers running along the inferior surface of the tongue between the genioglossus and hyoglossus muscles, extending from the root to the apex of the tongue, and innervated by the hypoglossal nerve. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_inferior-longitudinal-lingual-muscle|PMID:30855883 UBERON:0001576 UBERON:0001723 UBERON:0001685 UBERON:0001723 UBERON:0001650 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 https://upload.wikimedia.org/wikipedia/commons/3/30/Musculuslongitudinalissuperiorlinguae.png Wikipedia:Inferior_longitudinal_muscle_of_tongue|FMA:46694 +http://purl.obolibrary.org/obo/UBERON_9900022 interspinales cervicis muscle A muscle of the vertebral column consisting of short paired fascicles that span between the spinous processes of contiguous cervical vertebrae (typically C2 through T1), lying on either side of the interspinous ligament. It assists in extension of the cervical spine and contributes to segmental stabilisation and proprioception of the neck. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_interspinales-cervicalis-muscle|Wikipedia:Interspinales_muscles UBERON:0004518 UBERON:0000974 UBERON:0001076 UBERON:0001076 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Interspinales_muscles|FMA:32519 +http://purl.obolibrary.org/obo/UBERON_9900023 intertransversarii laterales lumborum muscle A skeletal muscle organ that is one of a paired series of short segmental muscles connecting the transverse processes of adjacent lumbar vertebrae along their lateral aspect, innervated by ventral rami of the lumbar spinal nerves and acting to flex the lumbar spine laterally. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle|PMID:7076562 UBERON:0014892 UBERON:0006074 UBERON:0001780 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900025 lateral compartment of leg muscle A skeletal muscle organ that is part of the lateral (fibular) fascial compartment of the leg, comprising the fibularis longus and fibularis brevis muscles, both arising from the lateral surface of the fibula and innervated by the superficial fibular nerve, acting to evert and weakly plantarflex the foot. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-compartmet-of-leg-muscle|PMID:30137811 UBERON:0014892 UBERON:0001446 UBERON:0035526 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Lateral_compartment_of_leg +http://purl.obolibrary.org/obo/UBERON_9900026 lateral posterior cervical intertransversarii muscle A muscle organ of the neck that arises from and inserts onto the posterior tubercles of the transverse processes of adjacent cervical vertebrae, lying lateral to the medial posterior cervical intertransversarii; together with its segmental fellows it laterally flexes the cervical vertebral column and is innervated by the ventral rami of the cervical spinal nerves. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_lateral-posterior-cervical-intertransversarii-muscle UBERON:0001630 UBERON:0000974 UBERON:0018143 UBERON:0018143 UBERON:0006838 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900030 levatores costarum breves of levator costarum muscle Short skeletal muscle fasciculi of the levator costarum muscle that arise from the tips of the transverse processes of the seventh cervical and upper eleven thoracic vertebrae and insert obliquely inferolaterally onto the external aspect of the superior border of the rib immediately below their origin, between the tubercle and the angle, elevating the ribs during forceful inspiration. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle|PMID:4972578|PMID:3630603 UBERON:0014892 UBERON:8410070 UBERON:0001077 UBERON:0002228 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Levatores_costarum_muscles|FMA:71437 +http://purl.obolibrary.org/obo/UBERON_9900031 levatores costarum longi of levator costarum muscle A muscle fasciculus that constitutes the longer subdivision of the four lower levatores costarum, arising from the tip of the transverse process of a thoracic vertebra (typically T8-T11) and passing obliquely downward and laterally to insert on the outer surface of the second rib below its vertebra of origin, between the tubercle and the angle. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle|PMID:13129167 UBERON:0014892 UBERON:8410070 UBERON:0001077 UBERON:0002228 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Levatores_costarum_muscles +http://purl.obolibrary.org/obo/UBERON_9900034 medial lumbar intertransversarii muscle A skeletal muscle organ that is one of a paired series of short segmental muscles passing from the accessory process of one lumbar vertebra to the mammillary process of the vertebra below, innervated by dorsal rami of the lumbar spinal nerves and acting to stabilise and laterally flex the lumbar spine. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle|PMID:7076562 UBERON:0014892 UBERON:0006074 UBERON:0001780 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900035 medial posterior cervical intertransversarii muscle A skeletal muscle organ that is the medial part of the posterior cervical intertransversarius, lying medial to the dorsal ramus of the cervical spinal nerve which pierces it, connecting the posterior tubercles of adjacent cervical vertebrae and acting to laterally flex the cervical spine. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle|PMID:7076562 UBERON:0014892 UBERON:0006072 UBERON:0002413 UBERON:0002413 UBERON:0001780 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900037 multifidus cervicis muscle A skeletal muscle of the deep layer of the back, forming the cervical portion of the multifidus and part of the transversospinales muscle group. It arises from the superior articular processes of the lower cervical vertebrae (C4-C7) and ascends superomedially to insert into the spinous processes of vertebrae two to five segments above (C2-C5), acting in extension, ipsilateral lateral flexion and contralateral rotation of the cervical vertebral column. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-cervicis-muscle|PMID:15706328 UBERON:0010990 UBERON:0006072 UBERON:0001077 UBERON:0001076 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Multifidus_muscle +http://purl.obolibrary.org/obo/UBERON_9900038 multifidus lumborum muscle A skeletal muscle of the deep layer of the back, forming the lumbar portion of the multifidus and part of the transversospinales muscle group. It arises from the mammillary processes of the lumbar vertebrae and the posterior surface of the sacrum, and its fascicles ascend superomedially to insert into the spinous processes of vertebrae two to five segments above their origin, contributing to extension and segmental stabilisation of the lumbar vertebral column. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-lumborum-muscle|PMID:23915550|PMID:23915551 UBERON:0010990 UBERON:0006074 UBERON:0001077 UBERON:0001076 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Multifidus_muscle +http://purl.obolibrary.org/obo/UBERON_9900039 multifidus thoracis muscle A skeletal muscle of the deep layer of the back, forming the thoracic portion of the multifidus and part of the transversospinales muscle group. It arises from the transverse processes of the thoracic vertebrae and ascends superomedially to insert into the spinous processes of vertebrae two to five segments above its origin, producing extension, ipsilateral lateral flexion and contralateral rotation of the thoracic vertebral column. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_multifidus-thoracis-muscle|PMID:23915550 UBERON:0010990 UBERON:0006073 UBERON:0001077 UBERON:0001076 UBERON:0006839 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Multifidus_muscle +http://purl.obolibrary.org/obo/UBERON_9900049 puboanalis muscle A skeletal muscle of the pelvis that arises from the body of the pubis and descends to interdigitate with the longitudinal muscle of the anal canal, blending with fibres at the intersphincteric groove and perineal body. It forms the most medial component of the puborectalis sling of the levator ani and contributes to maintenance of the anorectal angle and faecal continence. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_puboanalis-muscle|PMID:21801920|PMID:18256862 UBERON:0001325 UBERON:0001326 UBERON:0001275 UBERON:0006654 UBERON:0011390 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Levator_ani +http://purl.obolibrary.org/obo/UBERON_9900050 puboperinealis muscle A muscle of the pelvis that arises from the inner surface of the pubic bone and inserts into the perineal body, forming part of the pubovisceral component of the levator ani muscle and contributing to support of the pelvic floor and elevation of the perineal body. https://fipat.library.dal.ca/ta2/|https://purl.org/ccf/ASCTB-TEMP_puboperineales-muscle|PMID:14990415 UBERON:0001325 UBERON:0001326 UBERON:0001275 UBERON:0006654 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 FMA:74028 +http://purl.obolibrary.org/obo/UBERON_9900061 sternal part of diaphragm An organ subunit of the diaphragm consisting of two small muscular slips that arise from the posterior aspect of the xiphoid process of the sternum and insert into the anterior margin of the central tendon, contributing the anterior portion of the diaphragmatic musculature. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle|PMID:23586979 UBERON:0000063 UBERON:0001103 UBERON:0002207 UBERON:0006670 UBERON:0001884 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 FMA:58278 +http://purl.obolibrary.org/obo/UBERON_9900062 sternocostal head of pectoralis major muscle A muscle head that forms the larger inferior portion of the pectoralis major, originating from the anterior surface of the sternum, the superior six costal cartilages, and the aponeurosis of the external oblique muscle, and inserting together with the clavicular head onto the lateral lip of the intertubercular groove of the humerus. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_sternocostal-head-of-pectoralis-major-muscle|Wikipedia:Pectoralis_major_muscle UBERON:0011906 UBERON:0002381 UBERON:0000975 UBERON:0000976 UBERON:0003726 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Pectoralis_major_muscle|FMA:32521 +http://purl.obolibrary.org/obo/UBERON_9900064 superior head of lateral pterygoid muscle A muscle head that constitutes the smaller, upper portion of the lateral pterygoid muscle, arising from the infratemporal surface of the greater wing of the sphenoid bone and inserting predominantly onto the articular disc and capsule of the temporomandibular joint; it acts mainly during closing and stabilises the disc during jaw movement. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_superior-head-of-lateral-pterygoid-muscle|PMID:9656947|PMID:7798474 UBERON:0011906 UBERON:0006719 UBERON:0006721 UBERON:0011319 UBERON:0013647 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Lateral_pterygoid_muscle +http://purl.obolibrary.org/obo/UBERON_9900067 thoracic intertransversarii muscle A skeletal muscle organ that is one of a series of small segmental muscles, typically present only between the lower thoracic vertebrae and between the last thoracic and first lumbar vertebra, connecting adjacent transverse processes and innervated by the dorsal rami of the thoracic spinal nerves. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle|PMID:7076562 UBERON:0014892 UBERON:0006073 UBERON:0002347 UBERON:0002347 UBERON:0001780 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii +http://purl.obolibrary.org/obo/UBERON_9900074 ventral part of intertransversarii laterales lumborum muscle A skeletal muscle that is the anterior (ventral) division of the lateral lumbar intertransverse muscles, passing between the transverse processes of contiguous lumbar vertebrae in the lower back. Together with the dorsal part, it stabilises adjacent lumbar vertebrae and contributes to ipsilateral lateral flexion of the trunk; it is innervated by the ventral (anterior) rami of the lumbar spinal nerves. https://fipat.library.dal.ca/ta2/|ISBN:9780323393225|https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle|PMID:6226119|PMID:7076562 UBERON:0014892 UBERON:0008242 UBERON:0018146 UBERON:0018146 UBERON:0009624 http://purl.obolibrary.org/obo/uberon/core#added_by_HRA 2026-05-11T00:00:00Z https://orcid.org/0000-0002-7073-9172 http://purl.obolibrary.org/obo/NCBITaxon_9606 Wikipedia:Intertransversarii diff --git a/src/templates/hra-muscular-reports/candidates.tsv b/src/templates/hra-muscular-reports/candidates.tsv new file mode 100644 index 000000000..9342d6524 --- /dev/null +++ b/src/templates/hra-muscular-reports/candidates.tsv @@ -0,0 +1,40 @@ +label as_iri uberon_id note +anterior vertebral muscle UBERON:0008549 confirmed_match (confidence: high) +circular pharyngeal muscle UBERON:0001569 confirmed_match (confidence: high) +lateral vertebral muscle UBERON:0008611 confirmed_match (confidence: high) +hypothenar hand muscle UBERON:0014377 confirmed_match (confidence: high) +palmar interosseous muscle UBERON:0006505 confirmed_match (confidence: high) +plantar interosseous muscle UBERON:0006502 confirmed_match (confidence: high) +spinotransversales muscle UBERON:0002252 confirmed_match (confidence: high) +muscle of facial expression UBERON:0001577 confirmed_match (confidence: high) +intrinsic eye muscle UBERON:0011222 confirmed_match (confidence: high) +respiratory diaphragm muscle UBERON:0001103 confirmed_match (confidence: high) +tibalis anterior muscle UBERON:0001385 confirmed_match (confidence: high) +tibalis posterior muscle UBERON:0001667 confirmed_match (confidence: high) +left crus of lumbar part of respiratory diaphragm muscle UBERON:0014767 confirmed_match (confidence: high) +aryepiglottic part of oblique arytenoid muscle UBERON:0011025 confirmed_match (confidence: high) +thyroepiglottic part of thyroarytenoid muscle UBERON:0010927 confirmed_match (confidence: high) +thyropharyngeal part of inferior pharyngeal constrictor muscle UBERON:0010936 confirmed_match (confidence: high) +right crus of lumbar part of respiratory diaphragm muscle UBERON:0014766 confirmed_match (confidence: high) +costal part of respiratory diaphragm muscle UBERON:0035831 confirmed_match (confidence: high) +iliocostalis cervicalis muscle UBERON:0008546 confirmed_match (confidence: high) +pteryopharyngeal part of superior pharyngeal constrictor muscle UBERON:0010956 confirmed_match (confidence: high) +ceratoglossus of hyoglossus muscle UBERON:0008428 confirmed_match (confidence: high) +chondroglossus of hyoglossus muscle UBERON:0011535 confirmed_match (confidence: high) +superior longitudinal lingual muscle UBERON:0008582 confirmed_match (confidence: high) +transverse muscle UBERON:0008583 confirmed_match (confidence: high) +vertical muscle UBERON:0008584 confirmed_match (confidence: high) +opponens digiti minimi muscle UBERON:0036176 confirmed_match (confidence: high) +levator costarum muscle UBERON:8410070 confirmed_match (confidence: high) +external anal sphincter muscle UBERON:0001367 confirmed_match (confidence: high) +tensor fascia latae muscle UBERON:0001376 confirmed_match (confidence: high) +longus capitus muscle UBERON:0001563 confirmed_match (confidence: high) +spermatic cord muscle UBERON:0008488 confirmed_match (confidence: high) +sphincter urethrae muscle UBERON:0004917 confirmed_match (confidence: high) +musculus uvulae muscle UBERON:0010235 confirmed_match (confidence: high) +internal abdominal oblique muscle UBERON:0005454 confirmed_match (confidence: high) +frontal belly of occipitofrontalis muscle UBERON:0010952 confirmed_match (confidence: high) +rectus capitus anterior muscle UBERON:0008453 confirmed_match (confidence: high) +occipital belly of occipitofrontalis muscle UBERON:0010947 confirmed_match (confidence: high) +splenius capitus muscle UBERON:0000711 confirmed_match (confidence: high) +rectus capitius posterior minor muscle UBERON:0008455 confirmed_match (confidence: high) diff --git a/src/templates/hra-muscular-reports/errors.tsv b/src/templates/hra-muscular-reports/errors.tsv new file mode 100644 index 000000000..fbe56f1eb --- /dev/null +++ b/src/templates/hra-muscular-reports/errors.tsv @@ -0,0 +1,31 @@ +label as_iri issue_type parent_id parent_label detail +anterior cervical intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +articularis genu muscle https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle fma_parent FMA:22424 Muscle of anterior compartment of thigh Subagent should resolve FMA→UBERON via OLS4 +aryepiglottic part of oblique arytenoid muscle https://purl.org/ccf/ASCTB-TEMP_aryepiglottic-part-of-oblique-arytenoid-muscle fma_parent FMA:46583 Oblique arytenoid Subagent should resolve FMA→UBERON via OLS4 +dorsal part of intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_meningohypophyseal-artery meningohypophyseal artery Parent not yet in UBERON; subagent should search OLS4 for correct parent +dorsum of foot muscle https://purl.org/ccf/ASCTB-TEMP_dorsum-of-foot-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +inferior head of lateral pterygoid muscle https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_supraperiosteal-arteriole supraperiosteal arteriole Parent not yet in UBERON; subagent should search OLS4 for correct parent +intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +intrinsic eye muscle https://purl.org/ccf/ASCTB-TEMP_intrinsic-eye-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_posterolateral-spinal-vein posterolateral spinal vein Parent not yet in UBERON; subagent should search OLS4 for correct parent +left crus of lumbar part of respiratory diaphragm muscle https://purl.org/ccf/ASCTB-TEMP_left-crus-of-lumbar-part-of-respiratory-diaphragm-muscle fma_parent FMA:323951 Pre-aortic thoracic lymph node group Subagent should resolve FMA→UBERON via OLS4 +levatores costarum breves of levator costarum muscle https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle thoracic wall muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +levatores costarum longi of levator costarum muscle https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle levator costarum muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +longitudinal pharyngeal muscle https://purl.org/ccf/ASCTB-TEMP_longitudinal-pharyngeal-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_vasa-recta-of-colon vasa recta of colon Parent not yet in UBERON; subagent should search OLS4 for correct parent +medial lumbar intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +medial posterior cervical intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +occipital belly of occipitofrontalis muscle https://purl.org/ccf/ASCTB-TEMP_occipital-belly-of-occipitofrontalis-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_neuromeningeal-trunk neuromeningeal trunk Parent not yet in UBERON; subagent should search OLS4 for correct parent +pelvic floor muscle https://purl.org/ccf/ASCTB-TEMP_pelvic-floor-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_periductal-branch-of-lobular-artery-of-pancreas periductal branch of lobular artery of pancreas Parent not yet in UBERON; subagent should search OLS4 for correct parent +plantar interosseous muscle https://purl.org/ccf/ASCTB-TEMP_plantar-interosseous-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_sheathed-capillary-of-spleen sheathed capillary of spleen, Sheathed capillary of spleen Parent not yet in UBERON; subagent should search OLS4 for correct parent +rectus capitius posterior minor muscle https://purl.org/ccf/ASCTB-TEMP_rectus-capitius-posterior-minor-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_submucosal-artery-of-colon submucosal artery of colon Parent not yet in UBERON; subagent should search OLS4 for correct parent +rectus capitus anterior muscle https://purl.org/ccf/ASCTB-TEMP_rectus-capitus-anterior-muscle unknown_parent UBERON:0001250, UBERON:0010400 red pulp of spleen, spleen trabecular vein Unrecognised parent ID format +respiratory diaphragm muscle https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle fma_parent FMA:12252 Subclavian lymphatic trunk Subagent should resolve FMA→UBERON via OLS4 +right crus of lumbar part of respiratory diaphragm muscle https://purl.org/ccf/ASCTB-TEMP_right-crus-of-lumbar-part-of-respiratory-diaphragm-muscle fma_parent FMA:5841 Left lumbar lymphatic trunk Subagent should resolve FMA→UBERON via OLS4 +segmental back muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_lobar-artery-of-spleen lobar artery of spleen Parent not yet in UBERON; subagent should search OLS4 for correct parent +splenius capitus muscle https://purl.org/ccf/ASCTB-TEMP_splenius-capitus-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle spinotransversales muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +sternal part of respiratory diaphragm muscle https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle respiratory diaphragm muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +thoracic intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent +thyroepiglottic part of thyroarytenoid muscle https://purl.org/ccf/ASCTB-TEMP_thyroepiglottic-part-of-thyroarytenoid-muscle fma_parent FMA:46588 Thyro-arytenoid Subagent should resolve FMA→UBERON via OLS4 +thyropharyngeal part of inferior pharyngeal constrictor muscle https://purl.org/ccf/ASCTB-TEMP_thyropharyngeal-part-of-inferior-pharyngeal-constrictor-muscle fma_parent FMA:46623 Inferior pharyngeal constrictor Subagent should resolve FMA→UBERON via OLS4 +tibalis anterior muscle https://purl.org/ccf/ASCTB-TEMP_tibalis-anterior-muscle fma_parent FMA:22472 Muscle of anterior compartment of leg Subagent should resolve FMA→UBERON via OLS4 +tibalis posterior muscle https://purl.org/ccf/ASCTB-TEMP_tibalis-posterior-muscle fma_parent FMA:22474 Muscle of posterior compartment of leg Subagent should resolve FMA→UBERON via OLS4 +ventral part of intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle asctb_temp_parent https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle Parent not yet in UBERON; subagent should search OLS4 for correct parent diff --git a/src/templates/hra-muscular-reports/input.tsv b/src/templates/hra-muscular-reports/input.tsv new file mode 100644 index 000000000..488ac52f7 --- /dev/null +++ b/src/templates/hra-muscular-reports/input.tsv @@ -0,0 +1,76 @@ +table as_iri label uberon_id parent_id parent_label references term_type +muscular-system https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle anterior cervical intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_anterior-vertebral-muscle anterior vertebral muscle UBERON:0002377 muscle of neck https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle articularis genu muscle http://purl.org/sig/ont/fma/fma22424 Muscle of anterior compartment of thigh https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_aryepiglottic-part-of-oblique-arytenoid-muscle aryepiglottic part of oblique arytenoid muscle http://purl.org/sig/ont/fma/fma46583 Oblique arytenoid https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_ceratoglossus-of-hyoglossus-muscle ceratoglossus of hyoglossus muscle UBERON:0001572 hyoglossus muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_chondroglossus-of-hyoglossus-muscle chondroglossus of hyoglossus muscle UBERON:0001572 hyoglossus muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_circular-pharyngeal-muscle circular pharyngeal muscle UBERON:0002377 muscle of neck https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_clavicular-head-of-pectoralis-major-muscle clavicular head of pectoralis major muscle UBERON:0002381 pectoralis major https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_costal-part-of-respiratory-diaphragm-muscle costal part of respiratory diaphragm muscle UBERON:0000975 sternum https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle dorsal part of intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_meningohypophyseal-artery meningohypophyseal artery https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_dorsum-of-foot-muscle dorsum of foot muscle https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle external anal sphincter muscle UBERON:0001876 amygdala https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_external-ear-muscle external ear muscle UBERON:0001678 temporal bone https://fipat.library.dal.ca/ta2/ group +muscular-system https://purl.org/ccf/ASCTB-TEMP_frontal-belly-of-occipitofrontalis-muscle frontal belly of occipitofrontalis muscle UBERON:0005893 leg bone https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_hamstring-portion-of-adductor-magnus-muscle hamstring portion of adductor magnus muscle UBERON:0001092 vertebral bone 1 https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_hypothenar-hand-muscle hypothenar hand muscle UBERON:0001677 sphenoid bone https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_iliocostalis-cervicalis-muscle iliocostalis cervicalis muscle UBERON:0001272 innominate bone https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle inferior head of lateral pterygoid muscle https://purl.org/ccf/ASCTB-TEMP_supraperiosteal-arteriole supraperiosteal arteriole https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_inferior-longitudinal-lingual-muscle inferior longitudinal lingual muscle UBERON:0001194 splenic artery https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_intermediate-back-muscle intermediate back muscle UBERON:0002397 maxilla https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_internal-abdominal-oblique-muscle internal abdominal oblique muscle UBERON:0003690 fused sacrum https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_interspinales-cervicalis-muscle interspinales cervicalis muscle UBERON:0000979 tibia https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_intrinsic-eye-muscle intrinsic eye muscle https://purl.org/ccf/ASCTB-TEMP_posterolateral-spinal-vein posterolateral spinal vein https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-compartmet-of-leg-muscle lateral compartmet of leg muscle UBERON:0001537 anterior tibial artery https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-posterior-cervical-intertransversarii-muscle lateral posterior cervical intertransversarii muscle UBERON:0001546 posterior tibial vein https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-vertebral-muscle lateral vertebral muscle UBERON:0002250 popliteal artery https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_left-crus-of-lumbar-part-of-respiratory-diaphragm-muscle left crus of lumbar part of respiratory diaphragm muscle http://purl.org/sig/ont/fma/fma323951 Pre-aortic thoracic lymph node group https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle levator costarum muscle UBERON:0001677 sphenoid bone https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle levatores costarum breves of levator costarum muscle https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle thoracic wall muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle levatores costarum longi of levator costarum muscle https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle levator costarum muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_longitudinal-pharyngeal-muscle longitudinal pharyngeal muscle https://purl.org/ccf/ASCTB-TEMP_vasa-recta-of-colon vasa recta of colon https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_longus-capitus-muscle longus capitus muscle UBERON:0002377 muscle of neck https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle medial lumbar intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle medial posterior cervical intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_middle-ear-muscle middle ear muscle UBERON:0002376 cranial muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-cervicis-muscle multifidus cervicis muscle UBERON:0010990 transversospinales muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-lumborum-muscle multifidus lumborum muscle UBERON:0010990 transversospinales muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-thoracis-muscle multifidus thoracis muscle UBERON:0010990 transversospinales muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_muscle-of-facial-expression muscle of facial expression UBERON:0002376 cranial muscle https://fipat.library.dal.ca/ta2/ group +muscular-system https://purl.org/ccf/ASCTB-TEMP_musculus-uvulae-muscle musculus uvulae muscle UBERON:0003682 palatal muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_occipital-belly-of-occipitofrontalis-muscle occipital belly of occipitofrontalis muscle https://purl.org/ccf/ASCTB-TEMP_neuromeningeal-trunk neuromeningeal trunk https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_opponens-digiti-minimi-muscle opponens digiti minimi muscle UBERON:0001624 anterior cerebral artery https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_palmar-interosseous-muscle palmar interosseous muscle UBERON:0009095 tip of renal papilla https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_pelvic-floor-muscle pelvic floor muscle https://purl.org/ccf/ASCTB-TEMP_periductal-branch-of-lobular-artery-of-pancreas periductal branch of lobular artery of pancreas https://fipat.library.dal.ca/ta2/ group +muscular-system https://purl.org/ccf/ASCTB-TEMP_plantar-interosseous-muscle plantar interosseous muscle https://purl.org/ccf/ASCTB-TEMP_sheathed-capillary-of-spleen sheathed capillary of spleen, Sheathed capillary of spleen https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_posterior-abdominal-wall-muscle posterior abdominal wall muscle UBERON:0001092 vertebral bone 1 https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_pteryopharyngeal-part-of-superior-pharyngeal-constrictor-muscle pteryopharyngeal part of superior pharyngeal constrictor muscle UBERON:0001272 innominate bone https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_puboanalis-muscle puboanalis muscle UBERON:8600052 subsegmental pulmonary vein https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_puboperineales-muscle puboperineales muscle UBERON:0015173 helicine branch of uterine artery https://fipat.library.dal.ca/ta2/ leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_rectus-capitius-posterior-minor-muscle rectus capitius posterior minor muscle https://purl.org/ccf/ASCTB-TEMP_submucosal-artery-of-colon submucosal artery of colon https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_rectus-capitus-anterior-muscle rectus capitus anterior muscle UBERON:0001250, UBERON:0010400 red pulp of spleen, spleen trabecular vein https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle respiratory diaphragm muscle http://purl.org/sig/ont/fma/fma12252 Subclavian lymphatic trunk https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_right-crus-of-lumbar-part-of-respiratory-diaphragm-muscle right crus of lumbar part of respiratory diaphragm muscle http://purl.org/sig/ont/fma/fma5841 Left lumbar lymphatic trunk https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://purl.org/ccf/ASCTB-TEMP_lobar-artery-of-spleen lobar artery of spleen https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_sole-of-foot-muscle sole of foot muscle UBERON:0001383 muscle of leg https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_spermatic-cord-muscle spermatic cord muscle UBERON:0002378 muscle of abdomen https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_sphincter-urethrae-muscle sphincter urethrae muscle UBERON:0002379 perineal muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle spinotransversales muscle UBERON:0002324 muscle of back https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_splenius-capitus-muscle splenius capitus muscle https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle spinotransversales muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle sternal part of respiratory diaphragm muscle https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle respiratory diaphragm muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_sternocostal-head-of-pectoralis-major-muscle sternocostal head of pectoralis major muscle UBERON:0002381 pectoralis major https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_superficial-back-muscle superficial back muscle UBERON:0002324 muscle of back https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_superior-head-of-lateral-pterygoid-muscle superior head of lateral pterygoid muscle UBERON:0006719 lateral pterygoid muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_superior-longitudinal-lingual-muscle superior longitudinal lingual muscle UBERON:0001576 intrinsic muscle of tongue https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_tensor-fascia-latae-muscle tensor fascia latae muscle UBERON:0002000 gluteal muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle thoracic intertransversarii muscle https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle thoracic wall muscle UBERON:0002426 chest muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 group +muscular-system https://purl.org/ccf/ASCTB-TEMP_thyroepiglottic-part-of-thyroarytenoid-muscle thyroepiglottic part of thyroarytenoid muscle http://purl.org/sig/ont/fma/fma46588 Thyro-arytenoid https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_thyropharyngeal-part-of-inferior-pharyngeal-constrictor-muscle thyropharyngeal part of inferior pharyngeal constrictor muscle http://purl.org/sig/ont/fma/fma46623 Inferior pharyngeal constrictor https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_tibalis-anterior-muscle tibalis anterior muscle http://purl.org/sig/ont/fma/fma22472 Muscle of anterior compartment of leg https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_tibalis-posterior-muscle tibalis posterior muscle http://purl.org/sig/ont/fma/fma22474 Muscle of posterior compartment of leg https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_transverse-muscle transverse muscle UBERON:0001576 intrinsic muscle of tongue https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle ventral part of intertransversarii laterales lumborum muscle https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf +muscular-system https://purl.org/ccf/ASCTB-TEMP_vertical-muscle vertical muscle UBERON:0001576 intrinsic muscle of tongue https://fipat.library.dal.ca/ta2/, ISBN:9780323393225 leaf diff --git a/src/templates/hra-muscular-reports/manual_curation.tsv b/src/templates/hra-muscular-reports/manual_curation.tsv new file mode 100644 index 000000000..62faa3b81 --- /dev/null +++ b/src/templates/hra-muscular-reports/manual_curation.tsv @@ -0,0 +1,4 @@ +label definition reason similar_terms suggestion +pelvic floor muscle A group of skeletal muscles that form the floor of the pelvic cavity, supporting the pelvic viscera and surrounding the urogenital and anal openings, comprising the levator ani and coccygeus muscles. No UBERON term currently exists for 'pelvic floor' or 'pelvic diaphragm' as an anatomical region — only the constituent muscles (levator ani UBERON:0001326, coccygeus UBERON:0001327) and the broader pelvic region (UBERON:0002355) are represented. The simple genus + part_of pattern needs a target term for the pelvic floor itself. UBERON:0001325=muscle of pelvis; UBERON:0001326=levator ani muscle; UBERON:0001327=coccygeus muscle Either (a) add a new region term 'pelvic floor' / 'pelvic diaphragm' and define this group as skeletal muscle organ part_of that, or (b) define as has_part levator_ani and has_part coccygeus, or (c) treat as a subclass of muscle of pelvis (UBERON:0001325) without an EC definition. +dorsum of foot muscle A group of skeletal muscles located on the dorsal aspect of the foot, comprising the extensor digitorum brevis and extensor hallucis brevis, which act to extend the toes. No UBERON term exists for 'dorsum of foot' / 'dorsal region of pes' as a region. The only dorsal pes term found is UBERON:0006499 dorsal pes interosseous muscle (a specific muscle, not a region). Simple genus + part_of pattern cannot be applied without a region target. UBERON:0008338=plantar part of pes Add a new region term 'dorsal part of pes' (analogous to UBERON:0008338 plantar part of pes) and define this group as skeletal muscle organ part_of that region. Alternatively define by membership (has_part extensor digitorum brevis, has_part extensor hallucis brevis). +longitudinal pharyngeal muscle A group of skeletal muscles oriented longitudinally in the pharyngeal wall that act to elevate the pharynx and larynx during swallowing, comprising the stylopharyngeus, palatopharyngeus, and salpingopharyngeus muscles. This is a sub-grouping of pharyngeal muscles defined by fibre orientation (longitudinal) within the pharyngeal wall — not a simple part_of-defined subset. UBERON's circular counterpart (UBERON:0001569 constrictor muscle of pharynx) is is_a UBERON:0000933 chordate pharyngeal muscle without an EC axiom on orientation. The simple genus + part_of pattern cannot express fibre orientation. UBERON:0001569=constrictor muscle of pharynx; UBERON:0000933=chordate pharyngeal muscle Either model as subclass of chordate pharyngeal muscle (UBERON:0000933) without an EC, mirroring how UBERON:0001569 is handled, or add a new relation/property for muscle fibre orientation. Note that circular pharyngeal muscle (the sibling) maps directly to UBERON:0001569 — see confirmed_matches. diff --git a/src/templates/hra-muscular-reports/name_corrections.tsv b/src/templates/hra-muscular-reports/name_corrections.tsv new file mode 100644 index 000000000..0e3de9fd2 --- /dev/null +++ b/src/templates/hra-muscular-reports/name_corrections.tsv @@ -0,0 +1,18 @@ +source_label corrected_label reason +tibalis anterior muscle tibialis anterior muscle Typo: 'tibalis' should be 'tibialis'. The corrected form is the standard TA2 name and is already recorded as an EXACT synonym of UBERON:0001385. +tibalis posterior muscle tibialis posterior muscle Spelling error — missing 'i'. Standard anatomical term is 'tibialis posterior muscle' (already a related synonym on UBERON:0001667). Term is a confirmed existing match so no new term is needed; record correction for the candidates/QC report. +interspinales cervicalis muscle interspinales cervicis muscle TA2 / standard anatomical nomenclature uses 'musculi interspinales cervicis' (genitive 'cervicis', not 'cervicalis'). 'Cervicalis' is grammatically the adjective form, but the established TA term is 'interspinales cervicis'. Keep 'interspinales cervicalis muscle' as a related synonym. +inferior longitudinal lingual muscle inferior longitudinal muscle of tongue UBERON convention (see UBERON:0008582 'superior longitudinal muscle of tongue', UBERON:0008583 'transverse muscle of tongue', UBERON:0008584 'vertical muscle of tongue') uses 'X muscle of tongue' rather than 'X lingual muscle'. Keep source name as EXACT synonym. +iliocostalis cervicalis muscle iliocostalis cervicis muscle Standard TA2 form uses Latin genitive 'cervicis' (of the neck), not adjectival 'cervicalis'. UBERON:0008546 uses 'iliocostalis cervicis muscle'. Source spelling could be retained as RELATED synonym. +pteryopharyngeal part of superior pharyngeal constrictor muscle pterygopharyngeal part of superior pharyngeal constrictor muscle Source spelling 'pteryopharyngeal' is missing the 'g' from the Greek root 'pteryg-' (wing, referring to the pterygoid process). Standard TA2/FMA/UBERON form is 'pterygopharyngeal' (UBERON:0010956, FMA:46638). Source spelling could be retained as RELATED synonym. +lateral compartmet of leg muscle lateral compartment of leg muscle Typo in source label: 'compartmet' -> 'compartment'. Keep source name as related synonym. +transverse muscle transverse muscle of tongue Source label 'transverse muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'transverse muscle of tongue' (UBERON:0008583). Already carries 'transverse muscle' as a RELATED synonym, so no synonym addition is needed. +vertical muscle vertical muscle of tongue Source label 'vertical muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'vertical muscle of tongue' (UBERON:0008584). Already carries 'vertical muscle' as a RELATED synonym, so no synonym addition is needed. +superior longitudinal lingual muscle superior longitudinal muscle of tongue Source label uses 'lingual muscle' word order; UBERON's canonical label is 'superior longitudinal muscle of tongue' (UBERON:0008582). Consider adding 'superior longitudinal lingual muscle' as an EXACT synonym to aid matching from HRA/ASCTB sources. +tensor fascia latae muscle tensor fasciae latae muscle Standard anatomical Latin uses the genitive 'fasciae' (of the fascia), not nominative 'fascia'. UBERON:0001376 already carries 'tensor fasciae lata muscle' as an EXACT synonym; the source variant 'tensor fascia latae muscle' could be added as an additional synonym if not already covered. +longus capitus muscle longus capitis muscle 'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical term is 'longus capitis muscle' (TA2). Already present in UBERON as UBERON:0001563 with the misspelled form already captured as a RELATED synonym. +puboperineales muscle puboperinealis muscle TA2 Latin form is 'musculus puboperinealis' (singular); 'puboperineales' is the plural Latin adjective form used inconsistently. The standard English label is 'puboperinealis muscle' or 'puboperineal muscle'. Keep source name as a synonym. +rectus capitus anterior muscle rectus capitis anterior muscle Standard anatomical Latin is 'capitis' (genitive of caput), not 'capitus'. The source variant is already captured as a RELATED synonym on UBERON:0008453. +sternal part of respiratory diaphragm muscle sternal part of diaphragm UBERON uses 'diaphragm' (UBERON:0001103) as the standard label; FMA and TA2 use 'sternal part of diaphragm' (FMA:58278, 'pars sternalis diaphragmatis'). The source 'respiratory diaphragm muscle' phrasing is non-standard. Keep source name as RELATED synonym. +splenius capitus muscle splenius capitis 'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical nomenclature (TA2, FMA:22653) uses 'splenius capitis'. The existing UBERON:0000711 already carries 'splenius capitis muscle' as an EXACT synonym. Source label should be treated as a typographical variant; no new term required. +rectus capitius posterior minor muscle rectus capitis posterior minor Input contains a misspelling: 'capitius' is a typo for 'capitis' (genitive of Latin caput, head). The correctly spelled term already exists in UBERON as UBERON:0008455. The variant 'rectus capitus posterior minor muscle' is already registered there as a RELATED synonym; the input form 'rectus capitius posterior minor muscle' could also be added as an additional misspelling synonym if desired. diff --git a/src/templates/hra-muscular-reports/review.tsv b/src/templates/hra-muscular-reports/review.tsv new file mode 100644 index 000000000..1e3ee499d --- /dev/null +++ b/src/templates/hra-muscular-reports/review.tsv @@ -0,0 +1,76 @@ +table as_iri label term_type source_parent_id source_parent_label status mapped_uberon_id mapped_label label_correction label_correction_reason parent_correction parent_correction_label mapping_evidence curator_notes +muscular-system https://purl.org/ccf/ASCTB-TEMP_anterior-cervical-intertransversarii-muscle anterior cervical intertransversarii muscle leaf https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle new_term_leaf UBERON:9900001 (new term: anterior cervical intertransversarii muscle) UBERON:0006072 cervical region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_anterior-vertebral-muscle anterior vertebral muscle group UBERON:0002377 muscle of neck confirmed_match UBERON:0008549 prevertebral muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_articularis-genu-muscle articularis genu muscle leaf http://purl.org/sig/ont/fma/fma22424 Muscle of anterior compartment of thigh new_term_leaf UBERON:9900003 (new term: articularis genu muscle) UBERON:0000376 hindlimb stylopod +muscular-system https://purl.org/ccf/ASCTB-TEMP_aryepiglottic-part-of-oblique-arytenoid-muscle aryepiglottic part of oblique arytenoid muscle leaf http://purl.org/sig/ont/fma/fma46583 Oblique arytenoid confirmed_match UBERON:0011025 aryepiglotticus muscle UBERON:0011025 'aryepiglotticus muscle' already records the exact synonym 'ary-epiglottic part of oblique arytenoid' with xref FMA:46602, and is asserted part_of UBERON:0008575 (oblique arytenoid, FMA:46583). The source FMA parent FMA:46583 maps to UBERON:0008575. No new term required. +muscular-system https://purl.org/ccf/ASCTB-TEMP_ceratoglossus-of-hyoglossus-muscle ceratoglossus of hyoglossus muscle leaf UBERON:0001572 hyoglossus muscle confirmed_match UBERON:0008428 ceratoglossus Source label 'ceratoglossus of hyoglossus muscle' is a longer descriptive variant of the UBERON primary label 'ceratoglossus' (synonym 'ceratoglossus muscle'). Same structure: a named subdivision of the hyoglossus muscle. Excluded from new-term template; the source label could optionally be added as a RELATED synonym to UBERON:0008428. +muscular-system https://purl.org/ccf/ASCTB-TEMP_chondroglossus-of-hyoglossus-muscle chondroglossus of hyoglossus muscle leaf UBERON:0001572 hyoglossus muscle confirmed_match UBERON:0011535 chondroglossus muscle Source label 'chondroglossus of hyoglossus muscle' is a descriptive variant of the UBERON primary label 'chondroglossus muscle'. Same structure: a subdivision of (or muscle slip associated with) the hyoglossus. Excluded from new-term template; the source label could optionally be added as a RELATED synonym to UBERON:0011535. +muscular-system https://purl.org/ccf/ASCTB-TEMP_circular-pharyngeal-muscle circular pharyngeal muscle group UBERON:0002377 muscle of neck confirmed_match UBERON:0001569 constrictor muscle of pharynx +muscular-system https://purl.org/ccf/ASCTB-TEMP_clavicular-head-of-pectoralis-major-muscle clavicular head of pectoralis major muscle leaf UBERON:0002381 pectoralis major new_term_leaf UBERON:9900008 (new term: clavicular head of pectoralis major muscle) UBERON:0002381 pectoralis major +muscular-system https://purl.org/ccf/ASCTB-TEMP_costal-part-of-respiratory-diaphragm-muscle costal part of respiratory diaphragm muscle leaf UBERON:0000975 sternum confirmed_match UBERON:0035831 costal diaphragm UBERON:0035831 has EXACT synonym 'costal part of diaphragm' (FMA:58277). The source label 'respiratory diaphragm muscle' resolves to UBERON:0001103 (diaphragm), which has 'diaphragm muscle' as an EXACT synonym. Therefore 'costal part of respiratory diaphragm muscle' = 'costal part of diaphragm' = UBERON:0035831. FMA xref also aligns (FMA:58277). Supplied parent UBERON:0000975 is 'sternum' — wrong anatomical domain for a part of the diaphragm. The correct parent for a costal-diaphragm subdivision is UBERON:0001103 (diaphragm). The existing UBERON term UBERON:0035831 (costal diaphragm) already has 'part_of UBERON:0001103'. || SUGGESTION: Use UBERON:0001103 (diaphragm) as the parent. No new term needed: confirmed match to UBERON:0035831 makes this term ineligible for the leaf template. +muscular-system https://purl.org/ccf/ASCTB-TEMP_dorsal-part-of-intertransversarii-laterales-lumborum-muscle dorsal part of intertransversarii laterales lumborum muscle leaf https://purl.org/ccf/ASCTB-TEMP_meningohypophyseal-artery meningohypophyseal artery new_term_leaf UBERON:9900010 (new term: dorsal part of intertransversarii laterales lumborum muscle) UBERON:0001137 dorsum Source-supplied parent label 'meningohypophyseal artery' is wrong-domain (a cranial artery cannot parent a lumbar back muscle) and is clearly a data-entry error in the input. The parent muscle 'intertransversarii laterales lumborum' (FMA:32576 / FMA:32577) and the higher class 'intertransversarii lumborum' do not yet exist in UBERON, so no exact named-muscle parent is available; the dorsal part has been placed under genus UBERON:0001630 (muscle organ) and part_of UBERON:0001137 (dorsum/back) by analogy with other deep back muscles such as longissimus, spinalis, and rotator muscle of the vertebral column. The bone-landmark 'accessory process of lumbar vertebra' is not in UBERON, so the more general UBERON:0001077 (transverse process of vertebra) is used for has_muscle_origin (the accessory process is a small projection on the posterior aspect of the transverse process region). || SUGGESTION: Curator should: (1) consider adding parent terms 'intertransversarii lumborum muscle group' and 'intertransversarii laterales lumborum muscle' to UBERON (FMA:32576, FMA:32577) so this dorsal part can be made part_of its true named-muscle parent; (2) optionally add 'accessory process of lumbar vertebra' (FMA:34047) for a more precise has_muscle_origin; (3) consider whether a 'muscle of vertebral column' is_a (UBERON:0004518) is preferable to the generic muscle organ once the parent muscle exists. +muscular-system https://purl.org/ccf/ASCTB-TEMP_dorsum-of-foot-muscle dorsum of foot muscle group https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle manual_curation MANUAL_CURATION: No UBERON term exists for 'dorsum of foot' / 'dorsal region of pes' as a region. The only dorsal pes term found is UBERON:0006499 dorsal pes interosseous muscle (a specific muscle, not a region). Simple genus + part_of pattern cannot be applied without a region target. +muscular-system https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle external anal sphincter muscle leaf UBERON:0001876 amygdala confirmed_match UBERON:0001367 external anal sphincter Source label 'external anal sphincter muscle' is the same structure as UBERON:0001367 'external anal sphincter' (synonyms include 'musculus sphincter ani externus'). UBERON:0001367 has FMA:21930, MA:0001531, Wikipedia:Sphincter_ani_externus_muscle. Source ASCTB-TEMP IRI should be added as a synonym/xref on UBERON:0001367 rather than a new term being created. Source parent UBERON:0001876 (amygdala) is clearly a spurious/erroneous mapping in the input — the intended parent is a sphincter muscle / anal region skeletal muscle class, which UBERON:0001367 already has (is_a UBERON:0004590 sphincter muscle; is_a UBERON:0004832 anal region skeletal muscle; part_of UBERON:0006867 anal part of perineum; surrounds UBERON:0001245 anus). Source parent_id UBERON:0001876 resolves to 'amygdala' — a brain region, evidently a data-entry error in the ASCTB-TEMP input. Not an issue for output (term is a confirmed_match excluded from template), but flagged for curator awareness. || SUGGESTION: Curator should add ASCTB-TEMP source IRI (https://purl.org/ccf/ASCTB-TEMP_external-anal-sphincter-muscle) and 'external anal sphincter muscle' as a synonym to UBERON:0001367. No new term needed. +muscular-system https://purl.org/ccf/ASCTB-TEMP_external-ear-muscle external ear muscle group UBERON:0001678 temporal bone new_term_group UBERON:9900013 (new term: external ear muscle) UBERON:0001691 external ear +muscular-system https://purl.org/ccf/ASCTB-TEMP_frontal-belly-of-occipitofrontalis-muscle frontal belly of occipitofrontalis muscle leaf UBERON:0005893 leg bone confirmed_match UBERON:0010952 frontalis muscle belly UBERON:0010952 'frontalis muscle belly' carries the exact synonym 'frontal belly of occipitofrontalis' (FMA:46757) and the related synonym 'frontal belly of occipitofrontalis muscle' (Wikipedia:Frontalis_muscle). Source parent UBERON:0005893 'leg bone' is clearly an erroneous parent assignment in the HRA input (likely a data alignment error) — the term itself is a well-established existing UBERON class. Exclude from template. Source parent UBERON:0005893 is 'leg bone' — clearly an incorrect parent for a facial muscle belly. Flag for curator review of the input row, but no action needed in template since the term is a confirmed existing match. || SUGGESTION: Curator: verify HRA source row; the term itself already exists as UBERON:0010952. +muscular-system https://purl.org/ccf/ASCTB-TEMP_hamstring-portion-of-adductor-magnus-muscle hamstring portion of adductor magnus muscle leaf UBERON:0001092 vertebral bone 1 new_term_leaf UBERON:9900015 (new term: hamstring portion of adductor magnus muscle) UBERON:0000370 adductor magnus Source parent UBERON:0001092 (vertebral bone 1 / atlas vertebra) is anatomically incorrect for a thigh muscle subdivision. Refined parent is UBERON:0000370 (adductor magnus), with the term modelled as a muscle head (UBERON:0011906) part_of adductor magnus. || SUGGESTION: Use UBERON:0000370 as the part_of parent. UBERON:0000370's own definition explicitly describes this 'hamstring portion' as the part arising from the ischial tuberosity. +muscular-system https://purl.org/ccf/ASCTB-TEMP_hypothenar-hand-muscle hypothenar hand muscle group UBERON:0001677 sphenoid bone confirmed_match UBERON:0014377 hypothenar muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_iliocostalis-cervicalis-muscle iliocostalis cervicalis muscle leaf UBERON:0001272 innominate bone confirmed_match UBERON:0008546 iliocostalis cervicis muscle iliocostalis cervicis muscle Standard TA2 form uses Latin genitive 'cervicis' (of the neck), not adjectival 'cervicalis'. UBERON:0008546 uses 'iliocostalis cervicis muscle'. Source spelling could be retained as RELATED synonym. Source label 'iliocostalis cervicalis muscle' is a spelling variant of the standard TA2 form 'iliocostalis cervicis muscle' (UBERON:0008546, FMA:22704). Same anatomical structure. Curator should consider adding 'iliocostalis cervicalis muscle' as a RELATED synonym. +muscular-system https://purl.org/ccf/ASCTB-TEMP_inferior-head-of-lateral-pterygoid-muscle inferior head of lateral pterygoid muscle leaf https://purl.org/ccf/ASCTB-TEMP_supraperiosteal-arteriole supraperiosteal arteriole new_term_leaf UBERON:9900018 (new term: inferior head of lateral pterygoid muscle) UBERON:0006719 lateral pterygoid muscle Source parent label 'supraperiosteal arteriole' is wrong-domain (a vascular structure) for this masticatory muscle head; the parent was overridden based on the child term itself. || SUGGESTION: Use UBERON:0011906 (muscle head) as genus and UBERON:0006719 (lateral pterygoid muscle) as part_of; this mirrors the UBERON pattern for UBERON:0007168 (long head of biceps brachii) and similar muscle-head terms. +muscular-system https://purl.org/ccf/ASCTB-TEMP_inferior-longitudinal-lingual-muscle inferior longitudinal lingual muscle leaf UBERON:0001194 splenic artery new_term_leaf UBERON:9900019 (new term: inferior longitudinal lingual muscle) inferior longitudinal muscle of tongue UBERON convention (see UBERON:0008582 'superior longitudinal muscle of tongue', UBERON:0008583 'transverse muscle of tongue', UBERON:0008584 'vertical muscle of tongue') uses 'X muscle of tongue' rather than 'X lingual muscle'. Keep source name as EXACT synonym. UBERON:0001723 tongue Input parent_id UBERON:0001194 resolves to 'splenic artery' — clearly wrong for this term. Correct parent assigned from anatomical context: UBERON:0001576 'intrinsic muscle of tongue' (genus), mirroring sibling intrinsic tongue muscles (UBERON:0008582 superior longitudinal, UBERON:0008583 transverse, UBERON:0008584 vertical). || SUGGESTION: Verify upstream parent ID assignment; the source row likely intended UBERON:0001576 (intrinsic muscle of tongue) or UBERON:0000378 (tongue muscle). +muscular-system https://purl.org/ccf/ASCTB-TEMP_intermediate-back-muscle intermediate back muscle group UBERON:0002397 maxilla new_term_group UBERON:9900020 (new term: intermediate back muscle) UBERON:0001137 dorsum +muscular-system https://purl.org/ccf/ASCTB-TEMP_internal-abdominal-oblique-muscle internal abdominal oblique muscle leaf UBERON:0003690 fused sacrum confirmed_match UBERON:0005454 abdominal internal oblique muscle Source label 'internal abdominal oblique muscle' is an existing RELATED synonym of UBERON:0005454 (primary label: 'abdominal internal oblique muscle'). FMA:13891. The input parent UBERON:0003690 ('fused sacrum') is clearly incorrect for a muscle term; the genuine UBERON parent is UBERON:0035032 (abdominal oblique muscle). +muscular-system https://purl.org/ccf/ASCTB-TEMP_interspinales-cervicalis-muscle interspinales cervicalis muscle leaf UBERON:0000979 tibia new_term_leaf UBERON:9900022 (new term: interspinales cervicalis muscle) interspinales cervicis muscle TA2 / standard anatomical nomenclature uses 'musculi interspinales cervicis' (genitive 'cervicis', not 'cervicalis'). 'Cervicalis' is grammatically the adjective form, but the established TA term is 'interspinales cervicis'. Keep 'interspinales cervicalis muscle' as a related synonym. UBERON:0000974 neck Source-supplied parent_id UBERON:0000979 resolves to 'tibia', which is clearly an upstream data error (interspinales cervicis is a deep neck muscle, not a leg bone). Used anatomical knowledge and similar UBERON deep neck muscles (rectus capitis posterior major UBERON:0008454, longus colli UBERON:0001121, semispinalis cervicis precedent) to determine the appropriate genus and part_of. || SUGGESTION: Curator should ignore the source UBERON:0000979 parent assignment. The chosen genus 'muscle of vertebral column' (UBERON:0004518) is consistent with other named vertebral-column muscles in UBERON; part_of 'neck' (UBERON:0000974) follows the precedent of rectus capitis posterior major. has_muscle_origin and has_muscle_insertion are both set to UBERON:0001076 (neural spine / spinous process of vertebra) because the muscle spans between adjacent cervical spinous processes; UBERON does not currently have a more specific 'spinous process of cervical vertebra' class. innervated_by is the dorsal ramus of spinal nerve (UBERON:0006839); a more specific 'medial branch of dorsal ramus of cervical spinal nerve' class does not exist in UBERON. +muscular-system https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle leaf https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle new_term_leaf UBERON:9900023 (new term: intertransversarii laterales lumborum muscle) UBERON:0006074 lumbar region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_intrinsic-eye-muscle intrinsic eye muscle group https://purl.org/ccf/ASCTB-TEMP_posterolateral-spinal-vein posterolateral spinal vein confirmed_match UBERON:0011222 intra-ocular muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-compartmet-of-leg-muscle lateral compartmet of leg muscle leaf UBERON:0001537 anterior tibial artery new_term_leaf UBERON:9900025 (new term: lateral compartmet of leg muscle) lateral compartment of leg muscle Typo in source label: 'compartmet' -> 'compartment'. Keep source name as related synonym. UBERON:0014892 skeletal muscle organ, vertebrate +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-posterior-cervical-intertransversarii-muscle lateral posterior cervical intertransversarii muscle leaf UBERON:0001546 posterior tibial vein new_term_leaf UBERON:9900026 (new term: lateral posterior cervical intertransversarii muscle) UBERON:0000974 neck Source parent_id UBERON:0001546 resolves to 'posterior tibial vein', which is anatomically incorrect for a cervical paraspinal muscle. No specific UBERON term currently exists for this muscle; closest existing classes are UBERON:0001630 (muscle organ) as genus and UBERON:0004465 (musculature of neck) as collective. Existing 'm. intertransversarius capitis' classes (UBERON:3010664, UBERON:3010667) are amphibian-sourced and not equivalent. || SUGGESTION: Use UBERON:0001630 (muscle organ) as is_a and UBERON:0000974 (neck) as part_of, with has_muscle_origin/insertion = UBERON:0018143 (transverse process of cervical vertebra) and innervated_by = UBERON:0006838 (ventral ramus of spinal nerve). No real PMID located; rely on existing def_xref (FIPAT TA2 + ISBN:9780323393225 Drake Gray's Anatomy + ASCTB-TEMP placeholder); curator may wish to add a primary anatomical reference such as Standring Gray's Anatomy. +muscular-system https://purl.org/ccf/ASCTB-TEMP_lateral-vertebral-muscle lateral vertebral muscle group UBERON:0002250 popliteal artery confirmed_match UBERON:0008611 scalene muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_left-crus-of-lumbar-part-of-respiratory-diaphragm-muscle left crus of lumbar part of respiratory diaphragm muscle leaf http://purl.org/sig/ont/fma/fma323951 Pre-aortic thoracic lymph node group confirmed_match UBERON:0014767 left crus of diaphragm UBERON:0014767 explicitly carries the synonym 'left crus of lumbar part of diaphragm' (EXACT, FMA:58287). The input label adds 'respiratory ... muscle' but refers to the same anatomical structure. FMA:323951 was not directly xref'd in UBERON but UBERON:0014767 carries FMA:58287 for the same structure. FMA:323951 (lumbar part of diaphragm) is not directly xref'd in UBERON. The closest UBERON concept is UBERON:0014765 'crus of diaphragm' (which is the lumbar/vertebral part of the diaphragm). Not needed here because the child term itself matches an existing UBERON term. || SUGGESTION: If a separate UBERON term for the lumbar part of the diaphragm is desired, it could be added with FMA:323951 as xref; otherwise treat UBERON:0014765 as functionally equivalent. +muscular-system https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle levator costarum muscle leaf UBERON:0001677 sphenoid bone confirmed_match UBERON:8410070 +muscular-system https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-breves-of-levator-costarum-muscle levatores costarum breves of levator costarum muscle leaf https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle thoracic wall muscle new_term_leaf UBERON:9900030 (new term: levatores costarum breves of levator costarum muscle) UBERON:8410070 levator costarum Source-assigned grouping parent 'thoracic wall muscle' has no exact UBERON equivalent. The closest grouping classes in UBERON are UBERON:0002426 (chest muscle) and UBERON:0016403 (thoracic wall, anatomical region). However, the specific parent muscle 'levator costarum' (UBERON:8410070) already exists in UBERON and is itself is_a UBERON:0002426 ! chest muscle, so the chain is preserved. || SUGGESTION: Use part_of UBERON:8410070 (levator costarum) as the immediate containing structure; is_a UBERON:0014892 (skeletal muscle organ, vertebrate) supplies the genus class. The thoracic-wall-muscle grouping is implicit via the parent muscle's own is_a chain. No new grouping term is required. +muscular-system https://purl.org/ccf/ASCTB-TEMP_levatores-costarum-longi-of-levator-costarum-muscle levatores costarum longi of levator costarum muscle leaf https://purl.org/ccf/ASCTB-TEMP_levator-costarum-muscle levator costarum muscle new_term_leaf UBERON:9900031 (new term: levatores costarum longi of levator costarum muscle) UBERON:8410070 levator costarum Parent 'levator costarum muscle' resolves to UBERON:8410070 (levator costarum). The source label suggests these are a named sub-component (the long fasciculi of the four lower levatores costarum). UBERON has no specific class for this sub-component, but the parent UBERON:8410070 itself already covers the levatores costarum collectively (its definition explicitly references both 'levatores costarum breves' and 'levatores costarum longi' as the two fasciculi of each muscle). || SUGGESTION: Curator decision needed: (a) accept this NTR as a part_of subdivision of UBERON:8410070 with genus 'skeletal muscle organ, vertebrate' (UBERON:0014892), as encoded in leaf_template_rows; OR (b) drop the NTR and instead add 'levatores costarum longi' as an EXACT synonym (with a clarifying scope) on UBERON:8410070, since the parent term's textual definition already enumerates the longi/breves fasciculi. Option (b) is more parsimonious if HRA only needs name-level findability. Option (a) is preferred if the longi fasciculus must be addressable as a distinct entity (e.g. for downstream attachment/innervation annotation). Innervation set to dorsal ramus of spinal nerve (UBERON:0006839) following Morrison 1953 (PMID:13129167). +muscular-system https://purl.org/ccf/ASCTB-TEMP_longitudinal-pharyngeal-muscle longitudinal pharyngeal muscle group https://purl.org/ccf/ASCTB-TEMP_vasa-recta-of-colon vasa recta of colon manual_curation MANUAL_CURATION: This is a sub-grouping of pharyngeal muscles defined by fibre orientation (longitudinal) within the pharyngeal wall — not a simple part_of-defined subset. UBERON's circular counterpart (UBERON:0001569 constrictor muscle of pharynx) is is_a UBERON:0000933 chordate pharyngeal muscle without an EC axiom on orientation. The simple genus + part_of pattern cannot express fibre orientation. +muscular-system https://purl.org/ccf/ASCTB-TEMP_longus-capitus-muscle longus capitus muscle leaf UBERON:0002377 muscle of neck confirmed_match UBERON:0001563 longus capitis muscle longus capitis muscle 'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical term is 'longus capitis muscle' (TA2). Already present in UBERON as UBERON:0001563 with the misspelled form already captured as a RELATED synonym. Source label 'longus capitus muscle' is a misspelling of 'longus capitis muscle'. UBERON:0001563 already lists 'longus capitus muscle' as a RELATED synonym (xref Wikipedia:Longus_capitis_muscle), confirming the match. Existing UBERON term already has has_muscle_origin (UBERON:0001077 transverse process of vertebra), has_muscle_insertion (UBERON:0001692 basioccipital bone), innervated_by (UBERON:0000962 nerve of cervical vertebra), depiction image, and FMA:46308 xref. No new term needed. +muscular-system https://purl.org/ccf/ASCTB-TEMP_medial-lumbar-intertransversarii-muscle medial lumbar intertransversarii muscle leaf https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle new_term_leaf UBERON:9900034 (new term: medial lumbar intertransversarii muscle) UBERON:0006074 lumbar region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_medial-posterior-cervical-intertransversarii-muscle medial posterior cervical intertransversarii muscle leaf https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle new_term_leaf UBERON:9900035 (new term: medial posterior cervical intertransversarii muscle) UBERON:0006072 cervical region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_middle-ear-muscle middle ear muscle group UBERON:0002376 cranial muscle new_term_group UBERON:9900036 (new term: middle ear muscle) UBERON:0001756 middle ear +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-cervicis-muscle multifidus cervicis muscle leaf UBERON:0010990 transversospinales muscle new_term_leaf UBERON:9900037 (new term: multifidus cervicis muscle) UBERON:0006072 cervical region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-lumborum-muscle multifidus lumborum muscle leaf UBERON:0010990 transversospinales muscle new_term_leaf UBERON:9900038 (new term: multifidus lumborum muscle) UBERON:0006074 lumbar region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_multifidus-thoracis-muscle multifidus thoracis muscle leaf UBERON:0010990 transversospinales muscle new_term_leaf UBERON:9900039 (new term: multifidus thoracis muscle) UBERON:0006073 thoracic region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_muscle-of-facial-expression muscle of facial expression group UBERON:0002376 cranial muscle confirmed_match UBERON:0001577 facial muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_musculus-uvulae-muscle musculus uvulae muscle leaf UBERON:0003682 palatal muscle confirmed_match UBERON:0010235 uvular muscle UBERON:0010235 'uvular muscle' has 'musculus uvulae muscle' as a RELATED synonym (Wikipedia:Musculus_uvulae) and xref FMA:46733. Same structure; existing UBERON term should be reused. Parent UBERON:0003682 palatal muscle already matches the source-supplied parent. Existing UBERON term already encodes has_muscle_origin (hard palate), has_muscle_insertion (palatine uvula, palatine aponeurosis), and innervated_by (pharyngeal branch of vagus nerve). +muscular-system https://purl.org/ccf/ASCTB-TEMP_occipital-belly-of-occipitofrontalis-muscle occipital belly of occipitofrontalis muscle leaf https://purl.org/ccf/ASCTB-TEMP_neuromeningeal-trunk neuromeningeal trunk confirmed_match UBERON:0010947 occipitalis UBERON:0010947 'occipitalis' carries the EXACT synonym 'occipital belly of occipitofrontalis' (FMA:46758) and 'occipital part of occipitofrontalis'. Same FMA ID confirms identity. The source-supplied parent 'neuromeningeal trunk' is a wrong-domain (nerve trunk) label; the correct parent context is UBERON:0010946 occipitofrontalis muscle (the term already has is_a UBERON:0010938 muscle belly and part_of UBERON:0010946). +muscular-system https://purl.org/ccf/ASCTB-TEMP_opponens-digiti-minimi-muscle opponens digiti minimi muscle leaf UBERON:0001624 anterior cerebral artery confirmed_match UBERON:0036176 opponens digiti minimi of hand The label 'opponens digiti minimi muscle' is the standard anatomical name for the hand muscle (TA2 / Wikipedia). UBERON:0036176 carries 'opponens digiti minimi' and 'opponens digiti minimi (hand)' as synonyms, with xrefs FMA:37384, Wikipedia:Opponens_digiti_minimi_muscle. The source parent UBERON:0001624 (anterior cerebral artery) is clearly an upstream error and unrelated — confirmed match relies on label/synonym evidence, not the supplied parent. Source-supplied parent_id UBERON:0001624 resolves to 'anterior cerebral artery', which is anatomically unrelated to a hand muscle. This appears to be an upstream parent-mapping error in the HRA ASCTB input. || SUGGESTION: Curator should report/correct the source parent assignment. The term itself already exists as UBERON:0036176 and is excluded from the new-term template. +muscular-system https://purl.org/ccf/ASCTB-TEMP_palmar-interosseous-muscle palmar interosseous muscle group UBERON:0009095 tip of renal papilla confirmed_match UBERON:0006505 palmar interosseous muscle of manus +muscular-system https://purl.org/ccf/ASCTB-TEMP_pelvic-floor-muscle pelvic floor muscle group https://purl.org/ccf/ASCTB-TEMP_periductal-branch-of-lobular-artery-of-pancreas periductal branch of lobular artery of pancreas manual_curation MANUAL_CURATION: No UBERON term currently exists for 'pelvic floor' or 'pelvic diaphragm' as an anatomical region — only the constituent muscles (levator ani UBERON:0001326, coccygeus UBERON:0001327) and the broader pelvic region (UBERON:0002355) are represented. The simple genus + part_of pattern needs a target term for the pelvic floor itself. +muscular-system https://purl.org/ccf/ASCTB-TEMP_plantar-interosseous-muscle plantar interosseous muscle group https://purl.org/ccf/ASCTB-TEMP_sheathed-capillary-of-spleen sheathed capillary of spleen, Sheathed capillary of spleen confirmed_match UBERON:0006502 plantar interosseous muscle of pes +muscular-system https://purl.org/ccf/ASCTB-TEMP_posterior-abdominal-wall-muscle posterior abdominal wall muscle group UBERON:0001092 vertebral bone 1 new_term_group UBERON:9900047 (new term: posterior abdominal wall muscle) UBERON:0003697 abdominal wall +muscular-system https://purl.org/ccf/ASCTB-TEMP_pteryopharyngeal-part-of-superior-pharyngeal-constrictor-muscle pteryopharyngeal part of superior pharyngeal constrictor muscle leaf UBERON:0001272 innominate bone confirmed_match UBERON:0010956 pterygopharyngeal part of superior pharyngeal constrictor pterygopharyngeal part of superior pharyngeal constrictor muscle Source spelling 'pteryopharyngeal' is missing the 'g' from the Greek root 'pteryg-' (wing, referring to the pterygoid process). Standard TA2/FMA/UBERON form is 'pterygopharyngeal' (UBERON:0010956, FMA:46638). Source spelling could be retained as RELATED synonym. Source label 'pteryopharyngeal' is a typographical variant (missing 'g') of the standard TA2/FMA form 'pterygopharyngeal' (UBERON:0010956, FMA:46638). Same anatomical structure. Curator should consider adding the source spelling as a RELATED synonym. +muscular-system https://purl.org/ccf/ASCTB-TEMP_puboanalis-muscle puboanalis muscle leaf UBERON:8600052 subsegmental pulmonary vein new_term_leaf UBERON:9900049 (new term: puboanalis muscle) UBERON:0001326 levator ani muscle Source parent UBERON:8600052 not present in uberon-edit.obo (presumably a recently minted grouping class). Followed the precedent of sibling levator ani components (puborectalis UBERON:0011512, pubococcygeus UBERON:0011528, iliococcygeus UBERON:0011398) which all use is_a muscle of pelvis (UBERON:0001325) and part_of levator ani muscle (UBERON:0001326). || SUGGESTION: Curator: confirm whether UBERON:8600052 is intended as the parent and, if so, verify its placement in the hierarchy; otherwise leave is_a/part_of as written. +muscular-system https://purl.org/ccf/ASCTB-TEMP_puboperineales-muscle puboperineales muscle leaf UBERON:0015173 helicine branch of uterine artery new_term_leaf UBERON:9900050 (new term: puboperineales muscle) puboperinealis muscle TA2 Latin form is 'musculus puboperinealis' (singular); 'puboperineales' is the plural Latin adjective form used inconsistently. The standard English label is 'puboperinealis muscle' or 'puboperineal muscle'. Keep source name as a synonym. UBERON:0001326 levator ani muscle Source parent UBERON:0015173 ('helicine branch of uterine artery') is clearly a misalignment in the input data — it is an artery, not a muscle. Resolved to the anatomically correct parent levator ani muscle (UBERON:0001326) following the precedent of puborectalis (UBERON:0011512) and pubococcygeus (UBERON:0011528), which are also slips of the levator ani with the same is_a/part_of pattern. || SUGGESTION: Curator should ignore the source parent_id and use UBERON:0001326 (levator ani muscle) as part_of, UBERON:0001325 (muscle of pelvis) as is_a. +muscular-system https://purl.org/ccf/ASCTB-TEMP_rectus-capitius-posterior-minor-muscle rectus capitius posterior minor muscle leaf https://purl.org/ccf/ASCTB-TEMP_submucosal-artery-of-colon submucosal artery of colon confirmed_match UBERON:0008455 rectus capitis posterior minor rectus capitis posterior minor Input contains a misspelling: 'capitius' is a typo for 'capitis' (genitive of Latin caput, head). The correctly spelled term already exists in UBERON as UBERON:0008455. The variant 'rectus capitus posterior minor muscle' is already registered there as a RELATED synonym; the input form 'rectus capitius posterior minor muscle' could also be added as an additional misspelling synonym if desired. UBERON:0008455 'rectus capitis posterior minor' already lists 'rectus capitus posterior minor muscle' and 'rectus capitus posterior minor' as RELATED synonyms (Wikipedia:Rectus_capitis_posterior_minor_muscle). The input label is a typo variant ('capitius'/'capitus' for 'capitis') of the same anatomical structure. Confirmed match — exclude from template. Input file was named 'unresolvable_submucosal_artery_of_colon.json' and listed parent_id UNRESOLVABLE:'submucosal artery of colon' for both is_a and part_of. That parent is wrong-domain (a colonic artery) for a suboccipital skeletal muscle and appears to be a pipeline mislabel. || SUGGESTION: Disregard the bogus 'submucosal artery of colon' parent. The term itself is a confirmed match to UBERON:0008455 (rectus capitis posterior minor); no new term is needed. Had a new term been required, the correct parents would have been: is_a UBERON:0004518 (muscle of vertebral column) and part_of UBERON:0000974 (neck), mirroring the other rectus capitis muscles. +muscular-system https://purl.org/ccf/ASCTB-TEMP_rectus-capitus-anterior-muscle rectus capitus anterior muscle leaf UBERON:0001250, UBERON:0010400 red pulp of spleen, spleen trabecular vein confirmed_match UBERON:0008453 rectus capitis anterior rectus capitis anterior muscle Standard anatomical Latin is 'capitis' (genitive of caput), not 'capitus'. The source variant is already captured as a RELATED synonym on UBERON:0008453. Source label 'rectus capitus anterior muscle' is an alternate spelling (capitus vs capitis) and is explicitly listed as a RELATED synonym on UBERON:0008453. FMA:46312, Wikipedia:Rectus_capitis_anterior_muscle. Excluded from template. +muscular-system https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle respiratory diaphragm muscle leaf http://purl.org/sig/ont/fma/fma12252 Subclavian lymphatic trunk confirmed_match UBERON:0001103 diaphragm UBERON:0001103 has EXACT synonym 'diaphragm muscle' (BTO:0000341). UBERON:0001103 is_a UBERON:0014892 (skeletal muscle organ, vertebrate); part_of UBERON:0001004 (respiratory system); innervated_by UBERON:0001884 (phrenic nerve). FMA xref on UBERON:0001103 is FMA:13295 (label 'Diaphragm'). The source 'NEEDS_MAPPING:FMA:12252' appears to be an erroneous FMA ID — FMA:12252 resolves to 'Subclavian lymphatic trunk', which is unrelated to the term label 'respiratory diaphragm muscle'. The term label itself is a direct synonym of UBERON:0001103. +muscular-system https://purl.org/ccf/ASCTB-TEMP_right-crus-of-lumbar-part-of-respiratory-diaphragm-muscle right crus of lumbar part of respiratory diaphragm muscle leaf http://purl.org/sig/ont/fma/fma5841 Left lumbar lymphatic trunk confirmed_match UBERON:0014766 right crus of diaphragm UBERON:0014765 crus of diaphragm UBERON:0014766 lists 'right crus of lumbar part of diaphragm' as an EXACT synonym, with xref FMA:58286. The source label 'right crus of lumbar part of respiratory diaphragm muscle' is a verbose HRA/ASCTB rendering of the same structure. The source parent FMA:5841 (lumbar part of diaphragm) is the broader region; UBERON:0014766 is the appropriate existing UBERON equivalent for the right crus itself. +muscular-system https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle group https://purl.org/ccf/ASCTB-TEMP_lobar-artery-of-spleen lobar artery of spleen new_term_group UBERON:9900055 (new term: segmental back muscle) UBERON:0001137 dorsum +muscular-system https://purl.org/ccf/ASCTB-TEMP_sole-of-foot-muscle sole of foot muscle group UBERON:0001383 muscle of leg new_term_group UBERON:9900056 (new term: sole of foot muscle) UBERON:0008338 plantar part of pes +muscular-system https://purl.org/ccf/ASCTB-TEMP_spermatic-cord-muscle spermatic cord muscle leaf UBERON:0002378 muscle of abdomen confirmed_match UBERON:0008488 cremaster muscle The cremaster muscle is the muscle of the spermatic cord — its defining feature is enveloping the spermatic cord and testis. FMA:21531 is mapped to UBERON:0008488. 'spermatic cord muscle' is an alternative descriptive label for this same structure. +muscular-system https://purl.org/ccf/ASCTB-TEMP_sphincter-urethrae-muscle sphincter urethrae muscle leaf UBERON:0002379 perineal muscle confirmed_match UBERON:0004917 urethral sphincter UBERON:0004917 'urethral sphincter' has 'sphincter urethrae' and 'urethral sphincter muscle' listed as EXACT synonyms. The source term 'sphincter urethrae muscle' is a direct synonym variant of this existing term. Parent UBERON:0002379 'perineal muscle' (muscle organ part_of perineum) is consistent with the urethral sphincter, which lies within the perineum (urogenital triangle). xref MA:0002650, EMAPA:37789, SCTID:277855007. +muscular-system https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle spinotransversales muscle group UBERON:0002324 muscle of back confirmed_match UBERON:0002252 splenius +muscular-system https://purl.org/ccf/ASCTB-TEMP_splenius-capitus-muscle splenius capitus muscle leaf https://purl.org/ccf/ASCTB-TEMP_spinotransversales-muscle spinotransversales muscle confirmed_match UBERON:0000711 splenius capitis splenius capitis 'capitus' is a misspelling of the Latin genitive 'capitis' (of the head). Standard anatomical nomenclature (TA2, FMA:22653) uses 'splenius capitis'. The existing UBERON:0000711 already carries 'splenius capitis muscle' as an EXACT synonym. Source label should be treated as a typographical variant; no new term required. Source label 'splenius capitus muscle' is a misspelling of 'splenius capitis'. UBERON:0000711 already has 'splenius capitis muscle' as an EXACT synonym (xref Wikipedia:Splenius_capitis_muscle, FMA:22653). Parent of the source group ('spinotransversales muscle') was previously resolved to UBERON:0002252 splenius, which is the is_a parent of UBERON:0000711 — consistent with this match. +muscular-system https://purl.org/ccf/ASCTB-TEMP_sternal-part-of-respiratory-diaphragm-muscle sternal part of respiratory diaphragm muscle leaf https://purl.org/ccf/ASCTB-TEMP_respiratory-diaphragm-muscle respiratory diaphragm muscle new_term_leaf UBERON:9900061 (new term: sternal part of respiratory diaphragm muscle) sternal part of diaphragm UBERON uses 'diaphragm' (UBERON:0001103) as the standard label; FMA and TA2 use 'sternal part of diaphragm' (FMA:58278, 'pars sternalis diaphragmatis'). The source 'respiratory diaphragm muscle' phrasing is non-standard. Keep source name as RELATED synonym. UBERON:0001103 diaphragm Source parent label 'respiratory diaphragm muscle' has no exact UBERON match but maps to UBERON:0001103 (diaphragm) which has synonym 'diaphragm muscle' (BTO:0000341). || SUGGESTION: Resolved to UBERON:0001103 (diaphragm). Precedent: sibling term 'costal diaphragm' (UBERON:0035831, FMA:58277) uses is_a UBERON:0000063 (organ subunit) + part_of UBERON:0001103. Same pattern applied here. +muscular-system https://purl.org/ccf/ASCTB-TEMP_sternocostal-head-of-pectoralis-major-muscle sternocostal head of pectoralis major muscle leaf UBERON:0002381 pectoralis major new_term_leaf UBERON:9900062 (new term: sternocostal head of pectoralis major muscle) UBERON:0002381 pectoralis major +muscular-system https://purl.org/ccf/ASCTB-TEMP_superficial-back-muscle superficial back muscle group UBERON:0002324 muscle of back new_term_group UBERON:9900063 (new term: superficial back muscle) UBERON:0001137 dorsum +muscular-system https://purl.org/ccf/ASCTB-TEMP_superior-head-of-lateral-pterygoid-muscle superior head of lateral pterygoid muscle leaf UBERON:0006719 lateral pterygoid muscle new_term_leaf UBERON:9900064 (new term: superior head of lateral pterygoid muscle) UBERON:0006719 lateral pterygoid muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_superior-longitudinal-lingual-muscle superior longitudinal lingual muscle leaf UBERON:0001576 intrinsic muscle of tongue confirmed_match UBERON:0008582 superior longitudinal muscle of tongue superior longitudinal muscle of tongue Source label uses 'lingual muscle' word order; UBERON's canonical label is 'superior longitudinal muscle of tongue' (UBERON:0008582). Consider adding 'superior longitudinal lingual muscle' as an EXACT synonym to aid matching from HRA/ASCTB sources. Input term is the same structure under the synonymous label 'superior longitudinal lingual muscle' / 'superior lingualis'. UBERON:0008582 is_a UBERON:0001576 (intrinsic muscle of tongue) — the parent matches the input group exactly. FMA:46693 matches the typical FMA assignment for this structure. +muscular-system https://purl.org/ccf/ASCTB-TEMP_tensor-fascia-latae-muscle tensor fascia latae muscle leaf UBERON:0002000 gluteal muscle confirmed_match UBERON:0001376 tensor fasciae latae muscle tensor fasciae latae muscle Standard anatomical Latin uses the genitive 'fasciae' (of the fascia), not nominative 'fascia'. UBERON:0001376 already carries 'tensor fasciae lata muscle' as an EXACT synonym; the source variant 'tensor fascia latae muscle' could be added as an additional synonym if not already covered. Source label 'tensor fascia latae muscle' is a spelling variant (singular fascia) of the standard 'tensor fasciae latae muscle' (UBERON:0001376). The existing UBERON term already includes 'tensor fasciae lata' and 'tensor fasciae lata muscle' as EXACT synonyms. FMA:22423 matches in both. Confirmed match — exclude from template. +muscular-system https://purl.org/ccf/ASCTB-TEMP_thoracic-intertransversarii-muscle thoracic intertransversarii muscle leaf https://purl.org/ccf/ASCTB-TEMP_segmental-back-muscle segmental back muscle new_term_leaf UBERON:9900067 (new term: thoracic intertransversarii muscle) UBERON:0006073 thoracic region of vertebral column +muscular-system https://purl.org/ccf/ASCTB-TEMP_thoracic-wall-muscle thoracic wall muscle group UBERON:0002426 chest muscle new_term_group UBERON:9900068 (new term: thoracic wall muscle) UBERON:0016403 thoracic wall +muscular-system https://purl.org/ccf/ASCTB-TEMP_thyroepiglottic-part-of-thyroarytenoid-muscle thyroepiglottic part of thyroarytenoid muscle leaf http://purl.org/sig/ont/fma/fma46588 Thyro-arytenoid confirmed_match UBERON:0010927 thyroepiglotticus muscle Source label 'thyroepiglottic part of thyroarytenoid muscle' matches UBERON:0010927 ('thyroepiglotticus muscle') exactly — UBERON synonyms include 'thyro-epiglottic part of thyro-arytenoid' (FMA:46594), 'thyroepiglottic muscle', 'pars thyroepiglottica musculus thyroarytenoidei'. UBERON xrefs FMA:46594 (the more specific TA2 ID for this sub-part). The source FMA:46588 cited in the input is the parent FMA term (thyroarytenoid muscle as a whole = UBERON:0008576), not the part itself. +muscular-system https://purl.org/ccf/ASCTB-TEMP_thyropharyngeal-part-of-inferior-pharyngeal-constrictor-muscle thyropharyngeal part of inferior pharyngeal constrictor muscle leaf http://purl.org/sig/ont/fma/fma46623 Inferior pharyngeal constrictor confirmed_match UBERON:0010936 thyropharyngeus muscle Source parent FMA:46623 is the inferior pharyngeal constrictor as a whole (= UBERON:0001570). The NTR label is a thyropharyngeal subdivision/part of that muscle, which is already represented in UBERON as UBERON:0010936 (thyropharyngeus muscle) with the requested label present as an EXACT synonym (FMA:46658). Exclude from new-term template. +muscular-system https://purl.org/ccf/ASCTB-TEMP_tibalis-anterior-muscle tibalis anterior muscle leaf http://purl.org/sig/ont/fma/fma22472 Muscle of anterior compartment of leg confirmed_match UBERON:0001385 tibialis anterior tibialis anterior muscle Typo: 'tibalis' should be 'tibialis'. The corrected form is the standard TA2 name and is already recorded as an EXACT synonym of UBERON:0001385. Source label 'tibalis anterior muscle' is a typo of 'tibialis anterior muscle', which is recorded as an EXACT synonym of UBERON:0001385 'tibialis anterior'. UBERON:0001385 carries FMA:22532 as xref; the input's parent FMA:22472 does not appear in UBERON and is likely a data error in the source row (the same FMA was assigned to both is_a and part_of, suggesting placeholder/self-reference). Term should be excluded from the template as already present in UBERON. +muscular-system https://purl.org/ccf/ASCTB-TEMP_tibalis-posterior-muscle tibalis posterior muscle leaf http://purl.org/sig/ont/fma/fma22474 Muscle of posterior compartment of leg confirmed_match UBERON:0001667 tibialis posterior tibialis posterior muscle Spelling error — missing 'i'. Standard anatomical term is 'tibialis posterior muscle' (already a related synonym on UBERON:0001667). Term is a confirmed existing match so no new term is needed; record correction for the candidates/QC report. Source label 'tibalis posterior muscle' is a misspelling of 'tibialis posterior muscle' (already present as a synonym of UBERON:0001667). FMA:22474 in the input is actually the parent class 'Muscle of posterior compartment of leg', not this term; the correct FMA xref for tibialis posterior is FMA:51099 (already on UBERON:0001667). +muscular-system https://purl.org/ccf/ASCTB-TEMP_transverse-muscle transverse muscle leaf UBERON:0001576 intrinsic muscle of tongue confirmed_match UBERON:0008583 transverse muscle of tongue transverse muscle of tongue Source label 'transverse muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'transverse muscle of tongue' (UBERON:0008583). Already carries 'transverse muscle' as a RELATED synonym, so no synonym addition is needed. Input term 'transverse muscle' under parent UBERON:0001576 (intrinsic muscle of tongue) unambiguously refers to the transverse muscle of tongue. UBERON:0008583 already carries 'transverse muscle' as a RELATED synonym (from Wikipedia) and 'intrinsic tongue muscle transverse component' (MA:0002328) as an EXACT synonym. FMA:46695. +muscular-system https://purl.org/ccf/ASCTB-TEMP_ventral-part-of-intertransversarii-laterales-lumborum-muscle ventral part of intertransversarii laterales lumborum muscle leaf https://purl.org/ccf/ASCTB-TEMP_intertransversarii-laterales-lumborum-muscle intertransversarii laterales lumborum muscle new_term_leaf UBERON:9900074 (new term: ventral part of intertransversarii laterales lumborum muscle) UBERON:0008242 lower back muscle +muscular-system https://purl.org/ccf/ASCTB-TEMP_vertical-muscle vertical muscle leaf UBERON:0001576 intrinsic muscle of tongue confirmed_match UBERON:0008584 vertical muscle of tongue vertical muscle of tongue Source label 'vertical muscle' is ambiguous outside the lingual context. UBERON's canonical label is 'vertical muscle of tongue' (UBERON:0008584). Already carries 'vertical muscle' as a RELATED synonym, so no synonym addition is needed. Input term 'vertical muscle' under parent UBERON:0001576 (intrinsic muscle of tongue) unambiguously refers to the vertical muscle of tongue. UBERON:0008584 already carries 'vertical muscle' as a RELATED synonym and 'intrinsic tongue muscle vertical component' (MA:0002329) as an EXACT synonym. FMA:46696.