Ok, I'll give in my modified version of the original CDK method I obtained
(forgot how).  Be warned though - there're a lot of hacks in this because
basically - AMBIT SMARTS had issues regarding implicit hydrogens, and when
you are dealing with SMARTS atom types I did the minimum necessary to get
it work.

public static synchronized void calculateImplicitHydrogens( IAtomContainer
mol ) {

        final String[] HYVALENCE_EL={"C","N","O","S","P", "F"};
        final int[]   HYVALENCE_VAL={ 4,  3,  2,  2,  3,   1 };
        for (int n=0; n < mol.getAtomCount() ;n++)
        {
            IAtom atom=mol.getAtom(n);
            String el=atom.getSymbol();
            int hy=0;

            // FIXME  I don't care at the moment what this is - I just want
the SMILES generators to stop complaining!
            atom.setImplicitHydrogenCount( 0 );

            if( el != null ) {
                for (int i=0;i<HYVALENCE_EL.length;i++) if
(el.equals(HYVALENCE_EL[i])) {hy=HYVALENCE_VAL[i]; break;}
            } else {
                    atom.setImplicitHydrogenCount( 0 );
            }

            if (hy==0) continue;
            int ch = atom.getFormalCharge() == null ? 0 :
atom.getFormalCharge();
            if (el.equals("C")) ch=-Math.abs(ch);
            final int unpaired=0; // (not current available, maybe
introduce later)
            hy+=ch-unpaired;

            // (needs to include actual H's) for (int
i=0;i<bondAdj[n].length;i++) hy-=bondOrder[bondAdj[n][i]];
            for (IBond bond : mol.getConnectedBondsList(atom))
            {
                if (bond.getOrder()==IBond.Order.SINGLE) hy-=1;
                else if (bond.getOrder()==IBond.Order.DOUBLE) hy-=2;
                else if (bond.getOrder()==IBond.Order.TRIPLE) hy-=3;
                else if (bond.getOrder()==IBond.Order.QUADRUPLE) hy-=4;
                // (look for zero-bonds later on)
            }

            // treat aromatics as an extra bond (one less hydrogen)
            if( isAromatic(atom) )
                hy--;

            atom.setImplicitHydrogenCount( Math.max(0,hy) );
        }

    }



On 6 August 2015 at 19:29, John M <john.wilkinson...@gmail.com> wrote:

>
> On 6 August 2015 at 17:36, Edmund Duesbury <lip1...@sheffield.ac.uk>
> wrote:
>
>> it's an iterator having an addition/removal somewhere
>
>
> Not a thread collision. Do you have your calculateImplicitHydrogens
> method. Also note implicit H on a query atom is currently superfluous
> unless you use it your self.
>
> Regards,
> John W May
> john.wilkinson...@gmail.com
>
------------------------------------------------------------------------------
_______________________________________________
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user

Reply via email to