code: @Override
      public Partition getInitialPartition() {
          if (ignoreElements) {
              int n = atomContainer.getAtomCount();
              return Partition.unit(n);
          }
  
          Map<String, SortedSet<Integer>> cellMap = new HashMap<String, SortedSet<Integer>>();
          int numberOfAtoms = atomContainer.getAtomCount();
          for (int atomIndex = 0; atomIndex < numberOfAtoms; atomIndex++) {
              String symbol = atomContainer.getAtom(atomIndex).getSymbol();
              SortedSet<Integer> cell;
              if (cellMap.containsKey(symbol)) {
                  cell = cellMap.get(symbol);
              } else {
                  cell = new TreeSet<Integer>();
                  cellMap.put(symbol, cell);
              }
              cell.add(atomIndex);
          }
  
          List<String> atomSymbols = new ArrayList<String>(cellMap.keySet());
          Collections.sort(atomSymbols);
  
          Partition elementPartition = new Partition();
          for (String key : atomSymbols) {
              SortedSet<Integer> cell = cellMap.get(key);
              elementPartition.addCell(cell);
          }
  
          return elementPartition;
      }
docs: Get the element partition from an atom container, which is simply a list
  of sets of atom indices where all atoms in one set have the same element
  symbol.
  
  So for atoms [C0, N1, C2, P3, C4, N5] the partition would be
  [{0, 2, 4}, {1, 5}, {3}] with cells for elements C, N, and P.
  
  @return a partition of the atom indices based on the element symbols