code: 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;
                  }
              }
          }
      }
docs: Preliminary atom types are assigned using SMARTS definitions.
  
  @param container input structure representation
  @param symbs     symbolic atom types