heshamfs/materials-simulation-skills/ontology-mapper

Claude Code and agent skill by heshamfs/materials-simulation-skills

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Map materials science terms, crystal structures, and sample descriptions to standardized ontology classes and properties — resolve natural-language concepts to ontology entries with confidence scores, translate Bravais lattice types, space groups, and lattice constants into ontology-compliant annotations, and produce full sample metadata from structured descriptions. Supports any ontology in ontology_registry.json (CMSO, ASMO, etc.). Use when annotating simulation inputs with FAIR metadata, translating "BCC iron" or "FCC copper" into formal ontology terms, preparing machine- readable sample descriptions, or bridging between lab vocabulary and ontology vocabulary, even if the user only says "what CMSO terms describe my material" or "annotate this sample for me."

Install

npx vskill@latest install heshamfs/materials-simulation-skills/ontology-mapper

SKILL.md

Ontology Mapper

Goal

Translate real-world materials science descriptions into standardized ontology annotations. Given terms like "FCC copper" or structured data like {"material": "iron", "structure": "BCC", "lattice_a": 2.87}, produce the corresponding ontology classes and properties for any registered ontology.

Requirements

  • Python 3.10+
  • No external dependencies (Python standard library only)
  • Requires ontology-explorer's summary JSON and ontology_registry.json
  • Per-ontology mapping config (<name>_mappings.json) for ontology-specific synonyms and labels

Inputs to Gather

InputDescriptionExample
OntologyOntology name from registrycmso, asmo
Term(s)Natural-language materials concept(s)"unit cell", "FCC,copper,lattice"
Crystal systemOne of the 7 crystal systemscubic, hexagonal
Bravais latticeLattice type (symbol or common name)FCC, cF, BCC
Space groupSpace group number (1-230)225
Lattice parametersa, b, c in angstroms; alpha, beta, gamma in degreesa=3.615
Sample descriptionJSON dict with material properties{"material":"copper","structure":"FCC"}

Decision Guidance

What do you need to map?
├── A concept or term to find its ontology class
│ └── concept_mapper.py --ontology <name> --term "<term>"
├── Crystal structure parameters to ontology terms
│ └── crystal_mapper.py --ontology <name> --bravais <type> --space-group <N> --a <val>
├── A full sample description to ontology annotations
│ └── sample_annotator.py --ontology <name> --sample '<json>'
└── Multiple terms at once
└── concept_mapper.py --ontology <name> --terms "term1,term2,term3"
Ontology scope — crystal/sample annotation is CMSO-only. crystal_mapper.py
and sample_annotator.py emit crystal-structure vocabulary (Crystalline Material,
Crystal Structure, Unit Cell, Space Group, lattice properties). This vocabulary is
defined by CMSO. **ASMO is a simulation-methods ontology and does not define any
crystal/sample classes** — so for ASMO use the concept-mapping path
(concept_mapper.py, which resolves terms like DFT, NPT, timestep, PBE to real ASMO
classes) only. If sample_annotator.py/crystal_mapper.py is run with an ontology
whose summary lacks the required classes (e.g. --ontology asmo), each unresolvable
term is flagged in results.validation_warnings and given confidence: 0.0 rather
than silently emitting an invalid term.

Script Outputs (JSON Fields)

ScriptKey Outputs
scripts/concept_mapper.pyresults.matches, results.unmatched, results.suggestions
scripts/crystal_mapper.pyresults.ontology_classes, results.ontology_properties, results.effective_system, results.bravais_lattice, results.validation_warnings
scripts/sample_annotator.pyresults.annotations, results.sample_type, results.material_type, results.unmapped_fields, results.suggested_properties, results.validation_warnings

Workflow

  1. If the user provides natural-language terms, use concept_mapper.py to find matching ontology classes.
  2. If the user describes crystal structure parameters, use crystal_mapper.py to map them and validate constraints.
  3. For a complete sample description, use sample_annotator.py to produce full ontology annotations.
  4. Review any validation warnings (e.g., lattice parameter mismatches for the crystal system).
  5. Check unmapped_fields and suggested_properties for completeness.

Conversational Workflow Example

User: I'm setting up an MD simulation of BCC iron with lattice parameter 2.87 angstroms.
What CMSO terms should I use?
Agent: Let me map your iron sample to CMSO ontology terms.
[Runs: sample_annotator.py --ontology cmso --sample '{"material":"iron","structure":"BCC","lattice_a":2.87,"space_group":229}' --json]
Your BCC iron simulation maps to these CMSO annotations:
- **Sample**: Atomic Scale Sample (subclass of Computational Sample)
- **Material**: Crystalline Material
- **Unit Cell**: Bravais lattice = "cI" (body-centered cubic)
- **Space Group**: number = 229 (Im-3m)
- **Lattice**: a = 2.87 Å
- **Element**: Fe
Suggested additions:
- Number of atoms in the simulation cell
- Simulation cell vectors and angles

CLI Examples

bash
# Map a single concept
python3 skills/ontology/ontology-mapper/scripts/concept_mapper.py \
--ontology cmso --term "space group" --json
# Map multiple terms
python3 skills/ontology/ontology-mapper/scripts/concept_mapper.py \
--ontology cmso --terms "FCC,copper,lattice constant" --json
# Map crystal parameters (with ontology-specific labels)
python3 skills/ontology/ontology-mapper/scripts/crystal_mapper.py \
--ontology cmso --bravais FCC --space-group 225 --a 3.615 --json
# Map crystal parameters (generic labels, no ontology specified)
python3 skills/ontology/ontology-mapper/scripts/crystal_mapper.py \
--bravais FCC --space-group 225 --a 3.615 --json
# Annotate a full sample
python3 skills/ontology/ontology-mapper/scripts/sample_annotator.py \
--ontology cmso \
--sample '{"material":"copper","structure":"FCC","space_group":225,"lattice_a":3.615}' \
--json

Adding a New Ontology

To support a new ontology, create a <name>_mappings.json in references/:

json
{
"ontology": "myonto",
"synonyms": { "simulation method": "Simulation Method", ... },
"property_synonyms": { "timestep": "has timestep", ... },
"material_type_rules": { "keyword_rules": [...], "default": "Material" },
"sample_schema": { "sample_class": "Simulation", ... },
"crystal_output": { "base_classes": [...], "property_map": {...} },
"annotation_routing": { "unit_cell_indicators": [...], ... }
}

Then add "mappings_file": "myonto_mappings.json" to the ontology's entry in ontology_registry.json. No code changes needed.

Only include the `sample_schema`, `crystal_output`, `material_type_rules` and `annotation_routing` blocks if every class/property they name actually exists in that ontology's summary. sample_annotator.py validates emitted terms against the loaded summary and flags any that are undefined (results.validation_warnings, confidence: 0.0). For example, asmo_mappings.json deliberately ships only synonyms and property_synonyms because ASMO is a simulation-methods ontology with no crystal/sample vocabulary — its concept terms (DFT, NPT, timestep, PBE) all resolve, but a crystal/sample config would emit unresolvable terms.

Error Handling

ErrorCauseResolution
space_group must be between 1 and 230Invalid space group numberUse a valid space group number
a must be positiveNon-positive lattice parameterProvide positive values in angstroms
Unrecognized Bravais lattice '<x>'Bravais symbol/name not in the recognized setUse a common name (FCC, BCC, HCP) or a Pearson symbol (cF, cI, hP, ...)
Term exceeds maximum length of 200 charactersA --term/--terms entry is too longShorten the term
Too many terms (max 100)More than 100 terms suppliedSplit into smaller batches
Sample must be a non-empty dictEmpty or missing sample dataProvide a valid JSON sample dict
Sample has too many keys (max 100)Oversized sample dictReduce the number of sample keys
Validation warnings (lattice)Lattice parameters inconsistent with crystal systemCheck that a=b=c for cubic, etc.
results.validation_warnings (terms)Emitted class/property not defined in the chosen ontology (e.g. crystal terms for ASMO)Use CMSO for crystal/sample annotation; use ASMO only for concept mapping

Interpretation Guidance

  • Confidence scores: 1.0 = exact label match, 0.9 = synonym-table match, 0.7 = substring match, 0.5 = description match. Note: the per-ontology synonym table is consulted before exact-label matching, so a term that is both a synonym key and a class label (e.g. space group, unit cell, atom) is reported as a 0.9 synonym match even though it coincides exactly with a class label — the matched class and IRI are still correct.
  • `sample_annotator.py` validation warnings: every emitted class/property is checked against the loaded ontology summary. Terms not defined in that ontology are flagged in results.validation_warnings (and the corresponding annotation gets a validation_warning field with confidence: 0.0). This is how the annotator signals that a crystal/sample term cannot resolve to an IRI in the chosen ontology (e.g. running --ontology asmo on a crystalline sample — see below).
  • Validation warnings: indicate potential mistakes (e.g., specifying a!=b for cubic). These are warnings, not errors — the mapping still proceeds.
  • Unmapped fields: input keys that the annotator doesn't recognize. These may need manual mapping.
  • Suggested properties: additional ontology properties that would make the annotation more complete.

Verification checklist

  • [ ] Confirmed results.validation_warnings is empty (or every entry is explained) — a non-empty list means an emitted class/property is not defined in the chosen ontology and was given confidence: 0.0; do not report such terms as valid annotations.
  • [ ] Recorded the match_type and confidence for each concept match and confirmed the chosen term is acceptable for its tier (1.0 exact, 0.9 synonym, 0.7 substring, 0.5 description); for any substring_* or description_class match, verified the matched class is actually the intended concept and not an incidental string hit.
  • [ ] For crystal mappings, recorded results.effective_system and results.bravais_lattice (the resolved Pearson symbol, e.g. cF/cI), and confirmed the input Bravais/space-group/system are mutually consistent (no "space group N implies X but Y was specified" warning in validation_warnings).
  • [ ] Checked lattice-parameter constraints against effective_system — confirmed no warnings such as "Cubic requires a=b" / angle-90 violations, or explicitly justified each one (warnings are advisory, the mapping still proceeds).
  • [ ] Listed results.unmatched (concept) and results.unmapped_fields (sample) and confirmed nothing materially important was silently dropped; ran the emitted class_browser.py suggestion for any unmatched term that should have resolved.
  • [ ] Reviewed results.suggested_properties and recorded which missing fields (elements, space_group, lattice_a, ...) are intentionally omitted vs. should be added before the annotation is considered complete.

Common pitfalls & rationalizations

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
54
Repository forks
4
7-day trend score
20

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 5 Jul 2026, 4 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/heshamfs/materials-simulation-skills/ontology-mapper/badge)](https://verified-skill.com/skills/heshamfs/materials-simulation-skills/ontology-mapper)

Something wrong with this skill or its page? Tell us.