Open Babel — Molecular Format Conversion
When to Use
- User needs to convert between molecular file formats (SMILES, mol2, sdf, pdb, xyz, cif)
- User wants to generate 3D coordinates from SMILES
- User needs to add/remove hydrogens
- User wants to perceive bond orders from a 3D structure
- User needs canonical SMILES or InChI identifiers
Prerequisites
- Open Babel installed (
obabel -V)
- For Python scripting:
openbabel or openbabel-wheel package
Workflow Steps — CLI
Convert between formats
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "shell",
"name": "convert_format",
"command": "obabel input.mol2 -O output.pdb",
"system_name": "format_convert"
})
Common CLI Commands
SMILES to 3D structure
obabel -:"CCO" -O ethanol.xyz --gen3d
# Generates 3D coordinates using force field optimization
Add hydrogens
obabel input.pdb -O output.pdb -h
# -h adds hydrogens at pH 7.4
Remove hydrogens
obabel input.pdb -O output.pdb -d
Batch conversion
obabel *.mol2 -O output_.pdb -m
# -m produces one output file per input molecule
Generate conformers
obabel input.sdf -O conformers.sdf --conformer --nconf 50 --writeconformers
Get canonical SMILES
obabel input.mol2 -O output.smi -ocan
Energy minimization
obabel input.xyz -O minimized.xyz --minimize --ff MMFF94 --steps 2500
Supported Formats (most common)
| Format |
Extension |
Notes |
| SMILES |
.smi |
1D string representation |
| SDF/MOL |
.sdf, .mol |
2D/3D with bond orders |
| PDB |
.pdb |
Protein Data Bank format |
| MOL2 |
.mol2 |
Tripos format with charges |
| XYZ |
.xyz |
Simple Cartesian coordinates |
| CIF |
.cif |
Crystallographic Information File |
| CML |
.cml |
Chemical Markup Language |
| InChI |
- |
IUPAC identifier (use -oinchi) |
| POSCAR |
.vasp |
VASP structure (limited support) |
| GJF/COM |
.gjf, .com |
Gaussian input |
Python API
from openbabel import openbabel as ob
conv = ob.OBConversion()
conv.SetInFormat("smi")
conv.SetOutFormat("mol2")
mol = ob.OBMol()
conv.ReadString(mol, "c1ccccc1") # benzene
# Generate 3D
builder = ob.OBBuilder()
builder.Build(mol)
# Force field optimization
ff = ob.OBForceField.FindForceField("MMFF94")
ff.Setup(mol)
ff.ConjugateGradients(500)
ff.GetCoordinates(mol)
conv.WriteFile(mol, "benzene.mol2")
Parameter Guidance
| Flag |
Purpose |
--gen3d |
Generate 3D coordinates from 2D/SMILES |
-h |
Add hydrogens |
-d |
Delete hydrogens |
--minimize |
Energy minimization with force field |
--ff MMFF94 |
Force field: MMFF94, UFF, Ghemical |
-m |
Multiple output files (one per molecule) |
--conformer |
Conformer search |
-ocan |
Output canonical SMILES |
Common Pitfalls
- No 3D coordinates from SMILES — SMILES are 1D strings. Use
--gen3d to create 3D structures.
- Bond order loss — XYZ format has no bond information. Converting xyz to mol2 requires bond perception (
-b flag).
- Wrong protonation — default
-h adds H at pH 7.4. Specify pH with -p <pH> if needed.
- Large molecule conformers —
--gen3d gives one conformation. For proper conformer sampling, use RDKit (molecular/rdkit/SKILL.md).
- Periodic structures — Open Babel's support for periodic systems (CIF/POSCAR) is limited. Use pymatgen or ASE for crystals.
- Force field coverage — MMFF94 covers organic molecules well but may not have parameters for transition metals.