コード例 #1
0
        private void AccumulateFrameDataWithYCompression(IDataReader reader, int width, int height, int startScan, int startBin,
                                                         int endBin, ref int[][] frameData, int minMzBin, int maxMzBin, int xCompression, double[] calibTable)
        {
            // each pixel accumulates more than 1 bin of data
            for (var scansData = 0; scansData / xCompression < width && reader.Read(); scansData++)
            {
                var scanNum = GetInt32(reader, "ScanNum");
                ValidateScanNumber(scanNum);

                var currentScan            = scanNum - startScan;
                var compressedBinIntensity = (byte[])(reader["Intensities"]);

                if (compressedBinIntensity.Length == 0)
                {
                    continue;
                }

                var compressedScan = currentScan;
                if (xCompression > 1)
                {
                    compressedScan = currentScan / xCompression;
                }

                var pixelY = 0;

                var binIntensities = IntensityConverterCLZF.Decompress(compressedBinIntensity, out int _);

                foreach (var binIntensity in binIntensities)
                {
                    var binIndex = binIntensity.Item1;
                    if (binIndex < startBin || binIndex < minMzBin)
                    {
                        continue;
                    }
                    if (binIndex > endBin || binIndex > maxMzBin)
                    {
                        break;
                    }

                    double calibratedBin = binIndex;

                    if (height == 1)
                    {
                        frameData[compressedScan][0] += binIntensity.Item2;
                    }
                    else
                    {
                        for (var j = pixelY; j < height; j++)
                        {
                            if (calibTable[j] > calibratedBin)
                            {
                                pixelY = j;
                                frameData[compressedScan][pixelY] += binIntensity.Item2;
                                break;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        public void CompressionComparisonSpeedTest()
        {
            /*
             * Example run on core i9 7900X @ 4GHz.
             * Name                                    Milliseconds        Percent
             * LZ4 Compress                            163                 193.3%
             * ZRLE LZ4 Compress                       84                  100%
             * CLZF2 Compress                          945                 1118.5%
             * ZREL CLZF2 Compress                     91                  107.7%
             * Name                                    Milliseconds        Percent
             * LZ4 Decompress                          325                 16880.7%
             * ZRLE LZ4 Decompress                     1                   100%
             * CLZF2 Decompress                        1176                61106.9%
             * ZREL CLZF2 Decompress                   8                   448.4%
             */

            var intensities   = new int[148000];
            var randGenerator = new Random();

            for (var i = 0; i < intensities.Length; i++)
            {
                var nextRandom = randGenerator.Next(0, 255);
                if (nextRandom < 245)
                {
                    intensities[i] = 0;
                }
                else
                {
                    intensities[i] = nextRandom;
                }
            }

            var spectra = new byte[intensities.Length * sizeof(int)];

            Buffer.BlockCopy(intensities, 0, spectra, 0, spectra.Length);
            var decompressedIntensities = new int[intensities.Length];

            byte[] zrleLz4Result    = new byte[] { };
            byte[] clzf2Result      = new byte[] { };
            byte[] zrleClzf2Result  = new byte[] { };
            byte[] snappyResult     = new byte[] { };
            byte[] zrleSnappyResult = new byte[] { };

            Benchmark.This("CLZF2 Compress", () =>
            {
                clzf2Result = CLZF2.Compress(spectra);
            }).WithWarmup(100).Against.This("ZREL CLZF2 Compress", () =>
            {
                IntensityConverterCLZF.Compress(intensities, out zrleClzf2Result, out var tic, out var bpi,
                                                out var indexOfMaxIntensity);
            }).WithWarmup(100).Against.This("Snappy", () =>
コード例 #3
0
        private void AccumulateFrameDataNoYCompression(IDataReader reader, int width, int startScan, int startBin, int endBin,
                                                       ref int[][] frameData, int minMzBin, int maxMzBin, int xCompression)
        {
            for (var scansData = 0; (scansData / xCompression < width) && reader.Read(); scansData++)
            {
                var scanNum = GetInt32(reader, "ScanNum");
                ValidateScanNumber(scanNum);

                var currentScan            = scanNum - startScan;
                var compressedBinIntensity = (byte[])(reader["Intensities"]);

                if (compressedBinIntensity.Length == 0)
                {
                    continue;
                }

                var compressedScan = currentScan;
                if (xCompression > 1)
                {
                    compressedScan = currentScan / xCompression;
                }

                var binIntensities = IntensityConverterCLZF.Decompress(compressedBinIntensity, out int _);

                foreach (var binIntensity in binIntensities.Where(x => x.Item1 >= startBin && x.Item1 >= minMzBin && x.Item1 <= endBin && x.Item1 <= maxMzBin))
                {
                    var binIndex = binIntensity.Item1;
                    //if (binIndex < startBin || binIndex < minMzBin)
                    //{
                    //    continue;
                    //}
                    //if (binIndex > endBin || binIndex > maxMzBin)
                    //{
                    //    break;
                    //}
                    frameData[compressedScan][binIndex - startBin] += binIntensity.Item2;
                }
            }
        }