Example #1
0
  @Override
  public MsScan performFilter(MsScan scan) {

    if (!Avalues.containsKey(numOfDataPoints) || !Hvalues.containsKey(numOfDataPoints)) {
      return scan;
    }

    int[] aVals = Avalues.get(numOfDataPoints);
    int h = Hvalues.get(numOfDataPoints);

    int marginSize = (numOfDataPoints + 1) / 2 - 1;
    float sumOfInts;

    // Create data point list object and fill it with the scan data points
    MsSpectrumDataPointList dataPoints = MSDKObjectBuilder.getMsSpectrumDataPointList();
    scan.getDataPoints(dataPoints);
    float intensityValues[] = dataPoints.getIntensityBuffer();
    double mzValues[] = dataPoints.getMzBuffer();

    int newDataPointsLength = dataPoints.getSize() - (marginSize * 2);

    // only process MS level 1 scans
    if (scan.getMsFunction().getMsLevel() != 1) {
      return scan;
    }

    // only process scans with datapoints
    if (newDataPointsLength < 1) {
      return scan;
    }

    MsSpectrumDataPointList newDataPoints = MSDKObjectBuilder.getMsSpectrumDataPointList();

    for (int spectrumInd = marginSize;
        spectrumInd < (dataPoints.getSize() - marginSize);
        spectrumInd++) {

      // zero intensity data points must be left unchanged
      if (intensityValues[spectrumInd] == 0) {
        intensityValues[spectrumInd - marginSize] = intensityValues[spectrumInd];
        continue;
      }

      sumOfInts = aVals[0] * intensityValues[spectrumInd];

      for (int windowInd = 1; windowInd <= marginSize; windowInd++) {
        sumOfInts +=
            aVals[windowInd]
                * (intensityValues[spectrumInd + windowInd]
                    + intensityValues[spectrumInd - windowInd]);
      }

      sumOfInts = sumOfInts / h;

      if (sumOfInts < 0) {
        sumOfInts = 0;
      }
      newDataPoints.add(mzValues[spectrumInd], sumOfInts);
    }

    // Return a new scan with the new data points
    MsScan result = MSDKObjectBuilder.getMsScan(store, scan.getScanNumber(), scan.getMsFunction());
    result.setDataPoints(newDataPoints);
    result.setChromatographyInfo(scan.getChromatographyInfo());
    result.setRawDataFile(scan.getRawDataFile());

    return result;
  }