public IAtomContainer assignInductivePartialCharges(IAtomContainer ac) throws Exception {
        if (factory == null) {
            factory = AtomTypeFactory
                    .getInstance("org/openscience/cdk/config/data/jmol_atomtypes.txt", ac.getBuilder());
        }

        int stepsLimit = 9;
        IAtom[] atoms = AtomContainerManipulator.getAtomArray(ac);
        double[] pChInch = new double[atoms.length * (stepsLimit + 1)];
        double[] ElEn = new double[atoms.length * (stepsLimit + 1)];
        double[] pCh = new double[atoms.length * (stepsLimit + 1)];
        double[] startEE = getPaulingElectronegativities(ac, true);
        for (int e = 0; e < atoms.length; e++) {
            ElEn[e] = startEE[e];
            //logger.debug("INDU: initial EE "+startEE[e]);
        }
        //double tmp1 = 0;
        //double tmp2 = 0;
        for (int s = 1; s < 10; s++) {
            for (int a = 0; a < atoms.length; a++) {
                pChInch[a + (s * atoms.length)] = getAtomicChargeIncrement(ac, a, ElEn, s);
                pCh[a + (s * atoms.length)] = pChInch[a + (s * atoms.length)] + pCh[a + ((s - 1) * atoms.length)];
                ElEn[a + (s * atoms.length)] = ElEn[a + ((s - 1) * atoms.length)]
                        + (pChInch[a + (s * atoms.length)] / getAtomicSoftnessCore(ac, a));
                if (s == 9) {
                    atoms[a].setProperty("InductivePartialCharge", new Double(pCh[a + (s * atoms.length)]));
                    atoms[a].setProperty("EffectiveAtomicElectronegativity", new Double(ElEn[a + (s * atoms.length)]));
                }
                //tmp1 = pCh[a + (s * atoms.length)];
                //tmp2 = ElEn[a + (s * atoms.length)];
                //logger.debug("DONE step " + s + ", atom " + atoms[a].getSymbol() + ", ch " + tmp1 + ", ee " + tmp2);
            }
        }
        return ac;
    }
public IAtomContainer assignInductivePartialCharges ( IAtomContainer ac ) throws Exception { if ( factory == null ) { factory = AtomTypeFactory . getInstance ( "org/openscience/cdk/config/data/jmol_atomtypes.txt" , ac . getBuilder ( ) ) ; } int stepsLimit = 9 ; IAtom [ ] atoms = AtomContainerManipulator . getAtomArray ( ac ) ; double [ ] pChInch = new double [ atoms . length * ( stepsLimit + 1 ) ] ; double [ ] ElEn = new double [ atoms . length * ( stepsLimit + 1 ) ] ; double [ ] pCh = new double [ atoms . length * ( stepsLimit + 1 ) ] ; double [ ] startEE = getPaulingElectronegativities ( ac , true ) ; for ( int e = 0 ; e < atoms . length ; e ++ ) { ElEn [ e ] = startEE [ e ] ; } for ( int s = 1 ; s < 10 ; s ++ ) { for ( int a = 0 ; a < atoms . length ; a ++ ) { pChInch [ a + ( s * atoms . length ) ] = getAtomicChargeIncrement ( ac , a , ElEn , s ) ; pCh [ a + ( s * atoms . length ) ] = pChInch [ a + ( s * atoms . length ) ] + pCh [ a + ( ( s - 1 ) * atoms . length ) ] ; ElEn [ a + ( s * atoms . length ) ] = ElEn [ a + ( ( s - 1 ) * atoms . length ) ] + ( pChInch [ a + ( s * atoms . length ) ] / getAtomicSoftnessCore ( ac , a ) ) ; if ( s == 9 ) { atoms [ a ] . setProperty ( "InductivePartialCharge" , new Double ( pCh [ a + ( s * atoms . length ) ] ) ) ; atoms [ a ] . setProperty ( "EffectiveAtomicElectronegativity" , new Double ( ElEn [ a + ( s * atoms . length ) ] ) ) ; } } } return ac ; }
Main method, set charge as atom properties.

@param  ac             AtomContainer
@return                AtomContainer
@exception  Exception  Description of the Exception