diff --git a/pwiz_tools/Skyline/Controls/Graphs/Calibration/CalibrationGraphControl.cs b/pwiz_tools/Skyline/Controls/Graphs/Calibration/CalibrationGraphControl.cs
index 70b43528ec2..dfe3780186a 100644
--- a/pwiz_tools/Skyline/Controls/Graphs/Calibration/CalibrationGraphControl.cs
+++ b/pwiz_tools/Skyline/Controls/Graphs/Calibration/CalibrationGraphControl.cs
@@ -78,7 +78,7 @@ protected override void OnHandleCreated(EventArgs e)
private void Settings_OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
- if (e.PropertyName == nameof(Properties.Settings.Default.CalibrationCurveOptions ))
+ if (e.PropertyName == nameof(Properties.Settings.Default.CalibrationCurveOptions))
{
Update(DisplaySettings);
}
@@ -355,6 +355,11 @@ private void DoUpdate(Settings displaySettings)
labelLines.Add(CalibrationCurveMetrics.RSquaredDisplayText(CalibrationCurveMetrics.RSquared.Value));
}
+ if (CalibrationCurveMetrics.RelativeStandardError.HasValue)
+ {
+ labelLines.Add(CalibrationCurveMetrics.RelativeStandardErrorDisplayText(CalibrationCurveMetrics.RelativeStandardError.Value));
+ }
+
if (!Equals(curveFitter.QuantificationSettings.RegressionWeighting, RegressionWeighting.NONE))
{
labelLines.Add(string.Format(@"{0}: {1}",
@@ -406,7 +411,7 @@ private void DoUpdate(Settings displaySettings)
{
ArrowObj arrow = new ArrowObj(xSelected.Value, ySelected.Raw, xSelected.Value,
ySelected.Raw)
- { Line = { Color = GraphSummary.ColorSelected } };
+ { Line = { Color = GraphSummary.ColorSelected } };
zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow);
var verticalLine = new LineObj(xSelected.Value, ySelected.Raw, xSelected.Value,
options.LogYAxis ? minY / 10 : 0)
@@ -439,7 +444,7 @@ private void DoUpdate(Settings displaySettings)
// If the point has a specified concentration, then use that.
ArrowObj arrow = new ArrowObj(xSpecified.Value, ySelected.Raw, xSpecified.Value,
ySelected.Raw)
- { Line = { Color = GraphSummary.ColorSelected } };
+ { Line = { Color = GraphSummary.ColorSelected } };
zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow);
}
else
@@ -726,7 +731,7 @@ ToolStripMenuItem excludeStandardMenuItem
menuStrip.Items.Insert(index++, moreDisplayOptionsContextMenuItem);
menuStrip.Items.Insert(index++, new ToolStripSeparator());
}
-
+
}
private bool IsEnableIsotopologResponseCurve()
{
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/CalibrationCurveMetrics.cs b/pwiz_tools/Skyline/Model/Databinding/Entities/CalibrationCurveMetrics.cs
index c393ec82f67..222644fc1d3 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/CalibrationCurveMetrics.cs
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/CalibrationCurveMetrics.cs
@@ -75,6 +75,21 @@ public CalibrationCurveMetrics ChangeRSquared(double? rSquared)
return ChangeProp(ImClone(this), im => im.RSquared = rSquared);
}
+ [Format(Formats.Integer, NullValue = TextUtil.EXCEL_NA)]
+ public int? FittedParameters { get; private set; }
+ public CalibrationCurveMetrics ChangeFittedParameters(int? fittedParameters)
+ {
+ return ChangeProp(ImClone(this), im => im.FittedParameters = fittedParameters);
+ }
+
+ [Format(Formats.Percent, NullValue = TextUtil.EXCEL_NA)]
+ public double? RelativeStandardError { get; private set; }
+
+ public CalibrationCurveMetrics ChangeRelativeStandardError(double? relStdError)
+ {
+ return ChangeProp(ImClone(this), im => im.RelativeStandardError = relStdError);
+ }
+
public string ErrorMessage { get; private set; }
public CalibrationCurveMetrics ChangeErrorMessage(string errorMessage)
{
@@ -136,5 +151,11 @@ public static string RSquaredDisplayText(double rSquared)
return QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_ +
rSquared.ToString(@"0.####");
}
+
+ public static string RelativeStandardErrorDisplayText(double relStdError)
+ {
+ return QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_RelativeStandardError +
+ relStdError.ToString(@"0.##%");
+ }
}
}
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.ja.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.ja.resx
index 0105ffe9ab1..b3e6ad9a54e 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.ja.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.ja.resx
@@ -507,6 +507,9 @@
最初の位置
+
+ 推定パラメータ
+
倍率変化
@@ -1428,6 +1431,9 @@
R平方
+
+ 相対標準誤差
+
試料希釈倍数
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.resx
index 6b8c3ba2f75..b6b28ab5c92 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.resx
@@ -507,6 +507,9 @@
First Position
+
+ Fitted Parameters
+
Fold Change
@@ -1431,6 +1434,9 @@
R Squared
+
+ Relative Standard Error
+
Sample Dilution Factor
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.zh-CHS.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.zh-CHS.resx
index 130cd6f4624..123a17483df 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.zh-CHS.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnCaptions.zh-CHS.resx
@@ -507,6 +507,9 @@
第一个位置
+
+ 拟合参数
+
倍数变化
@@ -1428,6 +1431,9 @@
R 平方
+
+ 相对标准误差
+
样品稀释因子
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.ja.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.ja.resx
index 11a9ca8a6fa..4b925fe8063 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.ja.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.ja.resx
@@ -495,6 +495,9 @@
ペプチドに含まれるタンパク質シークエンスの最初の(N末端)アミノ酸の位置です。タンパク質シークエンスがない場合には#N/Aとなります。
+
+ 検量線において、校正データに適合されたパラメータ(例:傾き、切片)の数。
+
倍率変化値。倍率変化とは、対照群の正規化強度に対する治療群の正規化強度の比率です。
@@ -1451,6 +1454,9 @@
決定係数
+
+ 相対標準誤差
+
試料が分析される前に希釈される量です。
外部標準の希釈倍率は一般的に1で、不明の試料は、装置の定量可能範囲に収まるようにするため1を上回る倍率で希釈された可能性があります。
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.resx
index 6ec4fefdc7f..6a0abb08490 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.resx
@@ -514,6 +514,9 @@ to be the Analyte Concentration from the Replicate times the Concentration Multi
The position of the first (N-terminal) amino acid of the peptide within its
containing protein sequence, or #N/A if no protein sequence is available.
+
+ The number of parameters fitted to calibration data in the calibration curve.
+
The fold change value. The fold change is the ratio of the normalized intensity of the treatment group to the normalized intensity of the control group.
@@ -1547,6 +1550,9 @@ retention score calculator, if one is used (e.g. SSRCalc or iRT score)
Coefficient of determination
+
+ Relative Standard Error
+
The amount by which the sample was diluted before being analyzed.
External standards typically have a dilution factor of 1, and unknown samples may have been diluted by a factor greater than 1 in order to bring them into the quantifiable range for the instrument.
diff --git a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.zh-CHS.resx b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.zh-CHS.resx
index 485185e289b..3ee508ba9d6 100644
--- a/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.zh-CHS.resx
+++ b/pwiz_tools/Skyline/Model/Databinding/Entities/ColumnToolTips.zh-CHS.resx
@@ -514,6 +514,9 @@
肽段的第一个 (N-末端) 氨基酸在其包含的蛋白质序列中的位置,
如果没有可用的蛋白质序列,则为 #N/A。
+
+ 校准曲线中拟合至校准数据的参数(例如斜率、截距)数量
+
倍数变化值。倍数变化是试验组的归一化强度与对照组归一化强度的比率。
@@ -1530,6 +1533,9 @@
测定系数
+
+ 相对标准误差
+
在分析之前稀释样品的量。
外部标准通常具有 1 的稀释因子,并且未知样品可能已被稀释大于 1 的因子,以使它们进入仪器的可量化范围。
diff --git a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/CalibrationCurve.cs b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/CalibrationCurve.cs
index 20176ec4f8d..d9fe4ea6a88 100644
--- a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/CalibrationCurve.cs
+++ b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/CalibrationCurve.cs
@@ -32,7 +32,7 @@ public static readonly CalibrationCurve NO_EXTERNAL_STANDARDS
public double? GetY(double? x)
{
- return x == null ? (double?) null : GetY(x.Value);
+ return x == null ? (double?)null : GetY(x.Value);
}
public abstract double GetY(double x);
@@ -61,6 +61,12 @@ public CalibrationCurveMetrics GetMetrics(IList points)
{
calibrationCurveRow = calibrationCurveRow.ChangeRSquared(rSquared);
}
+ // Assuming the fields are already populated as needed
+ double? relStdError = CalculateRelativeStandardError(points, calibrationCurveRow.FittedParameters);
+ if (relStdError.HasValue)
+ {
+ calibrationCurveRow = calibrationCurveRow.ChangeRelativeStandardError(relStdError);
+ }
}
return calibrationCurveRow;
}
@@ -68,6 +74,41 @@ public CalibrationCurveMetrics GetMetrics(IList points)
protected abstract CalibrationCurveMetrics CreateCalibrationCurveMetrics();
public abstract override string ToString();
+ ///
+ /// Returns Relative Standard Error (formatted typically as a percent like %RSD).
+ /// This method uses degrees of freedom (n - p) which depends on the calibration type
+ /// and which parameters are allowed to be fitted (e.g., intercept forced through 0 or not).
+ ///
+ public virtual double? CalculateRelativeStandardError(IList points, int? fittedParameters)
+ {
+ if (!fittedParameters.HasValue)
+ {
+ return null;
+ }
+ List relativeErrors = new List();
+ foreach (var point in points)
+ {
+ double? xFitted = GetX(point.Y);
+ if (xFitted.HasValue && point.X != 0 && !double.IsNaN(xFitted.Value))
+ {
+ relativeErrors.Add((xFitted.Value - point.X) / point.X);
+ }
+
+ }
+ if (!relativeErrors.Any())
+ {
+ return null;
+ }
+ int degreesOfFreedom = relativeErrors.Count - fittedParameters.Value;
+ if (degreesOfFreedom <= 0)
+ {
+ return null;
+ }
+ double sumOfSquaresOfResiduals = relativeErrors.Sum(r => r * r);
+ double relStdError = Math.Sqrt(sumOfSquaresOfResiduals / degreesOfFreedom);
+ return relStdError;
+ }
+
public virtual double? CalculateRSquared(IEnumerable points)
{
List yValues = new List();
@@ -111,7 +152,11 @@ public override double GetY(double x)
protected override CalibrationCurveMetrics CreateCalibrationCurveMetrics()
{
- return new CalibrationCurveMetrics().ChangeSlope(Slope).ChangeIntercept(Intercept);
+
+ return new CalibrationCurveMetrics()
+ .ChangeSlope(Slope)
+ .ChangeIntercept(Intercept)
+ .ChangeFittedParameters(1 + (Intercept.HasValue ? 1 : 0));
}
public override string ToString()
@@ -164,8 +209,11 @@ public override double GetY(double x)
protected override CalibrationCurveMetrics CreateCalibrationCurveMetrics()
{
- return new CalibrationCurveMetrics().ChangeIntercept(Intercept).ChangeSlope(Slope)
- .ChangeQuadraticCoefficient(QuadraticCoefficient);
+ return new CalibrationCurveMetrics()
+ .ChangeIntercept(Intercept)
+ .ChangeSlope(Slope)
+ .ChangeQuadraticCoefficient(QuadraticCoefficient)
+ .ChangeFittedParameters(3); // 2 if intercept forced to 0
}
public override string ToString()
@@ -213,7 +261,10 @@ public override double GetY(double x)
protected override CalibrationCurveMetrics CreateCalibrationCurveMetrics()
{
- return new CalibrationCurveMetrics().ChangeSlope(Slope).ChangeIntercept(Intercept);
+ return new CalibrationCurveMetrics()
+ .ChangeSlope(Slope)
+ .ChangeIntercept(Intercept)
+ .ChangeFittedParameters(2); // 1 if intercept forced to 0
}
///
@@ -288,8 +339,11 @@ public override double GetY(double x)
protected override CalibrationCurveMetrics CreateCalibrationCurveMetrics()
{
- return new CalibrationCurveMetrics().ChangeSlope(Slope).ChangeIntercept(Intercept)
- .ChangeTurningPoint(TurningPoint);
+ return new CalibrationCurveMetrics()
+ .ChangeSlope(Slope)
+ .ChangeIntercept(Intercept)
+ .ChangeTurningPoint(TurningPoint)
+ .ChangeFittedParameters(3); // Bilinear turning point counts as fitted parameter
}
public override string ToString()
@@ -323,7 +377,10 @@ public override double GetY(double x)
protected override CalibrationCurveMetrics CreateCalibrationCurveMetrics()
{
- return new CalibrationCurveMetrics().ChangeSlope(Slope).ChangePointCount(0);
+ return new CalibrationCurveMetrics()
+ .ChangeSlope(Slope)
+ .ChangePointCount(0)
+ .ChangeFittedParameters(1); // slope only
}
public override string ToString()
diff --git a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.Designer.cs b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.Designer.cs
index fda0683179c..659dec13e73 100644
--- a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.Designer.cs
+++ b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.Designer.cs
@@ -269,6 +269,15 @@ public static string CalibrationForm_DisplayCalibrationCurve_ {
return ResourceManager.GetString("CalibrationForm_DisplayCalibrationCurve_", resourceCulture);
}
}
+
+ ///
+ /// Looks up a localized string similar to RSE = .
+ ///
+ public static string CalibrationForm_DisplayCalibrationCurve_RelativeStandardError {
+ get {
+ return ResourceManager.GetString("CalibrationForm_DisplayCalibrationCurve_RelativeStandardError", resourceCulture);
+ }
+ }
///
/// Looks up a localized string similar to No results available.
diff --git a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.ja.resx b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.ja.resx
index 39dc06217c4..38de8c7957c 100644
--- a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.ja.resx
+++ b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.ja.resx
@@ -358,4 +358,7 @@
{0} ({1})
Example: Standard (MyMolecule)
+
+ RSE =
+
\ No newline at end of file
diff --git a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.resx b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.resx
index a136ac1616b..6cfff00b24f 100644
--- a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.resx
+++ b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.resx
@@ -358,4 +358,7 @@
{0} ({1})
Example: Standard (MyMolecule)
+
+ RSE =
+
\ No newline at end of file
diff --git a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.zh-CHS.resx b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.zh-CHS.resx
index c2ecb55f12f..c359e4c9c5e 100644
--- a/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.zh-CHS.resx
+++ b/pwiz_tools/Skyline/Model/DocSettings/AbsoluteQuantification/QuantificationStrings.zh-CHS.resx
@@ -358,4 +358,7 @@
{0} ({1})
Example: Standard (MyMolecule)
+
+ RSE =
+
\ No newline at end of file
diff --git a/pwiz_tools/Skyline/Model/Hibernate/Formats.cs b/pwiz_tools/Skyline/Model/Hibernate/Formats.cs
index cfb67cca490..b8fa520ff02 100644
--- a/pwiz_tools/Skyline/Model/Hibernate/Formats.cs
+++ b/pwiz_tools/Skyline/Model/Hibernate/Formats.cs
@@ -42,7 +42,7 @@ public static class Formats
public const string OneOverK0 = "0.####";
public const string Percent = "0%";
public const string PEAK_SCORE = "0.####";
-
+ public const string Integer = "0";
public const string IonMobility = "0.###";
public const string CCS = "0.##";
public const string Skewness = "0.###";
diff --git a/pwiz_tools/Skyline/Test/Quantification/CalibrationCurveFitterTest.cs b/pwiz_tools/Skyline/Test/Quantification/CalibrationCurveFitterTest.cs
index 87eaed774b9..80cd0158a1c 100644
--- a/pwiz_tools/Skyline/Test/Quantification/CalibrationCurveFitterTest.cs
+++ b/pwiz_tools/Skyline/Test/Quantification/CalibrationCurveFitterTest.cs
@@ -96,6 +96,9 @@ public void TestMultipointExternalCalibrationWithoutNormalization()
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.IsNotNull(metrics.Slope);
Assert.IsNotNull(metrics.RSquared);
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(2, metrics.FittedParameters);
+ Assert.IsNotNull(metrics.RelativeStandardError);
double expectedConcentration = calibrationCurve.GetX(expectedY).Value;
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -138,6 +141,9 @@ public void TestMultipointExternalCalibrationWithoutIsConcentration()
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.IsNotNull(metrics.Slope);
Assert.IsNotNull(metrics.RSquared);
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(2, metrics.FittedParameters);
+ Assert.IsNotNull(metrics.RelativeStandardError);
double expectedConcentration = calibrationCurve.GetX(expectedY).Value;
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -183,8 +189,11 @@ public void TestMultipointExternalCalibrationWithIsConcentration()
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.IsNotNull(metrics.Slope);
Assert.IsNotNull(metrics.RSquared);
- double expectedConcentration = calibrationCurve.GetX(expectedY).Value*internalStandardConcentration;
- Assert.AreEqual(expectedConcentration/internalStandardConcentration,
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(2, metrics.FittedParameters);
+ Assert.IsNotNull(metrics.RelativeStandardError);
+ double expectedConcentration = calibrationCurve.GetX(expectedY).Value * internalStandardConcentration;
+ Assert.AreEqual(expectedConcentration / internalStandardConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedConcentration(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -224,6 +233,9 @@ public void TestSinglePointExternalCalibrationWithoutNormalization()
var calibrationCurve = curveFitter.GetCalibrationCurve();
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.AreEqual(1, metrics.PointCount);
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(1, metrics.FittedParameters);
+ Assert.IsNull(metrics.RelativeStandardError); // deg freedom becomes 0 with a single point and we return null
var expectedConcentration = expectedY / metrics.Slope.Value;
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -269,6 +281,9 @@ public void TestSinglePointExternalCalibrationWithoutIsConcentration()
Assert.AreEqual(expectedY, actualY.Value, epsilon, msg);
var calibrationCurve = curveFitter.GetCalibrationCurve();
var metrics = curveFitter.GetCalibrationCurveMetrics();
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(1, metrics.FittedParameters);
+ Assert.IsNull(metrics.RelativeStandardError);
var expectedConcentration = expectedY / metrics.Slope.Value;
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -302,7 +317,7 @@ public void TestSinglePointExternalCalibrationWithIsConcentration()
PeptideDocNode peptide = protein.Peptides.First();
peptide = peptide.ChangeInternalStandardConcentration(internalStandardConcentration);
CalibrationCurveFitter curveFitter = CalibrationCurveFitter.GetCalibrationCurveFitter(srmDocument, protein, peptide);
- Assert.AreEqual(CalibrationCurveFitter.ConcentrationRatioText(IsotopeLabelType.light, IsotopeLabelType.heavy),
+ Assert.AreEqual(CalibrationCurveFitter.ConcentrationRatioText(IsotopeLabelType.light, IsotopeLabelType.heavy),
curveFitter.GetXAxisTitle());
Assert.AreEqual(CalibrationCurveFitter.PeakAreaRatioText(IsotopeLabelType.light, IsotopeLabelType.heavy), curveFitter.GetYAxisTitle());
var chromatograms = srmDocument.Settings.MeasuredResults.Chromatograms;
@@ -316,8 +331,11 @@ public void TestSinglePointExternalCalibrationWithIsConcentration()
var calibrationCurve = curveFitter.GetCalibrationCurve();
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.AreEqual(1, metrics.PointCount);
- var expectedConcentration = expectedY*internalStandardConcentration/ metrics.Slope.Value;
- Assert.AreEqual(expectedConcentration/internalStandardConcentration,
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(1, metrics.FittedParameters);
+ Assert.IsNull(metrics.RelativeStandardError);
+ var expectedConcentration = expectedY * internalStandardConcentration / metrics.Slope.Value;
+ Assert.AreEqual(expectedConcentration / internalStandardConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
Assert.AreEqual(expectedConcentration,
curveFitter.GetCalculatedConcentration(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
@@ -325,7 +343,7 @@ public void TestSinglePointExternalCalibrationWithIsConcentration()
if (Equals(chromatogramSet.SampleType, SampleType.STANDARD) && chromatogramSet.AnalyteConcentration.HasValue)
{
// Since there was only one standard, the regression line goes exactly through this sample.
- Assert.AreEqual(expectedConcentration, chromatogramSet.AnalyteConcentration.Value*peptide.ConcentrationMultiplier.GetValueOrDefault(1.0), epsilon);
+ Assert.AreEqual(expectedConcentration, chromatogramSet.AnalyteConcentration.Value * peptide.ConcentrationMultiplier.GetValueOrDefault(1.0), epsilon);
}
}
}
@@ -345,16 +363,16 @@ public void TestDilutionFactor()
.Select(c => c.AnalyteConcentration.HasValue ? c : c.ChangeAnalyteConcentration(10)).ToList()));
var baseCurveFitter = CalibrationCurveFitter.GetCalibrationCurveFitter(baseDocument,
baseDocument.MoleculeGroups.First(), baseDocument.Molecules.First());
- var baseCurve = (CalibrationCurve.Linear) baseCurveFitter.GetCalibrationCurve();
+ var baseCurve = (CalibrationCurve.Linear)baseCurveFitter.GetCalibrationCurve();
// Set the dilution factor of each external standard to 2.0, and each unknown to 3.0
var docWithDilutionFactor = baseDocument.ChangeMeasuredResults(
baseDocument.MeasuredResults.ChangeChromatograms(baseDocument.MeasuredResults.Chromatograms.Select(
- chrom => Equals(chrom.SampleType, SampleType.STANDARD) ? chrom.ChangeDilutionFactor(2.0) :
+ chrom => Equals(chrom.SampleType, SampleType.STANDARD) ? chrom.ChangeDilutionFactor(2.0) :
chrom.ChangeDilutionFactor(3.0)).ToArray()));
var dilutionFactorCurveFitter = CalibrationCurveFitter.GetCalibrationCurveFitter(
docWithDilutionFactor, docWithDilutionFactor.MoleculeGroups.First(),
docWithDilutionFactor.Molecules.First());
- var dilutionFactorCurve = (CalibrationCurve.Linear) dilutionFactorCurveFitter.GetCalibrationCurve();
+ var dilutionFactorCurve = (CalibrationCurve.Linear)dilutionFactorCurveFitter.GetCalibrationCurve();
Assert.AreEqual(2.0 * baseCurve.Slope, dilutionFactorCurve.Slope);
Assert.AreEqual(baseCurve.Intercept, dilutionFactorCurve.Intercept);
for (int replicateIndex = 0; replicateIndex < baseDocument.MeasuredResults.Chromatograms.Count; replicateIndex++)
@@ -423,6 +441,9 @@ public void TestInternalCalibration()
var metrics = curveFitter.GetCalibrationCurveMetrics();
Assert.AreEqual(1 / internalStandardConcentration, metrics.Slope);
Assert.IsNull(metrics.RSquared);
+ Assert.IsNotNull(metrics.FittedParameters);
+ Assert.AreEqual(metrics.FittedParameters, 1);
+ Assert.IsNull(metrics.RelativeStandardError);
Assert.AreEqual(expectedY * internalStandardConcentration,
curveFitter.GetCalculatedXValue(calibrationCurve, iReplicate).GetValueOrDefault(double.NaN), epsilon, msg);
Assert.AreEqual(expectedY * internalStandardConcentration,
@@ -475,13 +496,13 @@ private SrmDocument ChangeQuantificationSettings(SrmDocument srmDocument, Quanti
private SrmDocument LoadTestDocument()
{
using (var stream =
- typeof (CalibrationCurveFitterTest).Assembly.GetManifestResourceStream(
- typeof (CalibrationCurveFitterTest),
+ typeof(CalibrationCurveFitterTest).Assembly.GetManifestResourceStream(
+ typeof(CalibrationCurveFitterTest),
"CalibrationCurveFitterTest.sky"))
{
Assert.IsNotNull(stream);
- var serializer = new XmlSerializer(typeof (SrmDocument));
- return (SrmDocument) serializer.Deserialize(stream);
+ var serializer = new XmlSerializer(typeof(SrmDocument));
+ return (SrmDocument)serializer.Deserialize(stream);
}
}
}