/// <summary> /// Verify that the order of replicates on the graph is based on the ordering specified by getValueFunc. /// </summary> private void VerifyOrder <T>(GraphSummary graphSummary, Func <ChromatogramSet, T> getValueFunc) { var document = graphSummary.DocumentUIContainer.Document; var measuredResults = document.Settings.MeasuredResults; Assert.IsNotNull(measuredResults); var summaryReplicateGraphPane = graphSummary.GraphControl.GraphPane as SummaryReplicateGraphPane; Assert.IsNotNull(summaryReplicateGraphPane); Assert.IsNotNull(summaryReplicateGraphPane); int replicateCount = measuredResults.Chromatograms.Count; Assert.AreEqual(replicateCount, summaryReplicateGraphPane.XAxis.Scale.TextLabels.Length); var replicates = new List <ChromatogramSet>(); for (int i = 0; i < replicateCount; i++) { var replicateIndexSet = summaryReplicateGraphPane.IndexOfReplicate(i); Assert.AreEqual(1, replicateIndexSet.Count); replicates.Add(measuredResults.Chromatograms[replicateIndexSet.First()]); } for (int i = 1; i < replicates.Count; i++) { T prevValue = getValueFunc(replicates[i - 1]); T curValue = getValueFunc(replicates[i]); var comparison = Comparer <T> .Default.Compare(prevValue, curValue); Assert.IsTrue(comparison <= 0); } }
public static void CreateAndShowFindResults(ZedGraphControl sender, GraphSummary graphSummary, SrmDocument document, AreaCVGraphData.CVData data) { var peptideAnnotationPairs = data.PeptideAnnotationPairs.ToList(); var results = new List <FindResult>(peptideAnnotationPairs.Count); var pred = new FindPredicate(new FindOptions().ChangeCustomFinders(new[] { new PeptideAnnotationPairFinder(peptideAnnotationPairs, data.CV) }), Program.MainWindow.SequenceTree.GetDisplaySettings(null)); for (var i = 0; i < Math.Min(peptideAnnotationPairs.Count, MAX_FINDRESULTS_PEPTIDES); i++) { var pair = peptideAnnotationPairs[i]; var displayText = PeptideAnnotationPairFinder.GetDisplayText(data.CV, pair.Annotation); results.Add(new FindResult(pred, new BookmarkEnumerator(document, new Bookmark(document.GetPathTo((int)SrmDocument.Level.Molecules, document.Molecules.ToList().IndexOf(pair.Peptide)))), new FindMatch(displayText))); } var count = peptideAnnotationPairs.Count; if (results.Count != count) { MessageDlg.Show(sender, string.Format(Resources.HistogramHelper_CreateAndShowFindResults_Only_showing__0___1__peptides, MAX_FINDRESULTS_PEPTIDES, count)); results = results.GetRange(0, MAX_FINDRESULTS_PEPTIDES); } if (peptideAnnotationPairs.Count == 1) { var nodes = peptideAnnotationPairs[0]; graphSummary.StateProvider.SelectedPath = new IdentityPath(nodes.PeptideGroup.PeptideGroup, nodes.Peptide.Peptide); } Program.MainWindow.ShowFindResults(results); }
private void CheckNonlinearRegressionMethods(GraphSummary summary) { //Check rmsd and number of linear functions for KDE RunUI(() => SkylineWindow.ShowRegressionMethod(RegressionMethodRT.kde)); WaitForPaneCondition <RTLinearRegressionGraphPane>(summary, pane => !pane.IsCalculating); RTLinearRegressionGraphPane graphPane; summary.TryGetGraphPane(out graphPane); //KDE should never be refined. Too slow Assert.IsFalse(graphPane.IsRefined); var kdeFunction = (PiecewiseLinearRegressionFunction)graphPane.RegressionRefined.Conversion; Assert.AreEqual(5.7326, kdeFunction.RMSD, 0.0001); Assert.AreEqual(22, kdeFunction.LinearFunctionsCount); //Check for Loess RunUI(() => SkylineWindow.ShowRegressionMethod(RegressionMethodRT.loess)); WaitForPaneCondition <RTLinearRegressionGraphPane>(summary, pane => !pane.IsCalculating); //Make sure Loess is not refined. Too slow Assert.IsTrue(graphPane.RegressionRefinedNull); // ReSharper disable once PossibleInvalidCastException var loessFunction = (LoessRegression)graphPane.RegressionRefined.Conversion; Assert.AreEqual(4.0552, loessFunction.Rmsd, 0.0001); Assert.AreEqual(22, kdeFunction.LinearFunctionsCount); }
public void OpenAndChangeAreaCVProperties(GraphSummary graphSummary, Action <AreaCVToolbarProperties> action) { RunDlg <AreaCVToolbarProperties>(() => SkylineWindow.ShowAreaCVPropertyDlg(graphSummary), d => { action(d); d.OK(); }); UpdateGraphAndWait(SkylineWindow.GraphPeakArea); }
private void VerifyGraphYRange(GraphSummary graphSummary, double minHeight, double maxHeight, int pointCount, int errorCount = 0) { RunUI(() => { graphSummary.CountCurves(c => { if (pointCount != CountPoints(c, minHeight, maxHeight)) { Assert.AreEqual(pointCount, CountPoints(c, minHeight, maxHeight)); } if (errorCount != CountErrors(c, minHeight, maxHeight)) { Assert.AreEqual(errorCount, CountErrors(c, minHeight, maxHeight)); } return(true); }); }); }
static GraphSummary FindGraph <TGraphPane>() where TGraphPane : SummaryGraphPane { GraphSummary result = null; RunUI(() => { foreach (var form in FormUtil.OpenForms.OfType <GraphSummary>()) { TGraphPane graphPane; if (form.TryGetGraphPane(out graphPane)) { result = form; break; } } }); return(result); }
private void VerifyGraphState(GraphSummary graphSummary, AreaGraphDisplayType displayType, int repCount, int pointCount, int errorCount = 0) { RunUI(() => { Assert.AreEqual(repCount, graphSummary.CountCurves(c => { if (pointCount != CountPoints(c)) { Assert.AreEqual(pointCount, CountPoints(c)); } if (errorCount != CountErrors(c)) { Assert.AreEqual(errorCount, CountErrors(c)); } return(displayType == AreaGraphDisplayType.bars ? c.IsBar : c.IsLine); })); }); }
private void TestGraphSummary(GraphSummary active, GraphSummary[] others, bool shouldSync) { double min = 0.0; double max = SkylineWindow.GraphChromatograms.Count(); double otherMin = -1.0; double otherMax = 1.0; RunUI(() => { active.GraphControl.GraphPane.XAxis.Scale.Min = min; active.GraphControl.GraphPane.XAxis.Scale.Max = max; foreach (var graphSummary in others) { graphSummary.GraphControl.GraphPane.XAxis.Scale.Min = otherMin; graphSummary.GraphControl.GraphPane.XAxis.Scale.Max = otherMax; } active.Activate(); SkylineWindow.SynchronizeSummaryZooming(active); }); WaitForGraphs(); RunUI(() => { double add = GetExpectedVisible(active) ? -1.0 : 0.0; foreach (var graphSummary in others) { bool expectedVisible = GetExpectedVisible(graphSummary); add += expectedVisible ? 1.0 : 0.0; Assert.AreEqual(shouldSync ? min + add : otherMin, graphSummary.GraphControl.GraphPane.XAxis.Scale.Min); Assert.AreEqual(shouldSync ? max + add : otherMax, graphSummary.GraphControl.GraphPane.XAxis.Scale.Max); add += expectedVisible ? -1.0 : 0.0; } }); }
public HierarchicalClusterGraph() { InitializeComponent(); InitializeDendrograms(); var graphPane = zedGraphControl1.GraphPane; graphPane.Title.IsVisible = false; graphPane.XAxis.Title.IsVisible = false; graphPane.YAxis.Title.IsVisible = false; graphPane.Legend.IsVisible = false; graphPane.Margin.All = 0; graphPane.Border.IsVisible = false; graphPane.XAxis.MinorTic.Size = 0; graphPane.XAxis.MajorTic.IsOpposite = false; graphPane.XAxis.MajorTic.Size = 2; graphPane.YAxis.MinorTic.Size = 0; graphPane.YAxis.MajorTic.IsOpposite = false; graphPane.YAxis.MajorTic.Size = 2; graphPane.X2Axis.MinorTic.Size = 0; graphPane.X2Axis.MajorTic.Size = 0; graphPane.Y2Axis.MinorTic.Size = 0; graphPane.Y2Axis.MajorTic.Size = 0; graphPane.XAxis.Scale.FontSpec = GraphSummary.CreateFontSpec(Color.Black); graphPane.YAxis.Scale.FontSpec = GraphSummary.CreateFontSpec(Color.Black); graphPane.YAxis.Scale.FontSpec.Angle = 90; _xAxisLabelScaler = new AxisLabelScaler(graphPane, graphPane.XAxis) { IsRepeatRemovalAllowed = true }; _yAxisLabelScaler = new AxisLabelScaler(graphPane, graphPane.YAxis) { IsRepeatRemovalAllowed = true }; }
/// <summary> /// Change the replicate "Order By" on a graph. /// </summary> /// <param name="graphSummary"></param> /// <param name="menuItemPredicate">Function which returns true for the menu item that should be clicked. /// The Document Order and Run Start Time items get chosen based on their position on the sub-menu. /// The other items get chosen based on menu item text.</param> private void OrderBy(GraphSummary graphSummary, Func <int, ToolStripMenuItem, bool> menuItemPredicate) { RunUI(() => { graphSummary.GraphControl.ContextMenuStrip.Show(graphSummary.GraphControl, new Point(1, 1)); var orderByItem = SkylineWindow.ReplicateOrderContextMenuItem; for (int index = 0; index < orderByItem.DropDownItems.Count; index++) { var item = orderByItem.DropDownItems[index] as ToolStripMenuItem; if (item == null) { continue; } var predicate = menuItemPredicate(index, item); if (predicate) { item.PerformClick(); return; } } Assert.Fail(); }); }
public void UpdateGraphAndWait(GraphSummary graph) { RunUI(() => { graph.UpdateUI(); }); WaitForGraphs(); }
public RunToRunRegressionToolbar RegressionToolbar(GraphSummary graphSummary) { return(graphSummary.Toolbar as RunToRunRegressionToolbar); }
public ToolStripComboBox RunToRunOriginalReplicate(GraphSummary graphSummary) { return(RegressionToolbar(graphSummary).RunToRunOriginalReplicate); }
protected override void DoTest() { OpenDocument(TestFilesDir.GetTestPath(@"DIA-TTOF-tutorial.sky")); WaitForDocumentLoaded(); RunUI(() => { SkylineWindow.ShowDetectionsReplicateComparisonGraph(); }); WaitForGraphs(); GraphSummary graph = SkylineWindow.DetectionsPlot; var toolbar = graph.Toolbar as DetectionsToolbar; Assert.IsNotNull(toolbar); RunUI(() => { toolbar.CbLevel.SelectedItem = DetectionsGraphController.TargetType.PRECURSOR; }); WaitForGraphs(); DetectionsPlotPane pane; Assert.IsTrue(graph.TryGetGraphPane(out pane)); Assert.IsTrue(pane.HasToolbar); //use properties dialog to update the q-value var propDialog = ShowDialog <DetectionToolbarProperties>(() => { toolbar.pbProperties_Click(graph.GraphControl, new EventArgs()); }); //verify data correct for 2 q-values RunUI(() => { propDialog.SetQValueTo(0.003f); propDialog.OkDialog(); }); WaitForClosedForm(propDialog); WaitForCondition(() => (DetectionsGraphController.Settings.QValueCutoff == 0.003f)); AssertDataCorrect(pane, 0, 0.003f); //use properties dialog to update the q-value propDialog = ShowDialog <DetectionToolbarProperties>(() => { toolbar.pbProperties_Click(graph.GraphControl, new EventArgs()); }); RunUI(() => { propDialog.SetQValueTo(0.001f); propDialog.OkDialog(); }); WaitForClosedForm(propDialog); WaitForCondition(() => (DetectionsGraphController.Settings.QValueCutoff == 0.001f)); AssertDataCorrect(pane, 2, 0.001f); //verify the number of the bars on the plot RunUI(() => { Assert.IsTrue( pane.CurveList[0].IsBar && pane.CurveList[0].Points.Count == REF_DATA[0].Length); }); string[] tipText = { Resources.DetectionPlotPane_Tooltip_Replicate + TextUtil.SEPARATOR_TSV_STR + @"2_SW-B", string.Format(Resources.DetectionPlotPane_Tooltip_Count, DetectionsGraphController.TargetType.PRECURSOR) + TextUtil.SEPARATOR_TSV_STR + 118.ToString(CultureInfo.CurrentCulture), Resources.DetectionPlotPane_Tooltip_CumulativeCount + TextUtil.SEPARATOR_TSV_STR + 123.ToString(CultureInfo.CurrentCulture), Resources.DetectionPlotPane_Tooltip_AllCount + TextUtil.SEPARATOR_TSV_STR + 115.ToString(CultureInfo.CurrentCulture), Resources.DetectionPlotPane_Tooltip_QMedian + TextUtil.SEPARATOR_TSV_STR + (6.0d).ToString(@"F1", CultureInfo.CurrentCulture) }; RunUI(() => { Assert.IsNotNull(pane.ToolTip); pane.PopulateTooltip(1); //verify the tooltip text CollectionAssert.AreEqual(tipText, pane.ToolTip.TipLines); }); //test the data correct after a doc change (delete peptide) RunUI(() => { SkylineWindow.SelectedPath = SkylineWindow.Document.GetPathTo((int)SrmDocument.Level.Molecules, 12); SkylineWindow.EditDelete(); }); WaitForGraphs(); WaitForConditionUI(() => DetectionPlotData.GetDataCache().Datas.Any((dat) => ReferenceEquals(SkylineWindow.DocumentUI, dat.Document) && DetectionsGraphController.Settings.QValueCutoff == dat.QValueCutoff), "Cache is not updated on document change."); //verify that the cache is purged after the document update RunUI(() => { Assert.IsTrue(DetectionPlotData.GetDataCache().Datas.All((dat) => ReferenceEquals(SkylineWindow.DocumentUI, dat.Document))); }); AssertDataCorrect(pane, 4, 0.001f); RunUI(() => { SkylineWindow.ShowDetectionsHistogramGraph(); }); WaitForGraphs(); DetectionsHistogramPane paneHistogram; var graphHistogram = SkylineWindow.DetectionsPlot; Assert.IsTrue(graphHistogram.TryGetGraphPane(out paneHistogram), "Cannot get histogram pane."); //display and hide tooltip string[] histogramTipText = { Resources.DetectionHistogramPane_Tooltip_ReplicateCount + TextUtil.SEPARATOR_TSV_STR + 5.ToString(CultureInfo.CurrentCulture), String.Format(Resources.DetectionHistogramPane_Tooltip_Count, DetectionsGraphController.TargetType.PRECURSOR) + TextUtil.SEPARATOR_TSV_STR + 102.ToString(CultureInfo.CurrentCulture), }; RunUI(() => { Assert.IsNotNull(paneHistogram.ToolTip, "No tooltip found."); paneHistogram.PopulateTooltip(5); //verify the tooltip text CollectionAssert.AreEqual(histogramTipText, paneHistogram.ToolTip.TipLines); }); RunUI(() => { graph.Close(); graphHistogram.Close(); }); WaitForGraphs(); }
private void DisplayCalibrationCurve() { Text = TabText = _originalFormTitle; CalibrationCurveOptions options = Settings.Default.CalibrationCurveOptions; zedGraphControl.GraphPane.YAxis.Type = options.LogYAxis ? AxisType.Log : AxisType.Linear; zedGraphControl.GraphPane.XAxis.Type = options.LogXAxis ? AxisType.Log : AxisType.Linear; bool logPlot = options.LogXAxis || options.LogYAxis; zedGraphControl.GraphPane.Legend.IsVisible = options.ShowLegend; _scatterPlots = null; CalibrationCurve = null; FiguresOfMerit = FiguresOfMerit.EMPTY; SrmDocument document = DocumentUiContainer.DocumentUI; if (!document.Settings.HasResults) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_No_results_available; return; } PeptideDocNode peptide; PeptideGroupDocNode peptideGroup; if (!TryGetSelectedPeptide(out peptideGroup, out peptide)) { zedGraphControl.GraphPane.Title.Text = ModeUIAwareStringFormat(QuantificationStrings .CalibrationForm_DisplayCalibrationCurve_Select_a_peptide_to_see_its_calibration_curve); return; } if (-1 == document.Children.IndexOf(peptideGroup)) { zedGraphControl.GraphPane.Title.Text = ModeUIAwareStringFormat(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_peptide_is_no_longer_part_of_the_Skyline_document_); return; } PeptideQuantifier peptideQuantifier = PeptideQuantifier.GetPeptideQuantifier(document, peptideGroup, peptide); CalibrationCurveFitter curveFitter = new CalibrationCurveFitter(peptideQuantifier, document.Settings); if (curveFitter.IsEnableSingleBatch && Settings.Default.CalibrationCurveOptions.SingleBatch) { curveFitter.SingleBatchReplicateIndex = _skylineWindow.SelectedResultsIndex; } Text = TabText = GetFormTitle(curveFitter); if (peptideQuantifier.QuantificationSettings.RegressionFit == RegressionFit.NONE) { if (!(peptideQuantifier.NormalizationMethod is NormalizationMethod.RatioToLabel)) { zedGraphControl.GraphPane.Title.Text = ModeUIAwareStringFormat(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_Use_the_Quantification_tab_on_the_Peptide_Settings_dialog_to_control_the_conversion_of_peak_areas_to_concentrations_); } else { if (!peptide.InternalStandardConcentration.HasValue) { zedGraphControl.GraphPane.Title.Text = ModeUIAwareStringFormat(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_convert_peak_area_ratios_to_concentrations__specify_the_internal_standard_concentration_for__0__, peptide); } else { zedGraphControl.GraphPane.Title.Text = null; } } } else { if (curveFitter.GetStandardConcentrations().Any()) { zedGraphControl.GraphPane.Title.Text = null; } else { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_fit_a_calibration_curve__set_the_Sample_Type_of_some_replicates_to_Standard__and_specify_their_concentration_; } } zedGraphControl.GraphPane.XAxis.Title.Text = curveFitter.GetXAxisTitle(); zedGraphControl.GraphPane.YAxis.Title.Text = curveFitter.GetYAxisTitle(); CalibrationCurve = curveFitter.GetCalibrationCurve(); FiguresOfMerit = curveFitter.GetFiguresOfMerit(CalibrationCurve); double minX = double.MaxValue, maxX = double.MinValue; double minY = double.MaxValue; _scatterPlots = new CurveList(); IEnumerable <SampleType> sampleTypes = SampleType.ListSampleTypes() .Where(Options.DisplaySampleType); foreach (var sampleType in sampleTypes) { PointPairList pointPairList = new PointPairList(); PointPairList pointPairListExcluded = new PointPairList(); foreach (var standardIdentifier in curveFitter.EnumerateCalibrationPoints()) { if (!Equals(sampleType, curveFitter.GetSampleType(standardIdentifier))) { continue; } double?y = curveFitter.GetYValue(standardIdentifier); double?xCalculated = curveFitter.GetCalculatedXValue(CalibrationCurve, standardIdentifier); double?x = curveFitter.GetSpecifiedXValue(standardIdentifier) ?? xCalculated; if (y.HasValue && x.HasValue) { PointPair point = new PointPair(x.Value, y.Value) { Tag = standardIdentifier }; if (sampleType.AllowExclude && null == standardIdentifier.LabelType && peptide.IsExcludeFromCalibration(standardIdentifier.ReplicateIndex)) { pointPairListExcluded.Add(point); } else { pointPairList.Add(point); } if (!IsNumber(x) || !IsNumber(y)) { continue; } if (!logPlot || x.Value > 0) { minX = Math.Min(minX, x.Value); } if (!logPlot || y.Value > 0) { minY = Math.Min(minY, y.Value); } maxX = Math.Max(maxX, x.Value); if (IsNumber(xCalculated)) { maxX = Math.Max(maxX, xCalculated.Value); if (!logPlot || xCalculated.Value > 0) { minX = Math.Min(minX, xCalculated.Value); } } } } if (pointPairList.Any()) { var lineItem = zedGraphControl.GraphPane.AddCurve(sampleType.ToString(), pointPairList, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; lineItem.Symbol.Fill = new Fill(sampleType.Color); _scatterPlots.Add(lineItem); } if (pointPairListExcluded.Any()) { string curveLabel = pointPairList.Any() ? null : sampleType.ToString(); var lineItem = zedGraphControl.GraphPane.AddCurve(curveLabel, pointPairListExcluded, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; _scatterPlots.Add(lineItem); } } List <string> labelLines = new List <String>(); RegressionFit regressionFit = document.Settings.PeptideSettings.Quantification.RegressionFit; if (regressionFit != RegressionFit.NONE) { if (minX <= maxX) { int interpolatedLinePointCount = 100; if (!logPlot && regressionFit != RegressionFit.LINEAR_IN_LOG_SPACE) { if (regressionFit == RegressionFit.LINEAR_THROUGH_ZERO) { minX = Math.Min(0, minX); } if (regressionFit != RegressionFit.QUADRATIC) { interpolatedLinePointCount = 2; } } double[] xValues; if (CalibrationCurve.TurningPoint.HasValue) { xValues = new[] { minX, CalibrationCurve.TurningPoint.Value, maxX }; } else { xValues = new[] { minX, maxX }; } Array.Sort(xValues); LineItem interpolatedLine = CreateInterpolatedLine(CalibrationCurve, xValues, interpolatedLinePointCount, logPlot); if (null != interpolatedLine) { zedGraphControl.GraphPane.CurveList.Add(interpolatedLine); } } labelLines.Add(CalibrationCurve.ToString()); if (CalibrationCurve.RSquared.HasValue) { labelLines.Add(CalibrationCurve.RSquaredDisplayText(CalibrationCurve.RSquared.Value)); } if (!Equals(curveFitter.QuantificationSettings.RegressionWeighting, RegressionWeighting.NONE)) { labelLines.Add(string.Format(@"{0}: {1}", QuantificationStrings.Weighting, curveFitter.QuantificationSettings.RegressionWeighting)); } if (options.ShowFiguresOfMerit) { string strFiguresOfMerit = FiguresOfMerit.ToString(); if (!string.IsNullOrEmpty(strFiguresOfMerit)) { labelLines.Add(strFiguresOfMerit); } } } CalibrationPoint?selectionIdentifier = null; if (options.ShowSelection) { if (curveFitter.IsotopologResponseCurve) { var labelType = (_skylineWindow.SequenceTree.SelectedNode as SrmTreeNode) ?.GetNodeOfType <TransitionGroupTreeNode>()?.DocNode.LabelType; if (labelType != null) { selectionIdentifier = new CalibrationPoint(_skylineWindow.SelectedResultsIndex, labelType); } } else { selectionIdentifier = new CalibrationPoint(_skylineWindow.SelectedResultsIndex, null); } } if (selectionIdentifier.HasValue) { double?ySelected = curveFitter.GetYValue(selectionIdentifier.Value); if (IsNumber(ySelected)) { double? xSelected = curveFitter.GetCalculatedXValue(CalibrationCurve, selectionIdentifier.Value); var selectedLineColor = Color.FromArgb(128, GraphSummary.ColorSelected); const float selectedLineWidth = 2; double? xSpecified = curveFitter.GetSpecifiedXValue(selectionIdentifier.Value); if (IsNumber(xSelected)) { ArrowObj arrow = new ArrowObj(xSelected.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = GraphSummary.ColorSelected } }; zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow); var verticalLine = new LineObj(xSelected.Value, ySelected.Value, xSelected.Value, options.LogYAxis ? minY / 10 : 0) { Line = { Color = selectedLineColor, Width = selectedLineWidth }, Location = { CoordinateFrame = CoordType.AxisXYScale }, ZOrder = ZOrder.E_BehindCurves, IsClippedToChartRect = true }; zedGraphControl.GraphPane.GraphObjList.Add(verticalLine); if (IsNumber(xSpecified)) { var horizontalLine = new LineObj(xSpecified.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = selectedLineColor, Width = selectedLineWidth }, Location = { CoordinateFrame = CoordType.AxisXYScale }, ZOrder = ZOrder.E_BehindCurves, IsClippedToChartRect = true }; zedGraphControl.GraphPane.GraphObjList.Add(horizontalLine); } } else { // We were not able to map the observed intensity back to the calibration curve, but we still want to // indicate where the currently selected point is. if (IsNumber(xSpecified)) { // If the point has a specified concentration, then use that. ArrowObj arrow = new ArrowObj(xSpecified.Value, ySelected.Value, xSpecified.Value, ySelected.Value) { Line = { Color = GraphSummary.ColorSelected } }; zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow); } else { // Otherwise, draw a horizontal line at the appropriate y-value. var horizontalLine = new LineObj(minX, ySelected.Value, maxX, ySelected.Value) { Line = { Color = selectedLineColor, Width = selectedLineWidth }, Location = { CoordinateFrame = CoordType.AxisXYScale }, IsClippedToChartRect = true, }; ZedGraphControl.GraphPane.GraphObjList.Add(horizontalLine); } } } QuantificationResult quantificationResult = null; double?calculatedConcentration; if (curveFitter.IsotopologResponseCurve) { calculatedConcentration = curveFitter.GetCalculatedConcentration(CalibrationCurve, selectionIdentifier.Value); } else { quantificationResult = curveFitter.GetPeptideQuantificationResult(selectionIdentifier.Value.ReplicateIndex); calculatedConcentration = quantificationResult?.CalculatedConcentration; } if (calculatedConcentration.HasValue) { labelLines.Add(string.Format(@"{0} = {1}", QuantificationStrings.Calculated_Concentration, QuantificationResult.FormatCalculatedConcentration(calculatedConcentration.Value, curveFitter.QuantificationSettings.Units))); } else if (quantificationResult != null && !quantificationResult.NormalizedArea.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_replicate_has_missing_or_truncated_transitions); } } if (Options.ShowFiguresOfMerit) { if (IsNumber(FiguresOfMerit.LimitOfDetection)) { var lodLine = new LineObj(Color.DarkMagenta, FiguresOfMerit.LimitOfDetection.Value, 0, FiguresOfMerit.LimitOfDetection.Value, 1) { Location = { CoordinateFrame = CoordType.XScaleYChartFraction } }; zedGraphControl.GraphPane.GraphObjList.Add(lodLine); } if (IsNumber(FiguresOfMerit.LimitOfQuantification)) { var loqLine = new LineObj(Color.DarkCyan, FiguresOfMerit.LimitOfQuantification.Value, 0, FiguresOfMerit.LimitOfQuantification.Value, 1) { Location = { CoordinateFrame = CoordType.XScaleYChartFraction } }; zedGraphControl.GraphPane.GraphObjList.Add(loqLine); } } if (labelLines.Any()) { TextObj text = new TextObj(TextUtil.LineSeparate(labelLines), .01, 0, CoordType.ChartFraction, AlignH.Left, AlignV.Top) { IsClippedToChartRect = true, ZOrder = ZOrder.E_BehindCurves, FontSpec = GraphSummary.CreateFontSpec(Color.Black), }; zedGraphControl.GraphPane.GraphObjList.Add(text); } }
private void DisplayCalibrationCurve() { CalibrationCurveOptions options = Settings.Default.CalibrationCurveOptions; zedGraphControl.GraphPane.YAxis.Type = zedGraphControl.GraphPane.XAxis.Type = options.LogPlot ? AxisType.Log : AxisType.Linear; zedGraphControl.GraphPane.Legend.IsVisible = options.ShowLegend; _scatterPlots = null; CalibrationCurve = null; SrmDocument document = DocumentUiContainer.DocumentUI; if (!document.Settings.HasResults) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_No_results_available; return; } PeptideDocNode peptide = null; PeptideGroupDocNode peptideGroup = null; SequenceTree sequenceTree = _skylineWindow.SequenceTree; if (null != sequenceTree) { PeptideTreeNode peptideTreeNode = sequenceTree.GetNodeOfType <PeptideTreeNode>(); if (null != peptideTreeNode) { peptide = peptideTreeNode.DocNode; } PeptideGroupTreeNode peptideGroupTreeNode = sequenceTree.GetNodeOfType <PeptideGroupTreeNode>(); if (null != peptideGroupTreeNode) { peptideGroup = peptideGroupTreeNode.DocNode; } } if (null == peptide) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings .CalibrationForm_DisplayCalibrationCurve_Select_a_peptide_to_see_its_calibration_curve; return; } PeptideQuantifier peptideQuantifier = PeptideQuantifier.GetPeptideQuantifier(document.Settings, peptideGroup, peptide); CalibrationCurveFitter curveFitter = new CalibrationCurveFitter(peptideQuantifier, document.Settings); if (peptideQuantifier.QuantificationSettings.RegressionFit == RegressionFit.NONE) { if (string.IsNullOrEmpty( peptideQuantifier.QuantificationSettings.NormalizationMethod.IsotopeLabelTypeName)) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_Use_the_Quantification_tab_on_the_Peptide_Settings_dialog_to_control_the_conversion_of_peak_areas_to_concentrations_; } else { if (!peptide.InternalStandardConcentration.HasValue) { zedGraphControl.GraphPane.Title.Text = string.Format(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_convert_peak_area_ratios_to_concentrations__specify_the_internal_standard_concentration_for__0__, peptide); } else { zedGraphControl.GraphPane.Title.Text = null; } } } else { if (curveFitter.GetStandardConcentrations().Any()) { zedGraphControl.GraphPane.Title.Text = null; } else { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_fit_a_calibration_curve__set_the_Sample_Type_of_some_replicates_to_Standard__and_specify_their_concentration_; } } zedGraphControl.GraphPane.XAxis.Title.Text = curveFitter.GetXAxisTitle(); zedGraphControl.GraphPane.YAxis.Title.Text = curveFitter.GetYAxisTitle(); CalibrationCurve = curveFitter.GetCalibrationCurve(); double minX = double.MaxValue, maxX = double.MinValue; _scatterPlots = new CurveList(); foreach (var sampleType in SampleType.ListSampleTypes()) { if (!Options.DisplaySampleType(sampleType)) { continue; } PointPairList pointPairList = new PointPairList(); for (int iReplicate = 0; iReplicate < document.Settings.MeasuredResults.Chromatograms.Count; iReplicate++) { ChromatogramSet chromatogramSet = document.Settings.MeasuredResults.Chromatograms[iReplicate]; if (!Equals(sampleType, chromatogramSet.SampleType)) { continue; } double?y = curveFitter.GetYValue(iReplicate); double?x = curveFitter.GetSpecifiedXValue(iReplicate) ?? curveFitter.GetCalculatedXValue(CalibrationCurve, iReplicate); if (y.HasValue && x.HasValue) { PointPair point = new PointPair(x.Value, y.Value) { Tag = iReplicate }; pointPairList.Add(point); if (!Options.LogPlot || x.Value > 0) { minX = Math.Min(minX, x.Value); } maxX = Math.Max(maxX, x.Value); } } if (pointPairList.Any()) { var lineItem = zedGraphControl.GraphPane.AddCurve(sampleType.ToString(), pointPairList, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; lineItem.Symbol.Fill = new Fill(sampleType.Color); _scatterPlots.Add(lineItem); } } List <string> labelLines = new List <String>(); RegressionFit regressionFit = document.Settings.PeptideSettings.Quantification.RegressionFit; if (regressionFit != RegressionFit.NONE) { if (minX <= maxX) { int interpolatedLinePointCount = 100; if (!options.LogPlot) { if (regressionFit == RegressionFit.LINEAR_THROUGH_ZERO) { minX = Math.Min(0, minX); } if (regressionFit != RegressionFit.QUADRATIC) { interpolatedLinePointCount = 2; } } LineItem interpolatedLine = CreateInterpolatedLine(CalibrationCurve, minX, maxX, interpolatedLinePointCount, Options.LogPlot); if (null != interpolatedLine) { zedGraphControl.GraphPane.CurveList.Add(interpolatedLine); } } labelLines.Add(CalibrationCurve.ToString()); if (CalibrationCurve.RSquared.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_ + CalibrationCurve.RSquared.Value.ToString("0.####")); // Not L10N } if (!Equals(curveFitter.QuantificationSettings.RegressionWeighting, RegressionWeighting.NONE)) { labelLines.Add(string.Format("{0}: {1}", // Not L10N QuantificationStrings.Weighting, curveFitter.QuantificationSettings.RegressionWeighting)); } } if (options.ShowSelection) { double?ySelected = curveFitter.GetYValue(_skylineWindow.SelectedResultsIndex); double?xSelected = curveFitter.GetCalculatedXValue(CalibrationCurve, _skylineWindow.SelectedResultsIndex); if (xSelected.HasValue && ySelected.HasValue) { ArrowObj arrow = new ArrowObj(xSelected.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = GraphSummary.ColorSelected } }; zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow); } var quantificationResult = curveFitter.GetQuantificationResult(_skylineWindow.SelectedResultsIndex); if (quantificationResult.CalculatedConcentration.HasValue) { labelLines.Add(string.Format("{0} = {1}", // Not L10N QuantificationStrings.Calculated_Concentration, quantificationResult)); } else if (!quantificationResult.NormalizedArea.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_replicate_has_missing_or_truncated_transitions); } } if (labelLines.Any()) { TextObj text = new TextObj(TextUtil.LineSeparate(labelLines), .01, 0, CoordType.ChartFraction, AlignH.Left, AlignV.Top) { IsClippedToChartRect = true, ZOrder = ZOrder.E_BehindCurves, FontSpec = GraphSummary.CreateFontSpec(Color.Black), }; zedGraphControl.GraphPane.GraphObjList.Add(text); } }
public static PeptidesAndTransitionGroups GetSelectedPeptides(GraphSummary graphSummary) { return(PeptidesAndTransitionGroups.Get(graphSummary.StateProvider.SelectedNodes, graphSummary.ResultsIndex, int.MaxValue)); }
private void DisplayCalibrationCurve() { CalibrationCurveOptions options = Settings.Default.CalibrationCurveOptions; zedGraphControl.GraphPane.YAxis.Type = zedGraphControl.GraphPane.XAxis.Type = options.LogPlot ? AxisType.Log : AxisType.Linear; zedGraphControl.GraphPane.Legend.IsVisible = options.ShowLegend; _scatterPlots = null; CalibrationCurve = null; FiguresOfMerit = FiguresOfMerit.EMPTY; SrmDocument document = DocumentUiContainer.DocumentUI; if (!document.Settings.HasResults) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_No_results_available; return; } PeptideDocNode peptide; PeptideGroupDocNode peptideGroup; if (!TryGetSelectedPeptide(out peptideGroup, out peptide)) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings .CalibrationForm_DisplayCalibrationCurve_Select_a_peptide_to_see_its_calibration_curve; return; } if (-1 == document.Children.IndexOf(peptideGroup)) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_peptide_is_no_longer_part_of_the_Skyline_document_; return; } PeptideQuantifier peptideQuantifier = PeptideQuantifier.GetPeptideQuantifier(document, peptideGroup, peptide); CalibrationCurveFitter curveFitter = new CalibrationCurveFitter(peptideQuantifier, document.Settings); if (peptideQuantifier.QuantificationSettings.RegressionFit == RegressionFit.NONE) { if (!(peptideQuantifier.NormalizationMethod is NormalizationMethod.RatioToLabel)) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_Use_the_Quantification_tab_on_the_Peptide_Settings_dialog_to_control_the_conversion_of_peak_areas_to_concentrations_; } else { if (!peptide.InternalStandardConcentration.HasValue) { zedGraphControl.GraphPane.Title.Text = string.Format(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_convert_peak_area_ratios_to_concentrations__specify_the_internal_standard_concentration_for__0__, peptide); } else { zedGraphControl.GraphPane.Title.Text = null; } } } else { if (curveFitter.GetStandardConcentrations().Any()) { zedGraphControl.GraphPane.Title.Text = null; } else { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_fit_a_calibration_curve__set_the_Sample_Type_of_some_replicates_to_Standard__and_specify_their_concentration_; } } zedGraphControl.GraphPane.XAxis.Title.Text = curveFitter.GetXAxisTitle(); zedGraphControl.GraphPane.YAxis.Title.Text = curveFitter.GetYAxisTitle(); CalibrationCurve = curveFitter.GetCalibrationCurve(); FiguresOfMerit = curveFitter.GetFiguresOfMerit(CalibrationCurve); double minX = double.MaxValue, maxX = double.MinValue; double minY = double.MaxValue; _scatterPlots = new CurveList(); foreach (var sampleType in SampleType.ListSampleTypes()) { if (!Options.DisplaySampleType(sampleType)) { continue; } PointPairList pointPairList = new PointPairList(); PointPairList pointPairListExcluded = new PointPairList(); for (int iReplicate = 0; iReplicate < document.Settings.MeasuredResults.Chromatograms.Count; iReplicate++) { ChromatogramSet chromatogramSet = document.Settings.MeasuredResults.Chromatograms[iReplicate]; if (!Equals(sampleType, chromatogramSet.SampleType)) { continue; } double?y = curveFitter.GetYValue(iReplicate); double?xCalculated = curveFitter.GetCalculatedXValue(CalibrationCurve, iReplicate); double?x = curveFitter.GetSpecifiedXValue(iReplicate) ?? xCalculated; if (y.HasValue && x.HasValue) { PointPair point = new PointPair(x.Value, y.Value) { Tag = iReplicate }; if (sampleType.AllowExclude && peptide.IsExcludeFromCalibration(iReplicate)) { pointPairListExcluded.Add(point); } else { pointPairList.Add(point); } if (double.IsNaN(x.Value) || double.IsInfinity(x.Value) || double.IsNaN(y.Value) || double.IsInfinity(y.Value)) { continue; } if (!Options.LogPlot || x.Value > 0) { minX = Math.Min(minX, x.Value); } if (!Options.LogPlot || y.Value > 0) { minY = Math.Min(minY, y.Value); } maxX = Math.Max(maxX, x.Value); if (xCalculated.HasValue) { maxX = Math.Max(maxX, xCalculated.Value); if (!Options.LogPlot || xCalculated.Value > 0) { minX = Math.Min(minX, xCalculated.Value); } } } } if (pointPairList.Any()) { var lineItem = zedGraphControl.GraphPane.AddCurve(sampleType.ToString(), pointPairList, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; lineItem.Symbol.Fill = new Fill(sampleType.Color); _scatterPlots.Add(lineItem); } if (pointPairListExcluded.Any()) { string curveLabel = pointPairList.Any() ? null : sampleType.ToString(); var lineItem = zedGraphControl.GraphPane.AddCurve(curveLabel, pointPairListExcluded, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; _scatterPlots.Add(lineItem); } } List <string> labelLines = new List <String>(); RegressionFit regressionFit = document.Settings.PeptideSettings.Quantification.RegressionFit; if (regressionFit != RegressionFit.NONE) { if (minX <= maxX) { int interpolatedLinePointCount = 100; if (!options.LogPlot) { if (regressionFit == RegressionFit.LINEAR_THROUGH_ZERO) { minX = Math.Min(0, minX); } if (regressionFit != RegressionFit.QUADRATIC) { interpolatedLinePointCount = 2; } } double[] xValues; if (CalibrationCurve.TurningPoint.HasValue) { xValues = new[] { minX, CalibrationCurve.TurningPoint.Value, maxX }; } else { xValues = new[] { minX, maxX }; } Array.Sort(xValues); LineItem interpolatedLine = CreateInterpolatedLine(CalibrationCurve, xValues, interpolatedLinePointCount, Options.LogPlot); if (null != interpolatedLine) { zedGraphControl.GraphPane.CurveList.Add(interpolatedLine); } } labelLines.Add(CalibrationCurve.ToString()); if (CalibrationCurve.RSquared.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_ + CalibrationCurve.RSquared.Value.ToString("0.####")); // Not L10N } if (!Equals(curveFitter.QuantificationSettings.RegressionWeighting, RegressionWeighting.NONE)) { labelLines.Add(string.Format("{0}: {1}", // Not L10N QuantificationStrings.Weighting, curveFitter.QuantificationSettings.RegressionWeighting)); } string strFiguresOfMerit = FiguresOfMerit.ToString(); if (!string.IsNullOrEmpty(strFiguresOfMerit)) { labelLines.Add(strFiguresOfMerit); } } if (options.ShowSelection) { double?ySelected = curveFitter.GetYValue(_skylineWindow.SelectedResultsIndex); double?xSelected = curveFitter.GetCalculatedXValue(CalibrationCurve, _skylineWindow.SelectedResultsIndex); if (xSelected.HasValue && ySelected.HasValue) { const float selectedLineWidth = 2; ArrowObj arrow = new ArrowObj(xSelected.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = GraphSummary.ColorSelected } }; zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow); var selectedLineColor = Color.FromArgb(128, GraphSummary.ColorSelected); var verticalLine = new LineObj(xSelected.Value, ySelected.Value, xSelected.Value, options.LogPlot ? double.MinValue : 0) { Line = { Color = selectedLineColor, Width = selectedLineWidth }, Location = { CoordinateFrame = CoordType.AxisXYScale }, ZOrder = ZOrder.E_BehindCurves, IsClippedToChartRect = true }; zedGraphControl.GraphPane.GraphObjList.Add(verticalLine); double?xSpecified = curveFitter.GetSpecifiedXValue(_skylineWindow.SelectedResultsIndex); if (xSpecified.HasValue) { var horizontalLine = new LineObj(xSpecified.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = selectedLineColor, Width = selectedLineWidth }, Location = { CoordinateFrame = CoordType.AxisXYScale }, ZOrder = ZOrder.E_BehindCurves, IsClippedToChartRect = true }; zedGraphControl.GraphPane.GraphObjList.Add(horizontalLine); } } var quantificationResult = curveFitter.GetQuantificationResult(_skylineWindow.SelectedResultsIndex); if (quantificationResult.CalculatedConcentration.HasValue) { labelLines.Add(string.Format("{0} = {1}", // Not L10N QuantificationStrings.Calculated_Concentration, quantificationResult)); } else if (!quantificationResult.NormalizedArea.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_replicate_has_missing_or_truncated_transitions); } } if (labelLines.Any()) { TextObj text = new TextObj(TextUtil.LineSeparate(labelLines), .01, 0, CoordType.ChartFraction, AlignH.Left, AlignV.Top) { IsClippedToChartRect = true, ZOrder = ZOrder.E_BehindCurves, FontSpec = GraphSummary.CreateFontSpec(Color.Black), }; zedGraphControl.GraphPane.GraphObjList.Add(text); } }
private bool GetExpectedVisible(GraphSummary g) { var pane = g.GraphControl.GraphPane as AreaReplicateGraphPane; return(pane != null && pane.IsExpectedVisible); }