Hi Greg,

Yes, this is solution I been thinking about as well but there is 2 problems:
1. It will slow dawn mapping process which is slow already
2. What atom to use for replacement?

What if I will just remove this atom(s)?

Regards,
Evgueni

2009/11/6 Greg Landrum <greg.land...@gmail.com>

> On Wed, Nov 4, 2009 at 7:54 PM, Greg Landrum <greg.land...@gmail.com>
> wrote:
> >
> > On Wed, Nov 4, 2009 at 3:26 PM, Evgueni Kolossov <ekolos...@gmail.com>
> wrote:
> >>
> >> I found that SubstructMatch would not work if query is a fragment (with
> *
> >> atoms).
> >> Can you suggest solution for this problem?
> >
> > That's a bug. Dummy atoms (things with atomic number zero) that do not
> > have an isotope specification should match anything. If you have a
> > sourceforge account, please enter the bug, otherwise let me know and I
> > will enter it.
>
> After going back through the code and thinking about this for a while
> I'm going to change my original answer: it's not a bug that standard
> dummy atoms only match other dummy atoms. When I saw the "*" in the
> original message I started thinking about the QueryAtoms produced by a
> "*" in SMARTS, which definitely should (and do) match other dummies.
> The behavior with standard Atoms is useful for things like flagging
> attachment points of R groups on a scaffold. Here's an example:
>
> [5] >>> f= Chem.MolFromSmiles('c1cccnc1*')
>
> [6] >>> p = Chem.MolFromSmarts('c1cccnc1*')
>
> [9] >>> m = Chem.MolFromSmiles('c1ccc(C)nc1*')
>
> Matching using f, which has dummy Atoms only gives one match:
> [10] >>> m.GetSubstructMatches(f)
> Out[10]: ((0, 1, 2, 3, 5, 6, 7),)
>
> But matching using p, which has a QueryAtom built from "*" matches twice:
> [11] >>> m.GetSubstructMatches(p)
> Out[11]: ((0, 1, 2, 3, 5, 6, 7), (2, 1, 0, 6, 5, 3, 4))
>
> For your use case, I'd suggest replacing the dummies in your fragments
> with QueryAtoms that have the appropriate query, something like this
> (not tested):
>
> //---------------------------------------------
> #include <GraphMol/RDKitQueries.h>
>
> void replaceDummies(RWMol *frag){
>  QueryAtom *qat = new QueryAtom();
>  qat->setQuery(makeAtomNullQuery());
>  for(unsigned int i=0;i<frag->getNumAtoms();++i){
>    if(frag->getAtomWithIdx(i)->getAtomicNum()==0){
>      frag->replaceAtom(i,qat);
>    }
>  }
>  delete qat;
> }
> //---------------------------------------------
>
> I hope this helps,
> -greg
>
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to