Installs into .claude/skills of the current project.
Are you the author of Topology And Systems?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-topology-and-systems)
---
name: topology-and-systems
description: "Assemble OpenFF Topology objects, load PDB/biopolymer systems,
manage hierarchy metadata, constraints, OpenMM/MDTraj conversion, PDB export,
and hand off to Interchange/OpenMM system creation."
disable-model-invocation: true
metadata:
disco-role: operating
license: MIT
---
# Topology and Systems
Use this sub-skill when the task is about OpenFF `Topology` objects rather than single-molecule construction or SMIRNOFF parameter editing.
## Read First
- `references/api-reference.md` for verified `Topology` method signatures, return shapes, and behavior details.
- `references/pdb-and-biopolymers.md` for PDB loading requirements, `unique_molecules`, proteins, HETATM small molecules, metadata, and hierarchy differences.
- `references/workflows.md` for common recipes: molecule lists, PDB load, OpenMM/MDTraj conversion, constraints, PDB export, and Interchange/OpenMM handoff.
- `references/troubleshooting.md` for common diagnostics and fixes around missing unique molecules, PDB chemistry assignment, atom names, optional packages, and metadata surprises.
- `scripts/smoke_topology_workflow.py` for a small self-contained smoke helper that builds a multi-copy topology and optionally writes a PDB.
## Scope
Handle requests involving:
- `Topology.from_molecules`, `add_molecule`, `add_molecules`, `unique_molecules`, and `identical_molecule_groups`.
- `Topology.from_pdb`, `from_openmm`, `from_mdtraj`, `to_openmm`, and `to_file`.
- PDB/biopolymer assumptions: explicit hydrogens, valid chemical connectivity, `CONECT`, standard residue/atom names, waters, supported ions, and custom substructure caveats.
- Hierarchy metadata and iterators: residues, chains, atom names, insertion codes, and OpenFF/OpenMM/RDKit/OpenEye differences.
- Constraints with `add_constraint`, environment matching with `chemical_environment_matches`, graph distance queries with `nth_degree_neighbors`, and visualization with `visualize`.
- Handoff boundaries between `Topology`, `ForceField.create_interchange`, `ForceField.create_openmm_system`, and downstream engine exporters.
## Route Elsewhere
- For constructing, reading, writing, charging, converting, or stereochemistry-handling individual `Molecule` objects, read `../molecules-and-io/SKILL.md`.
- For SMIRNOFF force field loading, parameter assignment details, handler edits, or force field XML authoring, read `../smirnoff-force-fields/SKILL.md`.
- For toolkit registry setup, backend availability, RDKit/OpenEye/AmberTools/NAGL installation, or charge backend troubleshooting, read `../toolkit-backends/SKILL.md`.
## Fast Decision Rules
- If the input is a list of OpenFF `Molecule` objects, start with `Topology.from_molecules(molecules)` or an empty `Topology()` plus `add_molecules`.
- If the input is a PDB with nonstandard HETATM molecules, prepare exact OpenFF `Molecule` objects and pass them through `unique_molecules`; require explicit elements and `CONECT` records for those molecules.
- If converting from OpenMM or MDTraj, pass every chemically distinct species exactly once in `unique_molecules`; the topology can contain zero, one, or many copies of each species.
- If writing or converting to OpenMM/PDB, keep `ensure_unique_atom_names="residues"` unless the task specifically needs molecule-wide uniqueness (`True`) or original names (`False`).
- If assigning force field parameters or exporting simulation files, build and validate the `Topology` here, then hand off to the force field or Interchange sub-skill boundary.