Esempio n. 1
0
 private void RelativeElutionTime(TracerFormula tracerFormulaStd, TracerFormula tracerFormula, out int eluteBefore, out int eluteAfter)
 {
     eluteBefore = eluteAfter = 0;
     foreach (var tracerDef in PeptideAnalysis.Workspace.GetTracerDefs())
     {
         int diff = tracerFormula.GetElementCount(tracerDef.Name) - tracerFormulaStd.GetElementCount(tracerDef.Name);
         if (diff == 0)
         {
             continue;
         }
         if (tracerDef.IsotopesEluteEarlier)
         {
             if (diff > 0)
             {
                 eluteBefore += diff;
             }
             else
             {
                 eluteAfter -= diff;
             }
         }
         if (tracerDef.IsotopesEluteLater)
         {
             if (diff > 0)
             {
                 eluteAfter += diff;
             }
             else
             {
                 eluteBefore -= diff;
             }
         }
     }
 }
Esempio n. 2
0
        private LinearRegression GetLinearRegression(TracerFormula targetTracerFormula, double startTime, double endTime)
        {
            var baseStats   = new Statistics(GetBaseValues());
            var targetStats = new Statistics(GetValues(targetTracerFormula, startTime, endTime));

            return(Statistics.LinearRegressionWithErrorsInBothCoordinates(baseStats, targetStats));
        }
Esempio n. 3
0
        public Peak?GetPeak(TracerFormula tracerFormula)
        {
            Peak peak;

            if (tracerFormula == null || !_peaks.TryGetValue(tracerFormula, out peak))
            {
                return(null);
            }
            return(peak);
        }
Esempio n. 4
0
        private void MakeBasePeak(TracerFormula tracerFormula, double startTime, double endTime)
        {
            var result = MakePeak(tracerFormula, startTime, endTime);

            result.Intercept        = 0;
            result.RatioToBase      = 1;
            result.RatioToBaseError = 0;
            result.Correlation      = 1;
            BasePeakKey             = tracerFormula;
            _peaks[tracerFormula]   = result;
        }
        public double GetMaxIntensity(TracerFormula tracerFormula, int startIndex, int endIndex)
        {
            var    points = Points[tracerFormula];
            double result = 0;

            for (int i = startIndex; i <= endIndex; i++)
            {
                result = Math.Max(result, points[i]);
            }
            return(result);
        }
Esempio n. 6
0
        private void MakeSecondaryPeak(TracerFormula tracerFormula, double startTime, double endTime)
        {
            var result           = MakePeak(tracerFormula, startTime, endTime);
            var linearRegression = GetLinearRegression(tracerFormula, startTime, endTime);

            result.Intercept        = linearRegression.Intercept;
            result.RatioToBase      = linearRegression.Slope;
            result.RatioToBaseError = linearRegression.SlopeError;
            result.Correlation      = linearRegression.Correlation;
            _peaks[tracerFormula]   = result;
        }
Esempio n. 7
0
        private Peak MakePeak(TracerFormula tracerFormula, double startTime, double endTime)
        {
            var result = new Peak
            {
                StartTime     = startTime,
                EndTime       = endTime,
                TotalArea     = GetTracerChromatograms().GetArea(tracerFormula, startTime, endTime),
                TracerPercent = PeptideFileAnalysis.TurnoverCalculator.GetTracerPercent(tracerFormula),
                Background    = GetTracerChromatograms().GetBackground(tracerFormula, startTime, endTime),
            };

            return(result);
        }
Esempio n. 8
0
 private bool IsDisplayed(TracerFormula tracerFormula)
 {
     if (dataGridView1.SelectedRows.Count == 0)
     {
         return(true);
     }
     for (int i = 0; i < dataGridView1.Rows.Count; i++)
     {
         var row = dataGridView1.Rows[i];
         if (row.Selected && tracerFormula.Equals(row.Tag))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 9
0
        public CalculatedPeaks AutoSizePeak(TracerFormula tracerFormula, AdjustPeaksMode adjustPeaksMode)
        {
            if (tracerFormula.Equals(BasePeakKey))
            {
                return(this);
            }
            var result = new CalculatedPeaks(PeptideFileAnalysis)
            {
                AutoFindPeak = false,
            };
            var oldBasePeak = _peaks[BasePeakKey];

            result.MakeBasePeak(BasePeakKey, oldBasePeak.StartTime, oldBasePeak.EndTime);
            foreach (var entry in _peaks)
            {
                if (entry.Key.Equals(BasePeakKey))
                {
                    continue;
                }
                Peak?newPeak = null;
                if (entry.Key.Equals(tracerFormula))
                {
                    double width = oldBasePeak.EndTime - oldBasePeak.StartTime;
                    if (adjustPeaksMode == AdjustPeaksMode.Full)
                    {
                        newPeak = result.FindMatchingPeak(tracerFormula);
                    }
                    else if (adjustPeaksMode == AdjustPeaksMode.Overlapping)
                    {
                        newPeak = result.FindMatchingPeak(tracerFormula, entry.Value.StartTime - width, entry.Value.EndTime + width);
                    }
                    else if (adjustPeaksMode == AdjustPeaksMode.Narrow)
                    {
                        newPeak = result.FindMatchingPeak(tracerFormula,
                                                          Math.Min(entry.Value.StartTime, entry.Value.EndTime - width),
                                                          Math.Max(entry.Value.EndTime, entry.Value.StartTime + width));
                    }
                }
                if (newPeak == null)
                {
                    result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
                }
            }
            result.FinishCalculation();
            return(result);
        }
Esempio n. 10
0
        private Peak FindMatchingPeak(TracerFormula targetTracerFormula, double minStartTime, double maxEndTime)
        {
            var    tracerChromatograms = GetTracerChromatograms();
            var    basePeak            = _peaks[BasePeakKey];
            double width               = basePeak.EndTime - basePeak.StartTime;
            var    linearRegressions   = new List <LinearRegressionEntry>();
            double minCorrelationCoeff = Workspace.GetMinCorrelationCoefficient();

            for (int offset = 0; offset < tracerChromatograms.Times.Count; offset++)
            {
                double startTime = tracerChromatograms.Times[offset];
                if (startTime < minStartTime)
                {
                    continue;
                }
                double endTime = startTime + width;
                if (endTime > tracerChromatograms.Times[tracerChromatograms.Times.Count - 1] || endTime > maxEndTime)
                {
                    break;
                }

                var linearRegression = GetLinearRegression(targetTracerFormula, startTime, endTime);
                linearRegressions.Add(new LinearRegressionEntry(startTime, endTime, linearRegression));
            }
            var localMaxima = new List <LinearRegressionEntry>(
                linearRegressions.Where(
                    (e, i) => (i == 0 || e.Correlation >= linearRegressions[i - 1].Correlation)
                    &&
                    (i == linearRegressions.Count - 1 ||
                     e.Correlation > linearRegressions[i + 1].Correlation)));

            localMaxima.Sort((e1, e2) => e1.GetDistanceTo(basePeak).CompareTo(e2.GetDistanceTo(basePeak)));
            var bestEntry = localMaxima.FirstOrDefault(e => e.Correlation > minCorrelationCoeff);

            if (bestEntry == null)
            {
                localMaxima.Sort((e1, e2) => e1.Correlation.CompareTo(e2.Correlation));
                bestEntry = localMaxima[localMaxima.Count - 1];
            }

            MakeSecondaryPeak(targetTracerFormula, bestEntry.StartTime, bestEntry.EndTime);
            return(_peaks[targetTracerFormula]);
        }
Esempio n. 11
0
        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 double GetArea(TracerFormula tracerFormula, double startTime, double endTime)
        {
            double result     = 0;
            int    startIndex = ChromatogramSet.IndexFromTime(startTime);
            int    endIndex   = ChromatogramSet.IndexFromTime(endTime);

            for (int i = startIndex; i <= endIndex; i++)
            {
                int binStartIndex = Math.Max(i - 1, 0);
                int binEndIndex   = Math.Min(i + 1, Times.Count - 1);
                if (binStartIndex == binEndIndex)
                {
                    continue;
                }
                double width = (Times[binEndIndex] - Times[binStartIndex]) / (binEndIndex - binStartIndex);
                result += Points[tracerFormula][i] * width;
            }
            return(result);
        }
Esempio n. 13
0
        private Peak FindMatchingPeak(TracerFormula targetTracerFormula)
        {
            var    basePeak = _peaks[BasePeakKey];
            double retentionTimeShift = Workspace.GetMaxIsotopeRetentionTimeShift();
            double minStartTime = basePeak.StartTime;
            double maxEndTime = basePeak.EndTime;
            int    eluteBefore, eluteAfter;

            RelativeElutionTime(BasePeakKey, targetTracerFormula, out eluteBefore, out eluteAfter);
            if (eluteBefore > 0)
            {
                minStartTime -= retentionTimeShift;
            }
            if (eluteAfter > 0)
            {
                maxEndTime += retentionTimeShift;
            }
            return(FindMatchingPeak(targetTracerFormula, minStartTime, maxEndTime));
        }
Esempio n. 14
0
        public double[] GetValues(TracerFormula tracerFormula, double startTime, double endTime)
        {
            var tracerChromatograms = GetTracerChromatograms();
            var chromatograms       = tracerChromatograms.ChromatogramSet;
            var basePeak            = _peaks[BasePeakKey];
            int baseStartIndex      = chromatograms.IndexFromTime(basePeak.StartTime);
            int baseEndIndex        = chromatograms.IndexFromTime(basePeak.EndTime);

            double[] points    = new double[baseEndIndex - baseStartIndex + 1];
            var      allPoints = tracerChromatograms.Points[tracerFormula];

            for (int i = baseStartIndex; i <= baseEndIndex; i++)
            {
                double baseTime = chromatograms.Times[i];
                double time     = (startTime * (baseTime - basePeak.StartTime) + endTime * (basePeak.EndTime - baseTime))
                                  / (basePeak.EndTime - basePeak.StartTime);
                double prevTime;
                int    index    = chromatograms.IndexFromTime(time);
                double nextTime = chromatograms.Times[index];
                if (index > 0)
                {
                    prevTime = chromatograms.Times[index - 1];
                }
                else
                {
                    prevTime = nextTime;
                }
                double value;
                if (nextTime < time || prevTime >= nextTime)
                {
                    value = allPoints[index];
                }
                else
                {
                    double nextValue = allPoints[index];
                    double prevValue = allPoints[index - 1];
                    value = (nextValue * (time - prevTime) + prevValue * (nextTime - time)) / (nextTime - prevTime);
                }
                points[i - baseStartIndex] = value;
            }
            return(points);
        }
Esempio n. 15
0
        public CalculatedPeaks ChangeBasePeak(TracerFormula baseTracerFormula)
        {
            CalculatedPeaks result = new CalculatedPeaks(PeptideFileAnalysis)
            {
                AutoFindPeak = false,
            };
            var basePeak = _peaks[baseTracerFormula];

            result.MakeBasePeak(baseTracerFormula, basePeak.StartTime, basePeak.EndTime);
            foreach (var entry in _peaks)
            {
                if (entry.Key.Equals(baseTracerFormula))
                {
                    continue;
                }
                result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
            }
            result.FinishCalculation();
            return(result);
        }
Esempio n. 16
0
        public CalculatedPeaks ChangeTime(TracerFormula tracerFormula, double newStartTime, double newEndTime)
        {
            CalculatedPeaks result = new CalculatedPeaks(PeptideFileAnalysis)
            {
                AutoFindPeak = false,
            };
            Peak oldBasePeak = _peaks[BasePeakKey];
            bool isBasePeak;

            if (tracerFormula.Equals(BasePeakKey))
            {
                result.MakeBasePeak(BasePeakKey, newStartTime, newEndTime);
                isBasePeak = true;
            }
            else
            {
                result.MakeBasePeak(BasePeakKey, oldBasePeak.StartTime,
                                    oldBasePeak.EndTime);
                isBasePeak = false;
            }
            foreach (var entry in _peaks)
            {
                if (entry.Key.Equals(tracerFormula))
                {
                    if (isBasePeak)
                    {
                        continue;
                    }
                    result.MakeSecondaryPeak(tracerFormula, newStartTime, newEndTime);
                }
                else
                {
                    result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
                }
            }
            result.FinishCalculation();
            return(result);
        }
Esempio n. 17
0
 public double[] GetValues(TracerFormula tracerFormula, double startTime, double endTime)
 {
     var tracerChromatograms = GetTracerChromatograms();
     var chromatograms = tracerChromatograms.ChromatogramSet;
     var basePeak = _peaks[BasePeakKey];
     int baseStartIndex = chromatograms.IndexFromTime(basePeak.StartTime);
     int baseEndIndex = chromatograms.IndexFromTime(basePeak.EndTime);
     double[] points = new double[baseEndIndex - baseStartIndex + 1];
     var allPoints = tracerChromatograms.Points[tracerFormula];
     for (int i = baseStartIndex; i <= baseEndIndex; i++)
     {
         double baseTime = chromatograms.Times[i];
         double time = (startTime * (baseTime - basePeak.StartTime) + endTime * (basePeak.EndTime - baseTime))
             / (basePeak.EndTime - basePeak.StartTime);
         double prevTime;
         int index = chromatograms.IndexFromTime(time);
         double nextTime = chromatograms.Times[index];
         if (index > 0)
         {
             prevTime = chromatograms.Times[index - 1];
         }
         else
         {
             prevTime = nextTime;
         }
         double value;
         if (nextTime < time || prevTime >= nextTime)
         {
             value = allPoints[index];
         }
         else
         {
             double nextValue = allPoints[index];
             double prevValue = allPoints[index - 1];
             value = (nextValue*(time - prevTime) + prevValue*(nextTime - time))/(nextTime - prevTime);
         }
         points[i - baseStartIndex] = value;
     }
     return points;
 }
Esempio n. 18
0
 public Peak? GetPeak(TracerFormula tracerFormula)
 {
     Peak peak;
     if (tracerFormula == null || !_peaks.TryGetValue(tracerFormula, out peak))
     {
         return null;
     }
     return peak;
 }
Esempio n. 19
0
 public CalculatedPeaks ChangeTime(TracerFormula tracerFormula, double newStartTime, double newEndTime)
 {
     CalculatedPeaks result = new CalculatedPeaks(PeptideFileAnalysis)
                        {
                            AutoFindPeak = false,
                        };
     Peak oldBasePeak = _peaks[BasePeakKey];
     bool isBasePeak;
     if (tracerFormula.Equals(BasePeakKey))
     {
         result.MakeBasePeak(BasePeakKey, newStartTime, newEndTime);
         isBasePeak = true;
     }
     else
     {
         result.MakeBasePeak(BasePeakKey, oldBasePeak.StartTime,
                                                        oldBasePeak.EndTime);
         isBasePeak = false;
     }
     foreach (var entry in _peaks)
     {
         if (entry.Key.Equals(tracerFormula))
         {
             if (isBasePeak)
             {
                 continue;
             }
             result.MakeSecondaryPeak(tracerFormula, newStartTime, newEndTime);
         }
         else
         {
             result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
         }
     }
     result.FinishCalculation();
     return result;
 }
Esempio n. 20
0
 public CalculatedPeaks ChangeBasePeak(TracerFormula baseTracerFormula)
 {
     CalculatedPeaks result = new CalculatedPeaks(PeptideFileAnalysis)
                        {
                            AutoFindPeak = false,
                        };
     var basePeak = _peaks[baseTracerFormula];
     result.MakeBasePeak(baseTracerFormula, basePeak.StartTime, basePeak.EndTime);
     foreach (var entry in _peaks)
     {
         if (entry.Key.Equals(baseTracerFormula))
         {
             continue;
         }
         result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
     }
     result.FinishCalculation();
     return result;
 }
Esempio n. 21
0
 public CalculatedPeaks AutoSizePeak(TracerFormula tracerFormula, AdjustPeaksMode adjustPeaksMode)
 {
     if (tracerFormula.Equals(BasePeakKey))
     {
         return this;
     }
     var result = new CalculatedPeaks(PeptideFileAnalysis)
                      {
                          AutoFindPeak = false,
                      };
     var oldBasePeak = _peaks[BasePeakKey];
     result.MakeBasePeak(BasePeakKey, oldBasePeak.StartTime, oldBasePeak.EndTime);
     foreach (var entry in _peaks)
     {
         if (entry.Key.Equals(BasePeakKey))
         {
             continue;
         }
         Peak? newPeak = null;
         if (entry.Key.Equals(tracerFormula))
         {
             double width = oldBasePeak.EndTime - oldBasePeak.StartTime;
             if (adjustPeaksMode == AdjustPeaksMode.Full)
             {
                 newPeak = result.FindMatchingPeak(tracerFormula);
             }
             else if (adjustPeaksMode == AdjustPeaksMode.Overlapping)
             {
                 newPeak = result.FindMatchingPeak(tracerFormula, entry.Value.StartTime - width, entry.Value.EndTime + width);
             }
             else if (adjustPeaksMode == AdjustPeaksMode.Narrow)
             {
                 newPeak = result.FindMatchingPeak(tracerFormula,
                                                   Math.Min(entry.Value.StartTime, entry.Value.EndTime - width),
                                                   Math.Max(entry.Value.EndTime, entry.Value.StartTime + width));
             }
         }
         if (newPeak == null)
         {
             result.MakeSecondaryPeak(entry.Key, entry.Value.StartTime, entry.Value.EndTime);
         }
     }
     result.FinishCalculation();
     return result;
 }
Esempio n. 22
0
 private void RelativeElutionTime(TracerFormula tracerFormulaStd, TracerFormula tracerFormula, out int eluteBefore, out int eluteAfter)
 {
     eluteBefore = eluteAfter = 0;
     foreach (var tracerDef in PeptideAnalysis.Workspace.GetTracerDefs())
     {
         int diff = tracerFormula.GetElementCount(tracerDef.Name) - tracerFormulaStd.GetElementCount(tracerDef.Name);
         if (diff == 0)
         {
             continue;
         }
         if (tracerDef.IsotopesEluteEarlier)
         {
             if (diff > 0)
             {
                 eluteBefore+=diff;
             }
             else
             {
                 eluteAfter-=diff;
             }
         }
         if (tracerDef.IsotopesEluteLater)
         {
             if (diff > 0)
             {
                 eluteAfter+=diff;
             }
             else
             {
                 eluteBefore-=diff;
             }
         }
     }
 }
Esempio n. 23
0
 private Peak MakePeak(TracerFormula tracerFormula, double startTime, double endTime)
 {
     var result = new Peak
                      {
                          StartTime = startTime,
                          EndTime = endTime,
                          TotalArea = GetTracerChromatograms().GetArea(tracerFormula, startTime, endTime),
                          TracerPercent = PeptideFileAnalysis.TurnoverCalculator.GetTracerPercent(tracerFormula),
                          Background = GetTracerChromatograms().GetBackground(tracerFormula, startTime, endTime),
                      };
     return result;
 }
Esempio n. 24
0
 private LinearRegression GetLinearRegression(TracerFormula targetTracerFormula, double startTime, double endTime)
 {
     var baseStats = new Statistics(GetBaseValues());
     var targetStats = new Statistics(GetValues(targetTracerFormula, startTime, endTime));
     return Statistics.LinearRegressionWithErrorsInBothCoordinates(baseStats, targetStats);
 }
Esempio n. 25
0
 private Peak FindMatchingPeak(TracerFormula targetTracerFormula)
 {
     var basePeak = _peaks[BasePeakKey];
     double retentionTimeShift = Workspace.GetMaxIsotopeRetentionTimeShift();
     double minStartTime = basePeak.StartTime;
     double maxEndTime = basePeak.EndTime;
     int eluteBefore, eluteAfter;
     RelativeElutionTime(BasePeakKey, targetTracerFormula, out eluteBefore, out eluteAfter);
     if (eluteBefore > 0)
     {
         minStartTime -= retentionTimeShift;
     }
     if (eluteAfter > 0)
     {
         maxEndTime += retentionTimeShift;
     }
     return FindMatchingPeak(targetTracerFormula, minStartTime, maxEndTime);
 }
Esempio n. 26
0
 public double GetMaxIntensity(TracerFormula tracerFormula, int startIndex, int endIndex)
 {
     var points = Points[tracerFormula];
     double result = 0;
     for (int i = startIndex; i <= endIndex; i++)
     {
         result = Math.Max(result, points[i]);
     }
     return result;
 }
Esempio n. 27
0
 public double[] GetValues(DbPeak dbPeak)
 {
     return(GetValues(TracerFormula.Parse(dbPeak.Name), dbPeak.StartTime, dbPeak.EndTime));
 }
Esempio n. 28
0
 public double GetBackground(TracerFormula tracerFormula, double startTime, double endTime)
 {
     return 0;
 }
Esempio n. 29
0
        private Peak FindMatchingPeak(TracerFormula targetTracerFormula, double minStartTime, double maxEndTime)
        {
            var tracerChromatograms = GetTracerChromatograms();
            var basePeak = _peaks[BasePeakKey];
            double width = basePeak.EndTime - basePeak.StartTime;
            var linearRegressions = new List<LinearRegressionEntry>();
            double minCorrelationCoeff = Workspace.GetMinCorrelationCoefficient();
            for (int offset = 0; offset < tracerChromatograms.Times.Count; offset ++)
            {
                double startTime = tracerChromatograms.Times[offset];
                if (startTime < minStartTime)
                {
                    continue;
                }
                double endTime = startTime + width;
                if (endTime > tracerChromatograms.Times[tracerChromatograms.Times.Count - 1] || endTime > maxEndTime)
                {
                    break;
                }

                var linearRegression = GetLinearRegression(targetTracerFormula, startTime, endTime);
                linearRegressions.Add(new LinearRegressionEntry(startTime, endTime, linearRegression));
            }
            var localMaxima = new List<LinearRegressionEntry>(
                linearRegressions.Where(
                    (e, i) => (i == 0 || e.Correlation >= linearRegressions[i - 1].Correlation)
                              &&
                              (i == linearRegressions.Count - 1 ||
                               e.Correlation > linearRegressions[i + 1].Correlation)));
            localMaxima.Sort((e1,e2)=>e1.GetDistanceTo(basePeak).CompareTo(e2.GetDistanceTo(basePeak)));
            var bestEntry = localMaxima.FirstOrDefault(e => e.Correlation > minCorrelationCoeff);
            if (bestEntry == null)
            {
                localMaxima.Sort((e1,e2)=>e1.Correlation.CompareTo(e2.Correlation));
                bestEntry = localMaxima[localMaxima.Count - 1];
            }

            MakeSecondaryPeak(targetTracerFormula, bestEntry.StartTime, bestEntry.EndTime);
            return _peaks[targetTracerFormula];
        }
Esempio n. 30
0
 public double GetArea(TracerFormula tracerFormula, double startTime, double endTime)
 {
     double result = 0;
     int startIndex = ChromatogramSet.IndexFromTime(startTime);
     int endIndex = ChromatogramSet.IndexFromTime(endTime);
     for (int i = startIndex; i<= endIndex; i++)
     {
         int binStartIndex = Math.Max(i - 1, 0);
         int binEndIndex = Math.Min(i + 1, Times.Count - 1);
         if (binStartIndex == binEndIndex)
         {
             continue;
         }
         double width = (Times[binEndIndex] - Times[binStartIndex])/(binEndIndex - binStartIndex);
         result += Points[tracerFormula][i] * width;
     }
     return result;
 }
Esempio n. 31
0
 private void MakeBasePeak(TracerFormula tracerFormula, double startTime, double endTime)
 {
     var result = MakePeak(tracerFormula, startTime, endTime);
     result.Intercept = 0;
     result.RatioToBase = 1;
     result.RatioToBaseError = 0;
     result.Correlation = 1;
     BasePeakKey = tracerFormula;
     _peaks[tracerFormula] = result;
 }
 public double GetBackground(TracerFormula tracerFormula, double startTime, double endTime)
 {
     return(0);
 }
Esempio n. 33
0
 private void MakeSecondaryPeak(TracerFormula tracerFormula, double startTime, double endTime)
 {
     var result = MakePeak(tracerFormula, startTime, endTime);
     var linearRegression = GetLinearRegression(tracerFormula, startTime, endTime);
     result.Intercept = linearRegression.Intercept;
     result.RatioToBase = linearRegression.Slope;
     result.RatioToBaseError = linearRegression.SlopeError;
     result.Correlation = linearRegression.Correlation;
     _peaks[tracerFormula] = result;
 }
 private bool IsDisplayed(TracerFormula tracerFormula)
 {
     if (dataGridView1.SelectedRows.Count == 0)
     {
         return true;
     }
     for (int i = 0; i < dataGridView1.Rows.Count; i++)
     {
         var row = dataGridView1.Rows[i];
         if (row.Selected && tracerFormula.Equals(row.Tag))
         {
             return true;
         }
     }
     return false;
 }
Esempio n. 35
0
        private void UpdateGraph()
        {
            if (_inUpdateGraph)
            {
                return;
            }
            try
            {
                _inUpdateGraph = true;
                _msGraphControl.GraphPane.GraphObjList.Clear();
                _msGraphControl.GraphPane.CurveList.Clear();
                dataGridView1.Rows.Clear();

                int charge;
                try
                {
                    charge = Convert.ToInt32(tbxCharge.Text);
                    tbxCharge.BackColor = Color.White;
                }
                catch
                {
                    charge = 0;
                    tbxCharge.BackColor = Color.Red;
                }
                double massResolution;
                try
                {
                    massResolution = double.Parse(tbxMassResolution.Text);
                    tbxMassResolution.BackColor = Color.White;
                }
                catch
                {
                    tbxMassResolution.BackColor = Color.Red;
                    massResolution = .01;
                }

                var sequence = tbxSequence.Text;
                MassDistribution spectrum;
                if (string.IsNullOrEmpty(sequence))
                {
                    var formula  = tbxFormula.Text;
                    var molecule = Molecule.Parse(formula);
                    if (molecule.Values.Sum() > 10000000)
                    {
                        tbxFormula.BackColor = Color.Red;
                        return;
                    }
                    try
                    {
                        spectrum             = Workspace.GetAminoAcidFormulas().GetMassDistribution(molecule, charge);
                        tbxFormula.BackColor = Color.White;
                    }
                    catch
                    {
                        tbxFormula.BackColor = Color.Red;
                        return;
                    }
                }
                else
                {
                    tbxFormula.Text = Workspace.GetAminoAcidFormulas().GetFormula(sequence).ToString();
                    var turnoverCalculator = new TurnoverCalculator(Workspace, sequence);
                    var aminoAcidFormulas  = Workspace.GetAminoAcidFormulasWithTracers();
                    aminoAcidFormulas = aminoAcidFormulas.SetMassResolution(massResolution);
                    try
                    {
                        if (cbxTracerPercents.Checked)
                        {
                            var tracerPercentFormula = TracerPercentFormula.Parse(tbxTracerFormula.Text);
                            spectrum = turnoverCalculator.GetAminoAcidFormulas(tracerPercentFormula)
                                       .GetMassDistribution(sequence, charge);
                        }
                        else
                        {
                            var tracerFormula = TracerFormula.Parse(tbxTracerFormula.Text);
                            spectrum = aminoAcidFormulas.GetMassDistribution(
                                turnoverCalculator.MoleculeFromTracerFormula(tracerFormula), charge);
                            double massShift = aminoAcidFormulas.GetMassShift(sequence);
                            if (charge > 0)
                            {
                                massShift /= charge;
                            }
                            spectrum = spectrum.OffsetAndDivide(massShift, 1);
                        }
                        tbxTracerFormula.BackColor = Color.White;
                    }
                    catch
                    {
                        tbxTracerFormula.BackColor = Color.Red;
                        spectrum = aminoAcidFormulas.GetMassDistribution(sequence, charge);
                    }
                }
                if (spectrum == null)
                {
                    return;
                }
                var curveItem = _msGraphControl.AddGraphItem(_msGraphControl.GraphPane, new GraphItem
                {
                    Title  = "Intensity",
                    Color  = Color.Black,
                    Points =
                        new PointPairList(
                            spectrum.Keys.
                            ToArray(),
                            spectrum.Values.
                            ToArray())
                });
                curveItem.Label.IsVisible = false;
                _msGraphControl.AxisChange();
                _msGraphControl.Invalidate();
                var entries = spectrum.ToArray();
                dataGridView1.Rows.Add(entries.Length);
                for (int i = 0; i < entries.Count(); i++)
                {
                    var row = dataGridView1.Rows[i];
                    row.Cells[colMass.Index].Value      = entries[i].Key;
                    row.Cells[colIntensity.Index].Value = entries[i].Value;
                }
            }
            finally
            {
                _inUpdateGraph = false;
            }
        }
Esempio n. 36
0
        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);
        }