[Redirected to the list because the question is of general interest]

Hi Evgueni,

On Wed, Mar 25, 2009 at 10:56 AM, Evgueni Kolossov
<[email protected]> wrote:
>
> Got some problems with looping over an atom's bonds when I need to compare
> (see below):
>
> double CRDKitDescriptor::GetEdgeDegree(RDKit::Bond * Bond_in, bool
> bWeighted) const
> {
>        double dRtn = 0.0;
>        RDKit::ROMol::OEDGE_ITER beg,end;
>        RDKit::ROMol mol = Bond_in->getOwningMol();
>        //OLD CODE//    RDKit::ROMol::GRAPH_MOL_BOND_PMAP::type pMap =
> mol.getBondPMap();
>
>        // Take two atoms involved in this bond.
>        RDKit::Atom *pAtom[2] = { Bond_in->getBeginAtom(),
> Bond_in->getEndAtom() };
>        for (int i=0; i < 2; i++)
>        {
>                // Add degrees of other bonds (not connected to H) on this
> atom.
>                boost::tie(beg,end) = mol.getAtomBonds(pAtom[i]);
>                while(beg!=end)
>                {
>                        //OLD CODE//    RDKit::Bond *pCurrentBond =
> pMap[*beg];
>                        //NEW CODE//    RDKit::BOND_SPTR pCurrentBond =
> (mol)[*beg];
> //NOW I have RDKit::Bond pointer and RDKit::BOND_SPTR instead of 2
> RDKit::Bond pointers
> //and how I am going to compare them?
>                        if (pCurrentBond != Bond_in
>                                &&
> pCurrentBond->getOtherAtom(pAtom[i])->getAtomicNum() != 1)//not 'H' and not
> the same bond
>                        {
>                                // Bond contributes its weight, or 1 if
> we're not considering weights.
>                dRtn += bWeighted ? GetBondWeight(pCurrentBond) : 1.0;
>                        }
>                        ++beg;
>        }
>        }
>        return dRtn;
> }
> Can you help please!!!

Indeed, I can.
A BOND_SPTR is a boost shared pointer that contains a Bond *. To get
the Bond * itself, you call the shared pointer's get() method.
Something like this:

    if (pCurrentBond.get() != Bond_in)

Best Regards,
-greg

Reply via email to