RawDataFileUtil.java

/*
 * (C) Copyright 2015-2017 by MSDK Development Team
 *
 * This software is dual-licensed under either
 *
 * (a) the terms of the GNU Lesser General Public License version 2.1 as published by the Free
 * Software Foundation
 *
 * or (per the licensee's choosing)
 *
 * (b) the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation.
 */

package io.github.msdk.util;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Nonnull;

import com.google.common.collect.Range;

import io.github.msdk.datamodel.chromatograms.Chromatogram;
import io.github.msdk.datamodel.rawdata.MsScan;
import io.github.msdk.datamodel.rawdata.RawDataFile;

/**
 * <p>
 * RawDataFileUtil class.
 * </p>
 */
public class RawDataFileUtil {

  /**
   * <p>
   * getScans.
   * </p>
   *
   * @param rawDataFile a {@link io.github.msdk.datamodel.rawdata.RawDataFile} object.
   * @param msFunction a {@link io.github.msdk.datamodel.rawdata.MsFunction} object.
   * @return a {@link java.util.List} object.
   */
  @Nonnull
  static public List<MsScan> getScans(RawDataFile rawDataFile, String msFunction) {
    ArrayList<MsScan> msScanList = new ArrayList<MsScan>();
    List<MsScan> scans = rawDataFile.getScans();
    synchronized (scans) {
      for (MsScan scan : scans) {
        String scanMsFunction = scan.getMsFunction();
        if (scanMsFunction == null)
          continue;
        if (scanMsFunction.equals(msFunction))
          msScanList.add(scan);
      }
    }
    return msScanList;
  }

  /**
   * <p>
   * getScans.
   * </p>
   *
   * @param rawDataFile a {@link io.github.msdk.datamodel.rawdata.RawDataFile} object.
   * @param rtRange a {@link com.google.common.collect.Range} object.
   * @return a {@link java.util.List} object.
   */
  @Nonnull
  static public List<MsScan> getScans(RawDataFile rawDataFile, Range<Float> rtRange) {
    ArrayList<MsScan> msScanList = new ArrayList<MsScan>();
    List<MsScan> scans = rawDataFile.getScans();
    synchronized (scans) {
      for (MsScan scan : scans) {
        Float scanRT = scan.getRetentionTime();
        if (scanRT != null) {
          if (rtRange.contains(scanRT))
            msScanList.add(scan);
        }
      }
    }
    return new ArrayList<MsScan>();
  }

  /**
   * <p>
   * getScans.
   * </p>
   *
   * @param rawDataFile a {@link io.github.msdk.datamodel.rawdata.RawDataFile} object.
   * @param msFunction a {@link io.github.msdk.datamodel.rawdata.MsFunction} object.
   * @param rtRange a {@link com.google.common.collect.Range} object.
   * @return a {@link java.util.List} object.
   */
  @Nonnull
  static public List<MsScan> getScans(RawDataFile rawDataFile, String msFunction,
      Range<Float> rtRange) {
    ArrayList<MsScan> msScanList = new ArrayList<MsScan>();
    List<MsScan> scans = rawDataFile.getScans();
    synchronized (scans) {
      for (MsScan scan : scans) {
        Float scanRT = scan.getRetentionTime();
        String scanMsFunction = scan.getMsFunction();
        if (scanRT == null || scanMsFunction == null)
          continue;
        if (scanMsFunction.equals(msFunction) && rtRange.contains(scanRT))
          msScanList.add(scan);
      }
    }
    return new ArrayList<MsScan>();
  }

  /**
   * <p>
   * getNextChromatogramNumber.
   * </p>
   *
   * @param rawDataFile a {@link io.github.msdk.datamodel.rawdata.RawDataFile} object.
   * @return a {@link java.lang.Integer} object.
   */
  @Nonnull
  static public Integer getNextChromatogramNumber(RawDataFile rawDataFile) {
    int chromatogramNumber = 1;
    List<Chromatogram> chromatograms = rawDataFile.getChromatograms();
    for (Chromatogram chromatogram : chromatograms) {
      int currentChromatogramNumber = chromatogram.getChromatogramNumber();
      if (currentChromatogramNumber > chromatogramNumber)
        chromatogramNumber = currentChromatogramNumber;
    }
    return chromatogramNumber;
  }
}