public static XYData GetTheorPeakData(double centerXValue, double peakHeight, double peakWidth, int numPointsPerPeak) { var xydata = new XYData(); var one_over_sqrt_of_2_pi = 0.3989423; var sigma = peakWidth / 2.35; // width@half-height = 2.35σ (Gaussian peak theory) var sixsigma = 3 * peakWidth; var mz_per_point = sixsigma / (double)(numPointsPerPeak - 1); var startPoint = 0 - (numPointsPerPeak - 1) / 2; var stopPoint = 0 + (numPointsPerPeak - 1) / 2; xydata.Xvalues = new double[numPointsPerPeak]; xydata.Yvalues = new double[numPointsPerPeak]; var counter = 0; for (var i = startPoint; i <= stopPoint; i++) { var mz = centerXValue + mz_per_point * (i); var intens = (1 / sigma) * one_over_sqrt_of_2_pi * Math.Exp(-1 * ((mz - centerXValue) * (mz - centerXValue)) / (2 * sigma * sigma)); xydata.Xvalues[counter] = mz; xydata.Yvalues[counter] = intens; counter++; } xydata.NormalizeYData(); for (var i = 0; i < xydata.Yvalues.Length; i++) { xydata.Yvalues[i] = xydata.Yvalues[i] * peakHeight; } return(xydata); }
private bool AlignAndFillArraysToCorrelate(XYData chromxydataPeak1, XYData chromxydataPeak2, out double[] arrayToCorrelatePeak1, out double[] arrayToCorrelatePeak2) { arrayToCorrelatePeak1 = null; arrayToCorrelatePeak2 = null; chromxydataPeak1.NormalizeYData(); chromxydataPeak2.NormalizeYData(); //Console.WriteLine("chromxydataPeak1"); //chromxydataPeak1.Display(); //Console.WriteLine("chromxydataPeak2"); //chromxydataPeak2.Display(); var lowestFramePeak1 = chromxydataPeak1.Xvalues.Min(); var lowestFramePeak2 = chromxydataPeak2.Xvalues.Min(); var highestFramePeak1 = chromxydataPeak1.Xvalues.Max(); var highestFramePeak2 = chromxydataPeak2.Xvalues.Max(); var minX = Math.Max(lowestFramePeak1, lowestFramePeak2); var maxX = Math.Min(highestFramePeak1, highestFramePeak2); var Overlap = (minX < maxX); if (!Overlap) { return(false); } var chromPeak1StartIndex = chromxydataPeak1.GetClosestXVal(minX); var chromPeak2StartIndex = chromxydataPeak2.GetClosestXVal(minX); var chromPeak1StopIndex = chromxydataPeak1.GetClosestXVal(maxX); var chromPeak2StopIndex = chromxydataPeak2.GetClosestXVal(maxX); arrayToCorrelatePeak1 = new double[chromPeak1StopIndex - chromPeak1StartIndex + 1]; arrayToCorrelatePeak2 = new double[chromPeak2StopIndex - chromPeak2StartIndex + 1]; for (int i = chromPeak1StartIndex, j = 0; i <= chromPeak1StopIndex; i++, j++) { arrayToCorrelatePeak1[j] = chromxydataPeak1.Yvalues[i]; } for (int i = chromPeak2StartIndex, j = 0; i <= chromPeak2StopIndex; i++, j++) { arrayToCorrelatePeak2[j] = chromxydataPeak2.Yvalues[i]; } if (arrayToCorrelatePeak1.Length < 5 || arrayToCorrelatePeak2.Length < 5) { return(false); } return(true); }