code: @Override
      public DescriptorValue calculate(IAtomContainer mol) {
          DoubleResult result;
          try {
              int nC = 0;
              int nCSP3 = 0;
  	        CDKAtomTypeMatcher matcher = CDKAtomTypeMatcher.getInstance(mol.getBuilder());
  	        for (IAtom atom : mol.atoms()) {
  	            if (atom.getAtomicNumber() == 6) {
  	            	nC++;
  	                IAtomType matched = matcher.findMatchingAtomType(mol, atom);
  	                if (matched != null && matched.getHybridization() == IAtomType.Hybridization.SP3) {
  	                	nCSP3++;
  	                }
  	            }
  	        }
  	        result = new DoubleResult(nC == 0 ? 0 : (double)nCSP3 / nC);
          }
          catch (CDKException e) {
          	result = new DoubleResult(Double.NaN);
          }
          
          return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), result,
                  getDescriptorNames());
      }
docs: Calculates the Fsp<sup>3</sup> descriptor value for the given {@link IAtomContainer}.
  
  @param mol An {@link org.openscience.cdk.interfaces.IAtomContainer} for which this descriptor
  should be calculated
  @return An object of {@link org.openscience.cdk.qsar.DescriptorValue} that contains the
  calculated Fsp<sup>3</sup> descriptor value