Custom CCDs and CIF round trips#
Register your ligand before writing. Here ligand is one complete LG1 residue
with correct atom names, elements, charges, bonds, and a nonempty chain ID;
atoms is the structure containing it (or just ligand).
from atomworks.io import parse
from atomworks.io.config import ParseConfig
from atomworks.io.utils.ccd import custom_ccd_residues
from atomworks.io.utils.io_utils import to_cif_file
with custom_ccd_residues({"LG1": ligand}):
to_cif_file(atoms, "structure.cif")
config = ParseConfig.from_preset(
"minimal", build_assembly=None, cif_ccd_on_mismatch="ignore",
return_atom_array_plus=True,
)
restored = parse("structure.cif", config=config)["asym_unit"][0]
register_custom_ccd_entry("LG1", ligand) also works, but persists globally.
The writer generates all three chem_comp* tables. Missing
chem_comp_type is inferred from atom names; override it if the heuristic is
wrong. An existing annotation is used directly as chem_comp.type.
"minimal" avoids atom rebuilding/filtering; "ignore" permits intentional
CCD-code collisions. The file is self-contained; no registration is needed to
read it. return_atom_array_plus=True retains its definitions for rewriting.
Coordinates are rounded to 0.001 Å; this is not exact object serialization.