Exemplo n.º 1
0
        public void compress(Spectrum spectrum, TempScan ts)
        {
            BinaryDataDouble mzData  = spectrum.getMZArray().data;
            BinaryDataDouble intData = spectrum.getIntensityArray().data;
            var dataCount            = mzData.Count;

            int[]   mzArray        = new int[dataCount];
            float[] intensityArray = new float[dataCount];
            int     j = 0;

            for (int t = 0; t < dataCount; t++)
            {
                if (jobInfo.jobParams.ignoreZeroIntensity && intData[t] == 0)
                {
                    continue;
                }
                int mz = Convert.ToInt32(mzData[t] * mzPrecision);
                mzArray[j] = mz;

                if (jobInfo.jobParams.log2)
                {
                    intensityArray[j] = Convert.ToSingle(Math.Round(Math.Log(intData[t]) / log2, 3)); //取log10并且精确到小数点后3位
                }
                else
                {
                    intensityArray[j] = Convert.ToSingle(Math.Round(intData[t], 1)); //精确到小数点后一位
                }
                j++;
            }
            int[] mzSubArray = new int[j];
            Array.Copy(mzArray, mzSubArray, j);
            float[] intensitySubArray = new float[j];
            Array.Copy(intensityArray, intensitySubArray, j);

            int[] compressedMzArray = CompressUtil.fastPforEncoder(mzSubArray);
            ts.mzArrayBytes  = CompressUtil.zlibEncoder(compressedMzArray);
            ts.intArrayBytes = CompressUtil.zlibEncoder(intensitySubArray);
        }