public static void Encode( this short[] intensities, out byte[] spectra, out double tic, out double bpi, out int indexOfMaxIntensity, out int nonZeroCount) { // 16-bit integers are 2 bytes const int dataTypeSize = 2; spectra = null; tic = 0; bpi = 0; indexOfMaxIntensity = 0; nonZeroCount = RlzEncode.Encode(intensities, out var runLengthZeroEncodedData, out tic, out bpi, out indexOfMaxIntensity); // Compress intensities var encodedDataLength = runLengthZeroEncodedData.Length; if (encodedDataLength > 0) { spectra = new byte[encodedDataLength * dataTypeSize]; Buffer.BlockCopy(runLengthZeroEncodedData, 0, spectra, 0, encodedDataLength * dataTypeSize); spectra = CLZF2.Compress(spectra); } }
/// <summary> /// Convert an array of intensities to a zero run length encoded and LZF compressed byte array /// </summary> /// <param name="intensities">Array of intensities, including all zeros</param> /// <param name="spectra">Spectra intensity bytes (output)</param> /// <param name="tic">TIC (output)</param> /// <param name="bpi">Base peak intensity (output)</param> /// <param name="indexOfMaxIntensity">Index number of the BPI</param> /// <returns> /// Number of non-zero data points /// </returns> public static int Compress( IReadOnlyList <short> intensities, out byte[] spectra, out double tic, out double bpi, out int indexOfMaxIntensity) { // Get the size of the data type. Use of sizeof() for primitives is allowed in safe code blocks const int dataTypeSize = sizeof(short); spectra = null; var nonZeroCount = RlzEncode.Encode(intensities, out var runLengthZeroEncodedData, out tic, out bpi, out indexOfMaxIntensity); var encodedDataLength = runLengthZeroEncodedData.Length; if (encodedDataLength > 0) { spectra = new byte[encodedDataLength * dataTypeSize]; Buffer.BlockCopy(runLengthZeroEncodedData, 0, spectra, 0, encodedDataLength * dataTypeSize); spectra = CLZF2.Compress(spectra); } return(nonZeroCount); }
public static int Encode( float[] intensities, out byte[] spectra, out double tic, out double bpi, out int indexOfMaxIntensity) { // Floats are 4 bytes const int dataTypeSize = 4; spectra = null; var nonZeroCount = RlzEncode.Encode(intensities, out var runLengthZeroEncodedData, out tic, out bpi, out indexOfMaxIntensity); var encodedDataLength = runLengthZeroEncodedData.Length; if (encodedDataLength > 0) { spectra = new byte[encodedDataLength * dataTypeSize]; Buffer.BlockCopy(runLengthZeroEncodedData, 0, spectra, 0, encodedDataLength * dataTypeSize); spectra = CLZF2.Compress(spectra); } return(nonZeroCount); }
/// <summary> /// Convert an array of intensities to a zero length encoded byte array /// </summary> /// <param name="intensities">Array of intensities, including all zeros</param> /// <param name="spectra">Spectra intensity bytes (output)</param> /// <param name="tic">TIC (output)</param> /// <param name="bpi">Base peak intensity (output)</param> /// <param name="indexOfMaxIntensity">Index number of the BPI</param> /// <returns> /// Number of non-zero data points /// </returns> public static int EncodeSnappy( IReadOnlyList <int> intensities, out byte[] spectra, out double tic, out double bpi, out int indexOfMaxIntensity) { // 32-bit integers are 4 bytes const int dataTypeSize = 4; spectra = null; var nonZeroCount = RlzEncode.Encode(intensities, out var runLengthZeroEncodedData, out tic, out bpi, out indexOfMaxIntensity); var encodedDataLength = runLengthZeroEncodedData.Length; if (encodedDataLength > 0) { spectra = new byte[encodedDataLength * dataTypeSize]; Buffer.BlockCopy(runLengthZeroEncodedData, 0, spectra, 0, encodedDataLength * dataTypeSize); spectra = Snappy.SnappyCodec.Compress(spectra); } return(nonZeroCount); }