Re: [Rdkit-discuss] Calculation of atomic descriptors, Code snippet
Open-Source Cheminformatics and Machine Learning
Brought to you by:
glandrum
|
From: Evgueni K. <eko...@gm...> - 2008-08-18 10:42:54
|
Thanks Greg - this is works.
Another question:
Can you please provide an example of use MolOps::getDistanceMat with the
samples how to extract distance data from this matrix
Regards,
Evgueni
2008/8/17 Greg Landrum <gre...@gm...>
> Dear Evgueni,
>
> > 2008/8/17 Evgueni Kolossov <eko...@gm...>
> >>
> >> Thanks Greg,
> >>
> >> But this is not enough:
> >>
> >> unsigned int minRingSize=ringInfo->
> >>>
> >>> minAtomRingSize(atomIdx);
> >>> for(VECT_INT_VECT_CI ringIt=ringInfo->atomRings().begin();
> >>> ringIt!=ringInfo->atomRings().end();++ringIt){
> >>> if(ringIt->size()==minRingSize){
> >>> if(std::find(ringIt->begin(),ringIt->end(),atomIdx)!=ringIt->end()){
> >>> // our atom is in this ring; do something
> >>> }
> >>> }
> >>> }
> >>> }
> >>
> >> In this case we got an iterator (ringIt) which is itself a vector (if I
> am
> >> right) of Ring atoms.
>
> It's a vector of ring atom indices. You can use these to get the
> corresponding atoms from the molecule.
>
> >> So to do something with atoms inside this ring we need somehow iterate
> >> through the atoms...
> >> Can you show how to do this?
> >> I have tried to do it this way:
> >> for (unsighed int i=0; i<minRingSize; i++)
> >> {
> >> RDKit::Atom * pAtom = mol.getAtomWithIdx(ringIt[i]) ;
> >> ..........
> >> }
> >> but this is not working.
>
> Here's a sample that is actually tested. It's now part of the getting
> started in C++ sample code. We loop over all atom rings, then grab
> each atom in the 5-rings and test to see if it's aromatic.
> I think this, combined with the earlier stuff I posted, should get you
> started:
>
> ---------------
> mol=SmilesToMol("C1CC2=C(C1)C1=C(NC3=C1C=CC=C3)C=C2");
> ringInfo = mol->getRingInfo();
> atomRings=ringInfo->atomRings();
>
> unsigned int nMatchingAtoms=0;
> for(VECT_INT_VECT_CI ringIt=atomRings.begin();
> ringIt!=atomRings.end();++ringIt){
> if(ringIt->size()!=5){
> continue;
> }
> bool isAromatic=true;
> for(INT_VECT_CI atomIt=ringIt->begin();
> atomIt!=ringIt->end();++atomIt){
> if(!mol->getAtomWithIdx(*atomIt)->getIsAromatic()){
> isAromatic=false;
> break;
> }
> }
> if(isAromatic){
> nMatchingAtoms+=5;
> }
> }
> TEST_ASSERT(nMatchingAtoms==5);
> ---------------
>
> Best Regards,
> -greg
>
--
Dr. Evgueni Kolossov (PhD)
eko...@gm...
Tel. +44(0)1628 627168
Mob. +44(0)7812070446
|