Awesome, thanks!

On Thu, 30 Jan 2020 at 11:01, Greg Landrum <greg.land...@gmail.com> wrote:

> It's worth noting that you can write a python function to do this, but I
> just don't think it's possible to express it as a SMARTS.
>
> Here's a gist showing how to identify (and highlight) the rings in a
> molecule which contain atoms matching particular substructure queries;
> https://gist.github.com/greglandrum/798f555959e04356537d63d659dd8e76
>
> I'm going to do a blog post on this in the next day or so with more
> details because I think it demonstrates a couple of interesting and useful
> tricks,[1] but here's a quick explanation:
> getSharedRings() takes a molecule and a list of query molecules. It
> returns all rings (as atom indices) from the molecule which contain at
> least one of each type of "matching atom". In this case a "matching atom"
> is the first atom in each of the query molecules.
>
>  Best
> -greg
> [1] plus it was kind of fun to think about and put together.
>
>
>
>
> On Wed, Jan 29, 2020 at 7:21 PM Alexis Parenty <
> alexis.parenty.h...@gmail.com> wrote:
>
>> Many thanks for your responses. Recursive smiles become cumbersome to
>> write when they are on fused aromatics. I was hopping I could write a
>> simple function that would cover all regio-isomers from any aromatics...
>> Looks more complicated than I thought!
>> Thanks,
>> Alexis
>>
>> On Wed, 29 Jan 2020 at 13:49, Greg Landrum <greg.land...@gmail.com>
>> wrote:
>>
>>> I agree with Chris here: I don't think you can do this with dot
>>> disconnection and that you need to use recursive SMARTS as Chris describes.
>>>
>>> A tweak to Chris' answer: if you want the query to look for regioisomers
>>> around a phenyl ring you unfortunately need to actually specify the whole
>>> ring in order to avoid having the query match a Cl and a Br in different
>>> fused rings in some cases. This gets a bit unwieldy:
>>> Cl[c;$(c1(Cl)c(Br)cccc1),$(c1(Cl)cc(Br)ccc1),$(c1(Cl)ccc(Br)cc1)]
>>>
>>> Here's a demo:
>>>
>>> In [12]: p =
>>> Chem.MolFromSmarts('Cl[c;$(c1(Cl)c(Br)cccc1),$(c1(Cl)cc(Br)ccc1),$(c1(Cl)ccc(Br)cc1)]')
>>>
>>>
>>> In [13]: Chem.MolFromSmiles('Clc1c(Br)cccc1').HasSubstructMatch(p)
>>>
>>> Out[13]: True
>>>
>>> In [14]: Chem.MolFromSmiles('Clc1cc(Br)ccc1').HasSubstructMatch(p)
>>>
>>> Out[14]: True
>>>
>>> In [15]: Chem.MolFromSmiles('Clc1ccc(Br)cc1').HasSubstructMatch(p)
>>>
>>> Out[15]: True
>>>
>>> In [16]:
>>> Chem.MolFromSmiles('ClC1=CC=CC2=C1C(Br)=CC=C2').HasSubstructMatch(p)
>>>
>>> Out[16]: False
>>>
>>>
>>> It's harder if you want to actually retrieve the atoms that match the
>>> query directly using the SMARTS. Hopefully you're just looking for the
>>> match. :-)
>>>
>>> -greg
>>>
>>>
>>> On Wed, Jan 29, 2020 at 1:39 PM Chris Earnshaw <cgearns...@gmail.com>
>>> wrote:
>>>
>>>> Hi
>>>>
>>>> Dot-disconnected fragments are not going to work for this, as you
>>>> describe. You need to use recursive SMARTS (see
>>>> https://www.daylight.com/dayhtml/doc/theory/theory.smarts.html section
>>>> 4.4). Something like:
>>>> Clc[$(cBr);$(ccBr);$(cccBr)]
>>>> should (I hope!) be a reasonable starting point.
>>>>
>>>> Chris Earnshaw
>>>>
>>>> On Wed, 29 Jan 2020 at 11:12, Alexis Parenty <
>>>> alexis.parenty.h...@gmail.com> wrote:
>>>>
>>>>> Hi everyone,
>>>>>
>>>>>
>>>>>
>>>>> Is there a way to get a substructure match of regioisomers using a
>>>>> smarts by separating the fragments with “.”:
>>>>>
>>>>>
>>>>>
>>>>> The following approach works but is too permissive since it will also
>>>>> match structures with a bromide or a chloride linked to a aliphatic
>>>>> carbon...
>>>>>
>>>>>
>>>>> [image: image.png]
>>>>>
>>>>>
>>>>>
>>>>> mol_smiles_structure = Chem.MolFromSmiles("Clc1cc(Br)ccc1")
>>>>>
>>>>> mol_smarts_fragment = Chem.MolFromSmarts("c1ccccc1.[Cl].[Br]")
>>>>>
>>>>> print(mol_smiles_structure.HasSubstructMatch(mol_smarts_fragment))
>>>>>
>>>>> ð  True
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> mol_smiles_structure = Chem.MolFromSmiles("ClCc1cc(Br)ccc1")
>>>>>
>>>>> print(mol_smiles_structure.HasSubstructMatch(mol_smarts_fragment))
>>>>>
>>>>> ð  True
>>>>>
>>>>>
>>>>>
>>>>> If I specify that the Br and the Cl need to be attached to an aromatic
>>>>> to make it less permissive, it no longer match because I cannot specify
>>>>> that the two general aromatics [a] also belong to the benzene ring... 
>>>>> (i,e.
>>>>> it tries to look for 8 aromatics instead of six...)
>>>>>
>>>>> mol_smiles_structure = Chem.MolFromSmiles("Clc1cc(Br)ccc1")
>>>>>
>>>>> mol_smarts_fragment = Chem.MolFromSmarts("c1ccccc1.[a][Cl].[a][Br]")
>>>>>
>>>>> print(mol_smiles_structure.HasSubstructMatch(mol_smarts_fragment))
>>>>>
>>>>> ð  False
>>>>>
>>>>>
>>>>>
>>>>> Thanks!
>>>>>
>>>>> Alexis
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>
>>>
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to