from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import SDWriter
input_file = "/home/jant.encinar/py-linux/39_smiles-a-SDF3DyH/_name-smiles.txt"
output_sdf = "/home/jant.encinar/py-linux/39_smiles-a-SDF3DyH/_moleculas-3D-H.sdf"
writer = SDWriter(output_sdf)
with open(input_file, "r") as f:
for line_num, line in enumerate(f, 1):
line = line.strip()
if not line:
continue
try:
name, smiles = line.split("\t")
except ValueError:
print(f"Format error on line {line_num}: {line}")
continue
mol = Chem.MolFromSmiles(smiles)
if mol is None:
print(f"Invalid SMILES on line {line_num}: {smiles}")
continue
# Add hydrogens
mol = Chem.AddHs(mol)
# Generate 3D coordinates
if AllChem.EmbedMolecule(mol) != 0:
print(f"Could not generate 3D conformation for: {name}")
continue
# Optimize geometry using UFF force field
# AllChem.MMFFOptimizeMolecule(mol)
AllChem.UFFOptimizeMolecule(mol)
# Set molecule name
mol.SetProp("_Name", name)
# Write to SDF file
writer.write(mol)
writer.close()
print(f"SDF file generated at: {output_sdf}")
Mira un ejemplo de fichero /home/jant.encinar/py-linux/39_smiles-a-SDF3DyH/_name-smiles.txt
MolPort-002-644-820 Cc1c(cccc1)C(=O)Nc1n/c(=C(/C#N)C(=O)N2CCOCC2)/c2c1cccc2
MolPort-000-187-423 Fc1ccc(NC(=O)Cn2c(=O)/c(=c/3sc4nc(=O)c(Cc5ccccc5)nn4c3=O)/c3c2cccc3)cc1