Home > Community > .SDF file to .PDB file
Upvote

30

Downvote
+ Docking
+ Pdb
Posted by
Martin Carr

.SDF file to .PDB file

Carolina Kishwaukee  Follow

Use OpenBabel.

Something like babel -isdf file_in.sdf -opdb file_out.pdb.

More

Upvote

VOTE

Downvote
All About Business  Follow

Bizarrely, Obabel seems to have written a PDB that was incorrectly spaced for the OP as seen in Error pasing the following line in pdb

If you can use python, rdkit is a great package for cheminformatics —best installed via conda though.

It allows you do all sorts of things, such as match substructures, embed conformers, edit compounds, compute advanced parameters and many forms of shape & colour finger-/foot-printings.

Given a multi-compound sdf you can read each individual molecule and write them out as PDBs.

from rdkit import Chemwith i, mol in enumerate(Chem.SDMolSupplier('in.sdf')):    Chem.MolToPDBFile(f'out_{i}.pdb')

We can be fancier with the output name

from rdkit import Chemimport rewith mol in Chem.SDMolSupplier('in.sdf'):    # The headerline of a mol file is retrieved oddly.    name = mol.GetProp('_Name')    # make filename safe    slugify = lambda name: re.sub(r'[\W_.-]+', '-', name)    Chem.MolToPDBFile(f'{slugify(name)}.pdb')

To specify what name (e.g. CA) each atom gets and what is the residue name, chain and residue position —information absent in the sdf, it gets a bit odd.

  names = [' CA ', ' CB ', ' CG ', ' CD '] # say  for i, atom in enumerate(mol.GetAtoms()):        info = Chem.AtomPDBResidueInfo(names[i], # or whatever.                                       residueName='LIG')

For more see this blog post.

More

Upvote

VOTE

Downvote
Jon Do  Follow
is an example filename —the quotes must be there or it will think it a variable. If you are unfamiliar with python this route is probably not the best way.More
Upvote

VOTE

Downvote
Joe Miller  Follow
Correct More
Upvote

VOTE

Downvote
James O  Follow
for the rdkit sdf to pdb conversion, should i enter the multi entry sdf filename in the line below; "with mol in Chem.SDMolSupplier('in.sdf'):"More
Upvote

VOTE

Downvote
General Philosophy  Follow
in.sdfMore
Upvote

VOTE

Downvote
Edward Atefi  Follow
I am unfamiliar with python however I am currently trying to learn it from scratch. Thank youMore
Upvote

VOTE

Downvote