Beispiel #1
0
        /// <summary>
        /// Replace all of the crosslinked peptide with the mass of the crosslinker plus the mass of the linked peptide.
        /// </summary>
        public ModifiedSequence ReplaceCrosslinksWithMasses(SrmSettings settings, IsotopeLabelType labelType)
        {
            if (ExplicitMods.All(mod => null == mod.LinkedPeptideSequence))
            {
                return(this);
            }

            var newModifications = new List <Modification>(ExplicitMods.Count);

            foreach (var modification in ExplicitMods)
            {
                if (null == modification.LinkedPeptideSequence)
                {
                    newModifications.Add(modification);
                    continue;
                }
                var formula = modification.StaticMod.Formula;
                MoleculeMassOffset moleculeMassOffset;
                if (string.IsNullOrEmpty(formula))
                {
                    moleculeMassOffset = new MoleculeMassOffset(Molecule.Empty, modification.StaticMod.MonoisotopicMass ?? 0, modification.StaticMod.AverageMass ?? 0);
                }
                else
                {
                    moleculeMassOffset = new MoleculeMassOffset(Molecule.ParseExpression(formula), 0, 0);
                }
                moleculeMassOffset = moleculeMassOffset.Plus(modification.ExplicitMod.LinkedPeptide.GetNeutralFormula(settings, labelType));
                var fragmentedMoleculeSettings = FragmentedMolecule.Settings.FromSrmSettings(settings);
                moleculeMassOffset = fragmentedMoleculeSettings.ReplaceMoleculeWithMassOffset(moleculeMassOffset);
                Assume.IsTrue(0 == moleculeMassOffset.Molecule.Count);
                newModifications.Add(new Modification(modification.ExplicitMod, moleculeMassOffset.MonoMassOffset, moleculeMassOffset.AverageMassOffset));
            }
            return(new ModifiedSequence(_unmodifiedSequence, newModifications, _defaultMassType));
        }
Beispiel #2
0
            public MoleculeMassOffset ReplaceMoleculeWithMassOffset(MoleculeMassOffset moleculeMassOffset)
            {
                double monoMass    = GetMonoMass(moleculeMassOffset.Molecule) + moleculeMassOffset.MonoMassOffset;
                double averageMass = GetAverageMass(moleculeMassOffset.Molecule) + moleculeMassOffset.AverageMassOffset;

                return(new MoleculeMassOffset(Molecule.Empty, monoMass, averageMass));
            }
Beispiel #3
0
        public MoleculeMassOffset SubtractLosses(MoleculeMassOffset moleculeMassOffset, TransitionLosses transitionLosses)
        {
            if (transitionLosses == null)
            {
                return(moleculeMassOffset);
            }

            foreach (var loss in transitionLosses.Losses)
            {
                moleculeMassOffset = moleculeMassOffset.Minus(FragmentedMolecule.ToMoleculeMassOffset(loss.Loss));
            }

            return(moleculeMassOffset);
        }
Beispiel #4
0
        public MoleculeMassOffset GetPrecursorFormula()
        {
            var moleculeMassOffset = new MoleculeMassOffset(GetSimplePrecursorMolecule().PrecursorFormula);

            if (ExplicitMods != null)
            {
                foreach (var child in ExplicitMods.LinkedCrossslinks)
                {
                    moleculeMassOffset = moleculeMassOffset.Plus(GetChildBuilder(child.Key).GetPrecursorFormula());
                }
            }

            return(moleculeMassOffset);
        }
Beispiel #5
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));
            }
        }
Beispiel #6
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);
        }
Beispiel #7
0
        /// <summary>
        /// Returns the chemical formula for this fragment and none of its children.
        /// </summary>
        private MoleculeMassOffset GetSimpleFragmentFormula(ComplexFragmentIon complexFragmentIon)
        {
            if (complexFragmentIon.IsOrphan)
            {
                return(MoleculeMassOffset.EMPTY);
            }

            var key = Tuple.Create(complexFragmentIon.Transition.IonType, complexFragmentIon.Transition.CleavageOffset);
            MoleculeMassOffset moleculeMassOffset;

            if (_fragmentedMolecules.TryGetValue(key, out moleculeMassOffset))
            {
                return(moleculeMassOffset);
            }

            var fragmentedMolecule = GetSimplePrecursorMolecule().ChangeFragmentIon(complexFragmentIon.Transition.IonType, complexFragmentIon.Transition.Ordinal);

            moleculeMassOffset = new MoleculeMassOffset(fragmentedMolecule.FragmentFormula, 0, 0);
            _fragmentedMolecules.Add(key, moleculeMassOffset);
            return(moleculeMassOffset);
        }
Beispiel #8
0
 public double GetAverageMass(MoleculeMassOffset moleculeMassOffset)
 {
     return(GetAverageMass(moleculeMassOffset.Molecule) + moleculeMassOffset.AverageMassOffset);
 }
Beispiel #9
0
 public double GetMonoMass(MoleculeMassOffset moleculeMassOffset)
 {
     return(GetMonoMass(moleculeMassOffset.Molecule) + moleculeMassOffset.MonoMassOffset);
 }