// Create an ArrayList for new data points.
final DataPoint[] newDataPoints = new DataPoint[dataPoints.length];
// Determine MZ range.
final Range mzRange = origDataFile.getDataMZRange();
// Loop through all original data points.
int i = 0;
for (final DataPoint dp : dataPoints) {
// Subtract baseline.
final double mz = dp.getMZ();
final int bin = mzRange.binNumber(numBins, mz);
final double baselineIntenstity = baselines[bin][scanIndex];
newDataPoints[i++] = baselineIntenstity <= 0.0
? new SimpleDataPoint(dp)
: new SimpleDataPoint(mz, Math.max(0.0, dp.getIntensity()
* (1.0 - baselineIntenstity)));