public void TestProteinMassComparerWithBinning() { var comparer2 = new FilteredProteinMassBinning(new AminoAcidSet(), 50001); for (var i = 9999d; i < 10010; i++) { Console.WriteLine("{0}, {1}",i, comparer2.GetBinNumber(i)); } //var comparer = new ProteinMassBinning(50, 50001, true); /* Console.WriteLine(Constants.GetBinNumHighPrecision(50000)); Console.WriteLine(comparer.NumberOfBins); Console.WriteLine(comparer2.NumberOfBins); var rnd = new Random(); var mass = 0d; for (var i = 0; i < 450; i ++) { if (i > 0) { var j = rnd.Next(aaSet.Length); mass += aaSet[j].Mass; } if (mass > comparer.MaxMass) break; var binNum = Constants.GetBinNumHighPrecision(mass); var binNum1 = comparer.GetBinNumber(mass); var binNum2 = comparer2.GetBinNumber(mass); Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", i, mass, binNum, binNum1, binNum2); }*/ }
public double PearsonCorrelation(Peak[] spectrum1, Peak[] spectrum2,FilteredProteinMassBinning comparer) { var spec1Bar = 0d; var spec2Bar = 0d; spectrum1 = GuassianFilter(spectrum1, .5); spectrum2 = GuassianFilter(spectrum2, .5); var vectorLength = comparer.GetBinNumber(10000.0); spec1Bar = spectrum1.Sum(x => x.Intensity)/vectorLength; spec2Bar = spectrum1.Sum(y => y.Intensity)/vectorLength; var intensityVector1 = ConvertToFullIntensityVector(spectrum1, vectorLength, comparer); var intensityVector2 = ConvertToFullIntensityVector(spectrum2, vectorLength, comparer); var cov = 0.0; var s1 = 0.0; var s2 = 0.0; for (var i = 0; i < vectorLength; i++) { var d1 = intensityVector1[i] - spec1Bar; var d2 = intensityVector2[i] - spec2Bar; cov += d1*d2; s1 += d1*d1; s2 += d2*d2; } if (s1 <= 0 || s2 <= 0) return 0; return cov < 0 ? 0f : cov/Math.Sqrt(s1*s2); }
public double RootMeanSquareDeviation(Peak[] spectrum1, Peak[] spectrum2, FilteredProteinMassBinning comparer) { spectrum1 = GuassianFilter(spectrum1, .5); spectrum2 = GuassianFilter(spectrum2, .5); var vectorLength = comparer.GetBinNumber(10000.0); var intensityVector1 = ConvertToFullIntensityVector(spectrum1, vectorLength, comparer); var intensityVector2 = ConvertToFullIntensityVector(spectrum2, vectorLength, comparer); var mean1 = spectrum1.Sum(p => p.Intensity)/spectrum1.Length; var mean2 = spectrum1.Sum(p => p.Intensity)/spectrum2.Length; var sum = 0d; for (int i = 0; i < vectorLength; i++) { var diff = intensityVector1[i] - intensityVector2[i]; sum += diff*diff; } return Math.Sqrt(sum/vectorLength); }
public double DotProduct(Peak[] spectrum1, Peak[] spectrum2, FilteredProteinMassBinning comparer) { spectrum1 = GuassianFilter(spectrum1,.5); spectrum2 = GuassianFilter(spectrum2,.5); var vectorLength = comparer.GetBinNumber(10000.0); var featureVector1 = ConvertToFullIntensityVector(spectrum1,vectorLength,comparer); var featureVector2 = ConvertToFullIntensityVector(spectrum2, vectorLength,comparer); var sum = 0d; for (int i = 0; i < vectorLength; i++) { sum += featureVector1[i]*featureVector2[i]; } var norm1 = featureVector1.Sum(x => x*x); var norm2 = featureVector2.Sum(x => x * x); return sum/Math.Sqrt(norm1*norm2); }
public double[] ConvertToFullIntensityVector(Peak[] spectrum, int length, FilteredProteinMassBinning comparer) { var intensityVector = new double[length]; Array.Clear(intensityVector,0,length); spectrum = RemovePeaks(10000.0, spectrum); for (var i = 0; i < spectrum.Length; i++) { var binNumber = comparer.GetBinNumber(spectrum[i].Mz); if (binNumber >= 0) { intensityVector[binNumber - 1] = spectrum[i].Intensity; } } return intensityVector; }