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); }