private void assignPreliminaryTypes(IAtomContainer container, String[] symbs) {
        // shallow copy
        IAtomContainer cpy = container.getBuilder().newInstance(IAtomContainer.class, container);
        Cycles.markRingAtomsAndBonds(cpy);
        for (AtomTypePattern matcher : patterns) {
            for (final int idx : matcher.matches(cpy)) {
                if (symbs[idx] == null) {
                    symbs[idx] = matcher.symb;
                }
            }
        }
    }
private void assignPreliminaryTypes ( IAtomContainer container , String [ ] symbs ) { IAtomContainer cpy = container . getBuilder ( ) . newInstance ( IAtomContainer . class , container ) ; Cycles . markRingAtomsAndBonds ( cpy ) ; for ( AtomTypePattern matcher : patterns ) { for ( final int idx : matcher . matches ( cpy ) ) { if ( symbs [ idx ] == null ) { symbs [ idx ] = matcher . symb ; } } } }
Preliminary atom types are assigned using SMARTS definitions.

@param container input structure representation
@param symbs     symbolic atom types