code: private boolean macroCycleInversion(AtomPair pair) {
  
          for (int v : pair.seqAt) {
              IAtom atom = mol.getAtom(v);
              if (!atom.isInRing() || adjList[v].length == 2)
                  continue;
              if (atom.getProperty(MacroCycleLayout.MACROCYCLE_ATOM_HINT) == null)
                  continue;
              final List<IBond> acyclic = new ArrayList<>(2);
              final List<IBond> cyclic = new ArrayList<>(2);
              for (int w : adjList[v]) {
                  IBond bond = bondMap.get(v, w);
                  if (bond.isInRing())
                      cyclic.add(bond);
                  else
                      acyclic.add(bond);
              }
              if (cyclic.size() > 2)
                  continue;
  
              for (IBond bond : acyclic) {
                  if (bfix.contains(bond))
                      continue;
                  Arrays.fill(visited, false);
                  stackBackup.len = visit(visited, stackBackup.xs, v, idxs.get(bond.getOther(atom)), 0);
  
                  Point2d a = atom.getPoint2d();
                  Point2d b = bond.getOther(atom).getPoint2d();
  
                  Vector2d perp = new Vector2d(b.x - a.x, b.y - a.y);
                  perp.normalize();
                  double score = congestion.score();
                  backupCoords(backup, stackBackup);
  
                  reflect(stackBackup, new Point2d(a.x - perp.y, a.y + perp.x), new Point2d(a.x + perp.y, a.y - perp.x));
                  congestion.update(visited, stackBackup.xs, stackBackup.len);
  
                  if (percDiff(score, congestion.score()) >= IMPROVEMENT_PERC_THRESHOLD) {
                      return true;
                  }
  
                  restoreCoords(stackBackup, backup);
              }
          }
  
          return false;
      }
docs: of the ring