Exemplo n.º 1
0
        public TurnoverCalculator(Workspace workspace, String sequence)
        {
            Sequence = sequence;
            _errOnSideOfLowerAbundance = workspace.GetErrOnSideOfLowerAbundance();
            _aminoAcidFormulas         = workspace.GetAminoAcidFormulasWithTracers();
            _tracerDefs    = new Dictionary <String, TracerDef>();
            _traceeSymbols = new HashSet <String>();
            foreach (var tracerDef in workspace.GetTracerDefs())
            {
                if (!_traceeSymbols.Contains(tracerDef.TraceeSymbol))
                {
                    if (tracerDef.GetMaximumTracerCount(sequence) == 0)
                    {
                        continue;
                    }
                    _traceeSymbols.Add(tracerDef.TraceeSymbol);
                }
                _tracerDefs.Add(tracerDef.Name, tracerDef);
            }
            _maxTracerCount = workspace.GetMaxTracerCount(sequence);
            _masses         = new ReadOnlyCollection <MzRange>(GetMasses());
            var tracerFormulae = new List <TracerFormula>();

            _tracerFormulaIndexes = new Dictionary <TracerFormula, int>();
            var enumerator = new TracerFormulaEnumerator(Sequence, _tracerDefs.Values);

            while (enumerator.MoveNext())
            {
                _tracerFormulaIndexes.Add(enumerator.Current, tracerFormulae.Count);
                tracerFormulae.Add(enumerator.Current);
            }
            _tracerFormulae = ImmutableList.ValueOf(tracerFormulae);
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
        private List <MzRange> GetMasses()
        {
            var massesAndFrequency      = new Dictionary <double, double>();
            var tracerFormulaEnumerator = new TracerFormulaEnumerator(Sequence, _tracerDefs.Values);

            while (tracerFormulaEnumerator.MoveNext())
            {
                MassDistribution massDistribution = _aminoAcidFormulas.GetMassDistribution(
                    MoleculeFromTracerFormula(tracerFormulaEnumerator.Current), 0);
                massDistribution = massDistribution.OffsetAndDivide(_aminoAcidFormulas.GetMassShift(Sequence), 1);
                foreach (var entry in massDistribution)
                {
                    if (entry.Value < MinAbundance)
                    {
                        continue;
                    }
                    double currentAbundance;
                    massesAndFrequency.TryGetValue(entry.Key, out currentAbundance);
                    if (currentAbundance >= entry.Value)
                    {
                        continue;
                    }
                    massesAndFrequency[entry.Key] = entry.Value;
                }
            }
            var allMasses = new List <double>(massesAndFrequency.Keys);

            allMasses.Sort();
            var result = new List <MzRange>();

            foreach (var mass in allMasses)
            {
                if (result.Count == 0)
                {
                    result.Add(new MzRange(mass));
                    continue;
                }
                var lastMass = result[result.Count - 1];
                if (lastMass.Distance(mass) > MassResolution)
                {
                    result.Add(new MzRange(mass));
                    continue;
                }
                result[result.Count - 1] = lastMass.Union(mass);
            }
            return(result);
        }