예제 #1
0
        public static TypedMass GetFragmentMassFromFormula(SrmSettings settings, MoleculeMassOffset formula)
        {
            var      fragmentedMoleculeSettings = FragmentedMolecule.Settings.FromSrmSettings(settings);
            MassType massType = settings.TransitionSettings.Prediction.FragmentMassType;

            if (massType.IsMonoisotopic())
            {
                return(new TypedMass(fragmentedMoleculeSettings.GetMonoMass(formula.Molecule) + formula.MonoMassOffset + BioMassCalc.MassProton, MassType.MonoisotopicMassH));
            }
            else
            {
                return(new TypedMass(fragmentedMoleculeSettings.GetAverageMass(formula.Molecule) + formula.AverageMassOffset + BioMassCalc.MassProton, MassType.AverageMassH));
            }
        }
예제 #2
0
        public TypedMass GetPrecursorMass(MassType massType)
        {
            var    formula = GetPrecursorFormula();
            var    fragmentedMoleculeSettings = GetFragmentedMoleculeSettings();
            double mass = massType.IsMonoisotopic()
                ? fragmentedMoleculeSettings.GetMonoMass(formula)
                : fragmentedMoleculeSettings.GetAverageMass(formula);

            if (massType.IsMassH())
            {
                mass += BioMassCalc.MassProton;
            }

            return(new TypedMass(mass, massType));
        }
예제 #3
0
        public static Molecule AddFragmentLosses(Molecule molecule, IList <FragmentLoss> fragmentLosses,
                                                 MassType massType, ref double unexplainedMass)
        {
            MoleculeMassOffset moleculeMassOffset = new MoleculeMassOffset(molecule, unexplainedMass, unexplainedMass);

            foreach (var fragmentLoss in fragmentLosses)
            {
                moleculeMassOffset = moleculeMassOffset.Minus(ToMoleculeMassOffset(fragmentLoss));
            }

            if (massType.IsMonoisotopic())
            {
                unexplainedMass = moleculeMassOffset.MonoMassOffset;
            }
            else
            {
                unexplainedMass = moleculeMassOffset.AverageMassOffset;
            }
            return(moleculeMassOffset.Molecule);
        }
예제 #4
0
        private static Molecule GetSequenceFormula(ModifiedSequence modifiedSequence, MassType massType, out double unexplainedMassShift)
        {
            unexplainedMassShift = 0;
            var    molecule           = new Dictionary <string, int>();
            string unmodifiedSequence = modifiedSequence.GetUnmodifiedSequence();
            var    modifications      = modifiedSequence.GetModifications().ToLookup(mod => mod.IndexAA);

            for (int i = 0; i < unmodifiedSequence.Length; i++)
            {
                char aminoAcid = unmodifiedSequence[i];
                AddAminoAcidFormula(massType, aminoAcid, molecule, ref unexplainedMassShift);
                foreach (var mod in modifications[i])
                {
                    string formula = mod.Formula;
                    if (formula == null)
                    {
                        var staticMod = mod.StaticMod;
                        var aa        = unmodifiedSequence[i];
                        if ((staticMod.LabelAtoms & LabelAtoms.LabelsAA) != LabelAtoms.None && AminoAcid.IsAA(aa))
                        {
                            formula = SequenceMassCalc.GetHeavyFormula(aa, staticMod.LabelAtoms);
                        }
                    }
                    if (formula != null)
                    {
                        var modFormula = Molecule.ParseExpression(formula);
                        Add(molecule, modFormula);
                    }
                    else
                    {
                        unexplainedMassShift += massType.IsMonoisotopic() ? mod.MonoisotopicMass : mod.AverageMass;
                    }
                }
            }
            return(Molecule.FromDict(molecule));
        }
예제 #5
0
 public double GetMass(MassType massType)
 {
     return(massType.IsMonoisotopic() ? MonoisotopicMass : AverageMass);
 }
예제 #6
0
 public bool IsMonoIsotopic()
 {
     return(_massType.IsMonoisotopic());
 }