Hi Marco, Welcome to the mailing list!
The trick in this particular case is that you want to do a maxDepth of 0 (that means a single iteration) and to tell BRICSBuild that you're willing to see incomplete molecules (i.e. molecules that still contain a dummy atom): In [22]: from rdkit import Chem ...: from rdkit.Chem import BRICS ...: frags = ['[8*]C(C)(C)C', '[16*]c1ccc2occ([16*])c2c1'] ...: molfrags = [Chem.MolFromSmiles(f) for f in frags] ...: print(list(Chem.MolToSmiles(x) for x in BRICS.BRICSBuild(molfrags, onlyCompleteMols=False, maxDepth=0))) ['[16*]c1coc2ccc(-c3ccc4occ([16*])c4c3)cc12', '[16*]c1ccc2occ(-c3ccc4occ([16*])c4c3)c2c1', '[16*]c1ccc2occ(-c3coc4ccc([16*])cc34)c2c1', '[16*]c1coc2ccc(C(C)(C)C)cc12', '[16*]c1ccc2occ(C(C)(C)C)c2c1'] The results with two [16*] attachment points happen because there's a rule that allows [16*] - [[16*] bonds to be formed. This wasn't in the original BRICS paper but it is consistent with the rest of the rules, so we added it. I hope this helps, -greg On Mon, Mar 11, 2019 at 3:37 PM Marco Podda <marcopodda1...@gmail.com> wrote: > Hello, > first of all, many thanks for this awesome library. > > I have little to none knowledge of chemistry, so I hope you'll excuse me > if I say some chemical nonsense below. > > I have a fragmented molecule (fragmentation being done with the BRICS > implementation in rdkit) which (for example) looks like this: > > frags = ['[8*]C(C)(C)C', '[16*]c1ccc2occ([16*])c2c1'] > > Say I want to join the two fragments in the list. Then, I would write: > > from rdkit import Chem > from rdkit.Chem import BRICS > frags = ['[8*]C(C)(C)C', '[16*]c1ccc2occ([16*])c2c1'] > molfrags = [Chem.MolFromSmiles(f) for f in frags] > combined = list(BRICS.BRICSBuild(molfrags, maxDepth=1))[0] # maxDepth=1 > gives me 1 result in this case > print(Chem.MolToSmiles(combined, True)) # 'CC(C)(C)c1ccc2occ(C(C)(C)C)c2c1' > > If I understood this code correctly, BRICSBuild has reacted both dummy > spots in the second fragment with the dummy spot in the first fragment. > However, I would like to perform a partial join, meaning joining the first > fragment only with one of the two dummy spots in the second fragment. In > practice, I'm looking for a result like this: > > 'CC(C)(C)c1ccc2occ([16*])c2c1' > or > [16*]c1ccc2occ(C(C)(C)C)c2c1' > > Is there a way in rdkit to achieve this? > Again, sorry for the poor chemical jargon and if I make not much sense > from a chemical point of view. > > Thank you. > _______________________________________________ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss