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());
     }
 }
Example #2
0
        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);
        }
Example #3
0
 static double Normalize(ICurveFitting Fitter, double time)
 {
     return(Fitter.GlucoseUnit(time));
 }