MzXMLParserTest.java

package io.github.msdk.io.mzxml;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import io.github.msdk.MSDKException;
import io.github.msdk.datamodel.rawdata.MsScan;
import io.github.msdk.datamodel.rawdata.PolarityType;
import io.github.msdk.datamodel.rawdata.RawDataFile;
import io.github.msdk.util.MsSpectrumUtil;

public class MzXMLParserTest {
  private static final String TEST_DATA_PATH = "src/test/resources/";

  private Path getResourcePath(String resource) throws MSDKException {
    final URL url = MzXMLParserTest.class.getClassLoader().getResource(resource);
    try {
      return Paths.get(url.toURI()).toAbsolutePath();
    } catch (URISyntaxException e) {
      throw new MSDKException(e);
    }
  }

  @Test
  public void testA10A2() throws MSDKException {

    float intensityBuffer[];

    // Import the file
    String file = "A1-0_A2.mzXML";
    File inputFile = getResourcePath(file).toFile();
    Assert.assertTrue(inputFile.canRead());
    MzXMLFileParser parser = new MzXMLFileParser(inputFile);
    RawDataFile rawFile = parser.execute();
    Assert.assertNotNull(rawFile);
    Assert.assertEquals(1.0, parser.getFinishedPercentage(), 0.0001);

    // The file has 1 scan
    List<MsScan> scans = rawFile.getScans();
    Assert.assertNotNull(scans);
    Assert.assertEquals(1, scans.size());

    // 1st scan, #1
    MsScan scan1 = scans.get(0);
    Assert.assertEquals(new Integer(1), scan1.getScanNumber());
    Assert.assertEquals(new Integer(1), scan1.getMsLevel());
    Assert.assertEquals(PolarityType.POSITIVE, scan1.getPolarity());
    scan1.getMzValues();
    intensityBuffer = scan1.getIntensityValues();
    Assert.assertEquals(22431, (int) scan1.getNumberOfDataPoints());
    Float scan1MaxInt =
        MsSpectrumUtil.getMaxIntensity(intensityBuffer, scan1.getNumberOfDataPoints());
    Assert.assertEquals(3E4f, scan1MaxInt, 1E3f);

    rawFile.dispose();

  }


  @Test
  public void testR1RG59B41() throws MSDKException {

    float intensityBuffer[];

    // Import the file
    String file = "R1_RG59_B4_1.mzXML";
    File inputFile = getResourcePath(file).toFile();
    Assert.assertTrue(inputFile.canRead());
    MzXMLFileParser parser = new MzXMLFileParser(inputFile);
    RawDataFile rawFile = parser.execute();
    Assert.assertNotNull(rawFile);
    Assert.assertEquals(1.0, parser.getFinishedPercentage(), 0.0001);

    // The file has 301 scans
    List<MsScan> scans = rawFile.getScans();
    Assert.assertNotNull(scans);
    Assert.assertEquals(301, scans.size());

    // 1st scan, #1000
    MsScan scan1 = scans.get(0);
    Assert.assertEquals(new Integer(1000), scan1.getScanNumber());
    Assert.assertEquals(new Integer(2), scan1.getMsLevel());
    Assert.assertEquals(1596.72f, scan1.getRetentionTime(), 0.01f);
    Assert.assertEquals(PolarityType.POSITIVE, scan1.getPolarity());
    scan1.getMzValues();
    intensityBuffer = scan1.getIntensityValues();
    Assert.assertEquals(210, (int) scan1.getNumberOfDataPoints());
    Float scan1MaxInt =
        MsSpectrumUtil.getMaxIntensity(intensityBuffer, scan1.getNumberOfDataPoints());
    Assert.assertEquals(5.68E2f, scan1MaxInt, 1E1f);

    // 300th scan, #1299
    MsScan scan299 = scans.get(299);
    Assert.assertEquals(new Integer(1299), scan299.getScanNumber());
    Assert.assertEquals(new Integer(1), scan299.getMsLevel());
    Assert.assertEquals(1765.578f, scan299.getRetentionTime(), 0.01f);
    Assert.assertEquals(PolarityType.POSITIVE, scan299.getPolarity());
    scan299.getMzValues();
    intensityBuffer = scan299.getIntensityValues();
    Assert.assertEquals(1069, (int) scan299.getNumberOfDataPoints());
    Float scan299MaxInt =
        MsSpectrumUtil.getMaxIntensity(intensityBuffer, scan299.getNumberOfDataPoints());
    Assert.assertEquals(1.24E6f, scan299MaxInt, 1E5f);

    rawFile.dispose();

  }
}