On Jul 1, 2017, at 17:19, Changge Ji <chicago...@gmail.com> wrote:
> I want to do some substructure match using MCS.
> It seems that Sanitize is needed for MCS.
> I met with the over valance error when using sanitize for some molecules.
> 
> Like the following one :
> --------------------------------
> sa = Chem.MolFromSmiles('c1cocn1')
> sa =Chem.MolFromSmarts(Chem.MolToSmarts(sa))
> Chem.SanitizeMol(sa)
> ----------------------------------
> The error info says that Explicit valence for O is greater than permitted.
> 
> Since I need to use smarts derived from MCS analysis, I can't use 
> Chem.MolFromSmiles(mol,kekuleSmiles=True).


I don't understand what you are doing. Where is the MCS?

Why do you take the oxazole SMILES and turn it into the SMARTS 
'[#6]1:[#6]:[#8]:[#6]:[#7]:1'?

Why do you think you need to sanitize the MCS?

The result from MolFromSmarts isn't a chemical molecule, and it's not generally 
possible to do a SanitizeMol() on it. For example, the following fails:

>>> mol = Chem.MolFromSmarts("ccO")
>>> Chem.SanitizeMol(mol)
[23:26:28] non-ring atom 0 marked aromatic
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Sanitization error: non-ring atom 0 marked aromatic

Finally, I think you mean Chem.MolToSmiles() at the end. But I can't figure out 
why you need that.

Here's an example of how to get the MCS using the RDKit:

>>> from rdkit import Chem
>>> from rdkit.Chem import MCS
>>> benzoxazole = Chem.MolFromSmiles("n1c2ccccc2oc1")
>>> sulfamoxole = Chem.MolFromSmiles("O=S(=O)(Nc1nc(c(o1)C)C)c2ccc(N)cc2")
>>> zoxazolamine = Chem.MolFromSmiles("C1=CC2=C(C=C1Cl)N=C(O2)N")
>>> MCS.FindMCS([benzoxazole, sulfamoxole, zoxazolamine])
MCSResult(numAtoms=6, numBonds=6, smarts='[#6]:1:[#6]:[#6]:[#6]:[#6]:[#6]:1', 
completed=1)
>>> mcs_smarts = MCS.FindMCS([benzoxazole, sulfamoxole, zoxazolamine]).smarts
>>> mcs_smarts
'[#6]:1:[#6]:[#6]:[#6]:[#6]:[#6]:1'

Here's an example of using it:

>>> mcs_pat = Chem.MolFromSmarts(mcs_smarts)
>>> benoxaprofen.HasSubstructMatch(mcs_pat)
True

There is no need to do an explicit SanitizeMol().

Best regards,


                                Andrew
                                da...@dalkescientific.com



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to