code: void assign(IAtomContainer container, String[] symbs, EdgeToBondMap bonds, int[][] graph, Set<IBond> mmffArom) {
  
          int[] contribution = new int[graph.length];
          int[] doubleBonds = new int[graph.length];
          Arrays.fill(doubleBonds, -1);
          setupContributionAndDoubleBonds(container, bonds, graph, contribution, doubleBonds);
  
          int[][] cycles = findAromaticRings(cyclesOfSizeFiveOrSix(container, graph), contribution, doubleBonds);
  
          for (int[] cycle : cycles) {
              int len = cycle.length - 1;
              if (len == 6) {
                  updateAromaticTypesInSixMemberRing(cycle, symbs);
              }
              if (len == 5 && normaliseCycle(cycle, contribution)) {
                  updateAromaticTypesInFiveMemberRing(cycle, symbs);
              }
              // mark aromatic bonds
              for (int i = 1; i < cycle.length; i++)
                  mmffArom.add(bonds.get(cycle[i], cycle[i - 1]));
          }
      }
docs: Given the assigned preliminary MMFF atom types (symbs[]) update these to the aromatic types.
  To begin, all the 5 and 6 member aromatic cycles are discovered. The symbolic types of five
  and six member cycles are then update with {@link #updateAromaticTypesInFiveMemberRing(int[],
  String[])} and {@link #updateAromaticTypesInSixMemberRing(int[], String[])}.
  
  @param container structure representation
  @param symbs     vector of symbolic types for the whole structure
  @param bonds     edge to bond map lookup
  @param graph     adjacency list graph representation of structure
  @param mmffArom  set of bonds that are aromatic