private void btnGo_Click(object sender, EventArgs e) { double[] log = new double[reoGridControl1.RowCount]; double[] par = new double[reoGridControl1.RowCount]; ArrayList parAve = new ArrayList(); ArrayList logAve = new ArrayList(); ArrayList parNum = new ArrayList(); int rows = 0; for (int r = 0; r < reoGridControl1.RowCount - 1; r++) { rows = r; if (reoGridControl1.GetCellData(r + 1, cmbLog1.SelectedIndex) == null || reoGridControl1.GetCellData(r + 1, cmbLog2.SelectedIndex) == null) { break; } log[r] = (double)reoGridControl1.GetCellData(r + 1, cmbLog1.SelectedIndex); if (reoGridControl1.GetCellData(r + 1, cmbLog2.SelectedIndex).ToString() == "") { par[r] = .05; } else { par[r] = (double)reoGridControl1.GetCellData(r + 1, cmbLog2.SelectedIndex); } if (parAve.Contains(par[r])) { double l = double.Parse(logAve[parAve.IndexOf(par[r])].ToString()); int c = int.Parse(parNum[parAve.IndexOf(par[r])].ToString()); logAve[parAve.IndexOf(par[r])] = l + log[r]; parNum[parAve.IndexOf(par[r])] = c + 1; } else { parAve.Add(par[r]); logAve.Add(log[r]); parNum.Add(1); } } double[] parAv = new double[parAve.Count]; double[] logAv = new double[parAve.Count]; for (int i = 0; i < logAve.Count; i++) { double l = double.Parse(logAve[i].ToString()); double p = double.Parse(parAve[i].ToString()); double c = double.Parse(parNum[i].ToString()); l = l / c; parAv[i] = p; logAv[i] = l; } Gridat.StatisticParam stp1 = new Gridat.StatisticParam((double[])logAv.Clone()); Gridat.StatisticParam stp2 = new Gridat.StatisticParam((double[])parAv.Clone()); double slope = 0; double x_a = 0; double y_a = 0; for (int i = 0; i < logAv.Length; i++) { if (par[i] > .05) { slope = slope + (logAv[i] - stp1.Average) * (parAv[i] - stp2.Average); x_a = x_a + (logAv[i] - stp1.Average) * (logAv[i] - stp1.Average); y_a = y_a + (parAv[i] - stp2.Average) * (parAv[i] - stp2.Average); } } slope = slope / Math.Pow(x_a * y_a, .5); //transform if (slope < 0) { for (int i = 0; i < log.Length; i++) { log[i] = log.Max() - log[i] + log.Min(); } } logMax = double.MinValue; logMin = double.MaxValue; p_vals = new ArrayList(); l_vals = new ArrayList(); for (int r = 0; r < rows; r++) { if (par[r] == 0) { break; } if (!p_vals.Contains(par[r])) { p_vals.Add(par[r]); l_vals.Add(new ArrayList()); } ArrayList arr = (ArrayList)l_vals[p_vals.IndexOf(par[r])]; arr.Add(log[r]); if (log[r] < logMin) { logMin = log[r]; } if (log[r] > logMax) { logMax = log[r]; } } if (chkCumul.Checked) { for (int i = 0; i < p_vals.Count - 1; i++) { double pi = (double)p_vals[i]; ArrayList ari = (ArrayList)l_vals[i]; for (int j = i + 1; j < p_vals.Count; j++) { double pj = (double)p_vals[j]; ArrayList arj = (ArrayList)l_vals[j]; if (pi > pj) { double swap = (double)p_vals[i]; p_vals[i] = (double)p_vals[j]; p_vals[j] = swap; pi = (double)p_vals[i]; //p_vals[i] = pj; //p_vals[j] = pi; ArrayList swapR = new ArrayList(); l_vals[i] = arj.Clone(); l_vals[j] = ari.Clone(); ari = (ArrayList)l_vals[i]; } } } for (int i = 0; i < l_vals.Count - 1; i++) { ArrayList ar1 = (ArrayList)l_vals[i]; ArrayList ar2 = (ArrayList)l_vals[i + 1]; ar2.AddRange(ar1); } } double t = (logMax - logMin) / 20; logMin = logMin - t; logMax = logMax + t; tabControl1.SelectedIndex = 1; }
private void DrawArea(Graphics g, float scale) { //Bitmap bmp = new Bitmap(pnlCh.Width, pnlCh.Height); //Graphics g = Graphics.FromImage(bmp); //PointF pPad = new PointF(0, 0); //if (pnlAx.Tag != null) //{ // pPad = (PointF)pnlAx.Tag; //} int ht = (int)((float)pnlCh.Height * scale); int wh = (int)((float)pnlCh.Width * scale); g.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, pnlCh.Width, pnlCh.Height), Color.MintCream, Color.LemonChiffon, 65f), 0, 0, wh - 1, ht - 1); for (int i = 0; i < 11; i++) { g.DrawLine(new Pen(Color.LightGray, 1), 0, i * ht / 11, pnlCh.Width, i * ht / 11); g.DrawLine(new Pen(Color.Black, 1), 0, i * ht / 11, 4, i * ht / 11); g.DrawLine(new Pen(Color.Black, 1), pnlCh.Width - 5, i * ht / 11, pnlCh.Width, i * ht / 11); for (int j = 1; j < 5; j++) { g.DrawLine(new Pen(Color.Black, 1), 0, (i * ht + j * ht / 5) / 11, 3, (i * ht + j * ht / 5) / 11); g.DrawLine(new Pen(Color.Black, 1), pnlCh.Width - 3, (i * ht + j * ht / 5) / 11, pnlCh.Width, (i * ht + j * ht / 5) / 11); } } int dec = -(int)Math.Round(Math.Log10(logMax - logMin), 0); dec++; if (dec < 0) { dec = 0; } for (double d = logMin; d < logMax; d += (logMax - logMin) / 10) { g.DrawLine(new Pen(Color.LightGray, 1), (float)(wh * (d - logMin) / (logMax - logMin)), 0, (float)(wh * (d - logMin) / (logMax - logMin)), pnlCh.Height); g.DrawLine(new Pen(Color.Black, 1), (float)(wh * (d - logMin) / (logMax - logMin)), 0, (float)(wh * (d - logMin) / (logMax - logMin)), 4); g.DrawLine(new Pen(Color.Black, 1), (float)(wh * (d - logMin) / (logMax - logMin)), pnlCh.Height - 5, (float)(wh * (d - logMin) / (logMax - logMin)), pnlCh.Height); for (int j = 1; j < 5; j++) { g.DrawLine(new Pen(Color.Black, 1), (float)(wh * (d - logMin + j * (logMax - logMin) / 50) / (logMax - logMin)), 0, (float)(wh * (d - logMin + j * (logMax - logMin) / 50) / (logMax - logMin)), 2); g.DrawLine(new Pen(Color.Black, 1), (float)(wh * (d - logMin + j * (logMax - logMin) / 50) / (logMax - logMin)), pnlCh.Height - 3, (float)(wh * (d - logMin + j * (logMax - logMin) / 50) / (logMax - logMin)), pnlCh.Height); } } double[] par = new double[p_vals.Count]; for (int i = 0; i < p_vals.Count; i++) { par[i] = (double)p_vals[i]; } zedGraphControl1.GraphPane.CurveList.Clear(); zedGraphControl1.GraphPane.GraphObjList.Clear(); zedGraphControl1.ZoomOutAll(zedGraphControl1.GraphPane); double[] probCur9 = new double[l_vals.Count]; double[] probCurY9 = new double[l_vals.Count]; double[] probCur7 = new double[l_vals.Count]; double[] probCurY7 = new double[l_vals.Count]; double[] probCur5 = new double[l_vals.Count]; double[] probCurY5 = new double[l_vals.Count]; string stmod = ""; for (int y = 0; y < l_vals.Count; y++) { ArrayList arr = (ArrayList)l_vals[y]; double[] log = new double[arr.Count]; for (int i = 0; i < arr.Count; i++) { log[i] = (double)arr[i]; } ArrayList pt = new ArrayList(); double[] zedPar = new double[log.Length]; double[] zedLog = new double[log.Length]; Gridat.StatisticParam stp = new Gridat.StatisticParam(log); float pcv = (float)((stp.Average - logMin) * wh / (logMax - logMin)); double mod = 0; int cmod = 0; for (int x = 0; x < log.Length; x++) //= log.Length / 1000 + 1) { float py = (float)(par[y] * ht / 110); float px = (float)((log[x] - logMin) * wh / (logMax - logMin)); double ind = (log.Max() - log.Min()) / 24; int c = 0; for (int d = 0; d < log.Length; d++) { if (log[d] > log[x] - ind && log[d] < log[x] + ind) { c++; } } if (c > cmod) { cmod = c; mod = log[x]; } c = 200 * c / log.Length;// reoGridControl1.RowCount; //g.DrawLine(new Pen(Color.FromArgb(255, 0, 0, 0)), px , py , px , py + c / 10); //g.FillEllipse(new SolidBrush(Color.FromArgb(25, 0, 0, 0)), px , py, c/10, c/10 ); //g.FillRectangle(new SolidBrush(Color.FromArgb(75, 0, 0, 0)), px , py - c * 2, 1, c * 2); //g.DrawLine(new Pen(Color.FromArgb(255, y*225/par.Length , 0, 255-y*225/par.Length )), px-1, py - c /5, px, py - c /5); //g.DrawLine(new Pen(Color.FromArgb(175, y * 225 / par.Length, 0, 255 - y * 225 / par.Length)), px - 10, py, px + 10, py); int cp = 0; for (cp = 0; cp < pt.Count; cp++) { PointF p = (PointF)pt[cp]; if (p.X < px) { pt.Insert(cp, new PointF(px, py + c / 5)); break; } } if (cp == pt.Count) { pt.Add(new PointF(px, py + c / 5)); } } stmod = stmod + mod.ToString() + "\t" + par[y].ToString() + "\r\n"; for (int x = 0; x < log.Length; x++)//= log.Length / 1000 + 1) { if (Math.Round(GEV(log[x], stp.StdDev, mod), 2) == .9) { float py = (float)(par[y] * ht / 110); float px = (float)((log[x] - logMin) * wh / (logMax - logMin)); g.FillEllipse(new SolidBrush(Color.Red), px - 2, py - 2, 4, 4); probCur9[y] = (double)px * (logMax - logMin) / wh + logMin; probCurY9[y] = (double)py; } if (Math.Round(GEV(log[x], stp.StdDev, mod), 2) == .7) { float py = (float)(par[y] * ht / 110); float px = (float)((log[x] - logMin) * wh / (logMax - logMin)); g.FillEllipse(new SolidBrush(Color.Red), px - 2, py - 2, 4, 4); probCur7[y] = (double)px * (logMax - logMin) / wh + logMin; probCurY7[y] = (double)py; } if (Math.Round(GEV(log[x], stp.StdDev, mod), 2) == .5) { float py = (float)(par[y] * ht / 110); float px = (float)((log[x] - logMin) * wh / (logMax - logMin)); g.FillEllipse(new SolidBrush(Color.Red), px - 2, py - 2, 4, 4); probCur5[y] = (double)px * (logMax - logMin) / wh + logMin; probCurY5[y] = (double)py; } } Clipboard.SetText(stmod); for (int i = 0; i < pt.Count - 1; i++) { PointF p1 = (PointF)pt[i]; PointF p2 = (PointF)pt[i + 1]; g.DrawLine(new Pen(Color.FromArgb(175, y * 225 / par.Length, 0, 255 - y * 225 / par.Length)), p1, p2); if (i == 0) { g.DrawString(par[y].ToString(), new Font(this.Font.Name, 7f), new SolidBrush(Color.FromArgb(175, y * 225 / par.Length, 0, 255 - y * 225 / par.Length)), p2); zedPar[0] = p1.Y; zedLog[0] = p1.X * (logMax - logMin) / wh + logMin; } zedPar[i + 1] = p2.Y; zedLog[i + 1] = p2.X * (logMax - logMin) / wh + logMin; } Random rnd = new Random(); Color col = Color.FromArgb(255, rnd.Next(200), rnd.Next(200), rnd.Next(200)); //zedGraphControl1.GraphPane.YAxis.IsVisible = false; zedGraphControl1.GraphPane.AddCurve("", zedLog, zedPar, col, ZedGraph.SymbolType.None).Line.IsAntiAlias = true; zedGraphControl1.GraphPane.Title.Text = ""; zedGraphControl1.GraphPane.XAxis.Title.Text = cmbLog1.Text + "(G/C3)"; zedGraphControl1.GraphPane.XAxis.Title.FontSpec.Size = 10; zedGraphControl1.GraphPane.XAxis.Scale.FontSpec.Size = 8; zedGraphControl1.GraphPane.YAxis.Title.Text = "Ash Content(%)"; zedGraphControl1.GraphPane.YAxis.Title.FontSpec.Size = 10; zedGraphControl1.GraphPane.YAxis.Scale.FontSpec.Size = 8; zedGraphControl1.AxisChange(); ZedGraph.TextObj myText = new ZedGraph.TextObj(par[y].ToString(), zedLog[0] + .06, zedPar[0] + 2); myText.Location.CoordinateFrame = ZedGraph.CoordType.AxisXYScale; myText.Location.AlignH = ZedGraph.AlignH.Right; myText.Location.AlignV = ZedGraph.AlignV.Center; myText.FontSpec.IsItalic = true; myText.FontSpec.IsBold = false; myText.FontSpec.FontColor = col; myText.FontSpec.Size = 8f; myText.FontSpec.Fill.IsVisible = false; myText.FontSpec.Border.IsVisible = false; zedGraphControl1.GraphPane.GraphObjList.Add(myText); zedGraphControl1.Refresh(); } for (int i = probCurY9.Length - 2; i >= 0; i--) { if (probCurY9[i] == 0) { probCur9[i] = probCur9[i + 1]; probCurY9[i] = probCurY9[i + 1]; } } zedGraphControl1.GraphPane.AddCurve("", probCur9, probCurY9, Color.Blue, ZedGraph.SymbolType.None).Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; for (int i = probCurY7.Length - 2; i >= 0; i--) { if (probCurY7[i] == 0) { probCur7[i] = probCur7[i + 1]; probCurY7[i] = probCurY7[i + 1]; } } zedGraphControl1.GraphPane.AddCurve("", probCur7, probCurY7, Color.Blue, ZedGraph.SymbolType.None).Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; for (int i = probCurY5.Length - 2; i >= 0; i--) { if (probCurY5[i] == 0) { probCur5[i] = probCur5[i + 1]; probCurY5[i] = probCurY5[i + 1]; } } zedGraphControl1.GraphPane.AddCurve("", probCur5, probCurY5, Color.Blue, ZedGraph.SymbolType.None).Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; ZedGraph.TextObj cuText = new ZedGraph.TextObj("CDF=.9", probCur9[probCur9.Length - 1], probCurY9[probCurY9.Length - 1] + 5); cuText.FontSpec.FontColor = Color.Blue; cuText.FontSpec.Size = 8f; cuText.FontSpec.Fill.IsVisible = false; cuText.FontSpec.Border.IsVisible = false; zedGraphControl1.GraphPane.GraphObjList.Add(cuText); cuText = new ZedGraph.TextObj("CDF=.7", probCur7[probCur7.Length - 1], probCurY7[probCurY7.Length - 1] + 5); cuText.FontSpec.FontColor = Color.Blue; cuText.FontSpec.Size = 8f; cuText.FontSpec.Fill.IsVisible = false; cuText.FontSpec.Border.IsVisible = false; zedGraphControl1.GraphPane.GraphObjList.Add(cuText); cuText = new ZedGraph.TextObj("CDF=.5", probCur5[probCur5.Length - 1], probCurY5[probCurY5.Length - 1] + 5); cuText.FontSpec.FontColor = Color.Blue; cuText.FontSpec.Size = 8f; cuText.FontSpec.Fill.IsVisible = false; cuText.FontSpec.Border.IsVisible = false; zedGraphControl1.GraphPane.GraphObjList.Add(cuText); zedGraphControl1.Refresh(); g.DrawRectangle(new Pen(Color.Black), 0, 0, pnlCh.Width - 1, pnlCh.Height - 1); //bmp.Save(Application.StartupPath + "\\charts\\" + cmbLog1.Text + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //g.Dispose(); //bmp.Dispose(); //MessageBox.Show("Ready"); //pnlCh.BackgroundImage = Image.FromFile(Application.StartupPath + "\\charts\\" + cmbLog1.Text + ".jpg"); }