public ElutionCurve Merge() { if (Curves.Count > 1) { ElutionCurve newCurve = new ElutionCurve(); double sum = 0.0; foreach (double val in Factor) { sum += val; } Dictionary <double, int> times = new Dictionary <double, int>(); foreach (ElutionCurve curve in Curves) { foreach (double timePoint in curve.time) { if (!times.ContainsKey(timePoint)) { times.Add(timePoint, 1); } else { times[timePoint]++; } } } List <double> sortedTime = new List <double>(times.Keys); sortedTime.Sort(); foreach (double key in sortedTime) { if (times[key] > 1) { double cumulIntensity = 0.0; for (int i = 0; i < Curves.Count; i++) { cumulIntensity += Curves[i].InterpolateIntensity(key) * Factor[i] / sum; } newCurve.AddPoint(key, cumulIntensity); } } return(newCurve); } else if (Curves.Count == 1) { return(Curves[0]); } return(new ElutionCurve()); }
public static ElutionCurve Create(Dictionary <double, double> dicOfTimeInMsVsIntensityPerMs) { ElutionCurve theCurve = new ElutionCurve(); // -- Test curve fitting function -- // theCurve.time = new List <double>(); theCurve.intensityCount = new List <double>(); List <double> sortedKeys = new List <double>(dicOfTimeInMsVsIntensityPerMs.Keys); sortedKeys.Sort(); foreach (double time in sortedKeys) { theCurve.time.Add(time); theCurve.intensityCount.Add(dicOfTimeInMsVsIntensityPerMs[time]); } theCurve.Compute(); return(theCurve); }
public void AddCurve(ElutionCurve newCurve, double weight) { Curves.Add(newCurve); Factor.Add(weight); }