public void Test58Percent() { var path = Path.Combine(TestContext.TestDir, Guid.NewGuid().ToString() + ".tpg"); var workspace = CreateWorkspace(path, TracerDef.GetD3LeuEnrichment()); var turnoverCalculator = new TurnoverCalculator(workspace, "LL"); var dict = new Dictionary<TracerFormula, double>(); // initialize the dictionary with 70% newly synthesized from 58% precursor pool dict.Add(TracerFormula.Parse("Tracer2"), Math.Pow(.58, 2) * .7); dict.Add(TracerFormula.Parse("Tracer1"), 2 * .58 * .42 * .7); dict.Add(TracerFormula.Empty, 1- dict.Values.Sum()); double turnover; double turnoverScore; IDictionary<TracerFormula, double> bestMatch; var precursorEnrichment = turnoverCalculator.ComputePrecursorEnrichmentAndTurnover(dict, out turnover, out turnoverScore, out bestMatch); Assert.AreEqual(.7, turnover); Assert.AreEqual(58, precursorEnrichment["Tracer"]); }
public void Test58Percent() { var path = Path.Combine(TestContext.TestDir, Guid.NewGuid().ToString() + ".tpg"); var workspace = CreateWorkspace(path, TracerDef.GetD3LeuEnrichment()); var turnoverCalculator = new TurnoverCalculator(workspace, "LL"); var dict = new Dictionary <TracerFormula, double>(); // initialize the dictionary with 70% newly synthesized from 58% precursor pool dict.Add(TracerFormula.Parse("Tracer2"), Math.Pow(.58, 2) * .7); dict.Add(TracerFormula.Parse("Tracer1"), 2 * .58 * .42 * .7); dict.Add(TracerFormula.Empty, 1 - dict.Values.Sum()); double turnover; double turnoverScore; IDictionary <TracerFormula, double> bestMatch; var precursorEnrichment = turnoverCalculator.ComputePrecursorEnrichmentAndTurnover(dict, out turnover, out turnoverScore, out bestMatch); Assert.AreEqual(.7, turnover); Assert.AreEqual(58, precursorEnrichment["Tracer"]); }
private void BtnGoOnClick(object sender, EventArgs e) { graphDetails.GraphPane.CurveList.Clear(); int pointCount = PointCount; double precursorPool = PrecursorPool; double turnover = Turnover; int labelCount = LabelCount; double noise = Noise; var points = new PointPairList(); var tracerDef = Workspace.GetTracerDefs().FirstOrDefault(td => td.AminoAcidSymbol.HasValue); if (tracerDef == null) { MessageBox.Show( "The simulation cannot be run because there is no amino acid tracer defined in this workspace"); return; } Debug.Assert(tracerDef.AminoAcidSymbol.HasValue); string peptide = new string(tracerDef.AminoAcidSymbol.Value, labelCount); var turnoverCalculator = new TurnoverCalculator(Workspace, peptide); var initialTracerPercents = TracerPercentFormula.Parse("").SetElementCount(tracerDef.Name, tracerDef.InitialApe); var newTracerPercents = TracerPercentFormula.Parse("").SetElementCount(tracerDef.Name, precursorPool); var initialDistribution = turnoverCalculator.GetDistribution(initialTracerPercents); var newDistribution = turnoverCalculator.GetDistribution(newTracerPercents); var currentMixture = Mix(initialDistribution, (100.0 - turnover) / 100, newDistribution, turnover / 100); var keys = new List <TracerFormula>(); for (int i = 0; i <= labelCount; i++) { keys.Add(TracerFormula.Parse("").SetElementCount(tracerDef.Name, i)); } var bestMatches = new List <IDictionary <TracerFormula, double> >(); var precursorEnrichments = new List <TracerPercentFormula>(); var observedResults = new List <IDictionary <TracerFormula, double> >(); while (points.Count < pointCount) { var noisyMixture = Perturb(keys, currentMixture, noise / 100); double calcTurnover; double calcTurnoverScore; double calcPrecursorPool; IDictionary <TracerFormula, double> bestMatch; var calcMixture = turnoverCalculator.ComputePrecursorEnrichmentAndTurnover(noisyMixture, out calcTurnover, out calcTurnoverScore, out bestMatch); if (calcMixture == null) { continue; } calcMixture.TryGetValue(tracerDef.Name, out calcPrecursorPool); points.Add(new PointPair(calcTurnover * 100, calcPrecursorPool)); bestMatches.Add(bestMatch); precursorEnrichments.Add(calcMixture); observedResults.Add(noisyMixture); } graphResults.GraphPane.CurveList.Clear(); graphResults.GraphPane.GraphObjList.Clear(); var lineItem = graphResults.GraphPane.AddCurve(null, points, Color.Black); lineItem.Line.IsVisible = false; graphResults.GraphPane.XAxis.Title.Text = "% newly synthesized"; graphResults.GraphPane.YAxis.Title.Text = "Precursor pool"; graphResults.GraphPane.AxisChange(); graphResults.Invalidate(); dataGridView.Rows.Clear(); var row = dataGridView.Rows[dataGridView.Rows.Add()]; row.Cells[colQuantity.Index].Value = "% newly synthesized"; var statsTurnover = new Statistics(points.Select(p => p.X).ToArray()); row.Cells[colMean.Index].Value = statsTurnover.Mean(); row.Cells[colMedian.Index].Value = statsTurnover.Median(); row.Cells[colStdDev.Index].Value = statsTurnover.StdDev(); row = dataGridView.Rows[dataGridView.Rows.Add()]; var statsPrecursorPool = new Statistics(points.Select(p => p.Y).ToArray()); row.Cells[colQuantity.Index].Value = "Precursor Pool"; row.Cells[colMean.Index].Value = statsPrecursorPool.Mean(); row.Cells[colMedian.Index].Value = statsPrecursorPool.Median(); row.Cells[colStdDev.Index].Value = statsPrecursorPool.StdDev(); _precursorEnrichmentsByPoint = points.Select(p => p.Y).ToArray(); _bestMatches = bestMatches; _observedResults = observedResults; _scatterPlotCurve = lineItem; _expected = currentMixture; _turnovers = points.Select(p => p.X).ToArray(); _tracerFormulas = keys; ShowResult(-1); }