ConfGF icon indicating copy to clipboard operation
ConfGF copied to clipboard

How to generate the 3D SDF from the output?

Open alexgcsa opened this issue 4 years ago • 2 comments

Hello,

Congrats on this work. It is quite interesting.

I have some doubts on it. May you help me? I was able to run the pre-trained models (checkpoints). A pickle is generated, but how to use this pickle to generate the SDF file for the particular molecule?

I noticed that a 2D molecule is generated in this pickle...How to include the conformers -- like an SDF -- so I can use the output 3D molecule?

Cheers,

Alex

alexgcsa avatar Aug 01 '21 10:08 alexgcsa

Hi @alexgcsa, I was able to modify the 'gen.py' script to output pdb files doing the following:

from rdkit.Chem.rdmolfiles import  MolToPDBFile
from rdkit.Chem.AllChem import EmbedMolecule

out = solver.generate_samples_from_smiles(*args*)
EmbedMolecule(out.rdmol, useRandomCoords=True)
gen_mol = utils.set_rdmol_positions(out.rdmol, out.pos_gen[-1])
MolToPDBFile(gen_mol, *output_filename*)

where you should replace appropriately args and output_filename. If I understood properly the code, out.rdmol is the rdkit mol built from the smiles string. While out.pos_gen are the generated atom positions.

According to the rdkit documentation, you should be able to write into sdf replacing the last line with:

writer = SDWriter('out.sdf')
writer.write(gen_mol)

If you want to write the pkl into sdf, it should be enough to do: out = pickle.load(*pkl_file*)

Hope you find this helpful :)

P.S. If you find any error in my solution, please let me know

federico-camerota avatar Aug 05 '21 13:08 federico-camerota

Thank you @federico-camerota , I will test your solution today.

alexgcsa avatar Aug 07 '21 02:08 alexgcsa