code: public double getAtomOverlapScore(IAtomContainer ac, Vector overlappingAtoms) {
          overlappingAtoms.removeAllElements();
          IAtom atom1 = null;
          IAtom atom2 = null;
          Point2d p1 = null;
          Point2d p2 = null;
          double distance = 0;
          double overlapScore = 0;
          double bondLength = GeometryUtil.getBondLengthAverage(ac);
          double overlapCutoff = bondLength / 4;
          logger.debug("Bond length is set to " + bondLength);
          logger.debug("Now cyling through all pairs of atoms");
          for (int f = 0; f < ac.getAtomCount(); f++) {
              atom1 = ac.getAtom(f);
              p1 = atom1.getPoint2d();
              for (int g = f + 1; g < ac.getAtomCount(); g++) {
                  atom2 = ac.getAtom(g);
                  p2 = atom2.getPoint2d();
                  distance = p1.distance(p2);
                  if (distance < overlapCutoff) {
                      logger.debug("Detected atom clash with distance: " + distance
                              + ", which is smaller than overlapCutoff " + overlapCutoff);
                      overlapScore += overlapCutoff;
                      overlappingAtoms.addElement(new OverlapPair(atom1, atom2));
                  }
              }
          }
          return overlapScore;
      }
docs: Calculates a score based on the overlap of atoms.
  The overlap is calculated by summing up the distances between all pairs of
  atoms, if they are less than half the standard bondlength apart.
  
  @param  ac                The Atomcontainer to work on
  @param  overlappingAtoms  Description of the Parameter
  @return                   The overlapScore value