Renato, it seems that FragmentOnBRICSBonds and BRICS.BRICSDecompose work differently. The first returns a mol object from which you can get the fragments using GetMolFrags (as you did), while the second returns a list of strings containing the fragments. I'm not sure if you can recover 3D info from these strings. If you want to get the fragments from BRICS.BRICSDecompose, use:
l = BRICS.BRICSDecompose(m2,minFragmentSize=9) fr2 = [Chem.MolFromSmiles(x) for x in l] Draw.MolsToGridImage(fr2,molsPerRow=4) Alternatively, if you want to remove the small fragments obtained from FragmentOnBRICSBonds, you can filter by using the atom count: newmol2=Chem.FragmentOnBRICSBonds(m2) frags=Chem.GetMolFrags(newmol2,asMols=True,sanitizeFrags=True) frags = [x for x in frags if len(x.GetAtoms()) > 3] Draw.MolsToGridImage(frags,molsPerRow=4) On Wed, Jul 13, 2022 at 8:01 PM Renato Freitas <renato...@gmail.com> wrote: > Dear Rdkit team, > > I want to fragment a ligand from PDB and keep the 3D coordinates of the > resulting fragments. I was able to do that using the code below > > ################### > import rdkit > import py3Dmol > from rdkit import Chem > from rdkit.Chem import rdmolops > from rdkit import RDLogger > from rdkit.Chem import BRICS > from rdkit.Chem import Recap > from rdkit.Chem import Draw > from rdkit.Chem import AllChem > from rdkit.Chem.Draw import IPythonConsole > from rdkit import Chem, RDConfig > from rdkit.Chem import AllChem, rdMolAlign > > mol ="""rot-1A5H-A > RDKit 3D > > 28 30 0 0 1 0 0 0 0 0999 V2000 > 0.5600 -9.3330 -12.4470 C 0 0 0 0 0 0 0 0 0 0 0 0 > -0.5220 -11.6860 -13.9640 C 0 0 2 0 0 0 0 0 0 0 0 0 > -1.3890 -10.8900 -13.0130 C 0 0 0 0 0 0 0 0 0 0 0 0 > -0.9370 -9.5080 -12.5700 C 0 0 0 0 0 0 0 0 0 0 0 0 > 1.3380 -9.3820 -13.7780 C 0 0 0 0 0 0 0 0 0 0 0 0 > 0.5150 -9.5890 -15.0480 C 0 0 2 0 0 0 0 0 0 0 0 0 > 0.0420 -10.9860 -15.1910 C 0 0 0 0 0 0 0 0 0 0 0 0 > 0.2540 -11.5680 -16.2200 O 0 0 0 0 0 0 0 0 0 0 0 0 > -0.9330 -12.9740 -14.0030 C 0 0 0 0 0 0 0 0 0 0 0 0 > -1.2340 -13.7900 -15.1940 C 0 0 0 0 0 0 0 0 0 0 0 0 > -0.7960 -15.1430 -15.2380 C 0 0 0 0 0 0 0 0 0 0 0 0 > -1.0610 -15.9350 -16.4000 C 0 0 0 0 0 0 0 0 0 0 0 0 > -1.7450 -15.3930 -17.5400 C 0 0 0 0 0 0 0 0 0 0 0 0 > -2.1670 -14.0630 -17.4730 C 0 0 0 0 0 0 0 0 0 0 0 0 > -1.9260 -13.2750 -16.3360 C 0 0 0 0 0 0 0 0 0 0 0 0 > -2.0200 -16.1830 -18.7390 C 0 0 0 0 0 0 0 0 0 0 0 0 > -1.3190 -17.2890 -19.0360 N 0 0 0 0 0 0 0 0 0 0 0 0 > -2.9740 -15.7940 -19.5590 N 0 0 0 0 0 0 0 0 0 0 0 0 > 0.8600 -8.8970 -16.1880 C 0 0 0 0 0 0 0 0 0 0 0 0 > 2.1700 -8.8390 -16.9320 C 0 0 0 0 0 0 0 0 0 0 0 0 > 2.1750 -8.5140 -18.3280 C 0 0 0 0 0 0 0 0 0 0 0 0 > 3.3880 -8.4510 -19.0560 C 0 0 0 0 0 0 0 0 0 0 0 0 > 4.6500 -8.7150 -18.4280 C 0 0 0 0 0 0 0 0 0 0 0 0 > 4.6430 -9.0360 -17.0580 C 0 0 0 0 0 0 0 0 0 0 0 0 > 3.4350 -9.0920 -16.3220 C 0 0 0 0 0 0 0 0 0 0 0 0 > 5.9450 -8.6500 -19.1820 C 0 0 0 0 0 0 0 0 0 0 0 0 > 6.9230 -9.5390 -18.9420 N 0 0 0 0 0 0 0 0 0 0 0 0 > 6.1630 -7.7040 -20.1250 N 0 0 0 0 0 0 0 0 0 0 0 0 > 1 4 1 0 > 1 5 1 0 > 2 3 1 0 > 2 7 1 0 > 2 9 1 6 > 3 4 1 0 > 5 6 1 0 > 6 7 1 0 > 6 19 1 6 > 7 8 2 0 > 9 10 1 0 > 10 11 2 0 > 10 15 1 0 > 11 12 1 0 > 12 13 2 0 > 13 14 1 0 > 13 16 1 0 > 14 15 2 0 > 16 17 2 0 > 16 18 1 0 > 19 20 1 0 > 20 21 2 0 > 20 25 1 0 > 21 22 1 0 > 22 23 2 0 > 23 24 1 0 > 23 26 1 0 > 24 25 2 0 > 26 27 2 0 > 26 28 1 0 > M END > """ > > m2 = Chem.MolFromMolBlock(mol) > > newmol2=Chem.FragmentOnBRICSBonds(m2) > frags=Chem.GetMolFrags(newmol2,asMols=True,sanitizeFrags=True) > Draw.MolsToGridImage(frags,molsPerRow=4) > ########################################## > > However, some of the fragments are very small. I found that using > "BRICS.BRICSDecompose" I can set the minimum size of the fragments with > "minFragmentSize". So I tried the following code > > frag = [Chem.GetMolFrags(x) for x in sorted > (BRICS.BRICSDecompose(m2,minFragmentSize=9))] > > > which didn't work, and I got the following error: > > > ########################################################################### > > ArgumentError Traceback (most recent call last) > > <ipython-input-35-657d531b48a2> <https://localhost:8080/#> in <module>() > ----> 1 frag = [Chem.GetMolFrags(x) for x in > sorted(BRICS.BRICSDecompose(m2,minFragmentSize=9))] > > > <ipython-input-35-657d531b48a2> <https://localhost:8080/#> in <listcomp>(.0) > ----> 1 frag = [Chem.GetMolFrags(x) for x in > sorted(BRICS.BRICSDecompose(m2,minFragmentSize=9))] > > > ArgumentError: Python argument types in > rdkit.Chem.rdmolops.GetMolFrags(str) > did not match C++ signature: > > GetMolFrags(RDKit::ROMol mol, bool asMols=False, bool sanitizeFrags=True, > boost::python::api::object frags=None, boost::python::api::object > fragsMolAtomMapping=None) > ########################################################################### > > > I am still learning RDkit (and Python) I am stuck at this. Can someone > give me any tips on how to solve this problem or point me in right > direction? > > Best regards, > > Renato > > _______________________________________________ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > -- *Rafael da Fonseca Lameiro * PhD Student - Medicinal and Biological Chemistry Group (NEQUIMED) São Carlos Institute of Chemistry - University of São Paulo - Brazil [image: orcid logo 16px] https://orcid.org/0000-0003-4466-2682
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss