@Override
  protected OperationData process(IDataset input, IMonitor monitor) {

    double theta = 0;
    try {
      theta = ScanMetadata.getTheta(input);
    } catch (Exception e) {
    }

    NormalDistribution beamfootprint =
        new NormalDistribution(
            0, (1e-3 * model.getBeamHeight() / 2 * Math.sqrt(2 * Math.log(2) - 0.5)));
    double areaCorrection =
        2
            * (beamfootprint.cumulativeProbability(
                (model.getFootprint()
                    * Math.sin((theta + model.getAngularFudgeFactor()) * Math.PI / 180))));

    Dataset output = DatasetUtils.cast(input, Dataset.FLOAT64);

    output = Maths.multiply(input, areaCorrection);

    Dataset outputSum =
        DatasetFactory.createFromObject((DatasetUtils.cast(output, Dataset.FLOAT64)).sum());

    return new OperationData(output, outputSum);
  }