Convierte name+SMILES a SDF 3D y con H.
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





Última modificación: