示例#1
0
 public double GetTracerPercent(TracerPercentFormula tracerPercentFormula)
 {
     if (_traceeSymbols.Count == 0)
     {
         return(0);
     }
     return(tracerPercentFormula.Dictionary.Values.Sum() / _traceeSymbols.Count);
 }
示例#2
0
        public TracerPercentFormula ComputePrecursorEnrichmentAndTurnover(IDictionary <TracerFormula, double> peptideDistribution, out double turnover, out double turnoverScore, out IDictionary <TracerFormula, double> bestMatch)
        {
            if (peptideDistribution.Count < 3)
            {
                turnover      = 0;
                turnoverScore = 0;
                bestMatch     = null;
                return(null);
            }
            var tracerFormulaIndexes = new Dictionary <TracerFormula, int>();
            var observedPercentages  = new DenseVector(peptideDistribution.Count);

            foreach (var entry in peptideDistribution)
            {
                var tracerFormula = entry.Key;
                observedPercentages[tracerFormulaIndexes.Count] = entry.Value;
                tracerFormulaIndexes.Add(tracerFormula, tracerFormulaIndexes.Count);
            }
            var initialVector = DistributionToVector(GetDistribution(GetInitialTracerPercents()), tracerFormulaIndexes);

            bestMatch = null;
            TracerPercentFormula bestFormula = null;
            double bestScore               = 0;
            double bestTurnover            = 0;
            var    tracerPercentEnumerator = new TracerPercentEnumerator(_tracerDefs.Values);

            while (tracerPercentEnumerator.MoveNext())
            {
                var tracerPercents         = tracerPercentEnumerator.Current;
                var distribution           = GetDistribution(tracerPercents);
                var newlySynthesizedVector = DistributionToVector(distribution, tracerFormulaIndexes);
                var combination            = FindBestCombination(observedPercentages, initialVector, newlySynthesizedVector);
                if (combination == null)
                {
                    continue;
                }
                if (combination[0] < 0 || combination[1] < 0 || combination.Sum() <= 0)
                {
                    continue;
                }
                if (combination.Sum() <= 0)
                {
                    continue;
                }
                var resultVector = initialVector.Multiply(combination[0]).Add(newlySynthesizedVector.Multiply(combination[1]));
                var score        = Score(observedPercentages, resultVector);
                if (bestFormula == null || score > bestScore)
                {
                    bestFormula  = tracerPercents;
                    bestScore    = score;
                    bestTurnover = combination[1] / (combination[0] + combination[1]);
                    bestMatch    = tracerFormulaIndexes.ToDictionary(kv => kv.Key, kv => resultVector[kv.Value]);
                }
            }
            turnover      = bestTurnover;
            turnoverScore = bestScore;
            return(bestFormula);
        }
示例#3
0
        public Dictionary <TracerFormula, double> GetDistribution(TracerPercentFormula tracerPercents)
        {
            var tracerFormulaEnumerator = new TracerFormulaEnumerator(Sequence, _tracerDefs.Values);
            var result = new Dictionary <TracerFormula, double>();

            while (tracerFormulaEnumerator.MoveNext())
            {
                result.Add(tracerFormulaEnumerator.Current, ComputeProbability(tracerFormulaEnumerator, tracerPercents));
            }
            return(result);
        }
示例#4
0
        public AminoAcidFormulas GetAminoAcidFormulas(TracerPercentFormula tracerPercents)
        {
            var result = _aminoAcidFormulas;

            foreach (var entry in tracerPercents)
            {
                var tracerDef         = _tracerDefs[entry.Key];
                var isotopeAbundances = result.IsotopeAbundances;
                var massDistribution  = isotopeAbundances[tracerDef.TraceeSymbol];
                massDistribution  = massDistribution.Average(tracerDef.TracerMasses, entry.Value / 100.0);
                isotopeAbundances = isotopeAbundances.SetAbundances(tracerDef.TraceeSymbol, massDistribution);
                result            = result.SetIsotopeAbundances(isotopeAbundances);
            }
            return(result);
        }
示例#5
0
        private double ComputeProbability(TracerFormulaEnumerator tracerFormulaEnumerator, TracerPercentFormula tracerPercents)
        {
            var tracerFormula      = tracerFormulaEnumerator.Current;
            var tracerSymbolCounts = tracerFormulaEnumerator.GetTracerSymbolCounts();

            var traceePercents = tracerSymbolCounts.Keys.ToDictionary(s => s, s => 1.0);
            var result         = 1.0;

            foreach (var tracerDef in _tracerDefs.Values)
            {
                int    tracerTraceeCount = tracerSymbolCounts[tracerDef.TraceeSymbol];
                int    tracerCount       = tracerFormula.GetElementCount(tracerDef.Name);
                double probability       = Math.Pow(tracerPercents.GetElementCount(tracerDef.Name) / 100, tracerCount)
                                           * Choose(tracerTraceeCount, tracerCount);
                result *= probability;
                tracerSymbolCounts[tracerDef.TraceeSymbol] = tracerTraceeCount - tracerCount;
                traceePercents[tracerDef.TraceeSymbol]     = traceePercents[tracerDef.TraceeSymbol] -
                                                             tracerPercents.GetElementCount(tracerDef.Name) / 100;
            }
            foreach (var entry in tracerSymbolCounts)
            {
                result *= Math.Pow(traceePercents[entry.Key], entry.Value);
            }
            return(result);
        }