/// <summary> /// Obsoleto, per fortuna /// </summary> /// <param name="args"></param> public static void FitPeak(string[] args) { var fileName = args.Length < 2 ? "data/calibrating" : args[1]; var peaksFileName = args.Length < 3 ? "data/calibrating_peaks" : args[2]; var index = args.Length < 4 ? 0 : Int32.Parse(args[3]); var window = args.Length < 5 ? 10 : Int32.Parse(args[4]); string[] lines = File.ReadAllLines(String.Format("{0}.txt", fileName)); var data = lines.Aggregate(new List <int>(), (p, c) => { var value = Int32.Parse(c.Split(' ')[1]); p.Add(value); return(p); }).ToArray(); string[] peakLines = File.ReadAllLines(String.Format("{0}.txt", peaksFileName)); var peakData = peakLines.Aggregate(new List <int>(), (p, c) => { var value = Int32.Parse(c.Split(' ')[0]); p.Add(value); return(p); }).ToArray(); GaussianFit.FitGaussian(data, peakData, index, window, fileName); }
public double GaussianFit() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int xrange = 20; double[] arrayX = new double[xrange + 1]; double[] arrayB = new double[xrange + 1]; double brightness = 0; int xstart = BrightestXpos - xrange / 2; int xend = BrightestXpos + xrange / 2; //Feeding in array X and array Y data points (Y: brightness) for (int i = xstart; i <= xend; i++) { Color pixel = pic.GetPixel(i, BrightestYpos); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayX[m] = i; arrayB[m] = brightness;//arrayB = raw data m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayX, arrayB); return(GuessParameterArray[3] * 2); }
private void DrawDistribution(Dictionary <int, int> dic, Brush brush) { GaussianFit fit = new GaussianFit(); foreach (int key in dic.Keys) { if (dic[key] != 0) { fit.AddPoint(key, dic[key]); } } fit.Solve(); int maxY = dic.Values.Max(); int minX = dic.Keys.Min(); int maxX = dic.Keys.Max(); int x0 = 10; int y0 = 10; float scaleX = (pictureBox.Width - 2 * x0) * 1.0f / (maxX - minX); float scaleY = (pictureBox.Height - 2 * y0) * 1.0f / maxY; if (maxY != 0 && maxX != minX) { using (Graphics g = Graphics.FromImage(pictureBox.Image)) { g.Clear(m_BackgroundColor); float halfBarWidth = (pictureBox.Width - 2 * x0) / (2.0f * dic.Keys.Count); foreach (int x in dic.Keys) { int y = dic[x]; float xx = x0 + (x - minX) * scaleX; float yy = pictureBox.Height - y0 - y * scaleY; g.FillRectangle(brush, xx - halfBarWidth, yy + 1, 2 * halfBarWidth, pictureBox.Height - y0 - yy); } g.Save(); } } pictureBox.Refresh(); }
private double plotGaussianX() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int xrange; SetDefault(out xrange); double[] arrayX = new double[xrange + 1]; double[] arrayB = new double[xrange + 1]; double brightness = 0; int xstart = HelperClass.brightest_x - xrange / 2; int xend = HelperClass.brightest_x + xrange / 2; Bitmap mybitmap = new Bitmap(ImagePanel.Image); //Feeding in array X and array Y data points (Y: brightness) for (int i = xstart; i <= xend; i++) { Color pixel = mybitmap.GetPixel(i, HelperClass.brightest_y); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayX[m] = i; arrayB[m] = brightness; m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayX, arrayB); arrayparameters[0] = GuessParameterArray[0]; arrayparameters[1] = GuessParameterArray[1]; arrayparameters[2] = GuessParameterArray[2]; arrayparameters[3] = GuessParameterArray[3]; fit.Fit(arrayX, arrayB, arrayparameters); double[] fittedY = fit.FittedValues; //Y HERE REFERS TO BRIGHTNESS for (int j = 0; j < m; j++) { PlotXYAppend(this.chart1, this.chart1.Series[0], arrayX[j], fittedY[j]); PlotXYAppend(this.chart1, this.chart1.Series[1], arrayX[j], arrayB[j]); } return(fit.FittedParameters[3]); }
private double plotGaussianY() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int yrange; SetDefault(out yrange); double[] arrayY = new double[yrange + 1]; double[] arrayB = new double[yrange + 1]; double brightness = 0; int ystart = HelperClass.brightest_y - yrange / 2; int yend = HelperClass.brightest_y + yrange / 2; Bitmap mybitmap = new Bitmap(ImagePanel.Image); //Feeding in array X and array Y data points (Y: brightness) for (int i = ystart; i <= yend; i++) { Color pixel = mybitmap.GetPixel(HelperClass.brightest_x, i); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayY[m] = i; arrayB[m] = brightness; m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayY, arrayB); arrayparameters[0] = GuessParameterArray[0]; arrayparameters[1] = GuessParameterArray[1]; arrayparameters[2] = GuessParameterArray[2]; arrayparameters[3] = GuessParameterArray[3]; fit.Fit(arrayY, arrayB, arrayparameters); double[] fittedB = fit.FittedValues; for (int j = 0; j < m; j++) { PlotXYAppend(this.chart2, this.chart2.Series[0], arrayY[j], fittedB[j]); PlotXYAppend(this.chart2, this.chart2.Series[1], arrayY[j], arrayB[j]); } return(fit.FittedParameters[3]); }
public double GaussianFit() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int xrange = 20; double[] arrayX = new double[xrange + 1]; double[] arrayB = new double[xrange + 1]; double brightness = 0; int xstart = BrightestXpos - xrange / 2; int xend = BrightestXpos + xrange / 2; //Feeding in array X and array Y data points (Y: brightness) for (int i = xstart; i <= xend; i++) { Color pixel = pic.GetPixel(i, BrightestYpos); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayX[m] = i; arrayB[m] = brightness;//arrayB = raw data m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayX, arrayB); return GuessParameterArray[3] * 2; }
private double plotGaussianY() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int yrange; SetDefault(out yrange); double[] arrayY = new double[yrange + 1]; double[] arrayB = new double[yrange + 1]; double brightness = 0; int ystart = HelperClass.brightest_y - yrange / 2; int yend = HelperClass.brightest_y + yrange / 2; Bitmap mybitmap = new Bitmap(ImagePanel.Image); //Feeding in array X and array Y data points (Y: brightness) for (int i = ystart; i <= yend; i++) { Color pixel = mybitmap.GetPixel(HelperClass.brightest_x, i); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayY[m] = i; arrayB[m] = brightness; m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayY, arrayB); arrayparameters[0] = GuessParameterArray[0]; arrayparameters[1] = GuessParameterArray[1]; arrayparameters[2] = GuessParameterArray[2]; arrayparameters[3] = GuessParameterArray[3]; fit.Fit(arrayY, arrayB, arrayparameters); double[] fittedB = fit.FittedValues; for (int j = 0; j < m; j++) { PlotXYAppend(this.chart2, this.chart2.Series[0], arrayY[j], fittedB[j]); PlotXYAppend(this.chart2, this.chart2.Series[1], arrayY[j], arrayB[j]); } return fit.FittedParameters[3]; }
private double plotGaussianX() { double[] GuessParameterArray = new double[4]; GaussianFit fit = new GaussianFit(); int m = 0; int xrange; SetDefault(out xrange); double[] arrayX = new double[xrange + 1]; double[] arrayB = new double[xrange + 1]; double brightness = 0; int xstart = HelperClass.brightest_x - xrange / 2; int xend = HelperClass.brightest_x + xrange / 2; Bitmap mybitmap = new Bitmap(ImagePanel.Image); //Feeding in array X and array Y data points (Y: brightness) for (int i = xstart; i <= xend; i++) { Color pixel = mybitmap.GetPixel(i, HelperClass.brightest_y); brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2); arrayX[m] = i; arrayB[m] = brightness; m++; } double[] arrayparameters = new double[4]; GuessParameterArray = fit.SuggestParameters(arrayX, arrayB); arrayparameters[0] = GuessParameterArray[0]; arrayparameters[1] = GuessParameterArray[1]; arrayparameters[2] = GuessParameterArray[2]; arrayparameters[3] = GuessParameterArray[3]; fit.Fit(arrayX, arrayB, arrayparameters); double[] fittedY = fit.FittedValues; //Y HERE REFERS TO BRIGHTNESS for (int j = 0; j < m; j++) { PlotXYAppend(this.chart1, this.chart1.Series[0], arrayX[j], fittedY[j]); PlotXYAppend(this.chart1, this.chart1.Series[1], arrayX[j], arrayB[j]); } return fit.FittedParameters[3]; }