public cHisto(cExtendedList OriginalValues, int NumBin) { List<double[]> Res = this.CreateHistogram(OriginalValues.ToArray(), NumBin);// OriginalValues.CreateHistogram(NumBin); ListValuesX = Res[0]; ListValuesY = Res[1]; // this.Step = (Res[0].Max() - Res[0].Min()) / NumBin; }
public void DisplayHistogram(bool IsFullScreen) { if (CompleteScreening == null) return; if ((CompleteScreening.ListDescriptors == null) || (CompleteScreening.ListDescriptors.Count == 0)) return; cExtendedList Pos = new cExtendedList(); cWell TempWell; if (IsFullScreen == false) { for (int row = 0; row < CompleteScreening.Rows; row++) for (int col = 0; col < CompleteScreening.Columns; col++) { TempWell = CompleteScreening.GetCurrentDisplayPlate().GetWell(col, row, false); if (TempWell == null) continue; else { if (TempWell.GetClass() == CompleteScreening.SelectedClass) Pos.Add(TempWell.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetValue()); } } } else { int NumberOfPlates = CompleteScreening.ListPlatesActive.Count; // loop on all the plate for (int PlateIdx = 0; PlateIdx < NumberOfPlates; PlateIdx++) { cPlate CurrentPlateToProcess = CompleteScreening.ListPlatesActive.GetPlate(CompleteScreening.ListPlatesActive[PlateIdx].Name); for (int row = 0; row < CompleteScreening.Rows; row++) for (int col = 0; col < CompleteScreening.Columns; col++) { TempWell = CurrentPlateToProcess.GetWell(col, row, false); if (TempWell == null) continue; else { if (TempWell.GetClass() == CompleteScreening.SelectedClass) Pos.Add(TempWell.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetValue()); } } } } if (Pos.Count == 0) { MessageBox.Show("No well of class " + CompleteScreening.SelectedClass + " selected !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } List<double[]> HistoPos = CreateHistogram(Pos.ToArray(), (int)GlobalInfo.OptionsWindow.numericUpDownHistoBin.Value); SimpleForm NewWindow = new SimpleForm(); Series SeriesPos = new Series(); SeriesPos.ShadowOffset = 1; if (HistoPos.Count == 0) return; for (int IdxValue = 0; IdxValue < HistoPos[0].Length; IdxValue++) { SeriesPos.Points.AddXY(HistoPos[0][IdxValue], HistoPos[1][IdxValue]); SeriesPos.Points[IdxValue].ToolTip = HistoPos[1][IdxValue].ToString(); if (CompleteScreening.SelectedClass == -1) SeriesPos.Points[IdxValue].Color = Color.Black; else SeriesPos.Points[IdxValue].Color = CompleteScreening.GlobalInfo.GetColor(CompleteScreening.SelectedClass); } ChartArea CurrentChartArea = new ChartArea(); CurrentChartArea.BorderColor = Color.Black; NewWindow.chartForSimpleForm.ChartAreas.Add(CurrentChartArea); CurrentChartArea.Axes[0].MajorGrid.Enabled = false; CurrentChartArea.Axes[0].Title = CompleteScreening.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetName(); CurrentChartArea.Axes[1].Title = "Sum"; CurrentChartArea.AxisX.LabelStyle.Format = "N2"; NewWindow.chartForSimpleForm.TextAntiAliasingQuality = TextAntiAliasingQuality.High; CurrentChartArea.BackGradientStyle = GradientStyle.TopBottom; CurrentChartArea.BackColor = CompleteScreening.GlobalInfo.OptionsWindow.panel1.BackColor; CurrentChartArea.BackSecondaryColor = Color.White; SeriesPos.ChartType = SeriesChartType.Column; SeriesPos.Color = CompleteScreening.GlobalInfo.GetColor(1); NewWindow.chartForSimpleForm.Series.Add(SeriesPos); //Series SeriesGaussNeg = new Series(); //SeriesGaussNeg.ChartType = SeriesChartType.Spline; //Series SeriesGaussPos = new Series(); //SeriesGaussPos.ChartType = SeriesChartType.Spline; //if (HistoPos.Count != 0) //{ // double[] HistoGaussPos = CreateGauss(Mean(Pos.ToArray()), std(Pos.ToArray()), HistoPos[0].Length); // SeriesGaussPos.Color = Color.Black; // SeriesGaussPos.BorderWidth = 2; //} //SeriesGaussNeg.Color = Color.Black; //SeriesGaussNeg.BorderWidth = 2; //NewWindow.chartForSimpleForm.Series.Add(SeriesGaussNeg); // NewWindow.chartForSimpleForm.Series.Add(SeriesGaussPos); NewWindow.chartForSimpleForm.ChartAreas[0].CursorX.IsUserEnabled = true; NewWindow.chartForSimpleForm.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; NewWindow.chartForSimpleForm.ChartAreas[0].AxisX.ScaleView.Zoomable = true; NewWindow.chartForSimpleForm.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true; if (GlobalInfo.OptionsWindow.checkBoxDisplayHistoStats.Checked) { StripLine AverageLine = new StripLine(); AverageLine.BackColor = Color.Black; AverageLine.IntervalOffset = Pos.Mean(); AverageLine.StripWidth = double.Epsilon; CurrentChartArea.AxisX.StripLines.Add(AverageLine); AverageLine.Text = String.Format("{0:0.###}", AverageLine.IntervalOffset); StripLine StdLine = new StripLine(); StdLine.BackColor = Color.FromArgb(64, Color.Black); double Std = Pos.Std(); StdLine.IntervalOffset = AverageLine.IntervalOffset - 0.5 * Std; StdLine.StripWidth = Std; CurrentChartArea.AxisX.StripLines.Add(StdLine); AverageLine.StripWidth = 0.0001; } Title CurrentTitle = null; if (IsFullScreen) CurrentTitle = new Title("Class " + CompleteScreening.SelectedClass + " - " + CompleteScreening.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetName() + " histogram."); else CurrentTitle = new Title("Class " + CompleteScreening.SelectedClass + " - " + CompleteScreening.GetCurrentDisplayPlate().Name + " - " + CompleteScreening.ListDescriptors[CompleteScreening.ListDescriptors.CurrentSelectedDescriptor].GetName() + " histogram."); CurrentTitle.Font = new System.Drawing.Font("Arial", 11, FontStyle.Bold); NewWindow.chartForSimpleForm.Titles.Add(CurrentTitle); NewWindow.Text = CurrentTitle.Text; NewWindow.Show(); NewWindow.chartForSimpleForm.Update(); NewWindow.chartForSimpleForm.Show(); NewWindow.Controls.AddRange(new System.Windows.Forms.Control[] { NewWindow.chartForSimpleForm }); return; }