This is from lipinski.cpp:

  if (strict == NonStrict) {
    std::string pattern = "[!$(*#*)&!D1]-&!@[!$(*#*)&!D1]";
    pattern_flyweight m(pattern);
    return m.get().countMatches(mol);
  }
  else if (strict==Strict) {
    std::string strict_pattern =

"[!$(*#*)&!D1&!$(C(F)(F)F)&!$(C(Cl)(Cl)Cl)&!$(C(Br)(Br)Br)&!$(C([CH3])("

"[CH3])[CH3])&!$([CD3](=[N,O,S])-!@[#7,O,S!D1])&!$([#7,O,S!D1]-!@[CD3]="

"[N,O,S])&!$([CD3](=[N+])-!@[#7!D1])&!$([#7!D1]-!@[CD3]=[N+])]-!@[!$(*#"

"*)&!D1&!$(C(F)(F)F)&!$(C(Cl)(Cl)Cl)&!$(C(Br)(Br)Br)&!$(C([CH3])([CH3])"
        "[CH3])]";
    pattern_flyweight m(strict_pattern);
    return m.get().countMatches(mol);
  } else {

I suspect that it's taking the "Strict" brach, where the SMARTS pattern is
more complex and actually has a rule that excludes tert-butyl (the
"&!$(C([CH3])([CH3])[CH3])]" at the end).

Ivan


On Tue, Oct 15, 2019 at 1:06 PM Geoffrey Hutchison <
geoff.hutchi...@gmail.com> wrote:

> I'm using a script in RDKit to grab a bunch of descriptors for QSAR / ML.
> I have a particular question about the # of rotatable bonds:
>
> Consider:
>
> from rdkit import Chem
> from rdkit.Chem import Descriptors
> example = Chem.MolFromSmiles("CN(C(=O)OC(C)(C)C)C(=S)NC(=O)OC(C)(C)C")
> Descriptors.NumRotatableBonds(example)
> 0
>
> example2 = Chem.MolFromSmiles("CC(C)(C)CCC(C)(C)C")
> Descriptors.NumRotatableBonds(example2)
> 1
>
>
> Can someone explain why a terminal butyl isn't a rotatable bond? Based on
> mailing list questions, I thought NumRotatableBonds was supposed to return
> matches for the SMARTS "[!$(*#*)&!D1]-&!@[!$(*#*)&!D1]"  (e.g. what's
> defined in the Lipinski code).
>
> Thanks,
> -Geoff
>
>
>
> _______________________________________________
> 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