private double getFitValue(XYData rawXYData, IsotopicProfile theorIso, IsotopicProfile isoN15) { var indexOfMostAbundantTheorPeak = theorIso.GetIndexOfMostIntensePeak(); var indexOfCorrespondingObservedPeak = PeakUtilities.getIndexOfClosestValue(isoN15.Peaklist, theorIso.getMostIntensePeak().XValue, 0, isoN15.Peaklist.Count - 1, 0.1); var mzOffset = isoN15.Peaklist[indexOfCorrespondingObservedPeak].XValue - theorIso.Peaklist[indexOfMostAbundantTheorPeak].XValue; var fwhm = isoN15.GetFWHM(); var theorXYData = theorIso.GetTheoreticalIsotopicProfileXYData(isoN15.GetFWHM()); theorXYData.OffSetXValues(mzOffset); //May want to avoid this offset if the masses have been aligned using LCMS Warp areafitter = new AreaFitter(); var fitval = areafitter.GetFit(theorXYData, rawXYData, 0.1); if (fitval == double.NaN || fitval > 1) { fitval = 1; } return(fitval); }
public double CalculateFitScore(IsotopicProfile theorProfile, IsotopicProfile observedProfile, XYData massSpecXYData) { if (observedProfile == null || observedProfile.Peaklist == null || observedProfile.Peaklist.Count == 0) { return(1.0); // this is the worst possible fit score. ( 0.000 is the best possible fit score); Maybe we want to return a '-1' to indicate a failure... } var indexOfMostAbundantTheorPeak = theorProfile.GetIndexOfMostIntensePeak(); var indexOfCorrespondingObservedPeak = PeakUtilities.getIndexOfClosestValue(observedProfile.Peaklist, theorProfile.getMostIntensePeak().XValue, 0, observedProfile.Peaklist.Count - 1, 0.1); if (indexOfCorrespondingObservedPeak < 0) // most abundant peak isn't present in the actual theoretical profile... problem! { return(1.0); } var mzOffset = observedProfile.Peaklist[indexOfCorrespondingObservedPeak].XValue - theorProfile.Peaklist[indexOfMostAbundantTheorPeak].XValue; var theorXYData = theorProfile.GetTheoreticalIsotopicProfileXYData(observedProfile.GetFWHM()); //theorXYData.Display(); theorXYData.OffSetXValues(mzOffset); //May want to avoid this offset if the masses have been aligned using LCMS Warp //theorXYData.Display(); var areafitter = new AreaFitter(); int ionCountUsed; var fitval = areafitter.GetFit(theorXYData, massSpecXYData, 0.1, out ionCountUsed); if (double.IsNaN(fitval) || fitval > 1) { fitval = 1; } return(fitval); }