@Override
    public DescriptorValue calculate(IAtomContainer container) {
        IRingSet rs;
        try {
            AllRingsFinder arf = new AllRingsFinder();
            rs = arf.findAllRings(container);
        } catch (Exception e) {
            return getDummyDescriptorValue(new CDKException("Could not find all rings: " + e.getMessage()));
        }

        String[] fragment = new String[container.getAtomCount()];
        EStateAtomTypeMatcher eStateMatcher = new EStateAtomTypeMatcher();
        eStateMatcher.setRingSet(rs);

        for (IAtomContainer ring : rs.atomContainers()) {
            boolean arom = true;
            for (IBond bond : ring.bonds()) {
                if (!bond.isAromatic()) {
                    arom = false;
                    break;
                }
            }
            ring.setFlag(CDKConstants.ISAROMATIC, arom);
        }

        for (int i = 0; i < container.getAtomCount(); i++) {
            IAtomType atomType = eStateMatcher.findMatchingAtomType(container, container.getAtom(i));
            if (atomType == null) {
                fragment[i] = null;
            } else {
                fragment[i] = atomType.getAtomTypeName();
            }
        }

        double[] ret = new double[0];
        try {
            ret = calculate(container, fragment, rs);
        } catch (CDKException e) {
            e.printStackTrace();
            return getDummyDescriptorValue(new CDKException(e.getMessage()));
        }

        DoubleArrayResult results = new DoubleArrayResult();
        results.add(ret[0]);
        results.add(ret[1]);
        results.add(ret[2]);

        return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), results,
                getDescriptorNames());
    }
@ Override public DescriptorValue calculate ( IAtomContainer container ) { IRingSet rs ; try { AllRingsFinder arf = new AllRingsFinder ( ) ; rs = arf . findAllRings ( container ) ; } catch ( Exception e ) { return getDummyDescriptorValue ( new CDKException ( "Could not find all rings: " + e . getMessage ( ) ) ) ; } String [ ] fragment = new String [ container . getAtomCount ( ) ] ; EStateAtomTypeMatcher eStateMatcher = new EStateAtomTypeMatcher ( ) ; eStateMatcher . setRingSet ( rs ) ; for ( IAtomContainer ring : rs . atomContainers ( ) ) { boolean arom = true ; for ( IBond bond : ring . bonds ( ) ) { if ( ! bond . isAromatic ( ) ) { arom = false ; break ; } } ring . setFlag ( CDKConstants . ISAROMATIC , arom ) ; } for ( int i = 0 ; i < container . getAtomCount ( ) ; i ++ ) { IAtomType atomType = eStateMatcher . findMatchingAtomType ( container , container . getAtom ( i ) ) ; if ( atomType == null ) { fragment [ i ] = null ; } else { fragment [ i ] = atomType . getAtomTypeName ( ) ; } } double [ ] ret = new double [ 0 ] ; try { ret = calculate ( container , fragment , rs ) ; } catch ( CDKException e ) { e . printStackTrace ( ) ; return getDummyDescriptorValue ( new CDKException ( e . getMessage ( ) ) ) ; } DoubleArrayResult results = new DoubleArrayResult ( ) ; results . add ( ret [ 0 ] ) ; results . add ( ret [ 1 ] ) ; results . add ( ret [ 2 ] ) ; return new DescriptorValue ( getSpecification ( ) , getParameterNames ( ) , getParameters ( ) , results , getDescriptorNames ( ) ) ; }
The AlogP descriptor.

TODO Ideally we should explicit H addition should be cached

@param atomContainer the molecule to calculate on
@return the result of the calculation