code: @Override
      public DescriptorValue calculate(IAtom atom, IAtomContainer ac) {
          if (!isCachedAtomContainer(ac)) {
              Double[] org = new Double[ac.getAtomCount()];
              for (int i = 0; i < org.length; i++)
                  org[i] = ac.getAtom(i).getCharge();
              IAtomContainer mol = atom.getBuilder().newInstance(IAtomContainer.class, ac);
              if (maxIterations != 0) peoe.setMaxGasteigerIters(maxIterations);
              try {
                  peoe.assignGasteigerMarsiliSigmaPartialCharges(mol, true);
                  for (int i = 0; i < ac.getAtomCount(); i++) {
                      // assume same order, so mol.getAtom(i) == ac.getAtom(i)
                      cacheDescriptorValue(ac.getAtom(i), ac, new DoubleResult(mol.getAtom(i).getCharge()));
                  }
              } catch (Exception e) {
                  return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), new DoubleResult(
                          Double.NaN), NAMES, e);
              }
              for (int i = 0; i < org.length; i++)
                  mol.getAtom(i).setCharge(org[i]);
          }
          return getCachedDescriptorValue(atom) != null ? new DescriptorValue(getSpecification(), getParameterNames(),
                  getParameters(), getCachedDescriptorValue(atom), NAMES) : null;
      }
docs: The method returns apha partial charges assigned to an heavy atom through Gasteiger Marsili
  It is needed to call the addExplicitHydrogensToSatisfyValency method from the class tools.HydrogenAdder.
  For this method will be only possible if the heavy atom has single bond.
  
  @param  atom              The IAtom for which the DescriptorValue is requested
  @param  ac                AtomContainer
  @return                   Value of the alpha partial charge