BinaryDataArrayTest.java
/*
* (C) Copyright 2015-2016 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.io.mzml;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.zip.DataFormatException;
import org.junit.Assert;
import org.junit.Test;
import io.github.msdk.MSDKException;
import io.github.msdk.io.mzml.data.MzMLBinaryDataInfo;
import io.github.msdk.io.mzml.data.MzMLBitLength;
import io.github.msdk.io.mzml.data.MzMLCompressionType;
import io.github.msdk.io.mzml.data.MzMLPeaksDecoder;
import io.github.msdk.io.mzml.util.ByteBufferInputStream;
/**
*
* Some test data borrowed from the jmzml project. Original author: Florian Reisinger
*/
public class BinaryDataArrayTest {
///// ///// ///// ///// ///// ///// ///// ///// ///// /////
// test values (like the ones in the example XML file) in
// different numeric types
private final double[] testData64bitFloat =
{0.000, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.010, 0.011, 0.012,
0.013, 0.014, 0.015, 0.016, 0.017, 0.018, 0.019, 0.020, 0.021, 0.022, 0.023, 0.024, 0.025,
0.026, 0.027, 0.028, 0.029, 0.030, 0.031, 0.032, 0.033, 0.034, 0.035, 0.036, 0.037, 0.038,
0.039, 0.040, 0.041, 0.042, 0.043, 0.044, 0.045, 0.046, 0.047, 0.048, 0.049, 0.050, 0.051,
0.052, 0.053, 0.054, 0.055, 0.056, 0.057, 0.058, 0.059, 0.060, 0.061, 0.062, 0.063, 0.064,
0.065, 0.066, 0.067, 0.068, 0.069, 0.070, 0.071, 0.072, 0.073, 0.074, 0.075, 0.076, 0.077,
0.078, 0.079, 0.080, 0.081, 0.082, 0.083, 0.084, 0.085, 0.086, 0.087, 0.088, 0.089, 0.090,
0.091, 0.092, 0.093, 0.094, 0.095, 0.096, 0.097, 0.098};
private final float[] testData32bitFloat =
{00.0F, 01.0F, 02.0F, 03.0F, 04.0F, 05.0F, 06.0F, 07.0F, 08.0F, 09.0F, 10.0F, 11.0F, 12.0F,
13.0F, 14.0F, 15.0F, 16.0F, 17.0F, 18.0F, 19.0F, 20.0F, 21.0F, 22.0F, 23.0F, 24.0F, 25.0F,
26.0F, 27.0F, 28.0F, 29.0F, 30.0F, 31.0F, 32.0F, 33.0F, 34.0F, 35.0F, 36.0F, 37.0F, 38.0F,
39.0F, 40.0F, 41.0F, 42.0F, 43.0F, 44.0F, 45.0F, 46.0F, 47.0F, 48.0F, 49.0F, 50.0F, 51.0F,
52.0F, 53.0F, 54.0F, 55.0F, 56.0F, 57.0F, 58.0F, 59.0F, 60.0F, 61.0F, 62.0F, 63.0F, 64.0F,
65.0F, 66.0F, 67.0F, 68.0F, 69.0F, 70.0F, 71.0F, 72.0F, 73.0F, 74.0F, 75.0F, 76.0F, 77.0F,
78.0F, 79.0F, 80.0F, 81.0F, 82.0F, 83.0F, 84.0F, 85.0F, 86.0F, 87.0F, 88.0F, 89.0F, 90.0F,
91.0F, 92.0F, 93.0F, 94.0F, 95.0F, 96.0F, 97.0F, 98.0F};
///// ///// ///// ///// ///// ///// ///// ///// ///// /////
// some base64 encoded binary data strings to compare against
// the binary data produced by the BinaryDataArray object
// binary test data: compressed, base64 encoded, 64 bit precision
// extracted from file: MzMLFile_7_compressed.mzML (line 74) "m/z array"
private final static String compressed64bit = "eJwtkWlIVFEAhWUQERGREHFDokQUEQmREIlDoE"
+ "gbaUVI9GOQfgwiIiYxmkRZuVRWluWSmrPoLI7jzJvtJSGhIlYQYYJESERIDCYiJ"
+ "ZEleN995/4Z3ptzz/K9mBj9/HdtL5+prYL+a8TujbrXzU9NfG7E9RRv5bfWZr43"
+ "oyWaeyTe08b/b6Ls69me/oZ26u5g5kSioaCzg/oulAaXrs2+vMd7D6Bm392oVh/"
+ "y/mMMLxz0NZl66fMEX/7Ki/TrQ2bRWk7crWf0fY5LV6SS/gMYGpSHOUP4/OHP+e"
+ "/jL5g3jPTYi0mFyghzR1GjC5k/htNHu48b18fYw4Kf1ZrSwj5W3K//8c+1bWUvG"
+ "wo6U0WEjf3seG+pCP/as7PnOLRWabET7DuBhFVb47EEB3s74NZik53s78RJTZbq"
+ "4g4XZO0sN/e4obX7eGiSuyaRf/nR3E6eh/s8eCtUGUVT3DkFU+9mG0q83OuFMBP"
+ "R09w9jQsCjpjK/T7YRbtVm48cfPi9t2KO5vrJw49yCcBPLn6IcVoQ+SjQ7RRyUl"
+ "AsT4C8Arj95p0gFCC3AD6J9aIL+QVxWAqD5BjEVTkgRJ4hzO/kicUhcg3jgG5Iv"
+ "mFIt6UwOUegjGw5Fk9FyDsCgwyOkLuKczoY8ldh1WJXVH6HV9gH57SBqA==";
// binary test data: uncompressed, base64 encoded, 64 bit precision
// extracted from file: MzMLFile_7_uncompressed.mzML (line 74) "m/z array"
private final static String uncompressed64bit = "AAAAAAAAAAD8qfHSTWJQP/yp8dJNYmA/+n5qvH"
+ "STaD/8qfHSTWJwP3sUrkfhenQ/+n5qvHSTeD956SYxCKx8P/yp8dJNYoA/O99Pj"
+ "Zdugj97FK5H4XqEP7pJDAIrh4Y/+n5qvHSTiD85tMh2vp+KP3npJjEIrIw/uB6F"
+ "61G4jj/8qfHSTWKQP5zEILByaJE/O99PjZdukj/b+X5qvHSTP3sUrkfhepQ/Gy/"
+ "dJAaBlT+6SQwCK4eWP1pkO99PjZc/+n5qvHSTmD+amZmZmZmZPzm0yHa+n5o/2c"
+ "73U+Olmz956SYxCKycPxkEVg4tsp0/uB6F61G4nj9YObTIdr6fP/yp8dJNYqA/T"
+ "DeJQWDloD+cxCCwcmihP+xRuB6F66E/O99PjZduoj+LbOf7qfGiP9v5fmq8dKM/"
+ "K4cW2c73oz97FK5H4XqkP8uhRbbz/aQ/Gy/dJAaBpT9qvHSTGASmP7pJDAIrh6Y"
+ "/CtejcD0Kpz9aZDvfT42nP6rx0k1iEKg/+n5qvHSTqD9KDAIrhxapP5qZmZmZma"
+ "k/6SYxCKwcqj85tMh2vp+qP4lBYOXQIqs/2c73U+Olqz8pXI/C9SisP3npJjEIr"
+ "Kw/yXa+nxovrT8ZBFYOLbKtP2iR7Xw/Na4/uB6F61G4rj8IrBxaZDuvP1g5tMh2"
+ "vq8/VOOlm8QgsD/8qfHSTWKwP6RwPQrXo7A/TDeJQWDlsD/0/dR46SaxP5zEILB"
+ "yaLE/RIts5/upsT/sUbgeheuxP5MYBFYOLbI/O99PjZdusj/jpZvEILCyP4ts5/"
+ "up8bI/MzMzMzMzsz/b+X5qvHSzP4PAyqFFtrM/K4cW2c73sz/TTWIQWDm0P3sUr"
+ "kfherQ/I9v5fmq8tD/LoUW28/20P3Noke18P7U/Gy/dJAaBtT/D9Shcj8K1P2q8"
+ "dJMYBLY/EoPAyqFFtj+6SQwCK4e2P2IQWDm0yLY/CtejcD0Ktz+yne+nxku3P1p"
+ "kO99Pjbc/AiuHFtnOtz+q8dJNYhC4P1K4HoXrUbg/+n5qvHSTuD+iRbbz/dS4P0" + "oMAiuHFrk/";
// binary test data: compressed, base64 encoded, 32 bit precision
// extracted from file: MzMLFile_7_compressed.mzML (line 80) "intensity array"
private final static String compressed32bit = "eJwVxCFIQ2EAhdE/GAyGhQXDwoLBYFgwGAa+jQ"
+ "WDYcFgMCwYDIYFw4LhITLGGGOIyBAZDxkyhsgQkSFDHrJgNC4uGo1Gj5fv3BD+F"
+ "++6SMQkpCwJpRAy5CkQUaVGnZgWPfokjJgwJeWTLxYs+eaHX0I5hBVWWSNDlnVy"
+ "5Nlgky0KbLNDkYgKe+xT5YBDjqhxzAmn1DmjwTkxF1zSpEWbDl16XHHNDX1uuWN"
+ "Awj1DHhgx5pEnJjzzwitT3pjxTsoH8/IfQP5IBA==";
// binary test data: uncompressed, base64 encoded, 32 bit precision
// extracted from file: MzMLFile_7_uncompressed.mzML (line 80) "intensity array"
private final static String uncompressed32bit = "AAAAAAAAgD8AAABAAABAQAAAgEAAAKBAAADAQA"
+ "AA4EAAAABBAAAQQQAAIEEAADBBAABAQQAAUEEAAGBBAABwQQAAgEEAAIhBAACQQ"
+ "QAAmEEAAKBBAACoQQAAsEEAALhBAADAQQAAyEEAANBBAADYQQAA4EEAAOhBAADw"
+ "QQAA+EEAAABCAAAEQgAACEIAAAxCAAAQQgAAFEIAABhCAAAcQgAAIEIAACRCAAA"
+ "oQgAALEIAADBCAAA0QgAAOEIAADxCAABAQgAAREIAAEhCAABMQgAAUEIAAFRCAA"
+ "BYQgAAXEIAAGBCAABkQgAAaEIAAGxCAABwQgAAdEIAAHhCAAB8QgAAgEIAAIJCA"
+ "ACEQgAAhkIAAIhCAACKQgAAjEIAAI5CAACQQgAAkkIAAJRCAACWQgAAmEIAAJpC"
+ "AACcQgAAnkIAAKBCAACiQgAApEIAAKZCAACoQgAAqkIAAKxCAACuQgAAsEIAALJ"
+ "CAAC0QgAAtkIAALhCAAC6QgAAvEIAAL5CAADAQgAAwkIAAMRC";
@Test
public void testCompressed64bit() throws MSDKException, DataFormatException, IOException {
// Put the String onto an ByteBufferInputStream
ByteBufferInputStream is = new ByteBufferInputStream(
ByteBuffer.wrap(compressed64bit.getBytes(StandardCharsets.UTF_8)));
// Setting up the BinaryInfo
MzMLBinaryDataInfo binaryInfo = new MzMLBinaryDataInfo(664, 99);
binaryInfo.setBitLength(MzMLBitLength.SIXTY_FOUR_BIT_FLOAT);
binaryInfo.setCompressionType(MzMLCompressionType.ZLIB);
binaryInfo.setPosition(0);
// Decode the decoded byte array and compare with the expected values
double[] result = MzMLPeaksDecoder.decodeToDouble(is, binaryInfo, null);
Assert.assertArrayEquals(testData64bitFloat, result, 0.0);
}
@Test
public void testUncompressed64bit() throws MSDKException, DataFormatException, IOException {
// Put the String onto an ByteBufferInputStream
ByteBufferInputStream is = new ByteBufferInputStream(
ByteBuffer.wrap(uncompressed64bit.getBytes(StandardCharsets.UTF_8)));
// Setting up the BinaryInfo
MzMLBinaryDataInfo binaryInfo = new MzMLBinaryDataInfo(1056, 99);
binaryInfo.setBitLength(MzMLBitLength.SIXTY_FOUR_BIT_FLOAT);
binaryInfo.setPosition(0);
// Decode the decoded byte array and compare with the expected values
double[] result = MzMLPeaksDecoder.decodeToDouble(is, binaryInfo, null);
Assert.assertArrayEquals(testData64bitFloat, result, 0.0);
}
@Test
public void testCompressed32bit() throws MSDKException, DataFormatException, IOException {
// Put the String onto an ByteBufferInputStream
ByteBufferInputStream is = new ByteBufferInputStream(
ByteBuffer.wrap(compressed32bit.getBytes(StandardCharsets.UTF_8)));
// Setting up the BinaryInfo
MzMLBinaryDataInfo binaryInfo = new MzMLBinaryDataInfo(268, 99);
binaryInfo.setBitLength(MzMLBitLength.THIRTY_TWO_BIT_FLOAT);
binaryInfo.setCompressionType(MzMLCompressionType.ZLIB);
binaryInfo.setPosition(0);
// Decode the decoded byte array and compare with the expected values
float[] result = MzMLPeaksDecoder.decodeToFloat(is, binaryInfo, null);
Assert.assertArrayEquals(testData32bitFloat, result, 0.0f);
}
@Test
public void testUncompressed32bit() throws MSDKException, DataFormatException, IOException {
// Put the String onto an ByteBufferInputStream
ByteBufferInputStream is = new ByteBufferInputStream(
ByteBuffer.wrap(uncompressed32bit.getBytes(StandardCharsets.UTF_8)));
// Setting up the BinaryInfo
MzMLBinaryDataInfo binaryInfo = new MzMLBinaryDataInfo(528, 99);
binaryInfo.setBitLength(MzMLBitLength.THIRTY_TWO_BIT_FLOAT);
binaryInfo.setPosition(0);
// Decode the decoded byte array and compare with the expected values
float[] result = MzMLPeaksDecoder.decodeToFloat(is, binaryInfo, null);
Assert.assertArrayEquals(testData32bitFloat, result, 0.0f);
}
}