private void CreateEquation(ICurveFitting fitting = null) { if (fitting == null) { return; } double[] param = fitting.Parameter(); if (param.Length == 2) { equation.Inlines.Add(" "); equation.Inlines.Add(Math.Round(param[1], 2).ToString()); equation.Inlines.Add("ln(x)"); if (param[0] > 0) { equation.Inlines.Add("+"); } equation.Inlines.Add(Math.Round(param[0], 2).ToString()); } else { equation.Inlines.Add(" "); equation.Inlines.Add(Math.Round(param[3], 2).ToString()); equation.Inlines.Add("x"); equation.Inlines.Add(SuperscriptRun("3")); if (param[2] > 0) { equation.Inlines.Add("+"); } equation.Inlines.Add(Math.Round(param[2], 2).ToString()); equation.Inlines.Add("x"); equation.Inlines.Add(SuperscriptRun("2")); if (param[1] > 0) { equation.Inlines.Add("+"); } equation.Inlines.Add(Math.Round(param[1], 2).ToString()); equation.Inlines.Add("x"); if (param[0] > 0) { equation.Inlines.Add("+"); } equation.Inlines.Add(Math.Round(param[0], 2).ToString()); } }
static List <GUI> Init(ref ICurveFitting Fitter, ISpectrumReader reader) { double ppm = 5; object resultLock = new object(); List <double> Retention = new List <double>(); List <double> Guis = new List <double>(); IGUIFinder finder = new BinarySearchFinder(ppm); IProcess picking = new LocalNeighborPicking(); Dictionary <int, List <GUI> > pointMaps = new Dictionary <int, List <GUI> >(); int start = reader.GetFirstScan(); int end = reader.GetLastScan(); Parallel.For(start, end, (i) => { if (reader.GetMSnOrder(i) < 2) { ISpectrum spectrum = picking.Process(reader.GetSpectrum(i)); lock (resultLock) { pointMaps[i] = finder.FindGlucoseUnits(spectrum); } } }); List <List <GUI> > points = pointMaps.OrderBy(p => p.Key).Select(p => p.Value).ToList(); IGUISequencer sequencer = new DynamicProgrammingSequencer(); List <GUI> GuiPoints = sequencer.Choose(points); Fitter = new PolynomialFitting(); Dictionary <int, GUI> guiSelected = new Dictionary <int, GUI>(); foreach (GUI gui in GuiPoints) { if (guiSelected.ContainsKey(gui.Unit)) { if (guiSelected[gui.Unit].Peak.GetIntensity() < gui.Peak.GetIntensity()) { guiSelected[gui.Unit] = gui; } } else { guiSelected[gui.Unit] = gui; } } Retention.Clear(); Guis.Clear(); List <GUI> guiChoice = guiSelected.Values.OrderBy(g => g.Scan).ToList(); foreach (GUI gui in guiChoice) { int scan = gui.Scan; double time = reader.GetRetentionTime(scan); Retention.Add(time); Guis.Add(gui.Unit); } Fitter.Fit(Retention, Guis); return(GuiPoints); }
static double Normalize(ICurveFitting Fitter, double time) { return(Fitter.GlucoseUnit(time)); }