public void TestLinearEquationCalculation() { List <UMCLight> observedUmcList = null; List <UMCLight> targetUmcList = null; CreateObservedAndTargetUmcLists(ref observedUmcList, ref targetUmcList); var xyDataList = observedUmcList.Select((t, i) => new XYData(t.DriftTime, targetUmcList[i].DriftTime)).ToList(); var regression = new LinearRegressionModel(); var linearEquation = regression.CalculateRegression(xyDataList); Assert.AreEqual(Math.Round(linearEquation.Slope, 4), 0.7142); Assert.AreEqual(Math.Round(linearEquation.Intercept, 4), 1.1324); }
/// <summary> /// Aligns features to the baseline correcting for drift time. /// </summary> /// <param name="fullObservedEnumerable">All features.</param> /// <param name="observedEnumerable">Filtered features to use for drift time correction.</param> /// <param name="targetEnumerable">Expected features that should be filtered.</param> /// <param name="massTolerance">PPM Mass Tolerance.</param> /// <param name="netTolerance">Normalized Elution Time Tolerance.</param> public static DriftTimeAlignmentResults <TTarget, TObserved> AlignObservedEnumerable(IEnumerable <UMCLight> fullObservedEnumerable, IEnumerable <TTarget> observedEnumerable, IEnumerable <TObserved> targetEnumerable, double massTolerance, double netTolerance) { // Setup Tolerance for Feature Matching var featureMatcherParameters = new FeatureMatcherParameters(); featureMatcherParameters.SetTolerances(massTolerance, netTolerance, DRIFT_TIME_TOLERANCE); featureMatcherParameters.UseDriftTime = true; // Find all matches based on defined tolerances var featureMatcher = new FeatureMatcher <TTarget, TObserved>(observedEnumerable.ToList(), targetEnumerable.ToList(), featureMatcherParameters); var matchList = featureMatcher.FindMatches(observedEnumerable.ToList(), targetEnumerable.ToList(), featureMatcherParameters.UserTolerances, 0); // Create <ObservedDriftTime, TargetDriftTime> XYData List var xyDataList = new List <XYData>(); foreach (var featureMatch in matchList) { var xyData = new XYData(featureMatch.ObservedFeature.DriftTime, featureMatch.TargetFeature.DriftTime); xyDataList.Add(xyData); } var linearRegression = new LinearRegressionModel(); // Find the Linear Equation for the <ObservedDriftTime, TargetDriftTime> XYData List var linearEquation = linearRegression.CalculateRegression(xyDataList); // Set the Aligned Drift Time value for each of the observed Features, even if they were not found in matching foreach (var observedT in fullObservedEnumerable) { observedT.DriftTimeAligned = linearRegression.Transform(linearEquation, observedT.DriftTime); } var results = new DriftTimeAlignmentResults <TTarget, TObserved>(matchList, linearEquation); return(results); }